{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * A helper class to create an {@link !AbortSignal AbortSignal} which will abort when any of the signals passed to its constructor do.\n */\nexport class AggregateSignal {\n    /**\n     * The aggregate {@link !AbortSignal AbortSignal}.\n     *\n     * @remarks\n     * If only a single valid {@link !AbortSignal AbortSignal} was passed, it will be that signal.\n     * If any of the signals passed was already aborted, it will be the first match in the array.\n     * If no valid {@link !AbortSignal AbortSignals} were passed,\n     * it will be {@link !undefined `undefined`}.\n     */\n    readonly signal?: AbortSignal;\n\n    /** The first {@link !AbortSignal AbortSignal} of those passed in to have aborted. */\n    abortedSignal?: AbortSignal;\n\n    /**\n     * Initializes a new {@link AggregateSignal}.\n     * @param {(AbortSignal | undefined)[]} abortSignals The {@link !AbortSignal AbortSignals} to aggregate.\n     */\n    constructor(...abortSignals: (AbortSignal | undefined)[]) {\n        const signals = abortSignals.filter(isAbortSignal);\n\n        if (signals.length === 1) {\n            this.abortedSignal = this.signal = signals[0];\n        } else if (signals.some((s) => s.aborted)) {\n            this.abortedSignal = this.signal = signals.filter(\n                (s) => s.aborted\n            )[0];\n        } else if (signals.length > 1) {\n            const ac = new AbortController();\n            this.signal = ac.signal;\n\n            for (const signal of signals) {\n                const listener = () => {\n                    for (const signal of signals) {\n                        signal.removeEventListener('abort', listener);\n                    }\n\n                    this.abortedSignal = signal;\n                    ac.abort();\n                };\n\n                signal.addEventListener('abort', listener);\n            }\n        }\n    }\n}\n\n/**\n * A helper class to create an {@link !AbortSignal AbortSignal} based on {@link !setTimeout setTimeout}.\n */\nexport class TimeoutSignal {\n    /** The underlying {@link !AbortSignal AbortSignal}. */\n    public readonly signal?: AbortSignal;\n    /** If defined, the {@link https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#return_value timeoutID} of a timer which will signal abortion. */\n    public readonly timeout?: ReturnType<typeof setTimeout>;\n\n    /**\n     * Initializes a new {@link TimeoutSignal}.\n     * @param {number} [timeout] The number of milliseconds after which the {@link TimeoutSignal.signal signal} should be aborted.\n     * {@link !undefined `undefined`}, {@link !Infinity infinite} or {@link !NaN `NaN`} values will result in {@link TimeoutSignal.signal signal}\n     * being {@link !undefined `undefined`}.\n     * Finite values will be clamped between `0` and {@link !Number.MAX_SAFE_INTEGER `Number.MAX_SAFE_INTEGER`} inclusive.\n     */\n    constructor(timeout?: number) {\n        if (timeout && isFinite(timeout) && !isNaN(timeout)) {\n            timeout = Math.min(Math.max(timeout, 0), Number.MAX_SAFE_INTEGER); // clamp the timeout to a sensible range\n\n            const ac = new AbortController();\n            this.signal = ac.signal; // wrap the AbortController's signal\n            this.timeout = setTimeout(() => ac.abort(), timeout); // abort after the given number of milliseconds\n        }\n    }\n}\n\n/**\n * Type guard for determining whether a given object is an {@link !AbortSignal AbortSignal} instance.\n * @param {unknown} object The object.\n * @returns {object is AbortSignal} `true` if the object is determined to be an {@link !AbortSignal AbortSignal},\n * otherwise `false`.\n */\nexport function isAbortSignal(object: unknown): object is AbortSignal {\n    return object instanceof AbortSignal;\n}\n"],"names":[],"mappings":"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"}