Cleaner
Helpers for Disposable
npm i @hazae41/cleaner
Node Package 📦
Features
Current features
- 100% TypeScript and ESM
- No external dependencies
- Create a disposable object from any object
- Create a thenable disposable object from a thenable object
- Race multiple thenable and disposable objects
Usage
Create a disposable object (Disposable or AsyncDisposable) from any object
using d = new Disposer(something, () => { ... })
await using d = new AsyncDisposer(something, async () => { ... })
Create a thenable disposable object from a thenable object (PromiseLike)
using d = new PromiseDisposer(doSomethingAsync(), () => { ... })
await d
await using d = new AsyncPromiseDisposer(doSomethingAsync(), async () => { ... })
await d
Race multiple thenable and disposable objects (PromiseLike & Disposable)
It will dispose both a and b once one of them settles
await Disposable.raceSync([a, b])
await Disposable.race([a, b])
This can be useful for waiting for multiple listeners, and remove all listeners when one of them is triggered
function waitA(): PromiseLike<"a"> & Disposable {
const future = new Future<"a">()
const onevent = () => future.resolve("a")
this.addEventListener("a", onevent)
const off = () => this.removeEventListener("a", onevent)
return new PromiseDisposer(future.promise, off)
}
function waitB(): PromiseLike<"b"> & Disposable {
const future = new Future<"b">()
const onevent = () => future.resolve()
this.addEventListener("b", onevent)
const off = () => this.removeEventListener("b", onevent)
return new PromiseDisposer(future.promise, off)
}
const x: "a" | "b" = await Disposable.raceSync([waitA(), waitB()])