UNPKG

9.46 kBSource Map (JSON)View Raw
1{"version":3,"sources":["asynciterable/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,gEAAgE;AAChE,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAI5C,SAAS,oBAAoB,CAAI,OAAmB,EAAE,KAAa;IACjE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAA4B,CAAC;AAChF,CAAC;AAED,MAAM,OAAO,kBAAsB,SAAQ,cAAiB;IAG1D,YAAY,MAA0B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAoB;QAChD,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAmB,MAAM,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,KAAK,CAA0C,MAAM,CAAC,CAAC;QACzE,IAAI,MAAM,GAAG,MAAM,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAChF,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;SACrD;QAED,OAAO,MAAM,GAAG,CAAC,EAAE;YACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,EACJ,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EACrC,KAAK,GACN,GAAG,MAAM,IAAI,CAAC;YACf,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,KAAK,CAAC,GAA4C,aAAa,CAAC;gBACtE,MAAM,EAAE,CAAC;aACV;iBAAM;gBACL,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnC,KAAK,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC7D,MAAM,MAAM,CAAC;aACd;SACF;IACH,CAAC;CACF;AAqHD,MAAM,UAAU,KAAK,CAAI,MAAwB,EAAE,GAAG,IAAwB;IAC5E,OAAO,IAAI,kBAAkB,CAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC","file":"merge.js","sourcesContent":["import { AsyncIterableX } from './asynciterablex';\nimport { wrapWithAbort } from './operators/withabort';\nimport { throwIfAborted } from '../aborterror';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst NEVER_PROMISE = new Promise(() => {});\n\ntype MergeResult<T> = { value: T; index: number };\n\nfunction wrapPromiseWithIndex<T>(promise: Promise<T>, index: number) {\n return promise.then((value) => ({ value, index })) as Promise<MergeResult<T>>;\n}\n\nexport class MergeAsyncIterable<T> extends AsyncIterableX<T> {\n private _source: AsyncIterable<T>[];\n\n constructor(source: AsyncIterable<T>[]) {\n super();\n this._source = source;\n }\n\n async *[Symbol.asyncIterator](signal?: AbortSignal): AsyncIterator<T> {\n throwIfAborted(signal);\n const length = this._source.length;\n const iterators = new Array<AsyncIterator<T>>(length);\n const nexts = new Array<Promise<MergeResult<IteratorResult<T>>>>(length);\n let active = length;\n for (let i = 0; i < length; i++) {\n const iterator = wrapWithAbort(this._source[i], signal)[Symbol.asyncIterator]();\n iterators[i] = iterator;\n nexts[i] = wrapPromiseWithIndex(iterator.next(), i);\n }\n\n while (active > 0) {\n const next = Promise.race(nexts);\n const {\n value: { done: done$, value: value$ },\n index,\n } = await next;\n if (done$) {\n nexts[index] = <Promise<MergeResult<IteratorResult<T>>>>NEVER_PROMISE;\n active--;\n } else {\n const iterator$ = iterators[index];\n nexts[index] = wrapPromiseWithIndex(iterator$.next(), index);\n yield value$;\n }\n }\n }\n}\n\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the first async-iterable sequence.\n * @template T2 The type of the second async-iterable sequence.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {AsyncIterable<T2>} v2 The second async-iterable source to merge.\n * @returns {(AsyncIterableX<T | T2>)} The merged elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n */\nexport function merge<T, T2>(\n source: AsyncIterable<T>,\n v2: AsyncIterable<T2>\n): AsyncIterableX<T | T2>;\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the first async-iterable sequence.\n * @template T2 The type of the second async-iterable sequence.\n * @template T3 The type of the third async-iterable sequence.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {AsyncIterable<T2>} v2 The second async-iterable source to merge.\n * @param {AsyncIterable<T3>} v3 The third async-iterable source to merge.\n * @returns {(AsyncIterableX<T | T2 | T3>)} The merged elements from all of the specified async-iterable sequences\n * into a single async-iterable sequence.\n */\nexport function merge<T, T2, T3>(\n source: AsyncIterable<T>,\n v2: AsyncIterable<T2>,\n v3: AsyncIterable<T3>\n): AsyncIterableX<T | T2 | T3>;\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the first async-iterable sequence.\n * @template T2 The type of the second async-iterable sequence.\n * @template T3 The type of the third async-iterable sequence.\n * @template T4 The type of the fourth async-iterable sequence.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {AsyncIterable<T2>} v2 The second async-iterable source to merge.\n * @param {AsyncIterable<T3>} v3 The third async-iterable source to merge.\n * @param {AsyncIterable<T4>} v4 The fourth async-iterable source to merge.\n * @returns {(AsyncIterableX<T | T2 | T3 | T4>)} The merged elements from all of the specified async-iterable sequences\n * into a single async-iterable sequence.\n */\nexport function merge<T, T2, T3, T4>(\n source: AsyncIterable<T>,\n v2: AsyncIterable<T2>,\n v3: AsyncIterable<T3>,\n v4: AsyncIterable<T4>\n): AsyncIterableX<T | T2 | T3 | T4>;\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the first async-iterable sequence.\n * @template T2 The type of the second async-iterable sequence.\n * @template T3 The type of the third async-iterable sequence.\n * @template T4 The type of the fourth async-iterable sequence.\n * @template T5 The type of the fifth async-iterable sequence.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {AsyncIterable<T2>} v2 The second async-iterable source to merge.\n * @param {AsyncIterable<T3>} v3 The third async-iterable source to merge.\n * @param {AsyncIterable<T4>} v4 The fourth async-iterable source to merge.\n * @param {AsyncIterable<T5>} v5 The fifth async-iterable source to merge.\n * @returns {(AsyncIterable<T | T2 | T3 | T4 | T5>)} The merged elements from all of the specified async-iterable sequences\n * into a single async-iterable sequence.\n */\nexport function merge<T, T2, T3, T4, T5>(\n source: AsyncIterable<T>,\n v2: AsyncIterable<T2>,\n v3: AsyncIterable<T3>,\n v4: AsyncIterable<T4>,\n v5: AsyncIterable<T5>\n): AsyncIterable<T | T2 | T3 | T4 | T5>;\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the first async-iterable sequence.\n * @template T2 The type of the second async-iterable sequence.\n * @template T3 The type of the third async-iterable sequence.\n * @template T4 The type of the fourth async-iterable sequence.\n * @template T5 The type of the fifth async-iterable sequence.\n * @template T6 The type of the sixth async-iterable sequence.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {AsyncIterable<T2>} v2 The second async-iterable source to merge.\n * @param {AsyncIterable<T3>} v3 The third async-iterable source to merge.\n * @param {AsyncIterable<T4>} v4 The fourth async-iterable source to merge.\n * @param {AsyncIterable<T5>} v5 The fifth async-iterable source to merge.\n * @param {AsyncIterable<T6>} v6 The sixth async-iterable source to merge.\n * @returns {(AsyncIterable<T | T2 | T3 | T4 | T5 | T6>)} The merged elements from all of the specified async-iterable sequences\n * into a single async-iterable sequence.\n */\nexport function merge<T, T2, T3, T4, T5, T6>(\n source: AsyncIterable<T>,\n v2: AsyncIterable<T2>,\n v3: AsyncIterable<T3>,\n v4: AsyncIterable<T4>,\n v5: AsyncIterable<T5>,\n v6: AsyncIterable<T6>\n): AsyncIterable<T | T2 | T3 | T4 | T5 | T6>;\n/**\n * Merges elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n *\n * @export\n * @template T The type of the elements in the sequence to merge.\n * @param {AsyncIterable<T>} source The first async-iterable source to merge.\n * @param {...AsyncIterable<T>[]} args The async-iterable sources to merge.\n * @returns {AsyncIterableX<T>} The merged elements from all of the specified async-iterable sequences into a single async-iterable sequence.\n */\nexport function merge<T>(source: AsyncIterable<T>, ...args: AsyncIterable<T>[]): AsyncIterableX<T>;\n\nexport function merge<T>(source: AsyncIterable<T>, ...args: AsyncIterable<T>[]): AsyncIterableX<T> {\n return new MergeAsyncIterable<T>([source, ...args]);\n}\n"]}
\No newline at end of file