{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/operators/zip.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, ObservableInput } from '../Observable';\nimport { ArrayObservable } from '../observable/ArrayObservable';\nimport { isArray } from '../util/isArray';\nimport { Operator } from '../Operator';\nimport { PartialObserver } from '../Observer';\nimport { Subscriber } from '../Subscriber';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { OperatorFunction } from '../interfaces';\n\n/* tslint:disable:max-line-length */\nexport function zip(project: (v1: T) => R): OperatorFunction;\nexport function zip(v2: ObservableInput, project: (v1: T, v2: T2) => R): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): OperatorFunction ;\nexport function zip(v2: ObservableInput): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): OperatorFunction;\nexport function zip(v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): OperatorFunction ;\nexport function zip(...observables: Array | ((...values: Array) => R)>): OperatorFunction;\nexport function zip(array: Array>): OperatorFunction;\nexport function zip(array: Array>, project: (v1: T, ...values: Array) => R): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * @param observables\n * @return {Observable}\n * @method zip\n * @owner Observable\n */\nexport function zip(...observables: Array | ((...values: Array) => R)>): OperatorFunction {\n return function zipOperatorFunction(source: Observable) {\n return source.lift.call(zipStatic(source, ...observables));\n };\n}\n\n/* tslint:disable:max-line-length */\nexport function zipStatic(v1: ObservableInput, project: (v1: T) => R): Observable;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, project: (v1: T, v2: T2) => R): Observable;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, project: (v1: T, v2: T2, v3: T3) => R): Observable;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4) => R): Observable;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => R): Observable;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput, project: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => R): Observable;\n\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput): Observable<[T, T2]>;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput): Observable<[T, T2, T3]>;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput): Observable<[T, T2, T3, T4]>;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput): Observable<[T, T2, T3, T4, T5]>;\nexport function zipStatic(v1: ObservableInput, v2: ObservableInput, v3: ObservableInput, v4: ObservableInput, v5: ObservableInput, v6: ObservableInput): Observable<[T, T2, T3, T4, T5, T6]>;\n\nexport function zipStatic(array: ObservableInput[]): Observable;\nexport function zipStatic(array: ObservableInput[]): Observable;\nexport function zipStatic(array: ObservableInput[], project: (...values: Array) => R): Observable;\nexport function zipStatic(array: ObservableInput[], project: (...values: Array) => R): Observable;\n\nexport function zipStatic(...observables: Array>): Observable;\nexport function zipStatic(...observables: Array | ((...values: Array) => R)>): Observable;\nexport function zipStatic(...observables: Array | ((...values: Array) => R)>): Observable;\n/* tslint:enable:max-line-length */\n\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the latest parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * @example Combine age and name from different sources\n *\n * let age$ = Observable.of(27, 25, 29);\n * let name$ = Observable.of('Foo', 'Bar', 'Beer');\n * let isDev$ = Observable.of(true, true, false);\n *\n * Observable\n * .zip(age$,\n * name$,\n * isDev$,\n * (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))\n * .subscribe(x => console.log(x));\n *\n * // outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n *\n * @param observables\n * @return {Observable}\n * @static true\n * @name zip\n * @owner Observable\n */\nexport function zipStatic(...observables: Array | ((...values: Array) => R)>): Observable {\n const project = <((...ys: Array) => R)> observables[observables.length - 1];\n if (typeof project === 'function') {\n observables.pop();\n }\n return new ArrayObservable(observables).lift(new ZipOperator(project));\n}\n\nexport class ZipOperator implements Operator {\n\n project: (...values: Array) => R;\n\n constructor(project?: (...values: Array) => R) {\n this.project = project;\n }\n\n call(subscriber: Subscriber, source: any): any {\n return source.subscribe(new ZipSubscriber(subscriber, this.project));\n }\n}\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class ZipSubscriber extends Subscriber {\n private values: any;\n private project: (...values: Array) => R;\n private iterators: LookAheadIterator[] = [];\n private active = 0;\n\n constructor(destination: Subscriber,\n project?: (...values: Array) => R,\n values: any = Object.create(null)) {\n super(destination);\n this.project = (typeof project === 'function') ? project : null;\n this.values = values;\n }\n\n protected _next(value: any) {\n const iterators = this.iterators;\n if (isArray(value)) {\n iterators.push(new StaticArrayIterator(value));\n } else if (typeof value[Symbol_iterator] === 'function') {\n iterators.push(new StaticIterator(value[Symbol_iterator]()));\n } else {\n iterators.push(new ZipBufferIterator(this.destination, this, value));\n }\n }\n\n protected _complete() {\n const iterators = this.iterators;\n const len = iterators.length;\n\n if (len === 0) {\n this.destination.complete();\n return;\n }\n\n this.active = len;\n for (let i = 0; i < len; i++) {\n let iterator: ZipBufferIterator = iterators[i];\n if (iterator.stillUnsubscribed) {\n this.add(iterator.subscribe(iterator, i));\n } else {\n this.active--; // not an observable\n }\n }\n }\n\n notifyInactive() {\n this.active--;\n if (this.active === 0) {\n this.destination.complete();\n }\n }\n\n checkIterators() {\n const iterators = this.iterators;\n const len = iterators.length;\n const destination = this.destination;\n\n // abort if not all of them have values\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n return;\n }\n }\n\n let shouldComplete = false;\n const args: any[] = [];\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n let result = iterator.next();\n\n // check to see if it's completed now that you've gotten\n // the next value.\n if (iterator.hasCompleted()) {\n shouldComplete = true;\n }\n\n if (result.done) {\n destination.complete();\n return;\n }\n\n args.push(result.value);\n }\n\n if (this.project) {\n this._tryProject(args);\n } else {\n destination.next(args);\n }\n\n if (shouldComplete) {\n destination.complete();\n }\n }\n\n protected _tryProject(args: any[]) {\n let result: any;\n try {\n result = this.project.apply(this, args);\n } catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n }\n}\n\ninterface LookAheadIterator extends Iterator {\n hasValue(): boolean;\n hasCompleted(): boolean;\n}\n\nclass StaticIterator implements LookAheadIterator {\n private nextResult: IteratorResult;\n\n constructor(private iterator: Iterator) {\n this.nextResult = iterator.next();\n }\n\n hasValue() {\n return true;\n }\n\n next(): IteratorResult {\n const result = this.nextResult;\n this.nextResult = this.iterator.next();\n return result;\n }\n\n hasCompleted() {\n const nextResult = this.nextResult;\n return nextResult && nextResult.done;\n }\n}\n\nclass StaticArrayIterator implements LookAheadIterator {\n private index = 0;\n private length = 0;\n\n constructor(private array: T[]) {\n this.length = array.length;\n }\n\n [Symbol_iterator]() {\n return this;\n }\n\n next(value?: any): IteratorResult {\n const i = this.index++;\n const array = this.array;\n return i < this.length ? { value: array[i], done: false } : { value: null, done: true };\n }\n\n hasValue() {\n return this.array.length > this.index;\n }\n\n hasCompleted() {\n return this.array.length === this.index;\n }\n}\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass ZipBufferIterator extends OuterSubscriber implements LookAheadIterator {\n stillUnsubscribed = true;\n buffer: T[] = [];\n isComplete = false;\n\n constructor(destination: PartialObserver,\n private parent: ZipSubscriber,\n private observable: Observable) {\n super(destination);\n }\n\n [Symbol_iterator]() {\n return this;\n }\n\n // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next\n // this is legit because `next()` will never be called by a subscription in this case.\n next(): IteratorResult {\n const buffer = this.buffer;\n if (buffer.length === 0 && this.isComplete) {\n return { value: null, done: true };\n } else {\n return { value: buffer.shift(), done: false };\n }\n }\n\n hasValue() {\n return this.buffer.length > 0;\n }\n\n hasCompleted() {\n return this.buffer.length === 0 && this.isComplete;\n }\n\n notifyComplete() {\n if (this.buffer.length > 0) {\n this.isComplete = true;\n this.parent.notifyInactive();\n } else {\n this.destination.complete();\n }\n }\n\n notifyNext(outerValue: T, innerValue: any,\n outerIndex: number, innerIndex: number,\n innerSub: InnerSubscriber): void {\n this.buffer.push(innerValue);\n this.parent.checkIterators();\n }\n\n subscribe(value: any, index: number) {\n return subscribeToResult(this, this.observable, this, index);\n }\n}\n"]}