You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.8 KiB
53 lines
1.8 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = flushMicroTasks;
|
|
|
|
/* istanbul ignore file */
|
|
// the part of this file that we need tested is definitely being run
|
|
// and the part that is not cannot easily have useful tests written
|
|
// anyway. So we're just going to ignore coverage for this file
|
|
|
|
/**
|
|
* copied from React's enqueueTask.js
|
|
*/
|
|
let didWarnAboutMessageChannel = false;
|
|
let enqueueTask;
|
|
|
|
try {
|
|
// read require off the module object to get around the bundlers.
|
|
// we don't want them to detect a require and bundle a Node polyfill.
|
|
const requireString = `require${Math.random()}`.slice(0, 7);
|
|
const nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
|
|
// version of setImmediate, bypassing fake timers if any.
|
|
|
|
enqueueTask = nodeRequire('timers').setImmediate;
|
|
} catch (_err) {
|
|
// we're in a browser
|
|
// we can't use regular timers because they may still be faked
|
|
// so we try MessageChannel+postMessage instead
|
|
enqueueTask = callback => {
|
|
const supportsMessageChannel = typeof MessageChannel === 'function';
|
|
|
|
if (supportsMessageChannel) {
|
|
const channel = new MessageChannel();
|
|
channel.port1.onmessage = callback;
|
|
channel.port2.postMessage(undefined);
|
|
} else if (didWarnAboutMessageChannel === false) {
|
|
didWarnAboutMessageChannel = true; // eslint-disable-next-line no-console
|
|
|
|
console.error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');
|
|
}
|
|
};
|
|
}
|
|
|
|
function flushMicroTasks() {
|
|
return {
|
|
then(resolve) {
|
|
enqueueTask(resolve);
|
|
}
|
|
|
|
};
|
|
} |