UNPKG

@langchain/core

Version:
1 lines 2.4 kB
{"version":3,"file":"signal.cjs","names":["promise: Promise<T>","signal?: AbortSignal","listener: () => void"],"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);\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 // eslint-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,eACpBA,SACAC,QACY;AACZ,KAAI,WAAW,OACb,QAAO;CAET,IAAIC;AACJ,QAAO,QAAQ,KAAK,CAClB,QAAQ,MAAS,CAAC,QAAQ;AACxB,MAAI,CAAC,QAAQ,QACX,OAAM;MAEN,QAAO;CAEV,EAAC,EACF,IAAI,QAAe,CAAC,GAAG,WAAW;EAChC,WAAW,MAAM;GACf,OAAO,oBAAoB,OAAO,CAAC;EACpC;EACD,OAAO,iBAAiB,SAAS,SAAS;AAE1C,MAAI,OAAO,SACT,OAAO,oBAAoB,OAAO,CAAC;CAEtC,EACF,EAAC,CAAC,QAAQ,MAAM,OAAO,oBAAoB,SAAS,SAAS,CAAC;AAChE;;;;;;;;AASD,SAAgB,oBAAoBD,QAAsB;AAExD,KAAI,QAAQ,kBAAkB,MAC5B,QAAO,OAAO;AAGhB,KAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,IAAI,MAAM,OAAO;AAG1B,wBAAO,IAAI,MAAM;AAClB"}