@sme.up/doc-alchemist 1.0.0-SNAPSHOT-20250613100107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +129 -0
  2. package/dist/assets/sample-data.d.ts +21 -0
  3. package/dist/assets/sample-data.js +235 -0
  4. package/dist/assets/sample-data.js.map +1 -0
  5. package/dist/debug.d.ts +1 -0
  6. package/dist/debug.js +20 -0
  7. package/dist/debug.js.map +1 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.js +4 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/src/excel/excel-generator.d.ts +14 -0
  12. package/dist/src/excel/excel-generator.js +415 -0
  13. package/dist/src/excel/excel-generator.js.map +1 -0
  14. package/dist/src/excel/excel-generator.types.d.ts +21 -0
  15. package/dist/src/excel/excel-generator.types.js +26 -0
  16. package/dist/src/excel/excel-generator.types.js.map +1 -0
  17. package/dist/src/index.d.ts +1 -0
  18. package/dist/src/index.js +2 -0
  19. package/dist/src/index.js.map +1 -0
  20. package/dist/src/pdf/pdf-generator.d.ts +6 -0
  21. package/dist/src/pdf/pdf-generator.js +5 -0
  22. package/dist/src/pdf/pdf-generator.js.map +1 -0
  23. package/dist/src/types/index.d.ts +38 -0
  24. package/dist/src/types/index.js +15 -0
  25. package/dist/src/types/index.js.map +1 -0
  26. package/dist/src/utils/datastructure-utility.d.ts +2 -0
  27. package/dist/src/utils/datastructure-utility.js +5 -0
  28. package/dist/src/utils/datastructure-utility.js.map +1 -0
  29. package/dist/src/utils/dates-utility.d.ts +10 -0
  30. package/dist/src/utils/dates-utility.js +55 -0
  31. package/dist/src/utils/dates-utility.js.map +1 -0
  32. package/dist/src/utils/generator-utility.d.ts +31 -0
  33. package/dist/src/utils/generator-utility.js +113 -0
  34. package/dist/src/utils/generator-utility.js.map +1 -0
  35. package/dist/src/utils/math-utility.d.ts +10 -0
  36. package/dist/src/utils/math-utility.js +161 -0
  37. package/dist/src/utils/math-utility.js.map +1 -0
  38. package/dist/src/utils/objects-utility.d.ts +4 -0
  39. package/dist/src/utils/objects-utility.js +16 -0
  40. package/dist/src/utils/objects-utility.js.map +1 -0
  41. package/dist/src/utils/regex-utility.d.ts +1 -0
  42. package/dist/src/utils/regex-utility.js +4 -0
  43. package/dist/src/utils/regex-utility.js.map +1 -0
  44. package/dist/tests/excel-generator.test.d.ts +17 -0
  45. package/dist/tests/excel-generator.test.js +287 -0
  46. package/dist/tests/excel-generator.test.js.map +1 -0
  47. package/package.json +44 -0
