@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
@@ -1,338 +1,16 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.chunkedMetaFileName = exports.chunkedBlockFileName = exports.excelBufferToChunkedWorkbook = exports.skeletonWorkbookFromMeta = exports.shouldUseChunkedImport = exports.DEFAULT_PARSE_TIMEOUT_MS = exports.DEFAULT_MAX_ROWS = exports.DEFAULT_BLOCK_ROW_SIZE = exports.CHUNKED_ROW_THRESHOLD = exports.CHUNKED_FILE_BYTES = void 0;
7
- const exceljs_1 = __importDefault(require("exceljs"));
8
- const converter_1 = require("./converter");
9
- const types_1 = require("./types");
10
- exports.CHUNKED_FILE_BYTES = 2 * 1024 * 1024;
11
- exports.CHUNKED_ROW_THRESHOLD = 50_000;
12
- exports.DEFAULT_BLOCK_ROW_SIZE = 5_000;
13
- exports.DEFAULT_MAX_ROWS = 150_000;
14
- exports.DEFAULT_PARSE_TIMEOUT_MS = 10 * 60 * 1000;
15
- const toUint8Array = (input) => {
16
- if (typeof Buffer !== 'undefined' && Buffer.isBuffer(input)) {
17
- return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
18
- }
19
- if (input instanceof ArrayBuffer) {
20
- return new Uint8Array(input);
21
- }
22
- return input;
23
- };
24
- const argbToRgb = (argb) => {
25
- if (!argb || typeof argb !== 'string')
26
- return undefined;
27
- const hex = argb.replace(/^#/, '');
28
- if (hex.length === 8)
29
- return `#${hex.slice(2)}`;
30
- if (hex.length === 6)
31
- return `#${hex}`;
32
- return undefined;
33
- };
34
- const excelColorToRgb = (color) => {
35
- if (!color)
36
- return undefined;
37
- if (color.argb)
38
- return argbToRgb(color.argb);
39
- return undefined;
40
- };
41
- const cellFromExcelJs = (cell) => {
42
- const value = cell.value;
43
- if (value == null || value === '')
44
- return null;
45
- let mapped = null;
46
- if (typeof value === 'object' && value !== null && 'formula' in value) {
47
- const formula = String(value.formula || '').replace(/^=/, '');
48
- const result = value.result;
49
- mapped = {
50
- f: `=${formula}`,
51
- v: result,
52
- t: typeof result === 'number'
53
- ? types_1.CellValueType.NUMBER
54
- : typeof result === 'boolean'
55
- ? types_1.CellValueType.BOOLEAN
56
- : types_1.CellValueType.STRING,
57
- };
58
- }
59
- else if (typeof value === 'object' && value !== null && 'richText' in value) {
60
- const text = (value.richText || [])
61
- .map((part) => part.text || '')
62
- .join('');
63
- if (!text)
64
- return null;
65
- mapped = { v: text, t: types_1.CellValueType.STRING };
66
- }
67
- else if (typeof value === 'object' && value !== null && 'text' in value && 'hyperlink' in value) {
68
- const text = String(value.text || '');
69
- mapped = { v: text, t: types_1.CellValueType.STRING };
70
- }
71
- else if (typeof value === 'object' && value !== null && 'error' in value) {
72
- mapped = { v: String(value.error), t: types_1.CellValueType.STRING };
73
- }
74
- else if (value instanceof Date) {
75
- mapped = { v: value.toISOString(), t: types_1.CellValueType.STRING };
76
- }
77
- else if (typeof value === 'number') {
78
- mapped = { v: value, t: types_1.CellValueType.NUMBER };
79
- }
80
- else if (typeof value === 'boolean') {
81
- mapped = { v: value, t: types_1.CellValueType.BOOLEAN };
82
- }
83
- else {
84
- const text = String(value);
85
- if (!text)
86
- return null;
87
- mapped = { v: text, t: types_1.CellValueType.STRING };
88
- }
89
- if (!mapped)
90
- return null;
91
- const style = {};
92
- const font = cell.font;
93
- if (font) {
94
- if (font.bold)
95
- style.bl = 1;
96
- if (font.italic)
97
- style.it = 1;
98
- if (font.size)
99
- style.fs = font.size;
100
- if (font.name)
101
- style.ff = font.name;
102
- const fc = excelColorToRgb(font.color);
103
- if (fc)
104
- 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)
110
- style.bg = { rgb: bg };
111
- }
112
- if (cell.alignment) {
113
- const ht = cell.alignment.horizontal === 'center'
114
- ? 2
115
- : cell.alignment.horizontal === 'right'
116
- ? 3
117
- : cell.alignment.horizontal === 'left'
118
- ? 1
119
- : undefined;
120
- const vt = cell.alignment.vertical === 'middle'
121
- ? 2
122
- : cell.alignment.vertical === 'top'
123
- ? 1
124
- : cell.alignment.vertical === 'bottom'
125
- ? 3
126
- : undefined;
127
- if (ht != null)
128
- style.ht = ht;
129
- if (vt != null)
130
- style.vt = vt;
131
- }
132
- if (Object.keys(style).length) {
133
- mapped.s = style;
134
- }
135
- return mapped;
136
- };
137
- const shouldUseChunkedImport = (sizeBytes, options) => {
138
- const bytesThreshold = options?.bytesThreshold ?? exports.CHUNKED_FILE_BYTES;
139
- const rowsThreshold = options?.rowsThreshold ?? exports.CHUNKED_ROW_THRESHOLD;
140
- if (sizeBytes > bytesThreshold)
141
- return true;
142
- if (options?.estimatedRows != null && options.estimatedRows > rowsThreshold)
143
- return true;
144
- return false;
145
- };
146
- exports.shouldUseChunkedImport = shouldUseChunkedImport;
147
- const skeletonWorkbookFromMeta = (meta) => {
148
- const sheets = {};
149
- meta.sheets.forEach((sheet) => {
150
- sheets[sheet.id] = {
151
- id: sheet.id,
152
- name: sheet.name,
153
- cellData: {},
154
- mergeData: sheet.mergeData || [],
155
- rowCount: Math.max(sheet.rowCount, 1),
156
- columnCount: Math.max(sheet.columnCount, 1),
157
- ...(sheet.columnData ? { columnData: sheet.columnData } : {}),
158
- ...(sheet.rowData ? { rowData: sheet.rowData } : {}),
159
- ...(sheet.defaultColumnWidth != null
160
- ? { defaultColumnWidth: sheet.defaultColumnWidth }
161
- : {}),
162
- ...(sheet.defaultRowHeight != null ? { defaultRowHeight: sheet.defaultRowHeight } : {}),
163
- };
164
- });
165
- return {
166
- id: meta.workbookId || `wb-chunked-${Date.now()}`,
167
- name: meta.name,
168
- appVersion: meta.appVersion || '0.25.1',
169
- locale: meta.locale || 'zhCN',
170
- sheetOrder: meta.sheetOrder,
171
- sheets,
172
- styles: meta.styles,
173
- resources: meta.resources,
174
- };
175
- };
176
- exports.skeletonWorkbookFromMeta = skeletonWorkbookFromMeta;
177
- const collectMerges = (worksheet, maxRowExclusive) => {
178
- const merges = [];
179
- const raw = worksheet.model?.merges;
180
- if (!Array.isArray(raw))
181
- return merges;
182
- raw.forEach((ref) => {
183
- try {
184
- const [start, end] = String(ref).split(':');
185
- if (!start)
186
- return;
187
- const startCell = worksheet.getCell(start);
188
- const endCell = worksheet.getCell(end || start);
189
- const top = Number(startCell.row) - 1;
190
- const left = Number(startCell.col) - 1;
191
- const bottom = Number(endCell.row) - 1;
192
- const right = Number(endCell.col) - 1;
193
- if (top >= maxRowExclusive)
194
- return;
195
- merges.push({
196
- startRow: top,
197
- startColumn: left,
198
- endRow: Math.min(bottom, maxRowExclusive - 1),
199
- endColumn: right,
200
- });
201
- }
202
- catch {
203
- }
204
- });
205
- return merges;
206
- };
207
- const excelBufferToChunkedWorkbook = async (input, options = {}) => {
208
- const fileName = options.fileName || 'workbook.xlsx';
209
- const blockRowSize = Math.max(100, options.blockRowSize || exports.DEFAULT_BLOCK_ROW_SIZE);
210
- const maxRows = options.maxRows === 0
211
- ? Number.POSITIVE_INFINITY
212
- : options.maxRows ?? exports.DEFAULT_MAX_ROWS;
213
- const bytes = (0, converter_1.ensureXlsxBytes)(toUint8Array(input), fileName);
214
- options.onProgress?.({ percent: 5, parsedBlocks: 0, totalBlocks: 0, phase: 'load' });
215
- const workbook = new exceljs_1.default.Workbook();
216
- const loadInput = typeof Buffer !== 'undefined' ? Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength) : bytes;
217
- await workbook.xlsx.load(loadInput);
218
- options.onProgress?.({ percent: 20, parsedBlocks: 0, totalBlocks: 0, phase: 'convert' });
219
- const sheetsMeta = [];
220
- const sheetOrder = [];
221
- const blocks = [];
222
- let truncated = false;
223
- let emittedBlocks = 0;
224
- const sheetInfos = workbook.worksheets.map((worksheet, sheetIndex) => {
225
- const id = `sheet-${sheetIndex}`;
226
- const actualRowCount = worksheet.rowCount || 0;
227
- const cappedRows = Math.min(actualRowCount, maxRows);
228
- if (actualRowCount > maxRows)
229
- truncated = true;
230
- const blockCount = Math.max(1, Math.ceil(Math.max(cappedRows, 1) / blockRowSize));
231
- return { worksheet, sheetIndex, id, cappedRows, blockCount, actualRowCount };
232
- });
233
- const totalBlocks = sheetInfos.reduce((sum, info) => sum + info.blockCount, 0) || 1;
234
- for (const info of sheetInfos) {
235
- const { worksheet, sheetIndex, id, cappedRows, blockCount } = info;
236
- sheetOrder.push(id);
237
- let maxCol = 0;
238
- const columnData = {};
239
- worksheet.columns?.forEach((col, idx) => {
240
- if (!col)
241
- return;
242
- if (col.width != null || col.values?.length) {
243
- maxCol = Math.max(maxCol, idx + 1);
244
- }
245
- if (col.width != null && Number.isFinite(col.width)) {
246
- columnData[idx] = { w: Math.round(Number(col.width) * 8) };
247
- }
248
- });
249
- const rowData = {};
250
- if (cappedRows > 0) {
251
- for (let excelRow = 1; excelRow <= cappedRows; excelRow += 1) {
252
- const height = worksheet.getRow(excelRow).height;
253
- if (height != null && Number.isFinite(height)) {
254
- rowData[excelRow - 1] = { h: Math.round(Number(height) * (4 / 3)) };
255
- }
256
- }
257
- }
258
- const mergeData = collectMerges(worksheet, cappedRows);
259
- for (let blockIndex = 0; blockIndex < blockCount; blockIndex += 1) {
260
- const startRow = blockIndex * blockRowSize;
261
- const endRow = Math.min(cappedRows, startRow + blockRowSize) - 1;
262
- const cellData = {};
263
- if (cappedRows > 0 && endRow >= startRow) {
264
- for (let excelRow = startRow + 1; excelRow <= endRow + 1; excelRow += 1) {
265
- const row = worksheet.getRow(excelRow);
266
- row.eachCell({ includeEmpty: false }, (cell, colNumber) => {
267
- const mapped = cellFromExcelJs(cell);
268
- if (!mapped)
269
- return;
270
- const r = excelRow - 1;
271
- const c = colNumber - 1;
272
- if (!cellData[r])
273
- cellData[r] = {};
274
- cellData[r][c] = mapped;
275
- });
276
- }
277
- for (const rowCells of Object.values(cellData)) {
278
- for (const key of Object.keys(rowCells || {})) {
279
- const col = Number(key);
280
- if (Number.isFinite(col))
281
- maxCol = Math.max(maxCol, col + 1);
282
- }
283
- }
284
- }
285
- const block = {
286
- sheetId: id,
287
- sheetIndex,
288
- blockIndex,
289
- startRow: Math.max(0, startRow),
290
- endRow: Math.max(0, endRow),
291
- cellData,
292
- };
293
- blocks.push(block);
294
- emittedBlocks += 1;
295
- await options.onBlock?.(block);
296
- const percent = Math.min(95, 20 + Math.round((emittedBlocks / totalBlocks) * 75));
297
- options.onProgress?.({
298
- percent,
299
- parsedBlocks: emittedBlocks,
300
- totalBlocks,
301
- phase: 'convert',
302
- });
303
- }
304
- sheetsMeta.push({
305
- id,
306
- name: worksheet.name || `Sheet${sheetIndex + 1}`,
307
- rowCount: Math.max(cappedRows, 1),
308
- columnCount: Math.max(maxCol, 1),
309
- blockCount,
310
- mergeData: mergeData.length ? mergeData : undefined,
311
- columnData: Object.keys(columnData).length ? columnData : undefined,
312
- rowData: Object.keys(rowData).length ? rowData : undefined,
313
- });
314
- }
315
- const meta = {
316
- parseEngine: 'exceljs',
317
- fileName,
318
- name: fileName.replace(/\.xlsx$/i, '') || 'workbook',
319
- sheetOrder,
320
- sheets: sheetsMeta,
321
- blockRowSize,
322
- truncated: truncated || undefined,
323
- maxRows: Number.isFinite(maxRows) ? maxRows : undefined,
324
- };
325
- options.onProgress?.({
326
- percent: 100,
327
- parsedBlocks: emittedBlocks,
328
- totalBlocks,
329
- phase: 'done',
330
- });
331
- return { meta, blocks };
332
- };
333
- exports.excelBufferToChunkedWorkbook = excelBufferToChunkedWorkbook;
334
- const chunkedBlockFileName = (id, sheetIndex, blockIndex) => `${id}.block.${sheetIndex}.${blockIndex}.json`;
335
- exports.chunkedBlockFileName = chunkedBlockFileName;
336
- const chunkedMetaFileName = (id) => `${id}.meta.json`;
337
- exports.chunkedMetaFileName = chunkedMetaFileName;
3
+ exports.skeletonWorkbookFromMeta = exports.shouldUseChunkedImport = exports.resolveWorksheetRowCount = exports.excelBufferToChunkedWorkbook = exports.chunkedMetaFileName = exports.chunkedBlockFileName = exports.DEFAULT_PARSE_TIMEOUT_MS = exports.DEFAULT_MAX_ROWS = exports.DEFAULT_BLOCK_ROW_SIZE = exports.CHUNKED_ROW_THRESHOLD = exports.CHUNKED_FILE_BYTES = void 0;
4
+ var univer_import_excel_1 = require("@ims-view/univer-import-excel");
5
+ Object.defineProperty(exports, "CHUNKED_FILE_BYTES", { enumerable: true, get: function () { return univer_import_excel_1.CHUNKED_FILE_BYTES; } });
6
+ Object.defineProperty(exports, "CHUNKED_ROW_THRESHOLD", { enumerable: true, get: function () { return univer_import_excel_1.CHUNKED_ROW_THRESHOLD; } });
7
+ Object.defineProperty(exports, "DEFAULT_BLOCK_ROW_SIZE", { enumerable: true, get: function () { return univer_import_excel_1.DEFAULT_BLOCK_ROW_SIZE; } });
8
+ Object.defineProperty(exports, "DEFAULT_MAX_ROWS", { enumerable: true, get: function () { return univer_import_excel_1.DEFAULT_MAX_ROWS; } });
9
+ Object.defineProperty(exports, "DEFAULT_PARSE_TIMEOUT_MS", { enumerable: true, get: function () { return univer_import_excel_1.DEFAULT_PARSE_TIMEOUT_MS; } });
10
+ Object.defineProperty(exports, "chunkedBlockFileName", { enumerable: true, get: function () { return univer_import_excel_1.chunkedBlockFileName; } });
11
+ Object.defineProperty(exports, "chunkedMetaFileName", { enumerable: true, get: function () { return univer_import_excel_1.chunkedMetaFileName; } });
12
+ Object.defineProperty(exports, "excelBufferToChunkedWorkbook", { enumerable: true, get: function () { return univer_import_excel_1.excelBufferToChunkedWorkbook; } });
13
+ Object.defineProperty(exports, "resolveWorksheetRowCount", { enumerable: true, get: function () { return univer_import_excel_1.resolveWorksheetRowCount; } });
14
+ Object.defineProperty(exports, "shouldUseChunkedImport", { enumerable: true, get: function () { return univer_import_excel_1.shouldUseChunkedImport; } });
15
+ Object.defineProperty(exports, "skeletonWorkbookFromMeta", { enumerable: true, get: function () { return univer_import_excel_1.skeletonWorkbookFromMeta; } });
338
16
  //# sourceMappingURL=exceljsChunked.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exceljsChunked.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exceljsChunked.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exceljsChunked.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exceljsChunked.ts"],"names":[],"mappings":";;;AACA,qEAYuC;AAXrC,yHAAA,kBAAkB,OAAA;AAClB,4HAAA,qBAAqB,OAAA;AACrB,6HAAA,sBAAsB,OAAA;AACtB,uHAAA,gBAAgB,OAAA;AAChB,+HAAA,wBAAwB,OAAA;AACxB,2HAAA,oBAAoB,OAAA;AACpB,0HAAA,mBAAmB,OAAA;AACnB,mIAAA,4BAA4B,OAAA;AAC5B,+HAAA,wBAAwB,OAAA;AACxB,6HAAA,sBAAsB,OAAA;AACtB,+HAAA,wBAAwB,OAAA"}
