UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

47 lines (46 loc) 1.64 kB
import csv from "csv-parser"; export class CSVFileReader { constructor(stream, logger, columnNames, separator = ";", create = (data) => { const obj = {}; for (const column of columnNames) { obj[column] = data[column]; } return obj; }) { this.stream = stream; this.logger = logger; this.columnNames = columnNames; this.separator = separator; this.create = create; this.values = []; } async read() { if (this.values.length > 0) { this.logger.warn("Overwriting previously read values", this.values); } this.values = []; const columnNames = this.columnNames; // eslint-disable-next-line @typescript-eslint/no-this-alias const self = this; return new Promise((resolve, reject) => { const readValues = this.values; self.stream .pipe(csv({ separator: this.separator })) .on("headers", (headers) => { if (!columnNames.every((column) => headers.includes(column))) { reject(`Could not find column "${columnNames}" in header`); return; } }) .on("data", (data) => { const columnValue = this.create(data); readValues.push(columnValue); }) .on("end", () => { this.logger.debug("Read", readValues); this.logger.debug("Read", readValues.length, "values"); resolve(readValues); }); }); } }