@ims-view/server 1.1.0 → 1.2.1

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 (93) hide show
  1. package/README.md +18 -1
  2. package/lib/excel/excel-parse.worker.cjs +279 -0
  3. package/lib/server/src/app.module.js.map +1 -0
  4. package/lib/server/src/config/env.d.ts +40 -0
  5. package/lib/server/src/config/env.js +35 -0
  6. package/lib/server/src/config/env.js.map +1 -0
  7. package/lib/server/src/excel/dto/excel-task-id.dto.d.ts +19 -0
  8. package/lib/server/src/excel/dto/excel-task-id.dto.js +17 -0
  9. package/lib/server/src/excel/dto/excel-task-id.dto.js.map +1 -0
  10. package/lib/server/src/excel/dto/export-excel.dto.d.ts +67 -0
  11. package/lib/server/src/excel/dto/export-excel.dto.js +48 -0
  12. package/lib/server/src/excel/dto/export-excel.dto.js.map +1 -0
  13. package/lib/server/src/excel/excel-storage.service.d.ts +54 -0
  14. package/lib/server/src/excel/excel-storage.service.js +258 -0
  15. package/lib/server/src/excel/excel-storage.service.js.map +1 -0
  16. package/lib/server/src/excel/excel.controller.d.ts +17 -0
  17. package/lib/{excel → server/src/excel}/excel.controller.js +40 -11
  18. package/lib/server/src/excel/excel.controller.js.map +1 -0
  19. package/lib/server/src/excel/excel.converter.d.ts +15 -0
  20. package/lib/server/src/excel/excel.converter.js +53 -0
  21. package/lib/server/src/excel/excel.converter.js.map +1 -0
  22. package/lib/{excel → server/src/excel}/excel.module.js +3 -2
  23. package/lib/server/src/excel/excel.module.js.map +1 -0
  24. package/lib/server/src/excel/excel.service.d.ts +33 -0
  25. package/lib/server/src/excel/excel.service.js +244 -0
  26. package/lib/server/src/excel/excel.service.js.map +1 -0
  27. package/lib/server/src/excel/types.d.ts +6 -0
  28. package/lib/server/src/excel/types.js +44 -0
  29. package/lib/server/src/excel/types.js.map +1 -0
  30. package/lib/server/src/index.d.ts +12 -0
  31. package/lib/server/src/index.js +32 -0
  32. package/lib/server/src/index.js.map +1 -0
  33. package/lib/server/src/main.d.ts +1 -0
  34. package/lib/{main.js → server/src/main.js} +55 -2
  35. package/lib/server/src/main.js.map +1 -0
  36. package/lib/server/src/shared/create-zod-base-model.d.ts +29 -0
  37. package/lib/server/src/shared/create-zod-base-model.js +55 -0
  38. package/lib/server/src/shared/create-zod-base-model.js.map +1 -0
  39. package/lib/server/src/shared/index.d.ts +5 -0
  40. package/lib/server/src/shared/index.js +16 -0
  41. package/lib/server/src/shared/index.js.map +1 -0
  42. package/lib/server/src/shared/response-entity.d.ts +32 -0
  43. package/lib/server/src/shared/response-entity.js +74 -0
  44. package/lib/server/src/shared/response-entity.js.map +1 -0
  45. package/lib/server/src/shared/zod-exception.filter.d.ts +5 -0
  46. package/lib/server/src/shared/zod-exception.filter.js +25 -0
  47. package/lib/server/src/shared/zod-exception.filter.js.map +1 -0
  48. package/lib/server/src/shared/zod-validation.pipe.d.ts +4 -0
  49. package/lib/server/src/shared/zod-validation.pipe.js +25 -0
  50. package/lib/server/src/shared/zod-validation.pipe.js.map +1 -0
  51. package/lib/utils/src/excel/converter.d.ts +8 -0
  52. package/lib/utils/src/excel/converter.js +144 -0
  53. package/lib/utils/src/excel/converter.js.map +1 -0
  54. package/lib/utils/src/excel/exceljsChunked.d.ts +75 -0
  55. package/lib/utils/src/excel/exceljsChunked.js +338 -0
  56. package/lib/utils/src/excel/exceljsChunked.js.map +1 -0
  57. package/lib/utils/src/excel/index.d.ts +9 -0
  58. package/lib/utils/src/excel/index.js +39 -0
  59. package/lib/utils/src/excel/index.js.map +1 -0
  60. package/lib/utils/src/excel/luckyexcel.d.ts +9 -0
  61. package/lib/utils/src/excel/luckyexcel.js +137 -0
  62. package/lib/utils/src/excel/luckyexcel.js.map +1 -0
  63. package/lib/utils/src/excel/sheetjsConverter.d.ts +6 -0
  64. package/lib/utils/src/excel/sheetjsConverter.js +224 -0
  65. package/lib/utils/src/excel/sheetjsConverter.js.map +1 -0
  66. package/lib/utils/src/excel/types.d.ts +88 -0
  67. package/lib/utils/src/excel/types.js +11 -0
  68. package/lib/utils/src/excel/types.js.map +1 -0
  69. package/lib/utils/src/excel/workbookChunked.d.ts +13 -0
  70. package/lib/utils/src/excel/workbookChunked.js +152 -0
  71. package/lib/utils/src/excel/workbookChunked.js.map +1 -0
  72. package/package.json +10 -5
  73. package/lib/app.module.js.map +0 -1
  74. package/lib/excel/excel.controller.d.ts +0 -13
  75. package/lib/excel/excel.controller.js.map +0 -1
  76. package/lib/excel/excel.converter.d.ts +0 -2
  77. package/lib/excel/excel.converter.js +0 -11
  78. package/lib/excel/excel.converter.js.map +0 -1
  79. package/lib/excel/excel.module.js.map +0 -1
  80. package/lib/excel/excel.service.d.ts +0 -9
  81. package/lib/excel/excel.service.js +0 -33
  82. package/lib/excel/excel.service.js.map +0 -1
  83. package/lib/excel/types.d.ts +0 -6
  84. package/lib/excel/types.js +0 -6
  85. package/lib/excel/types.js.map +0 -1
  86. package/lib/index.d.ts +0 -7
  87. package/lib/index.js +0 -14
  88. package/lib/index.js.map +0 -1
  89. package/lib/main.d.ts +0 -1
  90. package/lib/main.js.map +0 -1
  91. /package/lib/{app.module.d.ts → server/src/app.module.d.ts} +0 -0
  92. /package/lib/{app.module.js → server/src/app.module.js} +0 -0
  93. /package/lib/{excel → server/src/excel}/excel.module.d.ts +0 -0
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.excelBufferToWorkbookDataBySheetJs = exports.workbookHasCellValues = exports.workbookFromSheetJs = exports.readExcelWithSheetJs = void 0;
37
+ const XLSX = __importStar(require("xlsx"));
38
+ const types_1 = require("./types");
39
+ const toUint8Array = (input) => {
40
+ if (typeof Buffer !== 'undefined' && Buffer.isBuffer(input)) {
41
+ return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
42
+ }
43
+ if (input instanceof ArrayBuffer) {
44
+ return new Uint8Array(input);
45
+ }
46
+ return input;
47
+ };
48
+ const hasUsefulSheetJsData = (wb) => {
49
+ for (const name of wb.SheetNames) {
50
+ const sheet = wb.Sheets[name];
51
+ if (!sheet)
52
+ continue;
53
+ for (const key of Object.keys(sheet)) {
54
+ if (key.startsWith('!'))
55
+ continue;
56
+ const cell = sheet[key];
57
+ if (cell && (cell.v != null || cell.w != null || cell.f))
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ };
63
+ const readExcelWithSheetJs = (input) => {
64
+ const bytes = toUint8Array(input);
65
+ const base = {
66
+ type: 'array',
67
+ cellDates: true,
68
+ cellNF: true,
69
+ cellText: true,
70
+ };
71
+ try {
72
+ const wb = XLSX.read(bytes, base);
73
+ if (hasUsefulSheetJsData(wb))
74
+ return wb;
75
+ }
76
+ catch {
77
+ }
78
+ return XLSX.read(bytes, { ...base, raw: false });
79
+ };
80
+ exports.readExcelWithSheetJs = readExcelWithSheetJs;
81
+ const cellFromSheetJs = (cell) => {
82
+ if (!cell || (cell.v == null && cell.w == null && !cell.f))
83
+ return null;
84
+ const display = cell.w != null ? String(cell.w) : null;
85
+ let value = cell.v;
86
+ let type = types_1.CellValueType.STRING;
87
+ if (cell.t === 'n' || typeof cell.v === 'number') {
88
+ type = types_1.CellValueType.NUMBER;
89
+ value = typeof cell.v === 'number' ? cell.v : Number(cell.v);
90
+ }
91
+ else if (cell.t === 'b' || typeof cell.v === 'boolean') {
92
+ type = types_1.CellValueType.BOOLEAN;
93
+ value = Boolean(cell.v);
94
+ }
95
+ else if (cell.v instanceof Date) {
96
+ type = types_1.CellValueType.STRING;
97
+ value = display || cell.v.toLocaleString();
98
+ }
99
+ else {
100
+ type = types_1.CellValueType.STRING;
101
+ value = display || String(cell.v ?? '');
102
+ }
103
+ if (cell.f) {
104
+ const formula = String(cell.f).startsWith('=') ? String(cell.f) : `=${cell.f}`;
105
+ return { f: formula, v: value, t: type };
106
+ }
107
+ if (value === '' && display == null)
108
+ return null;
109
+ return { v: value, t: type };
110
+ };
111
+ const workbookFromSheetJs = (wb, fileName = 'workbook.xlsx') => {
112
+ const sheets = {};
113
+ const sheetOrder = [];
114
+ wb.SheetNames.forEach((name, index) => {
115
+ const id = `sheet-${index}`;
116
+ const sheet = wb.Sheets[name] || {};
117
+ const cellData = {};
118
+ let maxRow = 0;
119
+ let maxCol = 0;
120
+ if (sheet['!ref']) {
121
+ const range = XLSX.utils.decode_range(sheet['!ref']);
122
+ for (let r = range.s.r; r <= range.e.r; r += 1) {
123
+ for (let c = range.s.c; c <= range.e.c; c += 1) {
124
+ const addr = XLSX.utils.encode_cell({ r, c });
125
+ const mapped = cellFromSheetJs(sheet[addr]);
126
+ if (!mapped)
127
+ continue;
128
+ if (!cellData[r])
129
+ cellData[r] = {};
130
+ cellData[r][c] = mapped;
131
+ maxRow = Math.max(maxRow, r);
132
+ maxCol = Math.max(maxCol, c);
133
+ }
134
+ }
135
+ }
136
+ const merges = (sheet['!merges'] || []).map((m) => ({
137
+ startRow: m.s.r,
138
+ startColumn: m.s.c,
139
+ endRow: m.e.r,
140
+ endColumn: m.e.c,
141
+ }));
142
+ for (const m of merges) {
143
+ const master = cellData[m.startRow]?.[m.startColumn];
144
+ for (let r = m.startRow; r <= m.endRow; r += 1) {
145
+ if (!cellData[r])
146
+ continue;
147
+ for (let c = m.startColumn; c <= m.endColumn; c += 1) {
148
+ if (r === m.startRow && c === m.startColumn)
149
+ continue;
150
+ delete cellData[r][c];
151
+ }
152
+ }
153
+ if (master) {
154
+ if (!cellData[m.startRow])
155
+ cellData[m.startRow] = {};
156
+ cellData[m.startRow][m.startColumn] = master;
157
+ }
158
+ }
159
+ const columnData = {};
160
+ if (sheet['!cols']) {
161
+ sheet['!cols'].forEach((col, i) => {
162
+ if (!col)
163
+ return;
164
+ if (col.wpx)
165
+ columnData[i] = { w: col.wpx };
166
+ else if (col.width)
167
+ columnData[i] = { w: Math.round(col.width * 8) };
168
+ });
169
+ }
170
+ sheetOrder.push(id);
171
+ sheets[id] = {
172
+ id,
173
+ name: name || `Sheet${index + 1}`,
174
+ rowCount: Math.max(maxRow + 50, 100),
175
+ columnCount: Math.max(maxCol + 10, 26),
176
+ cellData,
177
+ columnData,
178
+ mergeData: merges,
179
+ };
180
+ });
181
+ if (!sheetOrder.length) {
182
+ sheetOrder.push('sheet-0');
183
+ sheets['sheet-0'] = {
184
+ id: 'sheet-0',
185
+ name: 'Sheet1',
186
+ rowCount: 100,
187
+ columnCount: 26,
188
+ cellData: {},
189
+ mergeData: [],
190
+ };
191
+ }
192
+ return {
193
+ id: `wb-${Date.now()}`,
194
+ name: fileName,
195
+ appVersion: '0.25.1',
196
+ locale: 'zhCN',
197
+ styles: {},
198
+ sheetOrder,
199
+ sheets,
200
+ };
201
+ };
202
+ exports.workbookFromSheetJs = workbookFromSheetJs;
203
+ const workbookHasCellValues = (data) => {
204
+ const sheets = data.sheets || {};
205
+ for (const sheet of Object.values(sheets)) {
206
+ const cellData = sheet?.cellData || {};
207
+ for (const row of Object.values(cellData)) {
208
+ if (!row)
209
+ continue;
210
+ for (const cell of Object.values(row)) {
211
+ if (cell && (cell.v != null || cell.f))
212
+ return true;
213
+ }
214
+ }
215
+ }
216
+ return false;
217
+ };
218
+ exports.workbookHasCellValues = workbookHasCellValues;
219
+ const excelBufferToWorkbookDataBySheetJs = (input, fileName = 'workbook.xlsx') => {
220
+ const wb = (0, exports.readExcelWithSheetJs)(input);
221
+ return (0, exports.workbookFromSheetJs)(wb, fileName);
222
+ };
223
+ exports.excelBufferToWorkbookDataBySheetJs = excelBufferToWorkbookDataBySheetJs;
224
+ //# sourceMappingURL=sheetjsConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheetjsConverter.js","sourceRoot":"","sources":["../../../../../utils/src/excel/sheetjsConverter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,mCAMiB;AAEjB,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAc,EAAE;IACtD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,EAAiB,EAAW,EAAE;IAC1D,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAoB,CAAC;YAC3C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAGK,MAAM,oBAAoB,GAAG,CAAC,KAAkB,EAAiB,EAAE;IACxE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,OAAgB;QACtB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,oBAAoB,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B;AAEF,MAAM,eAAe,GAAG,CAAC,IAAiC,EAAoB,EAAE;IAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAGxE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,IAAI,KAAK,GAA8B,IAAI,CAAC,CAA8B,CAAC;IAC3E,IAAI,IAAI,GAAG,qBAAa,CAAC,MAAM,CAAC;IAEhC,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjD,IAAI,GAAG,qBAAa,CAAC,MAAM,CAAC;QAC5B,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzD,IAAI,GAAG,qBAAa,CAAC,OAAO,CAAC;QAC7B,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;QAClC,IAAI,GAAG,qBAAa,CAAC,MAAM,CAAC;QAC5B,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,qBAAa,CAAC,MAAM,CAAC;QAC5B,KAAK,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,KAAK,EAAE,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC,CAAC;AAGK,MAAM,mBAAmB,GAAG,CACjC,EAAiB,EACjB,QAAQ,GAAG,eAAe,EACF,EAAE;IAC1B,MAAM,MAAM,GAA4C,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,SAAS,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAA8C,EAAE,CAAC;QAC/D,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAC,CAAC;oBAC3E,IAAI,CAAC,MAAM;wBAAE,SAAS;oBACtB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBACnC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;oBACxB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC7B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACb,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACjB,CAAC,CAAC,CAAC;QAGJ,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW;wBAAE,SAAS;oBACtD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACrD,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAmC,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,IAAI,GAAG,CAAC,GAAG;oBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;qBACvC,IAAI,GAAG,CAAC,KAAK;oBAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,GAAG;YACX,EAAE;YACF,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE;YACjC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,CAAC;YACpC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC;YACtC,QAAQ;YACR,UAAU;YACV,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,CAAC,SAAS,CAAC,GAAG;YAClB,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,GAAG;YACb,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE;QACtB,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,EAAE;QACV,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AA9FW,QAAA,mBAAmB,uBA8F9B;AAEK,MAAM,qBAAqB,GAAG,CAAC,IAA4B,EAAW,EAAE;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAZW,QAAA,qBAAqB,yBAYhC;AAGK,MAAM,kCAAkC,GAAG,CAChD,KAAkB,EAClB,QAAQ,GAAG,eAAe,EACF,EAAE;IAC1B,MAAM,EAAE,GAAG,IAAA,4BAAoB,EAAC,KAAK,CAAC,CAAC;IACvC,OAAO,IAAA,2BAAmB,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3C,CAAC,CAAC;AANW,QAAA,kCAAkC,sCAM7C"}
@@ -0,0 +1,88 @@
1
+ export declare enum CellValueType {
2
+ STRING = 1,
3
+ NUMBER = 2,
4
+ BOOLEAN = 3,
5
+ FORCE_STRING = 4
6
+ }
7
+ export interface ICellData {
8
+ v?: string | number | boolean;
9
+ t?: CellValueType;
10
+ f?: string;
11
+ si?: string;
12
+ s?: string | Record<string, unknown>;
13
+ p?: unknown;
14
+ custom?: Record<string, unknown>;
15
+ }
16
+ export interface IRange {
17
+ startRow: number;
18
+ startColumn: number;
19
+ endRow: number;
20
+ endColumn: number;
21
+ }
22
+ export interface IWorksheetData {
23
+ id: string;
24
+ name: string;
25
+ cellData?: Record<number, Record<number, ICellData>>;
26
+ mergeData?: IRange[];
27
+ rowCount?: number;
28
+ columnCount?: number;
29
+ columnData?: Record<number, {
30
+ w?: number;
31
+ hd?: number;
32
+ }>;
33
+ rowData?: Record<number, {
34
+ h?: number;
35
+ hd?: number;
36
+ }>;
37
+ freeze?: {
38
+ xSplit: number;
39
+ ySplit: number;
40
+ startRow: number;
41
+ startColumn: number;
42
+ };
43
+ defaultColumnWidth?: number;
44
+ defaultRowHeight?: number;
45
+ tabColor?: string;
46
+ hidden?: number;
47
+ zoomRatio?: number;
48
+ scrollTop?: number;
49
+ scrollLeft?: number;
50
+ rowHeader?: {
51
+ width: number;
52
+ hidden?: number;
53
+ };
54
+ columnHeader?: {
55
+ height: number;
56
+ hidden?: number;
57
+ };
58
+ showGridlines?: number;
59
+ rightToLeft?: number;
60
+ }
61
+ export interface IWorkbookData {
62
+ id?: string;
63
+ name?: string;
64
+ appVersion?: string;
65
+ locale?: string;
66
+ styles?: Record<string, unknown>;
67
+ sheetOrder?: string[];
68
+ sheets?: Record<string, Partial<IWorksheetData>>;
69
+ resources?: Array<{
70
+ name: string;
71
+ data: string;
72
+ }>;
73
+ }
74
+ export type ExcelSheetImage = {
75
+ sheetId: string;
76
+ dataUrl: string;
77
+ col: number;
78
+ row: number;
79
+ width?: number;
80
+ height?: number;
81
+ offsetX?: number;
82
+ offsetY?: number;
83
+ };
84
+ export type ExcelImportResult = {
85
+ workbookData: Partial<IWorkbookData>;
86
+ images: ExcelSheetImage[];
87
+ };
88
+ export type ExcelBinary = ArrayBuffer | Uint8Array;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CellValueType = void 0;
4
+ var CellValueType;
5
+ (function (CellValueType) {
6
+ CellValueType[CellValueType["STRING"] = 1] = "STRING";
7
+ CellValueType[CellValueType["NUMBER"] = 2] = "NUMBER";
8
+ CellValueType[CellValueType["BOOLEAN"] = 3] = "BOOLEAN";
9
+ CellValueType[CellValueType["FORCE_STRING"] = 4] = "FORCE_STRING";
10
+ })(CellValueType || (exports.CellValueType = CellValueType = {}));
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../utils/src/excel/types.ts"],"names":[],"mappings":";;;AAEA,IAAY,aASX;AATD,WAAY,aAAa;IAEvB,qDAAU,CAAA;IAEV,qDAAU,CAAA;IAEV,uDAAW,CAAA;IAEX,iEAAgB,CAAA;AAClB,CAAC,EATW,aAAa,6BAAb,aAAa,QASxB"}
@@ -0,0 +1,13 @@
1
+ import { type ChunkedBlock, type ChunkedProgress, type ChunkedWorkbookMeta } from './exceljsChunked';
2
+ import type { IWorkbookData } from './types';
3
+ export type SplitWorkbookOptions = {
4
+ fileName?: string;
5
+ blockRowSize?: number;
6
+ maxRows?: number;
7
+ onProgress?: (progress: ChunkedProgress) => void;
8
+ onBlock?: (block: ChunkedBlock) => void | Promise<void>;
9
+ };
10
+ export declare const splitWorkbookDataToChunks: (workbookData: Partial<IWorkbookData>, options?: SplitWorkbookOptions) => Promise<{
11
+ meta: ChunkedWorkbookMeta;
12
+ blocks: ChunkedBlock[];
13
+ }>;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitWorkbookDataToChunks = void 0;
4
+ const exceljsChunked_1 = require("./exceljsChunked");
5
+ const sheetMaxRow = (cellData) => {
6
+ if (!cellData)
7
+ return 0;
8
+ let max = -1;
9
+ Object.keys(cellData).forEach((key) => {
10
+ const row = Number(key);
11
+ if (Number.isFinite(row))
12
+ max = Math.max(max, row);
13
+ });
14
+ return max + 1;
15
+ };
16
+ const sheetMaxCol = (cellData) => {
17
+ if (!cellData)
18
+ return 0;
19
+ let max = -1;
20
+ Object.values(cellData).forEach((row) => {
21
+ Object.keys(row || {}).forEach((key) => {
22
+ const col = Number(key);
23
+ if (Number.isFinite(col))
24
+ max = Math.max(max, col);
25
+ });
26
+ });
27
+ return max + 1;
28
+ };
29
+ const clipMerges = (merges, maxRowExclusive) => {
30
+ if (!merges?.length)
31
+ return undefined;
32
+ const next = merges
33
+ .filter((m) => m.startRow < maxRowExclusive)
34
+ .map((m) => ({
35
+ ...m,
36
+ endRow: Math.min(m.endRow, maxRowExclusive - 1),
37
+ }));
38
+ return next.length ? next : undefined;
39
+ };
40
+ const clipRowData = (rowData, maxRowExclusive) => {
41
+ if (!rowData)
42
+ return undefined;
43
+ const next = {};
44
+ Object.keys(rowData).forEach((key) => {
45
+ const row = Number(key);
46
+ if (!Number.isFinite(row) || row < 0 || row >= maxRowExclusive)
47
+ return;
48
+ next[row] = rowData[row];
49
+ });
50
+ return Object.keys(next).length ? next : undefined;
51
+ };
52
+ const sliceCellData = (cellData, startRow, endRow) => {
53
+ const out = {};
54
+ if (!cellData)
55
+ return out;
56
+ for (let r = startRow; r <= endRow; r += 1) {
57
+ const row = cellData[r];
58
+ if (!row)
59
+ continue;
60
+ out[r] = row;
61
+ }
62
+ return out;
63
+ };
64
+ const splitWorkbookDataToChunks = async (workbookData, options = {}) => {
65
+ const fileName = options.fileName || workbookData.name || 'workbook.xlsx';
66
+ const blockRowSize = Math.max(100, options.blockRowSize || exceljsChunked_1.DEFAULT_BLOCK_ROW_SIZE);
67
+ const maxRows = options.maxRows === 0
68
+ ? Number.POSITIVE_INFINITY
69
+ : options.maxRows ?? exceljsChunked_1.DEFAULT_MAX_ROWS;
70
+ options.onProgress?.({ percent: 35, parsedBlocks: 0, totalBlocks: 0, phase: 'convert' });
71
+ const sheetOrder = workbookData.sheetOrder?.length
72
+ ? [...workbookData.sheetOrder]
73
+ : Object.keys(workbookData.sheets || {});
74
+ const sheetsMeta = [];
75
+ const blocks = [];
76
+ let truncated = false;
77
+ let emittedBlocks = 0;
78
+ const planned = sheetOrder.map((sheetId, sheetIndex) => {
79
+ const sheet = (workbookData.sheets?.[sheetId] || {});
80
+ const dataRows = Math.max(sheetMaxRow(sheet.cellData), sheet.rowCount || 0);
81
+ const cappedRows = Math.min(dataRows, maxRows);
82
+ if (dataRows > maxRows)
83
+ truncated = true;
84
+ const blockCount = Math.max(1, Math.ceil(Math.max(cappedRows, 1) / blockRowSize));
85
+ return { sheetId, sheetIndex, sheet, cappedRows, blockCount };
86
+ });
87
+ const totalBlocks = planned.reduce((sum, item) => sum + item.blockCount, 0) || 1;
88
+ for (const item of planned) {
89
+ const { sheetId, sheetIndex, sheet, cappedRows, blockCount } = item;
90
+ const columnCount = Math.max(sheetMaxCol(sheet.cellData), sheet.columnCount || 0, 1);
91
+ for (let blockIndex = 0; blockIndex < blockCount; blockIndex += 1) {
92
+ const startRow = blockIndex * blockRowSize;
93
+ const endRow = Math.min(cappedRows, startRow + blockRowSize) - 1;
94
+ const cellData = cappedRows > 0 && endRow >= startRow
95
+ ? sliceCellData(sheet.cellData, startRow, endRow)
96
+ : {};
97
+ const block = {
98
+ sheetId,
99
+ sheetIndex,
100
+ blockIndex,
101
+ startRow: Math.max(0, startRow),
102
+ endRow: Math.max(0, endRow),
103
+ cellData,
104
+ };
105
+ blocks.push(block);
106
+ emittedBlocks += 1;
107
+ await options.onBlock?.(block);
108
+ options.onProgress?.({
109
+ percent: Math.min(95, 35 + Math.round((emittedBlocks / totalBlocks) * 60)),
110
+ parsedBlocks: emittedBlocks,
111
+ totalBlocks,
112
+ phase: 'convert',
113
+ });
114
+ }
115
+ sheetsMeta.push({
116
+ id: sheetId,
117
+ name: sheet.name || `Sheet${sheetIndex + 1}`,
118
+ rowCount: Math.max(cappedRows, 1),
119
+ columnCount,
120
+ blockCount,
121
+ mergeData: clipMerges(sheet.mergeData, cappedRows),
122
+ columnData: sheet.columnData,
123
+ rowData: clipRowData(sheet.rowData, cappedRows),
124
+ defaultColumnWidth: sheet.defaultColumnWidth,
125
+ defaultRowHeight: sheet.defaultRowHeight,
126
+ });
127
+ }
128
+ const meta = {
129
+ parseEngine: 'luckyexcel',
130
+ fileName,
131
+ name: workbookData.name || fileName.replace(/\.xlsx$/i, '') || 'workbook',
132
+ sheetOrder,
133
+ sheets: sheetsMeta,
134
+ blockRowSize,
135
+ truncated: truncated || undefined,
136
+ maxRows: Number.isFinite(maxRows) ? maxRows : undefined,
137
+ styles: workbookData.styles,
138
+ resources: workbookData.resources,
139
+ appVersion: workbookData.appVersion,
140
+ locale: workbookData.locale,
141
+ workbookId: workbookData.id,
142
+ };
143
+ options.onProgress?.({
144
+ percent: 100,
145
+ parsedBlocks: emittedBlocks,
146
+ totalBlocks,
147
+ phase: 'done',
148
+ });
149
+ return { meta, blocks };
150
+ };
151
+ exports.splitWorkbookDataToChunks = splitWorkbookDataToChunks;
152
+ //# sourceMappingURL=workbookChunked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbookChunked.js","sourceRoot":"","sources":["../../../../../utils/src/excel/workbookChunked.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ims-view/server",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "NestJS Excel import/export service for ExcelEditor (xlsx ↔ IWorkbookData)",
5
5
  "license": "MIT",
6
6
  "author": "eternallycyf(969475322@qq.com)",
@@ -24,25 +24,30 @@
24
24
  "README.md"
25
25
  ],
26
26
  "scripts": {
27
- "start": "nest start",
28
- "start:dev": "nest start --watch",
27
+ "start": "node scripts/dev.cjs",
28
+ "start:dev": "node scripts/dev.cjs",
29
+ "start:once": "node scripts/dev.cjs --once",
30
+ "start:debug": "node scripts/dev.cjs --inspect-brk",
29
31
  "build": "nest build",
30
32
  "clean": "rm -rf lib dist",
31
33
  "doctor": "node -e \"require('fs').accessSync('src/index.ts'); console.log('[@ims-view/server] doctor ok')\"",
32
34
  "prepublishOnly": "npm run build"
33
35
  },
34
36
  "dependencies": {
35
- "@ims-view/utils": "1.22.0",
37
+ "@ims-view/utils": "1.22.1",
36
38
  "@nestjs/common": "^11.0.0",
37
39
  "@nestjs/core": "^11.0.0",
38
40
  "@nestjs/platform-express": "^11.0.0",
41
+ "compression": "^1.8.1",
39
42
  "multer": "^1.4.5-lts.2",
40
43
  "reflect-metadata": "^0.2.2",
41
- "rxjs": "^7.8.2"
44
+ "rxjs": "^7.8.2",
45
+ "zod": "^3.25.76"
42
46
  },
43
47
  "devDependencies": {
44
48
  "@nestjs/cli": "^11.0.0",
45
49
  "@nestjs/schematics": "^11.0.0",
50
+ "@types/compression": "^1.8.1",
46
51
  "@types/express": "^5.0.0",
47
52
  "@types/multer": "^1.4.12",
48
53
  "@types/node": "^22.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uDAAmD;AAK5C,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAHrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,SAAS,CAAG"}
@@ -1,13 +0,0 @@
1
- import type { Response } from 'express';
2
- import { ExcelService } from './excel.service';
3
- import type { ExportExcelDto } from './types';
4
- export declare class ExcelController {
5
- private readonly excelService;
6
- constructor(excelService: ExcelService);
7
- health(): {
8
- ok: boolean;
9
- service: string;
10
- };
11
- importExcel(file: Express.Multer.File): Promise<import("@ims-view/utils").ExcelImportResult>;
12
- exportExcel(body: ExportExcelDto, res: Response): Promise<void>;
13
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"excel.controller.js","sourceRoot":"","sources":["../../src/excel/excel.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,+DAA2D;AAE3D,mCAAuC;AACvC,mDAA+C;AAKxC,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAG3D,MAAM;QACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IACjD,CAAC;IASK,AAAN,KAAK,CAAC,WAAW,CAAiB,IAAyB;QACzD,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAS,IAAoB,EAAS,GAAa;QAClE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtE,GAAG,CAAC,SAAS,CACX,cAAc,EACd,mEAAmE,CACpE,CAAC;QACF,GAAG,CAAC,SAAS,CACX,qBAAqB,EACrB,gCAAgC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAC/D,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;CACF,CAAA;AAjCY,0CAAe;AAI1B;IADC,IAAA,YAAG,EAAC,QAAQ,CAAC;;;;6CAGb;AASK;IAPL,IAAA,aAAI,EAAC,QAAQ,CAAC;IACd,IAAA,wBAAe,EACd,IAAA,kCAAe,EAAC,MAAM,EAAE;QACtB,OAAO,EAAE,IAAA,sBAAa,GAAE;QACxB,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;KACvC,CAAC,CACH;IACkB,WAAA,IAAA,qBAAY,GAAE,CAAA;;;;kDAEhC;AAGK;IADL,IAAA,aAAI,EAAC,QAAQ,CAAC;IACI,WAAA,IAAA,aAAI,GAAE,CAAA;IAAwB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;kDAYrD;0BAhCU,eAAe;IAD3B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEyB,4BAAY;GAD5C,eAAe,CAiC3B"}
@@ -1,2 +0,0 @@
1
- export type { ExcelImportResult, ExcelSheetImage, ICellData, IRange, IWorkbookData, IWorksheetData, } from '@ims-view/utils';
2
- export { CellValueType, ensureXlsxBytes, excelBufferToImportResult, excelBufferToWorkbookData, workbookDataToExcelBuffer, workbookDataToExcelBytes, } from '@ims-view/utils';
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.workbookDataToExcelBytes = exports.workbookDataToExcelBuffer = exports.excelBufferToWorkbookData = exports.excelBufferToImportResult = exports.ensureXlsxBytes = exports.CellValueType = void 0;
4
- var utils_1 = require("@ims-view/utils");
5
- Object.defineProperty(exports, "CellValueType", { enumerable: true, get: function () { return utils_1.CellValueType; } });
6
- Object.defineProperty(exports, "ensureXlsxBytes", { enumerable: true, get: function () { return utils_1.ensureXlsxBytes; } });
7
- Object.defineProperty(exports, "excelBufferToImportResult", { enumerable: true, get: function () { return utils_1.excelBufferToImportResult; } });
8
- Object.defineProperty(exports, "excelBufferToWorkbookData", { enumerable: true, get: function () { return utils_1.excelBufferToWorkbookData; } });
9
- Object.defineProperty(exports, "workbookDataToExcelBuffer", { enumerable: true, get: function () { return utils_1.workbookDataToExcelBuffer; } });
10
- Object.defineProperty(exports, "workbookDataToExcelBytes", { enumerable: true, get: function () { return utils_1.workbookDataToExcelBytes; } });
11
- //# sourceMappingURL=excel.converter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"excel.converter.js","sourceRoot":"","sources":["../../src/excel/excel.converter.ts"],"names":[],"mappings":";;;AAWA,yCAOyB;AANvB,sGAAA,aAAa,OAAA;AACb,wGAAA,eAAe,OAAA;AACf,kHAAA,yBAAyB,OAAA;AACzB,kHAAA,yBAAyB,OAAA;AACzB,kHAAA,yBAAyB,OAAA;AACzB,iHAAA,wBAAwB,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"excel.module.js","sourceRoot":"","sources":["../../src/excel/excel.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,yDAAqD;AACrD,mDAA+C;AAOxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
@@ -1,9 +0,0 @@
1
- import type { ExcelImportResult } from './excel.converter';
2
- import type { ExportExcelDto } from './types';
3
- export declare class ExcelService {
4
- importFile(file?: Express.Multer.File): Promise<ExcelImportResult>;
5
- exportFile(body: ExportExcelDto): Promise<{
6
- buffer: Buffer;
7
- fileName: string;
8
- }>;
9
- }
@@ -1,33 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ExcelService = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const excel_converter_1 = require("./excel.converter");
12
- let ExcelService = class ExcelService {
13
- async importFile(file) {
14
- if (!file?.buffer?.length) {
15
- throw new common_1.BadRequestException('请上传 Excel 文件(.xlsx / .xls)');
16
- }
17
- return (0, excel_converter_1.excelBufferToImportResult)(file.buffer, file.originalname);
18
- }
19
- async exportFile(body) {
20
- if (!body?.data) {
21
- throw new common_1.BadRequestException('缺少工作簿数据 data');
22
- }
23
- const buffer = await (0, excel_converter_1.workbookDataToExcelBuffer)(body.data);
24
- const rawName = body.fileName?.trim() || body.data.name || 'workbook';
25
- const fileName = rawName.endsWith('.xlsx') ? rawName : `${rawName}.xlsx`;
26
- return { buffer, fileName };
27
- }
28
- };
29
- exports.ExcelService = ExcelService;
30
- exports.ExcelService = ExcelService = __decorate([
31
- (0, common_1.Injectable)()
32
- ], ExcelService);
33
- //# sourceMappingURL=excel.service.js.map