|
"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; |
|
|