UNPKG

ts-csv-parser

Version:

Utility package for parsing CSV files.

61 lines (58 loc) 1.95 kB
interface ColumnOptions<T, Nullable extends boolean = false> { transform?: (value: string) => T; validate?: (value: T) => string | undefined; nullable?: Nullable; defaultValue?: T; trim?: boolean; caseInsensitiveColumnNames?: boolean; } type RowValidator<T> = (row: T) => string | undefined; interface CellError { row: number; column: string; property: string; value: string; message: string; type: "transform" | "validation" | "missing"; } interface RowValidationError { row: number; value: string; message: string; type: "row-validation"; } type ParseError = CellError | RowValidationError; interface ParseResult<T> { success: T[]; errors: ParseError[]; hasErrors: boolean; } interface ParserOptions { delimiter?: string; quote?: string; escape?: string; skipEmptyLines?: boolean; skipRows?: number; trim?: boolean; caseInsensitiveColumnNames?: boolean; } declare class Parser<T extends Record<string, any> = {}> { private readonly columns; private readonly options; private readonly rowValidators; private rowIndexOffset; constructor(options?: ParserOptions); col<K extends string, V = string, N extends boolean = false>(csvColumnName: string | string[], propertyName: K, options?: ColumnOptions<V, N>): Parser<T & Record<K, N extends true ? V | null : V>>; val(validator: RowValidator<T>): Parser<T>; parse(input: string): ParseResult<T>; private processRow; private processColumn; private findColumnMatchForColumn; private findCaseInsensitiveMatch; private handleMissingColumn; private handleEmptyValue; private transformAndValidate; private applyTransform; parseAsync(input: string | File): Promise<ParseResult<T>>; } export { type CellError, type ColumnOptions, type ParseError, type ParseResult, Parser, type ParserOptions, type RowValidationError, type RowValidator };