jws-frontend/src/utils/file.ts
2024-11-11 09:17:16 +07:00

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;
}