Created
September 7, 2019 16:15
-
-
Save andywer/f5572520b103e0673204e3d11cd20404 to your computer and use it in GitHub Desktop.
Hello world threads.js worker (compiled)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******/ (function(modules) { // webpackBootstrap | |
/******/ // The module cache | |
/******/ var installedModules = {}; | |
/******/ | |
/******/ // The require function | |
/******/ function __webpack_require__(moduleId) { | |
/******/ | |
/******/ // Check if module is in cache | |
/******/ if(installedModules[moduleId]) { | |
/******/ return installedModules[moduleId].exports; | |
/******/ } | |
/******/ // Create a new module (and put it into the cache) | |
/******/ var module = installedModules[moduleId] = { | |
/******/ i: moduleId, | |
/******/ l: false, | |
/******/ exports: {} | |
/******/ }; | |
/******/ | |
/******/ // Execute the module function | |
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | |
/******/ | |
/******/ // Flag the module as loaded | |
/******/ module.l = true; | |
/******/ | |
/******/ // Return the exports of the module | |
/******/ return module.exports; | |
/******/ } | |
/******/ | |
/******/ | |
/******/ // expose the modules object (__webpack_modules__) | |
/******/ __webpack_require__.m = modules; | |
/******/ | |
/******/ // expose the module cache | |
/******/ __webpack_require__.c = installedModules; | |
/******/ | |
/******/ // define getter function for harmony exports | |
/******/ __webpack_require__.d = function(exports, name, getter) { | |
/******/ if(!__webpack_require__.o(exports, name)) { | |
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); | |
/******/ } | |
/******/ }; | |
/******/ | |
/******/ // define __esModule on exports | |
/******/ __webpack_require__.r = function(exports) { | |
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { | |
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | |
/******/ } | |
/******/ Object.defineProperty(exports, '__esModule', { value: true }); | |
/******/ }; | |
/******/ | |
/******/ // create a fake namespace object | |
/******/ // mode & 1: value is a module id, require it | |
/******/ // mode & 2: merge all properties of value into the ns | |
/******/ // mode & 4: return value when already ns object | |
/******/ // mode & 8|1: behave like require | |
/******/ __webpack_require__.t = function(value, mode) { | |
/******/ if(mode & 1) value = __webpack_require__(value); | |
/******/ if(mode & 8) return value; | |
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; | |
/******/ var ns = Object.create(null); | |
/******/ __webpack_require__.r(ns); | |
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); | |
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); | |
/******/ return ns; | |
/******/ }; | |
/******/ | |
/******/ // getDefaultExport function for compatibility with non-harmony modules | |
/******/ __webpack_require__.n = function(module) { | |
/******/ var getter = module && module.__esModule ? | |
/******/ function getDefault() { return module['default']; } : | |
/******/ function getModuleExports() { return module; }; | |
/******/ __webpack_require__.d(getter, 'a', getter); | |
/******/ return getter; | |
/******/ }; | |
/******/ | |
/******/ // Object.prototype.hasOwnProperty.call | |
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | |
/******/ | |
/******/ // __webpack_public_path__ | |
/******/ __webpack_require__.p = ""; | |
/******/ | |
/******/ | |
/******/ // Load entry module and return exports | |
/******/ return __webpack_require__(__webpack_require__.s = "../../node_modules/ts-loader/index.js?!./pool-worker.ts"); | |
/******/ }) | |
/************************************************************************/ | |
/******/ ({ | |
/***/ "../../node_modules/is-observable/index.js": | |
/*!*************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/is-observable/index.js ***! | |
\*************************************************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports, __webpack_require__) { | |
"use strict"; | |
const symbolObservable = __webpack_require__(/*! symbol-observable */ "../../node_modules/symbol-observable/es/index.js").default; | |
module.exports = value => Boolean(value && value[symbolObservable] && value === value[symbolObservable]()); | |
/***/ }), | |
/***/ "../../node_modules/process/browser.js": | |
/*!*********************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/process/browser.js ***! | |
\*********************************************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
// shim for using process in browser | |
var process = module.exports = {}; | |
// cached from whatever global is present so that test runners that stub it | |
// don't break things. But we need to wrap it in a try catch in case it is | |
// wrapped in strict mode code which doesn't define any globals. It's inside a | |
// function because try/catches deoptimize in certain engines. | |
var cachedSetTimeout; | |
var cachedClearTimeout; | |
function defaultSetTimout() { | |
throw new Error('setTimeout has not been defined'); | |
} | |
function defaultClearTimeout () { | |
throw new Error('clearTimeout has not been defined'); | |
} | |
(function () { | |
try { | |
if (typeof setTimeout === 'function') { | |
cachedSetTimeout = setTimeout; | |
} else { | |
cachedSetTimeout = defaultSetTimout; | |
} | |
} catch (e) { | |
cachedSetTimeout = defaultSetTimout; | |
} | |
try { | |
if (typeof clearTimeout === 'function') { | |
cachedClearTimeout = clearTimeout; | |
} else { | |
cachedClearTimeout = defaultClearTimeout; | |
} | |
} catch (e) { | |
cachedClearTimeout = defaultClearTimeout; | |
} | |
} ()) | |
function runTimeout(fun) { | |
if (cachedSetTimeout === setTimeout) { | |
//normal enviroments in sane situations | |
return setTimeout(fun, 0); | |
} | |
// if setTimeout wasn't available but was latter defined | |
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { | |
cachedSetTimeout = setTimeout; | |
return setTimeout(fun, 0); | |
} | |
try { | |
// when when somebody has screwed with setTimeout but no I.E. maddness | |
return cachedSetTimeout(fun, 0); | |
} catch(e){ | |
try { | |
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | |
return cachedSetTimeout.call(null, fun, 0); | |
} catch(e){ | |
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error | |
return cachedSetTimeout.call(this, fun, 0); | |
} | |
} | |
} | |
function runClearTimeout(marker) { | |
if (cachedClearTimeout === clearTimeout) { | |
//normal enviroments in sane situations | |
return clearTimeout(marker); | |
} | |
// if clearTimeout wasn't available but was latter defined | |
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { | |
cachedClearTimeout = clearTimeout; | |
return clearTimeout(marker); | |
} | |
try { | |
// when when somebody has screwed with setTimeout but no I.E. maddness | |
return cachedClearTimeout(marker); | |
} catch (e){ | |
try { | |
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | |
return cachedClearTimeout.call(null, marker); | |
} catch (e){ | |
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. | |
// Some versions of I.E. have different rules for clearTimeout vs setTimeout | |
return cachedClearTimeout.call(this, marker); | |
} | |
} | |
} | |
var queue = []; | |
var draining = false; | |
var currentQueue; | |
var queueIndex = -1; | |
function cleanUpNextTick() { | |
if (!draining || !currentQueue) { | |
return; | |
} | |
draining = false; | |
if (currentQueue.length) { | |
queue = currentQueue.concat(queue); | |
} else { | |
queueIndex = -1; | |
} | |
if (queue.length) { | |
drainQueue(); | |
} | |
} | |
function drainQueue() { | |
if (draining) { | |
return; | |
} | |
var timeout = runTimeout(cleanUpNextTick); | |
draining = true; | |
var len = queue.length; | |
while(len) { | |
currentQueue = queue; | |
queue = []; | |
while (++queueIndex < len) { | |
if (currentQueue) { | |
currentQueue[queueIndex].run(); | |
} | |
} | |
queueIndex = -1; | |
len = queue.length; | |
} | |
currentQueue = null; | |
draining = false; | |
runClearTimeout(timeout); | |
} | |
process.nextTick = function (fun) { | |
var args = new Array(arguments.length - 1); | |
if (arguments.length > 1) { | |
for (var i = 1; i < arguments.length; i++) { | |
args[i - 1] = arguments[i]; | |
} | |
} | |
queue.push(new Item(fun, args)); | |
if (queue.length === 1 && !draining) { | |
runTimeout(drainQueue); | |
} | |
}; | |
// v8 likes predictible objects | |
function Item(fun, array) { | |
this.fun = fun; | |
this.array = array; | |
} | |
Item.prototype.run = function () { | |
this.fun.apply(null, this.array); | |
}; | |
process.title = 'browser'; | |
process.browser = true; | |
process.env = {}; | |
process.argv = []; | |
process.version = ''; // empty string to avoid regexp issues | |
process.versions = {}; | |
function noop() {} | |
process.on = noop; | |
process.addListener = noop; | |
process.once = noop; | |
process.off = noop; | |
process.removeListener = noop; | |
process.removeAllListeners = noop; | |
process.emit = noop; | |
process.prependListener = noop; | |
process.prependOnceListener = noop; | |
process.listeners = function (name) { return [] } | |
process.binding = function (name) { | |
throw new Error('process.binding is not supported'); | |
}; | |
process.cwd = function () { return '/' }; | |
process.chdir = function (dir) { | |
throw new Error('process.chdir is not supported'); | |
}; | |
process.umask = function() { return 0; }; | |
/***/ }), | |
/***/ "../../node_modules/symbol-observable/es/index.js": | |
/*!********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/symbol-observable/es/index.js ***! | |
\********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(global, module) {/* harmony import */ var _ponyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ponyfill.js */ "../../node_modules/symbol-observable/es/ponyfill.js"); | |
/* global window */ | |
var root; | |
if (typeof self !== 'undefined') { | |
root = self; | |
} else if (typeof window !== 'undefined') { | |
root = window; | |
} else if (typeof global !== 'undefined') { | |
root = global; | |
} else if (true) { | |
root = module; | |
} else {} | |
var result = Object(_ponyfill_js__WEBPACK_IMPORTED_MODULE_0__["default"])(root); | |
/* harmony default export */ __webpack_exports__["default"] = (result); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "../../node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../webpack/buildin/harmony-module.js */ "../../node_modules/webpack/buildin/harmony-module.js")(module))) | |
/***/ }), | |
/***/ "../../node_modules/symbol-observable/es/ponyfill.js": | |
/*!***********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/symbol-observable/es/ponyfill.js ***! | |
\***********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return symbolObservablePonyfill; }); | |
function symbolObservablePonyfill(root) { | |
var result; | |
var Symbol = root.Symbol; | |
if (typeof Symbol === 'function') { | |
if (Symbol.observable) { | |
result = Symbol.observable; | |
} else { | |
result = Symbol('observable'); | |
Symbol.observable = result; | |
} | |
} else { | |
result = '@@observable'; | |
} | |
return result; | |
}; | |
/***/ }), | |
/***/ "../../node_modules/ts-loader/index.js?!./pool-worker.ts": | |
/*!*************************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/ts-loader??ref--4!./pool-worker.ts ***! | |
\*************************************************************************************/ | |
/*! no exports provided */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony import */ var _src_worker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../src/worker */ "../../src/worker/index.ts"); | |
Object(_src_worker__WEBPACK_IMPORTED_MODULE_0__["expose"])(function hello(text) { | |
return `Hello, ${text}`; | |
}); | |
/***/ }), | |
/***/ "../../node_modules/webpack/buildin/global.js": | |
/*!***********************************!*\ | |
!*** (webpack)/buildin/global.js ***! | |
\***********************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
var g; | |
// This works in non-strict mode | |
g = (function() { | |
return this; | |
})(); | |
try { | |
// This works if eval is allowed (see CSP) | |
g = g || new Function("return this")(); | |
} catch (e) { | |
// This works if the window reference is available | |
if (typeof window === "object") g = window; | |
} | |
// g can still be undefined, but nothing to do about it... | |
// We return undefined, instead of nothing here, so it's | |
// easier to handle this case. if(!global) { ...} | |
module.exports = g; | |
/***/ }), | |
/***/ "../../node_modules/webpack/buildin/harmony-module.js": | |
/*!*******************************************!*\ | |
!*** (webpack)/buildin/harmony-module.js ***! | |
\*******************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
module.exports = function(originalModule) { | |
if (!originalModule.webpackPolyfill) { | |
var module = Object.create(originalModule); | |
// module.parent = undefined by default | |
if (!module.children) module.children = []; | |
Object.defineProperty(module, "loaded", { | |
enumerable: true, | |
get: function() { | |
return module.l; | |
} | |
}); | |
Object.defineProperty(module, "id", { | |
enumerable: true, | |
get: function() { | |
return module.i; | |
} | |
}); | |
Object.defineProperty(module, "exports", { | |
enumerable: true | |
}); | |
module.webpackPolyfill = 1; | |
} | |
return module; | |
}; | |
/***/ }), | |
/***/ "../../src/common.ts": | |
/*!***************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/common.ts ***! | |
\***************************************************/ | |
/*! exports provided: rehydrateError, serializeError */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rehydrateError", function() { return rehydrateError; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeError", function() { return serializeError; }); | |
function rehydrateError(error) { | |
return Object.assign(Error(error.message), { | |
name: error.name, | |
stack: error.stack | |
}); | |
} | |
function serializeError(error) { | |
return { | |
message: error.message, | |
name: error.name, | |
stack: error.stack | |
}; | |
} | |
/***/ }), | |
/***/ "../../src/symbols.ts": | |
/*!****************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/symbols.ts ***! | |
\****************************************************/ | |
/*! exports provided: $errors, $events, $terminate, $transferable, $worker */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$errors", function() { return $errors; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$events", function() { return $events; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$terminate", function() { return $terminate; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$transferable", function() { return $transferable; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$worker", function() { return $worker; }); | |
const $errors = Symbol("thread.errors"); | |
const $events = Symbol("thread.events"); | |
const $terminate = Symbol("thread.terminate"); | |
const $transferable = Symbol("thread.transferable"); | |
const $worker = Symbol("thread.worker"); | |
/***/ }), | |
/***/ "../../src/transferable.ts": | |
/*!*********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/transferable.ts ***! | |
\*********************************************************/ | |
/*! exports provided: isTransferDescriptor, Transfer */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTransferDescriptor", function() { return isTransferDescriptor; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transfer", function() { return Transfer; }); | |
/* harmony import */ var _symbols__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./symbols */ "../../src/symbols.ts"); | |
function isTransferable(thing) { | |
if (!thing || typeof thing !== "object") | |
return false; | |
// Don't check too thoroughly, since the list of transferable things in JS might grow over time | |
return true; | |
} | |
function isTransferDescriptor(thing) { | |
return thing && typeof thing === "object" && thing[_symbols__WEBPACK_IMPORTED_MODULE_0__["$transferable"]]; | |
} | |
/** | |
* Mark transferable objects within an arbitrary object or array as | |
* being a transferable object. They will then not be serialized | |
* and deserialized on messaging with the main thread, but ownership | |
* of them will be tranferred to the receiving thread. | |
* | |
* Only array buffers, message ports and few more special types of | |
* objects can be transferred, but it's much faster than serializing and | |
* deserializing them. | |
* | |
* Note: | |
* The transferable object cannot be accessed by this thread again | |
* unless the receiving thread transfers it back again! | |
* | |
* @param transferable Array buffer, message port or similar. | |
* @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast> | |
*/ | |
function Transfer(payload, transferables) { | |
if (!transferables) { | |
if (!isTransferable(payload)) | |
throw Error(); | |
transferables = [payload]; | |
} | |
return { | |
[_symbols__WEBPACK_IMPORTED_MODULE_0__["$transferable"]]: true, | |
send: payload, | |
transferables | |
}; | |
} | |
/***/ }), | |
/***/ "../../src/types/messages.ts": | |
/*!***********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/types/messages.ts ***! | |
\***********************************************************/ | |
/*! exports provided: MasterMessageType, WorkerMessageType */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MasterMessageType", function() { return MasterMessageType; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkerMessageType", function() { return WorkerMessageType; }); | |
///////////////////////////// | |
// Messages sent by master: | |
var MasterMessageType; | |
(function (MasterMessageType) { | |
MasterMessageType["run"] = "run"; | |
})(MasterMessageType || (MasterMessageType = {})); | |
//////////////////////////// | |
// Messages sent by worker: | |
var WorkerMessageType; | |
(function (WorkerMessageType) { | |
WorkerMessageType["error"] = "error"; | |
WorkerMessageType["init"] = "init"; | |
WorkerMessageType["result"] = "result"; | |
WorkerMessageType["running"] = "running"; | |
WorkerMessageType["uncaughtError"] = "uncaughtError"; | |
})(WorkerMessageType || (WorkerMessageType = {})); | |
/***/ }), | |
/***/ "../../src/worker/implementation.browser.ts": | |
/*!**************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.browser.ts ***! | |
\**************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/// <reference no-default-lib="true"/> | |
/// <reference types="../../types/webworker" /> | |
// tslint:disable no-shadowed-variable | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return typeof self !== "undefined" && self.postMessage ? true : false; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data, transferList) { | |
self.postMessage(data, transferList); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
const messageHandler = (messageEvent) => { | |
onMessage(messageEvent.data); | |
}; | |
const unsubscribe = () => { | |
self.removeEventListener("message", messageHandler); | |
}; | |
self.addEventListener("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/***/ }), | |
/***/ "../../src/worker/implementation.tiny-worker.ts": | |
/*!******************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.tiny-worker.ts ***! | |
\******************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(global) {/// <reference no-default-lib="true"/> | |
/// <reference types="../../types/webworker" /> | |
// tslint:disable no-shadowed-variable | |
if (typeof self === "undefined") { | |
global.self = global; | |
} | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return typeof self !== "undefined" && self.postMessage ? true : false; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data) { | |
// TODO: Warn that Transferables are not supported on first attempt to use feature | |
self.postMessage(data); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
const messageHandler = (messageEvent) => { | |
onMessage(messageEvent.data); | |
}; | |
const unsubscribe = () => { | |
self.removeEventListener("message", messageHandler); | |
}; | |
self.addEventListener("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ "../../node_modules/webpack/buildin/global.js"))) | |
/***/ }), | |
/***/ "../../src/worker/implementation.ts": | |
/*!******************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.ts ***! | |
\******************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(process) {// tslint:disable no-var-requires | |
/* | |
* This file is only a stub to make './implementation' resolve to the right module. | |
*/ | |
function selectNodeImplementation() { | |
try { | |
return __webpack_require__(/*! ./implementation.worker_threads */ "../../src/worker/implementation.worker_threads.ts").default; | |
} | |
catch (error) { | |
return __webpack_require__(/*! ./implementation.tiny-worker */ "../../src/worker/implementation.tiny-worker.ts").default; | |
} | |
} | |
/* harmony default export */ __webpack_exports__["default"] = (typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process | |
? selectNodeImplementation() | |
: __webpack_require__(/*! ./implementation.browser */ "../../src/worker/implementation.browser.ts").default); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "../../node_modules/process/browser.js"))) | |
/***/ }), | |
/***/ "../../src/worker/implementation.worker_threads.ts": | |
/*!*********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.worker_threads.ts ***! | |
\*********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony import */ var _worker_threads__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../worker_threads */ "../../src/worker_threads.ts"); | |
function assertMessagePort(port) { | |
if (!port) { | |
throw Error("Invariant violation: MessagePort to parent is not available."); | |
} | |
return port; | |
} | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return !_worker_threads__WEBPACK_IMPORTED_MODULE_0__["isMainThread"]; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data, transferList) { | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).postMessage(data, transferList); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
if (!_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]) { | |
throw Error("Invariant violation: MessagePort to parent is not available."); | |
} | |
const messageHandler = (message) => { | |
onMessage(message); | |
}; | |
const unsubscribe = () => { | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).off("message", messageHandler); | |
}; | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).on("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/***/ }), | |
/***/ "../../src/worker/index.ts": | |
/*!*********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/index.ts ***! | |
\*********************************************************/ | |
/*! exports provided: Transfer, expose */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expose", function() { return expose; }); | |
/* harmony import */ var is_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-observable */ "../../node_modules/is-observable/index.js"); | |
/* harmony import */ var is_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(is_observable__WEBPACK_IMPORTED_MODULE_0__); | |
/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common */ "../../src/common.ts"); | |
/* harmony import */ var _transferable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transferable */ "../../src/transferable.ts"); | |
/* harmony import */ var _types_messages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types/messages */ "../../src/types/messages.ts"); | |
/* harmony import */ var _implementation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./implementation */ "../../src/worker/implementation.ts"); | |
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Transfer", function() { return _transferable__WEBPACK_IMPORTED_MODULE_2__["Transfer"]; }); | |
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { | |
return new (P || (P = Promise))(function (resolve, reject) { | |
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | |
step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
}); | |
}; | |
let exposeCalled = false; | |
const isMasterJobRunMessage = (thing) => thing && thing.type === _types_messages__WEBPACK_IMPORTED_MODULE_3__["MasterMessageType"].run; | |
/** There are issues with `is-observable` not recognizing zen-observable's instances */ | |
const isObservable = (thing) => is_observable__WEBPACK_IMPORTED_MODULE_0___default()(thing) || isZenObservable(thing); | |
function isZenObservable(thing) { | |
return thing && typeof thing === "object" && typeof thing.subscribe === "function"; | |
} | |
function deconstructTransfer(thing) { | |
return Object(_transferable__WEBPACK_IMPORTED_MODULE_2__["isTransferDescriptor"])(thing) | |
? { payload: thing.send, transferables: thing.transferables } | |
: { payload: thing, transferables: undefined }; | |
} | |
function postFunctionInitMessage() { | |
const initMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].init, | |
exposed: { | |
type: "function" | |
} | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(initMessage); | |
} | |
function postModuleInitMessage(methodNames) { | |
const initMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].init, | |
exposed: { | |
type: "module", | |
methods: methodNames | |
} | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(initMessage); | |
} | |
function postJobErrorMessage(uid, rawError) { | |
const { payload: error, transferables } = deconstructTransfer(rawError); | |
const errorMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].error, | |
uid, | |
error: Object(_common__WEBPACK_IMPORTED_MODULE_1__["serializeError"])(error) | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(errorMessage, transferables); | |
} | |
function postJobResultMessage(uid, completed, resultValue) { | |
const { payload, transferables } = deconstructTransfer(resultValue); | |
const startMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].result, | |
uid, | |
complete: completed ? true : undefined, | |
payload | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(startMessage, transferables); | |
} | |
function postJobStartMessage(uid, resultType) { | |
const startMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].running, | |
uid, | |
resultType | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(startMessage); | |
} | |
function postUncaughtErrorMessage(error) { | |
const errorMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].uncaughtError, | |
error: Object(_common__WEBPACK_IMPORTED_MODULE_1__["serializeError"])(error) | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(errorMessage); | |
} | |
function runFunction(jobUID, fn, args) { | |
return __awaiter(this, void 0, void 0, function* () { | |
let syncResult; | |
try { | |
syncResult = fn(...args); | |
} | |
catch (error) { | |
return postJobErrorMessage(jobUID, error); | |
} | |
const resultType = isObservable(syncResult) ? "observable" : "promise"; | |
postJobStartMessage(jobUID, resultType); | |
if (isObservable(syncResult)) { | |
syncResult.subscribe(value => postJobResultMessage(jobUID, false, value), error => postJobErrorMessage(jobUID, error), () => postJobResultMessage(jobUID, true)); | |
} | |
else { | |
try { | |
const result = yield syncResult; | |
postJobResultMessage(jobUID, true, result); | |
} | |
catch (error) { | |
postJobErrorMessage(jobUID, error); | |
} | |
} | |
}); | |
} | |
/** | |
* Expose a function or a module (an object whose values are functions) | |
* to the main thread. Must be called exactly once in every worker thread | |
* to signal its API to the main thread. | |
* | |
* @param exposed Function or object whose values are functions | |
*/ | |
function expose(exposed) { | |
if (!_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
throw Error("expose() called in the master thread."); | |
} | |
if (exposeCalled) { | |
throw Error("expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions."); | |
} | |
exposeCalled = true; | |
if (typeof exposed === "function") { | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].subscribeToMasterMessages(messageData => { | |
if (isMasterJobRunMessage(messageData) && !messageData.method) { | |
runFunction(messageData.uid, exposed, messageData.args); | |
} | |
}); | |
postFunctionInitMessage(); | |
} | |
else if (typeof exposed === "object" && exposed) { | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].subscribeToMasterMessages(messageData => { | |
if (isMasterJobRunMessage(messageData) && messageData.method) { | |
runFunction(messageData.uid, exposed[messageData.method], messageData.args); | |
} | |
}); | |
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === "function"); | |
postModuleInitMessage(methodNames); | |
} | |
else { | |
throw Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`); | |
} | |
} | |
if (typeof self !== "undefined" && typeof self.addEventListener === "function" && _implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
self.addEventListener("error", event => { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(event.error), 250); | |
}); | |
self.addEventListener("unhandledrejection", event => { | |
const error = event.reason; | |
if (error && typeof error.message === "string") { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
} | |
}); | |
} | |
if (typeof process !== "undefined" && typeof process.on === "function" && _implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
process.on("uncaughtException", (error) => { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
}); | |
process.on("unhandledRejection", (error) => { | |
if (error && typeof error.message === "string") { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
} | |
}); | |
} | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "../../node_modules/process/browser.js"))) | |
/***/ }), | |
/***/ "../../src/worker_threads.ts": | |
/*!***********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker_threads.ts ***! | |
\***********************************************************/ | |
/*! exports provided: MessagePort, isMainThread, parentPort */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessagePort", function() { return MessagePort; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isMainThread", function() { return isMainThread; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parentPort", function() { return parentPort; }); | |
// Webpack hack | |
// tslint:disable no-eval | |
const workerThreads = typeof require === "function" | |
? require("worker_threads") | |
: eval("require")("worker_threads"); | |
const MessagePort = workerThreads.MessagePort; | |
const isMainThread = workerThreads.isMainThread; | |
const parentPort = workerThreads.parentPort; | |
/***/ }) | |
/******/ });/******/ (function(modules) { // webpackBootstrap | |
/******/ // The module cache | |
/******/ var installedModules = {}; | |
/******/ | |
/******/ // The require function | |
/******/ function __webpack_require__(moduleId) { | |
/******/ | |
/******/ // Check if module is in cache | |
/******/ if(installedModules[moduleId]) { | |
/******/ return installedModules[moduleId].exports; | |
/******/ } | |
/******/ // Create a new module (and put it into the cache) | |
/******/ var module = installedModules[moduleId] = { | |
/******/ i: moduleId, | |
/******/ l: false, | |
/******/ exports: {} | |
/******/ }; | |
/******/ | |
/******/ // Execute the module function | |
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | |
/******/ | |
/******/ // Flag the module as loaded | |
/******/ module.l = true; | |
/******/ | |
/******/ // Return the exports of the module | |
/******/ return module.exports; | |
/******/ } | |
/******/ | |
/******/ | |
/******/ // expose the modules object (__webpack_modules__) | |
/******/ __webpack_require__.m = modules; | |
/******/ | |
/******/ // expose the module cache | |
/******/ __webpack_require__.c = installedModules; | |
/******/ | |
/******/ // define getter function for harmony exports | |
/******/ __webpack_require__.d = function(exports, name, getter) { | |
/******/ if(!__webpack_require__.o(exports, name)) { | |
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); | |
/******/ } | |
/******/ }; | |
/******/ | |
/******/ // define __esModule on exports | |
/******/ __webpack_require__.r = function(exports) { | |
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { | |
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | |
/******/ } | |
/******/ Object.defineProperty(exports, '__esModule', { value: true }); | |
/******/ }; | |
/******/ | |
/******/ // create a fake namespace object | |
/******/ // mode & 1: value is a module id, require it | |
/******/ // mode & 2: merge all properties of value into the ns | |
/******/ // mode & 4: return value when already ns object | |
/******/ // mode & 8|1: behave like require | |
/******/ __webpack_require__.t = function(value, mode) { | |
/******/ if(mode & 1) value = __webpack_require__(value); | |
/******/ if(mode & 8) return value; | |
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; | |
/******/ var ns = Object.create(null); | |
/******/ __webpack_require__.r(ns); | |
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); | |
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); | |
/******/ return ns; | |
/******/ }; | |
/******/ | |
/******/ // getDefaultExport function for compatibility with non-harmony modules | |
/******/ __webpack_require__.n = function(module) { | |
/******/ var getter = module && module.__esModule ? | |
/******/ function getDefault() { return module['default']; } : | |
/******/ function getModuleExports() { return module; }; | |
/******/ __webpack_require__.d(getter, 'a', getter); | |
/******/ return getter; | |
/******/ }; | |
/******/ | |
/******/ // Object.prototype.hasOwnProperty.call | |
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | |
/******/ | |
/******/ // __webpack_public_path__ | |
/******/ __webpack_require__.p = ""; | |
/******/ | |
/******/ | |
/******/ // Load entry module and return exports | |
/******/ return __webpack_require__(__webpack_require__.s = "../../node_modules/ts-loader/index.js?!./pool-worker.ts"); | |
/******/ }) | |
/************************************************************************/ | |
/******/ ({ | |
/***/ "../../node_modules/is-observable/index.js": | |
/*!*************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/is-observable/index.js ***! | |
\*************************************************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports, __webpack_require__) { | |
"use strict"; | |
const symbolObservable = __webpack_require__(/*! symbol-observable */ "../../node_modules/symbol-observable/es/index.js").default; | |
module.exports = value => Boolean(value && value[symbolObservable] && value === value[symbolObservable]()); | |
/***/ }), | |
/***/ "../../node_modules/process/browser.js": | |
/*!*********************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/process/browser.js ***! | |
\*********************************************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
// shim for using process in browser | |
var process = module.exports = {}; | |
// cached from whatever global is present so that test runners that stub it | |
// don't break things. But we need to wrap it in a try catch in case it is | |
// wrapped in strict mode code which doesn't define any globals. It's inside a | |
// function because try/catches deoptimize in certain engines. | |
var cachedSetTimeout; | |
var cachedClearTimeout; | |
function defaultSetTimout() { | |
throw new Error('setTimeout has not been defined'); | |
} | |
function defaultClearTimeout () { | |
throw new Error('clearTimeout has not been defined'); | |
} | |
(function () { | |
try { | |
if (typeof setTimeout === 'function') { | |
cachedSetTimeout = setTimeout; | |
} else { | |
cachedSetTimeout = defaultSetTimout; | |
} | |
} catch (e) { | |
cachedSetTimeout = defaultSetTimout; | |
} | |
try { | |
if (typeof clearTimeout === 'function') { | |
cachedClearTimeout = clearTimeout; | |
} else { | |
cachedClearTimeout = defaultClearTimeout; | |
} | |
} catch (e) { | |
cachedClearTimeout = defaultClearTimeout; | |
} | |
} ()) | |
function runTimeout(fun) { | |
if (cachedSetTimeout === setTimeout) { | |
//normal enviroments in sane situations | |
return setTimeout(fun, 0); | |
} | |
// if setTimeout wasn't available but was latter defined | |
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { | |
cachedSetTimeout = setTimeout; | |
return setTimeout(fun, 0); | |
} | |
try { | |
// when when somebody has screwed with setTimeout but no I.E. maddness | |
return cachedSetTimeout(fun, 0); | |
} catch(e){ | |
try { | |
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | |
return cachedSetTimeout.call(null, fun, 0); | |
} catch(e){ | |
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error | |
return cachedSetTimeout.call(this, fun, 0); | |
} | |
} | |
} | |
function runClearTimeout(marker) { | |
if (cachedClearTimeout === clearTimeout) { | |
//normal enviroments in sane situations | |
return clearTimeout(marker); | |
} | |
// if clearTimeout wasn't available but was latter defined | |
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { | |
cachedClearTimeout = clearTimeout; | |
return clearTimeout(marker); | |
} | |
try { | |
// when when somebody has screwed with setTimeout but no I.E. maddness | |
return cachedClearTimeout(marker); | |
} catch (e){ | |
try { | |
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally | |
return cachedClearTimeout.call(null, marker); | |
} catch (e){ | |
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. | |
// Some versions of I.E. have different rules for clearTimeout vs setTimeout | |
return cachedClearTimeout.call(this, marker); | |
} | |
} | |
} | |
var queue = []; | |
var draining = false; | |
var currentQueue; | |
var queueIndex = -1; | |
function cleanUpNextTick() { | |
if (!draining || !currentQueue) { | |
return; | |
} | |
draining = false; | |
if (currentQueue.length) { | |
queue = currentQueue.concat(queue); | |
} else { | |
queueIndex = -1; | |
} | |
if (queue.length) { | |
drainQueue(); | |
} | |
} | |
function drainQueue() { | |
if (draining) { | |
return; | |
} | |
var timeout = runTimeout(cleanUpNextTick); | |
draining = true; | |
var len = queue.length; | |
while(len) { | |
currentQueue = queue; | |
queue = []; | |
while (++queueIndex < len) { | |
if (currentQueue) { | |
currentQueue[queueIndex].run(); | |
} | |
} | |
queueIndex = -1; | |
len = queue.length; | |
} | |
currentQueue = null; | |
draining = false; | |
runClearTimeout(timeout); | |
} | |
process.nextTick = function (fun) { | |
var args = new Array(arguments.length - 1); | |
if (arguments.length > 1) { | |
for (var i = 1; i < arguments.length; i++) { | |
args[i - 1] = arguments[i]; | |
} | |
} | |
queue.push(new Item(fun, args)); | |
if (queue.length === 1 && !draining) { | |
runTimeout(drainQueue); | |
} | |
}; | |
// v8 likes predictible objects | |
function Item(fun, array) { | |
this.fun = fun; | |
this.array = array; | |
} | |
Item.prototype.run = function () { | |
this.fun.apply(null, this.array); | |
}; | |
process.title = 'browser'; | |
process.browser = true; | |
process.env = {}; | |
process.argv = []; | |
process.version = ''; // empty string to avoid regexp issues | |
process.versions = {}; | |
function noop() {} | |
process.on = noop; | |
process.addListener = noop; | |
process.once = noop; | |
process.off = noop; | |
process.removeListener = noop; | |
process.removeAllListeners = noop; | |
process.emit = noop; | |
process.prependListener = noop; | |
process.prependOnceListener = noop; | |
process.listeners = function (name) { return [] } | |
process.binding = function (name) { | |
throw new Error('process.binding is not supported'); | |
}; | |
process.cwd = function () { return '/' }; | |
process.chdir = function (dir) { | |
throw new Error('process.chdir is not supported'); | |
}; | |
process.umask = function() { return 0; }; | |
/***/ }), | |
/***/ "../../node_modules/symbol-observable/es/index.js": | |
/*!********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/symbol-observable/es/index.js ***! | |
\********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(global, module) {/* harmony import */ var _ponyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ponyfill.js */ "../../node_modules/symbol-observable/es/ponyfill.js"); | |
/* global window */ | |
var root; | |
if (typeof self !== 'undefined') { | |
root = self; | |
} else if (typeof window !== 'undefined') { | |
root = window; | |
} else if (typeof global !== 'undefined') { | |
root = global; | |
} else if (true) { | |
root = module; | |
} else {} | |
var result = Object(_ponyfill_js__WEBPACK_IMPORTED_MODULE_0__["default"])(root); | |
/* harmony default export */ __webpack_exports__["default"] = (result); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ "../../node_modules/webpack/buildin/global.js"), __webpack_require__(/*! ./../../webpack/buildin/harmony-module.js */ "../../node_modules/webpack/buildin/harmony-module.js")(module))) | |
/***/ }), | |
/***/ "../../node_modules/symbol-observable/es/ponyfill.js": | |
/*!***********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/symbol-observable/es/ponyfill.js ***! | |
\***********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return symbolObservablePonyfill; }); | |
function symbolObservablePonyfill(root) { | |
var result; | |
var Symbol = root.Symbol; | |
if (typeof Symbol === 'function') { | |
if (Symbol.observable) { | |
result = Symbol.observable; | |
} else { | |
result = Symbol('observable'); | |
Symbol.observable = result; | |
} | |
} else { | |
result = '@@observable'; | |
} | |
return result; | |
}; | |
/***/ }), | |
/***/ "../../node_modules/ts-loader/index.js?!./pool-worker.ts": | |
/*!*************************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/node_modules/ts-loader??ref--4!./pool-worker.ts ***! | |
\*************************************************************************************/ | |
/*! no exports provided */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony import */ var _src_worker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../src/worker */ "../../src/worker/index.ts"); | |
Object(_src_worker__WEBPACK_IMPORTED_MODULE_0__["expose"])(function hello(text) { | |
return `Hello, ${text}`; | |
}); | |
/***/ }), | |
/***/ "../../node_modules/webpack/buildin/global.js": | |
/*!***********************************!*\ | |
!*** (webpack)/buildin/global.js ***! | |
\***********************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
var g; | |
// This works in non-strict mode | |
g = (function() { | |
return this; | |
})(); | |
try { | |
// This works if eval is allowed (see CSP) | |
g = g || new Function("return this")(); | |
} catch (e) { | |
// This works if the window reference is available | |
if (typeof window === "object") g = window; | |
} | |
// g can still be undefined, but nothing to do about it... | |
// We return undefined, instead of nothing here, so it's | |
// easier to handle this case. if(!global) { ...} | |
module.exports = g; | |
/***/ }), | |
/***/ "../../node_modules/webpack/buildin/harmony-module.js": | |
/*!*******************************************!*\ | |
!*** (webpack)/buildin/harmony-module.js ***! | |
\*******************************************/ | |
/*! no static exports found */ | |
/***/ (function(module, exports) { | |
module.exports = function(originalModule) { | |
if (!originalModule.webpackPolyfill) { | |
var module = Object.create(originalModule); | |
// module.parent = undefined by default | |
if (!module.children) module.children = []; | |
Object.defineProperty(module, "loaded", { | |
enumerable: true, | |
get: function() { | |
return module.l; | |
} | |
}); | |
Object.defineProperty(module, "id", { | |
enumerable: true, | |
get: function() { | |
return module.i; | |
} | |
}); | |
Object.defineProperty(module, "exports", { | |
enumerable: true | |
}); | |
module.webpackPolyfill = 1; | |
} | |
return module; | |
}; | |
/***/ }), | |
/***/ "../../src/common.ts": | |
/*!***************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/common.ts ***! | |
\***************************************************/ | |
/*! exports provided: rehydrateError, serializeError */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rehydrateError", function() { return rehydrateError; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeError", function() { return serializeError; }); | |
function rehydrateError(error) { | |
return Object.assign(Error(error.message), { | |
name: error.name, | |
stack: error.stack | |
}); | |
} | |
function serializeError(error) { | |
return { | |
message: error.message, | |
name: error.name, | |
stack: error.stack | |
}; | |
} | |
/***/ }), | |
/***/ "../../src/symbols.ts": | |
/*!****************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/symbols.ts ***! | |
\****************************************************/ | |
/*! exports provided: $errors, $events, $terminate, $transferable, $worker */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$errors", function() { return $errors; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$events", function() { return $events; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$terminate", function() { return $terminate; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$transferable", function() { return $transferable; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$worker", function() { return $worker; }); | |
const $errors = Symbol("thread.errors"); | |
const $events = Symbol("thread.events"); | |
const $terminate = Symbol("thread.terminate"); | |
const $transferable = Symbol("thread.transferable"); | |
const $worker = Symbol("thread.worker"); | |
/***/ }), | |
/***/ "../../src/transferable.ts": | |
/*!*********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/transferable.ts ***! | |
\*********************************************************/ | |
/*! exports provided: isTransferDescriptor, Transfer */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTransferDescriptor", function() { return isTransferDescriptor; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transfer", function() { return Transfer; }); | |
/* harmony import */ var _symbols__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./symbols */ "../../src/symbols.ts"); | |
function isTransferable(thing) { | |
if (!thing || typeof thing !== "object") | |
return false; | |
// Don't check too thoroughly, since the list of transferable things in JS might grow over time | |
return true; | |
} | |
function isTransferDescriptor(thing) { | |
return thing && typeof thing === "object" && thing[_symbols__WEBPACK_IMPORTED_MODULE_0__["$transferable"]]; | |
} | |
/** | |
* Mark transferable objects within an arbitrary object or array as | |
* being a transferable object. They will then not be serialized | |
* and deserialized on messaging with the main thread, but ownership | |
* of them will be tranferred to the receiving thread. | |
* | |
* Only array buffers, message ports and few more special types of | |
* objects can be transferred, but it's much faster than serializing and | |
* deserializing them. | |
* | |
* Note: | |
* The transferable object cannot be accessed by this thread again | |
* unless the receiving thread transfers it back again! | |
* | |
* @param transferable Array buffer, message port or similar. | |
* @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast> | |
*/ | |
function Transfer(payload, transferables) { | |
if (!transferables) { | |
if (!isTransferable(payload)) | |
throw Error(); | |
transferables = [payload]; | |
} | |
return { | |
[_symbols__WEBPACK_IMPORTED_MODULE_0__["$transferable"]]: true, | |
send: payload, | |
transferables | |
}; | |
} | |
/***/ }), | |
/***/ "../../src/types/messages.ts": | |
/*!***********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/types/messages.ts ***! | |
\***********************************************************/ | |
/*! exports provided: MasterMessageType, WorkerMessageType */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MasterMessageType", function() { return MasterMessageType; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkerMessageType", function() { return WorkerMessageType; }); | |
///////////////////////////// | |
// Messages sent by master: | |
var MasterMessageType; | |
(function (MasterMessageType) { | |
MasterMessageType["run"] = "run"; | |
})(MasterMessageType || (MasterMessageType = {})); | |
//////////////////////////// | |
// Messages sent by worker: | |
var WorkerMessageType; | |
(function (WorkerMessageType) { | |
WorkerMessageType["error"] = "error"; | |
WorkerMessageType["init"] = "init"; | |
WorkerMessageType["result"] = "result"; | |
WorkerMessageType["running"] = "running"; | |
WorkerMessageType["uncaughtError"] = "uncaughtError"; | |
})(WorkerMessageType || (WorkerMessageType = {})); | |
/***/ }), | |
/***/ "../../src/worker/implementation.browser.ts": | |
/*!**************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.browser.ts ***! | |
\**************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/// <reference no-default-lib="true"/> | |
/// <reference types="../../types/webworker" /> | |
// tslint:disable no-shadowed-variable | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return typeof self !== "undefined" && self.postMessage ? true : false; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data, transferList) { | |
self.postMessage(data, transferList); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
const messageHandler = (messageEvent) => { | |
onMessage(messageEvent.data); | |
}; | |
const unsubscribe = () => { | |
self.removeEventListener("message", messageHandler); | |
}; | |
self.addEventListener("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/***/ }), | |
/***/ "../../src/worker/implementation.tiny-worker.ts": | |
/*!******************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.tiny-worker.ts ***! | |
\******************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(global) {/// <reference no-default-lib="true"/> | |
/// <reference types="../../types/webworker" /> | |
// tslint:disable no-shadowed-variable | |
if (typeof self === "undefined") { | |
global.self = global; | |
} | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return typeof self !== "undefined" && self.postMessage ? true : false; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data) { | |
// TODO: Warn that Transferables are not supported on first attempt to use feature | |
self.postMessage(data); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
const messageHandler = (messageEvent) => { | |
onMessage(messageEvent.data); | |
}; | |
const unsubscribe = () => { | |
self.removeEventListener("message", messageHandler); | |
}; | |
self.addEventListener("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ "../../node_modules/webpack/buildin/global.js"))) | |
/***/ }), | |
/***/ "../../src/worker/implementation.ts": | |
/*!******************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.ts ***! | |
\******************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(process) {// tslint:disable no-var-requires | |
/* | |
* This file is only a stub to make './implementation' resolve to the right module. | |
*/ | |
function selectNodeImplementation() { | |
try { | |
return __webpack_require__(/*! ./implementation.worker_threads */ "../../src/worker/implementation.worker_threads.ts").default; | |
} | |
catch (error) { | |
return __webpack_require__(/*! ./implementation.tiny-worker */ "../../src/worker/implementation.tiny-worker.ts").default; | |
} | |
} | |
/* harmony default export */ __webpack_exports__["default"] = (typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process | |
? selectNodeImplementation() | |
: __webpack_require__(/*! ./implementation.browser */ "../../src/worker/implementation.browser.ts").default); | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "../../node_modules/process/browser.js"))) | |
/***/ }), | |
/***/ "../../src/worker/implementation.worker_threads.ts": | |
/*!*********************************************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/implementation.worker_threads.ts ***! | |
\*********************************************************************************/ | |
/*! exports provided: default */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony import */ var _worker_threads__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../worker_threads */ "../../src/worker_threads.ts"); | |
function assertMessagePort(port) { | |
if (!port) { | |
throw Error("Invariant violation: MessagePort to parent is not available."); | |
} | |
return port; | |
} | |
const isWorkerRuntime = function isWorkerRuntime() { | |
return !_worker_threads__WEBPACK_IMPORTED_MODULE_0__["isMainThread"]; | |
}; | |
const postMessageToMaster = function postMessageToMaster(data, transferList) { | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).postMessage(data, transferList); | |
}; | |
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | |
if (!_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]) { | |
throw Error("Invariant violation: MessagePort to parent is not available."); | |
} | |
const messageHandler = (message) => { | |
onMessage(message); | |
}; | |
const unsubscribe = () => { | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).off("message", messageHandler); | |
}; | |
assertMessagePort(_worker_threads__WEBPACK_IMPORTED_MODULE_0__["parentPort"]).on("message", messageHandler); | |
return unsubscribe; | |
}; | |
/* harmony default export */ __webpack_exports__["default"] = ({ | |
isWorkerRuntime, | |
postMessageToMaster, | |
subscribeToMasterMessages | |
}); | |
/***/ }), | |
/***/ "../../src/worker/index.ts": | |
/*!*********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker/index.ts ***! | |
\*********************************************************/ | |
/*! exports provided: Transfer, expose */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expose", function() { return expose; }); | |
/* harmony import */ var is_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-observable */ "../../node_modules/is-observable/index.js"); | |
/* harmony import */ var is_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(is_observable__WEBPACK_IMPORTED_MODULE_0__); | |
/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common */ "../../src/common.ts"); | |
/* harmony import */ var _transferable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transferable */ "../../src/transferable.ts"); | |
/* harmony import */ var _types_messages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../types/messages */ "../../src/types/messages.ts"); | |
/* harmony import */ var _implementation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./implementation */ "../../src/worker/implementation.ts"); | |
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Transfer", function() { return _transferable__WEBPACK_IMPORTED_MODULE_2__["Transfer"]; }); | |
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { | |
return new (P || (P = Promise))(function (resolve, reject) { | |
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | |
step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
}); | |
}; | |
let exposeCalled = false; | |
const isMasterJobRunMessage = (thing) => thing && thing.type === _types_messages__WEBPACK_IMPORTED_MODULE_3__["MasterMessageType"].run; | |
/** There are issues with `is-observable` not recognizing zen-observable's instances */ | |
const isObservable = (thing) => is_observable__WEBPACK_IMPORTED_MODULE_0___default()(thing) || isZenObservable(thing); | |
function isZenObservable(thing) { | |
return thing && typeof thing === "object" && typeof thing.subscribe === "function"; | |
} | |
function deconstructTransfer(thing) { | |
return Object(_transferable__WEBPACK_IMPORTED_MODULE_2__["isTransferDescriptor"])(thing) | |
? { payload: thing.send, transferables: thing.transferables } | |
: { payload: thing, transferables: undefined }; | |
} | |
function postFunctionInitMessage() { | |
const initMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].init, | |
exposed: { | |
type: "function" | |
} | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(initMessage); | |
} | |
function postModuleInitMessage(methodNames) { | |
const initMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].init, | |
exposed: { | |
type: "module", | |
methods: methodNames | |
} | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(initMessage); | |
} | |
function postJobErrorMessage(uid, rawError) { | |
const { payload: error, transferables } = deconstructTransfer(rawError); | |
const errorMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].error, | |
uid, | |
error: Object(_common__WEBPACK_IMPORTED_MODULE_1__["serializeError"])(error) | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(errorMessage, transferables); | |
} | |
function postJobResultMessage(uid, completed, resultValue) { | |
const { payload, transferables } = deconstructTransfer(resultValue); | |
const startMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].result, | |
uid, | |
complete: completed ? true : undefined, | |
payload | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(startMessage, transferables); | |
} | |
function postJobStartMessage(uid, resultType) { | |
const startMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].running, | |
uid, | |
resultType | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(startMessage); | |
} | |
function postUncaughtErrorMessage(error) { | |
const errorMessage = { | |
type: _types_messages__WEBPACK_IMPORTED_MODULE_3__["WorkerMessageType"].uncaughtError, | |
error: Object(_common__WEBPACK_IMPORTED_MODULE_1__["serializeError"])(error) | |
}; | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].postMessageToMaster(errorMessage); | |
} | |
function runFunction(jobUID, fn, args) { | |
return __awaiter(this, void 0, void 0, function* () { | |
let syncResult; | |
try { | |
syncResult = fn(...args); | |
} | |
catch (error) { | |
return postJobErrorMessage(jobUID, error); | |
} | |
const resultType = isObservable(syncResult) ? "observable" : "promise"; | |
postJobStartMessage(jobUID, resultType); | |
if (isObservable(syncResult)) { | |
syncResult.subscribe(value => postJobResultMessage(jobUID, false, value), error => postJobErrorMessage(jobUID, error), () => postJobResultMessage(jobUID, true)); | |
} | |
else { | |
try { | |
const result = yield syncResult; | |
postJobResultMessage(jobUID, true, result); | |
} | |
catch (error) { | |
postJobErrorMessage(jobUID, error); | |
} | |
} | |
}); | |
} | |
/** | |
* Expose a function or a module (an object whose values are functions) | |
* to the main thread. Must be called exactly once in every worker thread | |
* to signal its API to the main thread. | |
* | |
* @param exposed Function or object whose values are functions | |
*/ | |
function expose(exposed) { | |
if (!_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
throw Error("expose() called in the master thread."); | |
} | |
if (exposeCalled) { | |
throw Error("expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions."); | |
} | |
exposeCalled = true; | |
if (typeof exposed === "function") { | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].subscribeToMasterMessages(messageData => { | |
if (isMasterJobRunMessage(messageData) && !messageData.method) { | |
runFunction(messageData.uid, exposed, messageData.args); | |
} | |
}); | |
postFunctionInitMessage(); | |
} | |
else if (typeof exposed === "object" && exposed) { | |
_implementation__WEBPACK_IMPORTED_MODULE_4__["default"].subscribeToMasterMessages(messageData => { | |
if (isMasterJobRunMessage(messageData) && messageData.method) { | |
runFunction(messageData.uid, exposed[messageData.method], messageData.args); | |
} | |
}); | |
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === "function"); | |
postModuleInitMessage(methodNames); | |
} | |
else { | |
throw Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`); | |
} | |
} | |
if (typeof self !== "undefined" && typeof self.addEventListener === "function" && _implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
self.addEventListener("error", event => { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(event.error), 250); | |
}); | |
self.addEventListener("unhandledrejection", event => { | |
const error = event.reason; | |
if (error && typeof error.message === "string") { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
} | |
}); | |
} | |
if (typeof process !== "undefined" && typeof process.on === "function" && _implementation__WEBPACK_IMPORTED_MODULE_4__["default"].isWorkerRuntime()) { | |
process.on("uncaughtException", (error) => { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
}); | |
process.on("unhandledRejection", (error) => { | |
if (error && typeof error.message === "string") { | |
// Post with some delay, so the master had some time to subscribe to messages | |
setTimeout(() => postUncaughtErrorMessage(error), 250); | |
} | |
}); | |
} | |
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "../../node_modules/process/browser.js"))) | |
/***/ }), | |
/***/ "../../src/worker_threads.ts": | |
/*!***********************************************************!*\ | |
!*** /Users/andy/workspace/threads/src/worker_threads.ts ***! | |
\***********************************************************/ | |
/*! exports provided: MessagePort, isMainThread, parentPort */ | |
/***/ (function(module, __webpack_exports__, __webpack_require__) { | |
"use strict"; | |
__webpack_require__.r(__webpack_exports__); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MessagePort", function() { return MessagePort; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isMainThread", function() { return isMainThread; }); | |
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parentPort", function() { return parentPort; }); | |
// Webpack hack | |
// tslint:disable no-eval | |
const workerThreads = typeof require === "function" | |
? require("worker_threads") | |
: eval("require")("worker_threads"); | |
const MessagePort = workerThreads.MessagePort; | |
const isMainThread = workerThreads.isMainThread; | |
const parentPort = workerThreads.parentPort; | |
/***/ }) | |
/******/ }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment