--- /dev/null
+import { OuterSubscriber } from '../OuterSubscriber';
+import { subscribeToResult } from '../util/subscribeToResult';
+export function withLatestFrom(...args) {
+ return (source) => {
+ let project;
+ if (typeof args[args.length - 1] === 'function') {
+ project = args.pop();
+ }
+ const observables = args;
+ return source.lift(new WithLatestFromOperator(observables, project));
+ };
+}
+class WithLatestFromOperator {
+ constructor(observables, project) {
+ this.observables = observables;
+ this.project = project;
+ }
+ call(subscriber, source) {
+ return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
+ }
+}
+class WithLatestFromSubscriber extends OuterSubscriber {
+ constructor(destination, observables, project) {
+ super(destination);
+ this.observables = observables;
+ this.project = project;
+ this.toRespond = [];
+ const len = observables.length;
+ this.values = new Array(len);
+ for (let i = 0; i < len; i++) {
+ this.toRespond.push(i);
+ }
+ for (let i = 0; i < len; i++) {
+ let observable = observables[i];
+ this.add(subscribeToResult(this, observable, observable, i));
+ }
+ }
+ notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+ this.values[outerIndex] = innerValue;
+ const toRespond = this.toRespond;
+ if (toRespond.length > 0) {
+ const found = toRespond.indexOf(outerIndex);
+ if (found !== -1) {
+ toRespond.splice(found, 1);
+ }
+ }
+ }
+ notifyComplete() {
+ }
+ _next(value) {
+ if (this.toRespond.length === 0) {
+ const args = [value, ...this.values];
+ if (this.project) {
+ this._tryProject(args);
+ }
+ else {
+ this.destination.next(args);
+ }
+ }
+ }
+ _tryProject(args) {
+ let result;
+ try {
+ result = this.project.apply(this, args);
+ }
+ catch (err) {
+ this.destination.error(err);
+ return;
+ }
+ this.destination.next(result);
+ }
+}
+//# sourceMappingURL=withLatestFrom.js.map
\ No newline at end of file