@xylabs/threads 4.12.44 → 4.13.1
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/common-Cuiya5FG.d.ts +21 -0
- package/dist/browser/index-browser-B8TCfn7g.d.ts +20 -0
- package/dist/browser/index-browser.d.ts +8 -0
- package/dist/browser/index-browser.mjs +209 -119
- package/dist/browser/index-browser.mjs.map +1 -1
- package/dist/browser/master/implementation.browser.d.ts +9 -0
- package/dist/browser/master/implementation.browser.mjs +36 -11
- package/dist/browser/master/implementation.browser.mjs.map +1 -1
- package/dist/browser/master/index-browser.d.ts +7 -0
- package/dist/browser/master/index-browser.mjs +201 -117
- package/dist/browser/master/index-browser.mjs.map +1 -1
- package/dist/browser/master/pool-browser.d.ts +104 -0
- package/dist/browser/master/pool-browser.mjs +65 -53
- package/dist/browser/master/pool-browser.mjs.map +1 -1
- package/dist/browser/master-D4MAqspp.d.ts +109 -0
- package/dist/browser/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → browser}/worker/worker.browser.d.ts +8 -8
- package/dist/browser/worker/worker.browser.mjs +79 -43
- package/dist/browser/worker/worker.browser.mjs.map +1 -1
- package/dist/{types/types/worker.d.ts → browser/worker-04t9iwDh.d.ts} +5 -5
- package/dist/neutral/master/register.d.ts +2 -0
- package/dist/neutral/master/register.mjs +223 -33
- package/dist/neutral/master/register.mjs.map +1 -1
- package/dist/neutral/master/spawn.d.ts +19 -0
- package/dist/neutral/master/spawn.mjs +106 -53
- package/dist/neutral/master/spawn.mjs.map +1 -1
- package/dist/neutral/master/thread.d.ts +12 -0
- package/dist/neutral/master/thread.mjs +4 -0
- package/dist/neutral/master/thread.mjs.map +1 -1
- package/dist/neutral/master-DDdg1BKb.d.ts +74 -0
- package/dist/{types → neutral}/observable-promise.d.ts +5 -18
- package/dist/neutral/observable-promise.mjs +27 -20
- package/dist/neutral/observable-promise.mjs.map +1 -1
- package/dist/neutral/observable.d.ts +13 -0
- package/dist/neutral/observable.mjs +12 -3
- package/dist/neutral/observable.mjs.map +1 -1
- package/dist/{types → neutral}/types/messages.d.ts +12 -11
- package/dist/neutral/types/messages.mjs +19 -0
- package/dist/neutral/types/messages.mjs.map +1 -0
- package/dist/node/common-Cuiya5FG.d.ts +21 -0
- package/dist/node/index-node-DB1sNl0d.d.ts +66 -0
- package/dist/node/index-node.d.ts +8 -0
- package/dist/node/index-node.mjs +396 -141
- package/dist/node/index-node.mjs.map +1 -1
- package/dist/node/master/implementation.node.d.ts +9 -0
- package/dist/node/master/implementation.node.mjs +223 -33
- package/dist/node/master/implementation.node.mjs.map +1 -1
- package/dist/node/master/index-node.d.ts +7 -0
- package/dist/node/master/index-node.mjs +388 -139
- package/dist/node/master/index-node.mjs.map +1 -1
- package/dist/node/master/pool-node.d.ts +51 -0
- package/dist/node/master/pool-node.mjs +285 -86
- package/dist/node/master/pool-node.mjs.map +1 -1
- package/dist/node/master-BjjSaJAj.d.ts +109 -0
- package/dist/{types/master/pool-types.d.ts → node/pool-types-Bzei07Nj.d.ts} +16 -24
- package/dist/node/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → node}/worker/worker.node.d.ts +11 -10
- package/dist/node/worker/worker.node.mjs +80 -43
- package/dist/node/worker/worker.node.mjs.map +1 -1
- package/dist/node/worker-04t9iwDh.d.ts +12 -0
- package/package.json +29 -22
- package/src/master/invocation-proxy.ts +2 -0
- package/src/transferable.ts +2 -0
- package/src/types/worker.ts +1 -0
- package/src/worker/WorkerGlobalScope.ts +1 -0
- package/src/worker/worker.browser.ts +1 -1
- package/dist/types/common.d.ts +0 -8
- package/dist/types/common.d.ts.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 +0 -9
- package/dist/types/index-node.d.ts.map +0 -1
- package/dist/types/master/get-bundle-url.browser.d.ts +0 -3
- package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.browser.d.ts +0 -5
- package/dist/types/master/implementation.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.node.d.ts +0 -5
- package/dist/types/master/implementation.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 +0 -13
- package/dist/types/master/index-node.d.ts.map +0 -1
- package/dist/types/master/invocation-proxy.d.ts +0 -4
- package/dist/types/master/invocation-proxy.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 +0 -93
- package/dist/types/master/pool-node.d.ts.map +0 -1
- package/dist/types/master/pool-types.d.ts.map +0 -1
- package/dist/types/master/register.d.ts +0 -2
- package/dist/types/master/register.d.ts.map +0 -1
- package/dist/types/master/spawn.d.ts +0 -21
- package/dist/types/master/spawn.d.ts.map +0 -1
- package/dist/types/master/thread.d.ts +0 -13
- package/dist/types/master/thread.d.ts.map +0 -1
- package/dist/types/observable-promise.d.ts.map +0 -1
- package/dist/types/observable.d.ts +0 -21
- package/dist/types/observable.d.ts.map +0 -1
- package/dist/types/promise.d.ts +0 -6
- package/dist/types/promise.d.ts.map +0 -1
- package/dist/types/serializers.d.ts +0 -17
- package/dist/types/serializers.d.ts.map +0 -1
- package/dist/types/symbols.d.ts +0 -6
- package/dist/types/symbols.d.ts.map +0 -1
- package/dist/types/transferable.d.ts +0 -43
- package/dist/types/transferable.d.ts.map +0 -1
- package/dist/types/types/master.d.ts +0 -99
- package/dist/types/types/master.d.ts.map +0 -1
- package/dist/types/types/messages.d.ts.map +0 -1
- package/dist/types/types/worker.d.ts.map +0 -1
- package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
- package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
- package/dist/types/worker/expose.d.ts +0 -4
- package/dist/types/worker/expose.d.ts.map +0 -1
- package/dist/types/worker/worker.browser.d.ts.map +0 -1
- package/dist/types/worker/worker.node.d.ts.map +0 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/worker/worker.node.ts
|
|
2
5
|
import { parentPort as optionalParentPort } from "worker_threads";
|
|
3
6
|
import { assertEx } from "@xylabs/assert";
|
|
@@ -18,6 +21,7 @@ function extendSerializer(extend, implementation) {
|
|
|
18
21
|
}
|
|
19
22
|
};
|
|
20
23
|
}
|
|
24
|
+
__name(extendSerializer, "extendSerializer");
|
|
21
25
|
var DefaultErrorSerializer = {
|
|
22
26
|
deserialize(message) {
|
|
23
27
|
return Object.assign(new Error(message.message), {
|
|
@@ -34,7 +38,7 @@ var DefaultErrorSerializer = {
|
|
|
34
38
|
};
|
|
35
39
|
}
|
|
36
40
|
};
|
|
37
|
-
var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
|
|
41
|
+
var isSerializedError = /* @__PURE__ */ __name((thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error", "isSerializedError");
|
|
38
42
|
var DefaultSerializer = {
|
|
39
43
|
deserialize(message) {
|
|
40
44
|
return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
|
|
@@ -49,12 +53,15 @@ globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSeri
|
|
|
49
53
|
function registerSerializer(serializer) {
|
|
50
54
|
globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer);
|
|
51
55
|
}
|
|
56
|
+
__name(registerSerializer, "registerSerializer");
|
|
52
57
|
function deserialize(message) {
|
|
53
58
|
return globalThis.registeredSerializer.deserialize(message);
|
|
54
59
|
}
|
|
60
|
+
__name(deserialize, "deserialize");
|
|
55
61
|
function serialize(input) {
|
|
56
62
|
return globalThis.registeredSerializer.serialize(input);
|
|
57
63
|
}
|
|
64
|
+
__name(serialize, "serialize");
|
|
58
65
|
|
|
59
66
|
// src/symbols.ts
|
|
60
67
|
var $errors = Symbol("thread.errors");
|
|
@@ -68,14 +75,18 @@ function isTransferable(thing) {
|
|
|
68
75
|
if (!thing || typeof thing !== "object") return false;
|
|
69
76
|
return true;
|
|
70
77
|
}
|
|
78
|
+
__name(isTransferable, "isTransferable");
|
|
71
79
|
function isTransferDescriptor(thing) {
|
|
72
80
|
return thing && typeof thing === "object" && thing[$transferable];
|
|
73
81
|
}
|
|
82
|
+
__name(isTransferDescriptor, "isTransferDescriptor");
|
|
74
83
|
function Transfer(payload, transferables) {
|
|
75
84
|
console.log("Transfer");
|
|
76
85
|
if (!transferables) {
|
|
77
86
|
if (!isTransferable(payload)) throw new Error("Not transferable");
|
|
78
|
-
transferables = [
|
|
87
|
+
transferables = [
|
|
88
|
+
payload
|
|
89
|
+
];
|
|
79
90
|
}
|
|
80
91
|
return {
|
|
81
92
|
[$transferable]: true,
|
|
@@ -83,81 +94,108 @@ function Transfer(payload, transferables) {
|
|
|
83
94
|
transferables
|
|
84
95
|
};
|
|
85
96
|
}
|
|
97
|
+
__name(Transfer, "Transfer");
|
|
98
|
+
|
|
99
|
+
// src/types/messages.ts
|
|
100
|
+
var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
|
|
101
|
+
MasterMessageType2["cancel"] = "cancel";
|
|
102
|
+
MasterMessageType2["run"] = "run";
|
|
103
|
+
return MasterMessageType2;
|
|
104
|
+
}({});
|
|
105
|
+
var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
|
|
106
|
+
WorkerMessageType2["error"] = "error";
|
|
107
|
+
WorkerMessageType2["init"] = "init";
|
|
108
|
+
WorkerMessageType2["result"] = "result";
|
|
109
|
+
WorkerMessageType2["running"] = "running";
|
|
110
|
+
WorkerMessageType2["uncaughtError"] = "uncaughtError";
|
|
111
|
+
return WorkerMessageType2;
|
|
112
|
+
}({});
|
|
86
113
|
|
|
87
114
|
// src/worker/expose.ts
|
|
88
|
-
var isErrorEvent = (value) => value && value.error;
|
|
115
|
+
var isErrorEvent = /* @__PURE__ */ __name((value) => value && value.error, "isErrorEvent");
|
|
89
116
|
function createExpose(implementation, self) {
|
|
90
117
|
let exposeCalled = false;
|
|
91
118
|
const activeSubscriptions = /* @__PURE__ */ new Map();
|
|
92
|
-
const isMasterJobCancelMessage = (thing) => thing && thing.type ===
|
|
93
|
-
const isMasterJobRunMessage = (thing) => thing && thing.type ===
|
|
94
|
-
const isObservable = (thing) => isSomeObservable(thing) || isZenObservable(thing);
|
|
119
|
+
const isMasterJobCancelMessage = /* @__PURE__ */ __name((thing) => thing && thing.type === MasterMessageType.cancel, "isMasterJobCancelMessage");
|
|
120
|
+
const isMasterJobRunMessage = /* @__PURE__ */ __name((thing) => thing && thing.type === MasterMessageType.run, "isMasterJobRunMessage");
|
|
121
|
+
const isObservable = /* @__PURE__ */ __name((thing) => isSomeObservable(thing) || isZenObservable(thing), "isObservable");
|
|
95
122
|
function isZenObservable(thing) {
|
|
96
123
|
return thing && typeof thing === "object" && typeof thing.subscribe === "function";
|
|
97
124
|
}
|
|
125
|
+
__name(isZenObservable, "isZenObservable");
|
|
98
126
|
function deconstructTransfer(thing) {
|
|
99
|
-
return isTransferDescriptor(thing) ? {
|
|
127
|
+
return isTransferDescriptor(thing) ? {
|
|
128
|
+
payload: thing.send,
|
|
129
|
+
transferables: thing.transferables
|
|
130
|
+
} : {
|
|
131
|
+
payload: thing,
|
|
132
|
+
transferables: void 0
|
|
133
|
+
};
|
|
100
134
|
}
|
|
135
|
+
__name(deconstructTransfer, "deconstructTransfer");
|
|
101
136
|
function postFunctionInitMessage() {
|
|
102
137
|
const initMessage = {
|
|
103
|
-
exposed: {
|
|
104
|
-
|
|
138
|
+
exposed: {
|
|
139
|
+
type: "function"
|
|
140
|
+
},
|
|
141
|
+
type: WorkerMessageType.init
|
|
105
142
|
};
|
|
106
143
|
implementation.postMessageToMaster(initMessage);
|
|
107
144
|
}
|
|
145
|
+
__name(postFunctionInitMessage, "postFunctionInitMessage");
|
|
108
146
|
function postModuleInitMessage(methodNames) {
|
|
109
147
|
const initMessage = {
|
|
110
148
|
exposed: {
|
|
111
149
|
methods: methodNames,
|
|
112
150
|
type: "module"
|
|
113
151
|
},
|
|
114
|
-
type:
|
|
152
|
+
type: WorkerMessageType.init
|
|
115
153
|
};
|
|
116
154
|
implementation.postMessageToMaster(initMessage);
|
|
117
155
|
}
|
|
156
|
+
__name(postModuleInitMessage, "postModuleInitMessage");
|
|
118
157
|
function postJobErrorMessage(uid, rawError) {
|
|
119
158
|
const { payload: error, transferables } = deconstructTransfer(rawError);
|
|
120
159
|
const errorMessage = {
|
|
121
160
|
error: serialize(error),
|
|
122
|
-
type:
|
|
161
|
+
type: WorkerMessageType.error,
|
|
123
162
|
uid
|
|
124
163
|
};
|
|
125
164
|
implementation.postMessageToMaster(errorMessage, transferables);
|
|
126
165
|
}
|
|
166
|
+
__name(postJobErrorMessage, "postJobErrorMessage");
|
|
127
167
|
function postJobResultMessage(uid, completed, resultValue) {
|
|
128
168
|
const { payload, transferables } = deconstructTransfer(resultValue);
|
|
129
169
|
const resultMessage = {
|
|
130
170
|
complete: completed ? true : void 0,
|
|
131
171
|
payload,
|
|
132
|
-
type:
|
|
172
|
+
type: WorkerMessageType.result,
|
|
133
173
|
uid
|
|
134
174
|
};
|
|
135
175
|
implementation.postMessageToMaster(resultMessage, transferables);
|
|
136
176
|
}
|
|
177
|
+
__name(postJobResultMessage, "postJobResultMessage");
|
|
137
178
|
function postJobStartMessage(uid, resultType) {
|
|
138
179
|
const startMessage = {
|
|
139
180
|
resultType,
|
|
140
|
-
type:
|
|
181
|
+
type: WorkerMessageType.running,
|
|
141
182
|
uid
|
|
142
183
|
};
|
|
143
184
|
implementation.postMessageToMaster(startMessage);
|
|
144
185
|
}
|
|
186
|
+
__name(postJobStartMessage, "postJobStartMessage");
|
|
145
187
|
function postUncaughtErrorMessage(error) {
|
|
146
188
|
try {
|
|
147
189
|
const errorMessage = {
|
|
148
190
|
error: serialize(error),
|
|
149
|
-
type:
|
|
191
|
+
type: WorkerMessageType.uncaughtError
|
|
150
192
|
};
|
|
151
193
|
implementation.postMessageToMaster(errorMessage);
|
|
152
194
|
} catch (subError) {
|
|
153
|
-
console.error(
|
|
154
|
-
"Not reporting uncaught error back to master thread as it occured while reporting an uncaught error already.\nLatest error:",
|
|
155
|
-
subError,
|
|
156
|
-
"\nOriginal error:",
|
|
157
|
-
error
|
|
158
|
-
);
|
|
195
|
+
console.error("Not reporting uncaught error back to master thread as it occured while reporting an uncaught error already.\nLatest error:", subError, "\nOriginal error:", error);
|
|
159
196
|
}
|
|
160
197
|
}
|
|
198
|
+
__name(postUncaughtErrorMessage, "postUncaughtErrorMessage");
|
|
161
199
|
async function runFunction(jobUID, fn, args) {
|
|
162
200
|
let syncResult;
|
|
163
201
|
try {
|
|
@@ -169,17 +207,13 @@ function createExpose(implementation, self) {
|
|
|
169
207
|
const resultType = isObservable(syncResult) ? "observable" : "promise";
|
|
170
208
|
postJobStartMessage(jobUID, resultType);
|
|
171
209
|
if (isObservable(syncResult)) {
|
|
172
|
-
const subscription = syncResult.subscribe(
|
|
173
|
-
(
|
|
174
|
-
(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
postJobResultMessage(jobUID, true);
|
|
180
|
-
activeSubscriptions.delete(jobUID);
|
|
181
|
-
}
|
|
182
|
-
);
|
|
210
|
+
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, serialize(value)), (error) => {
|
|
211
|
+
postJobErrorMessage(jobUID, serialize(error));
|
|
212
|
+
activeSubscriptions.delete(jobUID);
|
|
213
|
+
}, () => {
|
|
214
|
+
postJobResultMessage(jobUID, true);
|
|
215
|
+
activeSubscriptions.delete(jobUID);
|
|
216
|
+
});
|
|
183
217
|
activeSubscriptions.set(jobUID, subscription);
|
|
184
218
|
} else {
|
|
185
219
|
try {
|
|
@@ -190,7 +224,8 @@ function createExpose(implementation, self) {
|
|
|
190
224
|
}
|
|
191
225
|
}
|
|
192
226
|
}
|
|
193
|
-
|
|
227
|
+
__name(runFunction, "runFunction");
|
|
228
|
+
const expose2 = /* @__PURE__ */ __name((exposed) => {
|
|
194
229
|
if (!implementation.isWorkerRuntime()) {
|
|
195
230
|
throw new Error("expose() called in the master thread.");
|
|
196
231
|
}
|
|
@@ -226,7 +261,7 @@ function createExpose(implementation, self) {
|
|
|
226
261
|
}
|
|
227
262
|
}
|
|
228
263
|
});
|
|
229
|
-
};
|
|
264
|
+
}, "expose");
|
|
230
265
|
if (typeof globalThis !== "undefined" && typeof self.addEventListener === "function" && implementation.isWorkerRuntime()) {
|
|
231
266
|
self.addEventListener("error", (event) => {
|
|
232
267
|
setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250);
|
|
@@ -250,6 +285,7 @@ function createExpose(implementation, self) {
|
|
|
250
285
|
}
|
|
251
286
|
return expose2;
|
|
252
287
|
}
|
|
288
|
+
__name(createExpose, "createExpose");
|
|
253
289
|
|
|
254
290
|
// src/worker/worker.node.ts
|
|
255
291
|
var parentPort = assertEx(optionalParentPort, () => "Invariant violation: MessagePort to parent is not available.");
|
|
@@ -259,25 +295,26 @@ function assertMessagePort(port) {
|
|
|
259
295
|
}
|
|
260
296
|
return port;
|
|
261
297
|
}
|
|
262
|
-
|
|
298
|
+
__name(assertMessagePort, "assertMessagePort");
|
|
299
|
+
var isWorkerRuntime = /* @__PURE__ */ __name(function isWorkerRuntime2() {
|
|
263
300
|
return true;
|
|
264
|
-
};
|
|
265
|
-
var postMessageToMaster = function postMessageToMaster2(data, transferList) {
|
|
301
|
+
}, "isWorkerRuntime");
|
|
302
|
+
var postMessageToMaster = /* @__PURE__ */ __name(function postMessageToMaster2(data, transferList) {
|
|
266
303
|
assertMessagePort(parentPort).postMessage(data, transferList);
|
|
267
|
-
};
|
|
268
|
-
var subscribeToMasterMessages = function subscribeToMasterMessages2(onMessage) {
|
|
304
|
+
}, "postMessageToMaster");
|
|
305
|
+
var subscribeToMasterMessages = /* @__PURE__ */ __name(function subscribeToMasterMessages2(onMessage) {
|
|
269
306
|
if (!parentPort) {
|
|
270
307
|
throw new Error("Invariant violation: MessagePort to parent is not available.");
|
|
271
308
|
}
|
|
272
|
-
const messageHandler = (message) => {
|
|
309
|
+
const messageHandler = /* @__PURE__ */ __name((message) => {
|
|
273
310
|
onMessage(message);
|
|
274
|
-
};
|
|
275
|
-
const unsubscribe = () => {
|
|
311
|
+
}, "messageHandler");
|
|
312
|
+
const unsubscribe = /* @__PURE__ */ __name(() => {
|
|
276
313
|
assertMessagePort(parentPort).off("message", messageHandler);
|
|
277
|
-
};
|
|
314
|
+
}, "unsubscribe");
|
|
278
315
|
assertMessagePort(parentPort).on("message", messageHandler);
|
|
279
316
|
return unsubscribe;
|
|
280
|
-
};
|
|
317
|
+
}, "subscribeToMasterMessages");
|
|
281
318
|
var addEventListener = parentPort?.on.bind(parentPort);
|
|
282
319
|
var postMessage = parentPort?.postMessage.bind(parentPort);
|
|
283
320
|
var removeEventListener = parentPort?.off.bind(parentPort);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/worker/worker.node.ts","../../../src/worker/expose.ts","../../../src/serializers.ts","../../../src/common.ts","../../../src/symbols.ts","../../../src/transferable.ts"],"sourcesContent":["/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// tslint:disable no-shadowed-variable\n\nimport type { MessagePort, TransferListItem } from 'node:worker_threads'\nimport { parentPort as optionalParentPort } from 'node:worker_threads'\n\nimport { assertEx } from '@xylabs/assert'\n\nimport type { AbstractedWorkerAPI } from '../types/worker.ts'\nimport { createExpose } from './expose.ts'\n\nconst parentPort = assertEx(optionalParentPort, () => 'Invariant violation: MessagePort to parent is not available.')\n\nfunction assertMessagePort(port: MessagePort | null | undefined): MessagePort {\n if (!port) {\n throw new Error('Invariant violation: MessagePort to parent is not available.')\n }\n return port\n}\n\nconst isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {\n return true // isMainThread\n}\n\nconst postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList) {\n assertMessagePort(parentPort).postMessage(data, transferList as TransferListItem[])\n}\n\nconst subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {\n if (!parentPort) {\n throw new Error('Invariant violation: MessagePort to parent is not available.')\n }\n const messageHandler = (message: any) => {\n onMessage(message)\n }\n const unsubscribe = () => {\n assertMessagePort(parentPort).off('message', messageHandler)\n }\n assertMessagePort(parentPort).on('message', messageHandler)\n return unsubscribe\n}\n\nconst addEventListener = parentPort?.on.bind(parentPort)\nconst postMessage = parentPort?.postMessage.bind(parentPort)\nconst removeEventListener = parentPort?.off.bind(parentPort)\n\nexport {\n addEventListener,\n postMessage,\n removeEventListener,\n}\n\nconst expose = createExpose({\n isWorkerRuntime, postMessageToMaster, subscribeToMasterMessages,\n}, {\n addEventListener, postMessage, removeEventListener,\n})\n\nexport {\n isWorkerRuntime,\n postMessageToMaster,\n subscribeToMasterMessages,\n}\n\nexport { registerSerializer } from '../common.ts'\nexport { Transfer } from '../transferable.ts'\nexport { expose }\n","/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport isSomeObservable from 'is-observable-2-1-0'\nimport type { Observable, Subscription } from 'observable-fns'\n\nimport { deserialize, serialize } from '../common.ts'\nimport type { TransferDescriptor } from '../transferable.ts'\nimport { isTransferDescriptor } from '../transferable.ts'\nimport type {\n MasterJobCancelMessage,\n MasterJobRunMessage,\n SerializedError,\n WorkerInitMessage,\n WorkerJobErrorMessage,\n WorkerJobResultMessage,\n WorkerJobStartMessage,\n WorkerUncaughtErrorMessage,\n} from '../types/messages.ts'\nimport {\n MasterMessageType,\n WorkerMessageType,\n} from '../types/messages.ts'\nimport type {\n AbstractedWorkerAPI, WorkerFunction, WorkerModule,\n} from '../types/worker.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\nconst isErrorEvent = (value: Event): value is ErrorEvent => value && (value as ErrorEvent).error\n\nexport function createExpose(implementation: AbstractedWorkerAPI, self: WorkerGlobalScope) {\n let exposeCalled = false\n\n const activeSubscriptions = new Map<number, Subscription<any>>()\n\n const isMasterJobCancelMessage = (thing: any): thing is MasterJobCancelMessage => thing && thing.type === MasterMessageType.cancel\n const isMasterJobRunMessage = (thing: any): thing is MasterJobRunMessage => thing && thing.type === MasterMessageType.run\n\n /**\n * There are issues with `is-observable` not recognizing zen-observable's instances.\n * We are using `observable-fns`, but it's based on zen-observable, too.\n */\n const isObservable = (thing: any): thing is Observable<any> => isSomeObservable(thing) || isZenObservable(thing)\n\n function isZenObservable(thing: any): thing is Observable<any> {\n return thing && typeof thing === 'object' && typeof thing.subscribe === 'function'\n }\n\n function deconstructTransfer(thing: any) {\n return isTransferDescriptor(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }\n }\n\n function postFunctionInitMessage() {\n const initMessage: WorkerInitMessage = {\n exposed: { type: 'function' },\n type: WorkerMessageType.init,\n }\n implementation.postMessageToMaster(initMessage)\n }\n\n function postModuleInitMessage(methodNames: string[]) {\n const initMessage: WorkerInitMessage = {\n exposed: {\n methods: methodNames,\n type: 'module',\n },\n type: WorkerMessageType.init,\n }\n implementation.postMessageToMaster(initMessage)\n }\n\n function postJobErrorMessage(uid: number, rawError: Error | TransferDescriptor<Error>) {\n const { payload: error, transferables } = deconstructTransfer(rawError)\n const errorMessage: WorkerJobErrorMessage = {\n error: serialize(error) as any as SerializedError,\n type: WorkerMessageType.error,\n uid,\n }\n implementation.postMessageToMaster(errorMessage, transferables)\n }\n\n function postJobResultMessage(uid: number, completed: boolean, resultValue?: any) {\n const { payload, transferables } = deconstructTransfer(resultValue)\n const resultMessage: WorkerJobResultMessage = {\n complete: completed ? true : undefined,\n payload,\n type: WorkerMessageType.result,\n uid,\n }\n implementation.postMessageToMaster(resultMessage, transferables)\n }\n\n function postJobStartMessage(uid: number, resultType: WorkerJobStartMessage['resultType']) {\n const startMessage: WorkerJobStartMessage = {\n resultType,\n type: WorkerMessageType.running,\n uid,\n }\n implementation.postMessageToMaster(startMessage)\n }\n\n function postUncaughtErrorMessage(error: Error) {\n try {\n const errorMessage: WorkerUncaughtErrorMessage = {\n error: serialize(error) as any as SerializedError,\n type: WorkerMessageType.uncaughtError,\n }\n implementation.postMessageToMaster(errorMessage)\n } catch (subError) {\n // tslint:disable-next-line no-console\n console.error(\n 'Not reporting uncaught error back to master thread as it ' + 'occured while reporting an uncaught error already.' + '\\nLatest error:',\n subError,\n '\\nOriginal error:',\n error,\n )\n }\n }\n\n async function runFunction(jobUID: number, fn: WorkerFunction, args: any[]) {\n let syncResult: any\n\n try {\n syncResult = fn(...args)\n } catch (ex) {\n const error = ex as Error\n return postJobErrorMessage(jobUID, error)\n }\n\n const resultType = isObservable(syncResult) ? 'observable' : 'promise'\n postJobStartMessage(jobUID, resultType)\n\n if (isObservable(syncResult)) {\n const subscription = syncResult.subscribe(\n value => postJobResultMessage(jobUID, false, serialize(value)),\n (error) => {\n postJobErrorMessage(jobUID, serialize(error) as any)\n activeSubscriptions.delete(jobUID)\n },\n () => {\n postJobResultMessage(jobUID, true)\n activeSubscriptions.delete(jobUID)\n },\n )\n activeSubscriptions.set(jobUID, subscription)\n } else {\n try {\n const result = await syncResult\n postJobResultMessage(jobUID, true, serialize(result))\n } catch (error) {\n postJobErrorMessage(jobUID, serialize(error) as any)\n }\n }\n }\n\n /**\n * Expose a function or a module (an object whose values are functions)\n * to the main thread. Must be called exactly once in every worker thread\n * to signal its API to the main thread.\n *\n * @param exposed Function or object whose values are functions\n */\n const expose = (exposed: WorkerFunction | WorkerModule<any>) => {\n if (!implementation.isWorkerRuntime()) {\n throw new Error('expose() called in the master thread.')\n }\n if (exposeCalled) {\n throw new Error('expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.')\n }\n exposeCalled = true\n\n if (typeof exposed === 'function') {\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobRunMessage(messageData) && !messageData.method) {\n runFunction(messageData.uid, exposed, messageData.args.map(deserialize))\n }\n })\n postFunctionInitMessage()\n } else if (typeof exposed === 'object' && exposed) {\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobRunMessage(messageData) && messageData.method) {\n runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(deserialize))\n }\n })\n\n const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function')\n postModuleInitMessage(methodNames)\n } else {\n throw new Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`)\n }\n\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobCancelMessage(messageData)) {\n const jobUID = messageData.uid\n const subscription = activeSubscriptions.get(jobUID)\n\n if (subscription) {\n subscription.unsubscribe()\n activeSubscriptions.delete(jobUID)\n }\n }\n })\n }\n\n if (typeof globalThis !== 'undefined' && typeof self.addEventListener === 'function' && implementation.isWorkerRuntime()) {\n self.addEventListener('error', (event) => {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250)\n })\n self.addEventListener('unhandledrejection', (event) => {\n const error = (event as any).reason\n if (error && typeof (error as any).message === 'string') {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error), 250)\n }\n })\n }\n\n if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation.isWorkerRuntime()) {\n process.on('uncaughtException', (error) => {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error), 250)\n })\n process.on('unhandledRejection', (error) => {\n if (error && typeof (error as any).message === 'string') {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error as any), 250)\n }\n })\n }\n\n return expose\n}\n","/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { SerializedError } from './types/messages.ts'\n\nexport interface Serializer<Msg = JsonSerializable, Input = any> {\n deserialize(message: Msg): Input\n serialize(input: Input): Msg\n}\n\nexport interface SerializerImplementation<Msg = JsonSerializable, Input = any> {\n deserialize(message: Msg, defaultDeserialize: (msg: Msg) => Input): Input\n serialize(input: Input, defaultSerialize: (inp: Input) => Msg): Msg\n}\n\nexport function extendSerializer<MessageType, InputType = any>(\n extend: Serializer<MessageType, InputType>,\n implementation: SerializerImplementation<MessageType, InputType>,\n): Serializer<MessageType, InputType> {\n const fallbackDeserializer = extend.deserialize.bind(extend)\n const fallbackSerializer = extend.serialize.bind(extend)\n\n return {\n deserialize(message: MessageType): InputType {\n return implementation.deserialize(message, fallbackDeserializer)\n },\n\n serialize(input: InputType): MessageType {\n return implementation.serialize(input, fallbackSerializer)\n },\n }\n}\n\ntype JsonSerializablePrimitive = string | number | boolean | null\n\ntype JsonSerializableObject = {\n [key: string]: JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[] | undefined\n}\n\nexport type JsonSerializable = JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[]\n\nconst DefaultErrorSerializer: Serializer<SerializedError, Error> = {\n deserialize(message: SerializedError): Error {\n return Object.assign(new Error(message.message), {\n name: message.name,\n stack: message.stack,\n })\n },\n serialize(error: Error): SerializedError {\n return {\n __error_marker: '$$error',\n message: error.message,\n name: error.name,\n stack: error.stack,\n }\n },\n}\n\nconst isSerializedError = (thing: any): thing is SerializedError =>\n thing && typeof thing === 'object' && '__error_marker' in thing && thing.__error_marker === '$$error'\n\nexport const DefaultSerializer: Serializer<JsonSerializable> = {\n deserialize(message: JsonSerializable): any {\n return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message\n },\n serialize(input: any): JsonSerializable {\n return input instanceof Error ? (DefaultErrorSerializer.serialize(input) as any as JsonSerializable) : input\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n JsonSerializable, Serializer, SerializerImplementation,\n} from './serializers.ts'\nimport { DefaultSerializer, extendSerializer } from './serializers.ts'\n\ndeclare global {\n var registeredSerializer: Serializer<JsonSerializable>\n}\n\nglobalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSerializer\n\nexport function registerSerializer(serializer: SerializerImplementation<JsonSerializable>) {\n globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer)\n}\n\nexport function deserialize(message: JsonSerializable): any {\n return globalThis.registeredSerializer.deserialize(message)\n}\n\nexport function serialize(input: any): JsonSerializable {\n return globalThis.registeredSerializer.serialize(input)\n}\n","export const $errors = Symbol('thread.errors')\nexport const $events = Symbol('thread.events')\nexport const $terminate = Symbol('thread.terminate')\nexport const $transferable = Symbol('thread.transferable')\nexport const $worker = Symbol('thread.worker')\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { $transferable } from './symbols.ts'\n\nexport interface TransferDescriptor<T = any> {\n [$transferable]: true\n send: T\n transferables: Transferable[]\n}\n\nfunction isTransferable(thing: any): thing is Transferable {\n if (!thing || typeof thing !== 'object') return false\n // Don't check too thoroughly, since the list of transferable things in JS might grow over time\n return true\n}\n\nexport function isTransferDescriptor(thing: any): thing is TransferDescriptor {\n return thing && typeof thing === 'object' && thing[$transferable]\n}\n\n/**\n * Mark a transferable object as such, so it will no be serialized and\n * deserialized on messaging with the main thread, but to transfer\n * ownership of it to the receiving thread.\n *\n * Only works with array buffers, message ports and few more special\n * types of objects, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer(transferable: Transferable): TransferDescriptor\n\n/**\n * Mark transferable objects within an arbitrary object or array as\n * being a transferable object. They will then not be serialized\n * and deserialized on messaging with the main thread, but ownership\n * of them will be tranferred to the receiving thread.\n *\n * Only array buffers, message ports and few more special types of\n * objects can be transferred, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor\n\nexport function Transfer<T>(payload: T, transferables?: Transferable[]): TransferDescriptor {\n console.log('Transfer')\n if (!transferables) {\n if (!isTransferable(payload)) throw new Error('Not transferable')\n transferables = [payload]\n }\n\n return {\n [$transferable]: true,\n send: payload,\n transferables,\n }\n}\n"],"mappings":";AAKA,SAAS,cAAc,0BAA0B;AAEjD,SAAS,gBAAgB;;;ACHzB,OAAO,sBAAsB;;;ACUtB,SAAS,iBACd,QACA,gBACoC;AACpC,QAAM,uBAAuB,OAAO,YAAY,KAAK,MAAM;AAC3D,QAAM,qBAAqB,OAAO,UAAU,KAAK,MAAM;AAEvD,SAAO;AAAA,IACL,YAAY,SAAiC;AAC3C,aAAO,eAAe,YAAY,SAAS,oBAAoB;AAAA,IACjE;AAAA,IAEA,UAAU,OAA+B;AACvC,aAAO,eAAe,UAAU,OAAO,kBAAkB;AAAA,IAC3D;AAAA,EACF;AACF;AAUA,IAAM,yBAA6D;AAAA,EACjE,YAAY,SAAiC;AAC3C,WAAO,OAAO,OAAO,IAAI,MAAM,QAAQ,OAAO,GAAG;AAAA,MAC/C,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,UAAU,OAA+B;AACvC,WAAO;AAAA,MACL,gBAAgB;AAAA,MAChB,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;AAEA,IAAM,oBAAoB,CAAC,UACzB,SAAS,OAAO,UAAU,YAAY,oBAAoB,SAAS,MAAM,mBAAmB;AAEvF,IAAM,oBAAkD;AAAA,EAC7D,YAAY,SAAgC;AAC1C,WAAO,kBAAkB,OAAO,IAAI,uBAAuB,YAAY,OAAO,IAAI;AAAA,EACpF;AAAA,EACA,UAAU,OAA8B;AACtC,WAAO,iBAAiB,QAAS,uBAAuB,UAAU,KAAK,IAAgC;AAAA,EACzG;AACF;;;ACzDA,WAAW,uBAAuB,WAAW,wBAAwB;AAE9D,SAAS,mBAAmB,YAAwD;AACzF,aAAW,uBAAuB,iBAAiB,WAAW,sBAAsB,UAAU;AAChG;AAEO,SAAS,YAAY,SAAgC;AAC1D,SAAO,WAAW,qBAAqB,YAAY,OAAO;AAC5D;AAEO,SAAS,UAAU,OAA8B;AACtD,SAAO,WAAW,qBAAqB,UAAU,KAAK;AACxD;;;ACtBO,IAAM,UAAU,OAAO,eAAe;AACtC,IAAM,UAAU,OAAO,eAAe;AACtC,IAAM,aAAa,OAAO,kBAAkB;AAC5C,IAAM,gBAAgB,OAAO,qBAAqB;AAClD,IAAM,UAAU,OAAO,eAAe;;;ACK7C,SAAS,eAAe,OAAmC;AACzD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,SAAO;AACT;AAEO,SAAS,qBAAqB,OAAyC;AAC5E,SAAO,SAAS,OAAO,UAAU,YAAY,MAAM,aAAa;AAClE;AAuCO,SAAS,SAAY,SAAY,eAAoD;AAC1F,UAAQ,IAAI,UAAU;AACtB,MAAI,CAAC,eAAe;AAClB,QAAI,CAAC,eAAe,OAAO,EAAG,OAAM,IAAI,MAAM,kBAAkB;AAChE,oBAAgB,CAAC,OAAO;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL,CAAC,aAAa,GAAG;AAAA,IACjB,MAAM;AAAA,IACN;AAAA,EACF;AACF;;;AJvCA,IAAM,eAAe,CAAC,UAAsC,SAAU,MAAqB;AAEpF,SAAS,aAAa,gBAAqC,MAAyB;AACzF,MAAI,eAAe;AAEnB,QAAM,sBAAsB,oBAAI,IAA+B;AAE/D,QAAM,2BAA2B,CAAC,UAAgD,SAAS,MAAM;AACjG,QAAM,wBAAwB,CAAC,UAA6C,SAAS,MAAM;AAM3F,QAAM,eAAe,CAAC,UAAyC,iBAAiB,KAAK,KAAK,gBAAgB,KAAK;AAE/G,WAAS,gBAAgB,OAAsC;AAC7D,WAAO,SAAS,OAAO,UAAU,YAAY,OAAO,MAAM,cAAc;AAAA,EAC1E;AAEA,WAAS,oBAAoB,OAAY;AACvC,WAAO,qBAAqB,KAAK,IAAI,EAAE,SAAS,MAAM,MAAM,eAAe,MAAM,cAAc,IAAI,EAAE,SAAS,OAAO,eAAe,OAAU;AAAA,EAChJ;AAEA,WAAS,0BAA0B;AACjC,UAAM,cAAiC;AAAA,MACrC,SAAS,EAAE,MAAM,WAAW;AAAA,MAC5B;AAAA,IACF;AACA,mBAAe,oBAAoB,WAAW;AAAA,EAChD;AAEA,WAAS,sBAAsB,aAAuB;AACpD,UAAM,cAAiC;AAAA,MACrC,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA;AAAA,IACF;AACA,mBAAe,oBAAoB,WAAW;AAAA,EAChD;AAEA,WAAS,oBAAoB,KAAa,UAA6C;AACrF,UAAM,EAAE,SAAS,OAAO,cAAc,IAAI,oBAAoB,QAAQ;AACtE,UAAM,eAAsC;AAAA,MAC1C,OAAO,UAAU,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AACA,mBAAe,oBAAoB,cAAc,aAAa;AAAA,EAChE;AAEA,WAAS,qBAAqB,KAAa,WAAoB,aAAmB;AAChF,UAAM,EAAE,SAAS,cAAc,IAAI,oBAAoB,WAAW;AAClE,UAAM,gBAAwC;AAAA,MAC5C,UAAU,YAAY,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,mBAAe,oBAAoB,eAAe,aAAa;AAAA,EACjE;AAEA,WAAS,oBAAoB,KAAa,YAAiD;AACzF,UAAM,eAAsC;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,mBAAe,oBAAoB,YAAY;AAAA,EACjD;AAEA,WAAS,yBAAyB,OAAc;AAC9C,QAAI;AACF,YAAM,eAA2C;AAAA,QAC/C,OAAO,UAAU,KAAK;AAAA,QACtB;AAAA,MACF;AACA,qBAAe,oBAAoB,YAAY;AAAA,IACjD,SAAS,UAAU;AAEjB,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,iBAAe,YAAY,QAAgB,IAAoB,MAAa;AAC1E,QAAI;AAEJ,QAAI;AACF,mBAAa,GAAG,GAAG,IAAI;AAAA,IACzB,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,aAAO,oBAAoB,QAAQ,KAAK;AAAA,IAC1C;AAEA,UAAM,aAAa,aAAa,UAAU,IAAI,eAAe;AAC7D,wBAAoB,QAAQ,UAAU;AAEtC,QAAI,aAAa,UAAU,GAAG;AAC5B,YAAM,eAAe,WAAW;AAAA,QAC9B,WAAS,qBAAqB,QAAQ,OAAO,UAAU,KAAK,CAAC;AAAA,QAC7D,CAAC,UAAU;AACT,8BAAoB,QAAQ,UAAU,KAAK,CAAQ;AACnD,8BAAoB,OAAO,MAAM;AAAA,QACnC;AAAA,QACA,MAAM;AACJ,+BAAqB,QAAQ,IAAI;AACjC,8BAAoB,OAAO,MAAM;AAAA,QACnC;AAAA,MACF;AACA,0BAAoB,IAAI,QAAQ,YAAY;AAAA,IAC9C,OAAO;AACL,UAAI;AACF,cAAM,SAAS,MAAM;AACrB,6BAAqB,QAAQ,MAAM,UAAU,MAAM,CAAC;AAAA,MACtD,SAAS,OAAO;AACd,4BAAoB,QAAQ,UAAU,KAAK,CAAQ;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AASA,QAAMA,UAAS,CAAC,YAAgD;AAC9D,QAAI,CAAC,eAAe,gBAAgB,GAAG;AACrC,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,QAAI,cAAc;AAChB,YAAM,IAAI,MAAM,4HAA4H;AAAA,IAC9I;AACA,mBAAe;AAEf,QAAI,OAAO,YAAY,YAAY;AACjC,qBAAe,0BAA0B,CAAC,gBAAyB;AACjE,YAAI,sBAAsB,WAAW,KAAK,CAAC,YAAY,QAAQ;AAC7D,sBAAY,YAAY,KAAK,SAAS,YAAY,KAAK,IAAI,WAAW,CAAC;AAAA,QACzE;AAAA,MACF,CAAC;AACD,8BAAwB;AAAA,IAC1B,WAAW,OAAO,YAAY,YAAY,SAAS;AACjD,qBAAe,0BAA0B,CAAC,gBAAyB;AACjE,YAAI,sBAAsB,WAAW,KAAK,YAAY,QAAQ;AAC5D,sBAAY,YAAY,KAAK,QAAQ,YAAY,MAAM,GAAG,YAAY,KAAK,IAAI,WAAW,CAAC;AAAA,QAC7F;AAAA,MACF,CAAC;AAED,YAAM,cAAc,OAAO,KAAK,OAAO,EAAE,OAAO,SAAO,OAAO,QAAQ,GAAG,MAAM,UAAU;AACzF,4BAAsB,WAAW;AAAA,IACnC,OAAO;AACL,YAAM,IAAI,MAAM,+EAA+E,OAAO,EAAE;AAAA,IAC1G;AAEA,mBAAe,0BAA0B,CAAC,gBAAyB;AACjE,UAAI,yBAAyB,WAAW,GAAG;AACzC,cAAM,SAAS,YAAY;AAC3B,cAAM,eAAe,oBAAoB,IAAI,MAAM;AAEnD,YAAI,cAAc;AAChB,uBAAa,YAAY;AACzB,8BAAoB,OAAO,MAAM;AAAA,QACnC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,eAAe,eAAe,OAAO,KAAK,qBAAqB,cAAc,eAAe,gBAAgB,GAAG;AACxH,SAAK,iBAAiB,SAAS,CAAC,UAAU;AAExC,iBAAW,MAAM,yBAAyB,aAAa,KAAK,IAAI,MAAM,QAAQ,KAAK,GAAG,GAAG;AAAA,IAC3F,CAAC;AACD,SAAK,iBAAiB,sBAAsB,CAAC,UAAU;AACrD,YAAM,QAAS,MAAc;AAC7B,UAAI,SAAS,OAAQ,MAAc,YAAY,UAAU;AAEvD,mBAAW,MAAM,yBAAyB,KAAK,GAAG,GAAG;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,OAAO,cAAc,eAAe,gBAAgB,GAAG;AAC1G,YAAQ,GAAG,qBAAqB,CAAC,UAAU;AAEzC,iBAAW,MAAM,yBAAyB,KAAK,GAAG,GAAG;AAAA,IACvD,CAAC;AACD,YAAQ,GAAG,sBAAsB,CAAC,UAAU;AAC1C,UAAI,SAAS,OAAQ,MAAc,YAAY,UAAU;AAEvD,mBAAW,MAAM,yBAAyB,KAAY,GAAG,GAAG;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAOA;AACT;;;AD7NA,IAAM,aAAa,SAAS,oBAAoB,MAAM,8DAA8D;AAEpH,SAAS,kBAAkB,MAAmD;AAC5E,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEA,IAAM,kBAA0D,SAASC,mBAAkB;AACzF,SAAO;AACT;AAEA,IAAM,sBAAkE,SAASC,qBAAoB,MAAM,cAAc;AACvH,oBAAkB,UAAU,EAAE,YAAY,MAAM,YAAkC;AACpF;AAEA,IAAM,4BAA8E,SAASC,2BAA0B,WAAW;AAChI,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,QAAM,iBAAiB,CAAC,YAAiB;AACvC,cAAU,OAAO;AAAA,EACnB;AACA,QAAM,cAAc,MAAM;AACxB,sBAAkB,UAAU,EAAE,IAAI,WAAW,cAAc;AAAA,EAC7D;AACA,oBAAkB,UAAU,EAAE,GAAG,WAAW,cAAc;AAC1D,SAAO;AACT;AAEA,IAAM,mBAAmB,YAAY,GAAG,KAAK,UAAU;AACvD,IAAM,cAAc,YAAY,YAAY,KAAK,UAAU;AAC3D,IAAM,sBAAsB,YAAY,IAAI,KAAK,UAAU;AAQ3D,IAAM,SAAS,aAAa;AAAA,EAC1B;AAAA,EAAiB;AAAA,EAAqB;AACxC,GAAG;AAAA,EACD;AAAA,EAAkB;AAAA,EAAa;AACjC,CAAC;","names":["expose","isWorkerRuntime","postMessageToMaster","subscribeToMasterMessages"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/worker/worker.node.ts","../../../src/worker/expose.ts","../../../src/serializers.ts","../../../src/common.ts","../../../src/symbols.ts","../../../src/transferable.ts","../../../src/types/messages.ts"],"sourcesContent":["/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// tslint:disable no-shadowed-variable\n\nimport type { MessagePort, TransferListItem } from 'node:worker_threads'\nimport { parentPort as optionalParentPort } from 'node:worker_threads'\n\nimport { assertEx } from '@xylabs/assert'\n\nimport type { AbstractedWorkerAPI } from '../types/worker.ts'\nimport { createExpose } from './expose.ts'\n\nconst parentPort = assertEx(optionalParentPort, () => 'Invariant violation: MessagePort to parent is not available.')\n\nfunction assertMessagePort(port: MessagePort | null | undefined): MessagePort {\n if (!port) {\n throw new Error('Invariant violation: MessagePort to parent is not available.')\n }\n return port\n}\n\nconst isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {\n return true // isMainThread\n}\n\nconst postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList) {\n assertMessagePort(parentPort).postMessage(data, transferList as TransferListItem[])\n}\n\nconst subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {\n if (!parentPort) {\n throw new Error('Invariant violation: MessagePort to parent is not available.')\n }\n const messageHandler = (message: any) => {\n onMessage(message)\n }\n const unsubscribe = () => {\n assertMessagePort(parentPort).off('message', messageHandler)\n }\n assertMessagePort(parentPort).on('message', messageHandler)\n return unsubscribe\n}\n\nconst addEventListener = parentPort?.on.bind(parentPort)\nconst postMessage = parentPort?.postMessage.bind(parentPort)\nconst removeEventListener = parentPort?.off.bind(parentPort)\n\nexport {\n addEventListener,\n postMessage,\n removeEventListener,\n}\n\nconst expose = createExpose({\n isWorkerRuntime, postMessageToMaster, subscribeToMasterMessages,\n}, {\n addEventListener, postMessage, removeEventListener,\n})\n\nexport {\n isWorkerRuntime,\n postMessageToMaster,\n subscribeToMasterMessages,\n}\n\nexport { registerSerializer } from '../common.ts'\nexport { Transfer } from '../transferable.ts'\nexport { expose }\n","/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport isSomeObservable from 'is-observable-2-1-0'\nimport type { Observable, Subscription } from 'observable-fns'\n\nimport { deserialize, serialize } from '../common.ts'\nimport type { TransferDescriptor } from '../transferable.ts'\nimport { isTransferDescriptor } from '../transferable.ts'\nimport type {\n MasterJobCancelMessage,\n MasterJobRunMessage,\n SerializedError,\n WorkerInitMessage,\n WorkerJobErrorMessage,\n WorkerJobResultMessage,\n WorkerJobStartMessage,\n WorkerUncaughtErrorMessage,\n} from '../types/messages.ts'\nimport {\n MasterMessageType,\n WorkerMessageType,\n} from '../types/messages.ts'\nimport type {\n AbstractedWorkerAPI, WorkerFunction, WorkerModule,\n} from '../types/worker.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\nconst isErrorEvent = (value: Event): value is ErrorEvent => value && (value as ErrorEvent).error\n\nexport function createExpose(implementation: AbstractedWorkerAPI, self: WorkerGlobalScope) {\n let exposeCalled = false\n\n const activeSubscriptions = new Map<number, Subscription<any>>()\n\n const isMasterJobCancelMessage = (thing: any): thing is MasterJobCancelMessage => thing && thing.type === MasterMessageType.cancel\n const isMasterJobRunMessage = (thing: any): thing is MasterJobRunMessage => thing && thing.type === MasterMessageType.run\n\n /**\n * There are issues with `is-observable` not recognizing zen-observable's instances.\n * We are using `observable-fns`, but it's based on zen-observable, too.\n */\n const isObservable = (thing: any): thing is Observable<any> => isSomeObservable(thing) || isZenObservable(thing)\n\n function isZenObservable(thing: any): thing is Observable<any> {\n return thing && typeof thing === 'object' && typeof thing.subscribe === 'function'\n }\n\n function deconstructTransfer(thing: any) {\n return isTransferDescriptor(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }\n }\n\n function postFunctionInitMessage() {\n const initMessage: WorkerInitMessage = {\n exposed: { type: 'function' },\n type: WorkerMessageType.init,\n }\n implementation.postMessageToMaster(initMessage)\n }\n\n function postModuleInitMessage(methodNames: string[]) {\n const initMessage: WorkerInitMessage = {\n exposed: {\n methods: methodNames,\n type: 'module',\n },\n type: WorkerMessageType.init,\n }\n implementation.postMessageToMaster(initMessage)\n }\n\n function postJobErrorMessage(uid: number, rawError: Error | TransferDescriptor<Error>) {\n const { payload: error, transferables } = deconstructTransfer(rawError)\n const errorMessage: WorkerJobErrorMessage = {\n error: serialize(error) as any as SerializedError,\n type: WorkerMessageType.error,\n uid,\n }\n implementation.postMessageToMaster(errorMessage, transferables)\n }\n\n function postJobResultMessage(uid: number, completed: boolean, resultValue?: any) {\n const { payload, transferables } = deconstructTransfer(resultValue)\n const resultMessage: WorkerJobResultMessage = {\n complete: completed ? true : undefined,\n payload,\n type: WorkerMessageType.result,\n uid,\n }\n implementation.postMessageToMaster(resultMessage, transferables)\n }\n\n function postJobStartMessage(uid: number, resultType: WorkerJobStartMessage['resultType']) {\n const startMessage: WorkerJobStartMessage = {\n resultType,\n type: WorkerMessageType.running,\n uid,\n }\n implementation.postMessageToMaster(startMessage)\n }\n\n function postUncaughtErrorMessage(error: Error) {\n try {\n const errorMessage: WorkerUncaughtErrorMessage = {\n error: serialize(error) as any as SerializedError,\n type: WorkerMessageType.uncaughtError,\n }\n implementation.postMessageToMaster(errorMessage)\n } catch (subError) {\n // tslint:disable-next-line no-console\n console.error(\n 'Not reporting uncaught error back to master thread as it ' + 'occured while reporting an uncaught error already.' + '\\nLatest error:',\n subError,\n '\\nOriginal error:',\n error,\n )\n }\n }\n\n async function runFunction(jobUID: number, fn: WorkerFunction, args: any[]) {\n let syncResult: any\n\n try {\n syncResult = fn(...args)\n } catch (ex) {\n const error = ex as Error\n return postJobErrorMessage(jobUID, error)\n }\n\n const resultType = isObservable(syncResult) ? 'observable' : 'promise'\n postJobStartMessage(jobUID, resultType)\n\n if (isObservable(syncResult)) {\n const subscription = syncResult.subscribe(\n value => postJobResultMessage(jobUID, false, serialize(value)),\n (error) => {\n postJobErrorMessage(jobUID, serialize(error) as any)\n activeSubscriptions.delete(jobUID)\n },\n () => {\n postJobResultMessage(jobUID, true)\n activeSubscriptions.delete(jobUID)\n },\n )\n activeSubscriptions.set(jobUID, subscription)\n } else {\n try {\n const result = await syncResult\n postJobResultMessage(jobUID, true, serialize(result))\n } catch (error) {\n postJobErrorMessage(jobUID, serialize(error) as any)\n }\n }\n }\n\n /**\n * Expose a function or a module (an object whose values are functions)\n * to the main thread. Must be called exactly once in every worker thread\n * to signal its API to the main thread.\n *\n * @param exposed Function or object whose values are functions\n */\n const expose = (exposed: WorkerFunction | WorkerModule<any>) => {\n if (!implementation.isWorkerRuntime()) {\n throw new Error('expose() called in the master thread.')\n }\n if (exposeCalled) {\n throw new Error('expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.')\n }\n exposeCalled = true\n\n if (typeof exposed === 'function') {\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobRunMessage(messageData) && !messageData.method) {\n runFunction(messageData.uid, exposed, messageData.args.map(deserialize))\n }\n })\n postFunctionInitMessage()\n } else if (typeof exposed === 'object' && exposed) {\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobRunMessage(messageData) && messageData.method) {\n runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(deserialize))\n }\n })\n\n const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function')\n postModuleInitMessage(methodNames)\n } else {\n throw new Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`)\n }\n\n implementation.subscribeToMasterMessages((messageData: unknown) => {\n if (isMasterJobCancelMessage(messageData)) {\n const jobUID = messageData.uid\n const subscription = activeSubscriptions.get(jobUID)\n\n if (subscription) {\n subscription.unsubscribe()\n activeSubscriptions.delete(jobUID)\n }\n }\n })\n }\n\n if (typeof globalThis !== 'undefined' && typeof self.addEventListener === 'function' && implementation.isWorkerRuntime()) {\n self.addEventListener('error', (event) => {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250)\n })\n self.addEventListener('unhandledrejection', (event) => {\n const error = (event as any).reason\n if (error && typeof (error as any).message === 'string') {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error), 250)\n }\n })\n }\n\n if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation.isWorkerRuntime()) {\n process.on('uncaughtException', (error) => {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error), 250)\n })\n process.on('unhandledRejection', (error) => {\n if (error && typeof (error as any).message === 'string') {\n // Post with some delay, so the master had some time to subscribe to messages\n setTimeout(() => postUncaughtErrorMessage(error as any), 250)\n }\n })\n }\n\n return expose\n}\n","/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { SerializedError } from './types/messages.ts'\n\nexport interface Serializer<Msg = JsonSerializable, Input = any> {\n deserialize(message: Msg): Input\n serialize(input: Input): Msg\n}\n\nexport interface SerializerImplementation<Msg = JsonSerializable, Input = any> {\n deserialize(message: Msg, defaultDeserialize: (msg: Msg) => Input): Input\n serialize(input: Input, defaultSerialize: (inp: Input) => Msg): Msg\n}\n\nexport function extendSerializer<MessageType, InputType = any>(\n extend: Serializer<MessageType, InputType>,\n implementation: SerializerImplementation<MessageType, InputType>,\n): Serializer<MessageType, InputType> {\n const fallbackDeserializer = extend.deserialize.bind(extend)\n const fallbackSerializer = extend.serialize.bind(extend)\n\n return {\n deserialize(message: MessageType): InputType {\n return implementation.deserialize(message, fallbackDeserializer)\n },\n\n serialize(input: InputType): MessageType {\n return implementation.serialize(input, fallbackSerializer)\n },\n }\n}\n\ntype JsonSerializablePrimitive = string | number | boolean | null\n\ntype JsonSerializableObject = {\n [key: string]: JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[] | undefined\n}\n\nexport type JsonSerializable = JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[]\n\nconst DefaultErrorSerializer: Serializer<SerializedError, Error> = {\n deserialize(message: SerializedError): Error {\n return Object.assign(new Error(message.message), {\n name: message.name,\n stack: message.stack,\n })\n },\n serialize(error: Error): SerializedError {\n return {\n __error_marker: '$$error',\n message: error.message,\n name: error.name,\n stack: error.stack,\n }\n },\n}\n\nconst isSerializedError = (thing: any): thing is SerializedError =>\n thing && typeof thing === 'object' && '__error_marker' in thing && thing.__error_marker === '$$error'\n\nexport const DefaultSerializer: Serializer<JsonSerializable> = {\n deserialize(message: JsonSerializable): any {\n return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message\n },\n serialize(input: any): JsonSerializable {\n return input instanceof Error ? (DefaultErrorSerializer.serialize(input) as any as JsonSerializable) : input\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n JsonSerializable, Serializer, SerializerImplementation,\n} from './serializers.ts'\nimport { DefaultSerializer, extendSerializer } from './serializers.ts'\n\ndeclare global {\n var registeredSerializer: Serializer<JsonSerializable>\n}\n\nglobalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSerializer\n\nexport function registerSerializer(serializer: SerializerImplementation<JsonSerializable>) {\n globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer)\n}\n\nexport function deserialize(message: JsonSerializable): any {\n return globalThis.registeredSerializer.deserialize(message)\n}\n\nexport function serialize(input: any): JsonSerializable {\n return globalThis.registeredSerializer.serialize(input)\n}\n","export const $errors = Symbol('thread.errors')\nexport const $events = Symbol('thread.events')\nexport const $terminate = Symbol('thread.terminate')\nexport const $transferable = Symbol('thread.transferable')\nexport const $worker = Symbol('thread.worker')\n","/// <reference lib=\"webworker\" />\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { $transferable } from './symbols.ts'\n\nexport interface TransferDescriptor<T = any> {\n [$transferable]: true\n send: T\n transferables: Transferable[]\n}\n\nfunction isTransferable(thing: any): thing is Transferable {\n if (!thing || typeof thing !== 'object') return false\n // Don't check too thoroughly, since the list of transferable things in JS might grow over time\n return true\n}\n\nexport function isTransferDescriptor(thing: any): thing is TransferDescriptor {\n return thing && typeof thing === 'object' && thing[$transferable]\n}\n\n/**\n * Mark a transferable object as such, so it will no be serialized and\n * deserialized on messaging with the main thread, but to transfer\n * ownership of it to the receiving thread.\n *\n * Only works with array buffers, message ports and few more special\n * types of objects, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer(transferable: Transferable): TransferDescriptor\n\n/**\n * Mark transferable objects within an arbitrary object or array as\n * being a transferable object. They will then not be serialized\n * and deserialized on messaging with the main thread, but ownership\n * of them will be tranferred to the receiving thread.\n *\n * Only array buffers, message ports and few more special types of\n * objects can be transferred, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor\n\nexport function Transfer<T>(payload: T, transferables?: Transferable[]): TransferDescriptor {\n console.log('Transfer')\n if (!transferables) {\n if (!isTransferable(payload)) throw new Error('Not transferable')\n transferables = [payload]\n }\n\n return {\n [$transferable]: true,\n send: payload,\n transferables,\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/member-ordering */\nexport interface SerializedError {\n __error_marker: '$$error'\n message: string\n name: string\n stack?: string\n}\n\n/////////////////////////////\n// Messages sent by master:\n\nexport enum MasterMessageType {\n cancel = 'cancel',\n run = 'run',\n}\n\nexport type MasterJobCancelMessage = {\n type: MasterMessageType.cancel\n uid: number\n}\n\nexport type MasterJobRunMessage = {\n type: MasterMessageType.run\n uid: number\n method?: string\n args: any[]\n}\n\n////////////////////////////\n// Messages sent by worker:\n\nexport enum WorkerMessageType {\n error = 'error',\n init = 'init',\n result = 'result',\n running = 'running',\n uncaughtError = 'uncaughtError',\n}\n\nexport type WorkerUncaughtErrorMessage = {\n type: WorkerMessageType.uncaughtError\n error: {\n message: string\n name: string\n stack?: string\n }\n}\n\nexport type WorkerInitMessage = {\n type: WorkerMessageType.init\n exposed: { type: 'function' } | { type: 'module'; methods: string[] }\n}\n\nexport type WorkerJobErrorMessage = {\n type: WorkerMessageType.error\n uid: number\n error: SerializedError\n}\n\nexport type WorkerJobResultMessage = {\n type: WorkerMessageType.result\n uid: number\n complete?: true\n payload?: any\n}\n\nexport type WorkerJobStartMessage = {\n type: WorkerMessageType.running\n uid: number\n resultType: 'observable' | 'promise'\n}\n"],"mappings":"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","names":["parentPort","optionalParentPort","assertEx","isSomeObservable","extendSerializer","extend","implementation","fallbackDeserializer","deserialize","bind","fallbackSerializer","serialize","message","input","DefaultErrorSerializer","Object","assign","Error","name","stack","error","__error_marker","isSerializedError","thing","DefaultSerializer","globalThis","registeredSerializer","DefaultSerializer","registerSerializer","serializer","extendSerializer","deserialize","message","serialize","input","$errors","Symbol","$events","$terminate","$transferable","$worker","isTransferable","thing","isTransferDescriptor","$transferable","Transfer","payload","transferables","console","log","Error","send","MasterMessageType","WorkerMessageType","isErrorEvent","value","error","createExpose","implementation","self","exposeCalled","activeSubscriptions","Map","isMasterJobCancelMessage","thing","type","MasterMessageType","cancel","isMasterJobRunMessage","run","isObservable","isSomeObservable","isZenObservable","subscribe","deconstructTransfer","isTransferDescriptor","payload","send","transferables","undefined","postFunctionInitMessage","initMessage","exposed","WorkerMessageType","init","postMessageToMaster","postModuleInitMessage","methodNames","methods","postJobErrorMessage","uid","rawError","errorMessage","serialize","postJobResultMessage","completed","resultValue","resultMessage","complete","result","postJobStartMessage","resultType","startMessage","running","postUncaughtErrorMessage","uncaughtError","subError","console","runFunction","jobUID","fn","args","syncResult","ex","subscription","delete","set","expose","isWorkerRuntime","Error","subscribeToMasterMessages","messageData","method","map","deserialize","Object","keys","filter","key","get","unsubscribe","globalThis","addEventListener","event","setTimeout","reason","message","process","on","parentPort","assertEx","optionalParentPort","assertMessagePort","port","Error","isWorkerRuntime","postMessageToMaster","data","transferList","postMessage","subscribeToMasterMessages","onMessage","messageHandler","message","unsubscribe","off","on","addEventListener","bind","removeEventListener","expose","createExpose","isWorkerRuntime","postMessageToMaster","subscribeToMasterMessages","addEventListener","postMessage","removeEventListener"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type UnsubscribeFn = () => void;
|
|
2
|
+
interface AbstractedWorkerAPI {
|
|
3
|
+
isWorkerRuntime(): boolean;
|
|
4
|
+
postMessageToMaster(message: any, transferList?: Transferable[]): void;
|
|
5
|
+
subscribeToMasterMessages(onMessage: (data: any) => void): UnsubscribeFn;
|
|
6
|
+
}
|
|
7
|
+
type WorkerFunction = ((...args: any[]) => any) | (() => any);
|
|
8
|
+
type WorkerModule<Keys extends string> = {
|
|
9
|
+
[key in Keys]: WorkerFunction;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type { AbstractedWorkerAPI as A, WorkerFunction as W, WorkerModule as a };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xylabs/threads",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.13.1",
|
|
4
4
|
"description": "Web workers & worker threads as simple as a function call",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"thread",
|
|
@@ -28,97 +28,104 @@
|
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
30
30
|
"browser": {
|
|
31
|
-
"types": "./dist/
|
|
31
|
+
"types": "./dist/browser/index-browser.d.ts",
|
|
32
32
|
"import": "./dist/browser/index-browser.mjs"
|
|
33
33
|
},
|
|
34
34
|
"node": {
|
|
35
|
-
"types": "./dist/
|
|
35
|
+
"types": "./dist/node/index-node.d.ts",
|
|
36
36
|
"import": "./dist/node/index-node.mjs"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"./implementation": {
|
|
40
40
|
"browser": {
|
|
41
|
-
"types": "./dist/
|
|
41
|
+
"types": "./dist/browser/master/implementation.browser.d.ts",
|
|
42
42
|
"import": "./dist/browser/master/implementation.browser.mjs"
|
|
43
43
|
},
|
|
44
44
|
"node": {
|
|
45
|
-
"types": "./dist/
|
|
45
|
+
"types": "./dist/node/master/implementation.node.d.ts",
|
|
46
46
|
"import": "./dist/node/master/implementation.node.mjs"
|
|
47
47
|
}
|
|
48
48
|
},
|
|
49
49
|
"./master": {
|
|
50
50
|
"browser": {
|
|
51
|
-
"types": "./dist/
|
|
51
|
+
"types": "./dist/browser/master/index-browser.d.ts",
|
|
52
52
|
"import": "./dist/browser/master/index-browser.mjs"
|
|
53
53
|
},
|
|
54
54
|
"node": {
|
|
55
|
-
"types": "./dist/
|
|
55
|
+
"types": "./dist/node/master/index-node.d.ts",
|
|
56
56
|
"import": "./dist/node/master/index-node.mjs"
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
"./spawn": {
|
|
60
|
-
"types": "./dist/
|
|
60
|
+
"types": "./dist/neutral/master/spawn.d.ts",
|
|
61
61
|
"import": "./dist/neutral/master/spawn.mjs"
|
|
62
62
|
},
|
|
63
63
|
"./thread": {
|
|
64
|
-
"types": "./dist/
|
|
64
|
+
"types": "./dist/neutral/master/thread.d.ts",
|
|
65
65
|
"import": "./dist/neutral/master/thread.mjs"
|
|
66
66
|
},
|
|
67
67
|
"./messenger": {
|
|
68
|
-
"types": "./dist/
|
|
68
|
+
"types": "./dist/neutral/types/messages.d.ts"
|
|
69
69
|
},
|
|
70
70
|
"./observable": {
|
|
71
|
-
"types": "./dist/
|
|
71
|
+
"types": "./dist/neutral/observable.d.ts",
|
|
72
72
|
"import": "./dist/neutral/observable.mjs"
|
|
73
73
|
},
|
|
74
74
|
"./pool": {
|
|
75
75
|
"browser": {
|
|
76
|
-
"types": "./dist/
|
|
76
|
+
"types": "./dist/browser/master/pool-browser.d.ts",
|
|
77
77
|
"import": "./dist/browser/master/pool-browser.mjs"
|
|
78
78
|
},
|
|
79
79
|
"node": {
|
|
80
|
-
"types": "./dist/
|
|
80
|
+
"types": "./dist/node/master/pool-node.d.ts",
|
|
81
81
|
"import": "./dist/node/master/pool-node.mjs"
|
|
82
82
|
}
|
|
83
83
|
},
|
|
84
84
|
"./observable-promise": {
|
|
85
|
-
"types": "./dist/
|
|
85
|
+
"types": "./dist/neutral/observable-promise.d.ts",
|
|
86
86
|
"import": "./dist/neutral/observable-promise.mjs"
|
|
87
87
|
},
|
|
88
88
|
"./register": {
|
|
89
|
-
"types": "./dist/
|
|
89
|
+
"types": "./dist/neutral/master/register.d.ts",
|
|
90
90
|
"import": "./dist/neutral/master/register.mjs"
|
|
91
91
|
},
|
|
92
92
|
"./worker": {
|
|
93
93
|
"browser": {
|
|
94
|
-
"types": "./dist/
|
|
94
|
+
"types": "./dist/browser/worker/worker.browser.d.ts",
|
|
95
95
|
"import": "./dist/browser/worker/worker.browser.mjs"
|
|
96
96
|
},
|
|
97
97
|
"node": {
|
|
98
|
-
"types": "./dist/
|
|
98
|
+
"types": "./dist/node/worker/worker.node.d.ts",
|
|
99
99
|
"import": "./dist/node/worker/worker.node.mjs"
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
},
|
|
103
103
|
"module": "dist/browser/index-browser.mjs",
|
|
104
|
-
"types": "dist/
|
|
104
|
+
"types": "dist/browser/index-browser.d.ts",
|
|
105
105
|
"files": [
|
|
106
106
|
"dist",
|
|
107
107
|
"src",
|
|
108
108
|
"README.md",
|
|
109
109
|
"LICENSE"
|
|
110
110
|
],
|
|
111
|
+
"scripts": {
|
|
112
|
+
"package-compile": "yarn package-compile-tsup",
|
|
113
|
+
"package-compile-tsup": "tsup --config tsup.browser.config.ts && tsup --config tsup.node.config.ts && tsup --config tsup.neutral.config.ts"
|
|
114
|
+
},
|
|
111
115
|
"dependencies": {
|
|
112
|
-
"@xylabs/assert": "^4.
|
|
116
|
+
"@xylabs/assert": "^4.13.1",
|
|
113
117
|
"debug": "^4.4.1",
|
|
114
118
|
"is-observable-2-1-0": "npm:is-observable@2.1.0",
|
|
115
119
|
"observable-fns": "^0.6.1"
|
|
116
120
|
},
|
|
117
121
|
"devDependencies": {
|
|
122
|
+
"@swc/core": "^1.12.11",
|
|
118
123
|
"@types/debug": "^4.1.12",
|
|
119
|
-
"@types/node": "^24.0.
|
|
120
|
-
"@xylabs/eslint-config-flat": "^
|
|
121
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
124
|
+
"@types/node": "^24.0.13",
|
|
125
|
+
"@xylabs/eslint-config-flat": "^7.0.0-rc.7",
|
|
126
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.0-rc.7",
|
|
127
|
+
"tiny-worker": "^2.3.0",
|
|
128
|
+
"tsup": "^8.5.0",
|
|
122
129
|
"typescript": "^5.8.3"
|
|
123
130
|
},
|
|
124
131
|
"publishConfig": {
|
package/src/transferable.ts
CHANGED
package/src/types/worker.ts
CHANGED
package/dist/types/common.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { JsonSerializable, Serializer, SerializerImplementation } from './serializers.ts';
|
|
2
|
-
declare global {
|
|
3
|
-
var registeredSerializer: Serializer<JsonSerializable>;
|
|
4
|
-
}
|
|
5
|
-
export declare function registerSerializer(serializer: SerializerImplementation<JsonSerializable>): void;
|
|
6
|
-
export declare function deserialize(message: JsonSerializable): any;
|
|
7
|
-
export declare function serialize(input: any): JsonSerializable;
|
|
8
|
-
//# sourceMappingURL=common.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAAE,UAAU,EAAE,wBAAwB,EACvD,MAAM,kBAAkB,CAAA;AAGzB,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,oBAAoB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CACvD;AAID,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,wBAAwB,CAAC,gBAAgB,CAAC,QAExF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB,CAEtD"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { registerSerializer } from './common.ts';
|
|
2
|
-
export * from './master/index-browser.ts';
|
|
3
|
-
export type { QueuedTask } from './master/pool-node.ts';
|
|
4
|
-
export type { ExposedToThreadType as ExposedAs } from './master/spawn.ts';
|
|
5
|
-
export type { JsonSerializable, Serializer, SerializerImplementation, } from './serializers.ts';
|
|
6
|
-
export { DefaultSerializer } from './serializers.ts';
|
|
7
|
-
export type { TransferDescriptor } from './transferable.ts';
|
|
8
|
-
export { Transfer } from './transferable.ts';
|
|
9
|
-
//# sourceMappingURL=index-browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EAAE,mBAAmB,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EACV,gBAAgB,EAAE,UAAU,EAAE,wBAAwB,GACvD,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export { registerSerializer } from './common.ts';
|
|
2
|
-
export * from './master/index-node.ts';
|
|
3
|
-
export type { QueuedTask } from './master/pool-node.ts';
|
|
4
|
-
export type { ExposedToThreadType as ExposedAs } from './master/spawn.ts';
|
|
5
|
-
export type { JsonSerializable, Serializer, SerializerImplementation, } from './serializers.ts';
|
|
6
|
-
export { DefaultSerializer } from './serializers.ts';
|
|
7
|
-
export type { TransferDescriptor } from './transferable.ts';
|
|
8
|
-
export { Transfer } from './transferable.ts';
|
|
9
|
-
//# sourceMappingURL=index-node.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,cAAc,wBAAwB,CAAA;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EAAE,mBAAmB,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EACV,gBAAgB,EAAE,UAAU,EAAE,wBAAwB,GACvD,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA"}
|