@ims-view/server 1.2.1 → 1.2.3

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 (42) hide show
  1. package/README.md +9 -7
  2. package/lib/excel/excel-export.worker.cjs +70 -0
  3. package/lib/excel/excel-parse.worker.cjs +70 -235
  4. package/lib/server/src/config/env.d.ts +0 -9
  5. package/lib/server/src/config/env.js +0 -3
  6. package/lib/server/src/config/env.js.map +1 -1
  7. package/lib/server/src/excel/excel-storage.service.js +11 -2
  8. package/lib/server/src/excel/excel-storage.service.js.map +1 -1
  9. package/lib/server/src/excel/excel.controller.js +1 -1
  10. package/lib/server/src/excel/excel.controller.js.map +1 -1
  11. package/lib/server/src/excel/excel.service.d.ts +3 -3
  12. package/lib/server/src/excel/excel.service.js +212 -66
  13. package/lib/server/src/excel/excel.service.js.map +1 -1
  14. package/lib/server/src/main.js +3 -0
  15. package/lib/server/src/main.js.map +1 -1
  16. package/lib/utils/src/excel/converter.d.ts +0 -1
  17. package/lib/utils/src/excel/converter.js +9 -17
  18. package/lib/utils/src/excel/converter.js.map +1 -1
  19. package/lib/utils/src/excel/exceljsChunked.d.ts +2 -75
  20. package/lib/utils/src/excel/exceljsChunked.js +13 -335
  21. package/lib/utils/src/excel/exceljsChunked.js.map +1 -1
  22. package/lib/utils/src/excel/exceljsCompat.d.ts +4 -0
  23. package/lib/utils/src/excel/exceljsCompat.js +56 -0
  24. package/lib/utils/src/excel/exceljsCompat.js.map +1 -0
  25. package/lib/utils/src/excel/exceljsDrawings.d.ts +2 -0
  26. package/lib/utils/src/excel/exceljsDrawings.js +8 -0
  27. package/lib/utils/src/excel/exceljsDrawings.js.map +1 -0
  28. package/lib/utils/src/excel/exceljsStyle.d.ts +2 -0
  29. package/lib/utils/src/excel/exceljsStyle.js +10 -0
  30. package/lib/utils/src/excel/exceljsStyle.js.map +1 -0
  31. package/lib/utils/src/excel/exportWorkerClient.d.ts +31 -0
  32. package/lib/utils/src/excel/exportWorkerClient.js +105 -0
  33. package/lib/utils/src/excel/exportWorkerClient.js.map +1 -0
  34. package/lib/utils/src/excel/index.d.ts +9 -3
  35. package/lib/utils/src/excel/index.js +20 -2
  36. package/lib/utils/src/excel/index.js.map +1 -1
  37. package/lib/utils/src/excel/luckyexcel.d.ts +10 -6
  38. package/lib/utils/src/excel/luckyexcel.js +110 -36
  39. package/lib/utils/src/excel/luckyexcel.js.map +1 -1
  40. package/lib/utils/src/excel/workbookChunked.js +4 -4
  41. package/lib/utils/src/excel/workbookChunked.js.map +1 -1
  42. package/package.json +4 -2
package/README.md CHANGED
@@ -41,7 +41,7 @@ IMS_SERVER_PORT=3010 pnpm start:server
41
41
 
42
42
  不需要热重载时:`pnpm --dir packages/server start:once`
43
43
 
44
- 请求体校验使用 Zod(`createZodBaseModel` + `ZodValidationPipe`),JSON 接口统一 `ResponseEntity`:`{ code, data, msg }`(`code === 0` 成功)。`POST /excel/export` 仍直接返回 xlsx 二进制。
44
+ 请求体校验使用 Zod(`createZodBaseModel` + `ZodValidationPipe`),JSON 接口统一 `ResponseEntity`:`{ code, data, msg }`(`code === 0` 成功)。`POST /excel/export` 返回 xlsx 二进制,内部走 **ExcelJS `worker_threads`**(不堵 Nest 主线程)。
45
45
 
46
46
  ## 嵌入 Nest 应用
47
47
 
@@ -66,17 +66,19 @@ export class AppModule {}
66
66
  | `IMS_EXCEL_UPLOAD_DIR` | 上传文件目录 | `os.tmpdir()/ims-excel-uploads` |
67
67
  | `IMS_EXCEL_UPLOAD_TTL_MS` | 上传文件保留时长 | `3600000`(1h) |
68
68
  | `IMS_EXCEL_UPLOAD_CLEANUP_MS` | 定时清理间隔 | `600000`(10min) |
