1
- import {
2
- unstable_scheduleCallback as scheduleCallback ,
3
- unstable_NormalPriority as normalPriority ,
4
- } from 'scheduler'
5
1
/* istanbul ignore file */
6
2
// the part of this file that we need tested is definitely being run
7
3
// and the part that is not cannot easily have useful tests written
@@ -21,6 +17,10 @@ function getIsUsingFakeTimers() {
21
17
22
18
let didWarnAboutMessageChannel = false
23
19
let enqueueTask
20
+ const globalObj = typeof window === 'undefined' ? global : window
21
+
22
+ let Scheduler = globalObj . Scheduler
23
+
24
24
try {
25
25
// read require off the module object to get around the bundlers.
26
26
// we don't want them to detect a require and bundle a Node polyfill.
29
29
// assuming we're in node, let's try to get node's
30
30
// version of setImmediate, bypassing fake timers if any.
31
31
enqueueTask = nodeRequire . call ( module , 'timers' ) . setImmediate
32
+ // import React's scheduler so we'll be able to schedule our tasks later on.
33
+ Scheduler = nodeRequire . call ( module , 'scheduler' )
32
34
} catch ( _err ) {
33
35
// we're in a browser
34
36
// we can't use regular timers because they may still be faked
53
55
}
54
56
}
55
57
58
+ // in case this react version has a Scheduler implementation, we use it,
59
+ // if not, we just create a function calling our callback
60
+ const scheduleCallback = Scheduler
61
+ ? Scheduler . scheduleCallback || Scheduler . unstable_scheduleCallback
62
+ : ( _ , cb ) => cb ( )
63
+ const NormalPriority = Scheduler
64
+ ? Scheduler . NormalPriority || Scheduler . unstable_NormalPriority
65
+ : null
66
+
56
67
export default function flushMicroTasks ( ) {
57
68
return {
58
69
then ( resolve ) {
@@ -63,7 +74,7 @@ export default function flushMicroTasks() {
63
74
jest . advanceTimersByTime ( 0 )
64
75
resolve ( )
65
76
} else {
66
- scheduleCallback ( normalPriority , ( ) => {
77
+ scheduleCallback ( NormalPriority , ( ) => {
67
78
enqueueTask ( ( ) => {
68
79
resolve ( )
69
80
} )
0 commit comments