swarpc 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +18 -9
- package/dist/nodes.d.ts +3 -0
- package/dist/nodes.d.ts.map +1 -1
- package/dist/nodes.js +7 -0
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +20 -9
- package/src/nodes.ts +12 -0
- package/src/types.ts +4 -1
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,kBAAkB,EAClB,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,KAAK,EACL,OAAO,EAEP,iBAAiB,EACjB,WAAW,EACX,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAGpB;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,UAAU,SAAS,aAAa,IAAI;IAC3D,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;CAC3B,GAAG;KACD,CAAC,IAAI,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,KAAK,OAAO,CAAC,UAAU,SAAS,aAAa,IAAI;IAC/C,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACxC,gCAAgC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC,CAAC;AAQF,MAAM,MAAM,cAAc,GAAG;IAC3B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC,CAAC;AAKF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,UAAU,SAAS,aAAa,EACrD,UAAU,EAAE,UAAU,EACtB,EACE,MAAM,EACN,KAAK,EAAE,SAAS,EAChB,QAAkB,EAClB,eAAuB,EACvB,KAAU,EACV,YAAiB,GAClB,GAAE;IACD,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,GACL,YAAY,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,kBAAkB,EAClB,KAAK,MAAM,EACX,KAAK,QAAQ,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,KAAK,EACL,OAAO,EAEP,iBAAiB,EACjB,WAAW,EACX,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAGpB;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,UAAU,SAAS,aAAa,IAAI;IAC3D,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;CAC3B,GAAG;KACD,CAAC,IAAI,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,KAAK,OAAO,CAAC,UAAU,SAAS,aAAa,IAAI;IAC/C,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACxC,gCAAgC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC,CAAC;AAQF,MAAM,MAAM,cAAc,GAAG;IAC3B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IACpC,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC,CAAC;AAKF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,MAAM,CAAC,UAAU,SAAS,aAAa,EACrD,UAAU,EAAE,UAAU,EACtB,EACE,MAAM,EACN,KAAK,EAAE,SAAS,EAChB,QAAkB,EAClB,eAAuB,EACvB,KAAU,EACV,YAAiB,GAClB,GAAE;IACD,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B,GACL,YAAY,CAAC,UAAU,CAAC,CA2K1B;AAiCD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,SAAS,aAAa,EAC9D,CAAC,EAAE,kBAAkB,EACrB,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,EACzC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAC5B,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CAiBN;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,SAAS,aAAa,EACxE,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,iBAsFzB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/client.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @mergeModuleWith <project>
|
|
4
4
|
*/
|
|
5
5
|
import { createLogger, } from "./log.js";
|
|
6
|
-
import { makeNodeId, whoToSendTo } from "./nodes.js";
|
|
6
|
+
import { makeNodeId, nodeIdOrSW, whoToSendTo } from "./nodes.js";
|
|
7
7
|
import { zProcedures, } from "./types.js";
|
|
8
8
|
import { findTransferables } from "./utils.js";
|
|
9
9
|
/**
|
|
@@ -80,7 +80,7 @@ export function Client(procedures, { worker, nodes: nodeCount, loglevel = "debug
|
|
|
80
80
|
// Choose which node to use
|
|
81
81
|
nodeId ??= whoToSendTo(nodes, pendingRequests);
|
|
82
82
|
const node = nodes && nodeId ? nodes[nodeId] : undefined;
|
|
83
|
-
const l = createLogger("client", loglevel, nodeId
|
|
83
|
+
const l = createLogger("client", loglevel, nodeIdOrSW(nodeId), requestId);
|
|
84
84
|
return new Promise((resolve, reject) => {
|
|
85
85
|
// Store promise handlers (as well as progress updates handler)
|
|
86
86
|
// so the client listener can resolve/reject the promise (and react to progress updates)
|
|
@@ -104,19 +104,28 @@ export function Client(procedures, { worker, nodes: nodeCount, loglevel = "debug
|
|
|
104
104
|
};
|
|
105
105
|
// @ts-expect-error
|
|
106
106
|
instance[functionName] = _runProcedure;
|
|
107
|
-
instance[functionName].broadcast = async (input,
|
|
107
|
+
instance[functionName].broadcast = async (input, onProgresses, nodesCount) => {
|
|
108
108
|
let nodesToUse = [undefined];
|
|
109
109
|
if (nodes)
|
|
110
110
|
nodesToUse = Object.keys(nodes);
|
|
111
111
|
if (nodesCount)
|
|
112
112
|
nodesToUse = nodesToUse.slice(0, nodesCount);
|
|
113
|
-
const
|
|
114
|
-
|
|
113
|
+
const progresses = new Map();
|
|
114
|
+
function onProgress(nodeId) {
|
|
115
|
+
if (!onProgresses)
|
|
116
|
+
return (_) => { };
|
|
117
|
+
return (progress) => {
|
|
118
|
+
progresses.set(nodeIdOrSW(nodeId), progress);
|
|
119
|
+
onProgresses(progresses);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
const results = await Promise.allSettled(nodesToUse.map(async (id) => _runProcedure(input, onProgress(id), undefined, id)));
|
|
123
|
+
return results.map((r, i) => ({ ...r, node: nodeIdOrSW(nodesToUse[i]) }));
|
|
115
124
|
};
|
|
116
125
|
instance[functionName].cancelable = (input, onProgress) => {
|
|
117
126
|
const requestId = makeRequestId();
|
|
118
127
|
const nodeId = whoToSendTo(nodes, pendingRequests);
|
|
119
|
-
const l = createLogger("client", loglevel, nodeId
|
|
128
|
+
const l = createLogger("client", loglevel, nodeIdOrSW(nodeId), requestId);
|
|
120
129
|
return {
|
|
121
130
|
request: _runProcedure(input, onProgress, requestId, nodeId),
|
|
122
131
|
cancel(reason) {
|
|
@@ -186,7 +195,7 @@ export function postMessageSync(l, worker, message, options) {
|
|
|
186
195
|
* @returns
|
|
187
196
|
*/
|
|
188
197
|
export async function startClientListener(ctx) {
|
|
189
|
-
if (_clientListenerStarted.has(ctx.nodeId
|
|
198
|
+
if (_clientListenerStarted.has(nodeIdOrSW(ctx.nodeId)))
|
|
190
199
|
return;
|
|
191
200
|
const { logger: l, node: worker } = ctx;
|
|
192
201
|
// Get service worker registration if no worker is provided
|
|
@@ -249,14 +258,14 @@ export async function startClientListener(ctx) {
|
|
|
249
258
|
else {
|
|
250
259
|
w.addEventListener("message", listener);
|
|
251
260
|
}
|
|
252
|
-
_clientListenerStarted.add(ctx.nodeId
|
|
261
|
+
_clientListenerStarted.add(nodeIdOrSW(ctx.nodeId));
|
|
253
262
|
// Recursive terminal case is ensured by calling this *after* _clientListenerStarted is set to true: startClientListener() will therefore not be called in postMessage() again.
|
|
254
263
|
await postMessage(ctx, {
|
|
255
264
|
by: "sw&rpc",
|
|
256
265
|
functionName: "#initialize",
|
|
257
266
|
isInitializeRequest: true,
|
|
258
267
|
localStorageData: ctx.localStorage,
|
|
259
|
-
nodeId: ctx.nodeId
|
|
268
|
+
nodeId: nodeIdOrSW(ctx.nodeId),
|
|
260
269
|
});
|
|
261
270
|
}
|
|
262
271
|
/**
|
package/dist/nodes.d.ts
CHANGED
|
@@ -9,4 +9,7 @@ export declare function nodeIdFromScope(scope: WorkerGlobalScope, _scopeType?: "
|
|
|
9
9
|
* @source
|
|
10
10
|
*/
|
|
11
11
|
export declare function makeNodeId(): string;
|
|
12
|
+
export declare const serviceWorkerNodeId: "(SW)";
|
|
13
|
+
export declare function isServiceWorkerNodeId(id: string): id is "(SW)";
|
|
14
|
+
export declare function nodeIdOrSW(id: string | undefined): string | typeof serviceWorkerNodeId;
|
|
12
15
|
//# sourceMappingURL=nodes.d.ts.map
|
package/dist/nodes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,SAAS,GAAG,MAAM,CA0BpB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,iBAAiB,EACxB,UAAU,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAC9C,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../src/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GACpC,SAAS,GAAG,MAAM,CA0BpB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,iBAAiB,EACxB,UAAU,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAC9C,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AAEnD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,gBAE/C;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,MAAM,GAAG,OAAO,mBAAmB,CAErC"}
|
package/dist/nodes.js
CHANGED
|
@@ -34,3 +34,10 @@ export function nodeIdFromScope(scope, _scopeType) {
|
|
|
34
34
|
export function makeNodeId() {
|
|
35
35
|
return "N" + Math.random().toString(16).substring(2, 5).toUpperCase();
|
|
36
36
|
}
|
|
37
|
+
export const serviceWorkerNodeId = "(SW)"; // Fixed ID for the service worker, as there's only one
|
|
38
|
+
export function isServiceWorkerNodeId(id) {
|
|
39
|
+
return id === serviceWorkerNodeId;
|
|
40
|
+
}
|
|
41
|
+
export function nodeIdOrSW(id) {
|
|
42
|
+
return id ?? serviceWorkerNodeId;
|
|
43
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -356,7 +356,9 @@ export type ClientMethod<P extends Procedure<Type, Type, Type>> = ((input: P["in
|
|
|
356
356
|
* Returns an array of results, one for each node the request was sent to.
|
|
357
357
|
* Each result is a {@link PromiseSettledResult}, with also an additional property, the node ID of the request
|
|
358
358
|
*/
|
|
359
|
-
broadcast: (input: P["input"]["inferIn"], onProgress?: (
|
|
359
|
+
broadcast: (input: P["input"]["inferIn"], onProgress?: (
|
|
360
|
+
/** Map of node IDs to their progress updates */
|
|
361
|
+
progresses: Map<string, P["progress"]["inferOut"]>) => void,
|
|
360
362
|
/** Number of nodes to send the request to. Leave undefined to send to all nodes */
|
|
361
363
|
nodes?: number) => Promise<Array<PromiseSettledResult<P["success"]["inferOut"]> & {
|
|
362
364
|
node: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
type Logger,
|
|
10
10
|
type LogLevel,
|
|
11
11
|
} from "./log.js";
|
|
12
|
-
import { makeNodeId, whoToSendTo } from "./nodes.js";
|
|
12
|
+
import { makeNodeId, nodeIdOrSW, whoToSendTo } from "./nodes.js";
|
|
13
13
|
import {
|
|
14
14
|
ClientMethod,
|
|
15
15
|
Hooks,
|
|
@@ -186,7 +186,7 @@ export function Client<Procedures extends ProceduresMap>(
|
|
|
186
186
|
nodeId ??= whoToSendTo(nodes, pendingRequests);
|
|
187
187
|
const node = nodes && nodeId ? nodes[nodeId] : undefined;
|
|
188
188
|
|
|
189
|
-
const l = createLogger("client", loglevel, nodeId
|
|
189
|
+
const l = createLogger("client", loglevel, nodeIdOrSW(nodeId), requestId);
|
|
190
190
|
|
|
191
191
|
return new Promise((resolve, reject) => {
|
|
192
192
|
// Store promise handlers (as well as progress updates handler)
|
|
@@ -217,26 +217,37 @@ export function Client<Procedures extends ProceduresMap>(
|
|
|
217
217
|
instance[functionName] = _runProcedure;
|
|
218
218
|
instance[functionName]!.broadcast = async (
|
|
219
219
|
input,
|
|
220
|
-
|
|
220
|
+
onProgresses,
|
|
221
221
|
nodesCount,
|
|
222
222
|
) => {
|
|
223
223
|
let nodesToUse: Array<string | undefined> = [undefined];
|
|
224
224
|
if (nodes) nodesToUse = Object.keys(nodes);
|
|
225
225
|
if (nodesCount) nodesToUse = nodesToUse.slice(0, nodesCount);
|
|
226
226
|
|
|
227
|
+
const progresses = new Map<string, unknown>();
|
|
228
|
+
|
|
229
|
+
function onProgress(nodeId: string | undefined) {
|
|
230
|
+
if (!onProgresses) return (_: unknown) => {};
|
|
231
|
+
|
|
232
|
+
return (progress: unknown) => {
|
|
233
|
+
progresses.set(nodeIdOrSW(nodeId), progress);
|
|
234
|
+
onProgresses(progresses);
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
227
238
|
const results = await Promise.allSettled(
|
|
228
239
|
nodesToUse.map(async (id) =>
|
|
229
|
-
_runProcedure(input, onProgress, undefined, id),
|
|
240
|
+
_runProcedure(input, onProgress(id), undefined, id),
|
|
230
241
|
),
|
|
231
242
|
);
|
|
232
243
|
|
|
233
|
-
return results.map((r, i) => ({ ...r, node: nodesToUse[i]
|
|
244
|
+
return results.map((r, i) => ({ ...r, node: nodeIdOrSW(nodesToUse[i]) }));
|
|
234
245
|
};
|
|
235
246
|
instance[functionName]!.cancelable = (input, onProgress) => {
|
|
236
247
|
const requestId = makeRequestId();
|
|
237
248
|
const nodeId = whoToSendTo(nodes, pendingRequests);
|
|
238
249
|
|
|
239
|
-
const l = createLogger("client", loglevel, nodeId
|
|
250
|
+
const l = createLogger("client", loglevel, nodeIdOrSW(nodeId), requestId);
|
|
240
251
|
|
|
241
252
|
return {
|
|
242
253
|
request: _runProcedure(input, onProgress, requestId, nodeId),
|
|
@@ -336,7 +347,7 @@ export function postMessageSync<Procedures extends ProceduresMap>(
|
|
|
336
347
|
export async function startClientListener<Procedures extends ProceduresMap>(
|
|
337
348
|
ctx: Context<Procedures>,
|
|
338
349
|
) {
|
|
339
|
-
if (_clientListenerStarted.has(ctx.nodeId
|
|
350
|
+
if (_clientListenerStarted.has(nodeIdOrSW(ctx.nodeId))) return;
|
|
340
351
|
|
|
341
352
|
const { logger: l, node: worker } = ctx;
|
|
342
353
|
|
|
@@ -410,7 +421,7 @@ export async function startClientListener<Procedures extends ProceduresMap>(
|
|
|
410
421
|
w.addEventListener("message", listener);
|
|
411
422
|
}
|
|
412
423
|
|
|
413
|
-
_clientListenerStarted.add(ctx.nodeId
|
|
424
|
+
_clientListenerStarted.add(nodeIdOrSW(ctx.nodeId));
|
|
414
425
|
|
|
415
426
|
// Recursive terminal case is ensured by calling this *after* _clientListenerStarted is set to true: startClientListener() will therefore not be called in postMessage() again.
|
|
416
427
|
await postMessage(ctx, {
|
|
@@ -418,7 +429,7 @@ export async function startClientListener<Procedures extends ProceduresMap>(
|
|
|
418
429
|
functionName: "#initialize",
|
|
419
430
|
isInitializeRequest: true,
|
|
420
431
|
localStorageData: ctx.localStorage,
|
|
421
|
-
nodeId: ctx.nodeId
|
|
432
|
+
nodeId: nodeIdOrSW(ctx.nodeId),
|
|
422
433
|
});
|
|
423
434
|
}
|
|
424
435
|
|
package/src/nodes.ts
CHANGED
|
@@ -53,3 +53,15 @@ export function nodeIdFromScope(
|
|
|
53
53
|
export function makeNodeId(): string {
|
|
54
54
|
return "N" + Math.random().toString(16).substring(2, 5).toUpperCase();
|
|
55
55
|
}
|
|
56
|
+
|
|
57
|
+
export const serviceWorkerNodeId = "(SW)" as const; // Fixed ID for the service worker, as there's only one
|
|
58
|
+
|
|
59
|
+
export function isServiceWorkerNodeId(id: string) {
|
|
60
|
+
return id === serviceWorkerNodeId;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function nodeIdOrSW(
|
|
64
|
+
id: string | undefined,
|
|
65
|
+
): string | typeof serviceWorkerNodeId {
|
|
66
|
+
return id ?? serviceWorkerNodeId;
|
|
67
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -235,7 +235,10 @@ export type ClientMethod<P extends Procedure<Type, Type, Type>> = ((
|
|
|
235
235
|
*/
|
|
236
236
|
broadcast: (
|
|
237
237
|
input: P["input"]["inferIn"],
|
|
238
|
-
onProgress?: (
|
|
238
|
+
onProgress?: (
|
|
239
|
+
/** Map of node IDs to their progress updates */
|
|
240
|
+
progresses: Map<string, P["progress"]["inferOut"]>,
|
|
241
|
+
) => void,
|
|
239
242
|
/** Number of nodes to send the request to. Leave undefined to send to all nodes */
|
|
240
243
|
nodes?: number,
|
|
241
244
|
) => Promise<
|