Comprehensive CSV parsing functionality with support for various CSV dialects, custom transformations, validation, and both streaming and batch processing options.
Creates a new CSV parser stream for parsing CSV data from various sources.
/**
* Creates a new CSV parser stream
* @param args - Parser configuration options
* @returns CsvParserStream instance for parsing operations
*/
function parse<I extends Row, O extends Row>(args?: ParserOptionsArgs): CsvParserStream<I, O>;Usage Examples:
import { parse } from "fast-csv";
// Basic parsing with headers
const parser = parse({ headers: true });
parser.on("data", (row) => console.log(row));
parser.on("end", (rowCount) => console.log(`Parsed ${rowCount} rows`));
// Custom delimiter and options
const tsvParser = parse({
delimiter: "\t",
headers: ["name", "age", "city"],
trim: true
});Parses CSV data directly from a file path.
/**
* Parses CSV from a file path
* @param location - File path to CSV file
* @param options - Parser configuration options
* @returns CsvParserStream instance
*/
function parseFile<I extends Row, O extends Row>(
location: string,
options?: ParserOptionsArgs
): CsvParserStream<I, O>;Usage Examples:
import { parseFile } from "fast-csv";
// Parse file with headers
parseFile("./data/users.csv", { headers: true })
.on("data", (row) => {
console.log(`User: ${row.name}, Age: ${row.age}`);
})
.on("end", () => console.log("File parsing complete"));
// Parse with custom options
parseFile("./data/products.csv", {
headers: ["id", "name", "price"],
skipRows: 1,
maxRows: 1000
});Parses CSV data from a string.
/**
* Parses CSV from a string
* @param string - CSV data as string
* @param options - Parser configuration options
* @returns CsvParserStream instance
*/
function parseString<I extends Row, O extends Row>(
string: string,
options?: ParserOptionsArgs
): CsvParserStream<I, O>;Usage Examples:
import { parseString } from "fast-csv";
const csvData = `name,age,city
John,25,New York
Jane,30,San Francisco`;
parseString(csvData, { headers: true })
.on("data", (row) => console.log(row))
.on("end", () => console.log("String parsing complete"));Parses CSV data from an existing readable stream.
/**
* Parses CSV from an existing readable stream
* @param stream - Readable stream containing CSV data
* @param options - Parser configuration options
* @returns CsvParserStream instance
*/
function parseStream<I extends Row, O extends Row>(
stream: NodeJS.ReadableStream,
options?: ParserOptionsArgs
): CsvParserStream<I, O>;Usage Examples:
import { parseStream } from "fast-csv";
import fs from "fs";
import { createGunzip } from "zlib";
// Parse from compressed file
const gzipStream = fs.createReadStream("data.csv.gz").pipe(createGunzip());
parseStream(gzipStream, { headers: true })
.on("data", (row) => console.log(row));A Transform stream that parses CSV data with support for transformations and validation.
class CsvParserStream<I extends Row, O extends Row> extends Transform {
/**
* Adds a transform function to modify parsed rows
* @param transformFunction - Function to transform each row
* @returns This stream instance for chaining
*/
transform(transformFunction: RowTransformFunction<I, O>): CsvParserStream<I, O>;
/**
* Adds a validation function for parsed rows
* @param validateFunction - Function to validate each row
* @returns This stream instance for chaining
*/
validate(validateFunction: RowValidate<O>): CsvParserStream<I, O>;
}Usage Examples:
import { parse } from "fast-csv";
// With transform and validation
parse({ headers: true })
.transform((row) => ({
name: row.name.trim().toUpperCase(),
age: parseInt(row.age),
email: row.email.toLowerCase()
}))
.validate((row) => {
return row.age >= 0 && row.email.includes("@");
})
.on("data", (row) => console.log("Valid row:", row))
.on("error", (err) => console.error("Validation error:", err));
// Async transform
parse({ headers: true })
.transform((row, callback) => {
// Simulate async operation
setTimeout(() => {
callback(null, { ...row, processed: true });
}, 10);
});Complete configuration options for CSV parsing operations.
interface ParserOptionsArgs {
/** Enable object mode for streaming (default: true) */
objectMode?: boolean;
/** Field delimiter character (default: ',') */
delimiter?: string;
/** Quote character for escaping fields (default: '"') */
quote?: string | null;
/** Escape character (default: same as quote) */
escape?: string;
/** Header handling: true for auto-detect, array for custom headers, function for transform */
headers?: boolean | HeaderTransformFunction | HeaderArray;
/** Rename headers to safe property names (default: false) */
renameHeaders?: boolean;
/** Ignore empty rows (default: false) */
ignoreEmpty?: boolean;
/** Comment character to ignore lines (default: null) */
comment?: string;
/** Strict column count validation (default: false) */
strictColumnHandling?: boolean;
/** Discard columns not in headers (default: false) */
discardUnmappedColumns?: boolean;
/** Trim whitespace from all fields (default: false) */
trim?: boolean;
/** Trim leading whitespace (default: false) */
ltrim?: boolean;
/** Trim trailing whitespace (default: false) */
rtrim?: boolean;
/** Text encoding (default: 'utf8') */
encoding?: string;
/** Maximum number of rows to parse (default: 0 = unlimited) */
maxRows?: number;
/** Number of lines to skip at start (default: 0) */
skipLines?: number;
/** Number of rows to skip after parsing starts (default: 0) */
skipRows?: number;
}// Parser-specific row types
type Row<V = any> = RowMap<V> | RowArray<V>;
type RowMap<V = any> = Record<string, V>;
type RowArray<V = any> = V[];
// Validation result interface
interface RowValidationResult<R extends Row> {
row: R | null;
isValid: boolean;
reason?: string;
}// Transform function types
type RowTransformCallback<R extends Row> = (error?: Error | null, row?: R) => void;
type SyncRowTransform<I extends Row, O extends Row> = (row: I) => O;
type AsyncRowTransform<I extends Row, O extends Row> = (row: I, cb: RowTransformCallback<O>) => void;
type RowTransformFunction<I extends Row, O extends Row> = SyncRowTransform<I, O> | AsyncRowTransform<I, O>;
// Validation function types
type RowValidateCallback = (error?: Error | null, isValid?: boolean, reason?: string) => void;
type SyncRowValidate<R extends Row> = (row: R) => boolean;
type AsyncRowValidate<R extends Row> = (row: R, cb: RowValidateCallback) => void;
type RowValidate<R extends Row> = AsyncRowValidate<R> | SyncRowValidate<R>;
type RowValidatorCallback<R extends Row> = (error: Error | null, result?: RowValidationResult<R>) => void;// Header handling types
type HeaderArray = (string | undefined | null)[];
type HeaderTransformFunction = (headers: HeaderArray) => HeaderArray;The CsvParserStream emits the following events:
// Event handling example
parse({ headers: true })
.on("headers", (headers) => console.log("Headers:", headers))
.on("data", (row) => console.log("Row:", row))
.on("end", (rowCount) => console.log(`Total rows: ${rowCount}`))
.on("error", (error) => console.error("Parse error:", error));