@@ -0,0 +1,287 @@
1
+ import { SmeupDataStructureType, } from "@sme.up/kokos-sdk-node";
2
+ import { addStyleToExceljsRow, dataTableToExcelWorkbook, getExcelNumFormat, smeupFormulaToExcelFormula, } from "../src";
3
+ import { SupportedExportFormats } from "../src/types";
4
+ import ExcelJS from "exceljs";
5
+ import { table_sample_1, table_sample_2 } from "../assets/sample-data.js";
6
+ const Workbook = ExcelJS.Workbook;
7
+ // #region Tests
8
+ describe("Export Manager Test", () => {
9
+ it("Formula conversion", () => {
10
+ const formulaExamples = {
11
+ ["[N1]+[N2]"]: "A1+B1", // Row 1
12
+ ["1+1"]: "1+1", // Row 2
13
+ ["[N1]+[N2]+[N3]+[N4]"]: "A3+B3+C3+D3", // Row 3
14
+ ["1,234+1,0001"]: "1.234+1.0001", // Row 4
15
+ ["[N1]+[N2]-[N1]-[N2]"]: "A5+B5-A5-B5", // Row 5
16
+ ["([N1]+[N2]/[N3]+[N4])/10"]: "(A6+B6/C6+D6)/10", // Row 6
17
+ ["[N1]*[N2]"]: "A7*B7", // Row 7
18
+ ["[N1]/0"]: "A8/0", // Row 8
19
+ ["([N1]+[N2])-[N1]"]: "(A9+B9)-A9", // Row 9
20
+ ["([N1]+[N120])"]: "(A10+DP10)", // Row 10
21
+ };
22
+ Object.keys(formulaExamples).forEach((smeupFormula, i) => {
23
+ expect(smeupFormulaToExcelFormula(smeupFormula, i, getColumns(120))).toBe(formulaExamples[smeupFormula]);
24
+ });
25
+ });
26
+ it("Number format creation", () => {
27
+ const cellsFormatNumbers = [
28
+ {
29
+ data: {
30
+ decimals: 0,
31
+ },
32
+ },
33
+ {
34
+ data: {
35
+ decimals: 1,
36
+ },
37
+ },
38
+ {
39
+ data: {
40
+ decimals: 2,
41
+ },
42
+ },
43
+ {
44
+ data: {
45
+ decimals: 3,
46
+ },
47
+ },
48
+ {
49
+ data: {
50
+ decimals: 4,
51
+ },
52
+ },
53
+ ];
54
+ cellsFormatNumbers.forEach((cell, index) => {
55
+ const format = "0." + `${index > 0 ? "0".repeat(index) : "00"}`;
56
+ expect(getExcelNumFormat(cell.data?.decimals ?? 0, cell.data ?? 0)).toBe(format + ";[Red]-" + format);
57
+ });
58
+ });
59
+ describe("SmeupDataTable export", () => {
60
+ it("xlsx format", async () => {
61
+ const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.XLSX, {});
62
+ const worksheet = workbook.getWorksheet(1);
63
+ // Test number of columns
64
+ expect(worksheet?.columnCount).toBe(8);
65
+ // Test number of rows
66
+ expect(worksheet?.actualRowCount).toBe(3);
67
+ });
68
+ it("csv format", async () => {
69
+ const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.CSV, {});
70
+ const worksheet = workbook.getWorksheet(1);
71
+ // Test number of columns
72
+ expect(worksheet?.columnCount).toBe(8);
73
+ // Test number of rows
74
+ expect(worksheet?.actualRowCount).toBe(3);
75
+ });
76
+ it("txt format", async () => {
77
+ const workbook = dataTableToExcelWorkbook(table_sample_1, SupportedExportFormats.TXT, {});
78
+ const worksheet = workbook.getWorksheet(1);
79
+ // Test number of columns
80
+ expect(worksheet?.columnCount).toBe(8);
81
+ // Test number of rows
82
+ expect(worksheet?.actualRowCount).toBe(3);
83
+ });
84
+ it("With groups and outline 2 levels", async () => {
85
+ const workbook = dataTableToExcelWorkbook(table_sample_2, SupportedExportFormats.XLSX, {});
86
+ const worksheet = workbook.getWorksheet(1);
87
+ expect(worksheet?.getRow(2).outlineLevel).toBe(0);
88
+ expect(worksheet?.getRow(3).outlineLevel).toBe(1);
89
+ expect(worksheet?.getRow(4).outlineLevel).toBe(2);
90
+ expect(worksheet?.getRow(5).outlineLevel).toBe(0);
91
+ expect(worksheet?.getRow(6).outlineLevel).toBe(1);
92
+ expect(worksheet?.getRow(7).outlineLevel).toBe(2);
93
+ });
94
+ it("With totals", async () => {
95
+ const table_totals = JSON.parse(JSON.stringify(table_sample_1));
96
+ table_totals.props = {
97
+ ...table_totals.props,
98
+ totals: totals_sample_1,
99
+ };
100
+ const workbook = dataTableToExcelWorkbook(table_totals, SupportedExportFormats.XLSX, {});
101
+ const worksheet = workbook.getWorksheet(1);
102
+ // Test number of columns
103
+ expect(worksheet?.columnCount).toBe(8);
104
+ // Test number of rows
105
+ expect(worksheet?.rowCount).toBe(4);
106
+ // Check totals row
107
+ worksheet?.getRow(4).eachCell((cell) => {
108
+ const columnName = worksheet?.getColumn(cell.col).key;
109
+ if (columnName !== undefined) {
110
+ expect(cell.formula).toBe(data_table_totals_result_sample_1[columnName]);
111
+ }
112
+ });
113
+ });
114
+ it("With groups subtotals correct range and action", () => {
115
+ const totalsExpectedFormula = {
116
+ Count: "SUBTOTAL(3,C2:C2)",
117
+ Sum: "SUBTOTAL(9,C2:C2)",
118
+ Max: "SUBTOTAL(4,C2:C2)",
119
+ Min: "SUBTOTAL(5,C2:C2)",
120
+ Average: "SUBTOTAL(1,C2:C2)",
121
+ };
122
+ const totalsExpectedSubAction = {
123
+ Count: "3",
124
+ Sum: "9",
125
+ Max: "4",
126
+ Min: "5",
127
+ Average: "1",
128
+ };
129
+ Object.keys(totalsExpectedFormula).forEach(async (total) => {
130
+ const workbook = dataTableToExcelWorkbook(table_footer_actions(total, [
131
+ { column: "1", visible: true },
132
+ { column: "2", visible: true },
133
+ ], 2, 2), SupportedExportFormats.XLSX, {});
134
+ const worksheet = workbook.getWorksheet(1);
135
+ const totalKey = total;
136
+ expect(worksheet?.getRow(2).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C3:C5)`);
137
+ expect(worksheet?.getRow(3).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C4:C5)`);
138
+ expect(worksheet?.getRow(6).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C7:C9)`);
139
+ expect(worksheet?.getRow(7).getCell(3).formula).toBe(`SUBTOTAL(${totalsExpectedSubAction[totalKey]},C8:C9)`);
140
+ });
141
+ });
142
+ });
143
+ });
144
+ describe("Cell to XLSX Style converter", () => {
145
+ const cellStyle = {
146
+ fontWeight: "bold",
147
+ backgroundColor: "#74c0f2",
148
+ color: "#000000",
149
+ };
150
+ const cellResult = {
151
+ fill: {
152
+ type: "pattern",
153
+ pattern: "solid",
154
+ fgColor: { argb: "FF74c0f2" },
155
+ },
156
+ font: { bold: true, color: { argb: "FF000000" } },
157
+ };
158
+ it("SmeupDataCell - Style calculations", async () => {
159
+ const workbook = new Workbook();
160
+ const worksheet = workbook.addWorksheet("Sheet 1");
161
+ const row = worksheet.addRow(["Mario Rossi"]);
162
+ addStyleToExceljsRow(row, [{ name: "A", title: "A" }], {
163
+ cells: {
164
+ A: {
165
+ value: "",
166
+ obj: {
167
+ t: "",
168
+ p: "",
169
+ k: "",
170
+ },
171
+ style: cellStyle,
172
+ },
173
+ },
174
+ });
175
+ expect(row.getCell(1).style).toStrictEqual(cellResult);
176
+ });
177
+ it("SmeupDataNode - Style calculations", async () => {
178
+ const workbook = new Workbook();
179
+ const worksheet = workbook.addWorksheet("Sheet 1");
180
+ const row = worksheet.addRow(["Mario Rossi"]);
181
+ addStyleToExceljsRow(row, [{ name: "A", title: "A" }], {
182
+ cells: {
183
+ A: {
184
+ value: "",
185
+ obj: {
186
+ t: "",
187
+ p: "",
188
+ k: "",
189
+ },
190
+ style: {},
191
+ },
192
+ },
193
+ style: cellStyle,
194
+ });
195
+ expect(row.getCell(1).style).toStrictEqual(cellResult);
196
+ });
197
+ });
198
+ // #endregion
199
+ // #region Assets
200
+ const getColumns = (numberColumns) => {
201
+ const columns = [];
202
+ for (let num = 1; num <= numberColumns; num++) {
203
+ columns.push({
204
+ name: `N${num}`,
205
+ title: "",
206
+ });
207
+ }
208
+ return columns;
209
+ };
210
+ // Define table_sample_1 for use in tests
211
+ const totals_sample_1 = {
212
+ COL1: "Count",
213
+ COL2: "Distinct",
214
+ HIDDEN_COL: "Sum",
215
+ SUM_COL: "Sum",
216
+ AVG_COL: "Average",
217
+ MIN_COL: "Min",
218
+ MAX_COL: "Max",
219
+ DIFF_COL: `${"MATH"}([HIDDEN_COL]-[SUM_COL])`,
220
+ };
221
+ const data_table_totals_result_sample_1 = {
222
+ COL1: "SUBTOTAL(3,A2:A3)",
223
+ HIDDEN_COL: "SUBTOTAL(9,C2:C3)",
224
+ SUM_COL: "SUBTOTAL(9,D2:D3)",
225
+ AVG_COL: "SUBTOTAL(1,E2:E3)",
226
+ MIN_COL: "SUBTOTAL(5,F2:F3)",
227
+ MAX_COL: "SUBTOTAL(4,G2:G3)",
228
+ DIFF_COL: `(C4-D4)`,
229
+ };
230
+ export const table_footer_actions = (action, groups, rowsNumber = 1, rowRepetitions = 1) => {
231
+ const rows = [];
232
+ for (let i = 0; i < rowsNumber; i++) {
233
+ const rowObj = {
234
+ cells: {
235
+ 1: {
236
+ obj: { t: "", p: "", k: "" },
237
+ value: `1-${i}`,
238
+ },
239
+ 2: {
240
+ obj: { t: "", p: "", k: "" },
241
+ value: `2-${i}`,
242
+ },
243
+ [`${action}`]: {
244
+ obj: { t: "NR", p: "", k: "10" },
245
+ value: `${i + 1}`,
246
+ },
247
+ },
248
+ id: `${i}`,
249
+ };
250
+ for (let i = 0; i < rowRepetitions; i++) {
251
+ rows.push(rowObj);
252
+ }
253
+ }
254
+ return {
255
+ smeupDataTable: {
256
+ type: SmeupDataStructureType.SmeupDataTable,
257
+ columns: [
258
+ {
259
+ name: "1",
260
+ title: "1title",
261
+ visible: true,
262
+ obj: { t: "", p: "" },
263
+ },
264
+ {
265
+ name: "2",
266
+ title: "2title",
267
+ visible: true,
268
+ obj: { t: "", p: "" },
269
+ },
270
+ {
271
+ name: `${action}`,
272
+ title: `${action}title`,
273
+ visible: true,
274
+ obj: { t: "NR", p: "" },
275
+ },
276
+ ],
277
+ rows,
278
+ },
279
+ props: {
280
+ groups,
281
+ totals: action ? { [`${action}`]: `${action}` } : [],
282
+ filter: [],
283
+ },
284
+ };
285
+ };
286
+ // #endregion
287
+ //# sourceMappingURL=excel-generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-generator.test.js","sourceRoot":"","sources":["../../tests/excel-generator.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SmeupDataCell,\n SmeupDataRow,\n SmeupDataColumn,\n SmeupDataStructureType,\n SmeupDataNode,\n SmeupDataTable,\n} from \"@sme.up/kokos-sdk-node\";\nimport {\n addStyleToExceljsRow,\n dataTableToExcelWorkbook,\n getExcelNumFormat,\n smeupFormulaToExcelFormula,\n} from \"../src\";\nimport { TotalMode } from \"../src/excel/excel-generator.types\";\nimport { SupportedExportFormats, WebupManagerData } from \"../src/types\";\nimport ExcelJS from \"exceljs\";\nimport { table_sample_1, table_sample_2 } from \"../assets/sample-data.js\";\n\ntype Workbook = ExcelJS.Workbook;\ntype Cell = ExcelJS.Cell;\ntype Row = ExcelJS.Row;\ntype Style = ExcelJS.Style;\nconst Workbook = ExcelJS.Workbook;\n\n// #region Tests\ndescribe(\"Export Manager Test\", () => {\n it(\"Formula conversion\", () => {\n const formulaExamples = {\n [\"[N1]+[N2]\"]: \"A1+B1\", // Row 1\n [\"1+1\"]: \"1+1\", // Row 2\n [\"[N1]+[N2]+[N3]+[N4]\"]: \"A3+B3+C3+D3\", // Row 3\n [\"1,234+1,0001\"]: \"1.234+1.0001\", // Row 4\n [\"[N1]+[N2]-[N1]-[N2]\"]: \"A5+B5-A5-B5\", // Row 5\n [\"([N1]+[N2]/[N3]+[N4])/10\"]: \"(A6+B6/C6+D6)/10\", // Row 6\n [\"[N1]*[N2]\"]: \"A7*B7\", // Row 7\n [\"[N1]/0\"]: \"A8/0\", // Row 8\n [\"([N1]+[N2])-[N1]\"]: \"(A9+B9)-A9\", // Row 9\n [\"([N1]+[N120])\"]: \"(A10+DP10)\", // Row 10\n } as Record<string, string>;\n\n Object.keys(formulaExamples).forEach((smeupFormula, i) => {\n expect(smeupFormulaToExcelFormula(smeupFormula, i, getColumns(120))).toBe(\n formulaExamples[smeupFormula],\n );\n });\n });\n\n it(\"Number format creation\", () => {\n const cellsFormatNumbers: Partial<SmeupDataCell>[] = [\n {\n data: {\n decimals: 0,\n },\n },\n {\n data: {\n decimals: 1,\n },\n },\n {\n data: {\n decimals: 2,\n },\n },\n {\n data: {\n decimals: 3,\n },\n },\n {\n data: {\n decimals: 4,\n },\n },\n ];\n\n cellsFormatNumbers.forEach((cell, index) => {\n const format = \"0.\" + `${index > 0 ? \"0\".repeat(index) : \"00\"}`;\n expect(\n getExcelNumFormat(\n (cell.data?.decimals as number) ?? 0,\n (cell.data as unknown as number) ?? 0,\n ),\n ).toBe(format + \";[Red]-\" + format);\n });\n });\n\n describe(\"SmeupDataTable export\", () => {\n it(\"xlsx format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"csv format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.CSV,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"txt format\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_1,\n SupportedExportFormats.TXT,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.actualRowCount).toBe(3);\n });\n\n it(\"With groups and outline 2 levels\", async () => {\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_sample_2,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n expect(worksheet?.getRow(2).outlineLevel).toBe(0);\n expect(worksheet?.getRow(3).outlineLevel).toBe(1);\n expect(worksheet?.getRow(4).outlineLevel).toBe(2);\n expect(worksheet?.getRow(5).outlineLevel).toBe(0);\n expect(worksheet?.getRow(6).outlineLevel).toBe(1);\n expect(worksheet?.getRow(7).outlineLevel).toBe(2);\n });\n\n it(\"With totals\", async () => {\n const table_totals = JSON.parse(JSON.stringify(table_sample_1));\n table_totals.props = {\n ...table_totals.props,\n totals: totals_sample_1,\n };\n\n const workbook: Workbook = dataTableToExcelWorkbook(\n table_totals,\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n\n // Test number of columns\n expect(worksheet?.columnCount).toBe(8);\n // Test number of rows\n expect(worksheet?.rowCount).toBe(4);\n // Check totals row\n worksheet?.getRow(4).eachCell((cell: Cell) => {\n const columnName = worksheet?.getColumn(cell.col).key;\n if (columnName !== undefined) {\n expect(cell.formula).toBe(\n data_table_totals_result_sample_1[columnName],\n );\n }\n });\n });\n\n it(\"With groups subtotals correct range and action\", () => {\n const totalsExpectedFormula = {\n Count: \"SUBTOTAL(3,C2:C2)\",\n Sum: \"SUBTOTAL(9,C2:C2)\",\n Max: \"SUBTOTAL(4,C2:C2)\",\n Min: \"SUBTOTAL(5,C2:C2)\",\n Average: \"SUBTOTAL(1,C2:C2)\",\n };\n const totalsExpectedSubAction = {\n Count: \"3\",\n Sum: \"9\",\n Max: \"4\",\n Min: \"5\",\n Average: \"1\",\n };\n\n Object.keys(totalsExpectedFormula).forEach(async total => {\n const workbook: ExcelJS.Workbook = dataTableToExcelWorkbook(\n table_footer_actions(\n total,\n [\n { column: \"1\", visible: true },\n { column: \"2\", visible: true },\n ],\n 2,\n 2,\n ),\n SupportedExportFormats.XLSX,\n {} as WebupManagerData,\n );\n const worksheet = workbook.getWorksheet(1);\n\n const totalKey = total as keyof typeof totalsExpectedSubAction;\n\n expect(worksheet?.getRow(2).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C3:C5)`,\n );\n expect(worksheet?.getRow(3).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C4:C5)`,\n );\n expect(worksheet?.getRow(6).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C7:C9)`,\n );\n expect(worksheet?.getRow(7).getCell(3).formula).toBe(\n `SUBTOTAL(${totalsExpectedSubAction[totalKey]},C8:C9)`,\n );\n });\n });\n });\n});\n\ndescribe(\"Cell to XLSX Style converter\", () => {\n const cellStyle = {\n fontWeight: \"bold\",\n backgroundColor: \"#74c0f2\",\n color: \"#000000\",\n };\n const cellResult = {\n fill: {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"FF74c0f2\" },\n },\n font: { bold: true, color: { argb: \"FF000000\" } },\n } as Style;\n\n it(\"SmeupDataCell - Style calculations\", async () => {\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(\"Sheet 1\");\n\n const row: Row = worksheet.addRow([\"Mario Rossi\"]);\n addStyleToExceljsRow(row, [{ name: \"A\", title: \"A\" }], {\n cells: {\n A: {\n value: \"\",\n obj: {\n t: \"\",\n p: \"\",\n k: \"\",\n },\n style: cellStyle,\n },\n },\n } as SmeupDataRow);\n expect(row.getCell(1).style).toStrictEqual(cellResult);\n });\n it(\"SmeupDataNode - Style calculations\", async () => {\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(\"Sheet 1\");\n const row: Row = worksheet.addRow([\"Mario Rossi\"]);\n addStyleToExceljsRow(row, [{ name: \"A\", title: \"A\" }], {\n cells: {\n A: {\n value: \"\",\n obj: {\n t: \"\",\n p: \"\",\n k: \"\",\n },\n style: {},\n },\n },\n style: cellStyle,\n } as unknown as SmeupDataNode);\n expect(row.getCell(1).style).toStrictEqual(cellResult);\n });\n});\n\n// #endregion\n\n// #region Assets\n\nconst getColumns = (numberColumns: number): SmeupDataColumn[] => {\n const columns: SmeupDataColumn[] = [];\n\n for (let num = 1; num <= numberColumns; num++) {\n columns.push({\n name: `N${num}`,\n title: \"\",\n });\n }\n\n return columns;\n};\n\n// Define table_sample_1 for use in tests\nconst totals_sample_1: { [columnName: string]: TotalMode | string } = {\n COL1: \"Count\" as TotalMode,\n COL2: \"Distinct\" as TotalMode,\n HIDDEN_COL: \"Sum\" as TotalMode,\n SUM_COL: \"Sum\" as TotalMode,\n AVG_COL: \"Average\" as TotalMode,\n MIN_COL: \"Min\" as TotalMode,\n MAX_COL: \"Max\" as TotalMode,\n DIFF_COL: `${\"MATH\" as TotalMode}([HIDDEN_COL]-[SUM_COL])`,\n};\n\nconst data_table_totals_result_sample_1: { [key: string]: string } = {\n COL1: \"SUBTOTAL(3,A2:A3)\",\n HIDDEN_COL: \"SUBTOTAL(9,C2:C3)\",\n SUM_COL: \"SUBTOTAL(9,D2:D3)\",\n AVG_COL: \"SUBTOTAL(1,E2:E3)\",\n MIN_COL: \"SUBTOTAL(5,F2:F3)\",\n MAX_COL: \"SUBTOTAL(4,G2:G3)\",\n DIFF_COL: `(C4-D4)`,\n};\n\nexport const table_footer_actions = (\n action: string,\n groups: { column: string; visible: boolean }[],\n rowsNumber: number = 1,\n rowRepetitions: number = 1,\n) => {\n const rows: Array<{\n cells: {\n [key: string]: {\n obj: { t: string; p: string; k: string };\n value: string;\n };\n };\n id: string;\n }> = [];\n for (let i = 0; i < rowsNumber; i++) {\n const rowObj = {\n cells: {\n 1: {\n obj: { t: \"\", p: \"\", k: \"\" },\n value: `1-${i}`,\n },\n 2: {\n obj: { t: \"\", p: \"\", k: \"\" },\n value: `2-${i}`,\n },\n [`${action}`]: {\n obj: { t: \"NR\", p: \"\", k: \"10\" },\n value: `${i + 1}`,\n },\n },\n id: `${i}`,\n };\n for (let i = 0; i < rowRepetitions; i++) {\n rows.push(rowObj);\n }\n }\n return {\n smeupDataTable: {\n type: SmeupDataStructureType.SmeupDataTable,\n columns: [\n {\n name: \"1\",\n title: \"1title\",\n visible: true,\n obj: { t: \"\", p: \"\" },\n },\n {\n name: \"2\",\n title: \"2title\",\n visible: true,\n obj: { t: \"\", p: \"\" },\n },\n {\n name: `${action}`,\n title: `${action}title`,\n visible: true,\n obj: { t: \"NR\", p: \"\" },\n },\n ],\n rows,\n } as SmeupDataTable,\n props: {\n groups,\n totals: action ? { [`${action}`]: `${action}` } : [],\n filter: [],\n },\n };\n};\n// #endregion\n"]}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@sme.up/doc-alchemist",
3
+ "version": "1.0.0-SNAPSHOT-20250613100107",
4
+ "description": "Library for generating documents in various formats, including Excel and PDF.",
5
+ "license": "Apache-2.0",
6
+ "author": "Smeup LAB <info@smeup.com> (https://www.smeup.com/)",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/smeup/doc-alchemist.git"
10
+ },
11
+ "main": "dist/index.js",
12
+ "types": "dist/index.d.ts",
13
+ "files": [
14
+ "dist/**/*"
15
+ ],
16
+ "scripts": {
17
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
18
+ "clean": "rimraf node_modules",
19
+ "build": "rimraf dist && npx tsc",
20
+ "start": "tsx debug.ts"
21
+ },
22
+ "keywords": [],
23
+ "type": "module",
24
+ "devDependencies": {
25
+ "@eslint/js": "^9.28.0",
26
+ "@types/exceljs": "^1.3.2",
27
+ "@types/jest": "^29.5.14",
28
+ "@types/node": "^22.15.30",
29
+ "csstype": "^3.1.3",
30
+ "eslint": "^9.28.0",
31
+ "globals": "^16.2.0",
32
+ "jest": "^29.7.0",
33
+ "prettier": "^3.5.3",
34
+ "ts-jest": "^29.3.4",
35
+ "ts-node": "^10.9.2",
36
+ "tsx": "^4.19.4",
37
+ "typescript": "^5.8.3",
38
+ "typescript-eslint": "^8.33.1"
39
+ },
40
+ "dependencies": {
41
+ "@sme.up/kokos-sdk-node": "^2.2.0-SNAPSHOT",
42
+ "exceljs": "^4.4.0"
43
+ }
44
+ }