28 lines
778 B
TypeScript
28 lines
778 B
TypeScript
import { inferSchema, initParser } from 'udsv';
|
|
export function fileToBase64(file: File) {
|
|
return new Promise<string>((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.addEventListener('error', reject);
|
|
reader.addEventListener('load', () => resolve(reader.result as string));
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
export async function csvToData<T extends Record<string, any>>(
|
|
file: File,
|
|
): Promise<T[] | null> {
|
|
const stream = file.stream().pipeThrough(new TextDecoderStream());
|
|
const reader = stream.getReader();
|
|
|
|
const { value, done } = await reader.read();
|
|
|
|
if (value) {
|
|
const parser = initParser(inferSchema(value));
|
|
const data = parser.typedObjs<T>(value);
|
|
return data;
|
|
}
|
|
|
|
if (done) return null;
|
|
|
|
return null;
|
|
}
|