file-streamer
Version:
A TypeScript package for streaming data as files (Excel, CSV, JSON, Base64) and streaming files from file system through HTTP responses
40 lines • 1.36 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.pipeJsonAsCsv = void 0;
const pipeJsonAsCsv = async (res, data, fileName) => {
try {
let responseFileName = !fileName
? 'data.csv'
: fileName.endsWith('.csv')
? fileName
: `${fileName}.csv`;
res.setHeader('Content-Type', 'text/csv');
res.setHeader('Content-Disposition', `attachment; filename=${responseFileName}`);
if (data.length === 0) {
res.write('No data');
res.end();
return;
}
const headers = Object.keys(data[0]);
const headerRow = headers.join(',');
res.write(headerRow + '\n');
data.forEach((item) => {
const row = headers.map((header) => {
const value = item[header];
if (typeof value === 'string' &&
(value.includes(',') || value.includes('"') || value.includes('\n'))) {
return `"${value.replace(/"/g, '""')}"`;
}
return value ?? '';
});
res.write(row.join(',') + '\n');
});
res.end();
}
catch (err) {
console.error(err);
throw err;
}
};
exports.pipeJsonAsCsv = pipeJsonAsCsv;
//# sourceMappingURL=csv.js.map
;