'use strict';
var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; };
var _classCallCheck = function (instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } };
exports.__esModule = true;
var _isDisposable = require('./isDisposable');
var _isDisposable2 = _interopRequireWildcard(_isDisposable);
var SerialDisposable = (function () {
function SerialDisposable() {
_classCallCheck(this, SerialDisposable);
this.isDisposed = false;
this.current = null;
}
/**
* Gets the underlying disposable.
* @return The underlying disposable.
*/
SerialDisposable.prototype.getDisposable = function getDisposable() {
return this.current;
};
/**
* Sets the underlying disposable.
* @param {Disposable} value The new underlying disposable.
*/
SerialDisposable.prototype.setDisposable = function setDisposable() {
var value = arguments[0] === undefined ? null : arguments[0];
if (value != null && !_isDisposable2['default'](value)) {
throw new Error('Expected either an empty value or a valid disposable');
}
var isDisposed = this.isDisposed;
var previous = undefined;
if (!isDisposed) {
previous = this.current;
this.current = value;
}
if (previous) {
previous.dispose();
}
if (isDisposed && value) {
value.dispose();
}
};
/**
* Disposes the underlying disposable as well as all future replacements.
*/
SerialDisposable.prototype.dispose = function dispose() {
if (this.isDisposed) {
return;
}
this.isDisposed = true;
var previous = this.current;
this.current = null;
if (previous) {
previous.dispose();
}
};
return SerialDisposable;
})();
exports['default'] = SerialDisposable;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYW4vRG9jdW1lbnRzL1Byb2plY3RzL2Rpc3Bvc2FibGVzL21vZHVsZXMvU2VyaWFsRGlzcG9zYWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs0QkFBeUIsZ0JBQWdCOzs7O0lBRXBCLGdCQUFnQjtBQUN4QixXQURRLGdCQUFnQixHQUNyQjswQkFESyxnQkFBZ0I7O0FBRWpDLFFBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0dBQ3JCOzs7Ozs7O0FBSmtCLGtCQUFnQixXQVVuQyxhQUFhLEdBQUEseUJBQUc7QUFDZCxXQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7R0FDckI7Ozs7Ozs7QUFaa0Isa0JBQWdCLFdBa0JuQyxhQUFhLEdBQUEseUJBQWU7UUFBZCxLQUFLLGdDQUFHLElBQUk7O0FBQ3hCLFFBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLDBCQUFhLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLFlBQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztLQUN6RTs7QUFFRCxRQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ25DLFFBQUksUUFBUSxZQUFBLENBQUM7O0FBRWIsUUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLGNBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLFVBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3RCOztBQUVELFFBQUksUUFBUSxFQUFFO0FBQ1osY0FBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3BCOztBQUVELFFBQUksVUFBVSxJQUFJLEtBQUssRUFBRTtBQUN2QixXQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDakI7R0FDRjs7Ozs7O0FBdENrQixrQkFBZ0IsV0EyQ25DLE9BQU8sR0FBQSxtQkFBRztBQUNSLFFBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNuQixhQUFPO0tBQ1I7O0FBRUQsUUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QixRQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs7QUFFcEIsUUFBSSxRQUFRLEVBQUU7QUFDWixjQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDcEI7R0FDRjs7U0F2RGtCLGdCQUFnQjs7O3FCQUFoQixnQkFBZ0IiLCJmaWxlIjoiL1VzZXJzL2Rhbi9Eb2N1bWVudHMvUHJvamVjdHMvZGlzcG9zYWJsZXMvbW9kdWxlcy9TZXJpYWxEaXNwb3NhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzRGlzcG9zYWJsZSBmcm9tICcuL2lzRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcmlhbERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZGVybHlpbmcgZGlzcG9zYWJsZS5cbiAgICogQHJldHVybiBUaGUgdW5kZXJseWluZyBkaXNwb3NhYmxlLlxuICAgKi9cbiAgZ2V0RGlzcG9zYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVuZGVybHlpbmcgZGlzcG9zYWJsZS5cbiAgICogQHBhcmFtIHtEaXNwb3NhYmxlfSB2YWx1ZSBUaGUgbmV3IHVuZGVybHlpbmcgZGlzcG9zYWJsZS5cbiAgICovXG4gIHNldERpc3Bvc2FibGUodmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgIWlzRGlzcG9zYWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZWl0aGVyIGFuIGVtcHR5IHZhbHVlIG9yIGEgdmFsaWQgZGlzcG9zYWJsZScpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRGlzcG9zZWQgPSB0aGlzLmlzRGlzcG9zZWQ7XG4gICAgbGV0IHByZXZpb3VzO1xuXG4gICAgaWYgKCFpc0Rpc3Bvc2VkKSB7XG4gICAgICBwcmV2aW91cyA9IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMuZGlzcG9zZSgpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3Bvc2VkICYmIHZhbHVlKSB7XG4gICAgICB2YWx1ZS5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSB1bmRlcmx5aW5nIGRpc3Bvc2FibGUgYXMgd2VsbCBhcyBhbGwgZnV0dXJlIHJlcGxhY2VtZW50cy5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgbGV0IHByZXZpb3VzID0gdGhpcy5jdXJyZW50O1xuICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG5cbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHByZXZpb3VzLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cbn0iXX0= |