1 import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';
2 export const defaultThrottleConfig = {
6 export function throttle(durationSelector, config = defaultThrottleConfig) {
7 return (source) => source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));
9 class ThrottleOperator {
10 constructor(durationSelector, leading, trailing) {
11 this.durationSelector = durationSelector;
12 this.leading = leading;
13 this.trailing = trailing;
15 call(subscriber, source) {
16 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
19 class ThrottleSubscriber extends SimpleOuterSubscriber {
20 constructor(destination, durationSelector, _leading, _trailing) {
22 this.destination = destination;
23 this.durationSelector = durationSelector;
24 this._leading = _leading;
25 this._trailing = _trailing;
26 this._hasValue = false;
29 this._hasValue = true;
30 this._sendValue = value;
31 if (!this._throttled) {
41 const { _hasValue, _sendValue } = this;
43 this.destination.next(_sendValue);
44 this.throttle(_sendValue);
46 this._hasValue = false;
47 this._sendValue = undefined;
50 const duration = this.tryDurationSelector(value);
52 this.add(this._throttled = innerSubscribe(duration, new SimpleInnerSubscriber(this)));
55 tryDurationSelector(value) {
57 return this.durationSelector(value);
60 this.destination.error(err);
65 const { _throttled, _trailing } = this;
67 _throttled.unsubscribe();
69 this._throttled = undefined;
75 this.throttlingDone();
78 this.throttlingDone();
81 //# sourceMappingURL=throttle.js.map