peek-readable
Read and peek from a readable stream
Last updated 3 years ago by borewit .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ gnpm install peek-readable 
SYNC missed versions from official npm registry.

Node.js CI NPM version npm downloads Coverage Status Codacy Badge Total alerts Language grade: JavaScript Known Vulnerabilities

peek-readable

A promise based asynchronous stream reader, which makes reading from a stream easy.

Allows to read and peek from a Readable Stream

Note that peek-readable was formally released as then-read-stream.

Usage

Installation

npm install --save peek-readable

The peek-readable contains one class: StreamReader, which reads from a stream.Readable.

Compatibility

Module: version 5 migrated from CommonJS to pure ECMAScript Module (ESM). JavaScript is compliant with ECMAScript 2019 (ES10). Requires Node.js ≥ 14.16 engine.

Examples

In the following example we read the first 16 bytes from a stream and store them in our buffer. Source code of examples can be found here.

import fs from 'node:fs';
import { StreamReader } from 'peek-readable';

(async () => {
  const readable = fs.createReadStream('JPEG_example_JPG_RIP_001.jpg');
  const streamReader = new StreamReader(readable);
  const uint8Array = new Uint8Array(16);
  const bytesRead = await streamReader.read(uint8Array, 0, 16);;
  // buffer contains 16 bytes, if the end-of-stream has not been reached
})();

End-of-stream detection:

(async () => {

  const fileReadStream = fs.createReadStream('JPEG_example_JPG_RIP_001.jpg');
  const streamReader = new StreamReader(fileReadStream);
  const buffer = Buffer.alloc(16); // or use: new Uint8Array(16);

  try {
    await streamReader.read(buffer, 0, 16);
    // buffer contains 16 bytes, if the end-of-stream has not been reached
  } catch(error) {
    if (error instanceof EndOfStreamError) {
      console.log('End-of-stream reached');
    }
  }
})();

With peek you can read ahead:

import fs from 'node:fs';
import { StreamReader } from 'peek-readable';

const fileReadStream = fs.createReadStream('JPEG_example_JPG_RIP_001.jpg');
const streamReader = new StreamReader(fileReadStream);
const buffer = Buffer.alloc(20);

(async () => {
  let bytesRead = await streamReader.peek(buffer, 0, 3);
  if (bytesRead === 3 && buffer[0] === 0xFF && buffer[1] === 0xD8 && buffer[2] === 0xFF) {
    console.log('This is a JPEG file');
  } else {
    throw Error('Expected a JPEG file');
  }

  bytesRead = await streamReader.read(buffer, 0, 20); // Read JPEG header
  if (bytesRead === 20) {
    console.log('Got the JPEG header');
  } else {
    throw Error('Failed to read JPEG header');
  }
})();

Current Tags

  • 5.0.0-alpha.5                                ...           esm (3 years ago)
  • 5.0.0                                ...           latest (2 years ago)

16 Versions

  • 5.0.0                                ...           2 years ago
  • 4.1.0                                ...           3 years ago
  • 5.0.0-alpha.5                                ...           3 years ago
  • 4.0.2                                ...           3 years ago
  • 5.0.0-alpha.4                                ...           3 years ago
  • 4.0.1                                ...           3 years ago
  • 5.0.0-alpha.3                                ...           3 years ago
  • 5.0.0-alpha.2                                ...           3 years ago
  • 5.0.0-alpha.1                                ...           3 years ago
  • 5.0.0-alpha.0                                ...           3 years ago
  • 4.0.0                                ...           3 years ago
  • 3.1.4                                ...           3 years ago
  • 3.1.3                                ...           4 years ago
  • 3.1.2                                ...           4 years ago
  • 3.1.1                                ...           4 years ago
  • 3.1.0                                ...           5 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 8
Last Day 0
Last Week 8
Last Month 0
Dependencies (0)
None
Dev Dependencies (16)
Dependents (1)

Copyright 2013 - present © cnpmjs.org | Home |