threadsx 2.0.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/errors.d.ts +16 -0
  2. package/dist/errors.js +31 -0
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +3 -1
  5. package/dist/master/implementation.node.js +34 -18
  6. package/dist/master/invocation-proxy.js +45 -11
  7. package/dist/master/pool.d.ts +1 -24
  8. package/dist/master/pool.js +41 -8
  9. package/dist/master/spawn.js +24 -7
  10. package/dist/node-require.d.ts +13 -0
  11. package/dist/node-require.js +87 -0
  12. package/dist/transferable.d.ts +1 -0
  13. package/dist/types/master.d.ts +22 -1
  14. package/dist/types/master.js +0 -1
  15. package/dist/types/worker.d.ts +1 -0
  16. package/dist/worker/implementation.browser.d.ts +1 -1
  17. package/dist/worker/implementation.worker_threads.d.ts +1 -1
  18. package/dist/worker_threads.d.ts +3 -7
  19. package/dist/worker_threads.js +35 -11
  20. package/dist-esm/common.js +1 -0
  21. package/dist-esm/common.js.map +1 -0
  22. package/dist-esm/errors.js +27 -0
  23. package/dist-esm/errors.js.map +1 -0
  24. package/dist-esm/index.js +2 -0
  25. package/dist-esm/index.js.map +1 -0
  26. package/dist-esm/master/get-bundle-url.browser.js +1 -0
  27. package/dist-esm/master/get-bundle-url.browser.js.map +1 -0
  28. package/dist-esm/master/implementation.browser.js +1 -0
  29. package/dist-esm/master/implementation.browser.js.map +1 -0
  30. package/dist-esm/master/implementation.js +1 -0
  31. package/dist-esm/master/implementation.js.map +1 -0
  32. package/dist-esm/master/implementation.node.js +35 -18
  33. package/dist-esm/master/implementation.node.js.map +1 -0
  34. package/dist-esm/master/index.js +1 -0
  35. package/dist-esm/master/index.js.map +1 -0
  36. package/dist-esm/master/invocation-proxy.js +46 -11
  37. package/dist-esm/master/invocation-proxy.js.map +1 -0
  38. package/dist-esm/master/pool-types.js +1 -0
  39. package/dist-esm/master/pool-types.js.map +1 -0
  40. package/dist-esm/master/pool.js +42 -8
  41. package/dist-esm/master/pool.js.map +1 -0
  42. package/dist-esm/master/register.js +1 -0
  43. package/dist-esm/master/register.js.map +1 -0
  44. package/dist-esm/master/spawn.js +25 -7
  45. package/dist-esm/master/spawn.js.map +1 -0
  46. package/dist-esm/master/thread.js +1 -0
  47. package/dist-esm/master/thread.js.map +1 -0
  48. package/dist-esm/node-require.js +50 -0
  49. package/dist-esm/node-require.js.map +1 -0
  50. package/dist-esm/observable-promise.js +1 -0
  51. package/dist-esm/observable-promise.js.map +1 -0
  52. package/dist-esm/observable.js +1 -0
  53. package/dist-esm/observable.js.map +1 -0
  54. package/dist-esm/ponyfills.js +1 -0
  55. package/dist-esm/ponyfills.js.map +1 -0
  56. package/dist-esm/promise.js +1 -0
  57. package/dist-esm/promise.js.map +1 -0
  58. package/dist-esm/serializers.js +1 -0
  59. package/dist-esm/serializers.js.map +1 -0
  60. package/dist-esm/symbols.js +1 -0
  61. package/dist-esm/symbols.js.map +1 -0
  62. package/dist-esm/transferable.js +1 -0
  63. package/dist-esm/transferable.js.map +1 -0
  64. package/dist-esm/types/master.js +1 -1
  65. package/dist-esm/types/master.js.map +1 -0
  66. package/dist-esm/types/messages.js +1 -0
  67. package/dist-esm/types/messages.js.map +1 -0
  68. package/dist-esm/types/worker.js +1 -0
  69. package/dist-esm/types/worker.js.map +1 -0
  70. package/dist-esm/worker/bundle-entry.js +1 -0
  71. package/dist-esm/worker/bundle-entry.js.map +1 -0
  72. package/dist-esm/worker/implementation.browser.js +1 -0
  73. package/dist-esm/worker/implementation.browser.js.map +1 -0
  74. package/dist-esm/worker/implementation.js +1 -0
  75. package/dist-esm/worker/implementation.js.map +1 -0
  76. package/dist-esm/worker/implementation.worker_threads.js +1 -0
  77. package/dist-esm/worker/implementation.worker_threads.js.map +1 -0
  78. package/dist-esm/worker/index.js +1 -0
  79. package/dist-esm/worker/index.js.map +1 -0
  80. package/dist-esm/worker_threads.js +3 -11
  81. package/dist-esm/worker_threads.js.map +1 -0
  82. package/esm/common.mjs +20 -0
  83. package/esm/errors.mjs +34 -0
  84. package/esm/index.mjs +16 -0
  85. package/esm/master/get-bundle-url.browser.mjs +32 -0
  86. package/esm/master/implementation.browser.mjs +76 -0
  87. package/esm/master/implementation.mjs +24 -0
  88. package/esm/master/implementation.node.mjs +186 -0
  89. package/esm/master/index.mjs +17 -0
  90. package/esm/master/invocation-proxy.mjs +164 -0
  91. package/esm/master/pool-types.mjs +20 -0
  92. package/esm/master/pool.mjs +324 -0
  93. package/esm/master/register.mjs +14 -0
  94. package/esm/master/spawn.mjs +179 -0
  95. package/esm/master/thread.mjs +28 -0
  96. package/esm/node-require.mjs +58 -0
  97. package/esm/observable-promise.mjs +155 -0
  98. package/esm/observable.mjs +45 -0
  99. package/esm/ponyfills.mjs +26 -0
  100. package/esm/promise.mjs +32 -0
  101. package/esm/serializers.mjs +55 -0
  102. package/esm/symbols.mjs +13 -0
  103. package/esm/transferable.mjs +31 -0
  104. package/esm/types/master.mjs +15 -0
  105. package/esm/types/messages.mjs +25 -0
  106. package/esm/worker/implementation.browser.mjs +31 -0
  107. package/esm/worker/implementation.mjs +21 -0
  108. package/esm/worker/implementation.worker_threads.mjs +44 -0
  109. package/esm/worker/index.mjs +224 -0
  110. package/esm/worker_threads.mjs +13 -0
  111. package/package.json +32 -24
  112. package/index.mjs +0 -4
  113. package/observable.mjs +0 -1
  114. package/register.mjs +0 -2
  115. package/worker.mjs +0 -1
