@langchain/core
Version:
Core LangChain.js abstractions and schemas
1 lines • 2.37 kB
Source Map (JSON)
{"version":3,"file":"signal.cjs","names":[],"sources":["../../src/utils/signal.ts"],"sourcesContent":["/**\n * Race a promise with an abort signal. If the signal is aborted, the promise will\n * be rejected with the error from the signal. If the promise is rejected, the signal will be aborted.\n *\n * @param promise - The promise to race.\n * @param signal - The abort signal.\n * @returns The result of the promise.\n */\nexport async function raceWithSignal<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (signal === undefined) {\n return promise;\n }\n let listener: () => void;\n return Promise.race([\n promise.catch<T>((err) => {\n if (!signal?.aborted) {\n throw err;\n } else {\n return undefined as T;\n }\n }),\n new Promise<never>((_, reject) => {\n listener = () => {\n reject(getAbortSignalError(signal));\n };\n signal.addEventListener(\"abort\", listener, { once: true });\n // Must be here inside the promise to avoid a race condition\n if (signal.aborted) {\n reject(getAbortSignalError(signal));\n }\n }),\n ]).finally(() => signal.removeEventListener(\"abort\", listener));\n}\n\n/**\n * Get the error from an abort signal. Since you can set the reason to anything,\n * we have to do some type gymnastics to get a proper error message.\n *\n * @param signal - The abort signal.\n * @returns The error from the abort signal.\n */\nexport function getAbortSignalError(signal?: AbortSignal) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (signal?.reason instanceof Error) {\n return signal.reason;\n }\n\n if (typeof signal?.reason === \"string\") {\n return new Error(signal.reason);\n }\n\n return new Error(\"Aborted\");\n}\n"],"mappings":";;;;;;;;;AAQA,eAAsB,eACpB,SACA,QACY;CACZ,IAAI,WAAW,KAAA,GACb,OAAO;CAET,IAAI;CACJ,OAAO,QAAQ,KAAK,CAClB,QAAQ,OAAU,QAAQ;EACxB,IAAI,CAAC,QAAQ,SACX,MAAM;OAEN;CAEJ,CAAC,GACD,IAAI,SAAgB,GAAG,WAAW;EAChC,iBAAiB;GACf,OAAO,oBAAoB,MAAM,CAAC;EACpC;EACA,OAAO,iBAAiB,SAAS,UAAU,EAAE,MAAM,KAAK,CAAC;EAEzD,IAAI,OAAO,SACT,OAAO,oBAAoB,MAAM,CAAC;CAEtC,CAAC,CACH,CAAC,CAAC,CAAC,cAAc,OAAO,oBAAoB,SAAS,QAAQ,CAAC;AAChE;;;;;;;;AASA,SAAgB,oBAAoB,QAAsB;CAExD,IAAI,QAAQ,kBAAkB,OAC5B,OAAO,OAAO;CAGhB,IAAI,OAAO,QAAQ,WAAW,UAC5B,OAAO,IAAI,MAAM,OAAO,MAAM;CAGhC,uBAAO,IAAI,MAAM,SAAS;AAC5B"}