Socket
Socket
Sign inDemoInstall

peek-stream

Package Overview
Dependencies
16
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    peek-stream

Transform stream that lets you peek the first line before deciding how to parse it


Version published
Weekly downloads
2.9M
decreased by-18.34%
Maintainers
1
Install size
247 kB
Created
Weekly downloads
 

Package description

What is peek-stream?

The peek-stream npm package is a Node.js module that allows you to peek at the beginning of a stream to determine its content before deciding how to process it. This can be useful when you need to inspect the start of a stream to make decisions based on its initial data without consuming the stream entirely.

What are peek-stream's main functionalities?

Peeking at stream content

This code sample demonstrates how to use peek-stream to inspect the first 10 bytes of a file stream. If the file starts with 'PNG', it swaps the stream with a new PngDecoderStream; otherwise, it continues with the original stream.

const peek = require('peek-stream');
const fs = require('fs');

const stream = fs.createReadStream('example.txt');
const peekStream = peek({ maxBuffer: 10 }, function(data, swap) {
  // data is the first 10 bytes of the stream
  if (data.toString().startsWith('PNG')) {
    swap(null, new PngDecoderStream());
  } else {
    swap();
  }
});

stream.pipe(peekStream).pipe(process.stdout);

Other packages similar to peek-stream

Readme

Source

peek-stream

Transform stream that lets you peek the first line before deciding how to parse it

npm install peek-stream

build status dat

Usage

var peek = require('peek-stream')
var ldjson = require('ldjson-stream')
var csv = require('csv-parser')

var isCSV = function(data) {
  return data.toString().indexOf(',') > -1
}

var isJSON = function(data) {
  try {
    JSON.parse(data)
    return true
  } catch (err) {
    return false
  }
}

// call parser to create a new parser
var parser = function() {
  return peek(function(data, swap) {
    // maybe it is JSON?
    if (isJSON(data)) return swap(null, ldjson())

    // maybe it is CSV?
    if (isCSV(data)) return swap(null, csv())

    // we do not know - bail
    swap(new Error('No parser available'))
  })
}

The above parser will be able to parse both line delimited JSON and CSV

var parse = parser()

parse.write('{"hello":"world"}\n{"hello":"another"}\n')
parse.on('data', function(data) {
  console.log(data) // prints {hello:'world'} and {hello:'another'}
})

Or

var parse = parser()

parse.write('test,header\nvalue-1,value-2\n')
parse.on('data', function(data) {
  console.log(data) // prints {test:'value-1', header:'value-2'}
})

Per default data is the first line (or the first 65535 bytes if no newline is found). To change the max buffer pass an options map to the constructor

var parse = peek({
  maxBuffer: 10000
}, function(data, swap) {
  ...
})

If you want to emit an error if no newline is found set strict: true as well.

License

MIT

Keywords

FAQs

Last updated on 21 Mar 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc