Parsing
csv-pipe parses as well as it encodes. parse is the mirror of stringify, and createCsvParser mirrors createCsvEncoder, so the same mental model and the same runtimes apply in both directions.
Quick start
By default the first row is the header, and each record is a typed object.
import { parse } from 'csv-pipe';
type User = { name: string; email: string; age: number };
const users = parse<User>('name,email,age\nAlex Johnson,alex@example.com,29');
Hover users above: it is User[]. The type is an assertion, like JSON.parse(...) as T; see Typing and validation to enforce it at runtime.
Headerless data
With header: false each record is the raw string[]. Provide columns to key the rows by position instead.
import { parse } from 'csv-pipe';
parse('1,2\n3,4', { header: false });
// [['1', '2'], ['3', '4']]Lenient by default
Parsing is forgiving: a short row pads missing fields with '', extra fields are dropped, and blank lines are skipped. Turn on strict to reject ragged rows instead.
parse('a,b\n1'); // [{ a: '1', b: '' }]
parse('a,b\n1,2,3'); // [{ a: '1', b: '2' }]When two header columns share a name, the later column wins, since both map to the same object key.
parse('a,a\n1,2'); // [{ a: '2' }]Next
- Choosing columns to select, rename, and position columns.
- Typing and validation for dynamic typing and the
rowhook. - Streaming and files for large inputs and
readCsv. - Options for every parsing option.