135 lines
5.4 KiB
JavaScript
135 lines
5.4 KiB
JavaScript
/*! pseudo-worker
|
|
*
|
|
* License: MIT
|
|
* See https://github.com/chaoyangnz/webworker-polyfill/blob/master/LICENSE
|
|
*
|
|
* Copyright (c) 2018 Chao Yang
|
|
*/
|
|
!function(f) {
|
|
if ("object" == typeof exports && "undefined" != typeof module) module.exports = f(); else if ("function" == typeof define && define.amd) define([], f); else {
|
|
var g;
|
|
g = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this,
|
|
g.PseudoWorker = f();
|
|
}
|
|
}(function() {
|
|
var define, module, exports;
|
|
return function() {
|
|
function r(e, n, t) {
|
|
function o(i, f) {
|
|
if (!n[i]) {
|
|
if (!e[i]) {
|
|
var c = "function" == typeof require && require;
|
|
if (!f && c) return c(i, !0);
|
|
if (u) return u(i, !0);
|
|
var a = new Error("Cannot find module '" + i + "'");
|
|
throw a.code = "MODULE_NOT_FOUND", a;
|
|
}
|
|
var p = n[i] = {
|
|
exports: {}
|
|
};
|
|
e[i][0].call(p.exports, function(r) {
|
|
var n = e[i][1][r];
|
|
return o(n || r);
|
|
}, p, p.exports, r, e, n, t);
|
|
}
|
|
return n[i].exports;
|
|
}
|
|
for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]);
|
|
return o;
|
|
}
|
|
return r;
|
|
}()({
|
|
1: [ function(require, module, exports) {
|
|
(function(global) {
|
|
"use strict";
|
|
function doEval(self, __pseudoworker_script) {
|
|
(function() {
|
|
eval(__pseudoworker_script);
|
|
}).call(global);
|
|
}
|
|
function PseudoWorker(path) {
|
|
function executeEach(arr, fun) {
|
|
for (var i = -1; ++i < arr.length; ) arr[i] && fun(arr[i]);
|
|
}
|
|
function callErrorListener(err) {
|
|
return function(listener) {
|
|
listener({
|
|
type: "error",
|
|
error: err,
|
|
message: err.message
|
|
});
|
|
};
|
|
}
|
|
function addEventListener(type, fun) {
|
|
"message" === type ? messageListeners.push(fun) : "error" === type && errorListeners.push(fun);
|
|
}
|
|
function removeEventListener(type, fun) {
|
|
var listeners;
|
|
if ("message" === type) listeners = messageListeners; else {
|
|
if ("error" !== type) return;
|
|
listeners = errorListeners;
|
|
}
|
|
for (var i = -1; ++i < listeners.length; ) {
|
|
var listener = listeners[i];
|
|
if (listener === fun) {
|
|
delete listeners[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
function postError(err) {
|
|
var callFun = callErrorListener(err);
|
|
"function" == typeof api.onerror && callFun(api.onerror), workerSelf && "function" == typeof workerSelf.onerror && callFun(workerSelf.onerror),
|
|
executeEach(errorListeners, callFun), executeEach(workerErrorListeners, callFun);
|
|
}
|
|
function runPostMessage(msg) {
|
|
function callFun(listener) {
|
|
try {
|
|
listener({
|
|
data: msg
|
|
});
|
|
} catch (err) {
|
|
postError(err);
|
|
}
|
|
}
|
|
workerSelf && "function" == typeof workerSelf.onmessage && callFun(workerSelf.onmessage),
|
|
executeEach(workerMessageListeners, callFun);
|
|
}
|
|
function postMessage(msg) {
|
|
if ("undefined" == typeof msg) throw new Error("postMessage() requires an argument");
|
|
if (!terminated) return script ? void runPostMessage(msg) : void postMessageListeners.push(msg);
|
|
}
|
|
function terminate() {
|
|
terminated = !0;
|
|
}
|
|
function workerPostMessage(msg) {
|
|
function callFun(listener) {
|
|
listener({
|
|
data: msg
|
|
});
|
|
}
|
|
terminated || ("function" == typeof api.onmessage && callFun(api.onmessage), executeEach(messageListeners, callFun));
|
|
}
|
|
function workerAddEventListener(type, fun) {
|
|
"message" === type ? workerMessageListeners.push(fun) : "error" === type && workerErrorListeners.push(fun);
|
|
}
|
|
var script, workerSelf, messageListeners = [], errorListeners = [], workerMessageListeners = [], workerErrorListeners = [], postMessageListeners = [], terminated = !1, api = this, xhr = new XMLHttpRequest();
|
|
return xhr.open("GET", path), xhr.onreadystatechange = function() {
|
|
if (4 === xhr.readyState) if (xhr.status >= 200 && xhr.status < 400) {
|
|
script = xhr.responseText, workerSelf = {
|
|
postMessage: workerPostMessage,
|
|
addEventListener: workerAddEventListener,
|
|
close: terminate
|
|
}, doEval(workerSelf, script);
|
|
var currentListeners = postMessageListeners;
|
|
postMessageListeners = [];
|
|
for (var i = 0; i < currentListeners.length; i++) runPostMessage(currentListeners[i]);
|
|
} else postError(new Error("cannot find script " + path));
|
|
}, xhr.send(), api.postMessage = postMessage, api.addEventListener = addEventListener,
|
|
api.removeEventListener = removeEventListener, api.terminate = terminate, api;
|
|
}
|
|
module.exports = PseudoWorker;
|
|
}).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
|
|
}, {} ]
|
|
}, {}, [ 1 ])(1);
|
|
}); |