# chunking-streams

> NodeJS chunking streams

Latest version **0.0.8** (published 2015-06-14) · MIT license · 0 weekly downloads

## Install

```sh
npm install chunking-streams
pnpm add chunking-streams
yarn add chunking-streams
bun add chunking-streams
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.8 |
| Published | 2015-06-14 |
| First published | 2013-10-08 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10 |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 33 |
| Author | Oleg Elifantiev |
| Maintainers | olegas |
| Keywords | stream, chunking, s3, gzip |

## Links

- npm: https://www.npmjs.com/package/chunking-streams
- Repository: https://github.com/Olegas/node-chunking-streams
- Issues: https://github.com/Olegas/node-chunking-streams/issues
- npm.io page: https://npm.io/package/chunking-streams

## Alternatives

- [lodash.startswith](https://npm.io/package/lodash.startswith.md) — 769.7K weekly downloads
- [@tarojs/service](https://npm.io/package/@tarojs/service.md) — 33.9K weekly downloads
- [io.extendreality.tilia.indicators.spatialtargets.unity](https://npm.io/package/io.extendreality.tilia.indicators.spatialtargets.unity.md) — 131 weekly downloads
- [@rtarojs/taro](https://npm.io/package/@rtarojs/taro.md) — 90 weekly downloads
- [node-branch-io](https://npm.io/package/node-branch-io.md) — 50 weekly downloads

## Recent versions

- 0.0.8 (latest) — 2015-06-14
- 0.0.7-b1 — 2014-08-13
- 0.0.6 — 2014-08-02
- 0.0.5 — 2014-03-01
- 0.0.4 — 2014-02-24
- 0.0.3 — 2013-10-21
- 0.0.2 — 2013-10-08
- 0.0.1 — 2013-10-08

## README

node-chunking-streams
=====================

[![Build Status](https://travis-ci.org/Olegas/node-chunking-streams.png?branch=master)](https://travis-ci.org/Olegas/node-chunking-streams)
[![Coverage Status](https://coveralls.io/repos/Olegas/node-chunking-streams/badge.png)](https://coveralls.io/r/Olegas/node-chunking-streams)
[![NPM version](https://badge.fury.io/js/chunking-streams.png)](http://badge.fury.io/js/chunking-streams)
[![Dependency Status](https://gemnasium.com/Olegas/node-chunking-streams.png)](https://gemnasium.com/Olegas/node-chunking-streams)

A set of Node.js streams to process data in chunks

 1. LineCounter
 1. SeparatorChunker
 1. SizeChunker
 1. GzipChunker
 1. S3MultipartUploader

To intstall with NPM

```
npm install chunking-streams
```

To use with Node.JS

```javascript

var chunkingStreams = require('chunking-streams');

var LineCounter = chunkingStreams.LineCounter;
var SeparatorChunker = chunkingStreams.SeparatorChunker;
var SizeChunker = chunkingStreams.SizeChunker;

// ad so on...
```


LineCounter
-----------

Simple `TransformStream` which counts lines (`\n` is a separator) and emit data chunks contains exactly specified number
 of them.

### Configuration

```javascript
new LineCounter({
    numLines: 1,        // number of lines in a single output chunk. 1 is default
    flushTail: false    // on stream end, flush or not remaining buffer. false is default
});
```

SeparatorChunker
----------------


Split incoming data into chunks based on specified separator. After each separator found data chunk is emitted.
By default separator sequence is set to `\n`, so it is equals to LineCounter with `numLines: 1`

### Configuration

```javascript
new SeparatorChunker({
    separator: '\n', // separator sequence
    flushTail: false // on stream end, flush or not remaining buffer. false is default
});
```

SizeChunker
-----------

Split streams into chunks having exactly specified number of bytes. It is **object mode** stream!
Each data chunk is an object with the following fields:

  - id: number of chunk (starts from 0)
  - data: `Buffer` with data

SizeChunker has 2 additional events:

  - chunkStart: emitted on each chunk start.
  - chunkEnd: emitted on each chunk finish.

Both event handlers must accept two arguments:

  - id: number of chunk
  - done: callback function, **must** be called then processing is completed

If some tail data is not fit fully into specified chunk size, it can be emitted at the end if `flushTail` flag is set.

### Configuration

```javascript
new SizeChunker({
    chunkSize: 1024 // must be a number greater than zero.
    flushTail: true // flush or not remainder of an incoming stream. Defaults to false
});
```

### Example
```javascript
var input = fs.createReadStream('./input'),
    chunker = new SizeChunker({
        chunkSize: 1024
    }),
    output;

chunker.on('chunkStart', function(id, done) {
    output = fs.createWriteStream('./output-' + id);
    done();
});

chunker.on('chunkEnd', function(id, done) {
    output.end();
    done();
});

chunker.on('data', function(chunk) {
    output.write(chunk.data);
});

input.pipe(chunker);
```

### S3MultipartUploader

**INCOMPLETE**

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