UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

33 lines (32 loc) 1.34 kB
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(); } }