@lifaon/rx-js-light
Version:
Blazing fast Observables
33 lines (32 loc) • 1.34 kB
JavaScript
import {messageChannelImplementation} from "./message-channel-implementation.mjs";
import {nextTickImplementation} from "./next-tick-implementation.mjs";
import {postMessageImplementation} from "./post-message-implementation.mjs";
import {readyStateChangeImplementation} from "./ready-state-change-implementation.mjs";
import {setTimeoutImplementation} from "./set-timeout-implementation.mjs";
function canUsePostMessage(global) {
if (global.postMessage && !global.importScripts) {
let postMessageIsAsynchronous = true;
let oldOnMessage = global.onmessage;
global.onmessage = () => {
postMessageIsAsynchronous = false;
};
global.postMessage('', '*');
global.onmessage = oldOnMessage;
return postMessageIsAsynchronous;
} else {
return false;
}
}
export function getRegisterImmediateImplementation(global) {
if (({}).toString.call(global.process) === '[object process]') {
return nextTickImplementation(global.process);
} else if (canUsePostMessage(global)) {
return postMessageImplementation(global);
} else if (global.MessageChannel) {
return messageChannelImplementation();
} else if (global.document && ('onreadystatechange' in global.document.createElement('script'))) {
return readyStateChangeImplementation(global);
} else {
return setTimeoutImplementation();
}
}