@@ -1,8 +1,4 @@
1
- type MessagePort = any;
2
- interface WorkerThreadsModule {
3
- MessagePort: typeof MessagePort;
4
- isMainThread: boolean;
5
- parentPort: MessagePort;
6
- }
7
- export default function getImplementation(): WorkerThreadsModule;
1
+ import * as WorkerThreadsModule from "worker_threads";
2
+ type WorkerThreadsInterface = typeof WorkerThreadsModule;
3
+ export default function getImplementation(): WorkerThreadsInterface;
8
4
  export {};
@@ -1,16 +1,40 @@
1
1
  "use strict";
2
- // Webpack hack
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.default = getImplementation;
5
- let implementation;
6
- function selectImplementation() {
7
- return typeof __non_webpack_require__ === "function"
8
- ? __non_webpack_require__("worker_threads")
9
- : eval("require")("worker_threads");
10
- }
37
+ const WorkerThreadsModule = __importStar(require("worker_threads"));
11
38
  function getImplementation() {
12
- if (!implementation) {
13
- implementation = selectImplementation();
14
- }
15
- return implementation;
39
+ return WorkerThreadsModule;
16
40
  }
@@ -9,3 +9,4 @@ export function deserialize(message) {
9
9
  export function serialize(input) {
10
10
  return registeredSerializer.serialize(input);
11
11
  }
12
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAIlB,MAAM,eAAe,CAAA;AAEtB,IAAI,oBAAoB,GAAiC,iBAAiB,CAAA;AAE1E,MAAM,UAAU,kBAAkB,CAAC,UAAsD;IACvF,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAyB;IACnD,OAAO,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAU;IAClC,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Thrown when a value passed to a thread cannot be cloned by the structured
3
+ * clone algorithm (e.g. functions, class instances with methods, or other
4
+ * non-serializable values). Wraps the underlying `DataCloneError` / `DOMException`
5
+ * with an actionable message. Access the original error via `.cause`.
6
+ */
7
+ export class ThreadCloneError extends Error {
8
+ constructor(message, cause) {
9
+ super(message);
10
+ this.name = "ThreadCloneError";
11
+ this.cause = cause;
12
+ // Restore the prototype chain — extending built-ins breaks `instanceof`
13
+ // when compiled down to ES2015 without this.
14
+ Object.setPrototypeOf(this, ThreadCloneError.prototype);
15
+ }
16
+ }
17
+ /**
18
+ * Whether an error is a structured-clone failure. Both browsers and Node's
19
+ * `worker_threads` throw a `DOMException`/error named `"DataCloneError"` when a
20
+ * value cannot be cloned across the thread boundary.
21
+ */
22
+ export function isDataCloneError(error) {
23
+ return Boolean(error &&
24
+ typeof error === "object" &&
25
+ error.name === "DataCloneError");
26
+ }
27
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGzC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,wEAAwE;QACxE,6CAA6C;QAC7C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACzD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,CACZ,KAAK;QACL,OAAO,KAAK,KAAK,QAAQ;QACxB,KAA4B,CAAC,IAAI,KAAK,gBAAgB,CACxD,CAAA;AACH,CAAC"}
package/dist-esm/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export { registerSerializer } from "./common";
2
+ export { ThreadCloneError } from "./errors";
2
3
  export * from "./master/index";
3
4
  export { expose } from "./worker/index";
4
5
  export { DefaultSerializer } from "./serializers";
5
6
  export { Transfer } from "./transferable";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAA0D,MAAM,eAAe,CAAA;AACzG,OAAO,EAAE,QAAQ,EAAsB,MAAM,gBAAgB,CAAA"}
@@ -23,3 +23,4 @@ function getBaseURL(url) {
23
23
  return ("" + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
24
24
  }
25
25
  export { getBaseURL, getBundleURLCached as getBundleURL };
26
+ //# sourceMappingURL=get-bundle-url.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bundle-url.browser.js","sourceRoot":"","sources":["../../src/master/get-bundle-url.browser.ts"],"names":[],"mappings":"AAAA,yHAAyH;AAEzH,IAAI,SAA6B,CAAA;AAEjC,SAAS,kBAAkB;IACzB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,YAAY,EAAE,CAAA;IAC5B,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,YAAY;IACnB,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,IAAI,KAAK,CAAA;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,CAAC,EAAE,GAAI,GAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAA;QAClH,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,gFAAgF,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC1H,CAAC;AAED,OAAO,EACL,UAAU,EACV,kBAAkB,IAAI,YAAY,EACnC,CAAA"}
@@ -65,3 +65,4 @@ export function isWorkerRuntime() {
65
65
  const isWindowContext = typeof self !== "undefined" && typeof Window !== "undefined" && self instanceof Window;
66
66
  return typeof self !== "undefined" && typeof self.postMessage === "function" && !isWindowContext;
67
67
  }
68
+ //# sourceMappingURL=implementation.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implementation.browser.js","sourceRoot":"","sources":["../../src/master/implementation.browser.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ export const defaultPoolSize = implementation.defaultPoolSize;
13
13
  export const getWorkerImplementation = implementation.getWorkerImplementation;
14
14
  /** Returns `true` if this code is currently running in a worker. */
15
15
  export const isWorkerRuntime = implementation.isWorkerRuntime;
16
+ //# sourceMappingURL=implementation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implementation.js","sourceRoot":"","sources":["../../src/master/implementation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sFAAsF;AACtF,sFAAsF;AACtF,sBAAsB;AAEtB,OAAO,KAAK,qBAAqB,MAAM,0BAA0B,CAAA;AACjE,OAAO,KAAK,kBAAkB,MAAM,uBAAuB,CAAA;AAE3D,MAAM,aAAa,GAAG,OAAO,OAAO,KAAK,WAAW,IAAK,OAAO,CAAC,IAAe,KAAK,SAAS,IAAI,KAAK,IAAI,OAAO,CAAA;AAClH,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAA;AAEjF,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAA;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAC,uBAAuB,CAAA;AAE7E,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAA"}
@@ -1,16 +1,32 @@
1
1
  /// <reference lib="dom" />
2
+ // NOTE: `callsites` is intentionally pinned to ^3. v4+ is ESM-only and would
3
+ // break the CommonJS (dist/) build. Do not bump it to v4 without moving the
4
+ // package to ESM-first output. (See .github/dependabot.yml, which also ignores
5
+ // its major updates.)
2
6
  import getCallsites from "callsites";
3
7
  import { cpus } from 'os';
4
8
  import * as path from "path";
5
9
  import { fileURLToPath } from "url";
10
+ import { getModuleDirname, getNodeRequire, isWebpackBundle } from "../node-require";
11
+ import getWorkerThreads from "../worker_threads";
6
12
  let detectedTsRuntime;
7
13
  export const defaultPoolSize = cpus().length;
14
+ /**
15
+ * Whether the application opted out of threadsx installing SIGINT/SIGTERM
16
+ * handlers (which call `process.exit()`), via `THREADS_SKIP_SIGNAL_HANDLERS`.
17
+ */
18
+ function signalHandlersDisabled() {
19
+ const value = typeof process !== "undefined" && process.env
20
+ ? process.env.THREADS_SKIP_SIGNAL_HANDLERS
21
+ : undefined;
22
+ return value === "1" || value === "true";
23
+ }
8
24
  /**
9
25
  * Detects an available TypeScript runtime so `.ts`/`.tsx` worker files can be
10
26
  * spawned directly during development. Prefers `tsx`, falls back to `ts-node`.
11
27
  */
12
28
  function detectTsRuntime() {
13
- if (typeof __non_webpack_require__ === "function") {
29
+ if (isWebpackBundle()) {
14
30
  // Webpack build: => No TS runtime required or possible
15
31
  return null;
16
32
  }
@@ -20,7 +36,7 @@ function detectTsRuntime() {
20
36
  detectedTsRuntime = null;
21
37
  for (const candidate of ["tsx", "ts-node"]) {
22
38
  try {
23
- eval("require").resolve(candidate);
39
+ getNodeRequire().resolve(candidate);
24
40
  detectedTsRuntime = candidate;
25
41
  break;
26
42
  }
@@ -68,19 +84,17 @@ function rebaseScriptPath(scriptPath, ignoreRegex) {
68
84
  }
69
85
  function resolveScriptPath(scriptPath, baseURL) {
70
86
  const makeRelative = (filePath) => {
71
- // eval() hack is also webpack-related
72
- return path.isAbsolute(filePath) ? filePath : path.join(baseURL || eval("__dirname"), filePath);
87
+ return path.isAbsolute(filePath) ? filePath : path.join(baseURL || getModuleDirname(), filePath);
73
88
  };
74
- const workerFilePath = typeof __non_webpack_require__ === "function"
75
- ? __non_webpack_require__.resolve(makeRelative(scriptPath))
76
- : eval("require").resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/)));
89
+ // In a webpack bundle, walking the call stack is useless (every caller lives
90
+ // inside the bundle), so relative paths resolve without rebasing.
91
+ const workerFilePath = isWebpackBundle()
92
+ ? getNodeRequire().resolve(makeRelative(scriptPath))
93
+ : getNodeRequire().resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/)));
77
94
  return workerFilePath;
78
95
  }