69
- | `IMS_EXCEL_CHUNK_BYTES` | 超过该体积走分块挂载(LuckyExcel 解析后切块) | `2097152`(2MB) |
70
- | `IMS_EXCEL_BLOCK_ROWS` | 渐进挂载每块行数(不是总行上限) | `5000` |
71
- | `IMS_EXCEL_MAX_ROWS` | 大文件导入行上限(`0`=不截断) | `150000` |
72
- | `IMS_EXCEL_PARSE_TIMEOUT_MS` | 单次解析超时 | `600000`(10min) |
69
+ | `IMS_EXCEL_PARSE_TIMEOUT_MS` | 单次解析 / 导出超时 | `600000`(10min) |
73
70
 
74
71
  前端对接:`IMS_EXCHANGE_ENDPOINT=http://localhost:3010`
75
72
 
76
73
  ## 导入策略
77
74
 
78
- - **小文件**:LuckyExcel `{id}.snapshot.json`,前端一次 `createWorkbook`
79
- - **大文件(默认 >2MB)**:同一套 **LuckyExcel** 解析 → `{id}.meta.json` + blocks,前端骨架(含 styles/resources)+ 分批 `setValues`
75
+ 参考 [CasualOffice/sheets large-file pipeline](https://github.com/CasualOffice/sheets/blob/main/docs/LARGE_FILE_PIPELINE.md):解析放 Worker,前端渐进挂载。
76
+
77
+ - 一律 **ExcelJS Worker** → meta + blocks(不堵 Nest,有进度日志)
78
+ - 目标:约 **10 万行级 xlsx,解析完成约 10s 内**
79
+ - 样式:默认映射(字体/填充/边框/对齐/数字格式/锁定 `lo` + `meta.styles` intern)
80
+ - 另支持:浮动图(`SHEET_DRAWING_PLUGIN`)、冻结窗格(`sheet.freeze`)
81
+ - **不做**:条件格式、数据验证、图表、EMF 等非位图
80
82
  ## API
81
83
 
82
84
  见文档站:
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Nest 导出 Worker(纯 CJS):LuckyExcel Univer→xlsx(与浏览器同一套),不堵 HTTP 主线程。
3
+ * workerData: { snapshotPath, outPath, fileName }
4
+ */
5
+ const { parentPort, workerData } = require('worker_threads');
6
+ const { readFile, writeFile } = require('fs/promises');
7
+ const path = require('path');
8
+ const { createRequire } = require('module');
9
+
10
+ const requireFromHere = createRequire(__filename);
11
+
12
+ const resolveUtilsExcel = () => {
13
+ const candidates = [
14
+ () => requireFromHere.resolve('@ims-view/utils'),
15
+ () =>
16
+ requireFromHere.resolve('@ims-view/utils', {
17
+ paths: [
18
+ path.resolve(__dirname, '../../..'),
19
+ path.resolve(__dirname, '../../../../node_modules'),
20
+ ],
21
+ }),
22
+ ];
23
+ for (const tryResolve of candidates) {
24
+ try {
25
+ const id = tryResolve();
26
+ // eslint-disable-next-line import/no-dynamic-require
27
+ return require(id);
28
+ } catch {
29
+ // continue
30
+ }
31
+ }
32
+ throw new Error('无法解析 @ims-view/utils,请先构建 packages/utils');
33
+ };
34
+
35
+ const post = (msg) => parentPort && parentPort.postMessage(msg);
36
+ const log = (message) => post({ type: 'log', message });
37
+
38
+ (async () => {
39
+ const started = Date.now();
40
+ const { snapshotPath, outPath, fileName } = workerData || {};
41
+ if (!snapshotPath || !outPath) {
42
+ throw new Error('workerData 缺少 snapshotPath / outPath');
43
+ }
44
+
45
+ log(`export worker start file=${fileName || path.basename(outPath)} engine=luckyexcel`);
46
+ const raw = await readFile(snapshotPath, 'utf8');
47
+ const snapshot = JSON.parse(raw);
48
+ const utils = resolveUtilsExcel();
49
+ const workbookDataToExcelBuffer = utils.workbookDataToExcelBuffer;
50
+ if (typeof workbookDataToExcelBuffer !== 'function') {
51
+ throw new Error('@ims-view/utils 未导出 workbookDataToExcelBuffer');
52
+ }
53
+
54
+ const buffer = await workbookDataToExcelBuffer(snapshot, fileName || path.basename(outPath));
55
+ await writeFile(outPath, buffer);
56
+ const costMs = Date.now() - started;
57
+ log(
58
+ `export worker done cost=${costMs}ms size=${(buffer.byteLength / 1024).toFixed(1)}KB`,
59
+ );
60
+ post({
61
+ type: 'done',
62
+ costMs,
63
+ size: buffer.byteLength,
64
+ outPath,
65
+ });
66
+ })().catch((error) => {
67
+ const message = error instanceof Error ? error.message : String(error);
68
+ const stack = error instanceof Error ? error.stack : undefined;
69
+ post({ type: 'error', message, error: message, stack });
70
+ });
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Worker 入口(纯 CJS):ExcelJS 分块写盘,不依赖 tsx。
3
- * excel.service 用 worker_threads 拉起。
2
+ * Worker 入口(纯 CJS):调用 @ims-view/univer-import-excel 公共转换,本文件只负责读盘/写盘/进度上报。
3
+ * 与本地导入同一套 ExcelJS→Univer 映射(excelBufferToChunkedWorkbook)。
4
4
  */
5
5
  const { parentPort, workerData } = require('worker_threads');
6
6
  const { readFile, writeFile } = require('fs/promises');
@@ -9,271 +9,106 @@ const { createRequire } = require('module');
9
9
 
10
10
  const requireFromHere = createRequire(__filename);
11
11
 
12
- const resolveExcelJS = () => {
12
+ const resolveImportExcel = () => {
13
13
  const candidates = [
14
- () => requireFromHere.resolve('exceljs'),
14
+ // monorepo 源码旁的构建产物(最稳)
15
+ () => path.resolve(__dirname, '../../../univer-import-excel/lib/index.js'),
16
+ () => requireFromHere.resolve('@ims-view/univer-import-excel'),
15
17
  () =>
16
- requireFromHere.resolve('exceljs', {
17
- paths: [path.resolve(__dirname, '../../../utils')],
18
- }),
19
- () =>
20
- requireFromHere.resolve('exceljs', {
21
- paths: [path.resolve(__dirname, '../../../../node_modules')],
18
+ requireFromHere.resolve('@ims-view/univer-import-excel', {
19
+ paths: [
20
+ path.resolve(__dirname, '../../..'),
21
+ path.resolve(__dirname, '../../../../node_modules'),
22
+ ],
22
23
  }),
23
24
  ];
24
25
  for (const tryResolve of candidates) {
25
26
  try {
27
+ const id = tryResolve();
26
28
  // eslint-disable-next-line import/no-dynamic-require
27
- return require(tryResolve());
29
+ return require(id);
28
30
  } catch {
29
31
  // continue
30
32
  }
31
33
  }
32
- throw new Error('无法解析 exceljs,请确认 monorepo 依赖已安装');
33
- };
34
-
35
- const ExcelJS = resolveExcelJS();
36
-
37
- const CellValueType = {
38
- STRING: 1,
39
- NUMBER: 2,
40
- BOOLEAN: 3,
41
- };
42
-
43
- const argbToRgb = (argb) => {
44
- if (!argb || typeof argb !== 'string') return undefined;
45
- const hex = argb.replace(/^#/, '');
46
- if (hex.length === 8) return `#${hex.slice(2)}`;
47
- if (hex.length === 6) return `#${hex}`;
48
- return undefined;
49
- };
50
-
51
- const excelColorToRgb = (color) => {
52
- if (!color) return undefined;
53
- if (color.argb) return argbToRgb(color.argb);
54
- return undefined;
55
- };
56
-
57
- const cellFromExcelJs = (cell) => {
58
- const value = cell.value;
59
- if (value == null || value === '') return null;
60
-
61
- let mapped = null;
62
-
63
- if (typeof value === 'object' && value !== null && 'formula' in value) {
64
- const formula = String(value.formula || '').replace(/^=/, '');
65
- const result = value.result;
66
- mapped = {
67
- f: `=${formula}`,
68
- v: result,
69
- t:
70
- typeof result === 'number'
71
- ? CellValueType.NUMBER
72
- : typeof result === 'boolean'
73
- ? CellValueType.BOOLEAN
74
- : CellValueType.STRING,
75
- };
76
- } else if (typeof value === 'object' && value !== null && 'richText' in value) {
77
- const text = (value.richText || []).map((part) => part.text || '').join('');
78
- if (!text) return null;
79
- mapped = { v: text, t: CellValueType.STRING };
80
- } else if (typeof value === 'object' && value !== null && 'text' in value && 'hyperlink' in value) {
81
- mapped = { v: String(value.text || ''), t: CellValueType.STRING };
82
- } else if (typeof value === 'object' && value !== null && 'error' in value) {
83
- mapped = { v: String(value.error), t: CellValueType.STRING };
84
- } else if (value instanceof Date) {
85
- mapped = { v: value.toISOString(), t: CellValueType.STRING };
86
- } else if (typeof value === 'number') {
87
- mapped = { v: value, t: CellValueType.NUMBER };
88
- } else if (typeof value === 'boolean') {
89
- mapped = { v: value, t: CellValueType.BOOLEAN };
90
- } else {
91
- const text = String(value);
92
- if (!text) return null;
93
- mapped = { v: text, t: CellValueType.STRING };
94
- }
95
-
96
- const style = {};
97
- const font = cell.font;
98
- if (font) {
99
- if (font.bold) style.bl = 1;
100
- if (font.italic) style.it = 1;
101
- if (font.size) style.fs = font.size;
102
- if (font.name) style.ff = font.name;
103
- const fc = excelColorToRgb(font.color);
104
- if (fc) style.cl = { rgb: fc };
105
- }
106
- const fill = cell.fill;
107
- if (fill && fill.type === 'pattern' && fill.fgColor) {
108
- const bg = excelColorToRgb(fill.fgColor);
109
- if (bg) style.bg = { rgb: bg };
110
- }
111
- if (Object.keys(style).length) mapped.s = style;
112
- return mapped;
34
+ throw new Error('无法解析 @ims-view/univer-import-excel,请先在 packages/univer-import-excel 执行 pnpm build');
113
35
  };
114
36
 
115
- const collectMerges = (worksheet, maxRowExclusive) => {
116
- const merges = [];
117
- const raw = worksheet.model && worksheet.model.merges;
118
- if (!Array.isArray(raw)) return merges;
119
- raw.forEach((ref) => {
120
- try {
121
- const [start, end] = String(ref).split(':');
122
- if (!start) return;
123
- const startCell = worksheet.getCell(start);
124
- const endCell = worksheet.getCell(end || start);
125
- const top = Number(startCell.row) - 1;
126
- const left = Number(startCell.col) - 1;
127
- const bottom = Number(endCell.row) - 1;
128
- const right = Number(endCell.col) - 1;
129
- if (top >= maxRowExclusive) return;
130
- merges.push({
131
- startRow: top,
132
- startColumn: left,
133
- endRow: Math.min(bottom, maxRowExclusive - 1),
134
- endColumn: right,
135
- });
136
- } catch {
137
- // ignore
138
- }
139
- });
140
- return merges;
141
- };
37
+ const {
38
+ excelBufferToChunkedWorkbook,
39
+ chunkedBlockFileName,
40
+ chunkedMetaFileName,
41
+ } = resolveImportExcel();
142
42
 
143
- const post = (msg) => {
144
- if (parentPort) parentPort.postMessage(msg);
145
- };
43
+ const post = (msg) => parentPort && parentPort.postMessage(msg);
44
+ const log = (message) => post({ type: 'log', message });
146
45
 
147
- const main = async () => {
148
- const data = workerData || {};
46
+ (async () => {
47
+ const started = Date.now();
149
48
  const {
150
49
  id,
151
50
  xlsxPath,
51
+ outDir: outDirRaw,
152
52
  uploadDir,
153
- fileName = 'workbook.xlsx',
154
- blockRowSize = 2000,
155
- maxRows = 100000,
156
- } = data;
157
-
158
- if (!id || !xlsxPath || !uploadDir) {
159
- throw new Error('workerData 缺少 id / xlsxPath / uploadDir');
53
+ fileName,
54
+ blockRowSize = 5000,
55
+ maxRows = 0,
56
+ includeStyles = true,
57
+ } = workerData || {};
58
+ const outDir = outDirRaw || uploadDir;
59
+
60
+ if (!id || !xlsxPath || !outDir) {
61
+ throw new Error('workerData 缺少 id / xlsxPath / outDir(uploadDir)');
160
62
  }
161
63
 
162
- const effectiveMaxRows = maxRows === 0 ? Number.POSITIVE_INFINITY : maxRows;
64
+ log(`worker start id=${id} file=${fileName || path.basename(xlsxPath)}`);
163
65
  const buffer = await readFile(xlsxPath);
66
+ log(`read xlsx ${(buffer.byteLength / 1024 / 1024).toFixed(2)}MB cost=${Date.now() - started}ms`);
164
67
 
165
- post({ type: 'progress', percent: 5, parsedBlocks: 0, totalBlocks: 0 });
166
-
167
- const workbook = new ExcelJS.Workbook();
168
- await workbook.xlsx.load(buffer);
169
-
170
- post({ type: 'progress', percent: 20, parsedBlocks: 0, totalBlocks: 0 });
171
-
172
- const sheetsMeta = [];
173
- const sheetOrder = [];
174
- let truncated = false;
175
68
  let emittedBlocks = 0;
176
69
 
177
- const sheetInfos = workbook.worksheets.map((worksheet, sheetIndex) => {
178
- const sheetId = `sheet-${sheetIndex}`;
179
- const actualRowCount = worksheet.rowCount || 0;
180
- const cappedRows = Math.min(actualRowCount, effectiveMaxRows);
181
- if (actualRowCount > effectiveMaxRows) truncated = true;
182
- const blockCount = Math.max(1, Math.ceil(Math.max(cappedRows, 1) / blockRowSize));
183
- return { worksheet, sheetIndex, sheetId, cappedRows, blockCount };
184
- });
185
-
186
- const totalBlocks = sheetInfos.reduce((sum, info) => sum + info.blockCount, 0) || 1;
187
-
188
- for (const info of sheetInfos) {
189
- const { worksheet, sheetIndex, sheetId, cappedRows, blockCount } = info;
190
- sheetOrder.push(sheetId);
191
-
192
- let maxCol = 0;
193
- const mergeData = collectMerges(worksheet, cappedRows);
194
-
195
- for (let blockIndex = 0; blockIndex < blockCount; blockIndex += 1) {
196
- const startRow = blockIndex * blockRowSize;
197
- const endRow = Math.min(cappedRows, startRow + blockRowSize) - 1;
198
- const cellData = {};
199
-
200
- if (cappedRows > 0 && endRow >= startRow) {
201
- for (let excelRow = startRow + 1; excelRow <= endRow + 1; excelRow += 1) {
202
- const row = worksheet.getRow(excelRow);
203
- row.eachCell({ includeEmpty: false }, (cell, colNumber) => {
204
- const mapped = cellFromExcelJs(cell);
205
- if (!mapped) return;
206
- const r = excelRow - 1;
207
- const c = colNumber - 1;
208
- if (!cellData[r]) cellData[r] = {};
209
- cellData[r][c] = mapped;
210
- maxCol = Math.max(maxCol, colNumber);
211
- });
212
- }
213
- }
214
-
215
- const blockName = `${id}.block.${sheetIndex}.${blockIndex}.json`;
216
- await writeFile(
217
- path.join(uploadDir, blockName),
218
- JSON.stringify({
219
- sheetId,
220
- sheetIndex,
221
- blockIndex,
222
- startRow: Math.max(0, startRow),
223
- endRow: Math.max(0, endRow),
224
- cellData,
225
- }),
226
- 'utf8',
227
- );
228
-
229
- emittedBlocks += 1;
230
- const percent = Math.min(95, 20 + Math.round((emittedBlocks / totalBlocks) * 75));
70
+ const { meta } = await excelBufferToChunkedWorkbook(buffer, {
71
+ fileName: fileName || path.basename(xlsxPath),
72
+ blockRowSize,
73
+ maxRows,
74
+ includeStyles,
75
+ workbookId: `wb-chunked-${id}`,
76
+ onProgress: (progress) => {
231
77
  post({
232
78
  type: 'progress',
233
- percent,
234
- parsedBlocks: emittedBlocks,
235
- totalBlocks,
79
+ percent: progress.percent,
80
+ parsedBlocks: progress.parsedBlocks,
81
+ totalBlocks: progress.totalBlocks,
82
+ phase: progress.phase,
236
83
  });
237
- }
238
-
239
- sheetsMeta.push({
240
- id: sheetId,
241
- name: worksheet.name || `Sheet${sheetIndex + 1}`,
242
- rowCount: Math.max(cappedRows, 1),
243
- columnCount: Math.max(maxCol, 1),
244
- blockCount,
245
- mergeData: mergeData.length ? mergeData : undefined,
246
- });
247
- }
248
-
249
- const meta = {
250
- parseEngine: 'exceljs',
251
- fileName,
252
- name: String(fileName).replace(/\.xlsx$/i, '') || 'workbook',
253
- sheetOrder,
254
- sheets: sheetsMeta,
255
- blockRowSize,
256
- truncated: truncated || undefined,
257
- maxRows: Number.isFinite(effectiveMaxRows) ? effectiveMaxRows : undefined,
258
- };
84
+ },
85
+ onBlock: async (block) => {
86
+ const name = chunkedBlockFileName(id, block.sheetIndex, block.blockIndex);
87
+ await writeFile(path.join(outDir, name), JSON.stringify(block), 'utf8');
88
+ emittedBlocks += 1;
89
+ },
90
+ });
259
91
 
260
- const metaFileName = `${id}.meta.json`;
261
- await writeFile(path.join(uploadDir, metaFileName), JSON.stringify(meta), 'utf8');
92
+ // onBlock 已写盘时 blocks 可能为空数组
93
+ const metaName = chunkedMetaFileName(id);
94
+ const metaPath = path.join(outDir, metaName);
95
+ await writeFile(metaPath, JSON.stringify(meta), 'utf8');
262
96
 
97
+ const costMs = Date.now() - started;
98
+ log(
99
+ `done id=${id} cost=${costMs}ms blocks=${emittedBlocks} styles=${Object.keys(meta.styles || {}).length} truncated=${Boolean(meta.truncated)}`,
100
+ );
263
101
  post({
264
102
  type: 'done',
265
- metaPath: metaFileName,
266
- metaFileName,
103
+ costMs,
267
104
  parsedBlocks: emittedBlocks,
268
- totalBlocks,
269
- truncated: meta.truncated,
270
- });
271
- };
272
-
273
- main().catch((error) => {
274
- post({
275
- type: 'error',
276
- message: error instanceof Error ? error.message : String(error),
105
+ totalBlocks: emittedBlocks,
106
+ truncated: Boolean(meta.truncated),
107
+ metaFile: metaName,
108
+ metaFileName: metaName,
277
109
  });
278
- process.exitCode = 1;
110
+ })().catch((error) => {
111
+ const message = error instanceof Error ? error.message : String(error);
112
+ const stack = error instanceof Error ? error.stack : undefined;
113
+ post({ type: 'error', message, error: message, stack });
279
114
  });
@@ -7,17 +7,11 @@ export declare const serverEnvSchema: z.ZodObject<{
7
7
  IMS_EXCEL_UPLOAD_DIR: z.ZodOptional<z.ZodString>;
8
8
  IMS_EXCEL_UPLOAD_TTL_MS: z.ZodDefault<z.ZodNumber>;
9
9
  IMS_EXCEL_UPLOAD_CLEANUP_MS: z.ZodDefault<z.ZodNumber>;
10
- IMS_EXCEL_CHUNK_BYTES: z.ZodDefault<z.ZodNumber>;
11
- IMS_EXCEL_BLOCK_ROWS: z.ZodDefault<z.ZodNumber>;
12
- IMS_EXCEL_MAX_ROWS: z.ZodDefault<z.ZodNumber>;
13
10
  IMS_EXCEL_PARSE_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
14
11
  }, "strip", z.ZodTypeAny, {
15
12
  IMS_EXCEL_UPLOAD_TTL_MS: number;
16
13
  IMS_EXCEL_UPLOAD_CLEANUP_MS: number;
17
- IMS_EXCEL_CHUNK_BYTES: number;
18
14
  IMS_EXCEL_PARSE_TIMEOUT_MS: number;
19
- IMS_EXCEL_BLOCK_ROWS: number;
20
- IMS_EXCEL_MAX_ROWS: number;
21
15
  IMS_SERVER_PORT: number;
22
16
  IMS_SERVER_BODY_LIMIT: string;
23
17
  IMS_SERVER_GZIP_THRESHOLD: number;
@@ -27,10 +21,7 @@ export declare const serverEnvSchema: z.ZodObject<{
27
21
  IMS_EXCEL_UPLOAD_DIR?: string | undefined;
28
22
  IMS_EXCEL_UPLOAD_TTL_MS?: number | undefined;
29
23
  IMS_EXCEL_UPLOAD_CLEANUP_MS?: number | undefined;
30
- IMS_EXCEL_CHUNK_BYTES?: number | undefined;
31
24
  IMS_EXCEL_PARSE_TIMEOUT_MS?: number | undefined;
32
- IMS_EXCEL_BLOCK_ROWS?: number | undefined;
33
- IMS_EXCEL_MAX_ROWS?: number | undefined;
34
25
  IMS_SERVER_PORT?: number | undefined;
35
26
  PORT?: string | number | undefined;
36
27
  IMS_SERVER_BODY_LIMIT?: string | undefined;
@@ -18,9 +18,6 @@ exports.serverEnvSchema = zod_1.z.object({
18
18
  IMS_EXCEL_UPLOAD_DIR: zod_1.z.string().optional(),
19
19
  IMS_EXCEL_UPLOAD_TTL_MS: zod_1.z.coerce.number().int().positive().default(60 * 60 * 1000),
20
20
  IMS_EXCEL_UPLOAD_CLEANUP_MS: zod_1.z.coerce.number().int().positive().default(10 * 60 * 1000),
21
- IMS_EXCEL_CHUNK_BYTES: zod_1.z.coerce.number().int().positive().default(2 * 1024 * 1024),
22
- IMS_EXCEL_BLOCK_ROWS: zod_1.z.coerce.number().int().min(100).default(5_000),
23
- IMS_EXCEL_MAX_ROWS: zod_1.z.coerce.number().int().nonnegative().default(150_000),
24
21
  IMS_EXCEL_PARSE_TIMEOUT_MS: zod_1.z.coerce.number().int().positive().default(10 * 60 * 1000),
25
22
  });
26
23
  const loadServerEnv = (env = process.env) => {
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/config/env.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAMX,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,eAAe,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACjE,IAAI,EAAE,OAAC;SACJ,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACnB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1D,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC,CAAC;IACJ,qBAAqB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACjD,yBAAyB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9E,oBAAoB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,uBAAuB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACnF,2BAA2B,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEvF,qBAAqB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IAElF,oBAAoB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAErE,kBAAkB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAE1E,0BAA0B,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACvF,CAAC,CAAC;AAII,MAAM,aAAa,GAAG,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAa,EAAE;IAC/E,MAAM,MAAM,GAAG,uBAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC;AAPW,QAAA,aAAa,iBAOxB"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../src/config/env.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAQX,QAAA,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IACtC,eAAe,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACjE,IAAI,EAAE,OAAC;SACJ,KAAK,CAAC,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,EAAE;SACV,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACnB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAC1D,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC,CAAC;IACJ,qBAAqB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACjD,yBAAyB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9E,oBAAoB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,uBAAuB,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACnF,2BAA2B,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEvF,0BAA0B,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACvF,CAAC,CAAC;AAII,MAAM,aAAa,GAAG,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAa,EAAE;IAC/E,MAAM,MAAM,GAAG,uBAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC;AAPW,QAAA,aAAa,iBAOxB"}
@@ -70,6 +70,8 @@ const preserveUploadFileName = (raw) => {
70
70
  name = path.basename(name.replace(/\\/g, '/'));
71
71
  name = name.replace(/[<>:"/\\|?*\u0000-\u001f]+/g, '_').trim();
72
72
  name = name.replace(/^\.+/, '') || 'workbook.xlsx';
73
+ if (/\.csv$/i.test(name))
74
+ return name;
73
75
  if (!/\.xlsx$/i.test(name)) {
74
76
  name = `${name.replace(/\.xls$/i, '') || 'workbook'}.xlsx`;
75
77
  }
@@ -107,17 +109,22 @@ let ExcelStorageService = ExcelStorageService_1 = class ExcelStorageService {
107
109
  return this.tasks.get(id);
108
110
  }
109
111
  getXlsxFullPath(id) {
112
+ const task = this.tasks.get(id);
113
+ if (task?.xlsxPath) {
114
+ return path.join(this.uploadDir, path.basename(task.xlsxPath));
115
+ }
110
116
  return path.join(this.uploadDir, `${id}.xlsx`);
111
117
  }
112
118
  async saveXlsx(buffer, originalName) {
113
119
  await (0, promises_1.mkdir)(this.uploadDir, { recursive: true });
114
120
  const id = (0, crypto_1.randomUUID)().replace(/-/g, '');
115
- const storedName = `${id}.xlsx`;
121
+ const fileName = (0, exports.preserveUploadFileName)(originalName);
122
+ const ext = /\.csv$/i.test(fileName) ? 'csv' : 'xlsx';
123
+ const storedName = `${id}.${ext}`;
116
124
  const fullPath = path.join(this.uploadDir, storedName);
117
125
  await (0, promises_1.writeFile)(fullPath, buffer);
118
126
  const ttl = getTtlMs();
119
127
  const expiresAt = Date.now() + ttl;
120
- const fileName = (0, exports.preserveUploadFileName)(originalName);
121
128
  const xlsxPath = `${exports.EXCEL_STATIC_PREFIX}/${storedName}`;
122
129
  this.tasks.set(id, {
123
130
  id,
@@ -208,6 +215,7 @@ let ExcelStorageService = ExcelStorageService_1 = class ExcelStorageService {
208
215
  }
209
216
  isManagedFile(name) {
210
217
  return (name.endsWith('.xlsx') ||
218
+ name.endsWith('.csv') ||
211
219
  name.endsWith('.snapshot.json') ||
212
220
  name.endsWith('.meta.json') ||
213
221
  /\.block\.\d+\.\d+\.json$/i.test(name));
@@ -215,6 +223,7 @@ let ExcelStorageService = ExcelStorageService_1 = class ExcelStorageService {
215
223
  idFromFileName(name) {
216
224
  return name
217
225
  .replace(/\.xlsx$/i, '')
226
+ .replace(/\.csv$/i, '')
218
227
  .replace(/\.snapshot\.json$/i, '')
219
228
  .replace(/\.meta\.json$/i, '')
220
229
  .replace(/\.block\.\d+\.\d+\.json$/i, '');
@@ -1 +1 @@
1
- {"version":3,"file":"excel-storage.service.js","sourceRoot":"","sources":["../../../../src/excel/excel-storage.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAmF;AACnF,mCAAoC;AACpC,0CAAwF;AACxF,uCAAyB;AACzB,2CAA6B;AAGtB,MAAM,iBAAiB,GAAG,GAAG,EAAE,CACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;AADrE,QAAA,iBAAiB,qBACoD;AAGrE,QAAA,mBAAmB,GAAG,eAAe,CAAC;AAGnD,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChE,CAAC,CAAC;AAGF,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChE,CAAC,CAAC;AAOK,MAAM,sBAAsB,GAAG,CAAC,GAAY,EAAU,EAAE;IAC7D,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,eAAe,CAAC;IAEjD,MAAM,aAAa,GACjB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC;IAEnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,UAAU,OAAO,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AArBW,QAAA,sBAAsB,0BAqBjC;AAoCK,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAAzB;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9C,cAAS,GAAG,IAAA,yBAAiB,GAAE,CAAC;QACzC,iBAAY,GAA0C,IAAI,CAAC;QAClD,UAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IA6M7D,CAAC;IA3MC,KAAK,CAAC,YAAY;QAChB,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7B,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAC,EAAU;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAGD,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,YAAoB;QACjD,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,MAAM,EAAE,GAAG,IAAA,mBAAU,GAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,GAAG,EAAE,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAA,8BAAsB,EAAC,YAAY,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,GAAG,2BAAmB,IAAI,UAAU,EAAE,CAAC;QAExD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,EAAE;YACF,MAAM,EAAE,SAAS;YACjB,QAAQ;YACR,QAAQ;YACR,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,aAAa,EAAE,SAAS,QAAQ,SAAS,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACxH,CAAC;QAEF,OAAO;YACL,EAAE;YACF,QAAQ;YACR,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM,CAAC,UAAU;YACvB,SAAS;SACV,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,EAAU,EAAE,IAAoB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,kBAAkB,CAChB,EAAU,EACV,QAAgB,EAChB,YAAqB,EACrB,WAAoB;QAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,IAAI,YAAY,IAAI,IAAI;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAC3D,IAAI,WAAW,IAAI,IAAI;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAGD,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,YAAqB;QAClD,MAAM,YAAY,GAAG,GAAG,EAAE,gBAAgB,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACzD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,GAAG,2BAAmB,IAAI,YAAY,EAAE,CAAC;QAE9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAGD,mBAAmB,CACjB,EAAU,EACV,YAAoB,EACpB,MAA6E;QAE7E,MAAM,QAAQ,GAAG,GAAG,2BAAmB,IAAI,YAAY,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE,YAAY,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,WAAW,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa,CAAC,EAAU,EAAE,KAAa;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC3B,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CACvC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,OAAO,IAAI;aACR,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;aACvB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;aACjC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAC7B,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IAGD,KAAK,CAAC,cAAc;QAClB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAO;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;oBAC7B,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;oBACvB,OAAO,IAAI,CAAC,CAAC;oBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,OAAO,kBAAkB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAjNY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;GACA,mBAAmB,CAiN/B"}
1
+ {"version":3,"file":"excel-storage.service.js","sourceRoot":"","sources":["../../../../src/excel/excel-storage.service.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ let ExcelController = class ExcelController {
37
37
  return shared_1.ResponseEntity.ofSuccess({
38
38
  ok: true,
39
39
  service: 'excel-exchange',
40
- importMode: 'async-snapshot-or-chunked',
40
+ importMode: 'async-chunked',
41
41
  });
42
42
  }
43
43
  async uploadExcel(file, req) {
@@ -1 +1 @@
1
- {"version":3,"file":"excel.controller.js","sourceRoot":"","sources":["../../../../src/excel/excel.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"excel.controller.js","sourceRoot":"","sources":["../../../../src/excel/excel.controller.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export type ExcelUploadResult = {
11
11
  taskUrl: string;
12
12
  size: number;
13
13
  expiresAt: number;
14
- parseHint?: 'snapshot' | 'chunked';
14
+ parseHint?: 'chunked';
15
15
  };
16
16
  export type ExcelTaskResult = ExcelParseTask & {
17
17
  snapshotUrl?: string;
@@ -24,8 +24,8 @@ export declare class ExcelService {
24
24
  constructor(storage: ExcelStorageService);
25
25
  uploadFile(file?: Express.Multer.File, publicBaseUrl?: string): Promise<ExcelUploadResult>;
26
26
  getTask(id: string, publicBaseUrl?: string): ExcelTaskResult;
27
- private parseToSnapshot;
28
- private parseChunkedLuckyExcel;
27
+ private parseChunkedExcelJs;
28
+ private parseChunkedExcelJsInProcess;
29
29
  exportFile(body: ExportExcelDto): Promise<{
30
30
  buffer: Buffer;
31
31
  fileName: string;