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 🙏

© 2024 – Pkg Stats / Ryan Hefner

csv-writer-pipe-allowed

v1.0.1

Published

Convert objects/arrays into a CSV string or write them into a CSV file

Downloads

11

Readme

Build Status Coverage Status Code Climate

CSV Writer

Convert objects/arrays into a CSV string or write them into a file. It respects RFC 4180 for the output CSV format.

Prerequisite

  • Node version 4 or above

Usage

The example below shows how you can write records defined as the array of objects into a file.

const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
    path: 'path/to/file.csv',
    header: [
        {id: 'name', title: 'NAME'},
        {id: 'lang', title: 'LANGUAGE'}
    ]
});

const records = [
    {name: 'Bob',  lang: 'French, English'},
    {name: 'Mary', lang: 'English'}
];

csvWriter.writeRecords(records)       // returns a promise
    .then(() => {
        console.log('...Done');
    });

// This will produce a file path/to/file.csv with following contents:
//
//   NAME,LANGUAGE
//   Bob,"French, English"
//   Mary,English

You can keep writing records into the same file by calling writeRecords multiple times (but need to wait for the fulfillment of the promise of the previous writeRecords call).

// In an `async` function
await csvWriter.writeRecords(records1)
await csvWriter.writeRecords(records2)
...

However, if you need to keep writing large data to a certain file, you would want to create node's transform stream and use CsvStringifier, which is explained later, inside it , and pipe the stream into a file write stream.

If you don't want to write a header line, don't give title to header elements and just give field IDs as a string.

const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
    path: 'path/to/file.csv',
    header: ['name', 'lang']
});

If each record is defined as an array, use createArrayCsvWriter to get an csvWriter.

const createCsvWriter = require('csv-writer').createArrayCsvWriter;
const csvWriter = createCsvWriter({
    header: ['NAME', 'LANGUAGE'],
    path: 'path/to/file.csv'
});

const records = [
    ['Bob',  'French, English'],
    ['Mary', 'English']
];

csvWriter.writeRecords(records)       // returns a promise
    .then(() => {
        console.log('...Done');
    });

// This will produce a file path/to/file.csv with following contents:
//
//   NAME,LANGUAGE
//   Bob,"French, English"
//   Mary,English

If you just want to get a CSV string but don't want to write into a file, you can use createObjectCsvStringifier (or createArrayCsvStringifier) to get an csvStringifier.

const createCsvStringifier = require('csv-writer').createObjectCsvStringifier;
const csvStringifier = createCsvStringifier({
    header: [
        {id: 'name', title: 'NAME'},
        {id: 'lang', title: 'LANGUAGE'}
    ]
});

const records = [
    {name: 'Bob',  lang: 'French, English'},
    {name: 'Mary', lang: 'English'}
];

console.log(csvStringifier.getHeaderString());
// => 'NAME,LANGUAGE\n'

console.log(csvStringifier.stringifyRecords(records));
// => 'Bob,"French, English"\nMary,English\n'

API

createObjectCsvWriter(params)

Parameters:
  • params <Object>
    • path <string>

      Path to a write file

    • header <Array<{id, title}|string>>

      Array of objects (id and title properties) or strings (field IDs). A header line will be written to the file only if given as an array of objects.

    • fieldDelimiter <string> (optional)

      Default: ,. Only either comma , or semicolon ; or | is allowed.

    • recordDelimiter <string> (optional)

      Default: \n. Only either LF (\n) or CRLF (\r\n) is allowed.

    • headerIdDelimiter <string> (optional)

      Default: undefined. Give this value to specify a path to a value in a nested object.

    • alwaysQuote <boolean> (optional)

      Default: false. Set it to true to double-quote all fields regardless of their values.

    • encoding <string> (optional)

      Default: utf8.

    • append <boolean> (optional)

      Default: false. When true, it will append CSV records to the specified file. If the file doesn't exist, it will create one.

      NOTE: A header line will not be written to the file if true is given.

Returns:
  • <CsvWriter>

createArrayCsvWriter(params)

Parameters:
  • params <Object>
    • path <string>

      Path to a write file

    • header <Array<string>> (optional)

      Array of field titles

    • fieldDelimiter <string> (optional)

      Default: ,. Only either comma , or semicolon ; or | is allowed.

    • recordDelimiter <string> (optional)

      Default: \n. Only either LF (\n) or CRLF (\r\n) is allowed.

    • alwaysQuote <boolean> (optional)

      Default: false. Set it to true to double-quote all fields regardless of their values.

    • encoding <string> (optional)

      Default: utf8.

    • append <boolean> (optional)

      Default: false. When true, it will append CSV records to the specified file. If the file doesn't exist, it will create one.

      NOTE: A header line will not be written to the file if true is given.

Returns:
  • <CsvWriter>

CsvWriter#writeRecords(records)

Parameters:
  • records <Iterator<Object|Array>>

    Depending on which function was used to create a csvWriter (i.e. createObjectCsvWriter or createArrayCsvWriter), records will be either a collection of objects or arrays. As long as the collection is iterable, it doesn't need to be an array.

Returns:
  • <Promise>

createObjectCsvStringifier(params)

Parameters:
  • params <Object>
    • header <Array<{id, title}|string>>

      Array of objects (id and title properties) or strings (field IDs)

    • fieldDelimiter <string> (optional)

      Default: ,. Only either comma , or semicolon ; is allowed.

    • recordDelimiter <string> (optional)

      Default: \n. Only either LF (\n) or CRLF (\r\n) is allowed.

    • headerIdDelimiter <string> (optional)

      Default: undefined. Give this value to specify a path to a value in a nested object.

    • alwaysQuote <boolean> (optional)

      Default: false. Set it to true to double-quote all fields regardless of their values.

Returns:
  • <ObjectCsvStringifier>

ObjectCsvStringifier#getHeaderString()

Returns:
  • <string>

ObjectCsvStringifier#stringifyRecords(records)

Parameters:
  • records <Array<Object>>
Returns:
  • <string>

createArrayCsvStringifier(params)

Parameters:
  • params <Object>
    • header <Array<string>> (optional)

      Array of field titles

    • fieldDelimiter <string> (optional)

      Default: ,. Only either comma , or semicolon ; is allowed.

    • recordDelimiter <string> (optional)

      Default: \n. Only either LF (\n) or CRLF (\r\n) is allowed.

    • alwaysQuote <boolean> (optional)

      Default: false. Set it to true to double-quote all fields regardless of their values.

Returns:
  • <ArrayCsvStringifier>

ArrayCsvStringifier#getHeaderString()

Returns:
  • <string>

ArrayCsvStringifier#stringifyRecords(records)

Parameters:
  • records <Array<Array<string>>>
Returns:
  • <string>

Request Features or Report Bugs

Feature requests and bug reports are very welcome: https://github.com/ryu1kn/csv-writer/issues

A couple of requests from me when you raise an issue on GitHub.

  • Requesting a feature: Please try to provide the context of why you want the feature. Such as, in what situation the feature could help you and how, or how the lack of the feature is causing an inconvenience to you. I can't start thinking of introducing it until I understand how it helps you 🙂
  • Reporting a bug: If you could provide a runnable code snippet that reproduces the bug, it would be very helpful!

Development

Prerequisite

  • Node version 8 or above
  • Docker