You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 7-8.RSVP
Socket
Socket
Sign inDemoInstall

dicer

Package Overview
Dependencies
3
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

dicer

A very fast streaming multipart parser for node.js


Version published
Maintainers
1
Created

Package description

What is dicer?

The dicer npm package is a very fast streaming multipart parser that can be used to parse multipart/form-data input. It is particularly useful for handling file uploads and multipart HTTP requests in Node.js applications.

What are dicer's main functionalities?

Multipart Parsing

This code sets up a new Dicer instance with a specified boundary and listens for 'part' events to process each part of the multipart data. It also listens for the 'finish' event to know when all parts have been processed.

const Dicer = require('dicer');
const d = new Dicer({ boundary: '---------------------------168072824752491622650073' });
d.on('part', function(p) {
  console.log('New part!');
  p.on('data', function(data) {
    console.log('Part data: ' + data.toString());
  });
  p.on('end', function() {
    console.log('End of part');
  });
});
d.on('finish', function() {
  console.log('End of parts');
});
d.write('some multipart data buffer');

Other packages similar to dicer

Readme

Source

Description

A very fast streaming multipart parser for node.js.

Benchmarks can be found here.

Requirements

  • node.js -- v10.0.0 or newer

Install

npm install dicer

Examples

  • Parse an HTTP form upload
const { inspect } = require('util');
const http = require('http');

const Dicer = require('dicer');

// Quick and dirty way to parse multipart boundary
const RE_BOUNDARY =
  /^multipart\/.+?(?:; boundary=(?:(?:"(.+)")|(?:([^\s]+))))$/i;
const HTML = Buffer.from(`
  <html><head></head><body>
    <form method="POST" enctype="multipart/form-data">
      <input type="text" name="textfield"><br />
      <input type="file" name="filefield"><br />
      <input type="submit">
    </form>
  </body></html>
`);
const PORT = 8080;

http.createServer((req, res) => {
  let m;
  if (req.method === 'POST'
      && req.headers['content-type']
      && (m = RE_BOUNDARY.exec(req.headers['content-type']))) {
    const d = new Dicer({ boundary: m[1] || m[2] });

    d.on('part', (p) => {
      console.log('New part!');
      p.on('header', (header) => {
        for (const h in header) {
          console.log(
            `Part header: k: ${inspect(h)}, v: ${inspect(header[h])}`
          );
        }
      });
      p.on('data', (data) => {
        console.log(`Part data: ${inspect(data.toString())}`);
      });
      p.on('end', () => {
        console.log('End of part\n');
      });
    });
    d.on('finish', () => {
      console.log('End of parts');
      res.writeHead(200);
      res.end('Form submission successful!');
    });
    req.pipe(d);
  } else if (req.method === 'GET' && req.url === '/') {
    res.writeHead(200);
    res.end(HTML);
  } else {
    res.writeHead(404);
    res.end();
  }
}).listen(PORT, () => {
  console.log(`Listening for requests on port ${PORT}`);
});

API

Dicer is a Writable stream

Dicer (special) events

  • finish() - Emitted when all parts have been parsed and the Dicer instance has been ended.

  • part(< PartStream >stream) - Emitted when a new part has been found.

  • preamble(< PartStream >stream) - Emitted for preamble if you should happen to need it (can usually be ignored).

  • trailer(< Buffer >data) - Emitted when trailing data was found after the terminating boundary (as with the preamble, this can usually be ignored too).

Dicer methods

  • (constructor)(< object >config) - Creates and returns a new Dicer instance with the following valid config settings:

    • boundary - string - This is the boundary used to detect the beginning of a new part.

    • headerFirst - boolean - If true, preamble header parsing will be performed first.

    • maxHeaderPairs - integer - The maximum number of header key=>value pairs to parse Default: 2000 (same as node's http).

  • setBoundary(< string >boundary) - (void) - Sets the boundary to use for parsing and performs some initialization needed for parsing. You should only need to use this if you set headerFirst to true in the constructor and are parsing the boundary from the preamble header.

PartStream is a Readable stream

PartStream (special) events

  • header(< object >header) - An object containing the header for this particular part. Each property value is an array of one or more string values.

Keywords

FAQs

Package last updated on 19 Dec 2021

Did you know?

Socket

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
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc