# ts-resource-pool

> An easy to use resource pool, including support for recycling resources, with excellent TypeScript typings.

Latest version **1.0.0-alpha.5** (published 2018-06-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install ts-resource-pool
pnpm add ts-resource-pool
yarn add ts-resource-pool
bun add ts-resource-pool
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0-alpha.5 |
| Published | 2018-06-18 |
| First published | 2018-06-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=6.0.0 |
| Dependencies | 2 |
| Unpacked size | 5.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5 |
| Maintainers | linusu |
| Keywords | factory, optimisation, performance, pool, pooling, recycle, resource, reuse, throttle |

## Links

- npm: https://www.npmjs.com/package/ts-resource-pool
- Repository: https://github.com/LinusU/ts-resource-pool
- Homepage: https://github.com/LinusU/ts-resource-pool#readme
- Issues: https://github.com/LinusU/ts-resource-pool/issues
- npm.io page: https://npm.io/package/ts-resource-pool

## Dependencies (2)

- [p-try](https://npm.io/package/p-try.md) ^2.0.0
- [p-finally](https://npm.io/package/p-finally.md) ^1.0.0

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.0.0-alpha.5 (latest) — 2018-06-18
- 1.0.0-alpha.4 — 2018-06-12
- 1.0.0-alpha.3 — 2018-06-11
- 1.0.0-alpha.2 — 2018-06-05
- 1.0.0-alpha.1 — 2018-06-05

## README

# Resource Pool

An easy to use resource pool, including support for recycling resources, with excellent TypeScript typings.

## Installation

```sh
npm install --save ts-resource-pool
```

## Usage

A simplified example of writing a connection pooling mail client:

```js
const net = require('net')
const ResourcePool = require('ts-resource-pool')

const factory = {
  async create () {
    const connection = net.createConnection(25, 'aspmx.l.google.com')
    connection.write('HELO LinusU.local\r\n')
    return connection
  },
  async recycle (connection, error) {
    // Create a new connection if an error happened
    if (error) {
      await this.destroy(connection)
      return this.create()
    }

    // Otherwise, just issue a `RSET` command and reuse the connection
    connection.write('RSET\r\n')
    return connection
  },
  async destory (connection) {
    connection.write('QUIT\r\n')
    connection.end()
  }
}

const pool = new ResourcePool(factory, 5)

for (let i = 0; i < 25; i++) {
  pool.use(async (connection) => {
    connection.write('MAIL FROM: <linus@LinusU.local>\r\n')
    connection.write('RCPT TO: <spam@gmail.com>\r\n')
  })
}
```

The `ResourcePool` will make sure that there is never more than 5 connections open at the same time, and it will also reuse the connections instead of closing and opening new sockets.

## API

### `new ResourcePool(factory: Factory, concurrency: number = 1)`

Create a new `ResourcePool` with the specificed factory and concurrency limit.

The `factory` must at the very least provide a `create` function, which returns a fresh resource. This can optionally be an async function.

It can also optionally provide:

- A `destroy` function, that takes a used resource and an optional error that occured, and tears it down.
- A `recycle` function, that takes a used resource and an optional error that occured, and returns a resource (possibly the same) that's ready for use again.

### `ResourcePool#use (fn: (resource: T) => R | PromiseLike<R>): Promise<R>`

Aquire a resource, then execute (possibly async) function `fn`, and finally returns the resource to the pool. Returns a `Promise` of whatever the function `fn` returns.

The resource will be returned even if `fn` throws or returns a rejected `Promise`. In this case, the `Promise` returned will also be rejected with that error.

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