@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/expose.ts
|
|
2
5
|
import isSomeObservable from "is-observable-2-1-0";
|
|
3
6
|
|
|
@@ -14,6 +17,7 @@ function extendSerializer(extend, implementation) {
|
|
|
14
17
|
}
|
|
15
18
|
};
|
|
16
19
|
}
|
|
20
|
+
__name(extendSerializer, "extendSerializer");
|
|
17
21
|
var DefaultErrorSerializer = {
|
|
18
22
|
deserialize(message) {
|
|
19
23
|
return Object.assign(new Error(message.message), {
|
|
@@ -30,7 +34,7 @@ var DefaultErrorSerializer = {
|
|
|
30
34
|
};
|
|
31
35
|
}
|
|
32
36
|
};
|
|
33
|
-
var isSerializedError = (thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error";
|
|
37
|
+
var isSerializedError = /* @__PURE__ */ __name((thing) => thing && typeof thing === "object" && "__error_marker" in thing && thing.__error_marker === "$$error", "isSerializedError");
|
|
34
38
|
var DefaultSerializer = {
|
|
35
39
|
deserialize(message) {
|
|
36
40
|
return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
|
|
@@ -45,12 +49,15 @@ globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSeri
|
|
|
45
49
|
function registerSerializer(serializer) {
|
|
46
50
|
globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer);
|
|
47
51
|
}
|
|
52
|
+
__name(registerSerializer, "registerSerializer");
|
|
48
53
|
function deserialize(message) {
|
|
49
54
|
return globalThis.registeredSerializer.deserialize(message);
|
|
50
55
|
}
|
|
56
|
+
__name(deserialize, "deserialize");
|
|
51
57
|
function serialize(input) {
|
|
52
58
|
return globalThis.registeredSerializer.serialize(input);
|
|
53
59
|
}
|
|
60
|
+
__name(serialize, "serialize");
|
|
54
61
|
|
|
55
62
|
// src/symbols.ts
|
|
56
63
|
var $errors = Symbol("thread.errors");
|
|
@@ -64,14 +71,18 @@ function isTransferable(thing) {
|
|
|
64
71
|
if (!thing || typeof thing !== "object") return false;
|
|
65
72
|
return true;
|
|
66
73
|
}
|
|
74
|
+
__name(isTransferable, "isTransferable");
|
|
67
75
|
function isTransferDescriptor(thing) {
|
|
68
76
|
return thing && typeof thing === "object" && thing[$transferable];
|
|
69
77
|
}
|
|
78
|
+
__name(isTransferDescriptor, "isTransferDescriptor");
|
|
70
79
|
function Transfer(payload, transferables) {
|
|
71
80
|
console.log("Transfer");
|
|
72
81
|
if (!transferables) {
|
|
73
82
|
if (!isTransferable(payload)) throw new Error("Not transferable");
|
|
74
|
-
transferables = [
|
|
83
|
+
transferables = [
|
|
84
|
+
payload
|
|
85
|
+
];
|
|
75
86
|
}
|
|
76
87
|
return {
|
|
77
88
|
[$transferable]: true,
|
|
@@ -79,81 +90,108 @@ function Transfer(payload, transferables) {
|
|
|
79
90
|
transferables
|
|
80
91
|
};
|
|
81
92
|
}
|
|
93
|
+
__name(Transfer, "Transfer");
|
|
94
|
+
|
|
95
|
+
// src/types/messages.ts
|
|
96
|
+
var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
|
|
97
|
+
MasterMessageType2["cancel"] = "cancel";
|
|
98
|
+
MasterMessageType2["run"] = "run";
|
|
99
|
+
return MasterMessageType2;
|
|
100
|
+
}({});
|
|
101
|
+
var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
|
|
102
|
+
WorkerMessageType2["error"] = "error";
|
|
103
|
+
WorkerMessageType2["init"] = "init";
|
|
104
|
+
WorkerMessageType2["result"] = "result";
|
|
105
|
+
WorkerMessageType2["running"] = "running";
|
|
106
|
+
WorkerMessageType2["uncaughtError"] = "uncaughtError";
|
|
107
|
+
return WorkerMessageType2;
|
|
108
|
+
}({});
|
|
82
109
|
|
|
83
110
|
// src/worker/expose.ts
|
|
84
|
-
var isErrorEvent = (value) => value && value.error;
|
|
111
|
+
var isErrorEvent = /* @__PURE__ */ __name((value) => value && value.error, "isErrorEvent");
|
|
85
112
|
function createExpose(implementation, self2) {
|
|
86
113
|
let exposeCalled = false;
|
|
87
114
|
const activeSubscriptions = /* @__PURE__ */ new Map();
|
|
88
|
-
const isMasterJobCancelMessage = (thing) => thing && thing.type ===
|
|
89
|
-
const isMasterJobRunMessage = (thing) => thing && thing.type ===
|
|
90
|
-
const isObservable = (thing) => isSomeObservable(thing) || isZenObservable(thing);
|
|
115
|
+
const isMasterJobCancelMessage = /* @__PURE__ */ __name((thing) => thing && thing.type === MasterMessageType.cancel, "isMasterJobCancelMessage");
|
|
116
|
+
const isMasterJobRunMessage = /* @__PURE__ */ __name((thing) => thing && thing.type === MasterMessageType.run, "isMasterJobRunMessage");
|
|
117
|
+
const isObservable = /* @__PURE__ */ __name((thing) => isSomeObservable(thing) || isZenObservable(thing), "isObservable");
|
|
91
118
|
function isZenObservable(thing) {
|
|
92
119
|
return thing && typeof thing === "object" && typeof thing.subscribe === "function";
|
|
93
120
|
}
|
|
121
|
+
__name(isZenObservable, "isZenObservable");
|
|
94
122
|
function deconstructTransfer(thing) {
|
|
95
|
-
return isTransferDescriptor(thing) ? {
|
|
123
|
+
return isTransferDescriptor(thing) ? {
|
|
124
|
+
payload: thing.send,
|
|
125
|
+
transferables: thing.transferables
|
|
126
|
+
} : {
|
|
127
|
+
payload: thing,
|
|
128
|
+
transferables: void 0
|
|
129
|
+
};
|
|
96
130
|
}
|
|
131
|
+
__name(deconstructTransfer, "deconstructTransfer");
|
|
97
132
|
function postFunctionInitMessage() {
|
|
98
133
|
const initMessage = {
|
|
99
|
-
exposed: {
|
|
100
|
-
|
|
134
|
+
exposed: {
|
|
135
|
+
type: "function"
|
|
136
|
+
},
|
|
137
|
+
type: WorkerMessageType.init
|
|
101
138
|
};
|
|
102
139
|
implementation.postMessageToMaster(initMessage);
|
|
103
140
|
}
|
|
141
|
+
__name(postFunctionInitMessage, "postFunctionInitMessage");
|
|
104
142
|
function postModuleInitMessage(methodNames) {
|
|
105
143
|
const initMessage = {
|
|
106
144
|
exposed: {
|
|
107
145
|
methods: methodNames,
|
|
108
146
|
type: "module"
|
|
109
147
|
},
|
|
110
|
-
type:
|
|
148
|
+
type: WorkerMessageType.init
|
|
111
149
|
};
|
|
112
150
|
implementation.postMessageToMaster(initMessage);
|
|
113
151
|
}
|
|
152
|
+
__name(postModuleInitMessage, "postModuleInitMessage");
|
|
114
153
|
function postJobErrorMessage(uid, rawError) {
|
|
115
154
|
const { payload: error, transferables } = deconstructTransfer(rawError);
|
|
116
155
|
const errorMessage = {
|
|
117
156
|
error: serialize(error),
|
|
118
|
-
type:
|
|
157
|
+
type: WorkerMessageType.error,
|
|
119
158
|
uid
|
|
120
159
|
};
|
|
121
160
|
implementation.postMessageToMaster(errorMessage, transferables);
|
|
122
161
|
}
|
|
162
|
+
__name(postJobErrorMessage, "postJobErrorMessage");
|
|
123
163
|
function postJobResultMessage(uid, completed, resultValue) {
|
|
124
164
|
const { payload, transferables } = deconstructTransfer(resultValue);
|
|
125
165
|
const resultMessage = {
|
|
126
166
|
complete: completed ? true : void 0,
|
|
127
167
|
payload,
|
|
128
|
-
type:
|
|
168
|
+
type: WorkerMessageType.result,
|
|
129
169
|
uid
|
|
130
170
|
};
|
|
131
171
|
implementation.postMessageToMaster(resultMessage, transferables);
|
|
132
172
|
}
|
|
173
|
+
__name(postJobResultMessage, "postJobResultMessage");
|
|
133
174
|
function postJobStartMessage(uid, resultType) {
|
|
134
175
|
const startMessage = {
|
|
135
176
|
resultType,
|
|
136
|
-
type:
|
|
177
|
+
type: WorkerMessageType.running,
|
|
137
178
|
uid
|
|
138
179
|
};
|
|
139
180
|
implementation.postMessageToMaster(startMessage);
|
|
140
181
|
}
|
|
182
|
+
__name(postJobStartMessage, "postJobStartMessage");
|
|
141
183
|
function postUncaughtErrorMessage(error) {
|
|
142
184
|
try {
|
|
143
185
|
const errorMessage = {
|
|
144
186
|
error: serialize(error),
|
|
145
|
-
type:
|
|
187
|
+
type: WorkerMessageType.uncaughtError
|
|
146
188
|
};
|
|
147
189
|
implementation.postMessageToMaster(errorMessage);
|
|
148
190
|
} catch (subError) {
|
|
149
|
-
console.error(
|
|
150
|
-
"Not reporting uncaught error back to master thread as it occured while reporting an uncaught error already.\nLatest error:",
|
|
151
|
-
subError,
|
|
152
|
-
"\nOriginal error:",
|
|
153
|
-
error
|
|
154
|
-
);
|
|
191
|
+
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);
|
|
155
192
|
}
|
|
156
193
|
}
|
|
194
|
+
__name(postUncaughtErrorMessage, "postUncaughtErrorMessage");
|
|
157
195
|
async function runFunction(jobUID, fn, args) {
|
|
158
196
|
let syncResult;
|
|
159
197
|
try {
|
|
@@ -165,17 +203,13 @@ function createExpose(implementation, self2) {
|
|
|
165
203
|
const resultType = isObservable(syncResult) ? "observable" : "promise";
|
|
166
204
|
postJobStartMessage(jobUID, resultType);
|
|
167
205
|
if (isObservable(syncResult)) {
|
|
168
|
-
const subscription = syncResult.subscribe(
|
|
169
|
-
(
|
|
170
|
-
(
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
postJobResultMessage(jobUID, true);
|
|
176
|
-
activeSubscriptions.delete(jobUID);
|
|
177
|
-
}
|
|
178
|
-
);
|
|
206
|
+
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, serialize(value)), (error) => {
|
|
207
|
+
postJobErrorMessage(jobUID, serialize(error));
|
|
208
|
+
activeSubscriptions.delete(jobUID);
|
|
209
|
+
}, () => {
|
|
210
|
+
postJobResultMessage(jobUID, true);
|
|
211
|
+
activeSubscriptions.delete(jobUID);
|
|
212
|
+
});
|
|
179
213
|
activeSubscriptions.set(jobUID, subscription);
|
|
180
214
|
} else {
|
|
181
215
|
try {
|
|
@@ -186,7 +220,8 @@ function createExpose(implementation, self2) {
|
|
|
186
220
|
}
|
|
187
221
|
}
|
|
188
222
|
}
|
|
189
|
-
|
|
223
|
+
__name(runFunction, "runFunction");
|
|
224
|
+
const expose2 = /* @__PURE__ */ __name((exposed) => {
|
|
190
225
|
if (!implementation.isWorkerRuntime()) {
|
|
191
226
|
throw new Error("expose() called in the master thread.");
|
|
192
227
|
}
|
|
@@ -222,7 +257,7 @@ function createExpose(implementation, self2) {
|
|
|
222
257
|
}
|
|
223
258
|
}
|
|
224
259
|
});
|
|
225
|
-
};
|
|
260
|
+
}, "expose");
|
|
226
261
|
if (typeof globalThis !== "undefined" && typeof self2.addEventListener === "function" && implementation.isWorkerRuntime()) {
|
|
227
262
|
self2.addEventListener("error", (event) => {
|
|
228
263
|
setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250);
|
|
@@ -246,25 +281,26 @@ function createExpose(implementation, self2) {
|
|
|
246
281
|
}
|
|
247
282
|
return expose2;
|
|
248
283
|
}
|
|
284
|
+
__name(createExpose, "createExpose");
|
|
249
285
|
|
|
250
286
|
// src/worker/worker.browser.ts
|
|
251
|
-
var isWorkerRuntime = function isWorkerRuntime2() {
|
|
287
|
+
var isWorkerRuntime = /* @__PURE__ */ __name(function isWorkerRuntime2() {
|
|
252
288
|
const isWindowContext = self !== void 0 && typeof Window !== "undefined" && self instanceof Window;
|
|
253
289
|
return self !== void 0 && self["postMessage"] && !isWindowContext ? true : false;
|
|
254
|
-
};
|
|
255
|
-
var postMessageToMaster = function postMessageToMaster2(data, transferList) {
|
|
290
|
+
}, "isWorkerRuntime");
|
|
291
|
+
var postMessageToMaster = /* @__PURE__ */ __name(function postMessageToMaster2(data, transferList) {
|
|
256
292
|
self.postMessage(data, transferList);
|
|
257
|
-
};
|
|
258
|
-
var subscribeToMasterMessages = function subscribeToMasterMessages2(onMessage) {
|
|
259
|
-
const messageHandler = (messageEvent) => {
|
|
293
|
+
}, "postMessageToMaster");
|
|
294
|
+
var subscribeToMasterMessages = /* @__PURE__ */ __name(function subscribeToMasterMessages2(onMessage) {
|
|
295
|
+
const messageHandler = /* @__PURE__ */ __name((messageEvent) => {
|
|
260
296
|
onMessage(messageEvent.data);
|
|
261
|
-
};
|
|
262
|
-
const unsubscribe = () => {
|
|
297
|
+
}, "messageHandler");
|
|
298
|
+
const unsubscribe = /* @__PURE__ */ __name(() => {
|
|
263
299
|
self.removeEventListener("message", messageHandler);
|
|
264
|
-
};
|
|
300
|
+
}, "unsubscribe");
|
|
265
301
|
self.addEventListener("message", messageHandler);
|
|
266
302
|
return unsubscribe;
|
|
267
|
-
};
|
|
303
|
+
}, "subscribeToMasterMessages");
|
|
268
304
|
var addEventListener = self.addEventListener.bind(void 0);
|
|
269
305
|
var postMessage = self.postMessage.bind(void 0);
|
|
270
306
|
var removeEventListener = self.removeEventListener.bind(void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/worker/expose.ts","../../../src/serializers.ts","../../../src/common.ts","../../../src/symbols.ts","../../../src/transferable.ts","../../../src/worker/worker.browser.ts"],"sourcesContent":["/* 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","/* eslint-disable import-x/no-internal-modules */\n\n/// <reference lib=\"webworker\" />\n// tslint:disable no-shadowed-variable\n\nimport type { AbstractedWorkerAPI } from '../types/worker.ts'\nimport { createExpose } from './expose.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\ndeclare const self: WorkerGlobalScope\n\nconst isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {\n const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window\n return self !== undefined && self['postMessage'] && !isWindowContext ? true : false\n}\n\nconst postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList?) {\n self.postMessage(data, transferList)\n}\n\nconst subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {\n const messageHandler = (messageEvent: MessageEvent) => {\n onMessage(messageEvent.data)\n }\n const unsubscribe = () => {\n self.removeEventListener('message', messageHandler as EventListener)\n }\n self.addEventListener('message', messageHandler as EventListener)\n return unsubscribe\n}\n\nconst addEventListener = self.addEventListener.bind(this)\nconst postMessage = self.postMessage.bind(this)\nconst removeEventListener = self.removeEventListener.bind(this)\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"],"mappings":"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","names":["self","expose","isWorkerRuntime","postMessageToMaster","subscribeToMasterMessages"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/worker/expose.ts","../../../src/serializers.ts","../../../src/common.ts","../../../src/symbols.ts","../../../src/transferable.ts","../../../src/types/messages.ts","../../../src/worker/worker.browser.ts"],"sourcesContent":["/* 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","/* eslint-disable import-x/no-internal-modules */\n\n/// <reference lib=\"dom\" />\n// tslint:disable no-shadowed-variable\n\nimport type { AbstractedWorkerAPI } from '../types/worker.ts'\nimport { createExpose } from './expose.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\ndeclare const self: WorkerGlobalScope\n\nconst isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {\n const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window\n return self !== undefined && self['postMessage'] && !isWindowContext ? true : false\n}\n\nconst postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList?) {\n self.postMessage(data, transferList)\n}\n\nconst subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {\n const messageHandler = (messageEvent: MessageEvent) => {\n onMessage(messageEvent.data)\n }\n const unsubscribe = () => {\n self.removeEventListener('message', messageHandler as EventListener)\n }\n self.addEventListener('message', messageHandler as EventListener)\n return unsubscribe\n}\n\nconst addEventListener = self.addEventListener.bind(this)\nconst postMessage = self.postMessage.bind(this)\nconst removeEventListener = self.removeEventListener.bind(this)\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"],"mappings":"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","names":["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","isWorkerRuntime","isWindowContext","self","undefined","Window","postMessageToMaster","data","transferList","postMessage","subscribeToMasterMessages","onMessage","messageHandler","messageEvent","unsubscribe","removeEventListener","addEventListener","bind","expose","createExpose","isWorkerRuntime","postMessageToMaster","subscribeToMasterMessages","addEventListener","postMessage","removeEventListener"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
type UnsubscribeFn = () => void;
|
|
2
|
-
|
|
2
|
+
interface AbstractedWorkerAPI {
|
|
3
3
|
isWorkerRuntime(): boolean;
|
|
4
4
|
postMessageToMaster(message: any, transferList?: Transferable[]): void;
|
|
5
5
|
subscribeToMasterMessages(onMessage: (data: any) => void): UnsubscribeFn;
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
type WorkerFunction = ((...args: any[]) => any) | (() => any);
|
|
8
|
+
type WorkerModule<Keys extends string> = {
|
|
9
9
|
[key in Keys]: WorkerFunction;
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
export type { AbstractedWorkerAPI as A, WorkerFunction as W, WorkerModule as a };
|