# streamqueue

> StreamQueue pipe the queued streams one by one in order to preserve their content order.

Latest version **2.0.0** (published 2024-07-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install streamqueue
pnpm add streamqueue
yarn add streamqueue
bun add streamqueue
```

## Health

**Score 45/100 (D)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2024-07-18 |
| First published | 2014-01-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=20.11.1 |
| Dependencies | 1 |
| Unpacked size | 129.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 62 |
| Author | Nicolas Froidure |
| Maintainers | nfroidure |
| Keywords | queue, streaming, stream, async, pipe |

## Links

- npm: https://www.npmjs.com/package/streamqueue
- Repository: https://github.com/nfroidure/StreamQueue
- Issues: https://github.com/nfroidure/StreamQueue/issues
- npm.io page: https://npm.io/package/streamqueue

## Dependencies (1)

- [yerror](https://npm.io/package/yerror.md) ^8.0.0

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2024-07-18
- 0.1.2 (beta) — 2014-07-19
- 1.1.2 — 2017-12-03
- 1.1.1 — 2015-08-27
- 1.1.0 — 2015-06-09
- 1.0.0 — 2015-06-08
- 0.1.3 — 2015-02-14
- 0.1.1 — 2014-05-27
- 0.1.0 — 2014-05-25
- 0.0.7 — 2014-04-26
- 0.0.6 — 2014-03-29
- 0.0.5 — 2014-02-21
- 0.0.4 — 2014-02-05
- 0.0.3 — 2014-02-03
- 0.0.2 — 2014-01-22
- … 1 more at https://npm.io/package/streamqueue/versions

## README

[//]: # ( )
[//]: # (This file is automatically generated by a `metapak`)
[//]: # (module. Do not change it  except between the)
[//]: # (`content:start/end` flags, your changes would)
[//]: # (be overridden.)
[//]: # ( )
# streamqueue
> StreamQueue pipe the queued streams one by one in order to preserve their content order.

[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nfroidure/streamqueue/blob/main/LICENSE)


[//]: # (::contents:start)

## Usage

Install the [npm module](https://npmjs.org/package/streamqueue):

```sh
npm install streamqueue --save
```

Then, in your scripts:

```js
import { StreamQueue } from 'streamqueue';
import { createReadStream } from 'node:fs';

const queue = new StreamQueue(
  createReadStream('input.txt'),
  createReadStream('input2.txt'),
  createReadStream('input3.txt'),
).pipe(process.stdout);
```

StreamQueue also accept functions returning streams, the above can be written
like this, doing system calls only when piping:

```js
import { queueStreams } = require('streamqueue');
import { createReadStream } from 'node:fs';

const queue = queueStreams(
  createReadStream.bind(null, 'input.txt'),
  createReadStream.bind(null, 'input2.txt'),
  createReadStream.bind(null, 'input3.txt'),
).pipe(process.stdout);
```

Object-oriented traditionnal API offers more flexibility:

```js
import { StreamQueue } from 'streamqueue';
import { createReadStream } from 'node:fs';

const queue = new StreamQueue();

queue.queue(
  createReadStream('input.txt'),
  createReadStream('input2.txt'),
  createReadStream('input3.txt'),
);
queue.done();

queue.pipe(process.stdout);
```

You can also chain StreamQueue methods like that:

```js
import StreamQueue from 'streamqueue';
import { createReadStream } from 'node:fs';

new StreamQueue()
  .queue(createReadStream('input.txt'))
  .queue(createReadStream('input2.txt'))
  .queue(createReadStream('input3.txt'))
  .done()
  .pipe(process.stdout);
```

You can queue new streams at any moment until you call the done() method. So the
created stream will not fire the end event until done() call.

## Stats

[![NPM](https://nodei.co/npm/streamqueue.png?downloads=true&stars=true)](https://nodei.co/npm/streamqueue/)
[![NPM](https://nodei.co/npm-dl/streamqueue.png)](https://nodei.co/npm/streamqueue/)

## Contributing

Feel free to propose your code if you agree with publishing it under the MIT
license.

[//]: # (::contents:end)

# API
## Classes

<dl>
<dt><a href="#StreamQueue">StreamQueue</a></dt>
<dd><p>Pipe queued streams sequentially</p>
</dd>
</dl>

## Functions

<dl>
<dt><a href="#queueObjectStreams">queueObjectStreams(options, ...streams)</a> ⇒</dt>
<dd><p>Create a new queue in object mode and pipe given streams and end if some</p>
</dd>
<dt><a href="#queueStreams">queueStreams(options, ...streams)</a> ⇒</dt>
<dd><p>Create a new queue and pipe given streams and end if some</p>
</dd>
</dl>

<a name="StreamQueue"></a>

## StreamQueue
Pipe queued streams sequentially

**Kind**: global class  

* [StreamQueue](#StreamQueue)
    * [new StreamQueue(options, ...streams)](#new_StreamQueue_new)
    * [.queue(...streams)](#StreamQueue+queue) ⇒
    * [.done(...streams)](#StreamQueue+done) ⇒

<a name="new_StreamQueue_new"></a>

### new StreamQueue(options, ...streams)
Create a new queue and pipe given streams and end if some

**Returns**: StreamQueue  

| Param | Type | Description |
| --- | --- | --- |
| options | <code>Object</code> | The queue options |
| options.objectMode | <code>boolean</code> | Operate in object mode |
| options.pauseFlowingStream | <code>boolean</code> | Pause given streams that are flowing |
| options.resumeFlowingStream | <code>boolean</code> | Resume given streams that are flowing |
| ...streams | <code>Readable</code> \| <code>function</code> | The stream or stream returning function to pipe in |

<a name="StreamQueue+queue"></a>

### streamQueue.queue(...streams) ⇒
Queue each stream given in argument

**Kind**: instance method of [<code>StreamQueue</code>](#StreamQueue)  
**Returns**: StreamQueue  

| Param | Type | Description |
| --- | --- | --- |
| ...streams | <code>Readable</code> \| <code>function</code> | The stream or stream returning function to pipe in |

<a name="StreamQueue+done"></a>

### streamQueue.done(...streams) ⇒
Queue each stream given in argument and end

**Kind**: instance method of [<code>StreamQueue</code>](#StreamQueue)  
**Returns**: StreamQueue  

| Param | Type | Description |
| --- | --- | --- |
| ...streams | <code>Readable</code> \| <code>function</code> | The stream or stream returning function to pipe in |

<a name="queueObjectStreams"></a>

## queueObjectStreams(options, ...streams) ⇒
Create a new queue in object mode and pipe given streams and end if some

**Kind**: global function  
**Returns**: StreamQueue  

| Param | Type | Description |
| --- | --- | --- |
| options | <code>Object</code> | The queue options |
| ...streams | <code>Readable</code> \| <code>function</code> | The stream or stream returning function to pipe in |

<a name="queueStreams"></a>

## queueStreams(options, ...streams) ⇒
Create a new queue and pipe given streams and end if some

**Kind**: global function  
**Returns**: StreamQueue  

| Param | Type | Description |
| --- | --- | --- |
| options | <code>Object</code> | The queue options |
| ...streams | <code>Readable</code> \| <code>function</code> | The stream or stream returning function to pipe in |


# Authors
- [Nicolas Froidure](https://insertafter.com/en/index.html)

# License
[MIT](https://github.com/nfroidure/streamqueue/blob/main/LICENSE)

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