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
@@ -0,0 +1,10 @@
1
+ import type { ParseVsdxOptions } from './parser.js';
2
+ import type { VisioDocument } from './model.js';
3
+ export type ParseLegacyVsdOptions = Pick<ParseVsdxOptions, 'maxShapes' | 'maxGeometryCommands' | 'maxTextCharacters' | 'maxDiagnostics'> & {
4
+ limits?: Pick<NonNullable<ParseVsdxOptions['limits']>, 'maxInputBytes' | 'maxRuntimeMs'>;
5
+ };
6
+ /** Read-only preview. The shared decoder performs bounded binary traversal.
7
+ * Runtime checks surround synchronous decoding; they cannot preempt that call.
8
+ */
9
+ export declare function parseLegacyVsd(input: Uint8Array | ArrayBuffer, options?: ParseLegacyVsdOptions): VisioDocument;
10
+ //# sourceMappingURL=legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/visio/legacy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,YAAY,CAAC;AAEtF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACvC,gBAAgB,EAChB,WAAW,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,gBAAgB,CAC5E,GAAG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,CAAC;CACzF,CAAC;AAmMF;;GAEG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,UAAU,GAAG,WAAW,EAC/B,OAAO,GAAE,qBAA0B,GACjC,aAAa,CAoBf"}
@@ -0,0 +1,5 @@
1
+ import { type ParseVsdxOptions } from './parser.js';
2
+ import type { VisioDocument } from './model.js';
3
+ /** Dispatch on container bytes, keeping the VSDX parser and its options intact. */
4
+ export declare function loadVisio(input: Uint8Array | ArrayBuffer, options?: ParseVsdxOptions): Promise<VisioDocument>;
5
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/visio/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,mFAAmF;AACnF,wBAAsB,SAAS,CAC9B,KAAK,EAAE,UAAU,GAAG,WAAW,EAC/B,OAAO,GAAE,gBAAqB,GAC5B,OAAO,CAAC,aAAa,CAAC,CAWxB"}
@@ -196,7 +196,7 @@ export interface VisioPage {
196
196
  layers?: VisioLayer[];
197
197
  }
