{"ast":null,"code":"import { Subject } from '../Subject';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function window(windowBoundaries) {\n  return function windowOperatorFunction(source) {\n    return source.lift(new WindowOperator(windowBoundaries));\n  };\n}\n\nclass WindowOperator {\n  constructor(windowBoundaries) {\n    this.windowBoundaries = windowBoundaries;\n  }\n\n  call(subscriber, source) {\n    const windowSubscriber = new WindowSubscriber(subscriber);\n    const sourceSubscription = source.subscribe(windowSubscriber);\n\n    if (!sourceSubscription.closed) {\n      windowSubscriber.add(subscribeToResult(windowSubscriber, this.windowBoundaries));\n    }\n\n    return sourceSubscription;\n  }\n\n}\n\nclass WindowSubscriber extends OuterSubscriber {\n  constructor(destination) {\n    super(destination);\n    this.window = new Subject();\n    destination.next(this.window);\n  }\n\n  notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n    this.openWindow();\n  }\n\n  notifyError(error, innerSub) {\n    this._error(error);\n  }\n\n  notifyComplete(innerSub) {\n    this._complete();\n  }\n\n  _next(value) {\n    this.window.next(value);\n  }\n\n  _error(err) {\n    this.window.error(err);\n    this.destination.error(err);\n  }\n\n  _complete() {\n    this.window.complete();\n    this.destination.complete();\n  }\n\n  _unsubscribe() {\n    this.window = null;\n  }\n\n  openWindow() {\n    const prevWindow = this.window;\n\n    if (prevWindow) {\n      prevWindow.complete();\n    }\n\n    const destination = this.destination;\n    const newWindow = this.window = new Subject();\n    destination.next(newWindow);\n  }\n\n} //# sourceMappingURL=window.js.map","map":null,"metadata":{},"sourceType":"module"}