https://github.com/sindresorhus/first-chunk-stream
  
  
    Transform the first chunk in a stream 
    https://github.com/sindresorhus/first-chunk-stream
  
        Last synced: 7 months ago 
        JSON representation
    
Transform the first chunk in a stream
- Host: GitHub
- URL: https://github.com/sindresorhus/first-chunk-stream
- Owner: sindresorhus
- License: mit
- Created: 2014-05-25T15:42:55.000Z (over 11 years ago)
- Default Branch: main
- Last Pushed: 2023-11-01T14:33:15.000Z (almost 2 years ago)
- Last Synced: 2025-03-28T21:31:19.977Z (7 months ago)
- Language: JavaScript
- Size: 38.1 KB
- Stars: 26
- Watchers: 8
- Forks: 5
- Open Issues: 0
- 
            Metadata Files:
            - Readme: readme.md
- Funding: .github/funding.yml
- License: license
- Security: .github/security.md
 
Awesome Lists containing this project
- awesome-nodejs - first-chunk-stream - Buffer and transform the n first bytes of a stream. (Repository / Streams)
- awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream. (Packages / Streams)
- awesome-nodejs-streams - sindresorhus/first-chunk-stream - Buffer and transform the n first bytes of a stream (Modules)
- awesome-node - first-chunk-stream - Transform the first chunk in a stream. (Packages / Streams)
- awesome-nodejs-cn - first-chunk-stream - 转换流中的第一个块. (目录 / 流处理)
- awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream - ★ 19 (Streams)
- awesome-nodejs-cn - first-chunk-stream - **star:26** 转换流中的第一个块 (包 / 流)
- awesome-nodejs-cn - first-chunk-stream - 转换流中的第一个块 (包 / 文件流)
- fucking-awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream. (Packages / Streams)
- fucking-awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream. (Packages / Streams)
README
          # first-chunk-stream
> Buffer and transform the n first bytes of a stream
## Install
```sh
npm install first-chunk-stream
```
## Usage
```js
import fs from 'node:fs';
import getStream from 'get-stream';
import FirstChunkStream from 'first-chunk-stream';
import {uint8ArrayToString} from 'uint8array-extras';
// unicorn.txt => unicorn rainbow
const stream = fs.createReadStream('unicorn.txt')
	.pipe(new FirstChunkStream({chunkSize: 7}, async (chunk, encoding) => {
		return uint8ArrayToString(chunk).toUpperCase();
	}));
const data = await getStream(stream);
if (data.length < 7) {
	throw new Error('Couldn\'t get the minimum required first chunk length');
}
console.log(data);
//=> 'UNICORN rainbow'
```
## API
### FirstChunkStream(options, transform)
`FirstChunkStream` constructor.
#### transform(chunk, encoding)
Type: `Function`
Async function that receives the required `options.chunkSize` bytes.
Expected to return an buffer-like object or `string` or object of form {buffer: `Uint8Array`, encoding: `string`} to send to stream or `firstChunkStream.stop` to end stream right away.
An error thrown from this function will be emitted as stream errors.
Note that the buffer can have a smaller length than the required one. In that case, it will be due to the fact that the complete stream contents has a length less than the `options.chunkSize` value. You should check for this yourself if you strictly depend on the length.
```js
import FirstChunkStream from 'first-chunk-stream';
new FirstChunkStream({chunkSize: 7}, async (chunk, encoding) => {
	return chunk; // Send buffer to stream
});
new FirstChunkStream({chunkSize: 7}, async (chunk, encoding) => {
	return {
		buffer: chunk,
		encoding: encoding,
	}; // Send buffer with encoding to stream
});
new FirstChunkStream({chunkSize: 7}, async (chunk, encoding) => {
	return FirstChunkStream.stop; // End the stream early
});
new FirstChunkStream({chunkSize: 7}, async (chunk, encoding) => {
	throw new Error('Unconditional error'); // Emit stream error
});
```
#### options
Type: `object`
The options object is passed to the [`Duplex` stream](https://nodejs.org/api/stream.html#stream_class_stream_duplex) constructor allowing you to customize your stream behavior. In addition, you can specify the following option:
###### chunkSize
Type: `number`
The number of bytes to buffer.