https://github.com/hazae41/disposer
A wrapper for an object with a dispose function
https://github.com/hazae41/disposer
Last synced: 8 days ago
JSON representation
A wrapper for an object with a dispose function
- Host: GitHub
- URL: https://github.com/hazae41/disposer
- Owner: hazae41
- Created: 2023-06-01T15:54:18.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-05-29T06:04:50.000Z (11 months ago)
- Last Synced: 2025-03-23T17:16:50.900Z (about 1 month ago)
- Language: TypeScript
- Homepage:
- Size: 151 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# Disposer
A wrapper for an object with a dispose function
```bash
npm i @hazae41/disposer
```[**Node Package 📦**](https://www.npmjs.com/package/@hazae41/disposer)
## 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
```tsx
using d = new Disposer(something, () => { ... })
``````tsx
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
```tsx
import { Future } from "@hazae41/future"
import { Disposer } from "@hazae41/disposer"function waitA(): Disposer> {
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> {
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
*/
}
```