file-streamer
Version:
A TypeScript package for streaming data as files (Excel, CSV, JSON, Base64) and streaming files from file system through HTTP responses
45 lines • 1.6 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.pipeJsonAsExcel = exports.jsonToExcelBuffer = void 0;
const exceljs_1 = __importDefault(require("exceljs"));
const jsonToExcelBuffer = async (data, sheetName = 'Sheet1') => {
const workbook = new exceljs_1.default.Workbook();
const worksheet = workbook.addWorksheet(sheetName);
if (data.length === 0) {
worksheet.addRow(['No data']);
}
else {
worksheet.columns = Object.keys(data[0]).map((key) => ({
header: key,
key: key,
width: 20
}));
data.forEach((item) => {
worksheet.addRow(item);
});
}
return workbook;
};
exports.jsonToExcelBuffer = jsonToExcelBuffer;
const pipeJsonAsExcel = async (res, data, fileName) => {
try {
let responseFileName = !fileName
? 'data.xlsx'
: fileName.endsWith('.xlsx')
? fileName
: `${fileName}.xlsx`;
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', `attachment; filename=${responseFileName}`);
const workbook = await (0, exports.jsonToExcelBuffer)(data);
workbook.xlsx.write(res);
}
catch (err) {
console.error(err);
throw err;
}
};
exports.pipeJsonAsExcel = pipeJsonAsExcel;
//# sourceMappingURL=excel.js.map
;