{"version":3,"file":"abort-signals.d.ts","sourceRoot":"","sources":["../../src/utils/abort-signals.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,mBAAmB,CAmCtG","sourcesContent":["export interface CombinedAbortSignal {\n\tsignal?: AbortSignal;\n\tcleanup: () => void;\n}\n\nexport function combineAbortSignals(signals: readonly (AbortSignal | undefined)[]): CombinedAbortSignal {\n\tconst activeSignals = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n\tif (activeSignals.length === 0) {\n\t\treturn { cleanup: () => {} };\n\t}\n\tif (activeSignals.length === 1) {\n\t\treturn { signal: activeSignals[0], cleanup: () => {} };\n\t}\n\n\tconst controller = new AbortController();\n\tconst listeners: Array<{ signal: AbortSignal; listener: () => void }> = [];\n\tconst abort = (signal: AbortSignal) => {\n\t\tif (!controller.signal.aborted) {\n\t\t\tcontroller.abort(signal.reason);\n\t\t}\n\t};\n\n\tfor (const signal of activeSignals) {\n\t\tif (signal.aborted) {\n\t\t\tabort(signal);\n\t\t\tbreak;\n\t\t}\n\t\tconst listener = () => abort(signal);\n\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t\tlisteners.push({ signal, listener });\n\t}\n\n\treturn {\n\t\tsignal: controller.signal,\n\t\tcleanup: () => {\n\t\t\tfor (const { signal, listener } of listeners) {\n\t\t\t\tsignal.removeEventListener(\"abort\", listener);\n\t\t\t}\n\t\t},\n\t};\n}\n"]}