| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';export const defaultThrottleConfig = {    leading: true,    trailing: false};export function throttle(durationSelector, config = defaultThrottleConfig) {    return (source) => source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));}class ThrottleOperator {    constructor(durationSelector, leading, trailing) {        this.durationSelector = durationSelector;        this.leading = leading;        this.trailing = trailing;    }    call(subscriber, source) {        return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));    }}class ThrottleSubscriber extends SimpleOuterSubscriber {    constructor(destination, durationSelector, _leading, _trailing) {        super(destination);        this.destination = destination;        this.durationSelector = durationSelector;        this._leading = _leading;        this._trailing = _trailing;        this._hasValue = false;    }    _next(value) {        this._hasValue = true;        this._sendValue = value;        if (!this._throttled) {            if (this._leading) {                this.send();            }            else {                this.throttle(value);            }        }    }    send() {        const { _hasValue, _sendValue } = this;        if (_hasValue) {            this.destination.next(_sendValue);            this.throttle(_sendValue);        }        this._hasValue = false;        this._sendValue = undefined;    }    throttle(value) {        const duration = this.tryDurationSelector(value);        if (!!duration) {            this.add(this._throttled = innerSubscribe(duration, new SimpleInnerSubscriber(this)));        }    }    tryDurationSelector(value) {        try {            return this.durationSelector(value);        }        catch (err) {            this.destination.error(err);            return null;        }    }    throttlingDone() {        const { _throttled, _trailing } = this;        if (_throttled) {            _throttled.unsubscribe();        }        this._throttled = undefined;        if (_trailing) {            this.send();        }    }    notifyNext() {        this.throttlingDone();    }    notifyComplete() {        this.throttlingDone();    }}//# sourceMappingURL=throttle.js.map
 |