Skip to content

Main module

Eugene Lazutkin edited this page Jun 3, 2026 · 5 revisions

Main module

The main module creates a parser Duplex stream decorated with emit() from stream-json. This lets you listen for token types as named events instead of inspecting data objects.

Import

import makeParser from 'stream-csv-as-json';

The parser factory is also available as a named export:

import {parser} from 'stream-csv-as-json';

The emit() event sugar is Node-only. On Web Streams, import stream-csv-as-json/web — its default export is parser.asWebStream (a {readable, writable} pair); subscribe to tokens by draining pipeline.readable.

Usage

Event-based processing

import fs from 'node:fs';
import makeParser from 'stream-csv-as-json';

const stream = makeParser();

let rowCount = 0;
stream.on('startArray', () => ++rowCount);
stream.on('stringValue', val => console.log('field:', val));
stream.on('end', () => console.log(`${rowCount} rows`));

fs.createReadStream('data.csv').pipe(stream);

Using parser without emit()

If you don't need named events and prefer the data event with token objects, use parser directly — this avoids the small overhead of emit():

import {parser} from 'stream-csv-as-json';
import fs from 'node:fs';

const pipeline = fs.createReadStream('data.csv').pipe(parser.asStream());

pipeline.on('data', token => console.log(token.name, token.value));

Or use it as a function in a chain() pipeline:

import chain from 'stream-chain';

chain([fs.createReadStream('data.csv'), parser(), token => console.log(token)]);

API

make(options)

Takes optional parser options and returns a Duplex stream with emit() applied. The stream emits named events for each token type (startArray, endArray, startString, endString, stringChunk, stringValue).

parser (named export)

The parser factory function — import {parser} from 'stream-csv-as-json', the same value as the default export of stream-csv-as-json/parser.js.

Clone this wiki locally