| import { Subscriber } from '../Subscriber'; |
| export function scan(accumulator, seed) { |
| let hasSeed = false; |
| if (arguments.length >= 2) { |
| hasSeed = true; |
| } |
| return function scanOperatorFunction(source) { |
| return source.lift(new ScanOperator(accumulator, seed, hasSeed)); |
| }; |
| } |
| class ScanOperator { |
| constructor(accumulator, seed, hasSeed = false) { |
| this.accumulator = accumulator; |
| this.seed = seed; |
| this.hasSeed = hasSeed; |
| } |
| call(subscriber, source) { |
| return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed)); |
| } |
| } |
| class ScanSubscriber extends Subscriber { |
| constructor(destination, accumulator, _seed, hasSeed) { |
| super(destination); |
| this.accumulator = accumulator; |
| this._seed = _seed; |
| this.hasSeed = hasSeed; |
| this.index = 0; |
| } |
| get seed() { |
| return this._seed; |
| } |
| set seed(value) { |
| this.hasSeed = true; |
| this._seed = value; |
| } |
| _next(value) { |
| if (!this.hasSeed) { |
| this.seed = value; |
| this.destination.next(value); |
| } |
| else { |
| return this._tryNext(value); |
| } |
| } |
| _tryNext(value) { |
| const index = this.index++; |
| let result; |
| try { |
| result = this.accumulator(this.seed, value, index); |
| } |
| catch (err) { |
| this.destination.error(err); |
| } |
| this.seed = result; |
| this.destination.next(result); |
| } |
| } |
| //# sourceMappingURL=scan.js.map |