ts-csv-parser
Version:
Utility package for parsing CSV files.
61 lines (58 loc) • 1.95 kB
text/typescript
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 };