@hazae41/disposer
TypeScript icon, indicating that this package has built-in type declarations

2.0.20 • Public • Published

Disposer

A wrapper for an object with a dispose function

npm i @hazae41/disposer

Node Package 📦

Features

Current features

  • 100% TypeScript and ESM
  • No external dependencies
  • Create a disposable object from any object

Usage

Create a disposable object (Disposable or AsyncDisposable) from any object

using d = new Disposer(something, () => { ... })
await using d = new AsyncDisposer(something, async () => { ... })

You can get the inner object with .inner or .get() and the dispose function with .dispose

Example

This can be useful for waiting for multiple listeners, and remove all listeners when one of them is triggered

import { Future } from "@hazae41/future"
import { Disposer } from "@hazae41/disposer"

function waitA(): Disposer<Promise<"a">> {
  const future = new Future<"a">()
  const onevent = () => future.resolve("a")

  this.addEventListener("a", onevent)
  const off = () => this.removeEventListener("a", onevent)
  
  return new Disposer(future.promise, off)
}

function waitB(): Disposer<Promise<"b">> {
  const future = new Future<"b">()
  const onevent = () => future.resolve()

  this.addEventListener("b", onevent)
  const off = () => this.removeEventListener("b", onevent)
  
  return new Disposer(future.promise, off)
}

async function wait() {
  using a = waitA()
  using b = waitB()

  const x: "a" | "b" = await Promise.race([a.get(), b.get()])

  /**
   * All listeners will be removed
   */
}

/@hazae41/disposer/

    Package Sidebar

    Install

    npm i @hazae41/disposer

    Weekly Downloads

    49

    Version

    2.0.20

    License

    MIT

    Unpacked Size

    12.1 kB

    Total Files

    12

    Last publish

    Collaborators

    • hazae41