forked from nicobailon/pi-mcp-adapter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathabort.ts
More file actions
34 lines (33 loc) · 1.05 KB
/
Copy pathabort.ts
File metadata and controls
34 lines (33 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
export function throwIfAborted(signal?: AbortSignal): void {
if (!signal?.aborted) return;
throw signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason ?? "MCP request aborted"));
}
export async function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {
if (!signal) return promise;
throwIfAborted(signal);
return await new Promise<T>((resolve, reject) => {
let settled = false;
const cleanup = () => signal.removeEventListener("abort", onAbort);
const onAbort = () => {
if (settled) return;
settled = true;
cleanup();
reject(signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason ?? "MCP request aborted")));
};
signal.addEventListener("abort", onAbort, { once: true });
promise.then(
value => {
if (settled) return;
settled = true;
cleanup();
resolve(value);
},
error => {
if (settled) return;
settled = true;
cleanup();
reject(error);
},
);
});
}