@eristack/spreadsheet-render
Version:
Declarative workbook model and xlsx/csv render drivers — ExcelJS/SheetJS in app or adapter
89 lines (86 loc) • 2.84 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
createSpreadsheetRenderer: () => createSpreadsheetRenderer,
createStubSpreadsheetDriver: () => createStubSpreadsheetDriver,
workbookFromRows: () => workbookFromRows
});
module.exports = __toCommonJS(index_exports);
// src/core/renderer.ts
function escapeCsvCell(value) {
if (/[",\n\r]/.test(value)) {
return `"${value.replaceAll('"', '""')}"`;
}
return value;
}
function workbookToCsv(workbook) {
const sheet = workbook.sheets[0];
if (!sheet) return "";
const header = sheet.columns.map((c) => escapeCsvCell(c.header)).join(",");
const body = sheet.rows.map(
(row) => sheet.columns.map((c) => escapeCsvCell(row[c.key] ?? "")).join(",")
);
return [header, ...body].join("\n");
}
function createSpreadsheetRenderer(driver) {
return {
renderWorkbook(workbook, format) {
return driver.renderWorkbook(workbook, format);
}
};
}
function createStubSpreadsheetDriver() {
return {
async renderWorkbook(workbook, format) {
if (format === "csv") {
const text = workbookToCsv(workbook);
return {
bytes: new TextEncoder().encode(text),
contentType: "text/csv; charset=utf-8"
};
}
const marker = `PK-stub-xlsx:${workbook.sheets.length}`;
return {
bytes: new TextEncoder().encode(marker),
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
};
}
};
}
// src/core/workbook.ts
function workbookFromRows(sheetName, columns, rows) {
const sheetRows = rows.map((cells) => {
const record = {};
columns.forEach((col, index) => {
record[col.key] = cells[index] ?? "";
});
return record;
});
const sheet = { name: sheetName, columns, rows: sheetRows };
return { sheets: [sheet] };
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createSpreadsheetRenderer,
createStubSpreadsheetDriver,
workbookFromRows
});
//# sourceMappingURL=index.cjs.map