"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.debounceTime = void 0; var async_1 = require("../scheduler/async"); var lift_1 = require("../util/lift"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function debounceTime(dueTime, scheduler) { if (scheduler === void 0) { scheduler = async_1.asyncScheduler; } return lift_1.operate(function (source, subscriber) { var activeTask = null; var lastValue = null; var lastTime = null; var emit = function () { if (activeTask) { activeTask.unsubscribe(); activeTask = null; var value = lastValue; lastValue = null; subscriber.next(value); } }; function emitWhenIdle() { var targetTime = lastTime + dueTime; var now = scheduler.now(); if (now < targetTime) { activeTask = this.schedule(undefined, targetTime - now); subscriber.add(activeTask); return; } emit(); } source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { lastValue = value; lastTime = scheduler.now(); if (!activeTask) { activeTask = scheduler.schedule(emitWhenIdle, dueTime); subscriber.add(activeTask); } }, function () { emit(); subscriber.complete(); }, undefined, function () { lastValue = activeTask = null; })); }); } exports.debounceTime = debounceTime; //# sourceMappingURL=debounceTime.js.map