ts-raii-scope
Version:
TypeScript RAII proof of concept
34 lines (33 loc) • 1.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("./utils");
class DisposableResource {
constructor(innerResource, disposeCallback) {
this._innerResource = innerResource;
this._disposeCallback = disposeCallback;
this._isDisposed = false;
}
// noinspection JSUnusedGlobalSymbols
dispose() {
if (this._isDisposed === false) {
this._isDisposed = undefined;
const disposeResult = this._disposeCallback(this._innerResource);
if (utils_1.isPromise(disposeResult)) {
return disposeResult.then(this.finishDisposing.bind(this));
}
this.finishDisposing();
}
}
// noinspection JSUnusedGlobalSymbols
/**
* Returns undefined if dispose in progress
*/
isDisposed() {
return this._isDisposed;
}
finishDisposing() {
delete this._innerResource;
this._isDisposed = true;
}
}
exports.DisposableResource = DisposableResource;