Code coverage report for modules/SerialDisposable.js

Statements: 97.44% (38 / 39)      Branches: 91.67% (22 / 24)      Functions: 100% (7 / 7)      Lines: 100% (36 / 36)      Ignored: none     

All files » modules/ » SerialDisposable.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82    1   7   1   1   1   1 1 7   7 7               1 5               1 18   18 4     14 14   14 11 11     14 4     14 2               1 4 1     3 3 3   3 2       1     1 1  
'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=