UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

1 lines 3.43 kB
{"version":3,"sources":["iterable/operators/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,MAAM,cAAkB,SAAQ,SAAY;IAG1C,YAAY,EAAe;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG;YACT,IAAI,CAAC,KAAU;gBACb,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AA0BD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CACnB,QAA0D;IAE1D,OAAO,SAAS,qBAAqB,CAAC,MAAyB;QAC7D,OAAO,QAAQ;YACb,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1F,CAAC,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC","file":"share.js","sourcesContent":["import { IterableX } from '../iterablex';\nimport { create } from '../create';\nimport { OperatorFunction } from '../../interfaces';\n\nclass SharedIterable<T> extends IterableX<T> {\n private _it: Iterator<T>;\n\n constructor(it: Iterator<T>) {\n super();\n this._it = {\n next(value: any) {\n return it.next(value);\n },\n };\n }\n\n [Symbol.iterator]() {\n return this._it;\n }\n}\n\n/**\n * Creates a buffer with a shared view over the source sequence, causing each iterator to fetch the next element\n * from the source sequence.\n *\n * @export\n * @template TSource Source sequence element type.\n * @returns {OperatorAsyncFunction<TSource, TSource>} Buffer enabling each enumerator to retrieve elements from the shared source sequence.\n */\nexport function share<TSource>(): OperatorFunction<TSource, TSource>;\n/**\n * Shares the source sequence within a selector function where each iterator can fetch the next element from the\n * source sequence.\n *\n * @export\n * @template TSource Source sequence element type.\n * @template TResult Result sequence element type.\n * @param {((value: Iterable<TSource>) => Iterable<TResult>)} [selector] Selector function with shared access\n * to the source sequence for each iterator.\n * @returns {OperatorAsyncFunction<TSource, TResult>} Sequence resulting from applying the selector function to the\n * shared view over the source sequence.\n */\nexport function share<TSource, TResult>(\n selector?: (value: Iterable<TSource>) => Iterable<TResult>\n): OperatorFunction<TSource, TResult>;\n/**\n * Shares the source sequence within a selector function where each iterator can fetch the next element from the\n * source sequence.\n *\n * @export\n * @template TSource Source sequence element type.\n * @template TResult Result sequence element type.\n * @param {((value: Iterable<TSource>) => Iterable<TResult>)} [selector] Selector function with shared access\n * to the source sequence for each iterator.\n * @returns {(OperatorFunction<TSource, TSource | TResult>)} Sequence resulting from applying the selector function to the\n * shared view over the source sequence.\n */\nexport function share<TSource, TResult = TSource>(\n selector?: (value: Iterable<TSource>) => Iterable<TResult>\n): OperatorFunction<TSource, TSource | TResult> {\n return function shareOperatorFunction(source: Iterable<TSource>): IterableX<TSource | TResult> {\n return selector\n ? create(() => selector(new SharedIterable(source[Symbol.iterator]()))[Symbol.iterator]())\n : new SharedIterable(source[Symbol.iterator]());\n };\n}\n"]}