{"version":3,"sources":["asynciterable/operators/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,OAAO,iBAAwB,SAAQ,cAAiB;IAM5D,YACE,MAAwB,EACxB,EAAmD,EACnD,IAAS;QAET,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;YACrC,IAAI,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC1C,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,GAAG,CAAC;aACX;iBAAM;gBACL,GAAG,GAAG,IAAI,CAAC;gBACX,QAAQ,GAAG,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;aACL;SACF;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC7B,MAAM,GAAQ,CAAC;SAChB;IACH,CAAC;CACF;AAUD,MAAM,UAAU,IAAI,CAClB,WAAwF,EACxF,GAAG,IAAS;IAEZ,OAAO,SAAS,oBAAoB,CAAC,MAAwB;QAC3D,OAAO,IAAI,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC;AACJ,CAAC","file":"scan.js","sourcesContent":["import { AsyncIterableX } from '../asynciterablex';\nimport { OperatorAsyncFunction } from '../../interfaces';\n\nexport class ScanAsyncIterable<T, R> extends AsyncIterableX<R> {\n  private _source: AsyncIterable<T>;\n  private _fn: (acc: R, x: T, index: number) => R | Promise<R>;\n  private _seed?: T | R;\n  private _hasSeed: boolean;\n\n  constructor(\n    source: AsyncIterable<T>,\n    fn: (acc: R, x: T, index: number) => R | Promise<R>,\n    seed: R[]\n  ) {\n    super();\n    this._source = source;\n    this._fn = fn;\n    this._hasSeed = seed.length === 1;\n    this._seed = seed[0];\n  }\n\n  async *[Symbol.asyncIterator]() {\n    let i = 0;\n    let hasValue = false;\n    let acc = this._seed;\n    for await (const item of this._source) {\n      if (hasValue || (hasValue = this._hasSeed)) {\n        acc = await this._fn(<R>acc, item, i++);\n        yield acc;\n      } else {\n        acc = item;\n        hasValue = true;\n        i++;\n      }\n    }\n    if (i === 1 && !this._hasSeed) {\n      yield acc as R;\n    }\n  }\n}\n\nexport function scan<T, R = T>(\n  accumulator: (previousValue: R, currentValue: T, currentIndex: number) => R | Promise<R>,\n  seed?: never[]\n): OperatorAsyncFunction<T, R>;\nexport function scan<T, R = T>(\n  accumulator: (previousValue: R, currentValue: T, currentIndex: number) => R | Promise<R>,\n  seed?: R\n): OperatorAsyncFunction<T, R>;\nexport function scan<T, R = T>(\n  accumulator: (previousValue: R, currentValue: T, currentIndex: number) => R | Promise<R>,\n  ...seed: R[]\n): OperatorAsyncFunction<T, R> {\n  return function scanOperatorFunction(source: AsyncIterable<T>): AsyncIterableX<R> {\n    return new ScanAsyncIterable(source, accumulator, seed);\n  };\n}\n"]}