@office-open/xlsx 0.10.12 → 0.10.14

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 @@
1
+ export * from "@office-open/core/drawingml";
@@ -0,0 +1,2 @@
1
+ export * from "@office-open/core/drawingml";
2
+ export {};
@@ -1,5 +1,5 @@
1
- import { n as vmlNotesDesc, o as sharedStringsDesc, r as stringifyWorksheet, t as commentsDesc } from "./comments-BTMAAMY4.mjs";
2
- import { S as calcChainDesc, _ as aggregate, a as usersDesc, b as drawingDesc, c as buildTablePartsXml, f as tableDesc, h as pivotTableDesc, i as revisionLogDesc, l as workbookDesc, m as pivotCacheRecordsDesc, n as XlsxWriteContext, p as pivotCacheDefDesc, r as revisionHeadersDesc, s as buildExternalReferencesXml, v as collectUniqueValues, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-D_9UIEwJ.mjs";
1
+ import { n as vmlNotesDesc, o as sharedStringsDesc, r as stringifyWorksheet, t as commentsDesc } from "./comments-Bvfeh76o.mjs";
2
+ import { S as calcChainDesc, _ as aggregate, a as usersDesc, b as drawingDesc, c as buildTablePartsXml, f as tableDesc, h as pivotTableDesc, i as revisionLogDesc, l as workbookDesc, m as pivotCacheRecordsDesc, n as XlsxWriteContext, p as pivotCacheDefDesc, r as revisionHeadersDesc, s as buildExternalReferencesXml, v as collectUniqueValues, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-CSCfAIfV.mjs";
3
3
  import { OoxmlMimeType, Relationships, TargetModeType, appPropertiesDesc, buildCorePropertiesXmlString, compileMapping, createPacker, customPropertiesDesc, toUint8Array } from "@office-open/core";
4
4
  import { createThemeXml } from "@office-open/core/theme";
5
5
  import { chartSpaceDesc } from "@office-open/core/chart";
@@ -74,8 +74,7 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
74
74
  sharedStrings: ctx.sharedStrings,
75
75
  styles: ctx.styles
76
76
  };
77
- for (let i = 0; i < worksheetConfigs.length; i++) {
78
- const wsOpts = worksheetConfigs[i];
77
+ for (const [i, wsOpts] of worksheetConfigs.entries()) {
79
78
  const imgOpts = wsOpts.images ?? [];
80
79
  const chartOpts = wsOpts.charts ?? [];
81
80
  const hlOpts = wsOpts.hyperlinks ?? [];
@@ -83,12 +82,10 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
83
82
  let sheetXml = stringifyWorksheet(wsOpts, wsContext);
84
83
  const sheetIdx = i + 1;
85
84
  const wsRows = wsOpts.rows ?? [];
86
- for (let ri = 0; ri < wsRows.length; ri++) {
87
- const rowOpts = wsRows[ri];
85
+ for (const [ri, rowOpts] of wsRows.entries()) {
88
86
  const rowNumber = rowOpts.rowNumber ?? ri + 1;
89
87
  if (!rowOpts.cells) continue;
90
- for (let ci = 0; ci < rowOpts.cells.length; ci++) {
91
- const cell = rowOpts.cells[ci];
88
+ for (const [ci, cell] of rowOpts.cells.entries()) {
92
89
  if (!cell.formula) continue;
93
90
  const ref = cell.reference ?? columnToLetter(ci + 1) + rowNumber;
94
91
  calcCells.push({
@@ -213,7 +210,9 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
213
210
  const sourceSheet = pt.sourceSheet ?? sheetName;
214
211
  const sourceWsIdx = worksheetConfigs.findIndex((ws) => (ws.name ?? `Sheet${worksheetConfigs.indexOf(ws) + 1}`) === sourceSheet);
215
212
  if (sourceWsIdx === -1) continue;
216
- const sourceData = extractPivotSourceData(worksheetConfigs[sourceWsIdx].rows ?? [], pt.source);
213
+ const sourceWs = worksheetConfigs[sourceWsIdx];
214
+ if (!sourceWs) continue;
215
+ const sourceData = extractPivotSourceData(sourceWs.rows ?? [], pt.source);
217
216
  const cacheKey = `${sourceSheet}:${pt.source}`;
218
217
  let cacheId;
219
218
  let cacheIdx;
@@ -316,8 +315,7 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
316
315
  path: `xl/worksheets/sheet${i + 1}.xml`
317
316
  };
318
317
  }
319
- for (let i = 0; i < chartsheetConfigs.length; i++) {
320
- const csOpts = chartsheetConfigs[i];
318
+ for (const [i, csOpts] of chartsheetConfigs.entries()) {
321
319
  const chartDef = csOpts.chart;
322
320
  const csChartGlobalIdx = ctx.charts.array.length;
323
321
  const csChartKey = `cs_chart_${csChartGlobalIdx}`;
@@ -378,6 +376,7 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
378
376
  const elRid = ctx.workbookRels.relationshipCount + 1;
379
377
  ctx.workbookRels.addRelationship(elRid, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", `externalLinks/externalLink${elIdx}.xml`);
380
378
  const elOpts = extLinks[ei];
379
+ if (!elOpts) continue;
381
380
  let bookRId;
382
381
  if (elOpts.externalBook?.target) {
383
382
  const elRels = new Relationships();
@@ -417,8 +416,7 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
417
416
  data: XML_DECL + createThemeXml(),
418
417
  path: "xl/theme/theme1.xml"
419
418
  };
420
- for (let i = 0; i < ctx.charts.array.length; i++) {
421
- const chartData = ctx.charts.array[i];
419
+ for (const [i, chartData] of ctx.charts.array.entries()) {
422
420
  mapping[`Chart${i}`] = {
423
421
  data: XML_DECL + chartData.chartSpaceXml,
424
422
  path: `xl/charts/chart${i + 1}.xml`
@@ -446,9 +444,9 @@ function compileWorkbook(options, overrides = [], mediaLevel = 0) {
446
444
  ctx.contentTypes.addRevisionHeaders();
447
445
  ctx.workbookRels.addRelationship(ctx.workbookRels.relationshipCount + 1, REV_HEADERS_REL, "revisionHeaders.xml");
448
446
  const revHeadersRels = new Relationships();
449
- for (let i = 0; i < rl.logs.length; i++) {
447
+ for (const [i, log] of rl.logs.entries()) {
450
448
  mapping[`RevisionLog${i}`] = {
451
- data: XML_DECL + (revisionLogDesc.stringify(rl.logs[i], ctx) ?? ""),
449
+ data: XML_DECL + (revisionLogDesc.stringify(log, ctx) ?? ""),
452
450
  path: `xl/revisions/revision${i + 1}.xml`
453
451
  };
454
452
  ctx.contentTypes.addRevisionLog(i + 1);
@@ -517,10 +515,10 @@ function extractPivotSourceData(rows, sourceRef) {
517
515
  fieldNames: [],
518
516
  records: []
519
517
  };
520
- const startRow = parseInt(startMatch[2], 10) - 1;
521
- const endRow = endMatch ? parseInt(endMatch[2], 10) - 1 : startRow;
522
- const startCol = colLetterToIndex(startMatch[1]);
523
- const endCol = endMatch ? colLetterToIndex(endMatch[1]) : startCol;
518
+ const startRow = parseInt(startMatch[2] ?? "1", 10) - 1;
519
+ const endRow = endMatch ? parseInt(endMatch[2] ?? "1", 10) - 1 : startRow;
520
+ const startCol = colLetterToIndex(startMatch[1] ?? "A");
521
+ const endCol = endMatch ? colLetterToIndex(endMatch[1] ?? "A") : startCol;
524
522
  const colCount = endCol - startCol + 1;
525
523
  const headerRow = rows[startRow];
526
524
  const fieldNames = [];
@@ -560,8 +558,8 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
560
558
  for (const pt of pivotOpts) {
561
559
  const locMatch = (pt.location ?? "A3").match(/^([A-Z]+)(\d+)$/);
562
560
  if (!locMatch) continue;
563
- const startCol = colLetterToIndex(locMatch[1]);
564
- const startRow = parseInt(locMatch[2], 10);
561
+ const startCol = colLetterToIndex(locMatch[1] ?? "A");
562
+ const startRow = parseInt(locMatch[2] ?? "1", 10);
565
563
  const rowFieldNames = pt.rows;
566
564
  const dataFields = pt.data;
567
565
  const sourceSheetName = pt.sourceSheet ?? currentSheetName;
@@ -588,9 +586,9 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
588
586
  };
589
587
  groupMap.set(groupKey, group);
590
588
  }
591
- for (let di = 0; di < dataFieldIndices.length; di++) {
592
- const val = record[dataFieldIndices[di]];
593
- if (typeof val === "number") group.values[di].push(val);
589
+ for (const [di, fi] of dataFieldIndices.entries()) {
590
+ const val = record[fi];
591
+ if (typeof val === "number") group.values[di]?.push(val);
594
592
  }
595
593
  }
596
594
  const colFieldIndices = (pt.columns ?? []).map((n) => fields.indexOf(n));
@@ -605,7 +603,7 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
605
603
  maxRow = Math.max(maxRow, rowIdx);
606
604
  };
607
605
  if (colFieldIndices.length > 0 && !colFieldIndices.some((idx) => idx === -1)) {
608
- const colUniqueVals = collectUniqueValues(sourceData.records, colFieldIndices[0]).map((v) => typeof v === "string" || typeof v === "number" ? String(v) : String(v ?? ""));
606
+ const colUniqueVals = collectUniqueValues(sourceData.records, colFieldIndices[0] ?? 0).map((v) => typeof v === "string" || typeof v === "number" ? String(v) : String(v ?? ""));
609
607
  const crossTabMap = /* @__PURE__ */ new Map();
610
608
  for (const record of sourceData.records) {
611
609
  const rowKey = rowFieldIndices.map((fi) => String(record[fi])).join("|");
@@ -627,11 +625,11 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
627
625
  colValues = dataFieldIndices.map(() => []);
628
626
  entry.colData.set(colKey, colValues);
629
627
  }
630
- for (let di = 0; di < dataFieldIndices.length; di++) {
631
- const val = record[dataFieldIndices[di]];
628
+ for (const [di, fi] of dataFieldIndices.entries()) {
629
+ const val = record[fi];
632
630
  if (typeof val === "number") {
633
- colValues[di].push(val);
634
- entry.rowTotals[di].push(val);
631
+ colValues[di]?.push(val);
632
+ entry.rowTotals[di]?.push(val);
635
633
  }
636
634
  }
637
635
  }
@@ -662,23 +660,22 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
662
660
  let currentRow = startRow + 1;
663
661
  for (const [, entry] of crossTabMap) {
664
662
  const cells = [];
665
- for (let ri = 0; ri < entry.rowKeys.length; ri++) {
663
+ for (const [ri, rowKey] of entry.rowKeys.entries()) {
666
664
  const cellRef = colIndexToLetter(startCol + ri) + currentRow;
667
- const strIdx = sharedStrings.register(String(entry.rowKeys[ri]));
665
+ const strIdx = sharedStrings.register(String(rowKey));
668
666
  cells.push(`<c r="${cellRef}" t="s"><v>${strIdx}</v></c>`);
669
667
  }
670
- for (let ci = 0; ci < numColVals; ci++) {
671
- const colKey = colUniqueVals[ci];
668
+ for (const [ci, colKey] of colUniqueVals.entries()) {
672
669
  const colValues = entry.colData.get(colKey);
673
670
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + ci)) + currentRow;
674
671
  const subtotal = dataFields[0].summarize ?? "sum";
675
- const result = colValues ? aggregate(colValues[0], subtotal) : 0;
672
+ const result = colValues ? aggregate(colValues[0] ?? [], subtotal) : 0;
676
673
  cells.push(`<c r="${cellRef}"><v>${result}</v></c>`);
677
674
  }
678
675
  {
679
676
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + numColVals)) + currentRow;
680
677
  const subtotal = dataFields[0].summarize ?? "sum";
681
- const result = aggregate(entry.rowTotals[0], subtotal);
678
+ const result = aggregate(entry.rowTotals[0] ?? [], subtotal);
682
679
  cells.push(`<c r="${cellRef}"><v>${result}</v></c>`);
683
680
  }
684
681
  addCells(currentRow, cells);
@@ -687,12 +684,12 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
687
684
  const gtCells = [];
688
685
  const gtStrIdx = sharedStrings.register("Grand Total");
689
686
  gtCells.push(`<c r="${colIndexToLetter(startCol)}${currentRow}" t="s"><v>${gtStrIdx}</v></c>`);
690
- for (let ci = 0; ci < numColVals; ci++) {
691
- const colKey = colUniqueVals[ci];
687
+ for (const [ci, colKey] of colUniqueVals.entries()) {
692
688
  const subtotal = dataFields[0].summarize ?? "sum";
693
689
  const colAllValues = [];
694
- for (const record of sourceData.records) if (colFieldIndices.map((fi) => String(record[fi])).join("|") === colKey) {
695
- const val = record[dataFieldIndices[0]];
690
+ const dfIdx0 = dataFieldIndices[0];
691
+ for (const record of sourceData.records) if (colFieldIndices.map((fi) => String(record[fi])).join("|") === colKey && dfIdx0 !== void 0) {
692
+ const val = record[dfIdx0];
696
693
  if (typeof val === "number") colAllValues.push(val);
697
694
  }
698
695
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + ci)) + currentRow;
@@ -701,7 +698,8 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
701
698
  }
702
699
  {
703
700
  const subtotal = dataFields[0].summarize ?? "sum";
704
- const allValues = sourceData.records.map((r) => r[dataFieldIndices[0]]).filter((v) => typeof v === "number");
701
+ const dfIdx0 = dataFieldIndices[0];
702
+ const allValues = sourceData.records.map((r) => dfIdx0 !== void 0 ? r[dfIdx0] : void 0).filter((v) => typeof v === "number");
705
703
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + numColVals)) + currentRow;
706
704
  const result = aggregate(allValues, subtotal);
707
705
  gtCells.push(`<c r="${cellRef}"><v>${result}</v></c>`);
@@ -728,15 +726,15 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
728
726
  let currentRow = startRow + 1;
729
727
  for (const [, group] of groupMap) {
730
728
  const cells = [];
731
- for (let ri = 0; ri < group.keys.length; ri++) {
729
+ for (const [ri, key] of group.keys.entries()) {
732
730
  const cellRef = colIndexToLetter(startCol + ri) + currentRow;
733
- const strIdx = sharedStrings.register(String(group.keys[ri]));
731
+ const strIdx = sharedStrings.register(String(key));
734
732
  cells.push(`<c r="${cellRef}" t="s"><v>${strIdx}</v></c>`);
735
733
  }
736
- for (let di = 0; di < dataFields.length; di++) {
734
+ for (const [di, df] of dataFields.entries()) {
737
735
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + di)) + currentRow;
738
- const subtotal = dataFields[di].summarize ?? "sum";
739
- const result = aggregate(group.values[di], subtotal);
736
+ const subtotal = df.summarize ?? "sum";
737
+ const result = aggregate(group.values[di] ?? [], subtotal);
740
738
  cells.push(`<c r="${cellRef}"><v>${result}</v></c>`);
741
739
  }
742
740
  addCells(currentRow, cells);
@@ -745,10 +743,11 @@ function renderPivotSheetData(pivotOpts, worksheetConfigs, sharedStrings, curren
745
743
  const gtCells = [];
746
744
  const gtStrIdx = sharedStrings.register("Grand Total");
747
745
  gtCells.push(`<c r="${colIndexToLetter(startCol)}${currentRow}" t="s"><v>${gtStrIdx}</v></c>`);
748
- for (let di = 0; di < dataFields.length; di++) {
746
+ for (const [di, df] of dataFields.entries()) {
749
747
  const cellRef = colIndexToLetter(startCol + (rowFieldNames.length + di)) + currentRow;
750
- const subtotal = dataFields[di].summarize ?? "sum";
751
- const result = aggregate(sourceData.records.map((r) => r[dataFieldIndices[di]]).filter((v) => typeof v === "number"), subtotal);
748
+ const subtotal = df.summarize ?? "sum";
749
+ const dfIdx = dataFieldIndices[di];
750
+ const result = aggregate(sourceData.records.map((r) => dfIdx !== void 0 ? r[dfIdx] : void 0).filter((v) => typeof v === "number"), subtotal);
752
751
  gtCells.push(`<c r="${cellRef}"><v>${result}</v></c>`);
753
752
  }
754
753
  addCells(currentRow, gtCells);
@@ -840,4 +839,4 @@ function generateWorkbookStream(options, packerOptions) {
840
839
  //#endregion
841
840
  export { compileWorkbook as i, generateWorkbookStream as n, generateWorkbookSync as r, generateWorkbook as t };
842
841
 
843
- //# sourceMappingURL=generate-Dsk7XzIC.mjs.map
842
+ //# sourceMappingURL=generate-2S1-U1mL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-2S1-U1mL.mjs","names":["buildWorksheetXml"],"sources":["../src/compiler.ts","../src/generate.ts"],"sourcesContent":["/**\n * XLSX Compiler — compiles WorkbookOptions into a Zippable structure.\n *\n * Accepts pure JSON WorkbookOptions — no intermediate File class needed.\n * Uses XlsxWriteContext for shared state (strings, styles, media, charts).\n *\n * @module\n */\n\nimport {\n Relationships,\n TargetModeType,\n appPropertiesDesc,\n buildCorePropertiesXmlString,\n compileMapping,\n customPropertiesDesc,\n toUint8Array,\n type XmlifyedFile,\n type Zippable,\n} from \"@office-open/core\";\nimport { chartSpaceDesc } from \"@office-open/core/chart\";\nimport type { CalcCell } from \"@parts/calc-chain\";\nimport { calcChainDesc } from \"@parts/calc-chain\";\nimport { chartsheetDesc } from \"@parts/chartsheet\";\nimport { commentsDesc, vmlNotesDesc } from \"@parts/comments\";\nimport type { ImageOptions, ChartAnchorOptions } from \"@parts/drawing\";\nimport { drawingDesc } from \"@parts/drawing\";\nimport { externalLinkDesc } from \"@parts/external-link\";\nimport type { WorkbookOptions } from \"@parts/file\";\nimport { aggregate, collectUniqueValues } from \"@parts/pivot\";\nimport type { PivotSourceData, PivotTableOptions } from \"@parts/pivot\";\nimport { pivotCacheDefDesc, pivotCacheRecordsDesc } from \"@parts/pivot-cache\";\nimport { pivotTableDesc } from \"@parts/pivot-table\";\nimport { revisionHeadersDesc, revisionLogDesc, usersDesc } from \"@parts/revision-log\";\nimport { sharedStringsDesc } from \"@parts/shared-strings\";\nimport type { SharedStrings } from \"@parts/shared-strings\";\nimport { stylesDesc } from \"@parts/styles\";\nimport { tableDesc } from \"@parts/table\";\nimport { createThemeXml } from \"@parts/theme\";\nimport type { TablePartReference, SheetDefinition } from \"@parts/workbook\";\nimport { workbookDesc, buildTablePartsXml, buildExternalReferencesXml } from \"@parts/workbook\";\nimport { buildWorksheetXml, type WorksheetContext } from \"@parts/worksheet\";\nimport type { RowOptions, WorksheetOptions } from \"@parts/worksheet\";\n\nimport { XlsxWriteContext } from \"./context\";\n\nconst XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/**\n * Compile workbook options into a Zippable structure.\n */\nexport function compileWorkbook(\n options: WorkbookOptions,\n overrides: XmlifyedFile[] = [],\n mediaLevel: number = 0,\n): Zippable {\n const ctx = new XlsxWriteContext();\n const mapping: Record<string, { data: string; path: string }> = {};\n\n const worksheetConfigs = options.worksheets ?? [];\n const chartsheetConfigs = options.chartsheets ?? [];\n const hasCustomProperties = !!options.customProperties && options.customProperties.length > 0;\n\n // Core properties\n mapping[\"Properties\"] = {\n data: XML_DECL + buildCorePropertiesXmlString(options),\n path: \"docProps/core.xml\",\n };\n\n // App properties\n mapping[\"AppProperties\"] = {\n data: XML_DECL + (appPropertiesDesc.stringify(options.appProperties ?? {}, ctx) ?? \"\"),\n path: \"docProps/app.xml\",\n };\n\n // Custom properties (optional part; only emitted when present)\n if (hasCustomProperties) {\n mapping[\"CustomProperties\"] = {\n data:\n XML_DECL +\n (customPropertiesDesc.stringify({ properties: options.customProperties ?? [] }, ctx) ?? \"\"),\n path: \"docProps/custom.xml\",\n };\n }\n\n // File-level relationships (_rels/.rels)\n const fileRels = buildFileRelationships(hasCustomProperties);\n mapping[\"FileRelationships\"] = {\n data: XML_DECL + fileRels.serialize(),\n path: \"_rels/.rels\",\n };\n\n // Register base content types\n for (let i = 0; i < worksheetConfigs.length; i++) {\n ctx.contentTypes.addWorksheet(i + 1);\n }\n ctx.contentTypes.addStyles();\n ctx.contentTypes.addSharedStrings();\n ctx.contentTypes.addTheme();\n if (hasCustomProperties) ctx.contentTypes.addCustomProperties();\n\n // Register predefined DXFs before worksheets use styles\n for (const dxf of options.dxfs ?? []) {\n ctx.registerDxf(dxf);\n }\n\n // Re-apply parsed style sections so a declarative round-trip preserves\n // them (colors, table/cell styles, extensions) alongside DXFs.\n if (options.colors) ctx.styles.setColors(options.colors);\n if (options.tableStyles) ctx.styles.setTableStyles(options.tableStyles);\n if (options.cellStyles) ctx.styles.setCustomCellStyles(options.cellStyles);\n if (options.styleExtensions) ctx.styles.setExtensions(options.styleExtensions);\n\n // Build workbook relationships\n buildWorkbookRelationships(ctx.workbookRels, worksheetConfigs.length, chartsheetConfigs.length);\n\n // Build sheet definitions for workbook XML\n const sheets: SheetDefinition[] = [];\n let sheetId = 1;\n let rId = 1;\n for (const ws of worksheetConfigs) {\n sheets.push({\n name: ws.name ?? `Sheet${sheetId}`,\n sheetId: sheetId++,\n rId: `rId${rId++}`,\n });\n }\n for (const cs of chartsheetConfigs) {\n sheets.push({\n name: cs.name ?? `Chart${sheetId}`,\n sheetId: sheetId++,\n rId: `rId${rId++}`,\n });\n }\n\n // Worksheets — formatted BEFORE SharedStrings so strings are registered\n let globalMediaIdx = 0;\n let globalChartIdx = 0;\n let globalPivotIdx = 0;\n let globalPivotCacheIdx = 0;\n let globalTableIdx = 0;\n const pivotCacheDataMap = new Map<string, { cacheId: number; cacheIdx: number }>();\n const calcCells: CalcCell[] = [];\n const allTableParts: TablePartReference[] = [];\n\n const wsContext: WorksheetContext = { sharedStrings: ctx.sharedStrings, styles: ctx.styles };\n\n for (const [i, wsOpts] of worksheetConfigs.entries()) {\n const imgOpts = wsOpts.images ?? [];\n const chartOpts = wsOpts.charts ?? [];\n const hlOpts = wsOpts.hyperlinks ?? [];\n const sheetName = wsOpts.name ?? `Sheet${i + 1}`;\n\n // Worksheet uses buildWorksheetXml fast path (zero-allocation string concat)\n let sheetXml = buildWorksheetXml(wsOpts, wsContext);\n\n // Collect formula cells for calcChain\n const sheetIdx = i + 1;\n const wsRows = wsOpts.rows ?? [];\n for (const [ri, rowOpts] of wsRows.entries()) {\n const rowNumber = rowOpts.rowNumber ?? ri + 1;\n if (!rowOpts.cells) continue;\n for (const [ci, cell] of rowOpts.cells.entries()) {\n if (!cell.formula) continue;\n const ref = cell.reference ?? columnToLetter(ci + 1) + rowNumber;\n calcCells.push({\n reference: ref,\n sheetIndex: sheetIdx,\n array: cell.formula.type === \"array\",\n });\n }\n }\n\n const hasMedia = imgOpts.length > 0 || chartOpts.length > 0;\n const hasExternalHyperlinks = hlOpts.some((h) => h.target.type === \"external\");\n const commentOpts = wsOpts.comments ?? [];\n const hasComments = commentOpts.length > 0;\n const pivotOpts = wsOpts.pivotTables ?? [];\n const hasPivots = pivotOpts.length > 0;\n const tableOpts = wsOpts.tables ?? [];\n const hasTables = tableOpts.length > 0;\n const bgImg = wsOpts.backgroundImage;\n\n // Worksheet-level relationships\n let wsRels: Relationships | undefined;\n let nextRid = 0;\n\n if (hasMedia || hasExternalHyperlinks || hasComments || hasPivots || hasTables || bgImg) {\n wsRels = new Relationships();\n }\n\n if (hasExternalHyperlinks) {\n for (const hl of hlOpts) {\n if (hl.target.type !== \"external\") continue;\n const rid = ++nextRid;\n wsRels!.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n hl.target.url,\n \"External\",\n );\n }\n }\n\n if (hasMedia) {\n const drawingImages: ImageOptions[] = [];\n const drawingCharts: ChartAnchorOptions[] = [];\n const drawingRels = new Relationships();\n let rid = 1;\n\n // Process images\n for (const img of imgOpts) {\n const ext = img.type === \"jpg\" ? \"jpeg\" : \"png\";\n const rawBytes = toUint8Array(img.data, { encoding: \"base64\" });\n const entry = ctx.media.addMedia(rawBytes, ext, (fileName) => ({\n fileName,\n type: ext,\n data: rawBytes,\n width: 0,\n height: 0,\n }));\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${entry.fileName}`,\n );\n\n drawingImages.push({\n col: img.col,\n row: img.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalMediaIdx++;\n }\n\n // Process charts\n for (const chart of chartOpts) {\n const chartKey = `chart_${globalChartIdx}`;\n ctx.charts.addChart(chartKey, {\n key: chartKey,\n chartSpaceXml: chartSpaceDesc.stringify(chart, ctx) ?? \"\",\n });\n\n drawingRels.addRelationship(\n rid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${globalChartIdx + 1}.xml`,\n );\n\n drawingCharts.push({\n col: chart.col,\n row: chart.row,\n rId: `rId${rid}`,\n });\n rid++;\n globalChartIdx++;\n }\n\n // Generate drawing XML (via descriptor)\n const drawingXml = drawingDesc.stringify(\n { images: drawingImages, charts: drawingCharts },\n ctx,\n );\n const drawingIdx = i + 1;\n mapping[`Drawing${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${drawingXml}`,\n path: `xl/drawings/drawing${drawingIdx}.xml`,\n };\n\n // Drawing relationships\n mapping[`DrawingRels${i}`] = {\n data: XML_DECL + drawingRels.serialize(),\n path: `xl/drawings/_rels/drawing${drawingIdx}.xml.rels`,\n };\n\n // Insert drawing reference before the closing </worksheet> tag.\n const drawingRid = ++nextRid;\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<drawing r:id=\"rId${drawingRid}\"/>` + closingTag;\n\n // Add drawing relationship to worksheet rels\n wsRels!.addRelationship(\n drawingRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${drawingIdx}.xml`,\n );\n\n ctx.contentTypes.addDrawing(drawingIdx);\n }\n\n // Comments\n if (hasComments) {\n const commentsIdx = i + 1;\n\n // Comments XML (via descriptor)\n const commentsXml = commentsDesc.stringify({ comments: commentOpts }, ctx);\n mapping[`Comments${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${commentsXml}`,\n path: `xl/comments${commentsIdx}.xml`,\n };\n\n // VML drawing (via descriptor)\n const vmlXml = vmlNotesDesc.stringify({ comments: commentOpts }, ctx);\n mapping[`VmlDrawing${i}`] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${vmlXml}`,\n path: `xl/drawings/vmlDrawing${commentsIdx}.vml`,\n };\n\n // Worksheet rels: comments → comments XML, legacyDrawing → VML file\n const commentsRid = ++nextRid;\n wsRels!.addRelationship(\n commentsRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n `../comments${commentsIdx}.xml`,\n );\n\n const vmlRid = ++nextRid;\n wsRels!.addRelationship(\n vmlRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n `../drawings/vmlDrawing${commentsIdx}.vml`,\n );\n\n // Insert legacyDrawing reference before closing </worksheet>\n const closingTag = \"</worksheet>\";\n sheetXml =\n sheetXml.slice(0, -closingTag.length) + `<legacyDrawing r:id=\"rId${vmlRid}\"/>` + closingTag;\n\n // Register content types\n ctx.contentTypes.addComments(commentsIdx);\n ctx.contentTypes.addVmlDrawing();\n }\n\n // Background picture\n if (bgImg) {\n const ext = bgImg.type === \"jpg\" ? \"jpeg\" : bgImg.type;\n const rawBytes = toUint8Array(bgImg.data, { encoding: \"base64\" });\n const entry = ctx.media.addMedia(rawBytes, ext, (fileName) => ({\n fileName,\n type: ext,\n data: rawBytes,\n width: 0,\n height: 0,\n }));\n globalMediaIdx++;\n const bgRid = ++nextRid;\n wsRels!.addRelationship(\n bgRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n `../media/${entry.fileName}`,\n );\n sheetXml = sheetXml.replace(\"<!--BACKGROUND_PICTURE-->\", `<picture r:id=\"rId${bgRid}\"/>`);\n }\n\n // Pivot tables\n if (hasPivots) {\n for (const pt of pivotOpts) {\n globalPivotIdx++;\n const pivotIdx = globalPivotIdx;\n\n // Extract source data from source sheet\n const sourceSheet = pt.sourceSheet ?? sheetName;\n const sourceWsIdx = worksheetConfigs.findIndex(\n (ws) => (ws.name ?? `Sheet${worksheetConfigs.indexOf(ws) + 1}`) === sourceSheet,\n );\n if (sourceWsIdx === -1) continue;\n const sourceWs = worksheetConfigs[sourceWsIdx];\n if (!sourceWs) continue;\n\n const sourceRows = sourceWs.rows ?? [];\n const sourceData = extractPivotSourceData(sourceRows, pt.source);\n\n // Deduplicate pivot caches by source reference\n const cacheKey = `${sourceSheet}:${pt.source}`;\n let cacheId: number;\n let cacheIdx: number;\n const existing = pivotCacheDataMap.get(cacheKey);\n if (existing) {\n cacheId = existing.cacheId;\n cacheIdx = existing.cacheIdx;\n } else {\n globalPivotCacheIdx++;\n cacheIdx = globalPivotCacheIdx;\n cacheId = cacheIdx;\n pivotCacheDataMap.set(cacheKey, { cacheId, cacheIdx });\n\n // Generate pivotCacheDefinition\n const cacheDefRels = new Relationships();\n cacheDefRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords\",\n \"pivotCacheRecords1.xml\",\n );\n\n const cacheDefXml =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n pivotCacheDefDesc.stringify(\n {\n sourceRef: pt.source.split(\":\")[0] ? pt.source : \"A1\",\n sourceSheet,\n sourceData,\n recordsRid: \"rId1\",\n },\n ctx,\n );\n\n mapping[`PivotCacheDef${cacheIdx}`] = {\n data: cacheDefXml,\n path: `xl/pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n };\n mapping[`PivotCacheDefRels${cacheIdx}`] = {\n data: XML_DECL + cacheDefRels.serialize(),\n path: `xl/pivotCache/_rels/pivotCacheDefinition${cacheIdx}.xml.rels`,\n };\n\n // Generate pivotCacheRecords\n const cacheRecordsXml =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n pivotCacheRecordsDesc.stringify({ sourceData }, ctx);\n mapping[`PivotCacheRecords${cacheIdx}`] = {\n data: cacheRecordsXml,\n path: `xl/pivotCache/pivotCacheRecords${cacheIdx}.xml`,\n };\n\n // Content types\n ctx.contentTypes.addPivotCacheDefinition(cacheIdx);\n ctx.contentTypes.addPivotCacheRecords(cacheIdx);\n\n // Register in workbook\n const wbPivotRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n wbPivotRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition\",\n `pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n );\n ctx.pivotCacheRefs.push({ cacheId, rId: `rId${wbPivotRid}` });\n }\n\n // Generate pivotTable\n const pivotTableXml =\n XML_DECL + pivotTableDesc.stringify({ options: pt, sourceData, cacheId }, ctx);\n mapping[`PivotTable${pivotIdx}`] = {\n data: pivotTableXml,\n path: `xl/pivotTables/pivotTable${pivotIdx}.xml`,\n };\n\n // pivotTable rels → cacheDefinition\n const ptRels = new Relationships();\n ptRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition\",\n `../pivotCache/pivotCacheDefinition${cacheIdx}.xml`,\n );\n mapping[`PivotTableRels${pivotIdx}`] = {\n data: XML_DECL + ptRels.serialize(),\n path: `xl/pivotTables/_rels/pivotTable${pivotIdx}.xml.rels`,\n };\n\n // Worksheet rels → pivotTable\n const ptRid = ++nextRid;\n wsRels!.addRelationship(\n ptRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable\",\n `../pivotTables/pivotTable${pivotIdx}.xml`,\n );\n\n ctx.contentTypes.addPivotTable(pivotIdx);\n }\n }\n\n // Tables (list objects)\n const wsTableParts: TablePartReference[] = [];\n if (hasTables) {\n for (const tbl of tableOpts) {\n globalTableIdx++;\n const tableIdx = globalTableIdx;\n\n // Generate table XML\n const tableXmlStr =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n tableDesc.stringify({ ...tbl, id: tbl.id ?? tableIdx }, ctx);\n mapping[`Table${tableIdx}`] = {\n data: tableXmlStr,\n path: `xl/tables/table${tableIdx}.xml`,\n };\n\n // Worksheet rels → table\n const tblRid = ++nextRid;\n wsRels!.addRelationship(\n tblRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\",\n `../tables/table${tableIdx}.xml`,\n );\n\n wsTableParts.push({ rId: `rId${tblRid}` });\n allTableParts.push({ rId: `rId${tblRid}` });\n\n ctx.contentTypes.addTable(tableIdx);\n }\n }\n\n // Pre-render pivot table data into sheetData\n if (hasPivots) {\n const rendered = renderPivotSheetData(\n pivotOpts,\n worksheetConfigs,\n ctx.sharedStrings,\n sheetName,\n );\n if (rendered.sheetData.length > 0) {\n // Replace empty <sheetData/> or <sheetData></sheetData> with rendered data\n sheetXml = sheetXml.replace(/<sheetData\\/>|<sheetData><\\/sheetData>/, rendered.sheetData);\n // Inject <dimension> before <sheetViews> (XSD sequence order: dimension before sheetViews)\n if (!sheetXml.includes(\"<dimension\")) {\n sheetXml = sheetXml.replace(\n \"<sheetViews\",\n `<dimension ref=\"${rendered.dimensionRef}\"/><sheetViews`,\n );\n }\n }\n }\n\n // Insert tableParts before closing </worksheet> tag\n if (wsTableParts.length > 0) {\n const tablePartsXml = buildTablePartsXml(wsTableParts);\n const closingTag = \"</worksheet>\";\n sheetXml = sheetXml.slice(0, -closingTag.length) + tablePartsXml + closingTag;\n }\n\n // Write worksheet rels if needed\n if (wsRels) {\n mapping[`WorksheetRels${i}`] = {\n data: XML_DECL + wsRels.serialize(),\n path: `xl/worksheets/_rels/sheet${i + 1}.xml.rels`,\n };\n }\n\n mapping[`Worksheet${i}`] = {\n data: sheetXml,\n path: `xl/worksheets/sheet${i + 1}.xml`,\n };\n }\n\n // Chartsheets — chart-only sheets\n for (const [i, csOpts] of chartsheetConfigs.entries()) {\n // Register chart in the charts collection\n const chartDef = csOpts.chart;\n const csChartGlobalIdx = ctx.charts.array.length;\n const csChartKey = `cs_chart_${csChartGlobalIdx}`;\n ctx.charts.addChart(csChartKey, {\n key: csChartKey,\n chartSpaceXml:\n chartSpaceDesc.stringify(\n {\n type: chartDef.type as\n | \"column\"\n | \"bar\"\n | \"line\"\n | \"pie\"\n | \"doughnut\"\n | \"area\"\n | \"scatter\"\n | \"bubble\",\n title: chartDef.title,\n categories: chartDef.categories,\n series: chartDef.series,\n },\n ctx,\n ) ?? \"\",\n });\n\n // Chartsheet relationships: drawing (required)\n const csRels = new Relationships();\n const csDrawingIdx = i + 1;\n csRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n `../drawings/drawing${csDrawingIdx}.xml`,\n );\n\n // Drawing rels: chart reference\n const csDrawingRels = new Relationships();\n csDrawingRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n `../charts/chart${csChartGlobalIdx + 1}.xml`,\n );\n\n // Minimal drawing XML with chart anchor\n const csDrawingXml =\n `<xdr:wsDr xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">` +\n `<xdr:absoluteAnchor>` +\n `<xdr:pos x=\"0\" y=\"0\"/>` +\n `<xdr:ext cx=\"9308969\" cy=\"6096000\"/>` +\n `<xdr:graphicFrame>` +\n `<xdr:nvGraphicFramePr><xdr:cNvPr id=\"1\" name=\"Chart ${i + 1}\"/><xdr:cNvGraphicFramePr><a:graphicFrameLocks noGrp=\"1\"/></xdr:cNvGraphicFramePr></xdr:nvGraphicFramePr>` +\n `<xdr:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"9308969\" cy=\"6096000\"/></xdr:xfrm>` +\n `<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"><c:chart xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\" r:id=\"rId1\"/></a:graphicData></a:graphic>` +\n `</xdr:graphicFrame>` +\n `<xdr:clientData/>` +\n `</xdr:absoluteAnchor>` +\n `</xdr:wsDr>`;\n\n mapping[`ChartsheetDrawing${i}`] = {\n data: csDrawingXml,\n path: `xl/drawings/drawing${csDrawingIdx}.xml`,\n };\n mapping[`ChartsheetDrawingRels${i}`] = {\n data: XML_DECL + csDrawingRels.serialize(),\n path: `xl/drawings/_rels/drawing${csDrawingIdx}.xml.rels`,\n };\n ctx.contentTypes.addDrawing(csDrawingIdx);\n\n mapping[`ChartsheetRels${i}`] = {\n data: XML_DECL + csRels.serialize(),\n path: `xl/chartsheets/_rels/sheet${i + 1}.xml.rels`,\n };\n mapping[`Chartsheet${i}`] = {\n data: XML_DECL + chartsheetDesc.stringify({ ...csOpts, drawingRId: \"rId1\" }, ctx),\n path: `xl/chartsheets/sheet${i + 1}.xml`,\n };\n ctx.contentTypes.addChartsheet(i + 1);\n }\n\n // Workbook XML (via descriptor)\n let wbXml =\n workbookDesc.stringify(\n {\n sheets,\n pivotCaches: ctx.pivotCacheRefs,\n protection: options.workbookProtection,\n customViews: options.customWorkbookViews,\n fileRecoveryPr: options.fileRecoveryPr,\n functionGroups: options.functionGroups,\n webPublishing: options.webPublishing,\n fileSharing: options.fileSharing,\n volTypes: options.volTypes,\n webPublishObjects: options.webPublishObjects,\n },\n ctx,\n ) ?? \"\";\n\n // External links — generate XML files and inject externalReferences into workbook\n const extLinks = options.externalLinks ?? [];\n if (extLinks.length > 0) {\n const extRefs: { rId: string }[] = [];\n for (let ei = 0; ei < extLinks.length; ei++) {\n const elIdx = ei + 1;\n const elRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n elRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n `externalLinks/externalLink${elIdx}.xml`,\n );\n\n // Create the rels file for this external link\n const elOpts = extLinks[ei];\n if (!elOpts) continue;\n let bookRId: string | undefined;\n if (elOpts.externalBook?.target) {\n const elRels = new Relationships();\n elRels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n elOpts.externalBook.target,\n TargetModeType.EXTERNAL,\n );\n bookRId = \"rId1\";\n mapping[`ExternalLinkRels${elIdx}`] = {\n data: XML_DECL + elRels.serialize(),\n path: `xl/externalLinks/_rels/externalLink${elIdx}.xml.rels`,\n };\n }\n\n // Generate the external link XML\n mapping[`ExternalLink${elIdx}`] = {\n data: XML_DECL + externalLinkDesc.stringify({ ...elOpts, bookRId }, ctx),\n path: `xl/externalLinks/externalLink${elIdx}.xml`,\n };\n\n extRefs.push({ rId: `rId${elRid}` });\n ctx.contentTypes.addExternalLink(elIdx);\n }\n\n // Inject externalReferences into workbook XML\n const extRefsXml = buildExternalReferencesXml(extRefs);\n wbXml = wbXml.replace(\"<!--EXTERNAL_REFS-->\", extRefsXml);\n } else {\n wbXml = wbXml.replace(\"<!--EXTERNAL_REFS-->\", \"\");\n }\n\n mapping[\"Workbook\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${wbXml}`,\n path: \"xl/workbook.xml\",\n };\n\n // Shared Strings — AFTER worksheets so all strings are collected\n if (ctx.sharedStrings.count > 0) {\n const ssXml = sharedStringsDesc.stringify(ctx.sharedStrings.toDescriptorOptions(), ctx);\n mapping[\"SharedStrings\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${ssXml}`,\n path: \"xl/sharedStrings.xml\",\n };\n }\n\n // Styles (via descriptor — delegates to Styles.toXml internally)\n const stylesXml = stylesDesc.stringify({ styles: ctx.styles }, ctx);\n mapping[\"Styles\"] = {\n data: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${stylesXml}`,\n path: \"xl/styles.xml\",\n };\n\n // Theme\n mapping[\"Theme\"] = {\n data: XML_DECL + createThemeXml(),\n path: \"xl/theme/theme1.xml\",\n };\n\n // Charts — AFTER worksheets so charts are registered\n for (const [i, chartData] of ctx.charts.array.entries()) {\n mapping[`Chart${i}`] = {\n data: XML_DECL + chartData.chartSpaceXml,\n path: `xl/charts/chart${i + 1}.xml`,\n };\n ctx.contentTypes.addChart(i + 1);\n }\n\n // Calculation chain — auto-generated from formula cells\n if (calcCells.length > 0) {\n mapping[\"CalcChain\"] = {\n data: calcChainDesc.stringify({ cells: calcCells }, ctx) ?? \"\",\n path: \"xl/calcChain.xml\",\n };\n ctx.contentTypes.addCalcChain();\n const calcChainRid = ctx.workbookRels.relationshipCount + 1;\n ctx.workbookRels.addRelationship(\n calcChainRid,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain\",\n \"calcChain.xml\",\n );\n }\n\n // Shared-workbook revisions (xl/revisionHeaders.xml + xl/revisions/revisionN.xml + xl/users.xml).\n // CT_Workbook has no revision element — parts are discovered via workbook.xml.rels + [Content_Types].\n if (options.revisionLog) {\n const rl = options.revisionLog;\n const REV_HEADERS_REL =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/revisionHeaders\";\n const REV_LOG_REL =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/revisionLog\";\n const USERS_REL = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/users\";\n\n // xl/revisionHeaders.xml — target of an implicit relationship from the workbook.\n mapping[\"RevisionHeaders\"] = {\n data: XML_DECL + (revisionHeadersDesc.stringify(rl.headers, ctx) ?? \"\"),\n path: \"xl/revisionHeaders.xml\",\n };\n ctx.contentTypes.addRevisionHeaders();\n ctx.workbookRels.addRelationship(\n ctx.workbookRels.relationshipCount + 1,\n REV_HEADERS_REL,\n \"revisionHeaders.xml\",\n );\n\n // One revision log per header entry, plus revisionHeaders.xml.rels pointing to each.\n const revHeadersRels = new Relationships();\n for (const [i, log] of rl.logs.entries()) {\n mapping[`RevisionLog${i}`] = {\n data: XML_DECL + (revisionLogDesc.stringify(log, ctx) ?? \"\"),\n path: `xl/revisions/revision${i + 1}.xml`,\n };\n ctx.contentTypes.addRevisionLog(i + 1);\n revHeadersRels.addRelationship(i + 1, REV_LOG_REL, `revisions/revision${i + 1}.xml`);\n }\n mapping[\"RevisionHeadersRels\"] = {\n data: XML_DECL + revHeadersRels.serialize(),\n path: \"xl/_rels/revisionHeaders.xml.rels\",\n };\n\n // xl/users.xml (optional)\n if (rl.users) {\n const usersXml = usersDesc.stringify(rl.users, ctx);\n if (usersXml) {\n mapping[\"Users\"] = { data: XML_DECL + usersXml, path: \"xl/users.xml\" };\n ctx.contentTypes.addUsers();\n ctx.workbookRels.addRelationship(\n ctx.workbookRels.relationshipCount + 1,\n USERS_REL,\n \"users.xml\",\n );\n }\n }\n }\n\n // Workbook relationships — serialized after calcChain/revision register their\n // targets, so every workbook-level relationship lands in workbook.xml.rels.\n mapping[\"WorkbookRelationships\"] = {\n data: XML_DECL + ctx.workbookRels.serialize(),\n path: \"xl/_rels/workbook.xml.rels\",\n };\n\n // Register image content types\n const imageExts = new Set<string>();\n for (const img of ctx.media.array) {\n const ext = img.fileName.endsWith(\".png\") ? \"png\" : \"jpeg\";\n if (!imageExts.has(ext)) {\n imageExts.add(ext);\n ctx.contentTypes.addImageType(ext as \"png\" | \"jpeg\");\n }\n }\n\n // Content Types — must be last\n mapping[\"ContentTypes\"] = {\n data: XML_DECL + ctx.contentTypes.serialize(),\n path: \"[Content_Types].xml\",\n };\n\n // Convert mapping to Zippable\n const mediaFiles: Array<{ data: Uint8Array; path: string }> = [];\n for (const img of ctx.media.array) {\n mediaFiles.push({ data: img.data, path: `xl/media/${img.fileName}` });\n }\n\n return compileMapping(mapping, overrides, mediaFiles, mediaLevel);\n}\n\n// ── Pure helper functions ──\n\nfunction buildFileRelationships(hasCustomProperties: boolean): Relationships {\n const rels = new Relationships();\n rels.addRelationship(\n 1,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n \"xl/workbook.xml\",\n );\n rels.addRelationship(\n 2,\n \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n \"docProps/core.xml\",\n );\n rels.addRelationship(\n 3,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\",\n \"docProps/app.xml\",\n );\n if (hasCustomProperties) {\n rels.addRelationship(\n 4,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties\",\n \"docProps/custom.xml\",\n );\n }\n return rels;\n}\n\nfunction buildWorkbookRelationships(rels: Relationships, wsCount: number, csCount: number): void {\n let rid = 1;\n for (let i = 0; i < wsCount; i++) {\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n `worksheets/sheet${i + 1}.xml`,\n );\n }\n for (let i = 0; i < csCount; i++) {\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n `chartsheets/sheet${i + 1}.xml`,\n );\n }\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n \"styles.xml\",\n );\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n \"theme/theme1.xml\",\n );\n rels.addRelationship(\n rid++,\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n \"sharedStrings.xml\",\n );\n}\n\nfunction extractPivotSourceData(rows: RowOptions[], sourceRef: string): PivotSourceData {\n const parts = sourceRef.split(\":\");\n const startMatch = parts[0]?.match(/^([A-Z]+)(\\d+)$/);\n const endMatch = parts[1]?.match(/^([A-Z]+)(\\d+)$/);\n if (!startMatch) {\n return { fieldNames: [], records: [] };\n }\n\n const startRow = parseInt(startMatch[2] ?? \"1\", 10) - 1;\n const endRow = endMatch ? parseInt(endMatch[2] ?? \"1\", 10) - 1 : startRow;\n const startCol = colLetterToIndex(startMatch[1] ?? \"A\");\n const endCol = endMatch ? colLetterToIndex(endMatch[1] ?? \"A\") : startCol;\n const colCount = endCol - startCol + 1;\n\n // First row is headers\n const headerRow = rows[startRow];\n const fieldNames: string[] = [];\n if (headerRow?.cells) {\n for (let c = startCol; c <= endCol && c < headerRow.cells.length; c++) {\n const hv = headerRow.cells[c]?.value;\n fieldNames.push(\n typeof hv === \"string\"\n ? hv\n : typeof hv === \"number\" || typeof hv === \"boolean\"\n ? String(hv)\n : `Col${c}`,\n );\n }\n }\n\n // Remaining rows are data\n const records: (string | number)[][] = [];\n for (let r = startRow + 1; r <= endRow; r++) {\n const row = rows[r];\n if (!row?.cells) continue;\n const record: (string | number)[] = [];\n for (let c = startCol; c <= endCol; c++) {\n const val = row.cells[c]?.value;\n if (typeof val === \"number\") {\n record.push(val);\n } else if (val instanceof Date) {\n record.push(val.getTime());\n } else {\n record.push(typeof val === \"string\" ? val : typeof val === \"boolean\" ? String(val) : \"\");\n }\n }\n if (record.length === colCount) {\n records.push(record);\n }\n }\n\n return { fieldNames, records };\n}\n\nfunction colLetterToIndex(letters: string): number {\n let col = 0;\n for (let i = 0; i < letters.length; i++) {\n col = col * 26 + (letters.charCodeAt(i) - 64);\n }\n return col - 1;\n}\n\nfunction renderPivotSheetData(\n pivotOpts: PivotTableOptions[],\n worksheetConfigs: WorksheetOptions[],\n sharedStrings: SharedStrings,\n currentSheetName: string,\n): { sheetData: string; dimensionRef: string } {\n const rowCells = new Map<number, string[]>();\n let maxRow = 0;\n let maxCol = 0;\n let minRow = Infinity;\n let minCol = Infinity;\n\n for (const pt of pivotOpts) {\n const location = pt.location ?? \"A3\";\n const locMatch = location.match(/^([A-Z]+)(\\d+)$/);\n if (!locMatch) continue;\n\n const startCol = colLetterToIndex(locMatch[1] ?? \"A\");\n const startRow = parseInt(locMatch[2] ?? \"1\", 10);\n const rowFieldNames = pt.rows;\n const dataFields = pt.data;\n\n const sourceSheetName = pt.sourceSheet ?? currentSheetName;\n const sourceWsIdx = worksheetConfigs.findIndex(\n (ws) => (ws.name ?? `Sheet${worksheetConfigs.indexOf(ws) + 1}`) === sourceSheetName,\n );\n if (sourceWsIdx === -1) continue;\n\n const sourceRows = worksheetConfigs[sourceWsIdx]?.rows ?? [];\n const sourceData = extractPivotSourceData(sourceRows, pt.source);\n if (sourceData.fieldNames.length === 0) continue;\n\n const fields = sourceData.fieldNames;\n const rowFieldIndices = rowFieldNames.map((n) => fields.indexOf(n));\n const dataFieldIndices = dataFields.map((df) => fields.indexOf(df.field));\n\n if (rowFieldIndices.some((idx) => idx === -1)) continue;\n if (dataFieldIndices.some((idx) => idx === -1)) continue;\n\n // Group records by row field values\n const groupMap = new Map<string, { keys: (string | number)[]; values: number[][] }>();\n for (const record of sourceData.records) {\n const groupKey = rowFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n let group = groupMap.get(groupKey);\n if (!group) {\n group = {\n keys: rowFieldIndices.map((fi) => {\n const v = record[fi];\n return typeof v === \"string\" || typeof v === \"number\" ? v : String(v ?? \"\");\n }),\n values: dataFieldIndices.map(() => []),\n };\n groupMap.set(groupKey, group);\n }\n for (const [di, fi] of dataFieldIndices.entries()) {\n const val = record[fi];\n if (typeof val === \"number\") {\n group.values[di]?.push(val);\n }\n }\n }\n\n // Column field info for cross-tab layout\n const colFieldNames = pt.columns ?? [];\n const colFieldIndices = colFieldNames.map((n) => fields.indexOf(n));\n\n const addCells = (rowIdx: number, cells: string[]) => {\n let arr = rowCells.get(rowIdx);\n if (!arr) {\n arr = [];\n rowCells.set(rowIdx, arr);\n }\n for (const c of cells) arr.push(c);\n minRow = Math.min(minRow, rowIdx);\n maxRow = Math.max(maxRow, rowIdx);\n };\n\n if (colFieldIndices.length > 0 && !colFieldIndices.some((idx) => idx === -1)) {\n // --- Cross-tab layout (with column fields) ---\n // Unique column values for the first column field\n const colUniqueVals = collectUniqueValues(sourceData.records, colFieldIndices[0] ?? 0).map(\n (v) => (typeof v === \"string\" || typeof v === \"number\" ? String(v) : String(v ?? \"\")),\n );\n\n // Build cross-tab map: rowKey → colKey → aggregated values per data field\n const crossTabMap = new Map<\n string,\n { rowKeys: (string | number)[]; colData: Map<string, number[][]>; rowTotals: number[][] }\n >();\n for (const record of sourceData.records) {\n const rowKey = rowFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n const colKey = colFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n let entry = crossTabMap.get(rowKey);\n if (!entry) {\n entry = {\n rowKeys: rowFieldIndices.map((fi) => {\n const v = record[fi];\n return typeof v === \"string\" || typeof v === \"number\" ? v : String(v ?? \"\");\n }),\n colData: new Map(),\n rowTotals: dataFieldIndices.map(() => []),\n };\n crossTabMap.set(rowKey, entry);\n }\n let colValues = entry.colData.get(colKey);\n if (!colValues) {\n colValues = dataFieldIndices.map(() => []);\n entry.colData.set(colKey, colValues);\n }\n for (const [di, fi] of dataFieldIndices.entries()) {\n const val = record[fi];\n if (typeof val === \"number\") {\n colValues[di]?.push(val);\n entry.rowTotals[di]?.push(val);\n }\n }\n }\n\n // Column count: row fields + column unique values + 1 (grand total column)\n const numColVals = colUniqueVals.length;\n const totalCols = rowFieldNames.length + numColVals + 1;\n const endCol = startCol + totalCols - 1;\n minCol = Math.min(minCol, startCol);\n maxCol = Math.max(maxCol, endCol);\n\n // Header row: [rowFieldName(s), ...colUniqueVals, dataFieldName or \"Grand Total\"]\n const headerCells: string[] = [];\n for (const rfName of rowFieldNames) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(rfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (const cv of colUniqueVals) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(cv);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n // Last header cell: data field name (e.g., \"Total Revenue\")\n {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n // Pivot layout requires at least one data field, so index 0 always exists.\n const df0 = dataFields[0]!;\n const subtotal = df0.summarize ?? \"sum\";\n const dfName = df0.name ?? `${subtotal === \"sum\" ? \"Sum\" : subtotal} of ${df0.field}`;\n const strIdx = sharedStrings.register(dfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n addCells(startRow, headerCells);\n\n // Data rows\n let currentRow = startRow + 1;\n for (const [, entry] of crossTabMap) {\n const cells: string[] = [];\n // Row label\n for (const [ri, rowKey] of entry.rowKeys.entries()) {\n const cellRef = colIndexToLetter(startCol + ri) + currentRow;\n const strIdx = sharedStrings.register(String(rowKey));\n cells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n // Column values for each unique column value\n for (const [ci, colKey] of colUniqueVals.entries()) {\n const colValues = entry.colData.get(colKey);\n const colOffset = rowFieldNames.length + ci;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[0]!.summarize ?? \"sum\";\n const result = colValues ? aggregate(colValues[0] ?? [], subtotal) : 0;\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n // Row total (last column)\n {\n const colOffset = rowFieldNames.length + numColVals;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = dataFields[0]!.summarize ?? \"sum\";\n const result = aggregate(entry.rowTotals[0] ?? [], subtotal);\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, cells);\n currentRow++;\n }\n\n // Grand total row\n const gtCells: string[] = [];\n const gtStrIdx = sharedStrings.register(\"Grand Total\");\n gtCells.push(\n `<c r=\"${colIndexToLetter(startCol)}${currentRow}\" t=\"s\"><v>${gtStrIdx}</v></c>`,\n );\n for (const [ci, colKey] of colUniqueVals.entries()) {\n const subtotal = dataFields[0]!.summarize ?? \"sum\";\n const colAllValues: number[] = [];\n const dfIdx0 = dataFieldIndices[0];\n for (const record of sourceData.records) {\n const recColKey = colFieldIndices.map((fi) => String(record[fi])).join(\"|\");\n if (recColKey === colKey && dfIdx0 !== undefined) {\n const val = record[dfIdx0];\n if (typeof val === \"number\") colAllValues.push(val);\n }\n }\n const colOffset = rowFieldNames.length + ci;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const result = aggregate(colAllValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n // Grand total (bottom-right)\n {\n const subtotal = dataFields[0]!.summarize ?? \"sum\";\n const dfIdx0 = dataFieldIndices[0];\n const allValues = sourceData.records\n .map((r) => (dfIdx0 !== undefined ? r[dfIdx0] : undefined))\n .filter((v): v is number => typeof v === \"number\");\n const colOffset = rowFieldNames.length + numColVals;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const result = aggregate(allValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, gtCells);\n } else {\n // --- Simple layout (no column fields) ---\n const endCol = startCol + rowFieldNames.length + dataFields.length - 1;\n minCol = Math.min(minCol, startCol);\n maxCol = Math.max(maxCol, endCol);\n\n // Header row\n const headerCells: string[] = [];\n for (const rfName of rowFieldNames) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const strIdx = sharedStrings.register(rfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (const df of dataFields) {\n const cellRef = colIndexToLetter(startCol + headerCells.length) + startRow;\n const subtotal = df.summarize ?? \"sum\";\n const dfName = df.name ?? `${subtotal === \"sum\" ? \"Sum\" : subtotal} of ${df.field}`;\n const strIdx = sharedStrings.register(dfName);\n headerCells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n addCells(startRow, headerCells);\n\n // Data rows\n let currentRow = startRow + 1;\n for (const [, group] of groupMap) {\n const cells: string[] = [];\n for (const [ri, key] of group.keys.entries()) {\n const cellRef = colIndexToLetter(startCol + ri) + currentRow;\n const strIdx = sharedStrings.register(String(key));\n cells.push(`<c r=\"${cellRef}\" t=\"s\"><v>${strIdx}</v></c>`);\n }\n for (const [di, df] of dataFields.entries()) {\n const colOffset = rowFieldNames.length + di;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = df.summarize ?? \"sum\";\n const result = aggregate(group.values[di] ?? [], subtotal);\n cells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, cells);\n currentRow++;\n }\n\n // Grand total row\n const gtCells: string[] = [];\n const gtStrIdx = sharedStrings.register(\"Grand Total\");\n gtCells.push(\n `<c r=\"${colIndexToLetter(startCol)}${currentRow}\" t=\"s\"><v>${gtStrIdx}</v></c>`,\n );\n for (const [di, df] of dataFields.entries()) {\n const colOffset = rowFieldNames.length + di;\n const cellRef = colIndexToLetter(startCol + colOffset) + currentRow;\n const subtotal = df.summarize ?? \"sum\";\n const dfIdx = dataFieldIndices[di];\n const allValues = sourceData.records\n .map((r) => (dfIdx !== undefined ? r[dfIdx] : undefined))\n .filter((v): v is number => typeof v === \"number\");\n const result = aggregate(allValues, subtotal);\n gtCells.push(`<c r=\"${cellRef}\"><v>${result}</v></c>`);\n }\n addCells(currentRow, gtCells);\n }\n }\n\n if (rowCells.size === 0) return { sheetData: \"\", dimensionRef: \"\" };\n\n // Build sheetData\n const parts: string[] = [\"<sheetData>\"];\n const sortedRows = [...rowCells.entries()].sort((a, b) => a[0] - b[0]);\n for (const [rowIdx, cells] of sortedRows) {\n parts.push(`<row r=\"${rowIdx}\" x14ac:dyDescent=\"0.25\">`);\n for (const c of cells) parts.push(c);\n parts.push(\"</row>\");\n }\n parts.push(\"</sheetData>\");\n\n const dimStartCol = colIndexToLetter(minCol === Infinity ? 0 : minCol);\n const dimStartRow = minRow === Infinity ? 1 : minRow;\n const dimensionRef = `${dimStartCol}${dimStartRow}:${colIndexToLetter(maxCol)}${maxRow}`;\n return { sheetData: parts.join(\"\"), dimensionRef };\n}\n\nfunction colIndexToLetter(col: number): string {\n let result = \"\";\n let n = col + 1;\n while (n > 0) {\n n--;\n result = String.fromCharCode(65 + (n % 26)) + result;\n n = Math.floor(n / 26);\n }\n return result;\n}\n\nfunction columnToLetter(col: number): string {\n let result = \"\";\n let n = col;\n while (n > 0) {\n const remainder = (n - 1) % 26;\n result = String.fromCharCode(65 + remainder) + result;\n n = Math.floor((n - 1) / 26);\n }\n return result;\n}\n","/**\n * Pure function API for generating XLSX files.\n *\n * @module\n */\n\nimport { createPacker, OoxmlMimeType } from \"@office-open/core\";\nimport type { OutputByType, OutputType, PackerOptions } from \"@office-open/core\";\nimport type { WorkbookOptions } from \"@parts/file\";\n\nimport { compileWorkbook } from \"./compiler\";\n\n/** @internal Packer instance for XLSX generation. */\nconst Packer = createPacker<WorkbookOptions>({\n compile: (options, overrides, mediaLevel) => compileWorkbook(options, overrides, mediaLevel),\n mimeType: OoxmlMimeType.XLSX,\n});\n\n/**\n * Generate an XLSX file from pure JSON options.\n *\n * The output format is controlled by `packerOptions.type` (default: `\"nodebuffer\"` → Buffer).\n * For synchronous generation, use {@link generateWorkbookSync}. For streaming, use {@link generateWorkbookStream}.\n *\n * @param options - Workbook options (worksheets, styles, etc.)\n * @param packerOptions - Optional packer configuration (type, compression, overrides, etc.)\n *\n * @example\n * ```typescript\n * import { generateWorkbook } from \"@office-open/xlsx\";\n *\n * const buffer = await generateWorkbook({ worksheets: [...] });\n * const bytes = await generateWorkbook({ worksheets: [...] }, { type: \"uint8array\" });\n * const blob = await generateWorkbook({ worksheets: [...] }, { type: \"blob\" });\n * ```\n */\nexport function generateWorkbook<T extends OutputType = \"nodebuffer\">(\n options: WorkbookOptions,\n packerOptions?: PackerOptions<T>,\n): Promise<OutputByType[T]> {\n return Packer.pack(options, packerOptions) as Promise<OutputByType[T]>;\n}\n\n/**\n * Synchronously generate an XLSX file from pure JSON options.\n */\nexport function generateWorkbookSync<T extends OutputType = \"nodebuffer\">(\n options: WorkbookOptions,\n packerOptions?: PackerOptions<T>,\n): OutputByType[T] {\n return Packer.packSync(options, packerOptions) as OutputByType[T];\n}\n\n/**\n * Generate an XLSX file as a `ReadableStream<Uint8Array>`.\n */\nexport function generateWorkbookStream(\n options: WorkbookOptions,\n packerOptions?: PackerOptions,\n): ReadableStream<Uint8Array> {\n return Packer.toStream(options, packerOptions);\n}\n"],"mappings":"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"}
package/dist/generate.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { n as generateWorkbookStream, r as generateWorkbookSync, t as generateWorkbook } from "./generate-Dsk7XzIC.mjs";
1
+ import { n as generateWorkbookStream, r as generateWorkbookSync, t as generateWorkbook } from "./generate-2S1-U1mL.mjs";
2
2
  export { generateWorkbook, generateWorkbookStream, generateWorkbookSync };
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
- import { a as SharedStrings, i as worksheetDesc, n as vmlNotesDesc, o as sharedStringsDesc, r as stringifyWorksheet, t as commentsDesc } from "./comments-BTMAAMY4.mjs";
2
- import { C as Styles, S as calcChainDesc, b as drawingDesc, c as buildTablePartsXml, d as TotalsRowFunction, f as tableDesc, g as PivotFilterType, h as pivotTableDesc, l as workbookDesc, m as pivotCacheRecordsDesc, n as XlsxWriteContext, o as Media, p as pivotCacheDefDesc, s as buildExternalReferencesXml, t as XlsxReadContext, u as TableType, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-D_9UIEwJ.mjs";
1
+ import { a as SharedStrings, i as worksheetDesc, n as vmlNotesDesc, o as sharedStringsDesc, r as stringifyWorksheet, t as commentsDesc } from "./comments-Bvfeh76o.mjs";
2
+ import { C as Styles, S as calcChainDesc, b as drawingDesc, c as buildTablePartsXml, d as TotalsRowFunction, f as tableDesc, g as PivotFilterType, h as pivotTableDesc, l as workbookDesc, m as pivotCacheRecordsDesc, n as XlsxWriteContext, o as Media, p as pivotCacheDefDesc, s as buildExternalReferencesXml, t as XlsxReadContext, u as TableType, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-CSCfAIfV.mjs";
3
3
  import { parseWorkbook, parseXlsx } from "./parse.mjs";
4
4
  import { patchWorkbook } from "./patch.mjs";
5
- import { i as compileWorkbook, n as generateWorkbookStream, r as generateWorkbookSync, t as generateWorkbook } from "./generate-Dsk7XzIC.mjs";
5
+ import { i as compileWorkbook, n as generateWorkbookStream, r as generateWorkbookSync, t as generateWorkbook } from "./generate-2S1-U1mL.mjs";
6
6
  import { createThemeXml } from "@office-open/core/theme";
7
7
  //#region src/util/index.ts
8
8
  /**
package/dist/parse.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { i as worksheetDesc, o as sharedStringsDesc, t as commentsDesc } from "./comments-BTMAAMY4.mjs";
2
- import { S as calcChainDesc, a as usersDesc, b as drawingDesc, f as tableDesc, h as pivotTableDesc, i as revisionLogDesc, l as workbookDesc, m as pivotCacheRecordsDesc, p as pivotCacheDefDesc, r as revisionHeadersDesc, t as XlsxReadContext, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-D_9UIEwJ.mjs";
1
+ import { i as worksheetDesc, o as sharedStringsDesc, t as commentsDesc } from "./comments-Bvfeh76o.mjs";
2
+ import { S as calcChainDesc, a as usersDesc, b as drawingDesc, f as tableDesc, h as pivotTableDesc, i as revisionLogDesc, l as workbookDesc, m as pivotCacheRecordsDesc, p as pivotCacheDefDesc, r as revisionHeadersDesc, t as XlsxReadContext, w as stylesDesc, x as chartsheetDesc, y as externalLinkDesc } from "./context-CSCfAIfV.mjs";
3
3
  import { attr } from "@office-open/xml";
4
4
  import { appPropertiesDesc, customPropertiesDesc, parseArchive, parseCorePropsElement, toUint8Array } from "@office-open/core";
5
5
  //#region src/parse.ts
@@ -149,8 +149,7 @@ function parseWorkbook(data) {
149
149
  if (wbData.webPublishObjects) opts.webPublishObjects = wbData.webPublishObjects;
150
150
  }
151
151
  const worksheets = [];
152
- for (let i = 0; i < xlsx.worksheets.length; i++) {
153
- const wsPath = xlsx.worksheets[i];
152
+ for (const [i, wsPath] of xlsx.worksheets.entries()) {
154
153
  const wsEl = xlsx.doc.get(wsPath);
155
154
  if (!wsEl) continue;
156
155
  const wsOpts = worksheetDesc.parse(wsEl, readContext);
@@ -209,8 +208,8 @@ function parseWorkbook(data) {
209
208
  const chartsheetPaths = xlsx.doc.keys("xl/chartsheets/").filter((k) => k.endsWith(".xml"));
210
209
  if (chartsheetPaths.length > 0) {
211
210
  const chartsheets = [];
212
- for (let i = 0; i < chartsheetPaths.length; i++) {
213
- const csEl = xlsx.doc.get(chartsheetPaths[i]);
211
+ for (const [i, csPath] of chartsheetPaths.entries()) {
212
+ const csEl = xlsx.doc.get(csPath);
214
213
  if (!csEl) continue;
215
214
  const csData = chartsheetDesc.parse(csEl, readContext);
216
215
  if (sheetNames[worksheets.length + i]) csData.name = sheetNames[worksheets.length + i];