Convert objects/arrays into a CSV string or write them into a CSV file
npx @tessl/cli install tessl/npm-csv-writer@1.6.0CSV 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.
npm install csv-writerimport {
createObjectCsvWriter,
createArrayCsvWriter,
createObjectCsvStringifier,
createArrayCsvStringifier
} from "csv-writer";For CommonJS:
const {
createObjectCsvWriter,
createArrayCsvWriter,
createObjectCsvStringifier,
createArrayCsvStringifier
} = require("csv-writer");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,Englishimport { 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'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: '.'
});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'
});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;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);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>;
}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;
}// 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;
}','',', ';''\n''\n', '\r\n''utf8'false (conditional quoting)false (overwrite file)'user.profile.name' with delimiter '.' accesses record.user.profile.nameThe library validates configuration parameters and throws errors for:
',' or ';')'\n' or '\r\n')All write operations return Promises that reject with appropriate error information.