1 import { Subscription } from '../Subscription';
2 import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
3 export function bufferWhen(closingSelector) {
4 return function (source) {
5 return source.lift(new BufferWhenOperator(closingSelector));
8 class BufferWhenOperator {
9 constructor(closingSelector) {
10 this.closingSelector = closingSelector;
12 call(subscriber, source) {
13 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
16 class BufferWhenSubscriber extends SimpleOuterSubscriber {
17 constructor(destination, closingSelector) {
19 this.closingSelector = closingSelector;
20 this.subscribing = false;
24 this.buffer.push(value);
27 const buffer = this.buffer;
29 this.destination.next(buffer);
34 this.buffer = undefined;
35 this.subscribing = false;
41 if (this.subscribing) {
49 let { closingSubscription } = this;
50 if (closingSubscription) {
51 this.remove(closingSubscription);
52 closingSubscription.unsubscribe();
54 const buffer = this.buffer;
56 this.destination.next(buffer);
61 const { closingSelector } = this;
62 closingNotifier = closingSelector();
65 return this.error(err);
67 closingSubscription = new Subscription();
68 this.closingSubscription = closingSubscription;
69 this.add(closingSubscription);
70 this.subscribing = true;
71 closingSubscription.add(innerSubscribe(closingNotifier, new SimpleInnerSubscriber(this)));
72 this.subscribing = false;
75 //# sourceMappingURL=bufferWhen.js.map