Files
dbgate/plugins/dbgate-plugin-csv/src/backend/writer.js
2025-03-04 09:51:29 +01:00

44 lines
1.2 KiB
JavaScript

const csv = require('csv');
const fs = require('fs');
const stream = require('stream');
const { getLogger } = global.DBGATE_PACKAGES['dbgate-tools'];
const logger = getLogger('csvWriter');
class CsvPrepareStream extends stream.Transform {
constructor({ header }) {
super({ objectMode: true });
this.structure = null;
this.header = header;
}
_transform(chunk, encoding, done) {
if (this.structure) {
this.push(this.structure.columns.map((col) => chunk[col.columnName]));
done();
} else {
this.structure = chunk;
if (this.header) {
this.push(chunk.columns.map((x) => x.columnName));
}
done();
}
}
}
async function writer({ fileName, encoding = 'utf-8', header = true, delimiter, quoted }) {
logger.info(`Writing file ${fileName}`);
const csvPrepare = new CsvPrepareStream({ header });
const csvStream = csv.stringify({ delimiter, quoted });
const fileStream = fs.createWriteStream(fileName, encoding);
// csvPrepare.pipe(csvStream);
// csvStream.pipe(fileStream);
// csvPrepare['finisher'] = fileStream;
csvPrepare.requireFixedStructure = true;
return [csvPrepare, csvStream, fileStream];
// return csvPrepare;
}
module.exports = writer;