{
  "version": 3,
  "sources": ["../src/merge.ts"],
  "sourcesContent": ["import { queuelessPushable, type Pushable } from './queueless-pushable.js'\n\n/**\n * @packageDocumentation\n *\n * Merge several (async)iterables into one, yield values as they arrive.\n *\n * Nb. sources are iterated over in parallel so the order of emitted items is not guaranteed.\n *\n * @example\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values1 = [0, 1, 2, 3, 4]\n * const values2 = [5, 6, 7, 8, 9]\n *\n * const arr = all(merge(values1, values2))\n *\n * console.info(arr) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const values1 = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n * const values2 = async function * () {\n *   yield * [5, 6, 7, 8, 9]\n * }\n *\n * const arr = await all(merge(values1(), values2()))\n *\n * console.info(arr) // 0, 1, 5, 6, 2, 3, 4, 7, 8, 9  <- nb. order is not guaranteed\n * ```\n */\n\nfunction isAsyncIterable <T> (thing:any):thing is AsyncIterable<T> {\n    return thing[Symbol.asyncIterator] != null\n}\n\nasync function addAllToPushable <T> (sources:Array<AsyncIterable<T> | Iterable<T>>, output:Pushable<T>, signal:AbortSignal):Promise<void> {\n    try {\n        await Promise.all(\n            sources.map(async (source) => {\n                for await (const item of source) {\n                    await output.push(item, {\n                        signal\n                    })\n                    signal.throwIfAborted()\n                }\n            })\n        )\n\n        await output.end(undefined, {\n            signal\n        })\n    } catch (err:any) {\n        await output.end(err, {\n            signal\n        })\n            .catch(() => {})\n    }\n}\n\nasync function * mergeSources <T> (sources:Array<AsyncIterable<T> | Iterable<T>>):AsyncGenerator<T, void, undefined> {\n    const controller = new AbortController()\n    const output = queuelessPushable<T>()\n\n    addAllToPushable(sources, output, controller.signal)\n        .catch(() => {})\n\n    try {\n        yield * output\n    } finally {\n        controller.abort()\n    }\n}\n\nfunction * mergeSyncSources <T> (syncSources:Array<Iterable<T>>):Generator<T, void, undefined> {\n    for (const source of syncSources) {\n        yield * source\n    }\n}\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n */\nfunction merge <T> (...sources:Array<Iterable<T>>):Generator<T, void, undefined>\nfunction merge <T> (...sources:Array<AsyncIterable<T> | Iterable<T>>):AsyncGenerator<T, void, undefined>\nfunction merge <T> (...sources:Array<AsyncIterable<T> | Iterable<T>>):AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {\n    const syncSources:Array<Iterable<T>> = []\n\n    for (const source of sources) {\n        if (!isAsyncIterable(source)) {\n            syncSources.push(source)\n        }\n    }\n\n    if (syncSources.length === sources.length) {\n    // all sources are synchronous\n        return mergeSyncSources(syncSources)\n    }\n\n    return mergeSources(sources)\n}\n\nexport default merge\n"],
  "mappings": "4dAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiD,mCA4CjD,SAASC,EAAqBC,EAAqC,CAC/D,OAAOA,EAAM,OAAO,aAAa,GAAK,IAC1C,CAFSC,EAAAF,EAAA,mBAIT,eAAeG,EAAsBC,EAA+CC,EAAoBC,EAAkC,CACtI,GAAI,CACA,MAAM,QAAQ,IACVF,EAAQ,IAAI,MAAOG,GAAW,CAC1B,gBAAiBC,KAAQD,EACrB,MAAMF,EAAO,KAAKG,EAAM,CACpB,OAAAF,CACJ,CAAC,EACDA,EAAO,eAAe,CAE9B,CAAC,CACL,EAEA,MAAMD,EAAO,IAAI,OAAW,CACxB,OAAAC,CACJ,CAAC,CACL,OAASG,EAAS,CACd,MAAMJ,EAAO,IAAII,EAAK,CAClB,OAAAH,CACJ,CAAC,EACI,MAAM,IAAM,CAAC,CAAC,CACvB,CACJ,CAtBeJ,EAAAC,EAAA,oBAwBf,eAAiBO,EAAkBN,EAAkF,CACjH,MAAMO,EAAa,IAAI,gBACjBN,KAAS,qBAAqB,EAEpCF,EAAiBC,EAASC,EAAQM,EAAW,MAAM,EAC9C,MAAM,IAAM,CAAC,CAAC,EAEnB,GAAI,CACA,MAAQN,CACZ,QAAE,CACEM,EAAW,MAAM,CACrB,CACJ,CAZiBT,EAAAQ,EAAA,gBAcjB,SAAWE,EAAsBC,EAA8D,CAC3F,UAAWN,KAAUM,EACjB,MAAQN,CAEhB,CAJWL,EAAAU,EAAA,oBAcX,SAASE,KAAcV,EAAkH,CACrI,MAAMS,EAAiC,CAAC,EAExC,UAAWN,KAAUH,EACZJ,EAAgBO,CAAM,GACvBM,EAAY,KAAKN,CAAM,EAI/B,OAAIM,EAAY,SAAWT,EAAQ,OAExBQ,EAAiBC,CAAW,EAGhCH,EAAaN,CAAO,CAC/B,CAfSF,EAAAY,EAAA,SAiBT,IAAOC,EAAQD",
  "names": ["merge_exports", "__export", "merge_default", "__toCommonJS", "import_queueless_pushable", "isAsyncIterable", "thing", "__name", "addAllToPushable", "sources", "output", "signal", "source", "item", "err", "mergeSources", "controller", "mergeSyncSources", "syncSources", "merge", "merge_default"]
}
