Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sindresorhus/first-chunk-stream
Transform the first chunk in a stream
https://github.com/sindresorhus/first-chunk-stream
Last synced: about 1 month 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 10 years ago)
- Default Branch: main
- Last Pushed: 2023-11-01T14:33:15.000Z (about 1 year ago)
- Last Synced: 2024-04-14T16:31:01.172Z (7 months ago)
- Language: JavaScript
- Size: 38.1 KB
- Stars: 27
- Watchers: 9
- 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-cn - first-chunk-stream - 转换流中的第一个块 (包 / 文件流)
- awesome-nodejs - first-chunk-stream - Buffer and transform the n first bytes of a stream. (Repository / Streams)
- awesome-nodejs-cn - first-chunk-stream - **star:27** 转换流中的第一个块 (包 / 流)
- awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream. (Packages / Streams)
- awesome-nodejs - first-chunk-stream - Transform the first chunk in a stream - ★ 19 (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 - 转换流中的第一个块. (目录 / 流处理)
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.