@xylabs/threads 4.7.6 → 4.8.0-rc.2
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.
- package/dist/{browser/master/index-browser.mjs → neutral/index.mjs} +131 -71
- package/dist/neutral/index.mjs.map +1 -0
- package/dist/neutral/master/implementation.mjs +264 -0
- package/dist/neutral/master/implementation.mjs.map +1 -0
- package/dist/{browser/index-browser.mjs → neutral/master/index.mjs} +95 -103
- package/dist/neutral/master/index.mjs.map +1 -0
- package/dist/{node/master/pool-node.mjs → neutral/master/pool.mjs} +130 -20
- package/dist/neutral/master/pool.mjs.map +1 -0
- package/dist/neutral/master/register.mjs +131 -21
- package/dist/neutral/master/register.mjs.map +1 -1
- package/dist/types/{index-node.d.ts → index.d.ts} +3 -3
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/master/implementation.d.ts +7 -0
- package/dist/types/master/implementation.d.ts.map +1 -0
- package/dist/types/master/{index-node.d.ts → index.d.ts} +3 -3
- package/dist/types/master/index.d.ts.map +1 -0
- package/dist/types/master/{pool-node.d.ts → pool.d.ts} +1 -1
- package/dist/types/master/pool.d.ts.map +1 -0
- package/package.json +13 -28
- package/dist/browser/index-browser.mjs.map +0 -1
- package/dist/browser/master/index-browser.mjs.map +0 -1
- package/dist/browser/master/pool-browser.mjs +0 -323
- package/dist/browser/master/pool-browser.mjs.map +0 -1
- package/dist/node/index-node.mjs +0 -915
- package/dist/node/index-node.mjs.map +0 -1
- package/dist/node/master/index-node.mjs +0 -881
- package/dist/node/master/index-node.mjs.map +0 -1
- package/dist/node/master/pool-node.mjs.map +0 -1
- package/dist/types/index-browser.d.ts +0 -9
- package/dist/types/index-browser.d.ts.map +0 -1
- package/dist/types/index-node.d.ts.map +0 -1
- package/dist/types/master/index-browser.d.ts +0 -13
- package/dist/types/master/index-browser.d.ts.map +0 -1
- package/dist/types/master/index-node.d.ts.map +0 -1
- package/dist/types/master/pool-browser.d.ts +0 -93
- package/dist/types/master/pool-browser.d.ts.map +0 -1
- package/dist/types/master/pool-node.d.ts.map +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
+
}) : x)(function(x) {
|
|
5
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// src/master/implementation.browser.ts
|
|
14
|
+
var implementation_browser_exports = {};
|
|
15
|
+
__export(implementation_browser_exports, {
|
|
16
|
+
defaultPoolSize: () => defaultPoolSize,
|
|
17
|
+
getWorkerImplementation: () => getWorkerImplementation,
|
|
18
|
+
isWorkerRuntime: () => isWorkerRuntime
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// src/master/get-bundle-url.browser.ts
|
|
22
|
+
var bundleURL;
|
|
23
|
+
function getBundleURLCached() {
|
|
24
|
+
if (!bundleURL) {
|
|
25
|
+
bundleURL = getBundleURL();
|
|
26
|
+
}
|
|
27
|
+
return bundleURL;
|
|
28
|
+
}
|
|
29
|
+
function getBundleURL() {
|
|
30
|
+
try {
|
|
31
|
+
throw new Error("getBundleURL failed");
|
|
32
|
+
} catch (ex) {
|
|
33
|
+
const err = ex;
|
|
34
|
+
const matches = ("" + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^\n)]+/g);
|
|
35
|
+
if (matches) {
|
|
36
|
+
return getBaseURL(matches[0]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return "/";
|
|
40
|
+
}
|
|
41
|
+
function getBaseURL(url) {
|
|
42
|
+
return ("" + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, "$1") + "/";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/master/implementation.browser.ts
|
|
46
|
+
var defaultPoolSize = typeof navigator !== "undefined" && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
|
|
47
|
+
var isAbsoluteURL = (value) => /^[A-Za-z][\d+.A-Za-z\-]*:/.test(value);
|
|
48
|
+
function createSourceBlobURL(code) {
|
|
49
|
+
const blob = new Blob([code], { type: "application/javascript" });
|
|
50
|
+
return URL.createObjectURL(blob);
|
|
51
|
+
}
|
|
52
|
+
function selectWorkerImplementation() {
|
|
53
|
+
if (typeof Worker === "undefined") {
|
|
54
|
+
return class NoWebWorker {
|
|
55
|
+
constructor() {
|
|
56
|
+
throw new Error(
|
|
57
|
+
"No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers."
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
class WebWorker extends Worker {
|
|
63
|
+
constructor(url, options) {
|
|
64
|
+
if (typeof url === "string" && options && options._baseURL) {
|
|
65
|
+
url = new URL(url, options._baseURL);
|
|
66
|
+
} else if (typeof url === "string" && !isAbsoluteURL(url) && /^file:\/\//i.test(getBundleURLCached())) {
|
|
67
|
+
url = new URL(url, getBundleURLCached().replace(/\/[^/]+$/, "/"));
|
|
68
|
+
if (options?.CORSWorkaround ?? true) {
|
|
69
|
+
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (typeof url === "string" && isAbsoluteURL(url) && (options?.CORSWorkaround ?? true)) {
|
|
73
|
+
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`);
|
|
74
|
+
}
|
|
75
|
+
super(url, options);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class BlobWorker extends WebWorker {
|
|
79
|
+
constructor(blob, options) {
|
|
80
|
+
const url = globalThis.URL.createObjectURL(blob);
|
|
81
|
+
super(url, options);
|
|
82
|
+
}
|
|
83
|
+
static fromText(source, options) {
|
|
84
|
+
const blob = new globalThis.Blob([source], { type: "text/javascript" });
|
|
85
|
+
return new BlobWorker(blob, options);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
blob: BlobWorker,
|
|
90
|
+
default: WebWorker
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
var implementation;
|
|
94
|
+
function getWorkerImplementation() {
|
|
95
|
+
if (!implementation) {
|
|
96
|
+
implementation = selectWorkerImplementation();
|
|
97
|
+
}
|
|
98
|
+
return implementation;
|
|
99
|
+
}
|
|
100
|
+
function isWorkerRuntime() {
|
|
101
|
+
const isWindowContext = typeof globalThis !== "undefined" && typeof Window !== "undefined" && globalThis instanceof Window;
|
|
102
|
+
return typeof globalThis !== "undefined" && self["postMessage"] && !isWindowContext ? true : false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// src/master/implementation.node.ts
|
|
106
|
+
var implementation_node_exports = {};
|
|
107
|
+
__export(implementation_node_exports, {
|
|
108
|
+
defaultPoolSize: () => defaultPoolSize2,
|
|
109
|
+
getWorkerImplementation: () => getWorkerImplementation2,
|
|
110
|
+
isWorkerRuntime: () => isWorkerRuntime2
|
|
111
|
+
});
|
|
112
|
+
import { EventEmitter } from "node:events";
|
|
113
|
+
import { cpus } from "node:os";
|
|
114
|
+
import path from "node:path";
|
|
115
|
+
import { cwd } from "node:process";
|
|
116
|
+
import { Worker as NativeWorker } from "node:worker_threads";
|
|
117
|
+
var defaultPoolSize2 = cpus().length;
|
|
118
|
+
function resolveScriptPath(scriptPath, baseURL) {
|
|
119
|
+
const makeAbsolute = (filePath) => {
|
|
120
|
+
return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath);
|
|
121
|
+
};
|
|
122
|
+
const absolutePath = makeAbsolute(scriptPath);
|
|
123
|
+
return absolutePath;
|
|
124
|
+
}
|
|
125
|
+
function initWorkerThreadsWorker() {
|
|
126
|
+
let allWorkers = [];
|
|
127
|
+
class Worker2 extends NativeWorker {
|
|
128
|
+
mappedEventListeners;
|
|
129
|
+
constructor(scriptPath, options) {
|
|
130
|
+
const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL);
|
|
131
|
+
if (resolvedScriptPath) {
|
|
132
|
+
super(resolvedScriptPath, options);
|
|
133
|
+
} else {
|
|
134
|
+
const sourceCode = scriptPath;
|
|
135
|
+
super(sourceCode, { ...options, eval: true });
|
|
136
|
+
}
|
|
137
|
+
this.mappedEventListeners = /* @__PURE__ */ new WeakMap();
|
|
138
|
+
allWorkers.push(this);
|
|
139
|
+
}
|
|
140
|
+
addEventListener(eventName, rawListener) {
|
|
141
|
+
const listener = (message) => {
|
|
142
|
+
rawListener({ data: message });
|
|
143
|
+
};
|
|
144
|
+
this.mappedEventListeners.set(rawListener, listener);
|
|
145
|
+
this.on(eventName, listener);
|
|
146
|
+
}
|
|
147
|
+
removeEventListener(eventName, rawListener) {
|
|
148
|
+
const listener = this.mappedEventListeners.get(rawListener) || rawListener;
|
|
149
|
+
this.off(eventName, listener);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const terminateWorkersAndMaster = () => {
|
|
153
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
154
|
+
() => process.exit(0),
|
|
155
|
+
() => process.exit(1)
|
|
156
|
+
);
|
|
157
|
+
allWorkers = [];
|
|
158
|
+
};
|
|
159
|
+
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
160
|
+
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
161
|
+
class BlobWorker extends Worker2 {
|
|
162
|
+
constructor(blob, options) {
|
|
163
|
+
super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
|
|
164
|
+
}
|
|
165
|
+
static fromText(source, options) {
|
|
166
|
+
return new Worker2(source, { ...options, fromSource: true });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
blob: BlobWorker,
|
|
171
|
+
default: Worker2
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function initTinyWorker() {
|
|
175
|
+
const TinyWorker = __require("tiny-worker");
|
|
176
|
+
let allWorkers = [];
|
|
177
|
+
class Worker2 extends TinyWorker {
|
|
178
|
+
emitter;
|
|
179
|
+
constructor(scriptPath, options) {
|
|
180
|
+
const resolvedScriptPath = options && options.fromSource ? null : process.platform === "win32" ? `file:///${resolveScriptPath(scriptPath).replaceAll("\\", "/")}` : resolveScriptPath(scriptPath);
|
|
181
|
+
if (resolvedScriptPath) {
|
|
182
|
+
super(resolvedScriptPath, [], { esm: true });
|
|
183
|
+
} else {
|
|
184
|
+
const sourceCode = scriptPath;
|
|
185
|
+
super(new Function(sourceCode), [], { esm: true });
|
|
186
|
+
}
|
|
187
|
+
allWorkers.push(this);
|
|
188
|
+
this.emitter = new EventEmitter();
|
|
189
|
+
this.onerror = (error) => this.emitter.emit("error", error);
|
|
190
|
+
this.onmessage = (message) => this.emitter.emit("message", message);
|
|
191
|
+
}
|
|
192
|
+
addEventListener(eventName, listener) {
|
|
193
|
+
this.emitter.addListener(eventName, listener);
|
|
194
|
+
}
|
|
195
|
+
removeEventListener(eventName, listener) {
|
|
196
|
+
this.emitter.removeListener(eventName, listener);
|
|
197
|
+
}
|
|
198
|
+
terminate() {
|
|
199
|
+
allWorkers = allWorkers.filter((worker) => worker !== this);
|
|
200
|
+
return super.terminate();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const terminateWorkersAndMaster = () => {
|
|
204
|
+
Promise.all(allWorkers.map((worker) => worker.terminate())).then(
|
|
205
|
+
() => process.exit(0),
|
|
206
|
+
() => process.exit(1)
|
|
207
|
+
);
|
|
208
|
+
allWorkers = [];
|
|
209
|
+
};
|
|
210
|
+
process.on("SIGINT", () => terminateWorkersAndMaster());
|
|
211
|
+
process.on("SIGTERM", () => terminateWorkersAndMaster());
|
|
212
|
+
class BlobWorker extends Worker2 {
|
|
213
|
+
constructor(blob, options) {
|
|
214
|
+
super(Buffer.from(blob).toString("utf-8"), { ...options, fromSource: true });
|
|
215
|
+
}
|
|
216
|
+
static fromText(source, options) {
|
|
217
|
+
return new Worker2(source, { ...options, fromSource: true });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
blob: BlobWorker,
|
|
222
|
+
default: Worker2
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
var implementation2;
|
|
226
|
+
var isTinyWorker;
|
|
227
|
+
function selectWorkerImplementation2() {
|
|
228
|
+
try {
|
|
229
|
+
isTinyWorker = false;
|
|
230
|
+
return initWorkerThreadsWorker();
|
|
231
|
+
} catch (ex) {
|
|
232
|
+
console.error(ex);
|
|
233
|
+
console.debug("Node worker_threads not available. Trying to fall back to tiny-worker polyfill...");
|
|
234
|
+
isTinyWorker = true;
|
|
235
|
+
return initTinyWorker();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function getWorkerImplementation2() {
|
|
239
|
+
if (!implementation2) {
|
|
240
|
+
implementation2 = selectWorkerImplementation2();
|
|
241
|
+
}
|
|
242
|
+
return implementation2;
|
|
243
|
+
}
|
|
244
|
+
function isWorkerRuntime2() {
|
|
245
|
+
if (isTinyWorker) {
|
|
246
|
+
return globalThis !== void 0 && self["postMessage"] ? true : false;
|
|
247
|
+
} else {
|
|
248
|
+
const isMainThread = typeof __non_webpack_require__ === "function" ? __non_webpack_require__("worker_threads").isMainThread : eval("require")("worker_threads").isMainThread;
|
|
249
|
+
return !isMainThread;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// src/master/implementation.ts
|
|
254
|
+
var runningInNode = typeof process !== "undefined" && process.arch !== "browser" && "pid" in process;
|
|
255
|
+
var implementation3 = runningInNode ? implementation_node_exports : implementation_browser_exports;
|
|
256
|
+
var defaultPoolSize3 = implementation3.defaultPoolSize;
|
|
257
|
+
var getWorkerImplementation3 = implementation3.getWorkerImplementation;
|
|
258
|
+
var isWorkerRuntime3 = implementation3.isWorkerRuntime;
|
|
259
|
+
export {
|
|
260
|
+
defaultPoolSize3 as defaultPoolSize,
|
|
261
|
+
getWorkerImplementation3 as getWorkerImplementation,
|
|
262
|
+
isWorkerRuntime3 as isWorkerRuntime
|
|
263
|
+
};
|
|
264
|
+
//# sourceMappingURL=implementation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/master/implementation.browser.ts","../../../src/master/get-bundle-url.browser.ts","../../../src/master/implementation.node.ts","../../../src/master/implementation.ts"],"sourcesContent":["/* eslint-disable @stylistic/max-len */\n/* eslint-disable import-x/no-internal-modules */\n// tslint:disable max-classes-per-file\n\nimport type { ImplementationExport, ThreadsWorkerOptions } from '../types/master.ts'\nimport { getBundleURL } from './get-bundle-url.browser.ts'\n\nexport const defaultPoolSize = typeof navigator !== 'undefined' && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4\n\nconst isAbsoluteURL = (value: string) => /^[A-Za-z][\\d+.A-Za-z\\-]*:/.test(value)\n\nfunction createSourceBlobURL(code: string): string {\n const blob = new Blob([code], { type: 'application/javascript' })\n return URL.createObjectURL(blob)\n}\n\nfunction selectWorkerImplementation(): ImplementationExport {\n if (typeof Worker === 'undefined') {\n // Might happen on Safari, for instance\n // The idea is to only fail if the constructor is actually used\n return class NoWebWorker {\n constructor() {\n throw new Error(\n \"No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.\",\n )\n }\n } as unknown as ImplementationExport\n }\n\n class WebWorker extends Worker {\n constructor(url: string | URL, options?: ThreadsWorkerOptions) {\n if (typeof url === 'string' && options && options._baseURL) {\n url = new URL(url, options._baseURL)\n } else if (typeof url === 'string' && !isAbsoluteURL(url) && /^file:\\/\\//i.test(getBundleURL())) {\n url = new URL(url, getBundleURL().replace(/\\/[^/]+$/, '/'))\n if (options?.CORSWorkaround ?? true) {\n url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`)\n }\n }\n if (\n typeof url === 'string'\n && isAbsoluteURL(url) // Create source code blob loading JS file via `importScripts()`\n // to circumvent worker CORS restrictions\n && (options?.CORSWorkaround ?? true)\n ) {\n url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`)\n }\n super(url, options)\n }\n }\n\n class BlobWorker extends WebWorker {\n constructor(blob: Blob, options?: ThreadsWorkerOptions) {\n const url = globalThis.URL.createObjectURL(blob)\n super(url, options)\n }\n\n static fromText(source: string, options?: ThreadsWorkerOptions): WebWorker {\n const blob = new globalThis.Blob([source], { type: 'text/javascript' })\n return new BlobWorker(blob, options)\n }\n }\n\n return {\n blob: BlobWorker,\n default: WebWorker,\n }\n}\n\nlet implementation: ImplementationExport\n\nexport function getWorkerImplementation(): ImplementationExport {\n if (!implementation) {\n implementation = selectWorkerImplementation()\n }\n return implementation\n}\n\nexport function isWorkerRuntime() {\n const isWindowContext = typeof globalThis !== 'undefined' && typeof Window !== 'undefined' && globalThis instanceof Window\n return typeof globalThis !== 'undefined' && self['postMessage'] && !isWindowContext ? true : false\n}\n","// Source: <https://github.com/parcel-bundler/parcel/blob/master/packages/core/parcel-bundler/src/builtins/bundle-url.js>\n\nlet bundleURL: string | undefined\n\nfunction getBundleURLCached(): string {\n if (!bundleURL) {\n bundleURL = getBundleURL()\n }\n\n return bundleURL\n}\n\nfunction getBundleURL(): string {\n // Attempt to find the URL of the current script and use that as the base URL\n try {\n throw new Error('getBundleURL failed')\n } catch (ex) {\n const err = ex as Error\n const matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\\/\\/[^\\n)]+/g)\n if (matches) {\n return getBaseURL(matches[0])\n }\n }\n\n return '/'\n}\n\nfunction getBaseURL(url: string): string {\n return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\\/\\/.+)?\\/[^/]+(?:\\?.*)?$/, '$1') + '/'\n}\n\nexport { getBundleURLCached as getBundleURL }\n","/* eslint-disable @typescript-eslint/no-require-imports */\n\n/* eslint-disable unicorn/prefer-add-event-listener */\n/* eslint-disable unicorn/prefer-event-target */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable unicorn/text-encoding-identifier-case */\n\nimport { EventEmitter } from 'node:events'\nimport { cpus } from 'node:os'\nimport path from 'node:path'\nimport { cwd } from 'node:process'\nimport { Worker as NativeWorker } from 'node:worker_threads'\n\nimport type {\n ImplementationExport, ThreadsWorkerOptions, WorkerImplementation,\n// eslint-disable-next-line import-x/no-internal-modules\n} from '../types/master.ts'\n\ndeclare const __non_webpack_require__: typeof require\n\ntype WorkerEventName = 'error' | 'message'\n\nexport const defaultPoolSize = cpus().length\n\nfunction resolveScriptPath(scriptPath: string, baseURL?: string | undefined) {\n const makeAbsolute = (filePath: string) => {\n return path.isAbsolute(filePath) ? filePath : path.join(baseURL ?? cwd(), filePath)\n }\n\n const absolutePath = makeAbsolute(scriptPath)\n return absolutePath\n}\n\nfunction initWorkerThreadsWorker(): ImplementationExport {\n let allWorkers: Array<NativeWorker> = []\n\n class Worker extends NativeWorker {\n private mappedEventListeners: WeakMap<EventListener, EventListener>\n\n constructor(scriptPath: string, options?: ThreadsWorkerOptions & { fromSource: boolean }) {\n const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options ?? {})._baseURL)\n if (resolvedScriptPath) {\n super(resolvedScriptPath, options)\n } else {\n // `options.fromSource` is true\n const sourceCode = scriptPath\n super(sourceCode, { ...options, eval: true })\n }\n\n this.mappedEventListeners = new WeakMap()\n allWorkers.push(this)\n }\n\n addEventListener(eventName: string, rawListener: EventListener) {\n const listener = (message: any) => {\n rawListener({ data: message } as any)\n }\n this.mappedEventListeners.set(rawListener, listener)\n this.on(eventName, listener)\n }\n\n removeEventListener(eventName: string, rawListener: EventListener) {\n const listener = this.mappedEventListeners.get(rawListener) || rawListener\n this.off(eventName, listener)\n }\n }\n\n const terminateWorkersAndMaster = () => {\n // we should terminate all workers and then gracefully shutdown self process\n Promise.all(allWorkers.map(worker => worker.terminate())).then(\n () => process.exit(0),\n () => process.exit(1),\n )\n allWorkers = []\n }\n\n // Take care to not leave orphaned processes behind. See #147.\n process.on('SIGINT', () => terminateWorkersAndMaster())\n process.on('SIGTERM', () => terminateWorkersAndMaster())\n\n class BlobWorker extends Worker {\n constructor(blob: Uint8Array, options?: ThreadsWorkerOptions) {\n super(Buffer.from(blob).toString('utf-8'), { ...options, fromSource: true })\n }\n\n static fromText(source: string, options?: ThreadsWorkerOptions): WorkerImplementation {\n return new Worker(source, { ...options, fromSource: true }) as any\n }\n }\n\n return {\n blob: BlobWorker as any,\n default: Worker as any,\n }\n}\n\nfunction initTinyWorker(): ImplementationExport {\n const TinyWorker = require('tiny-worker')\n\n let allWorkers: Array<typeof TinyWorker> = []\n\n class Worker extends TinyWorker {\n private emitter: EventEmitter\n\n constructor(scriptPath: string, options?: ThreadsWorkerOptions & { fromSource?: boolean }) {\n // Need to apply a work-around for Windows or it will choke upon the absolute path\n // (`Error [ERR_INVALID_PROTOCOL]: Protocol 'c:' not supported`)\n const resolvedScriptPath\n = options && options.fromSource\n ? null\n : process.platform === 'win32'\n ? `file:///${resolveScriptPath(scriptPath).replaceAll('\\\\', '/')}`\n : resolveScriptPath(scriptPath)\n\n if (resolvedScriptPath) {\n super(resolvedScriptPath, [], { esm: true })\n } else {\n // `options.fromSource` is true\n const sourceCode = scriptPath\n super(new Function(sourceCode), [], { esm: true })\n }\n\n allWorkers.push(this)\n\n this.emitter = new EventEmitter()\n this.onerror = (error: Error) => this.emitter.emit('error', error)\n this.onmessage = (message: MessageEvent) => this.emitter.emit('message', message)\n }\n\n addEventListener(eventName: WorkerEventName, listener: EventListener) {\n this.emitter.addListener(eventName, listener)\n }\n\n removeEventListener(eventName: WorkerEventName, listener: EventListener) {\n this.emitter.removeListener(eventName, listener)\n }\n\n terminate() {\n allWorkers = allWorkers.filter(worker => worker !== this)\n return super.terminate()\n }\n }\n\n const terminateWorkersAndMaster = () => {\n // we should terminate all workers and then gracefully shutdown self process\n Promise.all(allWorkers.map(worker => worker.terminate())).then(\n () => process.exit(0),\n () => process.exit(1),\n )\n allWorkers = []\n }\n\n // Take care to not leave orphaned processes behind\n // See <https://github.com/avoidwork/tiny-worker#faq>\n process.on('SIGINT', () => terminateWorkersAndMaster())\n process.on('SIGTERM', () => terminateWorkersAndMaster())\n\n class BlobWorker extends Worker {\n constructor(blob: Uint8Array, options?: ThreadsWorkerOptions) {\n super(Buffer.from(blob).toString('utf-8'), { ...options, fromSource: true })\n }\n\n static fromText(source: string, options?: ThreadsWorkerOptions): WorkerImplementation {\n return new Worker(source, { ...options, fromSource: true }) as any\n }\n }\n\n return {\n blob: BlobWorker as any,\n default: Worker as any,\n }\n}\n\nlet implementation: ImplementationExport\nlet isTinyWorker: boolean\n\nfunction selectWorkerImplementation(): ImplementationExport {\n try {\n isTinyWorker = false\n return initWorkerThreadsWorker()\n } catch (ex) {\n console.error(ex)\n // tslint:disable-next-line no-console\n console.debug('Node worker_threads not available. Trying to fall back to tiny-worker polyfill...')\n isTinyWorker = true\n return initTinyWorker()\n }\n}\n\nexport function getWorkerImplementation(): ImplementationExport {\n if (!implementation) {\n implementation = selectWorkerImplementation()\n }\n return implementation\n}\n\nexport function isWorkerRuntime() {\n if (isTinyWorker) {\n return globalThis !== undefined && self['postMessage'] ? true : false\n } else {\n // Webpack hack\n const isMainThread\n = typeof __non_webpack_require__ === 'function'\n ? __non_webpack_require__('worker_threads').isMainThread\n : eval('require')('worker_threads').isMainThread\n return !isMainThread\n }\n}\n","/*\n * This file is only a stub to make './implementation' resolve to the right module.\n */\n\n// We alias `src/master/implementation` to `src/master/implementation.browser` for web\n// browsers already in the package.json, so if get here, it's safe to pass-through the\n// node implementation\n\nimport * as BrowserImplementation from './implementation.browser.ts'\nimport * as NodeImplementation from './implementation.node.ts'\n\nconst runningInNode = typeof process !== 'undefined' && (process.arch as string) !== 'browser' && 'pid' in process\nconst implementation = runningInNode ? NodeImplementation : BrowserImplementation\n\n/** Default size of pools. Depending on the platform the value might vary from device to device. */\nexport const defaultPoolSize = implementation.defaultPoolSize\n\nexport const getWorkerImplementation = implementation.getWorkerImplementation\n\n/** Returns `true` if this code is currently running in a worker. */\nexport const isWorkerRuntime = implementation.isWorkerRuntime\n"],"mappings":"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","names":["defaultPoolSize","getWorkerImplementation","isWorkerRuntime","Worker","implementation","selectWorkerImplementation","implementation","defaultPoolSize","getWorkerImplementation","isWorkerRuntime"]}
|
|
@@ -1,60 +1,22 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
1
2
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
3
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
4
|
}) : x)(function(x) {
|
|
4
5
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
6
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
7
|
});
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const fallbackDeserializer = extend.deserialize.bind(extend);
|
|
11
|
-
const fallbackSerializer = extend.serialize.bind(extend);
|
|
12
|
-
return {
|
|
13
|
-
deserialize(message) {
|
|
14
|
-
return implementation3.deserialize(message, fallbackDeserializer);
|
|
15
|
-
},
|
|
16
|
-
serialize(input) {
|
|
17
|
-
return implementation3.serialize(input, fallbackSerializer);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var DefaultErrorSerializer = {
|
|
22
|
-
deserialize(message) {
|
|
23
|
-
return Object.assign(new Error(message.message), {
|
|
24
|
-
name: message.name,
|
|
25
|
-
stack: message.stack
|
|
26
|
-
});
|
|
27
|
-
},
|
|
28
|
-
serialize(error) {
|
|
29
|
-
return {
|
|
30
|
-
__error_marker: "$$error",
|
|
31
|
-
message: error.message,
|
|
32
|
-
name: error.name,
|
|
33
|
-
stack: error.stack
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
|
|
38
|
-
var DefaultSerializer = {
|
|
39
|
-
deserialize(message) {
|
|
40
|
-
return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
|
|
41
|
-
},
|
|
42
|
-
serialize(input) {
|
|
43
|
-
return input instanceof Error ? DefaultErrorSerializer.serialize(input) : input;
|
|
44
|
-
}
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
45
11
|
};
|
|
46
12
|
|
|
47
|
-
// src/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
function serialize(input) {
|
|
56
|
-
return globalThis.registeredSerializer.serialize(input);
|
|
57
|
-
}
|
|
13
|
+
// src/master/implementation.browser.ts
|
|
14
|
+
var implementation_browser_exports = {};
|
|
15
|
+
__export(implementation_browser_exports, {
|
|
16
|
+
defaultPoolSize: () => defaultPoolSize,
|
|
17
|
+
getWorkerImplementation: () => getWorkerImplementation,
|
|
18
|
+
isWorkerRuntime: () => isWorkerRuntime
|
|
19
|
+
});
|
|
58
20
|
|
|
59
21
|
// src/master/get-bundle-url.browser.ts
|
|
60
22
|
var bundleURL;
|
|
@@ -140,35 +102,13 @@ function isWorkerRuntime() {
|
|
|
140
102
|
return typeof globalThis !== "undefined" && self["postMessage"] && !isWindowContext ? true : false;
|
|
141
103
|
}
|
|
142
104
|
|
|
143
|
-
// src/master/pool-node.ts
|
|
144
|
-
import DebugLogger from "debug";
|
|
145
|
-
import {
|
|
146
|
-
multicast,
|
|
147
|
-
Observable,
|
|
148
|
-
Subject
|
|
149
|
-
} from "observable-fns";
|
|
150
|
-
|
|
151
|
-
// src/ponyfills.ts
|
|
152
|
-
function allSettled(values) {
|
|
153
|
-
return Promise.all(
|
|
154
|
-
values.map((item) => {
|
|
155
|
-
const onFulfill = (value) => {
|
|
156
|
-
return { status: "fulfilled", value };
|
|
157
|
-
};
|
|
158
|
-
const onReject = (reason) => {
|
|
159
|
-
return { reason, status: "rejected" };
|
|
160
|
-
};
|
|
161
|
-
const itemPromise = Promise.resolve(item);
|
|
162
|
-
try {
|
|
163
|
-
return itemPromise.then(onFulfill, onReject);
|
|
164
|
-
} catch (error) {
|
|
165
|
-
return Promise.reject(error);
|
|
166
|
-
}
|
|
167
|
-
})
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
105
|
// src/master/implementation.node.ts
|
|
106
|
+
var implementation_node_exports = {};
|
|
107
|
+
__export(implementation_node_exports, {
|
|
108
|
+
defaultPoolSize: () => defaultPoolSize2,
|
|
109
|
+
getWorkerImplementation: () => getWorkerImplementation2,
|
|
110
|
+
isWorkerRuntime: () => isWorkerRuntime2
|
|
111
|
+
});
|
|
172
112
|
import { EventEmitter } from "node:events";
|
|
173
113
|
import { cpus } from "node:os";
|
|
174
114
|
import path from "node:path";
|
|
@@ -310,6 +250,41 @@ function isWorkerRuntime2() {
|
|
|
310
250
|
}
|
|
311
251
|
}
|
|
312
252
|
|
|
253
|
+
// src/master/implementation.ts
|
|
254
|
+
var runningInNode = typeof process !== "undefined" && process.arch !== "browser" && "pid" in process;
|
|
255
|
+
var implementation3 = runningInNode ? implementation_node_exports : implementation_browser_exports;
|
|
256
|
+
var defaultPoolSize3 = implementation3.defaultPoolSize;
|
|
257
|
+
var getWorkerImplementation3 = implementation3.getWorkerImplementation;
|
|
258
|
+
var isWorkerRuntime3 = implementation3.isWorkerRuntime;
|
|
259
|
+
|
|
260
|
+
// src/master/pool.ts
|
|
261
|
+
import DebugLogger from "debug";
|
|
262
|
+
import {
|
|
263
|
+
multicast,
|
|
264
|
+
Observable,
|
|
265
|
+
Subject
|
|
266
|
+
} from "observable-fns";
|
|
267
|
+
|
|
268
|
+
// src/ponyfills.ts
|
|
269
|
+
function allSettled(values) {
|
|
270
|
+
return Promise.all(
|
|
271
|
+
values.map((item) => {
|
|
272
|
+
const onFulfill = (value) => {
|
|
273
|
+
return { status: "fulfilled", value };
|
|
274
|
+
};
|
|
275
|
+
const onReject = (reason) => {
|
|
276
|
+
return { reason, status: "rejected" };
|
|
277
|
+
};
|
|
278
|
+
const itemPromise = Promise.resolve(item);
|
|
279
|
+
try {
|
|
280
|
+
return itemPromise.then(onFulfill, onReject);
|
|
281
|
+
} catch (error) {
|
|
282
|
+
return Promise.reject(error);
|
|
283
|
+
}
|
|
284
|
+
})
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
313
288
|
// src/master/pool-types.ts
|
|
314
289
|
var PoolEventType = /* @__PURE__ */ ((PoolEventType2) => {
|
|
315
290
|
PoolEventType2["initialized"] = "initialized";
|
|
@@ -349,7 +324,7 @@ var Thread = {
|
|
|
349
324
|
}
|
|
350
325
|
};
|
|
351
326
|
|
|
352
|
-
// src/master/pool
|
|
327
|
+
// src/master/pool.ts
|
|
353
328
|
var nextPoolID = 1;
|
|
354
329
|
function createArray(size) {
|
|
355
330
|
const array = [];
|
|
@@ -388,7 +363,7 @@ var WorkerPool = class {
|
|
|
388
363
|
taskQueue = [];
|
|
389
364
|
constructor(spawnWorker, optionsOrSize) {
|
|
390
365
|
const options = typeof optionsOrSize === "number" ? { size: optionsOrSize } : optionsOrSize || {};
|
|
391
|
-
const { size =
|
|
366
|
+
const { size = defaultPoolSize3 } = options;
|
|
392
367
|
this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`);
|
|
393
368
|
this.options = options;
|
|
394
369
|
this.workers = spawnWorkers(spawnWorker, size);
|
|
@@ -601,6 +576,42 @@ var Pool = PoolConstructor;
|
|
|
601
576
|
import DebugLogger3 from "debug";
|
|
602
577
|
import { Observable as Observable4 } from "observable-fns";
|
|
603
578
|
|
|
579
|
+
// src/serializers.ts
|
|
580
|
+
var DefaultErrorSerializer = {
|
|
581
|
+
deserialize(message) {
|
|
582
|
+
return Object.assign(new Error(message.message), {
|
|
583
|
+
name: message.name,
|
|
584
|
+
stack: message.stack
|
|
585
|
+
});
|
|
586
|
+
},
|
|
587
|
+
serialize(error) {
|
|
588
|
+
return {
|
|
589
|
+
__error_marker: "$$error",
|
|
590
|
+
message: error.message,
|
|
591
|
+
name: error.name,
|
|
592
|
+
stack: error.stack
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
|
|
597
|
+
var DefaultSerializer = {
|
|
598
|
+
deserialize(message) {
|
|
599
|
+
return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
|
|
600
|
+
},
|
|
601
|
+
serialize(input) {
|
|
602
|
+
return input instanceof Error ? DefaultErrorSerializer.serialize(input) : input;
|
|
603
|
+
}
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
// src/common.ts
|
|
607
|
+
globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSerializer;
|
|
608
|
+
function deserialize(message) {
|
|
609
|
+
return globalThis.registeredSerializer.deserialize(message);
|
|
610
|
+
}
|
|
611
|
+
function serialize(input) {
|
|
612
|
+
return globalThis.registeredSerializer.serialize(input);
|
|
613
|
+
}
|
|
614
|
+
|
|
604
615
|
// src/promise.ts
|
|
605
616
|
var doNothing = () => void 0;
|
|
606
617
|
function createPromiseWithResolver() {
|
|
@@ -756,25 +767,9 @@ var ObservablePromise = class _ObservablePromise extends Observable2 {
|
|
|
756
767
|
};
|
|
757
768
|
|
|
758
769
|
// src/transferable.ts
|
|
759
|
-
function isTransferable(thing) {
|
|
760
|
-
if (!thing || typeof thing !== "object") return false;
|
|
761
|
-
return true;
|
|
762
|
-
}
|
|
763
770
|
function isTransferDescriptor(thing) {
|
|
764
771
|
return thing && typeof thing === "object" && thing[$transferable];
|
|
765
772
|
}
|
|
766
|
-
function Transfer(payload, transferables) {
|
|
767
|
-
console.log("Transfer");
|
|
768
|
-
if (!transferables) {
|
|
769
|
-
if (!isTransferable(payload)) throw new Error("Not transferable");
|
|
770
|
-
transferables = [payload];
|
|
771
|
-
}
|
|
772
|
-
return {
|
|
773
|
-
[$transferable]: true,
|
|
774
|
-
send: payload,
|
|
775
|
-
transferables
|
|
776
|
-
};
|
|
777
|
-
}
|
|
778
773
|
|
|
779
774
|
// src/master/invocation-proxy.ts
|
|
780
775
|
var debugMessages = DebugLogger2("threads:master:messages");
|
|
@@ -979,18 +974,15 @@ async function spawn(worker, options) {
|
|
|
979
974
|
}
|
|
980
975
|
}
|
|
981
976
|
|
|
982
|
-
// src/master/index
|
|
983
|
-
var BlobWorker =
|
|
984
|
-
var Worker2 =
|
|
977
|
+
// src/master/index.ts
|
|
978
|
+
var BlobWorker = getWorkerImplementation3().blob;
|
|
979
|
+
var Worker2 = getWorkerImplementation3().default;
|
|
985
980
|
export {
|
|
986
981
|
BlobWorker,
|
|
987
|
-
DefaultSerializer,
|
|
988
982
|
Pool,
|
|
989
983
|
Thread,
|
|
990
|
-
Transfer,
|
|
991
984
|
Worker2 as Worker,
|
|
992
|
-
isWorkerRuntime,
|
|
993
|
-
registerSerializer,
|
|
985
|
+
isWorkerRuntime3 as isWorkerRuntime,
|
|
994
986
|
spawn
|
|
995
987
|
};
|
|
996
|
-
//# sourceMappingURL=index
|
|
988
|
+
//# sourceMappingURL=index.mjs.map
|