import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; import { innerFrom } from '../observable/innerFrom'; export function sequenceEqual(compareTo, comparator = (a, b) => a === b) { return operate((source, subscriber) => { const aState = createState(); const bState = createState(); const emit = (isEqual) => { subscriber.next(isEqual); subscriber.complete(); }; const createSubscriber = (selfState, otherState) => { const sequenceEqualSubscriber = createOperatorSubscriber(subscriber, (a) => { const { buffer, complete } = otherState; if (buffer.length === 0) { complete ? emit(false) : selfState.buffer.push(a); } else { !comparator(a, buffer.shift()) && emit(false); } }, () => { selfState.complete = true; const { complete, buffer } = otherState; complete && emit(buffer.length === 0); sequenceEqualSubscriber === null || sequenceEqualSubscriber === void 0 ? void 0 : sequenceEqualSubscriber.unsubscribe(); }); return sequenceEqualSubscriber; }; source.subscribe(createSubscriber(aState, bState)); innerFrom(compareTo).subscribe(createSubscriber(bState, aState)); }); } function createState() { return { buffer: [], complete: false, }; } //# sourceMappingURL=sequenceEqual.js.map