or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-csv-writer

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

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/csv-writer@1.6.x

To install, run

npx @tessl/cli install tessl/npm-csv-writer@1.6.0

index.mddocs/

CSV Writer

CSV Writer converts objects/arrays into a CSV string or write them into a CSV file. It respects RFC 4180 for the output CSV format, providing reliable CSV generation with proper quoting and escaping for Node.js applications.

Package Information

  • Package Name: csv-writer
  • Package Type: npm
  • Language: TypeScript
  • Installation: npm install csv-writer

Core Imports

import { 
  createObjectCsvWriter, 
  createArrayCsvWriter,
  createObjectCsvStringifier,
  createArrayCsvStringifier 
} from "csv-writer";

For CommonJS:

const { 
  createObjectCsvWriter, 
  createArrayCsvWriter,
  createObjectCsvStringifier,
  createArrayCsvStringifier 
} = require("csv-writer");

Basic Usage

Writing Object Records to File

import { createObjectCsvWriter } from "csv-writer";

const csvWriter = createObjectCsvWriter({
  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' }
];

await csvWriter.writeRecords(records);
// Creates: NAME,LANGUAGE
//          Bob,"French, English"
//          Mary,English

Generating CSV String

import { createObjectCsvStringifier } from "csv-writer";

const csvStringifier = createObjectCsvStringifier({
  header: [
    { id: 'name', title: 'NAME' },
    { id: 'lang', title: 'LANGUAGE' }
  ]
});

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

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

Capabilities

Object CSV Writer Creation

Creates a CSV writer for object-based records with field mapping and optional headers.

function createObjectCsvWriter(params: ObjectCsvWriterParams): CsvWriter<ObjectMap<Field>>;

interface ObjectCsvWriterParams {
  path: string;
  header: ObjectStringifierHeader;
  fieldDelimiter?: string;
  recordDelimiter?: string;
  headerIdDelimiter?: string;
  alwaysQuote?: boolean;
  encoding?: string;
  append?: boolean;
}

Usage Examples:

// Basic object writer
const writer = createObjectCsvWriter({
  path: 'output.csv',
  header: [
    { id: 'name', title: 'Name' },
    { id: 'age', title: 'Age' }
  ]
});

// Writer with custom delimiters
const semicolonWriter = createObjectCsvWriter({
  path: 'output.csv',
  header: ['name', 'age'], // String headers (no title line)
  fieldDelimiter: ';',
  recordDelimiter: '\r\n'
});

// Writer for nested objects
const nestedWriter = createObjectCsvWriter({
  path: 'output.csv',
  header: [
    { id: 'user.name', title: 'Name' },
    { id: 'user.profile.age', title: 'Age' }
  ],
  headerIdDelimiter: '.'
});

Array CSV Writer Creation

Creates a CSV writer for array-based records with optional header row.

function createArrayCsvWriter(params: ArrayCsvWriterParams): CsvWriter<Field[]>;

interface ArrayCsvWriterParams {
  path: string;
  header?: string[];
  fieldDelimiter?: string;
  recordDelimiter?: string;
  alwaysQuote?: boolean;
  encoding?: string;
  append?: boolean;
}

Usage Examples:

// Array writer with headers
const writer = createArrayCsvWriter({
  path: 'output.csv',
  header: ['NAME', 'LANGUAGE']
});

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

await writer.writeRecords(records);

// Array writer without headers
const noHeaderWriter = createArrayCsvWriter({
  path: 'data.csv'
});

Object CSV Stringifier Creation

Creates a CSV stringifier for converting object records to CSV strings without file output.

function createObjectCsvStringifier(params: ObjectCsvStringifierParams): ObjectCsvStringifier;

interface ObjectCsvStringifierParams {
  header: ObjectStringifierHeader;
  fieldDelimiter?: string;
  recordDelimiter?: string;
  headerIdDelimiter?: string;
  alwaysQuote?: boolean;
}

Usage Examples:

const stringifier = createObjectCsvStringifier({
  header: [
    { id: 'name', title: 'NAME' },
    { id: 'lang', title: 'LANGUAGE' }
  ]
});

const headerString = stringifier.getHeaderString();
const csvData = stringifier.stringifyRecords(records);
const fullCsv = headerString + csvData;

Array CSV Stringifier Creation

Creates a CSV stringifier for converting array records to CSV strings without file output.

function createArrayCsvStringifier(params: ArrayCsvStringifierParams): ArrayCsvStringifier;

interface ArrayCsvStringifierParams {
  header?: string[];
  fieldDelimiter?: string;
  recordDelimiter?: string;
  alwaysQuote?: boolean;
}

Usage Examples:

const stringifier = createArrayCsvStringifier({
  header: ['NAME', 'LANGUAGE']
});

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

const csvString = stringifier.stringifyRecords(records);

CSV Writing

Writes records to the configured file path.

interface CsvWriter<T> {
  /**
   * Writes array of records to file
   * @param records - Array of records
   * @returns Promise that resolves when writing is complete
   */
  writeRecords(records: T[]): Promise<void>;
}

CSV String Generation

Generates CSV strings from record data.

interface ArrayCsvStringifier {
  /**
   * Returns header string or null if no header
   * @returns Header as CSV string with record delimiter
   */
  getHeaderString(): string | null;
  
  /**
   * Converts array records to CSV string
   * @param records - Array of arrays or iterable iterator
   * @returns CSV formatted string
   */
  stringifyRecords(records: Field[][] | IterableIterator<Field[]>): string;
}

interface ObjectCsvStringifier {
  /**
   * Returns header string or null if no header
   * @returns Header as CSV string with record delimiter
   */
  getHeaderString(): string | null;
  
  /**
   * Converts object records to CSV string
   * @param records - Array of objects or iterable iterator
   * @returns CSV formatted string
   */
  stringifyRecords(records: ObjectMap<Field>[] | IterableIterator<ObjectMap<Field>>): string;
}

Types

// Core field type - accepts any value
type Field = any;

// Header definition for object stringifiers
type ObjectHeaderItem = { 
  id: string;    // Field ID for data extraction
  title: string; // Column title in header row
};

type ObjectStringifierHeader = ObjectHeaderItem[] | string[];

// Generic key-value map
interface ObjectMap<T> {
  [key: string]: T;
}

Configuration Options

Field Delimiters

  • Default: ','
  • Valid values: ',', ';'
  • Controls the separator between fields in each record

Record Delimiters

  • Default: '\n'
  • Valid values: '\n', '\r\n'
  • Controls the separator between records

File Encoding

  • Default: 'utf8'
  • Standard Node.js file encoding options supported

Quoting Behavior

  • Default: false (conditional quoting)
  • alwaysQuote: true: Forces all fields to be quoted regardless of content
  • alwaysQuote: false: Only quotes fields containing delimiters, quotes, or newlines

Append Mode

  • Default: false (overwrite file)
  • append: true: Appends records to existing file (no header written)
  • append: false: Overwrites file with new content including header

Nested Object Access

  • headerIdDelimiter: Specify delimiter for accessing nested object properties
  • Example: 'user.profile.name' with delimiter '.' accesses record.user.profile.name

Error Handling

The library validates configuration parameters and throws errors for:

  • Invalid field delimiters (not ',' or ';')
  • Invalid record delimiters (not '\n' or '\r\n')
  • File system errors during writing operations

All write operations return Promises that reject with appropriate error information.