Skip to content
File

Blob: src/worker/dispatch/shared/rpc.ts

typescript31 lines
1const DISPOSE_SYMBOL = Symbol.dispose ?? Symbol.for("Symbol.dispose");
2 
3export const disposeRpcStub = (value: unknown): void => {
4 if (typeof value !== "object" || value === null) {
5 return;
6 }
7 
8 const invokeDispose = (dispose: () => unknown): void => {
9 try {
10 const result = dispose();
11 if (result && typeof (result as PromiseLike<unknown>).then === "function") {
12 void Promise.resolve(result).catch(() => {});
13 }
14 } catch {}
15 };
16 
17 try {
18 const symbolDispose =
19 DISPOSE_SYMBOL in value ? (value as { [DISPOSE_SYMBOL]?: unknown })[DISPOSE_SYMBOL] : undefined;
20 if (typeof symbolDispose === "function") {
21 invokeDispose(() => symbolDispose.call(value));
22 return;
23 }
24 
25 const dispose = "dispose" in value ? (value as { dispose?: unknown }).dispose : undefined;
26 if (typeof dispose === "function") {
27 invokeDispose(() => dispose.call(value));
28 }
29 } catch {}
30};