init; collecting some of my commonly used utils

This commit is contained in:
2024-04-01 17:31:33 -05:00
commit a09a7d7337
13 changed files with 322 additions and 0 deletions

28
pkg/csv.ts Normal file
View File

@@ -0,0 +1,28 @@
import { Options, parse, Parser } from "csv-parse";
import { z } from "zod";
export async function readCSVToType<
TData extends Record<string, unknown>
>(
text: string,
validator: z.ZodType<TData>,
options?: Options
) {
options ??= {
columns: true,
ignore_last_delimiters: true,
skip_empty_lines: true,
relax_column_count: true
}
const parser = parse(text, options);
const records: TData[] = [];
for await (const record of parser as (Parser & AsyncIterable<never>)) {
records.push(
validator.parse(record)
)
}
return records;
}