# @flemist/abort-controller-fast

> Custom very fast AbortController implementation and interface. With the possibility of converting/connecting with a standard AbortController (version of NodeJS 18)

Latest version **1.0.0** (published 2023-08-06) · Unlimited Free license · 0 weekly downloads

## Install

```sh
npm install @flemist/abort-controller-fast
pnpm add @flemist/abort-controller-fast
yarn add @flemist/abort-controller-fast
bun add @flemist/abort-controller-fast
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2023-08-06 |
| First published | 2022-05-24 |
| Weekly downloads | 0 |
| License | Unlimited Free |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 17.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Nikolay Makhonin |
| Maintainers | nikolay_makhonin |
| Keywords | AbortController, AbortSignal, fast |

## Links

- npm: https://www.npmjs.com/package/@flemist/abort-controller-fast
- Repository: https://github.com/NikolayMakhonin/abort-controller
- Issues: https://github.com/NikolayMakhonin/abort-controller/issues
- npm.io page: https://npm.io/package/@flemist/abort-controller-fast

## Dependencies (1)

- [tslib](https://npm.io/package/tslib.md) ^2.4.0

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2023-08-06
- 0.0.6 — 2022-07-09
- 0.0.5 — 2022-06-22
- 0.0.4 — 2022-06-22
- 0.0.3 — 2022-06-21
- 0.0.2 — 2022-06-16
- 0.0.0 — 2022-05-24

## README

[![NPM Version][npm-image]][npm-url]
[![NPM Downloads][downloads-image]][downloads-url]
[![Build Status][github-image]][github-url]
[![Test Coverage][coveralls-image]][coveralls-url]

Custom very fast AbortController implementation and interface with the possibility of converting/connecting with the standard AbortController (version of NodeJS 18).
This is about 100 times faster than built-ins implementations.

# Interface
```ts
class AbortError extends Error {
  readonly reason?: TAbortReason
  constructor(message?: string, reason?: TAbortReason) {
    
  }
}

type IUnsubscribe = () => void

interface IAbortSignalFast {
  readonly aborted: boolean
  readonly reason: any

  /**
   * just throws reason if aborted.
   */
  throwIfAborted()

  /**
   * It will immediately run the callback if it was aborted.
   * It will prevent re-subscribing if it has not been aborted.
   */
  subscribe(callback: (this: this, reason: any) => void): IUnsubscribe
}

interface IAbortControllerFast<TSignal extends IAbortSignalFast = IAbortSignalFast> {
  readonly signal: TSignal

  /**
   * The reason will be converted to AbortError if it is not undefined.
   */
  abort(reason: any): void
}
```

# Usage
```ts
import { AbortControllerFast } from '@flemist/abort-controller-fast'

const abortControllerFast = new AbortControllerFast()
const unsubscribe = abortControllerFast.signal.subscribe(function (reason) {
  console.log(this) // this === abortControllerFast.signal
  console.log(reason) // reason === abortControllerFast.signal.reason
})
unsubscribe() // there is no point to unsubscribe if abortControllerFast was aborted
abortControllerFast.abort('some reason')
abortControllerFast.signal.throwIfAborted()
```

# Convert / Connecting with the standard AbortController

```ts
import {
  toAbortSignal,
  toAbortSignalFast,
  toAbortController,
  toAbortControllerFast,
} from '@flemist/abort-controller-fast'
import {AbortControllerImpl} from '@flemist/abort-controller'
import {IAbortControllerFast} from './contracts'

let abortSignalFast: IAbortSignalFast
let abortControllerFast: IAbortControllerFast
let abortSignal: AbortSignal
let abortController: AbortController

// convert to a built-in implementation of AbortController/AbortSignal
abortController = toAbortController(abortControllerFast, new AbortControllerImpl())
abortSignal = toAbortSignal(abortSignalFast, new AbortControllerImpl())

// convert to a custom implementation of the standard AbortController/AbortSignal intetface
abortController = toAbortController(abortControllerFast, new AbortController())
abortSignal = toAbortSignal(abortSignalFast, new AbortController())

// convert standard AbortController/AbortSignal to the fast abort controller
abortControllerFast = toAbortControllerFast(abortController, new AbortControllerFast())
abortSignalFast = toAbortSignalFast(abortSignal, new AbortControllerFast())
```

[npm-image]: https://img.shields.io/npm/v/@flemist/abort-controller.svg
[npm-url]: https://npmjs.org/package/@flemist/abort-controller
[downloads-image]: https://img.shields.io/npm/dm/@flemist/abort-controller.svg
[downloads-url]: https://npmjs.org/package/@flemist/abort-controller
[github-image]: https://github.com/NikolayMakhonin/abort-controller/actions/workflows/test.yml/badge.svg
[github-url]: https://github.com/NikolayMakhonin/abort-controller/actions
[coveralls-image]: https://coveralls.io/repos/github/NikolayMakhonin/abort-controller/badge.svg
[coveralls-url]: https://coveralls.io/github/NikolayMakhonin/abort-controller

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