export function isDisposable(thing) { return typeof thing.dispose === 'function' && thing.dispose.length === 0; } export function dispose(first) { var rest = []; for (var _i = 1; _i < arguments.length; _i++) { rest[_i - 1] = arguments[_i]; } if (Array.isArray(first)) { first.forEach(function (d) { return d && d.dispose(); }); return []; } else if (rest.length === 0) { if (first) { first.dispose(); return first; } return undefined; } else { dispose(first); dispose(rest); return []; } } export function combinedDisposable(disposables) { return { dispose: function () { return dispose(disposables); } }; } export function toDisposable(fn) { return { dispose: function () { fn(); } }; } var Disposable = /** @class */ (function () { function Disposable() { this._toDispose = []; this._lifecycle_disposable_isDisposed = false; } Disposable.prototype.dispose = function () { this._lifecycle_disposable_isDisposed = true; this._toDispose = dispose(this._toDispose); }; Disposable.prototype._register = function (t) { if (this._lifecycle_disposable_isDisposed) { console.warn('Registering disposable on object that has already been disposed.'); t.dispose(); } else { this._toDispose.push(t); } return t; }; Disposable.None = Object.freeze({ dispose: function () { } }); return Disposable; }()); export { Disposable }; var ImmortalReference = /** @class */ (function () { function ImmortalReference(object) { this.object = object; } ImmortalReference.prototype.dispose = function () { }; return ImmortalReference; }()); export { ImmortalReference };