{"version":3,"sources":["asynciterable/operators/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,mBAAuB,SAAQ,cAAiB;IAGpD,YAAY,EAAoB;QAC9B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG;YACT,IAAI,CAAC,KAAK;gBACR,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAoB;QACzC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AAgCD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,KAAK,CACnB,QAG6D;IAE7D,OAAO,SAAS,qBAAqB,CACnC,MAA8B;QAE9B,OAAO,QAAQ;YACb,CAAC,CAAC,MAAM,CAAU,KAAK,EAAE,MAAM,EAAE,EAAE;gBACjC,MAAM,EAAE,GAAG,MAAM,QAAQ,CACvB,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,EAC7D,MAAM,CACP,CAAC;gBACF,OAAO,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAC;YACF,CAAC,CAAC,IAAI,mBAAmB,CAAU,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC","file":"share.js","sourcesContent":["import { AsyncIterableX } from '../asynciterablex';\nimport { create } from '../create';\nimport { OperatorAsyncFunction } from '../../interfaces';\nimport { throwIfAborted } from '../../aborterror';\n\nclass SharedAsyncIterable<T> extends AsyncIterableX<T> {\n  private _it: AsyncIterator<T>;\n\n  constructor(it: AsyncIterator<T>) {\n    super();\n    this._it = {\n      next(value) {\n        return it.next(value);\n      },\n    };\n  }\n\n  [Symbol.asyncIterator](signal?: AbortSignal) {\n    throwIfAborted(signal);\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>(): OperatorAsyncFunction<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 {((\n *     value: AsyncIterable<TSource>,\n *     signal?: AbortSignal\n *   ) => AsyncIterable<TResult> | Promise<AsyncIterable<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?: (\n    value: AsyncIterable<TSource>,\n    signal?: AbortSignal\n  ) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>\n): OperatorAsyncFunction<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 {((\n *     value: AsyncIterable<TSource>,\n *     signal?: AbortSignal\n *   ) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>)} [selector] Selector function with shared access\n * to the source sequence for each iterator.\n * @returns {(OperatorAsyncFunction<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?: (\n    value: AsyncIterable<TSource>,\n    signal?: AbortSignal\n  ) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>\n): OperatorAsyncFunction<TSource, TSource | TResult> {\n  return function shareOperatorFunction(\n    source: AsyncIterable<TSource>\n  ): AsyncIterableX<TSource | TResult> {\n    return selector\n      ? create<TResult>(async (signal) => {\n        const it = await selector(\n          new SharedAsyncIterable(source[Symbol.asyncIterator](signal)),\n          signal\n        );\n        return it[Symbol.asyncIterator](signal);\n      })\n      : new SharedAsyncIterable<TSource>(source[Symbol.asyncIterator]());\n  };\n}\n"]}