2.0.9 • Published 2 years ago
@hazae41/cleaner v2.0.9
Cleaner
Helpers for Disposable
npm i @hazae41/cleanerFeatures
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 dawait using d = new AsyncPromiseDisposer(doSomethingAsync(), async () => { ... })
await dRace multiple thenable and disposable objects (PromiseLike & Disposable)
It will dispose both a and b once one of them settles
/**
 * When a and b are Disposable
 **/
await Disposable.raceSync([a, b])/**
 * When a and b are AsyncDisposable
 **/
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)
}
/**
 * When one listener is triggered, the other is removed
 **/
const x: "a" | "b" = await Disposable.raceSync([waitA(), waitB()])