@@ -0,0 +1,4 @@
1
+ import type ExcelJSType from 'exceljs';
2
+ type ExcelJSModule = typeof ExcelJSType;
3
+ export declare const ExcelJS: ExcelJSModule;
4
+ export default ExcelJS;
@@ -0,0 +1,56 @@
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.ExcelJS = void 0;
37
+ const ExcelJSNS = __importStar(require("exceljs"));
38
+ const pickExcelJS = (mod) => {
39
+ if (!mod || typeof mod !== 'object')
40
+ return undefined;
41
+ const m = mod;
42
+ if (typeof m.Workbook === 'function')
43
+ return m;
44
+ const d = m.default;
45
+ if (d && typeof d.Workbook === 'function')
46
+ return d;
47
+ return undefined;
48
+ };
49
+ const fromGlobal = () => {
50
+ const g = (typeof globalThis !== 'undefined' && globalThis.ExcelJS) ||
51
+ (typeof window !== 'undefined' && window.ExcelJS);
52
+ return g && typeof g.Workbook === 'function' ? g : undefined;
53
+ };
54
+ exports.ExcelJS = pickExcelJS(ExcelJSNS) || fromGlobal() || ExcelJSNS;
55
+ exports.default = exports.ExcelJS;
56
+ //# sourceMappingURL=exceljsCompat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceljsCompat.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exceljsCompat.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mDAAqC;AAKrC,MAAM,WAAW,GAAG,CAAC,GAAY,EAA6B,EAAE;IAC9D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,CAAkB,CAAC;IAChE,MAAM,CAAC,GAAG,CAAC,CAAC,OAA8C,CAAC;IAC3D,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,CAAkB,CAAC;IACrE,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,GAA8B,EAAE;IACjD,MAAM,CAAC,GACL,CAAC,OAAO,UAAU,KAAK,WAAW,IAAK,UAA0C,CAAC,OAAO,CAAC;QAC1F,CAAC,OAAO,MAAM,KAAK,WAAW,IAAK,MAAsC,CAAC,OAAO,CAAC,CAAC;IACrF,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC,CAAC;AAEW,QAAA,OAAO,GAClB,WAAW,CAAC,SAAS,CAAC,IAAI,UAAU,EAAE,IAAK,SAAsC,CAAC;AAEpF,kBAAe,eAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { collectWorkbookDrawingResources, collectWorksheetFreeze, emuToPx, } from '@ims-view/univer-import-excel';
2
+ export type { SheetFreeze } from '@ims-view/univer-import-excel';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emuToPx = exports.collectWorksheetFreeze = exports.collectWorkbookDrawingResources = void 0;
4
+ var univer_import_excel_1 = require("@ims-view/univer-import-excel");
5
+ Object.defineProperty(exports, "collectWorkbookDrawingResources", { enumerable: true, get: function () { return univer_import_excel_1.collectWorkbookDrawingResources; } });
6
+ Object.defineProperty(exports, "collectWorksheetFreeze", { enumerable: true, get: function () { return univer_import_excel_1.collectWorksheetFreeze; } });
7
+ Object.defineProperty(exports, "emuToPx", { enumerable: true, get: function () { return univer_import_excel_1.emuToPx; } });
8
+ //# sourceMappingURL=exceljsDrawings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceljsDrawings.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exceljsDrawings.ts"],"names":[],"mappings":";;;AACA,qEAIuC;AAHrC,sIAAA,+BAA+B,OAAA;AAC/B,6HAAA,sBAAsB,OAAA;AACtB,8GAAA,OAAO,OAAA"}
@@ -0,0 +1,2 @@
1
+ export { BorderStyleTypes, StyleInterner, argbToRgb, excelColorToRgb, excelStyleToUniver, } from '@ims-view/univer-import-excel';
2
+ export type { UniverStyleData } from '@ims-view/univer-import-excel';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.excelStyleToUniver = exports.excelColorToRgb = exports.argbToRgb = exports.StyleInterner = exports.BorderStyleTypes = void 0;
4
+ var univer_import_excel_1 = require("@ims-view/univer-import-excel");
5
+ Object.defineProperty(exports, "BorderStyleTypes", { enumerable: true, get: function () { return univer_import_excel_1.BorderStyleTypes; } });
6
+ Object.defineProperty(exports, "StyleInterner", { enumerable: true, get: function () { return univer_import_excel_1.StyleInterner; } });
7
+ Object.defineProperty(exports, "argbToRgb", { enumerable: true, get: function () { return univer_import_excel_1.argbToRgb; } });
8
+ Object.defineProperty(exports, "excelColorToRgb", { enumerable: true, get: function () { return univer_import_excel_1.excelColorToRgb; } });
9
+ Object.defineProperty(exports, "excelStyleToUniver", { enumerable: true, get: function () { return univer_import_excel_1.excelStyleToUniver; } });
10
+ //# sourceMappingURL=exceljsStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceljsStyle.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exceljsStyle.ts"],"names":[],"mappings":";;;AACA,qEAMuC;AALrC,uHAAA,gBAAgB,OAAA;AAChB,oHAAA,aAAa,OAAA;AACb,gHAAA,SAAS,OAAA;AACT,sHAAA,eAAe,OAAA;AACf,yHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,31 @@
1
+ import type { IWorkbookData } from './types';
2
+ export type ExcelExportWorkerMode = 'off' | 'auto' | 'on';
3
+ export declare const DEFAULT_EXPORT_WORKER_THRESHOLD_BYTES: number;
4
+ export type ExcelExportOptions = {
5
+ fileName?: string;
6
+ worker?: ExcelExportWorkerMode;
7
+ workerThresholdBytes?: number;
8
+ createWorker?: () => Worker;
9
+ };
10
+ export type ExcelExportWorkerInMessage = {
11
+ type: 'export';
12
+ snapshot: Partial<IWorkbookData>;
13
+ fileName: string;
14
+ };
15
+ export type ExcelExportWorkerOutMessage = {
16
+ type: 'done';
17
+ buffer: ArrayBuffer;
18
+ } | {
19
+ type: 'error';
20
+ error: string;
21
+ };
22
+ export declare const estimateWorkbookSnapshotBytes: (data: Partial<IWorkbookData>) => number;
23
+ export declare const resolveShouldUseExportWorker: (sizeBytes: number, options?: Pick<ExcelExportOptions, "worker" | "workerThresholdBytes" | "createWorker">) => boolean;
24
+ export declare const workbookDataToExcelArrayBuffer: (data: Partial<IWorkbookData>, fileName?: string) => Promise<ArrayBuffer>;
25
+ export declare const installExcelExportWorker: (scope?: {
26
+ postMessage: (msg: ExcelExportWorkerOutMessage, transfer?: Transferable[]) => void;
27
+ addEventListener: (type: "message", listener: (event: MessageEvent) => void) => void;
28
+ }) => void;
29
+ export declare const runExcelExportInBrowserWorker: (snapshot: Partial<IWorkbookData>, options: ExcelExportOptions & {
30
+ createWorker: () => Worker;
31
+ }) => Promise<ArrayBuffer>;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runExcelExportInBrowserWorker = exports.installExcelExportWorker = exports.workbookDataToExcelArrayBuffer = exports.resolveShouldUseExportWorker = exports.estimateWorkbookSnapshotBytes = exports.DEFAULT_EXPORT_WORKER_THRESHOLD_BYTES = void 0;
4
+ const luckyexcel_1 = require("./luckyexcel");
5
+ exports.DEFAULT_EXPORT_WORKER_THRESHOLD_BYTES = 512 * 1024;
6
+ const estimateWorkbookSnapshotBytes = (data) => {
7
+ try {
8
+ return JSON.stringify(data).length;
9
+ }
10
+ catch {
11
+ return Number.MAX_SAFE_INTEGER;
12
+ }
13
+ };
14
+ exports.estimateWorkbookSnapshotBytes = estimateWorkbookSnapshotBytes;
15
+ const resolveShouldUseExportWorker = (sizeBytes, options = {}) => {
16
+ const mode = options.worker || 'auto';
17
+ if (mode === 'off')
18
+ return false;
19
+ if (!options.createWorker)
20
+ return false;
21
+ if (mode === 'on')
22
+ return true;
23
+ const threshold = options.workerThresholdBytes ?? exports.DEFAULT_EXPORT_WORKER_THRESHOLD_BYTES;
24
+ return sizeBytes > threshold;
25
+ };
26
+ exports.resolveShouldUseExportWorker = resolveShouldUseExportWorker;
27
+ const workbookDataToExcelArrayBuffer = async (data, fileName = 'workbook.xlsx') => {
28
+ const name = fileName.endsWith('.xlsx') ? fileName : `${fileName}.xlsx`;
29
+ const buffer = await (0, luckyexcel_1.transformUniverToExcelBuffer)(data, name);
30
+ if (buffer instanceof ArrayBuffer)
31
+ return buffer;
32
+ const view = typeof Buffer !== 'undefined' && Buffer.isBuffer(buffer)
33
+ ? new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength)
34
+ : buffer instanceof Uint8Array
35
+ ? buffer
36
+ : null;
37
+ if (!view) {
38
+ throw new Error('LuckyExcel 导出结果类型未知');
39
+ }
40
+ const copy = new Uint8Array(view.byteLength);
41
+ copy.set(view);
42
+ return copy.buffer;
43
+ };
44
+ exports.workbookDataToExcelArrayBuffer = workbookDataToExcelArrayBuffer;
45
+ const installExcelExportWorker = (scope = self) => {
46
+ scope.addEventListener('message', (event) => {
47
+ const data = event.data;
48
+ if (!data || data.type !== 'export')
49
+ return;
50
+ (async () => {
51
+ const buffer = await (0, exports.workbookDataToExcelArrayBuffer)(data.snapshot, data.fileName);
52
+ const transferable = buffer.slice(0);
53
+ scope.postMessage({ type: 'done', buffer: transferable }, [transferable]);
54
+ })().catch((error) => {
55
+ scope.postMessage({
56
+ type: 'error',
57
+ error: error instanceof Error ? error.message : String(error),
58
+ });
59
+ });
60
+ });
61
+ };
62
+ exports.installExcelExportWorker = installExcelExportWorker;
63
+ const runExcelExportInBrowserWorker = (snapshot, options) => new Promise((resolve, reject) => {
64
+ let worker;
65
+ try {
66
+ worker = options.createWorker();
67
+ }
68
+ catch (error) {
69
+ reject(error instanceof Error ? error : new Error(String(error)));
70
+ return;
71
+ }
72
+ const cleanup = () => {
73
+ try {
74
+ worker.terminate();
75
+ }
76
+ catch {
77
+ }
78
+ };
79
+ worker.onmessage = (event) => {
80
+ const msg = event.data;
81
+ if (!msg)
82
+ return;
83
+ if (msg.type === 'error') {
84
+ cleanup();
85
+ reject(new Error(msg.error));
86
+ return;
87
+ }
88
+ if (msg.type === 'done') {
89
+ cleanup();
90
+ resolve(msg.buffer);
91
+ }
92
+ };
93
+ worker.onerror = (event) => {
94
+ cleanup();
95
+ reject(new Error(event.message || 'Excel export worker failed'));
96
+ };
97
+ const message = {
98
+ type: 'export',
99
+ snapshot,
100
+ fileName: options.fileName || 'workbook.xlsx',
101
+ };
102
+ worker.postMessage(message);
103
+ });
104
+ exports.runExcelExportInBrowserWorker = runExcelExportInBrowserWorker;
105
+ //# sourceMappingURL=exportWorkerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportWorkerClient.js","sourceRoot":"","sources":["../../../../../utils/src/excel/exportWorkerClient.ts"],"names":[],"mappings":"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"}