Package detail

extra-defer

BlackGlory410MIT0.3.1

sh npm install --save extra-defer # or yarn add extra-defer

readme

extra-defer

Install

npm install --save extra-defer
# or
yarn add extra-defer

Usage

import { Destructor } from 'extra-defer'

const destructor = new Destructor()
try {
  const handle = open()
  destructor.defer(() => handle.close())
  // ...
} finally {
  await destructor.execute()
}

API

Constructor

class Constructor<Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: (...args: Args) => Awaitable<unknown>): void
  remove(callback: (...args: Args) => Awaitable<unknown>): void
  clear(): void

  execute(...args: Args): Promise<void>
  executeSettled(...args: Args): Promise<void>

  all(concurrency: number = Infinity, ...args: Args): Promise<void>
  allSettled(concurrency: number = Infinity, ...args: Args): Promise<void>
}

Callbacks are executed in same order of defer.

Destructor

class Destructor<Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: (...args: Args) => Awaitable<unknown>): void
  remove(callback: (...args: Args) => Awaitable<unknown>): void
  clear(): void

  execute(...args: Args): Promise<void>
  executeSettled(...args: Args): Promise<void>

  all(concurrency: number = Infinity, ...args: Args): Promise<void>
  allSettled(concurrency: number = Infinity, ...args: Args): Promise<void>
}

Callbacks are executed in reverse order of defer.

SyncConstructor

class SyncConstructor<Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: (...args: Args) => unknown): void
  remove(callback: (...args: Args) => unknown): void
  clear(): void

  execute(...args: Args): void
  executeSettled(...args: Args): void
}

Callbacks are executed in same order of defer.

SyncDestructor

class SyncDestructor<Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: (...args: Args) => unknown): void
  remove(callback: (...args: Args) => unknown): void
  clear(): void

  execute(...args: Args): void
  executeSettled(...args: Args): void
}

Callbacks are executed in reverse order of defer.

GeneratorConstructor

type ICallback<Yield, Next, Args extends unknown[]> = (...args: Args) =>
| void
| Generator<Yield, void, Next>

class GeneratorConstructor<Yield = unknown, Next = unknown, Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: ICallback<Yield, Next, Args>): void
  remove(callback: ICallback<Yield, Next, Args>): void
  clear(): void

  execute(...args: Args): Generator<Yield, void, Next>
  executeSettled(...args: Args): Generator<Yield, void, Next>
}

Callbacks are executed in same order of defer.

GeneratorDestructor

type ICallback<Yield, Next, Args extends unknown[]> = (...args: Args) =>
| void
| Generator<Yield, void, Next>

class GeneratorDestructor<Yield = unknown, Next = unknown, Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: ICallback<Yield, Next, Args>): void
  remove(callback: ICallback<Yield, Next, Args>): void
  clear(): void

  execute(...args: Args): Generator<Yield, void, Next>
  executeSettled(...args: Args): Generator<Yield, void, Next>
}

Callbacks are executed in reverse order of defer.

AsyncGeneratorConstructor

type ICallback<Yield, Next, Args extends unknown[]> = (...args: Args) =>
| void
| Generator<Yield, void, Next>
| AsyncGenerator<Yield, void, Next>

class AsyncGeneratorConstructor<
  Yield = unknown
, Next = unknown
, Args extends unknown[] = []
> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: ICallback<Yield, Next, Args>): void
  remove(callback: ICallback<Yield, Next, Args>): void
  clear(): void

  execute(...args: Args): AsyncGenerator<Yield, void, Next>
  executeSettled(...args: Args): AsyncGenerator<Yield, void, Next>
}

Callbacks are executed in same order of defer.

AsyncGeneratorDestructor

type ICallback<Yield, Next, Args extends unknown[]> = (...args: Args) =>
| void
| Generator<Yield, void, Next>
| AsyncGenerator<Yield, void, Next>

class AsyncGeneratorDestructor<Yield = unknown, Next = unknown, Args extends unknown[] = []> {
  get size(): number

  constructor(options?: { autoClear?: boolean = true })

  defer(callback: ICallback<Yield, Next, Args>): void
  remove(callback: ICallback<Yield, Next, Args>): void
  clear(): void

  execute(...args: Args): AsyncGenerator<Yield, void, Next>
  executeSettled(...args: Args): AsyncGenerator<Yield, void, Next>
}

Callbacks are executed in reverse order of defer.

changelog

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

0.3.1 (2024-08-16)

Features

  • add clear and options.autoClear (b8e24ce)
  • add arguments support (37544f4)

0.3.0 (2024-04-17)

⚠ BREAKING CHANGES

    • It requires Node.js >= v18.17.0
  • CommonJS => ESM

Features

  • add generator-related functions (fb262c5)

0.2.8 (2023-06-10)

Bug Fixes

0.2.7 (2022-12-21)

0.2.6 (2022-12-21)

Features

0.2.5 (2022-09-17)

Features

  • add SyncConstructor, SyncDestructor (ed0abb5)

0.2.4 (2022-08-06)

0.2.3 (2022-08-01)

0.2.2 (2022-04-23)

Features

0.2.1 (2022-04-23)

0.2.0 (2022-02-21)

Features

0.1.1 (2022-02-15)

0.1.0 (2022-02-15)

Features