UNPKG

watermark-js-plus

Version:
140 lines (128 loc) 4.46 kB
import { __require as requireGlobalThis } from './global-this.js'; import { __require as requireFunctionApply } from './function-apply.js'; import { __require as requireFunctionBindContext } from './function-bind-context.js'; import { __require as requireIsCallable } from './is-callable.js'; import { __require as requireHasOwnProperty } from './has-own-property.js'; import { __require as requireFails } from './fails.js'; import { __require as requireHtml } from './html.js'; import { __require as requireArraySlice } from './array-slice.js'; import { __require as requireDocumentCreateElement } from './document-create-element.js'; import { __require as requireValidateArgumentsLength } from './validate-arguments-length.js'; import { __require as requireEnvironmentIsIos } from './environment-is-ios.js'; import { __require as requireEnvironmentIsNode } from './environment-is-node.js'; var task; var hasRequiredTask; function requireTask () { if (hasRequiredTask) return task; hasRequiredTask = 1; var globalThis = requireGlobalThis(); var apply = requireFunctionApply(); var bind = requireFunctionBindContext(); var isCallable = requireIsCallable(); var hasOwn = requireHasOwnProperty(); var fails = requireFails(); var html = requireHtml(); var arraySlice = requireArraySlice(); var createElement = requireDocumentCreateElement(); var validateArgumentsLength = requireValidateArgumentsLength(); var IS_IOS = requireEnvironmentIsIos(); var IS_NODE = requireEnvironmentIsNode(); var set = globalThis.setImmediate; var clear = globalThis.clearImmediate; var process = globalThis.process; var Dispatch = globalThis.Dispatch; var Function = globalThis.Function; var MessageChannel = globalThis.MessageChannel; var String = globalThis.String; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var $location, defer, channel, port; fails(function () { // Deno throws a ReferenceError on `location` access without `--location` flag $location = globalThis.location; }); var run = function (id) { if (hasOwn(queue, id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var runner = function (id) { return function () { run(id); }; }; var eventListener = function (event) { run(event.data); }; var globalPostMessageDefer = function (id) { // old engines have not location.origin globalThis.postMessage(String(id), $location.protocol + '//' + $location.host); }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: if (!set || !clear) { set = function setImmediate(handler) { validateArgumentsLength(arguments.length, 1); var fn = isCallable(handler) ? handler : Function(handler); var args = arraySlice(arguments, 1); queue[++counter] = function () { apply(fn, undefined, args); }; defer(counter); return counter; }; clear = function clearImmediate(id) { delete queue[id]; }; // Node.js 0.8- if (IS_NODE) { defer = function (id) { process.nextTick(runner(id)); }; // Sphere (JS game engine) Dispatch API } else if (Dispatch && Dispatch.now) { defer = function (id) { Dispatch.now(runner(id)); }; // Browsers with MessageChannel, includes WebWorkers // except iOS - https://github.com/zloirock/core-js/issues/624 } else if (MessageChannel && !IS_IOS) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = eventListener; defer = bind(port.postMessage, port); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' } else if ( globalThis.addEventListener && isCallable(globalThis.postMessage) && !globalThis.importScripts && $location && $location.protocol !== 'file:' && !fails(globalPostMessageDefer) ) { defer = globalPostMessageDefer; globalThis.addEventListener('message', eventListener, false); // IE8- } else if (ONREADYSTATECHANGE in createElement('script')) { defer = function (id) { html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run(id); }; }; // Rest old browsers } else { defer = function (id) { setTimeout(runner(id), 0); }; } } task = { set: set, clear: clear }; return task; } export { requireTask as __require };