typesexcel 1.0.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.
@@ -0,0 +1,382 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ import { readFileSync, writeFileSync } from 'node:fs';
13
+ import { dirname, join } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ import { DOMBuilder, SAXParser, XMLAttribute, XMLElement } from 'typesxml';
16
+ import { I18n } from './i18n.js';
17
+ import { ColumnUtils } from './columnUtils.js';
18
+ import { ExcelWorkbook } from './excelWorkbook.js';
19
+ import { ZipUtils } from './zipUtils.js';
20
+ const TEMPLATE_PATH = join(dirname(fileURLToPath(import.meta.url)), 'template.xlsx');
21
+ const COLUMN_WIDTH = '30';
22
+ export class ExcelWriter {
23
+ i18n;
24
+ columnUtils;
25
+ zipUtils;
26
+ constructor(language) {
27
+ this.i18n = new I18n(this.resolveMessagesPath(language));
28
+ this.columnUtils = new ColumnUtils();
29
+ this.zipUtils = new ZipUtils();
30
+ }
31
+ resolveMessagesPath(language) {
32
+ return join(dirname(fileURLToPath(import.meta.url)), 'excel_' + language + '.json');
33
+ }
34
+ writeFile(filePath, data) {
35
+ let templateBuffer = readFileSync(TEMPLATE_PATH);
36
+ let entries;
37
+ try {
38
+ entries = this.zipUtils.readZip(templateBuffer);
39
+ }
40
+ catch (error) {
41
+ throw new Error(this.i18n.format(this.i18n.getString('ExcelWriter', 'corruptTemplate'), [error instanceof Error ? error.message : String(error)]));
42
+ }
43
+ if (data instanceof ExcelWorkbook) {
44
+ let sheets = data.getSheets();
45
+ if (sheets.length === 0) {
46
+ throw new Error(this.i18n.getString('ExcelWriter', 'emptyWorkbook'));
47
+ }
48
+ this.writeMultipleSheets(entries, sheets);
49
+ }
50
+ else {
51
+ this.setSheetName(entries, data.getName());
52
+ this.setSheetData(entries, data);
53
+ }
54
+ writeFileSync(filePath, this.zipUtils.writeZip(entries));
55
+ }
56
+ writeMultipleSheets(entries, sheets) {
57
+ let WORKSHEET_REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';
58
+ let WORKSHEET_CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml';
59
+ let hasDate = false;
60
+ for (let sheet of sheets) {
61
+ let allRows = [sheet.getHeaders(), ...sheet.getRows()];
62
+ if (allRows.some((row) => row.some((v) => v instanceof Date))) {
63
+ hasDate = true;
64
+ break;
65
+ }
66
+ }
67
+ let dateStyleIndex = hasDate ? this.ensureDateStyleIndex(entries) : -1;
68
+ let unique = new Map();
69
+ let totalStringCount = 0;
70
+ for (let sheet of sheets) {
71
+ let allRows = [sheet.getHeaders(), ...sheet.getRows()];
72
+ for (let row of allRows) {
73
+ for (let v of row) {
74
+ if (typeof v === 'string') {
75
+ if (!unique.has(v)) {
76
+ unique.set(v, unique.size);
77
+ }
78
+ totalStringCount++;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ let sstDocument = this.parseEntry(entries, 'xl/sharedStrings.xml');
84
+ let sstRoot = this.requireRoot(sstDocument, 'xl/sharedStrings.xml');
85
+ sstRoot.setContent([]);
86
+ for (let [text] of unique) {
87
+ let si = new XMLElement('si');
88
+ let t = new XMLElement('t');
89
+ if (text.indexOf('\n') !== -1) {
90
+ t.setAttribute(new XMLAttribute('xml:space', 'preserve'));
91
+ }
92
+ t.addString(text);
93
+ si.addElement(t);
94
+ sstRoot.addElement(si);
95
+ }
96
+ sstRoot.setAttribute(new XMLAttribute('count', '' + totalStringCount));
97
+ sstRoot.setAttribute(new XMLAttribute('uniqueCount', '' + unique.size));
98
+ this.writeEntry(entries, 'xl/sharedStrings.xml', sstDocument);
99
+ for (let i = 0; i < sheets.length; i++) {
100
+ let sheet = sheets[i];
101
+ let sheetPath = 'xl/worksheets/sheet' + (i + 1) + '.xml';
102
+ let sheetDocument = this.parseEntry(entries, 'xl/worksheets/sheet1.xml');
103
+ let sheetRoot = this.requireRoot(sheetDocument, 'xl/worksheets/sheet1.xml');
104
+ if (i > 0) {
105
+ sheetRoot.getChild('sheetViews')?.getChild('sheetView')?.removeAttribute('tabSelected');
106
+ sheetRoot.removeAttribute('xr:uid');
107
+ }
108
+ let headers = sheet.getHeaders();
109
+ let columnsElement = sheetRoot.getChild('cols');
110
+ if (columnsElement) {
111
+ columnsElement.setContent([]);
112
+ for (let c = 0; c < headers.length; c++) {
113
+ let col = new XMLElement('col');
114
+ col.setAttribute(new XMLAttribute('min', '' + (c + 1)));
115
+ col.setAttribute(new XMLAttribute('max', '' + (c + 1)));
116
+ col.setAttribute(new XMLAttribute('width', COLUMN_WIDTH));
117
+ col.setAttribute(new XMLAttribute('customWidth', '1'));
118
+ columnsElement.addElement(col);
119
+ }
120
+ }
121
+ let sheetDataElement = sheetRoot.getChild('sheetData');
122
+ if (!sheetDataElement) {
123
+ throw new Error(this.i18n.getString('ExcelWriter', 'missingSheetDataElement'));
124
+ }
125
+ sheetDataElement.setContent([]);
126
+ let allRows = [headers, ...sheet.getRows()];
127
+ for (let r = 0; r < allRows.length; r++) {
128
+ let rowValues = allRows[r];
129
+ let spans = '1:' + rowValues.length;
130
+ let rowElement = new XMLElement('row');
131
+ rowElement.setAttribute(new XMLAttribute('r', '' + (r + 1)));
132
+ rowElement.setAttribute(new XMLAttribute('spans', spans));
133
+ for (let c = 0; c < rowValues.length; c++) {
134
+ let cellValue = rowValues[c];
135
+ if (cellValue === null || cellValue === undefined) {
136
+ continue;
137
+ }
138
+ let cellElement = new XMLElement('c');
139
+ cellElement.setAttribute(new XMLAttribute('r', this.columnUtils.columnName(c) + (r + 1)));
140
+ if (typeof cellValue === 'string') {
141
+ cellElement.setAttribute(new XMLAttribute('t', 's'));
142
+ cellElement.setAttribute(new XMLAttribute('s', '1'));
143
+ let vElement = new XMLElement('v');
144
+ vElement.addString('' + unique.get(cellValue));
145
+ cellElement.addElement(vElement);
146
+ }
147
+ else if (typeof cellValue === 'number') {
148
+ cellElement.setAttribute(new XMLAttribute('s', '0'));
149
+ let vElement = new XMLElement('v');
150
+ vElement.addString('' + cellValue);
151
+ cellElement.addElement(vElement);
152
+ }
153
+ else if (typeof cellValue === 'boolean') {
154
+ cellElement.setAttribute(new XMLAttribute('t', 'b'));
155
+ let vElement = new XMLElement('v');
156
+ vElement.addString(cellValue ? '1' : '0');
157
+ cellElement.addElement(vElement);
158
+ }
159
+ else if (cellValue instanceof Date) {
160
+ cellElement.setAttribute(new XMLAttribute('s', '' + dateStyleIndex));
161
+ let vElement = new XMLElement('v');
162
+ vElement.addString('' + this.dateToSerial(cellValue));
163
+ cellElement.addElement(vElement);
164
+ }
165
+ rowElement.addElement(cellElement);
166
+ }
167
+ sheetDataElement.addElement(rowElement);
168
+ }
169
+ entries.set(sheetPath, Buffer.from(sheetDocument.toString(), 'utf8'));
170
+ }
171
+ let workbookDocument = this.parseEntry(entries, 'xl/workbook.xml');
172
+ let workbookRoot = this.requireRoot(workbookDocument, 'xl/workbook.xml');
173
+ let sheetsElement = workbookRoot.getChild('sheets');
174
+ if (!sheetsElement) {
175
+ throw new Error(this.i18n.getString('ExcelWriter', 'missingSheetElement'));
176
+ }
177
+ let existingSheetEls = sheetsElement.getChildren().filter((child) => child.getName() === 'sheet');
178
+ if (existingSheetEls.length > 0) {
179
+ existingSheetEls[0].setAttribute(new XMLAttribute('name', sheets[0].getName()));
180
+ }
181
+ let maxSheetId = 0;
182
+ for (let el of existingSheetEls) {
183
+ let sid = parseInt(el.getAttribute('sheetId')?.getValue() || '0', 10);
184
+ if (sid > maxSheetId) {
185
+ maxSheetId = sid;
186
+ }
187
+ }
188
+ let relsDocument = this.parseEntry(entries, 'xl/_rels/workbook.xml.rels');
189
+ let relsRoot = this.requireRoot(relsDocument, 'xl/_rels/workbook.xml.rels');
190
+ let maxRId = 0;
191
+ for (let rel of relsRoot.getChildren().filter((child) => child.getName() === 'Relationship')) {
192
+ let num = parseInt((rel.getAttribute('Id')?.getValue() || '').replace('rId', ''), 10);
193
+ if (!isNaN(num) && num > maxRId) {
194
+ maxRId = num;
195
+ }
196
+ }
197
+ for (let i = 1; i < sheets.length; i++) {
198
+ let newRId = 'rId' + (maxRId + i);
199
+ let sheetEl = new XMLElement('sheet');
200
+ sheetEl.setAttribute(new XMLAttribute('name', sheets[i].getName()));
201
+ sheetEl.setAttribute(new XMLAttribute('sheetId', '' + (maxSheetId + i)));
202
+ sheetEl.setAttribute(new XMLAttribute('r:id', newRId));
203
+ sheetsElement.addElement(sheetEl);
204
+ let rel = new XMLElement('Relationship');
205
+ rel.setAttribute(new XMLAttribute('Id', newRId));
206
+ rel.setAttribute(new XMLAttribute('Type', WORKSHEET_REL_TYPE));
207
+ rel.setAttribute(new XMLAttribute('Target', 'worksheets/sheet' + (i + 1) + '.xml'));
208
+ relsRoot.addElement(rel);
209
+ }
210
+ this.writeEntry(entries, 'xl/workbook.xml', workbookDocument);
211
+ this.writeEntry(entries, 'xl/_rels/workbook.xml.rels', relsDocument);
212
+ if (sheets.length > 1) {
213
+ let ctDocument = this.parseEntry(entries, '[Content_Types].xml');
214
+ let ctRoot = this.requireRoot(ctDocument, '[Content_Types].xml');
215
+ for (let i = 1; i < sheets.length; i++) {
216
+ let override = new XMLElement('Override');
217
+ override.setAttribute(new XMLAttribute('PartName', '/xl/worksheets/sheet' + (i + 1) + '.xml'));
218
+ override.setAttribute(new XMLAttribute('ContentType', WORKSHEET_CONTENT_TYPE));
219
+ ctRoot.addElement(override);
220
+ }
221
+ this.writeEntry(entries, '[Content_Types].xml', ctDocument);
222
+ }
223
+ }
224
+ setSheetName(entries, name) {
225
+ let document = this.parseEntry(entries, 'xl/workbook.xml');
226
+ let root = this.requireRoot(document, 'xl/workbook.xml');
227
+ let sheets = root.getChild('sheets');
228
+ let sheetElement = sheets?.getChild('sheet');
229
+ if (!sheetElement) {
230
+ throw new Error(this.i18n.getString('ExcelWriter', 'missingSheetElement'));
231
+ }
232
+ sheetElement.setAttribute(new XMLAttribute('name', name));
233
+ this.writeEntry(entries, 'xl/workbook.xml', document);
234
+ }
235
+ setSheetData(entries, sheet) {
236
+ let headers = sheet.getHeaders();
237
+ let rows = sheet.getRows();
238
+ let sstDocument = this.parseEntry(entries, 'xl/sharedStrings.xml');
239
+ let sstRoot = this.requireRoot(sstDocument, 'xl/sharedStrings.xml');
240
+ sstRoot.setContent([]);
241
+ let sheetDocument = this.parseEntry(entries, 'xl/worksheets/sheet1.xml');
242
+ let sheetRoot = this.requireRoot(sheetDocument, 'xl/worksheets/sheet1.xml');
243
+ let columnsElement = sheetRoot.getChild('cols');
244
+ if (columnsElement) {
245
+ columnsElement.setContent([]);
246
+ for (let i = 0; i < headers.length; i++) {
247
+ let col = new XMLElement('col');
248
+ col.setAttribute(new XMLAttribute('min', '' + (i + 1)));
249
+ col.setAttribute(new XMLAttribute('max', '' + (i + 1)));
250
+ col.setAttribute(new XMLAttribute('width', COLUMN_WIDTH));
251
+ col.setAttribute(new XMLAttribute('customWidth', '1'));
252
+ columnsElement.addElement(col);
253
+ }
254
+ }
255
+ let sheetDataElement = sheetRoot.getChild('sheetData');
256
+ if (!sheetDataElement) {
257
+ throw new Error(this.i18n.getString('ExcelWriter', 'missingSheetDataElement'));
258
+ }
259
+ sheetDataElement.setContent([]);
260
+ let hasDate = rows.some((row) => row.some((v) => v instanceof Date));
261
+ let dateStyleIndex = hasDate ? this.ensureDateStyleIndex(entries) : -1;
262
+ let unique = new Map();
263
+ let stringCount = 0;
264
+ let allRows = [headers, ...rows];
265
+ for (let r = 0; r < allRows.length; r++) {
266
+ let rowValues = allRows[r];
267
+ let spans = '1:' + rowValues.length;
268
+ let rowElement = new XMLElement('row');
269
+ rowElement.setAttribute(new XMLAttribute('r', '' + (r + 1)));
270
+ rowElement.setAttribute(new XMLAttribute('spans', spans));
271
+ for (let c = 0; c < rowValues.length; c++) {
272
+ let cellValue = rowValues[c];
273
+ if (cellValue === null || cellValue === undefined) {
274
+ continue;
275
+ }
276
+ let cellElement = new XMLElement('c');
277
+ cellElement.setAttribute(new XMLAttribute('r', this.columnUtils.columnName(c) + (r + 1)));
278
+ if (typeof cellValue === 'string') {
279
+ if (!unique.has(cellValue)) {
280
+ unique.set(cellValue, unique.size);
281
+ let si = new XMLElement('si');
282
+ let t = new XMLElement('t');
283
+ if (cellValue.indexOf('\n') !== -1) {
284
+ t.setAttribute(new XMLAttribute('xml:space', 'preserve'));
285
+ }
286
+ t.addString(cellValue);
287
+ si.addElement(t);
288
+ sstRoot.addElement(si);
289
+ }
290
+ cellElement.setAttribute(new XMLAttribute('t', 's'));
291
+ cellElement.setAttribute(new XMLAttribute('s', '1'));
292
+ let vElement = new XMLElement('v');
293
+ vElement.addString('' + unique.get(cellValue));
294
+ cellElement.addElement(vElement);
295
+ stringCount++;
296
+ }
297
+ else if (typeof cellValue === 'number') {
298
+ cellElement.setAttribute(new XMLAttribute('s', '0'));
299
+ let vElement = new XMLElement('v');
300
+ vElement.addString('' + cellValue);
301
+ cellElement.addElement(vElement);
302
+ }
303
+ else if (typeof cellValue === 'boolean') {
304
+ cellElement.setAttribute(new XMLAttribute('t', 'b'));
305
+ let vElement = new XMLElement('v');
306
+ vElement.addString(cellValue ? '1' : '0');
307
+ cellElement.addElement(vElement);
308
+ }
309
+ else if (cellValue instanceof Date) {
310
+ cellElement.setAttribute(new XMLAttribute('s', '' + dateStyleIndex));
311
+ let vElement = new XMLElement('v');
312
+ vElement.addString('' + this.dateToSerial(cellValue));
313
+ cellElement.addElement(vElement);
314
+ }
315
+ rowElement.addElement(cellElement);
316
+ }
317
+ sheetDataElement.addElement(rowElement);
318
+ }
319
+ sstRoot.setAttribute(new XMLAttribute('count', '' + stringCount));
320
+ sstRoot.setAttribute(new XMLAttribute('uniqueCount', '' + unique.size));
321
+ this.writeEntry(entries, 'xl/sharedStrings.xml', sstDocument);
322
+ this.writeEntry(entries, 'xl/worksheets/sheet1.xml', sheetDocument);
323
+ }
324
+ ensureDateStyleIndex(entries) {
325
+ let stylesDocument = this.parseEntry(entries, 'xl/styles.xml');
326
+ let root = this.requireRoot(stylesDocument, 'xl/styles.xml');
327
+ let builtinDateFmtIds = new Set([14, 15, 16, 17, 18, 19, 20, 21, 22, 45, 46, 47]);
328
+ let cellXfsElement = root.getChild('cellXfs');
329
+ if (!cellXfsElement) {
330
+ return 0;
331
+ }
332
+ let xfs = cellXfsElement.getChildren().filter((child) => child.getName() === 'xf');
333
+ for (let i = 0; i < xfs.length; i++) {
334
+ let numFmtId = parseInt(xfs[i].getAttribute('numFmtId')?.getValue() || '0', 10);
335
+ if (builtinDateFmtIds.has(numFmtId)) {
336
+ return i;
337
+ }
338
+ }
339
+ let newXf = new XMLElement('xf');
340
+ newXf.setAttribute(new XMLAttribute('numFmtId', '14'));
341
+ newXf.setAttribute(new XMLAttribute('fontId', '0'));
342
+ newXf.setAttribute(new XMLAttribute('fillId', '0'));
343
+ newXf.setAttribute(new XMLAttribute('borderId', '0'));
344
+ newXf.setAttribute(new XMLAttribute('xfId', '0'));
345
+ newXf.setAttribute(new XMLAttribute('applyNumberFormat', '1'));
346
+ cellXfsElement.addElement(newXf);
347
+ cellXfsElement.setAttribute(new XMLAttribute('count', '' + (xfs.length + 1)));
348
+ this.writeEntry(entries, 'xl/styles.xml', stylesDocument);
349
+ return xfs.length;
350
+ }
351
+ dateToSerial(date) {
352
+ return (date.getTime() - Date.UTC(1899, 11, 30)) / 86400000;
353
+ }
354
+ parseEntry(entries, name) {
355
+ let data = entries.get(name);
356
+ if (!data) {
357
+ throw new Error(this.i18n.format(this.i18n.getString('ExcelWriter', 'missingTemplatePart'), [name]));
358
+ }
359
+ let contentHandler = new DOMBuilder();
360
+ let parser = new SAXParser();
361
+ parser.setSchemaLoadingEnabled(false);
362
+ parser.setValidating(false);
363
+ parser.setContentHandler(contentHandler);
364
+ parser.parseString(data.toString('utf8'));
365
+ let document = contentHandler.getDocument();
366
+ if (!document) {
367
+ throw new Error(this.i18n.format(this.i18n.getString('ExcelWriter', 'unparsableTemplatePart'), [name]));
368
+ }
369
+ return document;
370
+ }
371
+ requireRoot(document, name) {
372
+ let root = document.getRoot();
373
+ if (!root) {
374
+ throw new Error(this.i18n.format(this.i18n.getString('ExcelWriter', 'missingRootElement'), [name]));
375
+ }
376
+ return root;
377
+ }
378
+ writeEntry(entries, name, document) {
379
+ entries.set(name, Buffer.from(document.toString(), 'utf8'));
380
+ }
381
+ }
382
+ //# sourceMappingURL=excelWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excelWriter.js","sourceRoot":"","sources":["../ts/excelWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;iFAUiF;AAEjF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAe,UAAU,EAAE,MAAM,UAAU,CAAC;AAExF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,aAAa,GAAW,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AAC7F,MAAM,YAAY,GAAW,IAAI,CAAC;AAElC,MAAM,OAAO,WAAW;IACZ,IAAI,CAAO;IACX,WAAW,CAAc;IACzB,QAAQ,CAAW;IAE3B,YAAY,QAAgB;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IACnC,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;IACxF,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,IAAgC;QACxD,IAAI,cAAc,GAAW,YAAY,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,OAA4B,CAAC;QACjC,IAAI,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvJ,CAAC;QAED,IAAI,IAAI,YAAY,aAAa,EAAE,CAAC;YAChC,IAAI,MAAM,GAAiB,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,mBAAmB,CAAC,OAA4B,EAAE,MAAoB;QAC1E,IAAI,kBAAkB,GAAW,+EAA+E,CAAC;QACjH,IAAI,sBAAsB,GAAW,2EAA2E,CAAC;QAEjH,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,OAAO,GAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpF,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;YACV,CAAC;QACL,CAAC;QACD,IAAI,cAAc,GAAW,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/E,IAAI,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC5C,IAAI,gBAAgB,GAAW,CAAC,CAAC;QACjC,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,OAAO,GAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBAChB,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;wBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;4BACjB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;wBACD,gBAAgB,EAAE,CAAC;oBACvB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,IAAI,WAAW,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAChF,IAAI,OAAO,GAAe,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAChF,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,EAAE,GAAe,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5B,CAAC,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB,EAAE,WAAW,CAAC,CAAC;QAE9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,KAAK,GAAe,MAAM,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,SAAS,GAAW,qBAAqB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;YACjE,IAAI,aAAa,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;YACtF,IAAI,SAAS,GAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;YAExF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACR,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;gBACxF,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,OAAO,GAAa,KAAK,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,cAAc,GAA2B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,cAAc,EAAE,CAAC;gBACjB,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,IAAI,GAAG,GAAe,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC5C,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;oBAC1D,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;oBACvD,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACL,CAAC;YAED,IAAI,gBAAgB,GAA2B,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC/E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;YACnF,CAAC;YACD,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAEhC,IAAI,OAAO,GAAkB,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,SAAS,GAAgB,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,KAAK,GAAW,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;gBAC5C,IAAI,UAAU,GAAe,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;gBACnD,UAAU,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,UAAU,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,IAAI,SAAS,GAAc,SAAS,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wBAChD,SAAS;oBACb,CAAC;oBACD,IAAI,WAAW,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;oBAClD,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE1F,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAChC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;wBACrD,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;wBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC/C,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;wBACvC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;wBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;wBACnC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE,CAAC;wBACxC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;wBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC/C,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC1C,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACrC,CAAC;yBAAM,IAAI,SAAS,YAAY,IAAI,EAAE,CAAC;wBACnC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;wBACrE,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;wBACtD,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACrC,CAAC;oBACD,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBACvC,CAAC;gBACD,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,gBAAgB,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAChF,IAAI,YAAY,GAAe,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QACrF,IAAI,aAAa,GAA2B,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,gBAAgB,GAAiB,aAAa,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC;QAC5H,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,UAAU,GAAW,CAAC,CAAC;QAC3B,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC9B,IAAI,GAAG,GAAW,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;gBACnB,UAAU,GAAG,GAAG,CAAC;YACrB,CAAC;QACL,CAAC;QAED,IAAI,YAAY,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QACvF,IAAI,QAAQ,GAAe,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;QACxF,IAAI,MAAM,GAAW,CAAC,CAAC;QACvB,KAAK,IAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,cAAc,CAAC,EAAE,CAAC;YACvG,IAAI,GAAG,GAAW,QAAQ,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,CAAC;YACjB,CAAC;QACL,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,MAAM,GAAW,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAe,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAElC,IAAI,GAAG,GAAe,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;YACrD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACjD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;YAC/D,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YACpF,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,4BAA4B,EAAE,YAAY,CAAC,CAAC;QAErE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,UAAU,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAC9E,IAAI,MAAM,GAAe,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;gBACtD,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,sBAAsB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBAC/F,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC,CAAC;gBAC/E,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAA4B,EAAE,IAAY;QAC3D,IAAI,QAAQ,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACxE,IAAI,IAAI,GAAe,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACrE,IAAI,MAAM,GAA2B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,YAAY,GAA2B,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAEO,YAAY,CAAC,OAA4B,EAAE,KAAiB;QAChE,IAAI,OAAO,GAAa,KAAK,CAAC,UAAU,EAAE,CAAC;QAC3C,IAAI,IAAI,GAAkB,KAAK,CAAC,OAAO,EAAE,CAAC;QAE1C,IAAI,WAAW,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAChF,IAAI,OAAO,GAAe,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAChF,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEvB,IAAI,aAAa,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QACtF,IAAI,SAAS,GAAe,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;QAExF,IAAI,cAAc,GAA2B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,cAAc,EAAE,CAAC;YACjB,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,GAAG,GAAe,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5C,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC1D,GAAG,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;gBACvD,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QAED,IAAI,gBAAgB,GAA2B,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,OAAO,GAAY,IAAI,CAAC,IAAI,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACtG,IAAI,cAAc,GAAW,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/E,IAAI,MAAM,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC5C,IAAI,WAAW,GAAW,CAAC,CAAC;QAC5B,IAAI,OAAO,GAAkB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,SAAS,GAAgB,OAAO,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,KAAK,GAAW,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC;YAC5C,IAAI,UAAU,GAAe,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YACnD,UAAU,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,UAAU,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,SAAS,GAAc,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAChD,SAAS;gBACb,CAAC;gBAED,IAAI,WAAW,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;gBAClD,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE1F,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;wBACzB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;wBACnC,IAAI,EAAE,GAAe,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC1C,IAAI,CAAC,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;wBACxC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BACjC,CAAC,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;wBAC9D,CAAC;wBACD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;wBACvB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACjB,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBAC3B,CAAC;oBACD,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrD,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC/C,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACjC,WAAW,EAAE,CAAC;gBAClB,CAAC;qBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACvC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;oBACnC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE,CAAC;oBACxC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrD,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC/C,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC1C,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,SAAS,YAAY,IAAI,EAAE,CAAC;oBACnC,WAAW,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;oBACrE,IAAI,QAAQ,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;oBACtD,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACrC,CAAC;gBAED,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YACD,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,aAAa,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,sBAAsB,EAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,CAAC,CAAC;IACxE,CAAC;IAEO,oBAAoB,CAAC,OAA4B;QACrD,IAAI,cAAc,GAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC5E,IAAI,IAAI,GAAe,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QACzE,IAAI,iBAAiB,GAAgB,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,cAAc,GAA2B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACb,CAAC;QACD,IAAI,GAAG,GAAiB,cAAc,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,KAAiB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;QAC7G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,QAAQ,GAAW,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACxF,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,CAAC;YACb,CAAC;QACL,CAAC;QACD,IAAI,KAAK,GAAe,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/D,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,cAAc,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,MAAM,CAAC;IACtB,CAAC;IAEO,YAAY,CAAC,IAAU;QAC3B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC;IAChE,CAAC;IAEO,UAAU,CAAC,OAA4B,EAAE,IAAY;QACzD,IAAI,IAAI,GAAuB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,cAAc,GAAe,IAAI,UAAU,EAAE,CAAC;QAClD,IAAI,MAAM,GAAc,IAAI,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAA4B,cAAc,CAAC,WAAW,EAAE,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,wBAAwB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5G,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEO,WAAW,CAAC,QAAqB,EAAE,IAAY;QACnD,IAAI,IAAI,GAA2B,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,UAAU,CAAC,OAA4B,EAAE,IAAY,EAAE,QAAqB;QAChF,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;CACJ"}
@@ -0,0 +1,18 @@
1
+ {
2
+ "ExcelWriter": {
3
+ "corruptTemplate": "Malformed Excel template: {0}",
4
+ "missingTemplatePart": "Malformed Excel template: missing {0}",
5
+ "unparsableTemplatePart": "Malformed Excel template: could not parse {0}",
6
+ "missingRootElement": "Malformed Excel template: {0} has no root element",
7
+ "missingSheetElement": "Malformed Excel template: missing <sheet> element in workbook.xml",
8
+ "missingSheetDataElement": "Malformed Excel template: missing <sheetData> element in sheet1.xml",
9
+ "emptyWorkbook": "Cannot write an empty workbook: add at least one sheet first"
10
+ },
11
+ "ExcelReader": {
12
+ "notAWorkbook": "The selected file is not a valid Excel workbook: {0}",
13
+ "missingWorkbookPart": "Malformed Excel file: missing {0}",
14
+ "unparsableXmlPart": "Malformed Excel file: could not parse an internal XML part",
15
+ "noSheets": "The Excel file does not contain any visible sheet",
16
+ "sheetNotFound": "The Excel file does not contain a sheet named '{0}'"
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "ExcelWriter": {
3
+ "corruptTemplate": "Plantilla de Excel incorrecta: {0}",
4
+ "missingTemplatePart": "Plantilla de Excel incorrecta: falta {0}",
5
+ "unparsableTemplatePart": "Plantilla de Excel incorrecta: no se pudo analizar {0}",
6
+ "missingRootElement": "Plantilla de Excel incorrecta: {0} no tiene elemento raíz",
7
+ "missingSheetElement": "Plantilla de Excel incorrecta: falta el elemento <sheet> en workbook.xml",
8
+ "missingSheetDataElement": "Plantilla de Excel incorrecta: falta el elemento <sheetData> en sheet1.xml",
9
+ "emptyWorkbook": "No se puede escribir un libro de trabajo vacío: agregue al menos una hoja primero"
10
+ },
11
+ "ExcelReader": {
12
+ "notAWorkbook": "El archivo seleccionado no es un libro de Excel válido: {0}",
13
+ "missingWorkbookPart": "Archivo de Excel incorrecto: falta {0}",
14
+ "unparsableXmlPart": "Archivo de Excel incorrecto: no se pudo analizar una parte XML interna",
15
+ "noSheets": "El archivo de Excel no contiene ninguna hoja visible",
16
+ "sheetNotFound": "El archivo de Excel no contiene ninguna hoja llamada '{0}'"
17
+ }
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "ExcelWriter": {
3
+ "corruptTemplate": "Modèle Excel incorrect : {0}",
4
+ "missingTemplatePart": "Modèle Excel incorrect : {0} manquant",
5
+ "unparsableTemplatePart": "Modèle Excel incorrect : impossible d'analyser {0}",
6
+ "missingRootElement": "Modèle Excel incorrect : {0} n'a pas d'élément racine",
7
+ "missingSheetElement": "Modèle Excel incorrect : élément <sheet> manquant dans workbook.xml",
8
+ "missingSheetDataElement": "Modèle Excel incorrect : élément <sheetData> manquant dans sheet1.xml",
9
+ "emptyWorkbook": "Impossible d'écrire un classeur vide : ajoutez au moins une feuille d'abord"
10
+ },
11
+ "ExcelReader": {
12
+ "notAWorkbook": "Le fichier sélectionné n'est pas un classeur Excel valide : {0}",
13
+ "missingWorkbookPart": "Fichier Excel incorrect : {0} manquant",
14
+ "unparsableXmlPart": "Fichier Excel incorrect : impossible d'analyser une partie XML interne",
15
+ "noSheets": "Le fichier Excel ne contient aucune feuille visible",
16
+ "sheetNotFound": "Le fichier Excel ne contient aucune feuille nommée '{0}'"
17
+ }
18
+ }
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ export declare class I18n {
13
+ private resources;
14
+ constructor(resourcesFile: string);
15
+ getString(group: string, key: string): string;
16
+ format(text: string, params: string[]): string;
17
+ }
package/dist/i18n.js ADDED
@@ -0,0 +1,36 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ import { readFileSync } from "fs";
13
+ export class I18n {
14
+ resources;
15
+ constructor(resourcesFile) {
16
+ let data = readFileSync(resourcesFile);
17
+ this.resources = JSON.parse(data.toString());
18
+ }
19
+ getString(group, key) {
20
+ let fileStrings = this.resources[group];
21
+ if (fileStrings) {
22
+ let value = fileStrings[key];
23
+ if (value) {
24
+ return value;
25
+ }
26
+ }
27
+ return '!' + key + '!';
28
+ }
29
+ format(text, params) {
30
+ for (let i = 0; i < params.length; i++) {
31
+ text = text.replace('{' + i + '}', params[i]);
32
+ }
33
+ return text;
34
+ }
35
+ }
36
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../ts/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;iFAUiF;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,MAAM,OAAO,IAAI;IAEL,SAAS,CAAM;IAEvB,YAAY,aAAqB;QAC7B,IAAI,IAAI,GAAW,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,GAAW;QAChC,IAAI,WAAW,GAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,KAAK,GAAW,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,MAAgB;QACjC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,20 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ export { CellValue } from './cellValue.js';
13
+ export { ColumnUtils } from './columnUtils.js';
14
+ export { Crc32 } from './crc32.js';
15
+ export { ExcelReader, ExcelSheetData } from './excelReader.js';
16
+ export { ExcelSheet } from './excelSheet.js';
17
+ export { ExcelWorkbook } from './excelWorkbook.js';
18
+ export { ExcelWriter } from './excelWriter.js';
19
+ export { I18n } from './i18n.js';
20
+ export { ZipUtils } from './zipUtils.js';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ export { ColumnUtils } from './columnUtils.js';
13
+ export { Crc32 } from './crc32.js';
14
+ export { ExcelReader } from './excelReader.js';
15
+ export { ExcelSheet } from './excelSheet.js';
16
+ export { ExcelWorkbook } from './excelWorkbook.js';
17
+ export { ExcelWriter } from './excelWriter.js';
18
+ export { I18n } from './i18n.js';
19
+ export { ZipUtils } from './zipUtils.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;iFAUiF;AAGjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
Binary file
@@ -0,0 +1,20 @@
1
+ /*******************************************************************************
2
+ * Copyright (c) 2026 Maxprograms.
3
+ *
4
+ * This program and the accompanying materials
5
+ * are made available under the terms of the Eclipse Public License 1.0
6
+ * which accompanies this distribution, and is available at
7
+ * https://www.eclipse.org/org/documents/epl-v10.html
8
+ *
9
+ * Contributors:
10
+ * Maxprograms - initial API and implementation
11
+ *******************************************************************************/
12
+ export declare class ZipUtils {
13
+ private crc32;
14
+ constructor();
15
+ readZip(buffer: Buffer): Map<string, Buffer>;
16
+ writeZip(entries: Map<string, Buffer>): Buffer;
17
+ private extractEntry;
18
+ private findEndOfCentralDirectory;
19
+ private dosDateTime;
20
+ }