@jackchuka/gql-ingest
Version:
A CLI tool for ingesting data from CSV files into a GraphQL API
30 lines (24 loc) • 713 B
text/typescript
import fs from "fs";
import csv from "csv-parser";
import { DataReader, DataRow } from "./data-reader";
export interface CsvRow {
[key: string]: string;
}
export async function readCsvFile(filePath: string): Promise<CsvRow[]> {
return new Promise((resolve, reject) => {
const results: CsvRow[] = [];
fs.createReadStream(filePath)
.pipe(csv())
.on("data", (data) => results.push(data))
.on("end", () => resolve(results))
.on("error", (error) => reject(error));
});
}
export class CsvReader extends DataReader {
getSupportedExtensions(): string[] {
return ["csv"];
}
async readFile(filePath: string): Promise<DataRow[]> {
return readCsvFile(filePath);
}
}