# @vates/disposable

> Utilities for disposables

Latest version **0.1.6** (published 2024-10-28) · ISC license · 0 weekly downloads

## Install

```sh
npm install @vates/disposable
pnpm add @vates/disposable
yarn add @vates/disposable
bun add @vates/disposable
```

## Health

**Score 40/100 (D)** — status: stable.

Positive: no vulnerabilities; high maintenance score.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: stale.

## Facts

| | |
|---|---|
| Version | 0.1.6 |
| Published | 2024-10-28 |
| First published | 2021-02-24 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=8.10 |
| Dependencies | 4 |
| Unpacked size | 6.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 985 |
| Author | Vates SAS |
| Maintainers | stephane-m-dev, mlssfrncjrg, b-nollet, arnogues, florent.beauchamp, mathieura, enishowk, tgoettelmann, julien-f, marsaud, olivierlambert, pdonias |

## Links

- npm: https://www.npmjs.com/package/@vates/disposable
- Repository: https://github.com/vatesfr/xen-orchestra
- Homepage: https://github.com/vatesfr/xen-orchestra/tree/master/@vates/disposable
- Issues: https://github.com/vatesfr/xen-orchestra/issues
- npm.io page: https://npm.io/package/@vates/disposable

## Dependencies (4)

- [ensure-array](https://npm.io/package/ensure-array.md) ^1.0.0
- [@xen-orchestra/log](https://npm.io/package/@xen-orchestra/log.md) ^0.7.0
- [@vates/multi-key-map](https://npm.io/package/@vates/multi-key-map.md) ^0.2.0
- [@xen-orchestra/async-map](https://npm.io/package/@xen-orchestra/async-map.md) ^0.1.2

## Recent versions

- 0.1.6 (latest) — 2024-10-28
- 0.1.5 — 2023-11-28
- 0.1.4 — 2023-01-27
- 0.1.3 — 2022-11-29
- 0.1.2 — 2022-10-27
- 0.1.1 — 2021-03-29
- 0.1.0 — 2021-02-24

## README

<!-- DO NOT EDIT MANUALLY, THIS FILE HAS BEEN GENERATED -->

# @vates/disposable

[![Package Version](https://badgen.net/npm/v/@vates/disposable)](https://npmjs.org/package/@vates/disposable) ![License](https://badgen.net/npm/license/@vates/disposable) [![PackagePhobia](https://badgen.net/bundlephobia/minzip/@vates/disposable)](https://bundlephobia.com/result?p=@vates/disposable) [![Node compatibility](https://badgen.net/npm/node/@vates/disposable)](https://npmjs.org/package/@vates/disposable)

> Utilities for disposables

## Install

Installation of the [npm package](https://npmjs.org/package/@vates/disposable):

```sh
npm install --save @vates/disposable
```

## Usage

This library contains utilities for disposables as defined by the [`promise-toolbox` library](https://github.com/JsCommunity/promise-toolbox#resource-management).

### `deduped(fn, keyFn)`

Creates a new function that wraps `fn` and instead of creating a new disposables at each call, returns copies of the same one when `keyFn` returns the same keys.

Those copies contains the same value and can be disposed independently, the source disposable will only be disposed when all copies are disposed.

`keyFn` is called with the same context and arguments as the wrapping function and must returns an array of keys which will be used to identify which disposables should be grouped together.

```js
import { deduped } from '@vates/disposable/deduped'

// the connection with the passed host will be established once at the first call, then, it will be shared with the next calls
const getConnection = deduped(async function (host)) {
  const connection = new Connection(host)
  return new Disposabe(connection, () => connection.close())
}, host => [host])
```

### `debounceResource(disposable, delay)`

Creates a new disposable with the same value and with a delayed disposer.

On calling this disposer, the source disposable will be disposed when the `delay` is passed.

```js
import { createDebounceResource } from '@vates/disposable/debounceResource'

const debounceResource = createDebounceResource()

// it will wait for 10 seconds before calling the disposer
Disposable.use(debounceResource(getConnection(host), 10e3), connection => {})
```

### `debounceResource.flushAll()`

Disposes all delayed disposers and cancels the delaying of the disposables that are in usage.

```js
import { createDebounceResource } from '@vates/disposable/debounceResource'

const debounceResource = createDebounceResource()

const res1 = await debounceResource(res, 10e3)
const res2 = await debounceResource(res, 10e3)
const res3 = await debounceResource(res, 10e3)

rest1.dispose()
rest2.dispose()
// res3 is in usage

debounceResource.flushAll()
// res1 and res2 are immediately disposed
// res3 will be disposed immediately when its disposer will be called
```

## Contributions

Contributions are _very_ welcomed, either on the documentation or on
the code.

You may:

- report any [issue](https://github.com/vatesfr/xen-orchestra/issues)
  you've encountered;
- fork and create a pull request.

## License

[ISC](https://spdx.org/licenses/ISC) © [Vates SAS](https://vates.fr)

---
_Source: https://npm.io/package/@vates/disposable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
