@xentobias/worker-rpc 1.0.4 → 1.0.5
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/endpoint.d.ts +36 -0
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/index.js +63 -0
- package/package.json +2 -1
package/dist/endpoint.d.ts
CHANGED
|
@@ -13,6 +13,18 @@ export interface ExposeOptions {
|
|
|
13
13
|
/** Maximum depth for nested objects (default: 10) */
|
|
14
14
|
maxDepth?: number;
|
|
15
15
|
}
|
|
16
|
+
/** Options for graceful shutdown */
|
|
17
|
+
export interface ShutdownOptions {
|
|
18
|
+
/** Timeout in milliseconds to wait for pending calls (default: 30000) */
|
|
19
|
+
timeout?: number;
|
|
20
|
+
}
|
|
21
|
+
/** Result of a graceful shutdown operation */
|
|
22
|
+
export interface ShutdownResult {
|
|
23
|
+
/** Whether the shutdown completed successfully (all calls finished) */
|
|
24
|
+
success: boolean;
|
|
25
|
+
/** Whether the shutdown timed out */
|
|
26
|
+
timeout: boolean;
|
|
27
|
+
}
|
|
16
28
|
/**
|
|
17
29
|
* RPC Endpoint - handles bidirectional communication with a worker
|
|
18
30
|
*/
|
|
@@ -96,6 +108,30 @@ export declare class Endpoint {
|
|
|
96
108
|
* Send a message to the target
|
|
97
109
|
*/
|
|
98
110
|
private send;
|
|
111
|
+
/**
|
|
112
|
+
* Get the number of pending calls
|
|
113
|
+
*/
|
|
114
|
+
getPendingCallCount(): number;
|
|
115
|
+
/**
|
|
116
|
+
* Check if there are any pending calls
|
|
117
|
+
*/
|
|
118
|
+
hasPendingCalls(): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Gracefully shut down the endpoint, waiting for pending calls to complete
|
|
121
|
+
*
|
|
122
|
+
* @param options - Shutdown options
|
|
123
|
+
* @returns Promise that resolves with the shutdown result
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* // Wait up to 5 seconds for pending calls to complete
|
|
128
|
+
* const result = await endpoint.shutdown({ timeout: 5000 });
|
|
129
|
+
* if (result.timedOut) {
|
|
130
|
+
* console.log(`${result.terminatedCalls} calls were forcefully terminated`);
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
shutdown(options?: ShutdownOptions): Promise<ShutdownResult>;
|
|
99
135
|
/**
|
|
100
136
|
* Release this endpoint and clean up resources
|
|
101
137
|
*/
|
package/dist/endpoint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,EAGf,KAAK,aAAa,EAEnB,MAAM,SAAS,CAAC;AAYjB,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAqB;IAE1C,sCAAsC;IACtC,OAAO,CAAC,YAAY,CAAkC;IAEtD,2DAA2D;IAC3D,OAAO,CAAC,SAAS,CAA+C;IAEhE,iEAAiE;IACjE,OAAO,CAAC,eAAe,CAAmC;IAE1D,6CAA6C;IAC7C,OAAO,CAAC,mBAAmB,CAA4C;IAEvE,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB;IAYhE;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,KAAK;IAMb;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI;IAO7D;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;YACW,UAAU;IAsDxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;YACW,cAAc;IA8D5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;YACW,cAAc;IAgD5B;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2DtE;;OAEG;IACH,OAAO,CAAC,IAAI;IAQZ;;OAEG;IACI,OAAO,IAAI,IAAI;IAkCtB;;OAEG;IACI,SAAS,IAAI,aAAa;CAGlC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ,CAEV"}
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,EAGf,KAAK,aAAa,EAEnB,MAAM,SAAS,CAAC;AAYjB,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAqB;IAE1C,sCAAsC;IACtC,OAAO,CAAC,YAAY,CAAkC;IAEtD,2DAA2D;IAC3D,OAAO,CAAC,SAAS,CAA+C;IAEhE,iEAAiE;IACjE,OAAO,CAAC,eAAe,CAAmC;IAE1D,6CAA6C;IAC7C,OAAO,CAAC,mBAAmB,CAA4C;IAEvE,8CAA8C;IAC9C,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB;IAYhE;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,KAAK;IAMb;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI;IAO7D;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;YACW,UAAU;IAsDxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;YACW,cAAc;IA8D5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;YACW,cAAc;IAgD5B;;OAEG;IACU,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2DtE;;OAEG;IACH,OAAO,CAAC,IAAI;IAQZ;;OAEG;IACI,mBAAmB,IAAI,MAAM;IAIpC;;OAEG;IACI,eAAe,IAAI,OAAO;IAIjC;;;;;;;;;;;;;;OAcG;IACU,QAAQ,CACnB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC;IAwE1B;;OAEG;IACI,OAAO,IAAI,IAAI;IAkCtB;;OAEG;IACI,SAAS,IAAI,aAAa;CAGlC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,eAAe,GACxB,QAAQ,CAEV"}
|
package/dist/index.js
CHANGED
|
@@ -345,6 +345,69 @@ class Endpoint {
|
|
|
345
345
|
this.debug("sending", MessageType[message.t], message);
|
|
346
346
|
this.target.postMessage(message, transferables);
|
|
347
347
|
}
|
|
348
|
+
getPendingCallCount() {
|
|
349
|
+
return this.pendingCalls.size;
|
|
350
|
+
}
|
|
351
|
+
hasPendingCalls() {
|
|
352
|
+
return this.pendingCalls.size > 0;
|
|
353
|
+
}
|
|
354
|
+
async shutdown(options = {}) {
|
|
355
|
+
const { timeout = DEFAULT_TIMEOUT } = options;
|
|
356
|
+
if (this.released) {
|
|
357
|
+
return {
|
|
358
|
+
success: true,
|
|
359
|
+
timeout: false
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
if (!this.hasPendingCalls()) {
|
|
363
|
+
this.release();
|
|
364
|
+
return {
|
|
365
|
+
success: true,
|
|
366
|
+
timeout: false
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
return new Promise((resolve) => {
|
|
370
|
+
let resolved = false;
|
|
371
|
+
const complete = (result) => {
|
|
372
|
+
if (resolved)
|
|
373
|
+
return;
|
|
374
|
+
resolved = true;
|
|
375
|
+
clearTimeout(timeoutId);
|
|
376
|
+
if (!this.released) {
|
|
377
|
+
this.release();
|
|
378
|
+
}
|
|
379
|
+
resolve(result);
|
|
380
|
+
};
|
|
381
|
+
const timeoutId = setTimeout(() => {
|
|
382
|
+
complete({
|
|
383
|
+
success: false,
|
|
384
|
+
timeout: true
|
|
385
|
+
});
|
|
386
|
+
}, timeout);
|
|
387
|
+
for (const [, pending] of this.pendingCalls) {
|
|
388
|
+
const originalResolve = pending.resolve;
|
|
389
|
+
const originalReject = pending.reject;
|
|
390
|
+
pending.resolve = (value) => {
|
|
391
|
+
originalResolve(value);
|
|
392
|
+
if (!this.hasPendingCalls()) {
|
|
393
|
+
complete({
|
|
394
|
+
success: true,
|
|
395
|
+
timeout: false
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
pending.reject = (error) => {
|
|
400
|
+
originalReject(error);
|
|
401
|
+
if (!this.hasPendingCalls()) {
|
|
402
|
+
complete({
|
|
403
|
+
success: true,
|
|
404
|
+
timeout: false
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
}
|
|
348
411
|
release() {
|
|
349
412
|
if (this.released) {
|
|
350
413
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xentobias/worker-rpc",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "High-performance, type-safe RPC for Workers",
|
|
5
5
|
"module": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"build": "bun build ./src/index.ts --outdir ./dist --target bun && tsc --declaration",
|
|
20
20
|
"typecheck": "tsc --noEmit",
|
|
21
21
|
"test": "bun test",
|
|
22
|
+
"prepublishOnly": "bun run build",
|
|
22
23
|
"example": "bun run examples/basic/main.ts",
|
|
23
24
|
"example:nested": "bun run examples/nested/main.ts",
|
|
24
25
|
"example:callbacks": "bun run examples/callbacks/main.ts",
|