disposer-util
Version:
Disposer class and Disposable interface
51 lines (50 loc) • 1.6 kB
JavaScript
import { LinkedAbortController } from 'linked-abort-controller';
export class Disposer {
constructor(...signals) {
Object.defineProperty(this, "abortController", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "signal", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "disposeFns", {
enumerable: true,
configurable: true,
writable: true,
value: []
});
Object.defineProperty(this, "isDisposed", {
enumerable: true,
configurable: true,
writable: true,
value: false
});
Object.defineProperty(this, "add", {
enumerable: true,
configurable: true,
writable: true,
value: (...disposeFns) => {
this.disposeFns.push(...disposeFns);
}
});
Object.defineProperty(this, "dispose", {
enumerable: true,
configurable: true,
writable: true,
value: () => {
this.disposeFns.forEach((dispose) => dispose());
this.disposeFns.length = 0;
this.isDisposed = true;
this.abortController.abort();
}
});
this.abortController = new LinkedAbortController(...signals);
this.signal = this.abortController.signal;
}
}