"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.audit = void 0; var lift_1 = require("../util/lift"); var innerFrom_1 = require("../observable/innerFrom"); var OperatorSubscriber_1 = require("./OperatorSubscriber"); function audit(durationSelector) { return lift_1.operate(function (source, subscriber) { var hasValue = false; var lastValue = null; var durationSubscriber = null; var isComplete = false; var endDuration = function () { durationSubscriber === null || durationSubscriber === void 0 ? void 0 : durationSubscriber.unsubscribe(); durationSubscriber = null; if (hasValue) { hasValue = false; var value = lastValue; lastValue = null; subscriber.next(value); } isComplete && subscriber.complete(); }; var cleanupDuration = function () { durationSubscriber = null; isComplete && subscriber.complete(); }; source.subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { hasValue = true; lastValue = value; if (!durationSubscriber) { innerFrom_1.innerFrom(durationSelector(value)).subscribe((durationSubscriber = OperatorSubscriber_1.createOperatorSubscriber(subscriber, endDuration, cleanupDuration))); } }, function () { isComplete = true; (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete(); })); }); } exports.audit = audit; //# sourceMappingURL=audit.js.map