import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; import { innerFrom } from '../observable/innerFrom'; import { identity } from '../util/identity'; import { noop } from '../util/noop'; import { popResultSelector } from '../util/args'; export function withLatestFrom(...inputs) { const project = popResultSelector(inputs); return operate((source, subscriber) => { const len = inputs.length; const otherValues = new Array(len); let hasValue = inputs.map(() => false); let ready = false; for (let i = 0; i < len; i++) { innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, (value) => { otherValues[i] = value; if (!ready && !hasValue[i]) { hasValue[i] = true; (ready = hasValue.every(identity)) && (hasValue = null); } }, noop)); } source.subscribe(createOperatorSubscriber(subscriber, (value) => { if (ready) { const values = [value, ...otherValues]; subscriber.next(project ? project(...values) : values); } })); }); } //# sourceMappingURL=withLatestFrom.js.map