npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

csv-builder-m

v0.0.1

Published

Create csv formated streams from Arrays of Objects.

Readme

Csvbuilder

Create csv formated streams from Arrays of Objects. CsvBuilder is one of many Csv stream/generator implementations on npm. The goal of CsvBuilder is to create Schema's for csv output and let the consumer spawn as many streams as needed from a single instance to maintain a specific format. This means the user gets control of the headers, the order of the headers, how the headers correspond to consumed objects, virtual properties, value delimiters, and line terminators.

Getting Started


var CsvBuilder = require('csv-builder');

// assuming we have an array of objects that's
// in the format of {fullname: String, email: String, zip: Number}
// but we need csv formated as such: Firstname, Lastname, Email

var usersBuilder = new CsvBuilder({
	// define headers and order of headers
	headers: 'Firstname Lastname Email',
	// define object to header correspondance
	constraints: {
		// Header: property
		'Email': 'email'
		// correspond with a virtual property
		'Lastname': 'lastname'
	}
})
// create virtual 'Firstname'
.virtual('Firstname', function(obj) {
	return obj.name.split(' ')[0];
})
// virtual properties are treated like any propery,
// if it is not defined in the headers, it still needs a constraint
.virtual('lastname', function(obj) {
	return obj.name.split(' ')[1];
});

// From the `usersBuilder` instance we can now spawn readable or tranform streams.

// pipe into a newly created duplex
Model.find().stream()
	.pipe(usersBuilder.createTransformStream())
	.pipe(fs.createWriteStream('output.csv'));

// Create a readable stream from an Array<Object> payload
usersBuilder.createReadStream(payload)
	.pipe(fs.createWriteStream('output.csv'));

Installation

$ npm install csv-builder

Usage

CsvBuilder([options])
  • headers String|Array Space separated headers, or array of headers (required)
  • delimiter String The value delimiter. Default ','
  • terminator String The line terminator. Default '\n'
  • mutate Boolean Mutate incoming objects when creating virtuals. Default true
  • constraints Object {"header": "prop"}

Methods

CsvBuilder#headers(headers)
  • headers String|Array Space separated headers, or array of headers
CsvBuilder#set(header, prop)

Set single or multiple contraints. If header is an object, it will extend any existing constraints, not replace.

  • header String|Object Either object {"header": "property"} Or a string "Header"
  • prop String Property to correspond to header, omit if using object.
CsvBuilder#virtual(prop, fn)

Create a virtual property. Virtual properties are treated the same as normal properties, so if no header matches the virtual property name, or no constraint is set the virtual property will be omitted.

  • prop String Virtual property name
  • fn Function Returns virtual value, takes the object to be created/mutated as the only argument.
CsvBuilder#createReadStream(payload)

Create's a readable stream and consumes the payload.

  • payload Array
CsvBuilder#createTransformStream()

Create's a transform stream. The stream expects either Objects or JSON.