--- /dev/null
+import { Subscriber } from '../Subscriber';
+import { async } from '../scheduler/async';
+export function debounceTime(dueTime, scheduler = async) {
+ return (source) => source.lift(new DebounceTimeOperator(dueTime, scheduler));
+}
+class DebounceTimeOperator {
+ constructor(dueTime, scheduler) {
+ this.dueTime = dueTime;
+ this.scheduler = scheduler;
+ }
+ call(subscriber, source) {
+ return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
+ }
+}
+class DebounceTimeSubscriber extends Subscriber {
+ constructor(destination, dueTime, scheduler) {
+ super(destination);
+ this.dueTime = dueTime;
+ this.scheduler = scheduler;
+ this.debouncedSubscription = null;
+ this.lastValue = null;
+ this.hasValue = false;
+ }
+ _next(value) {
+ this.clearDebounce();
+ this.lastValue = value;
+ this.hasValue = true;
+ this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
+ }
+ _complete() {
+ this.debouncedNext();
+ this.destination.complete();
+ }
+ debouncedNext() {
+ this.clearDebounce();
+ if (this.hasValue) {
+ const { lastValue } = this;
+ this.lastValue = null;
+ this.hasValue = false;
+ this.destination.next(lastValue);
+ }
+ }
+ clearDebounce() {
+ const debouncedSubscription = this.debouncedSubscription;
+ if (debouncedSubscription !== null) {
+ this.remove(debouncedSubscription);
+ debouncedSubscription.unsubscribe();
+ this.debouncedSubscription = null;
+ }
+ }
+}
+function dispatchNext(subscriber) {
+ subscriber.debouncedNext();
+}
+//# sourceMappingURL=debounceTime.js.map
\ No newline at end of file