ooxml-core 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +10 -6
  2. package/dist/automation/index.cjs +320 -205
  3. package/dist/automation/index.mjs +320 -205
  4. package/dist/crypto/index.cjs +118 -31
  5. package/dist/crypto/index.mjs +118 -31
  6. package/dist/docx/load/index.cjs +1273 -110
  7. package/dist/docx/load/index.mjs +1273 -110
  8. package/dist/docx/load/legacy-doc.d.ts.map +1 -1
  9. package/dist/pptx/automation/index.cjs +1479 -304
  10. package/dist/pptx/automation/index.d.ts +1 -1
  11. package/dist/pptx/automation/index.mjs +1479 -304
  12. package/dist/pptx/chunks/{index-LoCVDu8Z.d.ts → index-CT9y69AZ.d.ts} +22 -12
  13. package/dist/pptx/chunks/index-CT9y69AZ.d.ts.map +1 -0
  14. package/dist/pptx/cli/index.cjs +307 -152
  15. package/dist/pptx/cli/index.mjs +307 -152
  16. package/dist/pptx/index.cjs +1479 -304
  17. package/dist/pptx/index.d.ts +1 -1
  18. package/dist/pptx/index.mjs +1479 -304
  19. package/dist/visio/edit-geometry-admission.d.ts +6 -3
  20. package/dist/visio/edit-geometry-admission.d.ts.map +1 -1
  21. package/dist/visio/edit-geometry.d.ts +2 -1
  22. package/dist/visio/edit-geometry.d.ts.map +1 -1
  23. package/dist/visio/edit-master-index.d.ts +1 -1
  24. package/dist/visio/edit-master-index.d.ts.map +1 -1
  25. package/dist/visio/edit-master-move.d.ts +9 -1
  26. package/dist/visio/edit-master-move.d.ts.map +1 -1
  27. package/dist/visio/edit-master-scope.d.ts +2 -1
  28. package/dist/visio/edit-master-scope.d.ts.map +1 -1
  29. package/dist/visio/edit-scope.d.ts +2 -1
  30. package/dist/visio/edit-scope.d.ts.map +1 -1
  31. package/dist/visio/edit.d.ts.map +1 -1
  32. package/dist/visio/index.cjs +7704 -256
  33. package/dist/visio/index.d.ts +3 -1
  34. package/dist/visio/index.d.ts.map +1 -1
  35. package/dist/visio/index.mjs +7703 -257
  36. package/dist/visio/legacy.d.ts +10 -0
  37. package/dist/visio/legacy.d.ts.map +1 -0
  38. package/dist/visio/load.d.ts +5 -0
  39. package/dist/visio/load.d.ts.map +1 -0
  40. package/dist/visio/model.d.ts +1 -1
  41. package/dist/visio/model.d.ts.map +1 -1
  42. package/dist/xlsx/formula/area-index.d.ts +3 -3
  43. package/dist/xlsx/formula/area-index.d.ts.map +1 -1
  44. package/dist/xlsx/formula/engine-core.d.ts +4 -1
  45. package/dist/xlsx/formula/engine-core.d.ts.map +1 -1
  46. package/dist/xlsx/formula/engine-host.d.ts +2 -0
  47. package/dist/xlsx/formula/engine-host.d.ts.map +1 -1
  48. package/dist/xlsx/formula/engine-order.d.ts +11 -0
  49. package/dist/xlsx/formula/engine-order.d.ts.map +1 -0
  50. package/dist/xlsx/formula/spill.d.ts.map +1 -1
  51. package/dist/xlsx/formula/store.d.ts.map +1 -1
  52. package/dist/xlsx/index.cjs +102 -64
  53. package/dist/xlsx/index.mjs +102 -64
  54. package/dist/xlsx/load/index.cjs +144 -52
  55. package/dist/xlsx/load/index.mjs +144 -52
  56. package/package.json +2 -2
  57. package/dist/pptx/chunks/index-LoCVDu8Z.d.ts.map +0 -1
