64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
|
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 };
|