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