text: import { operate } from '../util/lift';
  import { OperatorSubscriber } from './OperatorSubscriber';
  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 = new OperatorSubscriber(subscriber, (a) => {
                  const { buffer, complete } = otherState;
                  if (buffer.length === 0) {
                      complete ? emit(false) : selfState.buffer.push(a);
                  }
                  else {
                      !comparator(a, buffer.shift()) && emit(false);
                  }
              }, undefined, () => {
                  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));
          compareTo.subscribe(createSubscriber(bState, aState));
      });
  }
  function createState() {
      return {
          buffer: [],
          complete: false,
      };
  }
  //# sourceMappingURL=sequenceEqual.js.map