@@ -9907,8 +9907,9 @@ var AreaIndex = class {
9907
9907
  wide = /* @__PURE__ */ new Map();
9908
9908
  add(area, node) {
9909
9909
  const { start, end } = area.range;
9910
- if (start.row === end.row && start.col === end.col) {
9911
- push2(inner(this.cells, area.sheet), cellKey(start.row, start.col), node);
9910
+ if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
9911
+ const cells = inner(this.cells, area.sheet);
9912
+ for (let col = start.col; col <= end.col; col++) push2(cells, cellKey(start.row, col), node);
9912
9913
  return;
9913
9914
  }
9914
9915
  const entry = { range: area.range, node };
@@ -10135,7 +10136,8 @@ function writeFootprint(sheet, footprint, m) {
10135
10136
  }
10136
10137
  if (cell) {
10137
10138
  cell.value = value;
10138
- cell.spillAnchor = { row, col };
10139
+ if (!isSpilledCell(cell) || cell.spillAnchor.row !== row || cell.spillAnchor.col !== col)
10140
+ cell.spillAnchor = { row, col };
10139
10141
  } else {
10140
10142
  const spilled = { value, spillAnchor: { row, col } };
10141
10143
  putCell(sheet, r, c2, spilled);
@@ -10182,6 +10184,7 @@ var EngineHost = class {
10182
10184
  columnIndex;
10183
10185
  reverseIndex;
10184
10186
  footprintIndex;
10187
+ fullOrder;
10185
10188
  /** Range reads cached for one evaluation pass (see `readBlock`). */
10186
10189
  blockCache = /* @__PURE__ */ new Map();
10187
10190
  /** Counts reads that hit a formula still being evaluated (a circular reference). */
@@ -10354,6 +10357,7 @@ var EngineHost = class {
10354
10357
  if (this.footprints.delete(node)) this.footprintIndex = void 0;
10355
10358
  }
10356
10359
  graphChanged() {
10360
+ this.fullOrder = void 0;
10357
10361
  this.columnIndex = void 0;
10358
10362
  this.reverseIndex = void 0;
10359
10363
  this.footprintIndex = void 0;
@@ -10384,52 +10388,6 @@ var EngineHost = class {
10384
10388
  }
10385
10389
  };
10386
10390
 
10387
- // src/xlsx/formula/engine-types.ts
10388
- var CIRCULAR_REFERENCE_WARNING = "The workbook contains circular references; the cells involved show 0.";
10389
-
10390
- // src/xlsx/formula/engine-util.ts
10391
- function finalize(value, host) {
10392
- let result2;
10393
- if (value instanceof RefValue) {
10394
- if (value.areas.length !== 1) return ERR.VALUE;
10395
- if (value.isCell()) {
10396
- const area = value.areas[0];
10397
- result2 = host.readCell(area.sheet, area.range.start.row, area.range.start.col);
10398
- } else result2 = toMatrix(host, value);
10399
- } else if (value instanceof LambdaValue) return ERR.CALC;
10400
- else result2 = value;
10401
- if (result2 instanceof Matrix) {
10402
- if (result2.rows === 1 && result2.cols === 1) result2 = result2.get(0, 0);
10403
- else return result2.block().mapValues(clean);
10404
- }
10405
- return clean(result2);
10406
- }
10407
- function clean(value) {
10408
- if (value === null) return 0;
10409
- if (typeof value === "number") {
10410
- if (!Number.isFinite(value)) return ERR.NUM;
10411
- return value === 0 ? 0 : value;
10412
- }
10413
- return value;
10414
- }
10415
- var rangeHas = (range, row, col) => row >= range.start.row && row <= range.end.row && col >= range.start.col && col <= range.end.col;
10416
- function sameRange(a, b) {
10417
- if (!a || !b) return a === b || !a && !b;
10418
- return a.start.row === b.start.row && a.start.col === b.start.col && a.end.row === b.end.row && a.end.col === b.end.col;
10419
- }
10420
- function boundingBox(ranges) {
10421
- const first3 = ranges[0];
10422
- const start = { ...first3.start };
10423
- const end = { ...first3.end };
10424
- for (const r of ranges) {
10425
- start.row = Math.min(start.row, r.start.row);
10426
- start.col = Math.min(start.col, r.start.col);
10427
- end.row = Math.max(end.row, r.end.row);
10428
- end.col = Math.max(end.col, r.end.col);
10429
- }
10430
- return { start, end };
10431
- }
10432
-
10433
10391
  // src/xlsx/formula/scc.ts
10434
10392
  function stronglyConnected(nodes, successors) {
10435
10393
  const index2 = /* @__PURE__ */ new Map();
@@ -10482,6 +10440,63 @@ function stronglyConnected(nodes, successors) {
10482
10440
  return out;
10483
10441
  }
10484
10442
 
10443
+ // src/xlsx/formula/engine-order.ts
10444
+ function formulaOrder(nodes, successors) {
10445
+ const ranks = /* @__PURE__ */ new Map();
10446
+ const components = stronglyConnected(nodes, successors).map((members, rank4) => {
10447
+ for (const member of members) ranks.set(member, rank4);
10448
+ const first3 = members[0];
10449
+ return { nodes: members, cyclic: members.length > 1 || successors(first3).includes(first3) };
10450
+ });
10451
+ return { components, ranks };
10452
+ }
10453
+
10454
+ // src/xlsx/formula/engine-types.ts
10455
+ var CIRCULAR_REFERENCE_WARNING = "The workbook contains circular references; the cells involved show 0.";
10456
+
10457
+ // src/xlsx/formula/engine-util.ts
10458
+ function finalize(value, host) {
10459
+ let result2;
10460
+ if (value instanceof RefValue) {
10461
+ if (value.areas.length !== 1) return ERR.VALUE;
10462
+ if (value.isCell()) {
10463
+ const area = value.areas[0];
10464
+ result2 = host.readCell(area.sheet, area.range.start.row, area.range.start.col);
10465
+ } else result2 = toMatrix(host, value);
10466
+ } else if (value instanceof LambdaValue) return ERR.CALC;
10467
+ else result2 = value;
10468
+ if (result2 instanceof Matrix) {
10469
+ if (result2.rows === 1 && result2.cols === 1) result2 = result2.get(0, 0);
10470
+ else return result2.block().mapValues(clean);
10471
+ }
10472
+ return clean(result2);
10473
+ }
10474
+ function clean(value) {
10475
+ if (value === null) return 0;
10476
+ if (typeof value === "number") {
10477
+ if (!Number.isFinite(value)) return ERR.NUM;
10478
+ return value === 0 ? 0 : value;
10479
+ }
10480
+ return value;
10481
+ }
10482
+ var rangeHas = (range, row, col) => row >= range.start.row && row <= range.end.row && col >= range.start.col && col <= range.end.col;
10483
+ function sameRange(a, b) {
10484
+ if (!a || !b) return a === b || !a && !b;
10485
+ return a.start.row === b.start.row && a.start.col === b.start.col && a.end.row === b.end.row && a.end.col === b.end.col;
10486
+ }
10487
+ function boundingBox(ranges) {
10488
+ const first3 = ranges[0];
10489
+ const start = { ...first3.start };
10490
+ const end = { ...first3.end };
10491
+ for (const r of ranges) {
10492
+ start.row = Math.min(start.row, r.start.row);
10493
+ start.col = Math.min(start.col, r.start.col);
10494
+ end.row = Math.max(end.row, r.end.row);
10495
+ end.col = Math.max(end.col, r.end.col);
10496
+ }
10497
+ return { start, end };
10498
+ }
10499
+
10485
10500
  // src/xlsx/formula/store.ts
10486
10501
  function storeResult(sheet, node, cell, result2, claims) {
10487
10502
  const { row, col } = node;
@@ -10501,9 +10516,9 @@ function storeResult(sheet, node, cell, result2, claims) {
10501
10516
  return;
10502
10517
  }
10503
10518
  const footprint = footprintFor(row, col, result2);
10504
- if (node.spill) clearFootprint(sheet, node.spill, row, col);
10505
- delete node.spill;
10506
10519
  if (!footprint || !footprintFree(sheet, footprint, row, col, claims)) {
10520
+ if (node.spill) clearFootprint(sheet, node.spill, row, col);
10521
+ delete node.spill;
10507
10522
  node.blockedSpill = footprint ?? {
10508
10523
  start: { row, col },
10509
10524
  end: {
@@ -10514,6 +10529,7 @@ function storeResult(sheet, node, cell, result2, claims) {
10514
10529
  cell.value = ERR.SPILL;
10515
10530
  return;
10516
10531
  }
10532
+ if (node.spill && !sameRange(node.spill, footprint)) clearFootprint(sheet, node.spill, row, col);
10517
10533
  delete node.blockedSpill;
10518
10534
  writeFootprint(sheet, footprint, result2);
10519
10535
  node.spill = footprint;
@@ -10536,7 +10552,7 @@ var EngineCore = class extends EngineHost {
10536
10552
  const dirty = everything && round2 === 0 ? current : this.closure(current);
10537
10553
  this.footprintChanges = [];
10538
10554
  this.evaluatedAt = /* @__PURE__ */ new Map();
10539
- this.evaluateSet(dirty);
10555
+ this.evaluateSet(dirty, everything && round2 === 0);
10540
10556
  if (this.footprintChanges.length === 0) break;
10541
10557
  const next = /* @__PURE__ */ new Set();
10542
10558
  const reverse2 = this.reverse();
@@ -10578,7 +10594,7 @@ var EngineCore = class extends EngineHost {
10578
10594
  }
10579
10595
  return out;
10580
10596
  }
10581
- evaluateSet(dirty) {
10597
+ evaluateSet(dirty, full) {
10582
10598
  this.boundsCache.clear();
10583
10599
  this.blockCache.clear();
10584
10600
  const columns = this.columns();
@@ -10588,24 +10604,25 @@ var EngineCore = class extends EngineHost {
10588
10604
  let out = succCache.get(node);
10589
10605
  if (out) return out;
10590
10606
  const found = [];
10607
+ const anchors = /* @__PURE__ */ new Set();
10591
10608
  for (const dep of node.deps) {
10592
10609
  columns.nodesIn(dep, found);
10593
- const anchors = [];
10594
10610
  footprints.dependents(dep.sheet, dep.range, anchors);
10595
- for (const anchor of anchors) if (anchor.spill ?? anchor.arrayRange) found.push(anchor);
10596
10611
  }
10597
- out = [...new Set(found)].filter((n2) => dirty.has(n2));
10612
+ for (const anchor of anchors) if (anchor.spill ?? anchor.arrayRange) found.push(anchor);
10613
+ out = found.length ? [...new Set(found)].filter((n2) => dirty.has(n2)) : [];
10598
10614
  succCache.set(node, out);
10599
10615
  return out;
10600
10616
  };
10601
- const order = stronglyConnected(dirty, successors);
10617
+ const order = full && this.fullOrder || formulaOrder(dirty, successors);
10618
+ if (full) this.fullOrder = order;
10602
10619
  this.pending = new Set(dirty);
10603
10620
  this.dynamicCycleHits = /* @__PURE__ */ new Set();
10604
10621
  try {
10605
- for (const component of order) {
10606
- const first3 = component[0];
10607
- if (component.length > 1 || successors(first3).includes(first3)) {
10608
- for (const node of component) this.markCycle(node);
10622
+ for (const component of order.components) {
10623
+ const first3 = component.nodes[0];
10624
+ if (component.cyclic) {
10625
+ for (const node of component.nodes) this.markCycle(node);
10609
10626
  } else if (this.pending.has(first3)) {
10610
10627
  this.computeFrom(first3);
10611
10628
  }
@@ -10684,6 +10701,7 @@ var EngineCore = class extends EngineHost {
10684
10701
  return !!other && other !== node && !!other.spill && rangeHas(other.spill, r, c2);
10685
10702
  });
10686
10703
  if (!sameRange(before, node.spill) || !sameRange(blockedBefore, node.blockedSpill)) {
10704
+ this.updateOrder(node, before, blockedBefore);
10687
10705
  this.footprintIndex = void 0;
10688
10706
  this.blockCache.clear();
10689
10707
  }
@@ -10703,10 +10721,30 @@ var EngineCore = class extends EngineHost {
10703
10721
  }
10704
10722
  }
10705
10723
  }
10724
+ /** New spill edges may reuse the order only when every reader already follows its anchor. */
10725
+ updateOrder(node, before, blockedBefore) {
10726
+ const order = this.fullOrder;
10727
+ if (!order) return;
10728
+ if (before || blockedBefore || !node.spill || node.blockedSpill) {
10729
+ this.fullOrder = void 0;
10730
+ return;
10731
+ }
10732
+ const rank4 = order.ranks.get(node);
10733
+ if (rank4 === void 0) {
10734
+ this.fullOrder = void 0;
10735
+ return;
10736
+ }
10737
+ const readers = /* @__PURE__ */ new Set();
10738
+ this.reverse().dependents(node.sheet, node.spill, readers);
10739
+ for (const reader of readers) {
10740
+ if ((order.ranks.get(reader) ?? -1) <= rank4) {
10741
+ this.fullOrder = void 0;
10742
+ return;
10743
+ }
10744
+ }
10745
+ }
10706
10746
  frameFor(sheet, row, col, root, legacy = false) {
10707
- const frame = { host: this, sheet, row, col, scope: void 0, depth: 0 };
10708
- if (legacy) Object.assign(frame, { legacy: true });
10709
- return root ? { ...frame, root } : frame;
10747
+ return { host: this, sheet, row, col, scope: void 0, depth: 0, root, legacy };
10710
10748
  }
10711
10749
  evaluateFormula(node) {
10712
10750
  if (!node.ast) return node.parseError ?? ERR.NAME;