UNPKG

disposer-util

Version:

Disposer class and Disposable interface

51 lines (50 loc) 1.6 kB
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; } }