198
198
  export interface VisioDocument {
199
- format: 'vsdx';
199
+ format: 'vsdx' | 'vsd';
200
200
  pages: VisioPage[];
201
201
  diagnostics: VisioDiagnostic[];
202
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/visio/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/visio/model.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { type CellRange } from '../address.js';
2
2
  import type { Area } from './values.js';
3
3
  /**
4
- * Items keyed by the areas they cover. Single cells are found by key; narrow ranges sit in
5
- * per-column row chunks (so thousands of one-row spills do not share one list), tall ranges in
6
- * per-column lists and very wide ranges in one list per sheet.
4
+ * Items keyed by the areas they cover. Short single-row ranges are found by cell key; other
5
+ * narrow ranges sit in per-column row chunks, tall ranges in per-column lists and very wide
6
+ * ranges in one list per sheet.
7
7
  */
8
8
  export declare class AreaIndex<T> {
9
9
  private readonly cells;
@@ -1 +1 @@
1
- {"version":3,"file":"area-index.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/area-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAiC,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAyBxC;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2D;IACnF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IAEtD,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IA4B9B,kEAAkE;IAClE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAMpE,OAAO,CAAC,OAAO;CA2Cf"}
1
+ {"version":3,"file":"area-index.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/area-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAiC,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAyBxC;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2D;IACnF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8C;IACnE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IAEtD,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IA6B9B,kEAAkE;IAClE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI;IAMpE,OAAO,CAAC,OAAO;CA2Cf"}
@@ -1,3 +1,4 @@
1
+ import { type CellRange } from '../address.js';
1
2
  import type { Cell } from '../model.js';
2
3
  import type { FormulaAst } from './ast.js';
3
4
  import type { Frame } from './context.js';
@@ -9,7 +10,7 @@ export declare abstract class EngineCore extends EngineHost {
9
10
  protected run(seeds: Set<FormulaNode>, everything: boolean): void;
10
11
  /** Seeds plus every formula that (transitively) reads their cells or spill ranges. */
11
12
  protected closure(seeds: Set<FormulaNode>): Set<FormulaNode>;
12
- protected evaluateSet(dirty: Set<FormulaNode>): void;
13
+ protected evaluateSet(dirty: Set<FormulaNode>, full: boolean): void;
13
14
  /**
14
15
  * Computes a formula at the top level. Formulas it reads on demand nest inside it; past a depth
15
16
  * limit they unwind with `Deferred` and are computed here first (an explicit stack), so long
@@ -19,6 +20,8 @@ export declare abstract class EngineCore extends EngineHost {
19
20
  protected markCycle(node: FormulaNode): void;
20
21
  protected compute(node: FormulaNode): void;
21
22
  protected store(node: FormulaNode, cell: Cell, result: Scalar | Matrix): void;
23
+ /** New spill edges may reuse the order only when every reader already follows its anchor. */
24
+ protected updateOrder(node: FormulaNode, before: CellRange | undefined, blockedBefore: CellRange | undefined): void;
22
25
  protected frameFor(sheet: number, row: number, col: number, root: FormulaAst | undefined, legacy?: boolean): Frame;
23
26
  protected evaluateFormula(node: FormulaNode): Scalar | Matrix;
24
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine-core.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/engine-core.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAY,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAIxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,OAAO,EAAoB,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAIzE,8BAAsB,UAAW,SAAQ,UAAU;IAClD,SAAS,CAAC,gBAAgB,IAAI,IAAI;IASlC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAyBjE,sFAAsF;IACtF,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAyB5D,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI;IAuCpD;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IA6B9C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAO5C,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAuB1C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA8B7E,SAAS,CAAC,QAAQ,CACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,MAAM,UAAQ,GACZ,KAAK;IAMR,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM;CAiB7D"}
1
+ {"version":3,"file":"engine-core.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/engine-core.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAY,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,EAAoB,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAIzE,8BAAsB,UAAW,SAAQ,UAAU;IAClD,SAAS,CAAC,gBAAgB,IAAI,IAAI;IASlC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAyBjE,sFAAsF;IACtF,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAyB5D,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAwCnE;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IA6B9C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAO5C,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAuB1C,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA+B7E,6FAA6F;IAC7F,SAAS,CAAC,WAAW,CACpB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,aAAa,EAAE,SAAS,GAAG,SAAS,GAClC,IAAI;IAsBP,SAAS,CAAC,QAAQ,CACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,MAAM,UAAQ,GACZ,KAAK;IAIR,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM;CAiB7D"}
@@ -3,6 +3,7 @@ import type { Cell, Workbook } from '../model.js';
3
3
  import { FormulaError, type FormulaAst } from './ast.js';
4
4
  import type { EvalHost } from './context.js';
5
5
  import type { CalcEngineOptions } from './engine-types.js';
6
+ import type { FormulaOrder } from './engine-order.js';
6
7
  import { type FormulaNode } from './graph.js';
7
8
  import { AreaIndex, ColumnIndex, ReverseIndex } from './graph-index.js';
8
9
  import { type Area, Matrix, type Scalar } from './values.js';
@@ -32,6 +33,7 @@ export declare abstract class EngineHost implements EvalHost {
32
33
  protected columnIndex: ColumnIndex | undefined;
33
34
  protected reverseIndex: ReverseIndex | undefined;
34
35
  protected footprintIndex: AreaIndex<FormulaNode> | undefined;
36
+ protected fullOrder: FormulaOrder | undefined;
35
37
  /** Range reads cached for one evaluation pass (see `readBlock`). */
36
38
  protected readonly blockCache: Map<string, Matrix>;
37
39
  /** Counts reads that hit a formula still being evaluated (a circular reference). */
@@ -1 +1 @@
1
- {"version":3,"file":"engine-host.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/engine-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-host.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/engine-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FormulaNode } from './graph.js';
2
+ /** A validated dependency order; formula results are still evaluated on every pass. */
3
+ export interface FormulaOrder {
4
+ components: {
5
+ nodes: FormulaNode[];
6
+ cyclic: boolean;
7
+ }[];
8
+ ranks: Map<FormulaNode, number>;
9
+ }
10
+ export declare function formulaOrder(nodes: Iterable<FormulaNode>, successors: (node: FormulaNode) => FormulaNode[]): FormulaOrder;
11
+ //# sourceMappingURL=engine-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-order.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/engine-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE;QAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACxD,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,YAAY,CAC3B,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,WAAW,EAAE,GAC9C,YAAY,CAQd"}
@@ -1 +1 @@
1
- {"version":3,"file":"spill.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/spill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAqC,MAAM,eAAe,CAAC;AAEpG,OAAO,KAAK,EAAE,IAAI,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,sFAAsF;AACtF,MAAM,WAAW,WAAY,SAAQ,IAAI;IACxC,0DAA0D;IAC1D,WAAW,EAAE,WAAW,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,GAAG,SAAS,KAAG,IAAI,IAAI,WACnB,CAAC;AAE7C,kDAAkD;AAClD,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,GAAG,SAAS,KAAG,WAAW,GAAG,SACX,CAAC;AAE3D,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAOnF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAC7B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,IAAI,CAYN;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAIvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,GAC5D,OAAO,CAoBT;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBtF;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAUlF"}
1
+ {"version":3,"file":"spill.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/spill.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAqC,MAAM,eAAe,CAAC;AAEpG,OAAO,KAAK,EAAE,IAAI,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,sFAAsF;AACtF,MAAM,WAAW,WAAY,SAAQ,IAAI;IACxC,0DAA0D;IAC1D,WAAW,EAAE,WAAW,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,GAAG,SAAS,KAAG,IAAI,IAAI,WACnB,CAAC;AAE7C,kDAAkD;AAClD,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,GAAG,SAAS,KAAG,WAAW,GAAG,SACX,CAAC;AAE3D,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAOnF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAC7B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,IAAI,CAYN;AAED,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAIvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,GAC5D,OAAO,CAoBT;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAoBtF;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAUlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,OAAO,EAAO,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,GAChE,IAAI,CAkCN"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/xlsx/formula/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,OAAO,EAAO,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,GAChE,IAAI,CAqCN"}
@@ -9913,8 +9913,9 @@ var AreaIndex = class {
9913
9913
  wide = /* @__PURE__ */ new Map();
9914
9914
  add(area, node) {
9915
9915
  const { start, end } = area.range;
9916
- if (start.row === end.row && start.col === end.col) {
9917
- push2(inner(this.cells, area.sheet), cellKey(start.row, start.col), node);
9916
+ if (start.row === end.row && end.col - start.col + 1 <= BUCKET_WIDTH) {
9917
+ const cells = inner(this.cells, area.sheet);
9918
+ for (let col = start.col; col <= end.col; col++) push2(cells, cellKey(start.row, col), node);
9918
9919
  return;
9919
9920
  }
9920
9921
  const entry = { range: area.range, node };
@@ -10141,7 +10142,8 @@ function writeFootprint(sheet, footprint, m) {
10141
10142
  }
10142
10143
  if (cell) {
10143
10144
  cell.value = value;
10144
- cell.spillAnchor = { row, col };
10145
+ if (!isSpilledCell(cell) || cell.spillAnchor.row !== row || cell.spillAnchor.col !== col)
10146
+ cell.spillAnchor = { row, col };
10145
10147
  } else {
10146
10148
  const spilled = { value, spillAnchor: { row, col } };
10147
10149
  putCell(sheet, r, c2, spilled);
@@ -10188,6 +10190,7 @@ var EngineHost = class {
10188
10190
  columnIndex;
10189
10191
  reverseIndex;
10190
10192
  footprintIndex;
10193
+ fullOrder;
10191
10194
  /** Range reads cached for one evaluation pass (see `readBlock`). */
10192
10195
  blockCache = /* @__PURE__ */ new Map();
10193
10196
  /** Counts reads that hit a formula still being evaluated (a circular reference). */
@@ -10360,6 +10363,7 @@ var EngineHost = class {
10360
10363
  if (this.footprints.delete(node)) this.footprintIndex = void 0;
10361
10364
  }
10362
10365
  graphChanged() {
10366
+ this.fullOrder = void 0;
10363
10367
  this.columnIndex = void 0;
10364
10368
  this.reverseIndex = void 0;
10365
10369
  this.footprintIndex = void 0;
@@ -10390,52 +10394,6 @@ var EngineHost = class {
10390
10394
  }
10391
10395
  };
10392
10396
 
10393
- // src/xlsx/formula/engine-types.ts
10394
- var CIRCULAR_REFERENCE_WARNING = "The workbook contains circular references; the cells involved show 0.";
10395
-
10396
- // src/xlsx/formula/engine-util.ts
10397
- function finalize(value, host) {
10398
- let result2;
10399
- if (value instanceof RefValue) {
10400
- if (value.areas.length !== 1) return ERR.VALUE;
10401
- if (value.isCell()) {
10402
- const area = value.areas[0];
10403
- result2 = host.readCell(area.sheet, area.range.start.row, area.range.start.col);
10404
- } else result2 = toMatrix(host, value);
10405
- } else if (value instanceof LambdaValue) return ERR.CALC;
10406
- else result2 = value;
10407
- if (result2 instanceof Matrix) {
10408
- if (result2.rows === 1 && result2.cols === 1) result2 = result2.get(0, 0);
10409
- else return result2.block().mapValues(clean);
10410
- }
10411
- return clean(result2);
10412
- }
10413
- function clean(value) {
10414
- if (value === null) return 0;
10415
- if (typeof value === "number") {
10416
- if (!Number.isFinite(value)) return ERR.NUM;
10417
- return value === 0 ? 0 : value;
10418
- }
10419
- return value;
10420
- }
10421
- var rangeHas = (range, row, col) => row >= range.start.row && row <= range.end.row && col >= range.start.col && col <= range.end.col;
10422
- function sameRange(a, b) {
10423
- if (!a || !b) return a === b || !a && !b;
10424
- 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;
10425
- }
10426
- function boundingBox(ranges) {
10427
- const first3 = ranges[0];
10428
- const start = { ...first3.start };
10429
- const end = { ...first3.end };
10430
- for (const r of ranges) {
10431
- start.row = Math.min(start.row, r.start.row);
10432
- start.col = Math.min(start.col, r.start.col);
10433
- end.row = Math.max(end.row, r.end.row);
10434
- end.col = Math.max(end.col, r.end.col);
10435
- }
10436
- return { start, end };
10437
- }
10438
-
10439
10397
  // src/xlsx/formula/scc.ts
10440
10398
  function stronglyConnected(nodes, successors) {
10441
10399
  const index2 = /* @__PURE__ */ new Map();
@@ -10488,6 +10446,63 @@ function stronglyConnected(nodes, successors) {
10488
10446
  return out;
10489
10447
  }
10490
10448
 
10449
+ // src/xlsx/formula/engine-order.ts
10450
+ function formulaOrder(nodes, successors) {
10451
+ const ranks = /* @__PURE__ */ new Map();
10452
+ const components = stronglyConnected(nodes, successors).map((members, rank4) => {
10453
+ for (const member of members) ranks.set(member, rank4);
10454
+ const first3 = members[0];
10455
+ return { nodes: members, cyclic: members.length > 1 || successors(first3).includes(first3) };
10456
+ });
10457
+ return { components, ranks };
10458
+ }
10459
+
10460
+ // src/xlsx/formula/engine-types.ts
10461
+ var CIRCULAR_REFERENCE_WARNING = "The workbook contains circular references; the cells involved show 0.";
10462
+
10463
+ // src/xlsx/formula/engine-util.ts
10464
+ function finalize(value, host) {
10465
+ let result2;
10466
+ if (value instanceof RefValue) {
10467
+ if (value.areas.length !== 1) return ERR.VALUE;
10468
+ if (value.isCell()) {
10469
+ const area = value.areas[0];
10470
+ result2 = host.readCell(area.sheet, area.range.start.row, area.range.start.col);
10471
+ } else result2 = toMatrix(host, value);
10472
+ } else if (value instanceof LambdaValue) return ERR.CALC;
10473
+ else result2 = value;
10474
+ if (result2 instanceof Matrix) {
10475
+ if (result2.rows === 1 && result2.cols === 1) result2 = result2.get(0, 0);
10476
+ else return result2.block().mapValues(clean);
10477
+ }
10478
+ return clean(result2);
10479
+ }
10480
+ function clean(value) {
10481
+ if (value === null) return 0;
10482
+ if (typeof value === "number") {
10483
+ if (!Number.isFinite(value)) return ERR.NUM;
10484
+ return value === 0 ? 0 : value;
10485
+ }
10486
+ return value;
10487
+ }
10488
+ var rangeHas = (range, row, col) => row >= range.start.row && row <= range.end.row && col >= range.start.col && col <= range.end.col;
10489
+ function sameRange(a, b) {
10490
+ if (!a || !b) return a === b || !a && !b;
10491
+ 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;
10492
+ }
10493
+ function boundingBox(ranges) {
10494
+ const first3 = ranges[0];
10495
+ const start = { ...first3.start };
10496
+ const end = { ...first3.end };
10497
+ for (const r of ranges) {
10498
+ start.row = Math.min(start.row, r.start.row);
10499
+ start.col = Math.min(start.col, r.start.col);
10500
+ end.row = Math.max(end.row, r.end.row);
10501
+ end.col = Math.max(end.col, r.end.col);
10502
+ }
10503
+ return { start, end };
10504
+ }
10505
+
10491
10506
  // src/xlsx/formula/store.ts
10492
10507
  function storeResult(sheet, node, cell, result2, claims) {
10493
10508
  const { row, col } = node;
@@ -10507,9 +10522,9 @@ function storeResult(sheet, node, cell, result2, claims) {
10507
10522
  return;
10508
10523
  }
10509
10524
  const footprint = footprintFor(row, col, result2);
10510
- if (node.spill) clearFootprint(sheet, node.spill, row, col);
10511
- delete node.spill;
10512
10525
  if (!footprint || !footprintFree(sheet, footprint, row, col, claims)) {
10526
+ if (node.spill) clearFootprint(sheet, node.spill, row, col);
10527
+ delete node.spill;
10513
10528
  node.blockedSpill = footprint ?? {
10514
10529
  start: { row, col },
10515
10530
  end: {
@@ -10520,6 +10535,7 @@ function storeResult(sheet, node, cell, result2, claims) {
10520
10535
  cell.value = ERR.SPILL;
10521
10536
  return;
10522
10537
  }
10538
+ if (node.spill && !sameRange(node.spill, footprint)) clearFootprint(sheet, node.spill, row, col);
10523
10539
  delete node.blockedSpill;
10524
10540
  writeFootprint(sheet, footprint, result2);
10525
10541
  node.spill = footprint;
@@ -10542,7 +10558,7 @@ var EngineCore = class extends EngineHost {
10542
10558
  const dirty = everything && round2 === 0 ? current : this.closure(current);
10543
10559
  this.footprintChanges = [];
10544
10560
  this.evaluatedAt = /* @__PURE__ */ new Map();
10545
- this.evaluateSet(dirty);
10561
+ this.evaluateSet(dirty, everything && round2 === 0);
10546
10562
  if (this.footprintChanges.length === 0) break;
10547
10563
  const next = /* @__PURE__ */ new Set();
10548
10564
  const reverse2 = this.reverse();
@@ -10584,7 +10600,7 @@ var EngineCore = class extends EngineHost {
10584
10600
  }
10585
10601
  return out;
10586
10602
  }
10587
- evaluateSet(dirty) {
10603
+ evaluateSet(dirty, full) {
10588
10604
  this.boundsCache.clear();
10589
10605
  this.blockCache.clear();
10590
10606
  const columns = this.columns();
@@ -10594,24 +10610,25 @@ var EngineCore = class extends EngineHost {
10594
10610
  let out = succCache.get(node);
10595
10611
  if (out) return out;
10596
10612
  const found = [];
10613
+ const anchors = /* @__PURE__ */ new Set();
10597
10614
  for (const dep of node.deps) {
10598
10615
  columns.nodesIn(dep, found);
10599
- const anchors = [];
10600
10616
  footprints.dependents(dep.sheet, dep.range, anchors);
10601
- for (const anchor of anchors) if (anchor.spill ?? anchor.arrayRange) found.push(anchor);
10602
10617
  }
10603
- out = [...new Set(found)].filter((n2) => dirty.has(n2));
10618
+ for (const anchor of anchors) if (anchor.spill ?? anchor.arrayRange) found.push(anchor);
10619
+ out = found.length ? [...new Set(found)].filter((n2) => dirty.has(n2)) : [];
10604
10620
  succCache.set(node, out);
10605
10621
  return out;
10606
10622
  };
10607
- const order = stronglyConnected(dirty, successors);
10623
+ const order = full && this.fullOrder || formulaOrder(dirty, successors);
10624
+ if (full) this.fullOrder = order;
10608
10625
  this.pending = new Set(dirty);
10609
10626
  this.dynamicCycleHits = /* @__PURE__ */ new Set();
10610
10627
  try {
10611
- for (const component of order) {
10612
- const first3 = component[0];
10613
- if (component.length > 1 || successors(first3).includes(first3)) {
10614
- for (const node of component) this.markCycle(node);
10628
+ for (const component of order.components) {
10629
+ const first3 = component.nodes[0];
10630
+ if (component.cyclic) {
10631
+ for (const node of component.nodes) this.markCycle(node);
10615
10632
  } else if (this.pending.has(first3)) {
10616
10633
  this.computeFrom(first3);
10617
10634
  }
@@ -10690,6 +10707,7 @@ var EngineCore = class extends EngineHost {
10690
10707
  return !!other && other !== node && !!other.spill && rangeHas(other.spill, r, c2);
10691
10708
  });
10692
10709
  if (!sameRange(before, node.spill) || !sameRange(blockedBefore, node.blockedSpill)) {
10710
+ this.updateOrder(node, before, blockedBefore);
10693
10711
  this.footprintIndex = void 0;
10694
10712
  this.blockCache.clear();
10695
10713
  }
@@ -10709,10 +10727,30 @@ var EngineCore = class extends EngineHost {
10709
10727
  }
10710
10728
  }
10711
10729
  }
10730
+ /** New spill edges may reuse the order only when every reader already follows its anchor. */
10731
+ updateOrder(node, before, blockedBefore) {
10732
+ const order = this.fullOrder;
10733
+ if (!order) return;
10734
+ if (before || blockedBefore || !node.spill || node.blockedSpill) {
10735
+ this.fullOrder = void 0;
10736
+ return;
10737
+ }
10738
+ const rank4 = order.ranks.get(node);
10739
+ if (rank4 === void 0) {
10740
+ this.fullOrder = void 0;
10741
+ return;
10742
+ }
10743
+ const readers = /* @__PURE__ */ new Set();
10744
+ this.reverse().dependents(node.sheet, node.spill, readers);
10745
+ for (const reader of readers) {
10746
+ if ((order.ranks.get(reader) ?? -1) <= rank4) {
10747
+ this.fullOrder = void 0;
10748
+ return;
10749
+ }
10750
+ }
10751
+ }
10712
10752
  frameFor(sheet, row, col, root, legacy = false) {
10713
- const frame = { host: this, sheet, row, col, scope: void 0, depth: 0 };
10714
- if (legacy) Object.assign(frame, { legacy: true });
10715
- return root ? { ...frame, root } : frame;
10753
+ return { host: this, sheet, row, col, scope: void 0, depth: 0, root, legacy };
10716
10754
  }
10717
10755
  evaluateFormula(node) {
10718
10756
  if (!node.ast) return node.parseError ?? ERR.NAME;