79
96
  function initWorkerThreadsWorker() {
80
- // Webpack hack
81
- const NativeWorker = typeof __non_webpack_require__ === "function"
82
- ? __non_webpack_require__("worker_threads").Worker
83
- : eval("require")("worker_threads").Worker;
97
+ const NativeWorker = getWorkerThreads().Worker;
84
98
  let allWorkers = [];
85
99
  class Worker extends NativeWorker {
86
100
  constructor(scriptPath, options) {
@@ -127,8 +141,14 @@ function initWorkerThreadsWorker() {
127
141
  allWorkers = [];
128
142
  };
129
143
  // Take care to not leave orphaned processes behind. See #147.
130
- process.on("SIGINT", () => terminateWorkersAndMaster());
131
- process.on("SIGTERM", () => terminateWorkersAndMaster());
144
+ //
145
+ // These handlers call process.exit(), which hijacks the host application's
146
+ // own shutdown. Applications that manage their own graceful shutdown can opt
147
+ // out by setting THREADS_SKIP_SIGNAL_HANDLERS. See upstream #388 / #484.
148
+ if (!signalHandlersDisabled()) {
149
+ process.on("SIGINT", () => terminateWorkersAndMaster());
150
+ process.on("SIGTERM", () => terminateWorkersAndMaster());
151
+ }
132
152
  class BlobWorker extends Worker {
133
153
  constructor(blob, options) {
134
154
  super(Buffer.from(blob).toString("utf-8"), Object.assign(Object.assign({}, options), { fromSource: true }));
@@ -153,9 +173,6 @@ export function getWorkerImplementation() {
153
173
  return implementation;
154
174
  }
155
175
  export function isWorkerRuntime() {
156
- // Webpack hack
157
- const isMainThread = typeof __non_webpack_require__ === "function"
158
- ? __non_webpack_require__("worker_threads").isMainThread
159
- : eval("require")("worker_threads").isMainThread;
160
- return !isMainThread;
176
+ return !getWorkerThreads().isMainThread;
161
177
  }
178
+ //# sourceMappingURL=implementation.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"implementation.node.js","sourceRoot":"","sources":["../../src/master/implementation.node.ts"],"names":[],"mappings":"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"}
@@ -7,3 +7,4 @@ export { isWorkerRuntime };
7
7
  export const BlobWorker = getWorkerImplementation().blob;
8
8
  /** Worker implementation. Either web worker or a node.js Worker class. */
9
9
  export const Worker = getWorkerImplementation().default;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/master/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG3E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,eAAe,EAAE,CAAA;AAK1B,yEAAyE;AACzE,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC,IAAI,CAAA;AAExD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC,OAAO,CAAA"}
@@ -7,6 +7,7 @@
7
7
  import DebugLogger from "debug";
8
8
  import { multicast, Observable } from "observable-fns";
9
9
  import { deserialize, serialize } from "../common";
10
+ import { isDataCloneError, ThreadCloneError } from "../errors";
10
11
  import { ObservablePromise } from "../observable-promise";
11
12
  import { isTransferDescriptor } from "../transferable";
12
13
  import { MasterMessageType, WorkerMessageType } from "../types/messages";
@@ -19,6 +20,12 @@ const isJobStartMessage = (data) => data && data.type === WorkerMessageType.runn
19
20
  function createObservableForJob(worker, jobUID) {
20
21
  return new Observable(observer => {
21
22
  let asyncType;
23
+ let settled = false;
24
+ const cleanup = () => {
25
+ worker.removeEventListener("message", messageHandler);
26
+ worker.removeEventListener("error", errorHandler);
27
+ worker.removeEventListener("exit", exitHandler);
28
+ };
22
29
  const messageHandler = ((event) => {
23
30
  debugMessages("Message from worker:", event.data);
24
31
  if (!event.data || event.data.uid !== jobUID)
@@ -31,31 +38,52 @@ function createObservableForJob(worker, jobUID) {
31
38
  if (typeof event.data.payload !== "undefined") {
32
39
  observer.next(deserialize(event.data.payload));
33
40
  }
41
+ settled = true;
34
42
  observer.complete();
35
- worker.removeEventListener("message", messageHandler);
43
+ cleanup();
36
44
  }
37
45
  else {
38
- if (event.data.payload) {
46
+ if (typeof event.data.payload !== "undefined") {
39
47
  observer.next(deserialize(event.data.payload));
40
48
  }
41
49
  if (event.data.complete) {
50
+ settled = true;
42
51
  observer.complete();
43
- worker.removeEventListener("message", messageHandler);
52
+ cleanup();
44
53
  }
45
54
  }
46
55
  }
47
56
  else if (isJobErrorMessage(event.data)) {
48
57
  const error = deserialize(event.data.error);
49
- if (asyncType === "promise" || !asyncType) {
50
- observer.error(error);
51
- }
52
- else {
53
- observer.error(error);
54
- }
55
- worker.removeEventListener("message", messageHandler);
58
+ settled = true;
59
+ observer.error(error);
60
+ cleanup();
56
61
  }
57
62
  });
63
+ // If the worker crashes or is terminated before the job produces a result,
64
+ // reject the pending job instead of leaving the promise hanging forever.
65
+ // See #386.
66
+ const errorHandler = ((event) => {
67
+ if (settled)
68
+ return;
69
+ settled = true;
70
+ const error = event && event.data instanceof Error
71
+ ? event.data
72
+ : Error(String((event && event.data) || "Worker errored before the job completed."));
73
+ observer.error(error);
74
+ cleanup();
75
+ });
76
+ const exitHandler = ((event) => {
77
+ if (settled)
78
+ return;
79
+ settled = true;
80
+ const exitCode = event ? event.data : undefined;
81
+ observer.error(Error(`Worker terminated before the job completed (exit code: ${exitCode}).`));
82
+ cleanup();
83
+ });
58
84
  worker.addEventListener("message", messageHandler);
85
+ worker.addEventListener("error", errorHandler);
86
+ worker.addEventListener("exit", exitHandler);
59
87
  return () => {
60
88
  if (asyncType === "observable" || !asyncType) {
61
89
  const cancelMessage = {
@@ -64,7 +92,7 @@ function createObservableForJob(worker, jobUID) {
64
92
  };
65
93
  worker.postMessage(cancelMessage);
66
94
  }
67
- worker.removeEventListener("message", messageHandler);
95
+ cleanup();
68
96
  };
69
97
  });
70
98
  }
@@ -107,6 +135,12 @@ export function createProxyFunction(worker, method) {
107
135
  worker.postMessage(runMessage, transferables);
108
136
  }
109
137
  catch (error) {
138
+ if (isDataCloneError(error)) {
139
+ const cloneError = new ThreadCloneError(`Cannot send arguments to the worker thread: a value is not structured-cloneable. ` +
140
+ `Functions, class instances and other non-serializable values cannot be passed to a thread. ` +
141
+ `Original error: ${error.message}`, error);
142
+ return ObservablePromise.from(Promise.reject(cloneError));
143
+ }
110
144
  return ObservablePromise.from(Promise.reject(error));
111
145
  }
112
146
  return ObservablePromise.from(multicast(createObservableForJob(worker, uid)));
@@ -119,3 +153,4 @@ export function createProxyModule(worker, methodNames) {
119
153
  }
120
154
  return proxy;
121
155
  }
156
+ //# sourceMappingURL=invocation-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invocation-proxy.js","sourceRoot":"","sources":["../../src/master/invocation-proxy.ts"],"names":[],"mappings":"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"}
@@ -10,3 +10,4 @@ export var PoolEventType;
10
10
  PoolEventType["taskStart"] = "taskStart";
11
11
  PoolEventType["terminated"] = "terminated";
12
12
  })(PoolEventType || (PoolEventType = {}));
13
+ //# sourceMappingURL=pool-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-types.js","sourceRoot":"","sources":["../../src/master/pool-types.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,4CAA2B,CAAA;IAC3B,8CAA6B,CAAA;IAC7B,gDAA+B,CAAA;IAC/B,0CAAyB,CAAA;IACzB,0CAAyB,CAAA;IACzB,sDAAqC,CAAA;IACrC,wCAAuB,CAAA;IACvB,0CAAyB,CAAA;AAC3B,CAAC,EATW,aAAa,KAAb,aAAa,QASxB"}
@@ -140,6 +140,13 @@ class WorkerPool {
140
140
  eventSubscription.unsubscribe();
141
141
  reject(event.error);
142
142
  }
143
+ else if (event.type === PoolEventType.taskCanceled && event.taskID === taskID) {
144
+ // Without this branch a canceled task would keep its event
145
+ // subscription alive for the pool's whole lifetime and its promise
146
+ // would never settle.
147
+ eventSubscription.unsubscribe();
148
+ reject(Error("Task has been canceled."));
149
+ }
143
150
  else if (event.type === PoolEventType.terminated) {
144
151
  eventSubscription.unsubscribe();
145
152
  reject(Error("Pool has been terminated before task was run."));
@@ -157,20 +164,27 @@ class WorkerPool {
157
164
  }
158
165
  });
159
166
  if (this.initErrors.length > 0) {
167
+ failureSubscription.unsubscribe();
160
168
  return Promise.reject(this.initErrors[0]);
161
169
  }
162
170
  if (allowResolvingImmediately && this.taskQueue.length === 0) {
163
171
  yield allSettled(getCurrentlyRunningTasks());
172
+ failureSubscription.unsubscribe();
164
173
  return taskFailures;
165
174
  }
166
175
  yield new Promise((resolve, reject) => {
167
176
  const subscription = this.eventObservable.subscribe({
168
177
  next(event) {
169
- if (event.type === PoolEventType.taskQueueDrained) {
178
+ if (event.type === PoolEventType.taskQueueDrained || event.type === PoolEventType.terminated) {
170
179
  subscription.unsubscribe();
171
180
  resolve(void 0);
172
181
  }
173
182
  },
183
+ complete() {
184
+ // The pool was terminated while we were waiting; resolve instead of hanging.
185
+ subscription.unsubscribe();
186
+ resolve(void 0);
187
+ },
174
188
  error: reject // make a pool-wide error reject the completed() result promise
175
189
  });
176
190
  });
@@ -185,7 +199,7 @@ class WorkerPool {
185
199
  const earlyExitPromise = new Promise((resolve, reject) => {
186
200
  const subscription = this.eventObservable.subscribe({
187
201
  next(event) {
188
- if (event.type === PoolEventType.taskQueueDrained) {
202
+ if (event.type === PoolEventType.taskQueueDrained || event.type === PoolEventType.terminated) {
189
203
  subscription.unsubscribe();
190
204
  resolve(settlementPromise);
191
205
  }
@@ -194,6 +208,11 @@ class WorkerPool {
194
208
  reject(event.error);
195
209
  }
196
210
  },
211
+ complete() {
212
+ // The pool was terminated while we were waiting; resolve instead of hanging.
213
+ subscription.unsubscribe();
214
+ resolve(settlementPromise);
215
+ },
197
216
  error: reject // make a pool-wide error reject the completed() result promise
198
217
  });
199
218
  });
@@ -217,6 +236,13 @@ class WorkerPool {
217
236
  if (this.initErrors.length > 0) {
218
237
  throw this.initErrors[0];
219
238
  }
239
+ // Check the queue limit before taskCompletion() below subscribes to the
240
+ // pool events — throwing after would leak that subscription.
241
+ if (this.taskQueue.length >= maxQueuedJobs) {
242
+ throw Error("Maximum number of pool tasks queued. Refusing to queue another one.\n" +
243
+ "This usually happens for one of two reasons: We are either at peak " +
244
+ "workload right now or some tasks just won't finish, thus blocking the pool.");
245
+ }
220
246
  const taskID = this.nextTaskID++;
221
247
  const taskCompletion = this.taskCompletion(taskID);
222
248
  taskCompletion.catch((error) => {
@@ -238,11 +264,6 @@ class WorkerPool {
238
264
  },
239
265
  then: taskCompletion.then.bind(taskCompletion)
240
266
  };
241
- if (this.taskQueue.length >= maxQueuedJobs) {
242
- throw Error("Maximum number of pool tasks queued. Refusing to queue another one.\n" +
243
- "This usually happens for one of two reasons: We are either at peak " +
244
- "workload right now or some tasks just won't finish, thus blocking the pool.");
245
- }
246
267
  this.debug(`Queueing task #${task.id}...`);
247
268
  this.taskQueue.push(task);
248
269
  this.eventSubject.next({
@@ -263,7 +284,17 @@ class WorkerPool {
263
284
  remainingQueue: [...this.taskQueue]
264
285
  });
265
286
  this.eventSubject.complete();
266
- yield Promise.all(this.workers.map((worker) => __awaiter(this, void 0, void 0, function* () { return Thread.terminate(yield worker.init); })));
287
+ yield Promise.all(this.workers.map((worker) => __awaiter(this, void 0, void 0, function* () {
288
+ try {
289
+ yield Thread.terminate(yield worker.init);
290
+ }
291
+ catch (error) {
292
+ // The worker never finished initializing (e.g. it hit the init
293
+ // timeout), so `worker.init` rejected and there is no thread to
294
+ // terminate here — spawn() already tore down the underlying worker.
295
+ this.debug("Worker did not initialize; nothing to terminate:", error);
296
+ }
297
+ })));
267
298
  });
268
299
  }
269
300
  }
@@ -274,6 +305,8 @@ WorkerPool.EventType = PoolEventType;
274
305
  function PoolConstructor(spawnWorker, optionsOrSize) {
275
306
  // The function exists only so we don't need to use `new` to create a pool (we still can, though).
276
307
  // If the Pool is a class or not is an implementation detail that should not concern the user.
308
+ // The explicit `Pool<ThreadType>` return type keeps the private `WorkerPool` class out of the
309
+ // public type surface, so consumers can name/re-export the pool type (#417).
277
310
  return new WorkerPool(spawnWorker, optionsOrSize);
278
311
  }
279
312
  PoolConstructor.EventType = PoolEventType;
@@ -281,3 +314,4 @@ PoolConstructor.EventType = PoolEventType;
281
314
  * Thread pool constructor. Creates a new pool and spawns its worker threads.
282
315
  */
283
316
  export const Pool = PoolConstructor;
317
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/master/pool.ts"],"names":[],"mappings":"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"}
@@ -5,3 +5,4 @@ if (typeof global !== "undefined") {
5
5
  else if (typeof window !== "undefined") {
6
6
  window.Worker = WorkerImplementation;
7
7
  }
8
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/master/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIxD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,MAAM,GAAG,oBAAoB,CAAA;AAC/C,CAAC;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACxC,MAAc,CAAC,MAAM,GAAG,oBAAoB,CAAA;AAC/C,CAAC"}
@@ -75,17 +75,32 @@ function createEventObservable(worker, workerTermination) {
75
75
  };
76
76
  observer.next(workerEvent);
77
77
  });
78
- worker.addEventListener("message", messageHandler);
79
- worker.addEventListener("unhandledrejection", rejectionHandler);
80
- workerTermination.then(() => {
78
+ let finished = false;
79
+ const removeListeners = () => {
80
+ worker.removeEventListener("message", messageHandler);
81
+ worker.removeEventListener("unhandledrejection", rejectionHandler);
82
+ worker.removeEventListener("exit", exitHandler);
83
+ };
84
+ const finish = () => {
85
+ if (finished)
86
+ return;
87
+ finished = true;
81
88
  const terminationEvent = {
82
89
  type: WorkerEventType.termination
83
90
  };
84
- worker.removeEventListener("message", messageHandler);
85
- worker.removeEventListener("unhandledrejection", rejectionHandler);
91
+ removeListeners();
86
92
  observer.next(terminationEvent);
87
93
  observer.complete();
88
- });
94
+ };
95
+ // A worker can also go away without Thread.terminate() being called (crash,
96
+ // process.exit() in the worker). Complete the observable and detach the
97
+ // listeners in that case, too, instead of leaving them behind forever.
98
+ const exitHandler = (() => finish());
99
+ worker.addEventListener("message", messageHandler);
100
+ worker.addEventListener("unhandledrejection", rejectionHandler);
101
+ worker.addEventListener("exit", exitHandler);
102
+ workerTermination.then(finish);
103
+ return removeListeners;
89
104
  });
90
105
  }
91
106
  function createTerminator(worker) {
@@ -120,7 +135,7 @@ function setPrivateThreadProps(raw, worker, workerEvents, terminate) {
120
135
  */
121
136
  export function spawn(worker, options) {
122
137
  return __awaiter(this, void 0, void 0, function* () {
123
- var _a, _b;
138
+ var _a, _b, _c, _d;
124
139
  debugSpawn("Initializing new thread");
125
140
  const timeout = options && options.timeout ? options.timeout : initMessageTimeout;
126
141
  let initMessage;
@@ -147,7 +162,10 @@ export function spawn(worker, options) {
147
162
  }
148
163
  else {
149
164
  const type = exposed.type;
165
+ // Same teardown as a failed init: don't leak a live worker handle.
166
+ yield Promise.resolve((_d = (_c = worker).terminate) === null || _d === void 0 ? void 0 : _d.call(_c)).catch(() => undefined);
150
167
  throw Error(`Worker init message states unexpected type of expose(): ${type}`);
151
168
  }
152
169
  });
153
170
  }
171
+ //# sourceMappingURL=spawn.js.map