@ricsam/formula-engine 0.2.2 → 0.2.4
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.
- package/dist/cjs/core/ast-traverser.cjs +19 -9
- package/dist/cjs/core/ast-traverser.cjs.map +2 -2
- package/dist/cjs/core/autofill-utils.cjs +19 -9
- package/dist/cjs/core/autofill-utils.cjs.map +2 -2
- package/dist/cjs/core/cell-mover.cjs +19 -9
- package/dist/cjs/core/cell-mover.cjs.map +2 -2
- package/dist/cjs/core/commands/command-executor.cjs +24 -13
- package/dist/cjs/core/commands/command-executor.cjs.map +3 -3
- package/dist/cjs/core/commands/content-commands.cjs +292 -9
- package/dist/cjs/core/commands/content-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/metadata-commands.cjs +19 -9
- package/dist/cjs/core/commands/metadata-commands.cjs.map +2 -2
- package/dist/cjs/core/commands/named-expression-commands.cjs +138 -13
- package/dist/cjs/core/commands/named-expression-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/structure-commands.cjs +216 -15
- package/dist/cjs/core/commands/structure-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/style-commands.cjs +19 -9
- package/dist/cjs/core/commands/style-commands.cjs.map +2 -2
- package/dist/cjs/core/commands/table-commands.cjs +134 -13
- package/dist/cjs/core/commands/table-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/types.cjs +36 -9
- package/dist/cjs/core/commands/types.cjs.map +3 -3
- package/dist/cjs/core/engine-snapshot.cjs +51 -0
- package/dist/cjs/core/engine-snapshot.cjs.map +10 -0
- package/dist/cjs/core/engine.cjs +51 -34
- package/dist/cjs/core/engine.cjs.map +3 -3
- package/dist/cjs/core/managers/cache-manager.cjs +123 -9
- package/dist/cjs/core/managers/cache-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/copy-manager.cjs +19 -9
- package/dist/cjs/core/managers/copy-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/dependency-manager.cjs +697 -9
- package/dist/cjs/core/managers/dependency-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/dependency-node.cjs +14 -8
- package/dist/cjs/core/managers/dependency-node.cjs.map +1 -1
- package/dist/cjs/core/managers/evaluation-manager.cjs +296 -11
- package/dist/cjs/core/managers/evaluation-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/event-manager.cjs +19 -9
- package/dist/cjs/core/managers/event-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs +65 -12
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/isDependencyNode.cjs +19 -9
- package/dist/cjs/core/managers/isDependencyNode.cjs.map +2 -2
- package/dist/cjs/core/managers/named-expression-manager.cjs +121 -29
- package/dist/cjs/core/managers/named-expression-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/range-eval-order-builder.cjs +19 -9
- package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +2 -2
- package/dist/cjs/core/managers/reference-manager.cjs +25 -9
- package/dist/cjs/core/managers/reference-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/schema-manager.cjs +19 -9
- package/dist/cjs/core/managers/schema-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/style-manager.cjs +28 -9
- package/dist/cjs/core/managers/style-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/table-manager.cjs +27 -11
- package/dist/cjs/core/managers/table-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/workbook-manager.cjs +38 -13
- package/dist/cjs/core/managers/workbook-manager.cjs.map +3 -3
- package/dist/cjs/core/map-serializer.cjs +19 -9
- package/dist/cjs/core/map-serializer.cjs.map +2 -2
- package/dist/cjs/core/named-expression-renamer.cjs +19 -9
- package/dist/cjs/core/named-expression-renamer.cjs.map +2 -2
- package/dist/cjs/core/resource-keys.cjs +67 -0
- package/dist/cjs/core/resource-keys.cjs.map +10 -0
- package/dist/cjs/core/schema/cell-orm.cjs +19 -9
- package/dist/cjs/core/schema/cell-orm.cjs.map +2 -2
- package/dist/cjs/core/schema/grid-orm.cjs +19 -9
- package/dist/cjs/core/schema/grid-orm.cjs.map +2 -2
- package/dist/cjs/core/schema/schema-builder.cjs +19 -9
- package/dist/cjs/core/schema/schema-builder.cjs.map +2 -2
- package/dist/cjs/core/schema/schema-helpers.cjs +19 -9
- package/dist/cjs/core/schema/schema-helpers.cjs.map +2 -2
- package/dist/cjs/core/schema/schema.cjs +19 -9
- package/dist/cjs/core/schema/schema.cjs.map +2 -2
- package/dist/cjs/core/schema/table-orm.cjs +19 -9
- package/dist/cjs/core/schema/table-orm.cjs.map +2 -2
- package/dist/cjs/core/sheet-renamer.cjs +19 -9
- package/dist/cjs/core/sheet-renamer.cjs.map +2 -2
- package/dist/cjs/core/sheet-utils.cjs +19 -9
- package/dist/cjs/core/sheet-utils.cjs.map +2 -2
- package/dist/cjs/core/table-renamer.cjs +19 -9
- package/dist/cjs/core/table-renamer.cjs.map +2 -2
- package/dist/cjs/core/types.cjs +19 -9
- package/dist/cjs/core/types.cjs.map +2 -2
- package/dist/cjs/core/utils/color-utils.cjs +19 -9
- package/dist/cjs/core/utils/color-utils.cjs.map +2 -2
- package/dist/cjs/core/utils/range-serializer.cjs +19 -9
- package/dist/cjs/core/utils/range-serializer.cjs.map +2 -2
- package/dist/cjs/core/utils/range-utils.cjs +19 -9
- package/dist/cjs/core/utils/range-utils.cjs.map +2 -2
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +19 -9
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +2 -2
- package/dist/cjs/core/utils.cjs +19 -9
- package/dist/cjs/core/utils.cjs.map +2 -2
- package/dist/cjs/core/workbook-renamer.cjs +19 -9
- package/dist/cjs/core/workbook-renamer.cjs.map +2 -2
- package/dist/cjs/debug/flags.cjs +19 -9
- package/dist/cjs/debug/flags.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/add/add.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/power/power.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/equals.cjs +19 -9
- package/dist/cjs/evaluator/comparison/equals.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +19 -9
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/greater-than.cjs +19 -9
- package/dist/cjs/evaluator/comparison/greater-than.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +19 -9
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/less-than.cjs +19 -9
- package/dist/cjs/evaluator/comparison/less-than.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/not-equals.cjs +19 -9
- package/dist/cjs/evaluator/comparison/not-equals.cjs.map +2 -2
- package/dist/cjs/evaluator/concatenation/concatenate.cjs +19 -9
- package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +19 -9
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +35 -9
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +22 -9
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +35 -11
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs +61 -0
- package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +19 -9
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs +22 -9
- package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs.map +3 -3
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +19 -9
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +2 -2
- package/dist/cjs/evaluator/evaluation-context.cjs +19 -9
- package/dist/cjs/evaluator/evaluation-context.cjs.map +2 -2
- package/dist/cjs/evaluator/evaluation-error.cjs +19 -9
- package/dist/cjs/evaluator/evaluation-error.cjs.map +2 -2
- package/dist/cjs/evaluator/formula-evaluator.cjs +55 -12
- package/dist/cjs/evaluator/formula-evaluator.cjs.map +3 -3
- package/dist/cjs/evaluator/range-evaluation-node.cjs +35 -11
- package/dist/cjs/evaluator/range-evaluation-node.cjs.map +3 -3
- package/dist/cjs/functions/_template/template.cjs +19 -9
- package/dist/cjs/functions/_template/template.cjs.map +2 -2
- package/dist/cjs/functions/array/sequence/sequence.cjs +19 -9
- package/dist/cjs/functions/array/sequence/sequence.cjs.map +2 -2
- package/dist/cjs/functions/criteria-parser.cjs +19 -9
- package/dist/cjs/functions/criteria-parser.cjs.map +2 -2
- package/dist/cjs/functions/criteria-utils.cjs +19 -9
- package/dist/cjs/functions/criteria-utils.cjs.map +2 -2
- package/dist/cjs/functions/function-registry.cjs +19 -9
- package/dist/cjs/functions/function-registry.cjs.map +2 -2
- package/dist/cjs/functions/function-utils.cjs +19 -9
- package/dist/cjs/functions/function-utils.cjs.map +2 -2
- package/dist/cjs/functions/information/cell/cell.cjs +19 -9
- package/dist/cjs/functions/information/cell/cell.cjs.map +2 -2
- package/dist/cjs/functions/information/column/column.cjs +19 -9
- package/dist/cjs/functions/information/column/column.cjs.map +2 -2
- package/dist/cjs/functions/information/row/row.cjs +19 -9
- package/dist/cjs/functions/information/row/row.cjs.map +2 -2
- package/dist/cjs/functions/logical/and/and.cjs +19 -9
- package/dist/cjs/functions/logical/and/and.cjs.map +2 -2
- package/dist/cjs/functions/logical/if/if.cjs +19 -9
- package/dist/cjs/functions/logical/if/if.cjs.map +2 -2
- package/dist/cjs/functions/logical/iferror/iferror.cjs +19 -9
- package/dist/cjs/functions/logical/iferror/iferror.cjs.map +2 -2
- package/dist/cjs/functions/logical/or/or.cjs +19 -9
- package/dist/cjs/functions/logical/or/or.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/count-utils.cjs +19 -9
- package/dist/cjs/functions/lookup/count/count-utils.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/count.cjs +19 -9
- package/dist/cjs/functions/lookup/count/count.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/countif.cjs +19 -9
- package/dist/cjs/functions/lookup/count/countif.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/countifs.cjs +19 -9
- package/dist/cjs/functions/lookup/count/countifs.cjs.map +2 -2
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +19 -9
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +2 -2
- package/dist/cjs/functions/lookup/match/match.cjs +21 -10
- package/dist/cjs/functions/lookup/match/match.cjs.map +3 -3
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +19 -9
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +2 -2
- package/dist/cjs/functions/math/average/average-utils.cjs +19 -9
- package/dist/cjs/functions/math/average/average-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/average/average.cjs +19 -9
- package/dist/cjs/functions/math/average/average.cjs.map +2 -2
- package/dist/cjs/functions/math/average/averageif.cjs +19 -9
- package/dist/cjs/functions/math/average/averageif.cjs.map +2 -2
- package/dist/cjs/functions/math/average/averageifs.cjs +19 -9
- package/dist/cjs/functions/math/average/averageifs.cjs.map +2 -2
- package/dist/cjs/functions/math/ceiling/ceiling.cjs +19 -9
- package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +2 -2
- package/dist/cjs/functions/math/max/max-utils.cjs +19 -9
- package/dist/cjs/functions/math/max/max-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/max/max.cjs +19 -9
- package/dist/cjs/functions/math/max/max.cjs.map +2 -2
- package/dist/cjs/functions/math/max/maxif.cjs +19 -9
- package/dist/cjs/functions/math/max/maxif.cjs.map +2 -2
- package/dist/cjs/functions/math/max/maxifs.cjs +19 -9
- package/dist/cjs/functions/math/max/maxifs.cjs.map +2 -2
- package/dist/cjs/functions/math/min/min-utils.cjs +19 -9
- package/dist/cjs/functions/math/min/min-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/min/min.cjs +19 -9
- package/dist/cjs/functions/math/min/min.cjs.map +2 -2
- package/dist/cjs/functions/math/min/minif.cjs +19 -9
- package/dist/cjs/functions/math/min/minif.cjs.map +2 -2
- package/dist/cjs/functions/math/min/minifs.cjs +19 -9
- package/dist/cjs/functions/math/min/minifs.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sum.cjs +19 -9
- package/dist/cjs/functions/math/sum/sum.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sumif.cjs +19 -9
- package/dist/cjs/functions/math/sum/sumif.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sumifs.cjs +19 -9
- package/dist/cjs/functions/math/sum/sumifs.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/summation-utils.cjs +19 -9
- package/dist/cjs/functions/math/sum/summation-utils.cjs.map +2 -2
- package/dist/cjs/functions/reference/address/address.cjs +19 -9
- package/dist/cjs/functions/reference/address/address.cjs.map +2 -2
- package/dist/cjs/functions/reference/indirect/indirect.cjs +19 -9
- package/dist/cjs/functions/reference/indirect/indirect.cjs.map +2 -2
- package/dist/cjs/functions/reference/offset/offset.cjs +19 -9
- package/dist/cjs/functions/reference/offset/offset.cjs.map +2 -2
- package/dist/cjs/functions/text/concatenate/concatenate.cjs +21 -9
- package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +3 -3
- package/dist/cjs/functions/text/exact/exact.cjs +19 -9
- package/dist/cjs/functions/text/exact/exact.cjs.map +2 -2
- package/dist/cjs/functions/text/find/find.cjs +19 -9
- package/dist/cjs/functions/text/find/find.cjs.map +2 -2
- package/dist/cjs/functions/text/left/left.cjs +19 -9
- package/dist/cjs/functions/text/left/left.cjs.map +2 -2
- package/dist/cjs/functions/text/len/len.cjs +19 -9
- package/dist/cjs/functions/text/len/len.cjs.map +2 -2
- package/dist/cjs/functions/text/mid/mid.cjs +19 -9
- package/dist/cjs/functions/text/mid/mid.cjs.map +2 -2
- package/dist/cjs/functions/text/right/right.cjs +19 -9
- package/dist/cjs/functions/text/right/right.cjs.map +2 -2
- package/dist/cjs/functions/text/text-helpers.cjs +19 -9
- package/dist/cjs/functions/text/text-helpers.cjs.map +2 -2
- package/dist/cjs/functions/text/textjoin/textjoin.cjs +19 -9
- package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +2 -2
- package/dist/cjs/lib.cjs +24 -13
- package/dist/cjs/lib.cjs.map +2 -2
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/parser/ast.cjs +19 -9
- package/dist/cjs/parser/ast.cjs.map +2 -2
- package/dist/cjs/parser/formatter.cjs +19 -9
- package/dist/cjs/parser/formatter.cjs.map +2 -2
- package/dist/cjs/parser/grammar.cjs +19 -9
- package/dist/cjs/parser/grammar.cjs.map +2 -2
- package/dist/cjs/parser/lexer.cjs +19 -9
- package/dist/cjs/parser/lexer.cjs.map +2 -2
- package/dist/cjs/parser/parser.cjs +19 -9
- package/dist/cjs/parser/parser.cjs.map +2 -2
- package/dist/cjs/react/hooks.cjs +31 -10
- package/dist/cjs/react/hooks.cjs.map +2 -2
- package/dist/mjs/core/commands/command-executor.mjs +7 -5
- package/dist/mjs/core/commands/command-executor.mjs.map +3 -3
- package/dist/mjs/core/commands/content-commands.mjs +279 -2
- package/dist/mjs/core/commands/content-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/named-expression-commands.mjs +121 -6
- package/dist/mjs/core/commands/named-expression-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/structure-commands.mjs +204 -8
- package/dist/mjs/core/commands/structure-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/table-commands.mjs +117 -6
- package/dist/mjs/core/commands/table-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/types.mjs +18 -1
- package/dist/mjs/core/commands/types.mjs.map +3 -3
- package/dist/mjs/core/engine-snapshot.mjs +11 -0
- package/dist/mjs/core/engine-snapshot.mjs.map +10 -0
- package/dist/mjs/core/engine.mjs +35 -26
- package/dist/mjs/core/engine.mjs.map +3 -3
- package/dist/mjs/core/managers/cache-manager.mjs +105 -1
- package/dist/mjs/core/managers/cache-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/dependency-manager.mjs +687 -2
- package/dist/mjs/core/managers/dependency-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/evaluation-manager.mjs +283 -4
- package/dist/mjs/core/managers/evaluation-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs +47 -4
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/named-expression-manager.mjs +104 -21
- package/dist/mjs/core/managers/named-expression-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/reference-manager.mjs +7 -1
- package/dist/mjs/core/managers/reference-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/style-manager.mjs +10 -1
- package/dist/mjs/core/managers/style-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/table-manager.mjs +14 -4
- package/dist/mjs/core/managers/table-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/workbook-manager.mjs +20 -5
- package/dist/mjs/core/managers/workbook-manager.mjs.map +3 -3
- package/dist/mjs/core/resource-keys.mjs +27 -0
- package/dist/mjs/core/resource-keys.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +17 -1
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +4 -1
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +17 -3
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs +21 -0
- package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs +4 -1
- package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs.map +3 -3
- package/dist/mjs/evaluator/formula-evaluator.mjs +42 -4
- package/dist/mjs/evaluator/formula-evaluator.mjs.map +3 -3
- package/dist/mjs/evaluator/range-evaluation-node.mjs +17 -3
- package/dist/mjs/evaluator/range-evaluation-node.mjs.map +3 -3
- package/dist/mjs/functions/lookup/match/match.mjs +3 -2
- package/dist/mjs/functions/lookup/match/match.mjs.map +3 -3
- package/dist/mjs/functions/text/concatenate/concatenate.mjs +3 -1
- package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/types/core/commands/content-commands.d.ts +31 -1
- package/dist/types/core/commands/named-expression-commands.d.ts +16 -1
- package/dist/types/core/commands/structure-commands.d.ts +24 -1
- package/dist/types/core/commands/table-commands.d.ts +16 -1
- package/dist/types/core/commands/types.d.ts +25 -1
- package/dist/types/core/engine-snapshot.d.ts +138 -0
- package/dist/types/core/engine.d.ts +1 -0
- package/dist/types/core/managers/cache-manager.d.ts +9 -0
- package/dist/types/core/managers/dependency-manager.d.ts +56 -1
- package/dist/types/core/managers/dependency-node.d.ts +2 -1
- package/dist/types/core/managers/evaluation-manager.d.ts +21 -1
- package/dist/types/core/managers/frontier-dependency-manager.d.ts +12 -2
- package/dist/types/core/managers/named-expression-manager.d.ts +17 -1
- package/dist/types/core/managers/reference-manager.d.ts +3 -0
- package/dist/types/core/managers/style-manager.d.ts +3 -0
- package/dist/types/core/managers/table-manager.d.ts +3 -0
- package/dist/types/core/managers/workbook-manager.d.ts +4 -1
- package/dist/types/core/resource-keys.d.ts +14 -0
- package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +5 -0
- package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +1 -0
- package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +8 -1
- package/dist/types/evaluator/dependency-nodes/resource-dependency-node.d.ts +8 -0
- package/dist/types/evaluator/dependency-nodes/virtual-cell-value-node.d.ts +1 -0
- package/dist/types/evaluator/range-evaluation-node.d.ts +8 -1
- package/package.json +6 -2
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/core/managers/table-manager.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.cjs\";\nimport { checkRangeIntersection, getCellReference, parseCellReference } from \"../utils.cjs\";\nimport type { WorkbookManager } from \"./workbook-manager.cjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n }\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string }\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
|
|
5
|
+
"import type {\n CellAddress,\n SerializedCellValue,\n SpreadsheetRange,\n SpreadsheetRangeEnd,\n TableDefinition,\n} from \"../types.cjs\";\nimport type { TableManagerSnapshot } from \"../engine-snapshot.cjs\";\nimport {\n checkRangeIntersection,\n getCellReference,\n parseCellReference,\n} from \"../utils.cjs\";\nimport type { WorkbookManager } from \"./workbook-manager.cjs\";\n\nexport class TableManager {\n tables: Map<\n /**\n * workbook name -> table name -> table definition\n */\n string,\n Map<string, TableDefinition>\n > = new Map();\n private workbookManager: WorkbookManager;\n\n constructor(workbookManager: WorkbookManager) {\n this.workbookManager = workbookManager;\n }\n\n getTables(workbookName: string): Map<string, TableDefinition> {\n return this.tables.get(workbookName) ?? new Map();\n }\n\n getTable(opts: {\n workbookName: string;\n name: string;\n }): TableDefinition | undefined {\n return this.tables.get(opts.workbookName)?.get(opts.name);\n }\n\n makeTable({\n tableName,\n sheetName,\n workbookName,\n start,\n numRows,\n numCols,\n getCellValue,\n }: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const { rowIndex, colIndex } = parseCellReference(start);\n\n const headers = new Map<string, { name: string; index: number }>();\n for (let i = 0; i < numCols; i++) {\n const header = getCellValue({\n rowIndex,\n colIndex: colIndex + i,\n sheetName,\n workbookName,\n });\n\n if (header) {\n headers.set(String(header), { name: String(header), index: i });\n } else {\n headers.set(`Column ${i + 1}`, { name: `Column ${i + 1}`, index: i });\n }\n }\n\n const endRow: SpreadsheetRangeEnd =\n numRows.type === \"number\"\n ? { type: \"number\", value: rowIndex + numRows.value }\n : numRows;\n\n const table: TableDefinition = {\n name: tableName,\n sheetName,\n workbookName,\n start: {\n rowIndex,\n colIndex,\n },\n headers,\n endRow,\n };\n\n return table;\n }\n\n copyTable(\n from: {\n workbookName: string;\n tableName: string;\n },\n to: {\n workbookName: string;\n tableName: string;\n },\n ): void {\n const fromTable = this.getTable({\n workbookName: from.workbookName,\n name: from.tableName,\n });\n if (!fromTable) {\n throw new Error(\"Table not found\");\n }\n const wb = this.tables.get(to.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const newTable: TableDefinition = {\n ...fromTable,\n workbookName: to.workbookName,\n };\n wb.set(to.tableName, newTable);\n }\n\n addTable(props: {\n tableName: string;\n sheetName: string;\n start: string;\n numRows: SpreadsheetRangeEnd;\n numCols: number;\n workbookName: string;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): TableDefinition {\n const tableName = props.tableName;\n const table = this.makeTable(props);\n\n let wb = this.tables.get(props.workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(props.workbookName, wb);\n }\n\n wb.set(tableName, table);\n\n return table;\n }\n\n renameTable(\n workbookName: string,\n names: { oldName: string; newName: string },\n ): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n const table = wb.get(names.oldName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n table.name = names.newName;\n wb.set(names.newName, table);\n wb.delete(names.oldName);\n }\n\n updateTable({\n tableName,\n sheetName,\n start,\n numRows,\n numCols,\n workbookName,\n getCellValue,\n }: {\n tableName: string;\n sheetName?: string;\n start?: string;\n numRows?: SpreadsheetRangeEnd;\n workbookName: string;\n numCols?: number;\n getCellValue: (cellAddress: CellAddress) => SerializedCellValue;\n }): void {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n\n const table = wb.get(tableName);\n if (!table) {\n throw new Error(\"Table not found\");\n }\n\n const newStart = start ? parseCellReference(start) : table.start;\n\n let newNumRows: SpreadsheetRangeEnd;\n if (numRows) {\n newNumRows = numRows;\n } else {\n if (table.endRow.type === \"infinity\") {\n newNumRows = table.endRow;\n } else {\n newNumRows = {\n type: \"number\",\n value: table.endRow.value - newStart.rowIndex,\n };\n }\n }\n\n const newTable = this.makeTable({\n tableName,\n sheetName: sheetName ?? table.sheetName,\n workbookName: workbookName ?? table.workbookName,\n start: getCellReference(newStart),\n numRows: newNumRows,\n numCols: numCols ?? table.headers.size,\n getCellValue,\n });\n\n wb.set(tableName, newTable);\n }\n\n removeTable({\n tableName,\n workbookName,\n }: {\n tableName: string;\n workbookName: string;\n }): boolean {\n const wb = this.tables.get(workbookName);\n if (!wb) {\n return false;\n }\n const found = wb.delete(tableName);\n\n return found;\n }\n\n updateTablesForSheetRename(options: {\n sheetName: string;\n newSheetName: string;\n workbookName: string;\n }): void {\n // Update tables that belong to the renamed sheet\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n\n wb.forEach((table) => {\n if (table.sheetName === options.sheetName) {\n table.sheetName = options.newSheetName;\n }\n });\n }\n\n updateTablesForWorkbookRename(options: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const wb = this.tables.get(options.workbookName);\n if (!wb) {\n // No tables exist for this workbook yet — nothing to update\n return;\n }\n this.tables.set(options.newWorkbookName, wb);\n this.tables.delete(options.workbookName);\n // Update tables that belong to the renamed sheet\n wb.forEach((table, tableName) => {\n if (table.workbookName === options.workbookName) {\n table.workbookName = options.newWorkbookName;\n }\n });\n }\n\n resetTables(newTables: Map<string, Map<string, TableDefinition>>): void {\n // Clear existing tables without breaking the Map reference\n this.tables.clear();\n\n // Repopulate with new tables\n newTables.forEach((table, workbookName) => {\n table.forEach((table, tableName) => {\n let wb = this.tables.get(workbookName);\n if (!wb) {\n wb = new Map();\n this.tables.set(workbookName, wb);\n }\n wb.set(tableName, table);\n });\n });\n }\n\n toSnapshot(): TableManagerSnapshot {\n return this.tables;\n }\n\n restoreFromSnapshot(snapshot: TableManagerSnapshot): void {\n this.resetTables(snapshot);\n }\n\n /**\n * When adding a workbook, we need to initialize the new maps\n */\n addWorkbook(workbookName: string) {\n this.tables.set(workbookName, new Map());\n }\n\n /**\n * When removing a workbook, we need to remove the maps\n */\n removeWorkbook(workbookName: string) {\n this.tables.delete(workbookName);\n }\n\n /**\n * When removing a sheet, we need to remove the tables that belong to the sheet\n */\n removeSheet(opts: { sheetName: string; workbookName: string }): void {\n // Remove tables that belong to the removed sheet\n const wb = this.tables.get(opts.workbookName);\n if (!wb) {\n throw new Error(\"Workbook not found\");\n }\n wb.forEach((table, tableName) => {\n if (table.sheetName === opts.sheetName) {\n wb.delete(tableName);\n }\n });\n }\n\n isCellInTable(cellAddress: CellAddress): TableDefinition | undefined {\n const { rowIndex, colIndex } = cellAddress;\n\n // Get all tables for this sheet\n\n for (const table of this.getTables(cellAddress.workbookName).values()) {\n // Check each table to see if the cell is within its bounds\n if (table.sheetName !== cellAddress.sheetName) {\n continue;\n }\n\n const { start, endRow, headers } = table;\n\n // Check row bounds\n const isInRowRange =\n endRow.type === \"infinity\"\n ? rowIndex >= start.rowIndex\n : rowIndex >= start.rowIndex && rowIndex <= endRow.value;\n\n // Check column bounds\n const endColIndex = start.colIndex + headers.size - 1;\n const isInColRange =\n colIndex >= start.colIndex && colIndex <= endColIndex;\n\n if (isInRowRange && isInColRange) {\n return table;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if a range intersects with any table in the given workbook/sheet.\n * Used to prevent spilling into tables (Excel behavior).\n */\n doesRangeIntersectTable(\n workbookName: string,\n sheetName: string,\n range: SpreadsheetRange,\n ): boolean {\n for (const table of this.getTables(workbookName).values()) {\n if (table.sheetName !== sheetName) {\n continue;\n }\n\n // Build the table's range\n const { start, endRow, headers } = table;\n const endColIndex = start.colIndex + headers.size - 1;\n\n const tableRange: SpreadsheetRange = {\n start: { col: start.colIndex, row: start.rowIndex },\n end: {\n col: { type: \"number\", value: endColIndex },\n row: endRow,\n },\n };\n\n if (checkRangeIntersection(range, tableRange)) {\n return true;\n }\n }\n\n return false;\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "97499A6596939B4B64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -176,6 +186,12 @@ class WorkbookManager {
|
|
|
176
186
|
});
|
|
177
187
|
});
|
|
178
188
|
}
|
|
189
|
+
toSnapshot() {
|
|
190
|
+
return this.getWorkbooks();
|
|
191
|
+
}
|
|
192
|
+
restoreFromSnapshot(snapshot) {
|
|
193
|
+
this.resetWorkbooks(snapshot);
|
|
194
|
+
}
|
|
179
195
|
getSheet({
|
|
180
196
|
workbookName,
|
|
181
197
|
sheetName
|
|
@@ -252,22 +268,31 @@ class WorkbookManager {
|
|
|
252
268
|
return sheet;
|
|
253
269
|
}
|
|
254
270
|
updateAllFormulas(updateCallback) {
|
|
255
|
-
const
|
|
256
|
-
|
|
271
|
+
const changed = [];
|
|
272
|
+
const update = (workbookName, map) => {
|
|
273
|
+
map.forEach((sheet, sheetName) => {
|
|
257
274
|
sheet.content.forEach((cell, key) => {
|
|
258
275
|
if (typeof cell === "string" && cell.startsWith("=")) {
|
|
259
276
|
const formula = cell.slice(1);
|
|
260
277
|
const updatedFormula = updateCallback(formula);
|
|
261
278
|
if (updatedFormula !== formula) {
|
|
262
279
|
sheet.content.set(key, `=${updatedFormula}`);
|
|
280
|
+
const { colIndex, rowIndex } = import_utils.parseCellReference(key);
|
|
281
|
+
changed.push({
|
|
282
|
+
workbookName,
|
|
283
|
+
sheetName,
|
|
284
|
+
colIndex,
|
|
285
|
+
rowIndex
|
|
286
|
+
});
|
|
263
287
|
}
|
|
264
288
|
}
|
|
265
289
|
});
|
|
266
290
|
});
|
|
267
291
|
};
|
|
268
|
-
this.workbooks.forEach((workbook) => {
|
|
269
|
-
update(workbook.sheets);
|
|
292
|
+
this.workbooks.forEach((workbook, workbookName) => {
|
|
293
|
+
update(workbookName, workbook.sheets);
|
|
270
294
|
});
|
|
295
|
+
return changed;
|
|
271
296
|
}
|
|
272
297
|
updateFormulasExcluding(excludeCellsSet, updateCallback) {
|
|
273
298
|
this.workbooks.forEach((workbook, workbookName) => {
|
|
@@ -572,4 +597,4 @@ class WorkbookManager {
|
|
|
572
597
|
}
|
|
573
598
|
}
|
|
574
599
|
|
|
575
|
-
//# debugId=
|
|
600
|
+
//# debugId=4EC38A5B2878AB0064756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/core/managers/workbook-manager.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n FormulaError,\n type CellAddress,\n type FiniteSpreadsheetRange,\n type LocalCellAddress,\n type SerializedCellValue,\n type Sheet,\n type SpreadsheetRange,\n type Workbook,\n} from \"../types.cjs\";\nimport { getCellReference, parseCellReference } from \"../utils.cjs\";\n\nimport type { RangeAddress } from \"../types.cjs\";\nimport { buildRangeEvalOrder } from \"./range-eval-order-builder.cjs\";\nimport {\n EvaluationError,\n SheetNotFoundError,\n WorkbookNotFoundError,\n} from \"../../evaluator/evaluation-error.cjs\";\nimport { normalizeSerializedCellValue } from \"../../parser/formatter.cjs\";\n\ninterface IndexEntry {\n number: number;\n key: string;\n}\n\nexport interface SheetIndexes {\n // lookup maps - cells grouped by row/column\n rowGroups: Map<number, IndexEntry[]>; // row number -> cells in that row (sorted by col)\n colGroups: Map<number, IndexEntry[]>; // col number -> cells in that col (sorted by row)\n\n // Sorted flat indexes - for finding cells before a given row/col\n cellsSortedByRow: IndexEntry[];\n cellsSortedByCol: IndexEntry[];\n}\n\n/**\n * Utility class for binary search operations on IndexEntry arrays\n */\nexport class IndexEntryBinarySearch {\n /**\n * Find the insertion point for a number in a sorted IndexEntry array\n * Returns the index where the number should be inserted to maintain sort order\n */\n static findInsertionPoint(entries: IndexEntry[], target: number): number {\n let left = 0;\n let right = entries.length;\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n const midEntry = entries[mid];\n if (midEntry && midEntry.number < target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n\n return left;\n }\n\n /**\n * Find the first element >= target\n * Returns the index of the first element, or -1 if not found\n */\n static findFirstGreaterOrEqual(\n entries: IndexEntry[],\n target: number\n ): number {\n if (entries.length === 0) return -1;\n\n let left = 0;\n let right = entries.length - 1;\n let result = -1;\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const midEntry = entries[mid];\n if (midEntry && midEntry.number >= target) {\n result = mid;\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return result;\n }\n\n /**\n * Find the rightmost position where we could insert a target value\n * Useful for finding elements that come before a target\n */\n static findRightmostInsertionPoint(\n entries: IndexEntry[],\n target: number\n ): number {\n return IndexEntryBinarySearch.findInsertionPoint(entries, target);\n }\n}\n\nexport class WorkbookManager {\n private workbooks: Map<string, Workbook> = new Map();\n\n // Map from \"workbookName|sheetName\" to indexes\n private sheetIndexes: Map<string, SheetIndexes> = new Map();\n\n /**\n * Generate a key for the sheet indexes map\n */\n private getSheetIndexKey(workbookName: string, sheetName: string): string {\n return `${workbookName}|${sheetName}`;\n }\n\n /**\n * Get or create indexes for a sheet\n */\n public getSheetIndexes(opts: {\n workbookName: string;\n sheetName: string;\n }): SheetIndexes {\n const key = this.getSheetIndexKey(opts.workbookName, opts.sheetName);\n let indexes = this.sheetIndexes.get(key);\n\n if (!indexes) {\n indexes = {\n rowGroups: new Map(),\n colGroups: new Map(),\n cellsSortedByRow: [],\n cellsSortedByCol: [],\n };\n this.sheetIndexes.set(key, indexes);\n }\n\n return indexes;\n }\n\n getSheets(workbookName: string): Map<string, Sheet> {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n return workbook.sheets;\n }\n\n getWorkbooks(): Map<string, Workbook> {\n return this.workbooks;\n }\n\n addWorkbook(workbookName: string): void {\n if (this.workbooks.has(workbookName)) {\n throw new Error(\"Workbook already exists\");\n }\n this.workbooks.set(workbookName, {\n name: workbookName,\n sheets: new Map(),\n workbookMetadata: undefined,\n });\n }\n\n removeWorkbook(workbookName: string): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n\n // Clean up indexes for all sheets in this workbook\n for (const sheetName of workbook.sheets.keys()) {\n const key = this.getSheetIndexKey(workbookName, sheetName);\n this.sheetIndexes.delete(key);\n }\n\n this.workbooks.delete(workbookName);\n }\n\n isContentEmpty(content: SerializedCellValue): boolean {\n return content === \"\" || content === undefined;\n }\n\n renameWorkbook(opts: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const workbook = this.workbooks.get(opts.workbookName);\n if (!workbook) {\n throw new Error(\"Workbook not found\");\n }\n\n // Update indexes for all sheets in this workbook\n for (const sheetName of workbook.sheets.keys()) {\n const oldKey = this.getSheetIndexKey(opts.workbookName, sheetName);\n const newKey = this.getSheetIndexKey(opts.newWorkbookName, sheetName);\n const indexes = this.sheetIndexes.get(oldKey);\n if (indexes) {\n this.sheetIndexes.set(newKey, indexes);\n this.sheetIndexes.delete(oldKey);\n }\n }\n\n this.workbooks.set(opts.newWorkbookName, workbook);\n this.workbooks.delete(opts.workbookName);\n workbook.name = opts.newWorkbookName;\n }\n\n resetWorkbooks(workbooks: Map<string, Workbook>): void {\n this.workbooks.clear();\n this.sheetIndexes.clear();\n\n workbooks.forEach((workbook, workbookName) => {\n this.workbooks.set(workbookName, workbook);\n workbook.sheets.forEach((sheet) => {\n // Initialize indexes for this sheet\n const indexes = this.getSheetIndexes({\n workbookName,\n sheetName: sheet.name,\n });\n indexes.rowGroups.clear();\n indexes.colGroups.clear();\n indexes.cellsSortedByRow = [];\n indexes.cellsSortedByCol = [];\n\n sheet.content.forEach((value, key) => {\n this.setCellContent(\n {\n workbookName,\n sheetName: sheet.name,\n colIndex: parseCellReference(key).colIndex,\n rowIndex: parseCellReference(key).rowIndex,\n },\n value,\n {\n sheet,\n buildingFromScratch: true,\n }\n );\n });\n });\n });\n }\n\n getSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet | undefined {\n const workbook = this.workbooks.get(workbookName);\n const sheet = workbook?.sheets.get(sheetName);\n return sheet;\n }\n\n addSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = {\n name: sheetName,\n index: workbook.sheets.size,\n content: new Map(),\n metadata: new Map(),\n sheetMetadata: undefined,\n };\n\n if (workbook.sheets.has(sheet.name)) {\n throw new Error(\"Sheet already exists\");\n }\n\n workbook.sheets.set(sheetName, sheet);\n\n // Initialize empty indexes for this sheet\n this.getSheetIndexes({ workbookName, sheetName });\n\n return sheet;\n }\n\n removeSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new Error(\"Sheet not found\");\n }\n\n // Remove the sheet\n workbook.sheets.delete(sheetName);\n\n // Clean up indexes for this sheet\n const key = this.getSheetIndexKey(workbookName, sheetName);\n this.sheetIndexes.delete(key);\n\n return sheet;\n }\n\n renameSheet({\n workbookName,\n sheetName,\n newSheetName,\n }: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new SheetNotFoundError(sheetName);\n }\n\n if (workbook.sheets.has(newSheetName)) {\n throw new Error(\"Sheet with new name already exists\");\n }\n\n // Update sheet name\n sheet.name = newSheetName;\n\n // Update sheets map\n workbook.sheets.set(newSheetName, sheet);\n workbook.sheets.delete(sheetName);\n\n // Move indexes to new key\n const oldKey = this.getSheetIndexKey(workbookName, sheetName);\n const newKey = this.getSheetIndexKey(workbookName, newSheetName);\n const indexes = this.sheetIndexes.get(oldKey);\n if (indexes) {\n this.sheetIndexes.set(newKey, indexes);\n this.sheetIndexes.delete(oldKey);\n }\n\n return sheet;\n }\n\n updateAllFormulas(updateCallback: (formula: string) => string): void {\n const update = (map: Map<string, Sheet>) => {\n map.forEach((sheet) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n }\n }\n });\n });\n };\n\n this.workbooks.forEach((workbook) => {\n update(workbook.sheets);\n });\n }\n\n updateFormulasExcluding(\n excludeCellsSet: Set<string>,\n updateCallback: (formula: string) => string\n ): void {\n this.workbooks.forEach((workbook, workbookName) => {\n workbook.sheets.forEach((sheet, sheetName) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const { colIndex, rowIndex } = parseCellReference(key);\n const cellKey = `${workbookName}:${sheetName}:${colIndex}:${rowIndex}`;\n \n // Skip if this cell is in the exclude set\n if (excludeCellsSet.has(cellKey)) {\n return;\n }\n\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n }\n }\n });\n });\n });\n }\n\n updateFormulasForWorkbook(\n workbookName: string,\n updateCallback: (formula: string) => string\n ): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n\n workbook.sheets.forEach((sheet) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n }\n }\n });\n });\n }\n\n getSheetSerialized({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Map<string, SerializedCellValue> {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new SheetNotFoundError(sheetName);\n }\n\n return sheet.content;\n }\n\n /**\n * Add a cell to the grouped indexes\n */\n private addCellToGroups(\n indexes: SheetIndexes,\n rowIndex: number,\n colIndex: number,\n key: string\n ): void {\n // Add to row group (cells in this row, sorted by column)\n let rowGroup = indexes.rowGroups.get(rowIndex);\n if (!rowGroup) {\n rowGroup = [];\n indexes.rowGroups.set(rowIndex, rowGroup);\n }\n const colEntry: IndexEntry = { number: colIndex, key };\n const colInsertIdx = this.findInsertIndex(rowGroup, colIndex);\n rowGroup.splice(colInsertIdx, 0, colEntry);\n\n // Add to column group (cells in this column, sorted by row)\n let colGroup = indexes.colGroups.get(colIndex);\n if (!colGroup) {\n colGroup = [];\n indexes.colGroups.set(colIndex, colGroup);\n }\n const rowEntry: IndexEntry = { number: rowIndex, key };\n const rowInsertIdx = this.findInsertIndex(colGroup, rowIndex);\n colGroup.splice(rowInsertIdx, 0, rowEntry);\n\n // Add to sorted flat indexes\n this.insertSorted(indexes.cellsSortedByRow, { number: rowIndex, key });\n this.insertSorted(indexes.cellsSortedByCol, { number: colIndex, key });\n }\n\n /**\n * Remove a cell from the grouped indexes\n */\n private removeCellFromGroups(\n indexes: SheetIndexes,\n rowIndex: number,\n colIndex: number,\n key: string\n ): void {\n // Remove from row group\n const rowGroup = indexes.rowGroups.get(rowIndex);\n if (rowGroup) {\n const filteredGroup = rowGroup.filter((e) => e.key !== key);\n if (filteredGroup.length === 0) {\n indexes.rowGroups.delete(rowIndex);\n } else {\n indexes.rowGroups.set(rowIndex, filteredGroup);\n }\n }\n\n // Remove from column group\n const colGroup = indexes.colGroups.get(colIndex);\n if (colGroup) {\n const filteredGroup = colGroup.filter((e) => e.key !== key);\n if (filteredGroup.length === 0) {\n indexes.colGroups.delete(colIndex);\n } else {\n indexes.colGroups.set(colIndex, filteredGroup);\n }\n }\n\n // Remove from sorted flat indexes\n indexes.cellsSortedByRow = indexes.cellsSortedByRow.filter(\n (item) => item.key !== key\n );\n indexes.cellsSortedByCol = indexes.cellsSortedByCol.filter(\n (item) => item.key !== key\n );\n }\n\n /**\n * Find insertion index in sorted array\n */\n private findInsertIndex(entries: IndexEntry[], n: number): number {\n return IndexEntryBinarySearch.findInsertionPoint(entries, n);\n }\n\n /**\n * Inserts an item into a sorted array by number, maintaining sort order.\n * If an item with the same number and key already exists, it won't be added again.\n */\n private insertSorted(array: IndexEntry[], item: IndexEntry): void {\n // Check if item already exists (same number and key)\n const existingIndex = array.findIndex(\n (existing) => existing.number === item.number && existing.key === item.key\n );\n\n if (existingIndex !== -1) {\n // Item already exists, no need to add it again\n return;\n }\n\n // Find the insertion point using binary search for efficiency\n const insertionPoint = IndexEntryBinarySearch.findInsertionPoint(\n array,\n item.number\n );\n\n // Insert at the found position\n array.splice(insertionPoint, 0, item);\n }\n\n setCellContent(\n address: CellAddress,\n content: SerializedCellValue,\n options?: {\n /**\n * for extra performance, if the sheet is already known, it can be passed in\n */\n sheet?: Sheet;\n /**\n * if the sheet is being built from scratch, we can skip some checks\n */\n buildingFromScratch?: boolean;\n }\n ): void {\n const sheet =\n options?.sheet ||\n this.getSheet({\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n });\n\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const indexes = this.getSheetIndexes({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n const adr = getCellReference(address);\n\n if (this.isContentEmpty(content)) {\n if (!options?.buildingFromScratch) {\n sheet.content.delete(adr);\n // Remove from all indexes\n this.removeCellFromGroups(\n indexes,\n address.rowIndex,\n address.colIndex,\n adr\n );\n }\n } else {\n sheet.content.set(adr, content);\n // Add to all indexes\n this.addCellToGroups(indexes, address.rowIndex, address.colIndex, adr);\n }\n }\n\n /**\n * Set metadata for a cell\n */\n setCellMetadata<TMetadata = unknown>(address: CellAddress, metadata: TMetadata | undefined): void {\n const sheet = this.getSheet({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const key = getCellReference(address);\n if (metadata === undefined) {\n sheet.metadata.delete(key);\n } else {\n sheet.metadata.set(key, metadata);\n }\n }\n\n /**\n * Get metadata for a cell\n */\n getCellMetadata<TMetadata = unknown>(address: CellAddress): TMetadata | undefined {\n const sheet = this.getSheet({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n if (!sheet) {\n return undefined;\n }\n\n const key = getCellReference(address);\n return sheet.metadata.get(key) as TMetadata | undefined;\n }\n\n /**\n * Get all metadata for a sheet\n */\n getSheetMetadataSerialized<TMetadata = unknown>(opts: {\n sheetName: string;\n workbookName: string;\n }): Map<string, TMetadata> {\n const sheet = this.getSheet(opts);\n return sheet?.metadata || new Map();\n }\n\n /**\n * Set metadata for a sheet\n */\n setSheetMetadata<TSheetMetadata = unknown>(\n opts: { workbookName: string; sheetName: string },\n metadata: TSheetMetadata\n ): void {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n throw new SheetNotFoundError(opts.sheetName);\n }\n sheet.sheetMetadata = metadata;\n }\n\n /**\n * Get metadata for a sheet\n */\n getSheetMetadata<TSheetMetadata = unknown>(\n opts: { workbookName: string; sheetName: string }\n ): TSheetMetadata | undefined {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n return undefined;\n }\n return sheet.sheetMetadata as TSheetMetadata | undefined;\n }\n\n /**\n * Set metadata for a workbook\n */\n setWorkbookMetadata<TWorkbookMetadata = unknown>(\n workbookName: string,\n metadata: TWorkbookMetadata\n ): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new Error(`Workbook \"${workbookName}\" not found`);\n }\n workbook.workbookMetadata = metadata;\n }\n\n /**\n * Get metadata for a workbook\n */\n getWorkbookMetadata<TWorkbookMetadata = unknown>(\n workbookName: string\n ): TWorkbookMetadata | undefined {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n return undefined;\n }\n return workbook.workbookMetadata as TWorkbookMetadata | undefined;\n }\n\n /**\n * Replace all content for a sheet (safely, without breaking references)\n * This method clears the existing Map and repopulates it rather than replacing the Map reference\n */\n setSheetContent(\n opts: { sheetName: string; workbookName: string },\n newContent: Map<string, SerializedCellValue>\n ): void {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n throw new SheetNotFoundError(opts.sheetName);\n }\n\n // Clear existing content without breaking the Map reference\n sheet.content.clear();\n\n // Clean up indexes for this sheet\n const key = this.getSheetIndexKey(opts.workbookName, opts.sheetName);\n this.sheetIndexes.delete(key);\n\n // Repopulate with new content\n newContent.forEach((value, key) => {\n this.setCellContent(\n {\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n colIndex: parseCellReference(key).colIndex,\n rowIndex: parseCellReference(key).rowIndex,\n },\n value,\n {\n sheet,\n buildingFromScratch: true,\n }\n );\n });\n }\n\n /**\n * Removes the content in the spreadsheet that is inside the range.\n * OPTIMIZED: Uses indexes to only process cells that actually exist.\n * ENHANCED: Now supports infinite ranges.\n */\n clearSpreadsheetRange(address: RangeAddress) {\n const sheet = this.getSheet(address);\n\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n // Get current sheet content and prepare new content with cleared cells\n const newContent = new Map(sheet.content);\n const newMetadata = new Map(sheet.metadata);\n\n // Use iterateCellsInRange to only process cells that actually exist\n // This handles both finite and infinite ranges efficiently\n for (const cellAddress of this.iterateCellsInRange(address)) {\n const cellRef = getCellReference(cellAddress);\n\n // Remove from content and metadata\n newContent.delete(cellRef);\n newMetadata.delete(cellRef);\n }\n\n // Update content\n this.setSheetContent(address, newContent);\n \n // Update metadata\n sheet.metadata = newMetadata;\n }\n\n /**\n * Optimized generator to iterate over cells defined in the content within a range\n * Uses indexes to efficiently find and yield only cells that exist within the range\n */\n *iterateCellsInRange(address: RangeAddress): Generator<CellAddress> {\n // First check if the sheet exists\n const sheet = this.getSheet(address);\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const indexes = this.getSheetIndexes(address);\n\n const range = address.range;\n\n // Use the sorted index to find only rows that actually contain cells\n // This avoids iterating through empty rows regardless of finite/infinite bounds\n\n if (range.end.row.type === \"number\") {\n // Finite bounds: Use binary search to find the range of cells to check\n const startIndex = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n indexes.cellsSortedByRow,\n range.start.row\n );\n\n if (startIndex === -1) return; // No cells at or after start row\n\n // Process cells from startIndex until we exceed the end row\n for (let i = startIndex; i < indexes.cellsSortedByRow.length; i++) {\n const cellEntry = indexes.cellsSortedByRow[i];\n if (!cellEntry) continue;\n\n const parsed = parseCellReference(cellEntry.key);\n\n // Stop if we've gone beyond the row range\n if (parsed.rowIndex > range.end.row.value) break;\n\n // Check if cell is within column bounds\n if (parsed.colIndex < range.start.col) continue;\n\n if (\n range.end.col.type === \"number\" &&\n parsed.colIndex > range.end.col.value\n ) {\n continue; // Skip this cell but keep checking others in different rows\n }\n\n yield {\n rowIndex: parsed.rowIndex,\n colIndex: parsed.colIndex,\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n };\n }\n } else {\n // Infinite row bounds: Use binary search to find starting point\n const startIndex = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n indexes.cellsSortedByRow,\n range.start.row\n );\n\n if (startIndex === -1) return; // No cells at or after start row\n\n // Process all cells from startIndex to end\n for (let i = startIndex; i < indexes.cellsSortedByRow.length; i++) {\n const cellEntry = indexes.cellsSortedByRow[i];\n if (!cellEntry) continue;\n\n const parsed = parseCellReference(cellEntry.key);\n\n // Check if cell is within column bounds\n if (parsed.colIndex < range.start.col) continue;\n\n if (\n range.end.col.type === \"number\" &&\n parsed.colIndex > range.end.col.value\n ) {\n continue; // Skip this cell but keep checking others in different rows\n }\n\n yield {\n rowIndex: parsed.rowIndex,\n colIndex: parsed.colIndex,\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n };\n }\n }\n }\n\n getCellsInRange(address: RangeAddress): CellAddress[] {\n return Array.from(this.iterateCellsInRange(address));\n }\n\n public getCellContent(cellAddress: CellAddress): SerializedCellValue {\n const sheet = this.getSheet(cellAddress);\n if (!sheet) {\n throw new SheetNotFoundError(cellAddress.sheetName);\n }\n return sheet.content.get(getCellReference(cellAddress));\n }\n\n public getSerializedCellValue(cellAddress: CellAddress): SerializedCellValue {\n const sheet = this.getSheet(cellAddress);\n if (!sheet) {\n throw new SheetNotFoundError(cellAddress.sheetName);\n }\n return normalizeSerializedCellValue(\n sheet.content.get(getCellReference(cellAddress))\n );\n }\n\n public isCellEmpty(cellAddress: CellAddress): boolean {\n const content = this.getCellContent(cellAddress);\n return (\n content === undefined || (typeof content === \"string\" && content === \"\")\n );\n }\n public isFormulaCell(cellAddress: CellAddress): boolean {\n const content = this.getCellContent(cellAddress);\n return typeof content === \"string\" && content.startsWith(\"=\");\n }\n\n /**\n * Build evaluation order for a range\n * Delegates to the buildRangeEvalOrder function\n */\n public buildRangeEvalOrder(\n lookupOrder: \"row-major\" | \"col-major\",\n lookupRange: RangeAddress\n ) {\n // Import and call the function\n return buildRangeEvalOrder.call(this, lookupOrder, lookupRange);\n }\n}\n"
|
|
5
|
+
"import {\n FormulaError,\n type CellAddress,\n type FiniteSpreadsheetRange,\n type LocalCellAddress,\n type SerializedCellValue,\n type Sheet,\n type SpreadsheetRange,\n type Workbook,\n} from \"../types.cjs\";\nimport type { WorkbookManagerSnapshot } from \"../engine-snapshot.cjs\";\nimport { getCellReference, parseCellReference } from \"../utils.cjs\";\n\nimport type { RangeAddress } from \"../types.cjs\";\nimport { buildRangeEvalOrder } from \"./range-eval-order-builder.cjs\";\nimport {\n EvaluationError,\n SheetNotFoundError,\n WorkbookNotFoundError,\n} from \"../../evaluator/evaluation-error.cjs\";\nimport { normalizeSerializedCellValue } from \"../../parser/formatter.cjs\";\n\ninterface IndexEntry {\n number: number;\n key: string;\n}\n\nexport interface SheetIndexes {\n // lookup maps - cells grouped by row/column\n rowGroups: Map<number, IndexEntry[]>; // row number -> cells in that row (sorted by col)\n colGroups: Map<number, IndexEntry[]>; // col number -> cells in that col (sorted by row)\n\n // Sorted flat indexes - for finding cells before a given row/col\n cellsSortedByRow: IndexEntry[];\n cellsSortedByCol: IndexEntry[];\n}\n\n/**\n * Utility class for binary search operations on IndexEntry arrays\n */\nexport class IndexEntryBinarySearch {\n /**\n * Find the insertion point for a number in a sorted IndexEntry array\n * Returns the index where the number should be inserted to maintain sort order\n */\n static findInsertionPoint(entries: IndexEntry[], target: number): number {\n let left = 0;\n let right = entries.length;\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n const midEntry = entries[mid];\n if (midEntry && midEntry.number < target) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n\n return left;\n }\n\n /**\n * Find the first element >= target\n * Returns the index of the first element, or -1 if not found\n */\n static findFirstGreaterOrEqual(\n entries: IndexEntry[],\n target: number\n ): number {\n if (entries.length === 0) return -1;\n\n let left = 0;\n let right = entries.length - 1;\n let result = -1;\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const midEntry = entries[mid];\n if (midEntry && midEntry.number >= target) {\n result = mid;\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return result;\n }\n\n /**\n * Find the rightmost position where we could insert a target value\n * Useful for finding elements that come before a target\n */\n static findRightmostInsertionPoint(\n entries: IndexEntry[],\n target: number\n ): number {\n return IndexEntryBinarySearch.findInsertionPoint(entries, target);\n }\n}\n\nexport class WorkbookManager {\n private workbooks: Map<string, Workbook> = new Map();\n\n // Map from \"workbookName|sheetName\" to indexes\n private sheetIndexes: Map<string, SheetIndexes> = new Map();\n\n /**\n * Generate a key for the sheet indexes map\n */\n private getSheetIndexKey(workbookName: string, sheetName: string): string {\n return `${workbookName}|${sheetName}`;\n }\n\n /**\n * Get or create indexes for a sheet\n */\n public getSheetIndexes(opts: {\n workbookName: string;\n sheetName: string;\n }): SheetIndexes {\n const key = this.getSheetIndexKey(opts.workbookName, opts.sheetName);\n let indexes = this.sheetIndexes.get(key);\n\n if (!indexes) {\n indexes = {\n rowGroups: new Map(),\n colGroups: new Map(),\n cellsSortedByRow: [],\n cellsSortedByCol: [],\n };\n this.sheetIndexes.set(key, indexes);\n }\n\n return indexes;\n }\n\n getSheets(workbookName: string): Map<string, Sheet> {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n return workbook.sheets;\n }\n\n getWorkbooks(): Map<string, Workbook> {\n return this.workbooks;\n }\n\n addWorkbook(workbookName: string): void {\n if (this.workbooks.has(workbookName)) {\n throw new Error(\"Workbook already exists\");\n }\n this.workbooks.set(workbookName, {\n name: workbookName,\n sheets: new Map(),\n workbookMetadata: undefined,\n });\n }\n\n removeWorkbook(workbookName: string): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n\n // Clean up indexes for all sheets in this workbook\n for (const sheetName of workbook.sheets.keys()) {\n const key = this.getSheetIndexKey(workbookName, sheetName);\n this.sheetIndexes.delete(key);\n }\n\n this.workbooks.delete(workbookName);\n }\n\n isContentEmpty(content: SerializedCellValue): boolean {\n return content === \"\" || content === undefined;\n }\n\n renameWorkbook(opts: {\n workbookName: string;\n newWorkbookName: string;\n }): void {\n const workbook = this.workbooks.get(opts.workbookName);\n if (!workbook) {\n throw new Error(\"Workbook not found\");\n }\n\n // Update indexes for all sheets in this workbook\n for (const sheetName of workbook.sheets.keys()) {\n const oldKey = this.getSheetIndexKey(opts.workbookName, sheetName);\n const newKey = this.getSheetIndexKey(opts.newWorkbookName, sheetName);\n const indexes = this.sheetIndexes.get(oldKey);\n if (indexes) {\n this.sheetIndexes.set(newKey, indexes);\n this.sheetIndexes.delete(oldKey);\n }\n }\n\n this.workbooks.set(opts.newWorkbookName, workbook);\n this.workbooks.delete(opts.workbookName);\n workbook.name = opts.newWorkbookName;\n }\n\n resetWorkbooks(workbooks: Map<string, Workbook>): void {\n this.workbooks.clear();\n this.sheetIndexes.clear();\n\n workbooks.forEach((workbook, workbookName) => {\n this.workbooks.set(workbookName, workbook);\n workbook.sheets.forEach((sheet) => {\n // Initialize indexes for this sheet\n const indexes = this.getSheetIndexes({\n workbookName,\n sheetName: sheet.name,\n });\n indexes.rowGroups.clear();\n indexes.colGroups.clear();\n indexes.cellsSortedByRow = [];\n indexes.cellsSortedByCol = [];\n\n sheet.content.forEach((value, key) => {\n this.setCellContent(\n {\n workbookName,\n sheetName: sheet.name,\n colIndex: parseCellReference(key).colIndex,\n rowIndex: parseCellReference(key).rowIndex,\n },\n value,\n {\n sheet,\n buildingFromScratch: true,\n }\n );\n });\n });\n });\n }\n\n toSnapshot(): WorkbookManagerSnapshot {\n return this.getWorkbooks();\n }\n\n restoreFromSnapshot(snapshot: WorkbookManagerSnapshot): void {\n this.resetWorkbooks(snapshot);\n }\n\n getSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet | undefined {\n const workbook = this.workbooks.get(workbookName);\n const sheet = workbook?.sheets.get(sheetName);\n return sheet;\n }\n\n addSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = {\n name: sheetName,\n index: workbook.sheets.size,\n content: new Map(),\n metadata: new Map(),\n sheetMetadata: undefined,\n };\n\n if (workbook.sheets.has(sheet.name)) {\n throw new Error(\"Sheet already exists\");\n }\n\n workbook.sheets.set(sheetName, sheet);\n\n // Initialize empty indexes for this sheet\n this.getSheetIndexes({ workbookName, sheetName });\n\n return sheet;\n }\n\n removeSheet({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new Error(\"Sheet not found\");\n }\n\n // Remove the sheet\n workbook.sheets.delete(sheetName);\n\n // Clean up indexes for this sheet\n const key = this.getSheetIndexKey(workbookName, sheetName);\n this.sheetIndexes.delete(key);\n\n return sheet;\n }\n\n renameSheet({\n workbookName,\n sheetName,\n newSheetName,\n }: {\n workbookName: string;\n sheetName: string;\n newSheetName: string;\n }): Sheet {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new SheetNotFoundError(sheetName);\n }\n\n if (workbook.sheets.has(newSheetName)) {\n throw new Error(\"Sheet with new name already exists\");\n }\n\n // Update sheet name\n sheet.name = newSheetName;\n\n // Update sheets map\n workbook.sheets.set(newSheetName, sheet);\n workbook.sheets.delete(sheetName);\n\n // Move indexes to new key\n const oldKey = this.getSheetIndexKey(workbookName, sheetName);\n const newKey = this.getSheetIndexKey(workbookName, newSheetName);\n const indexes = this.sheetIndexes.get(oldKey);\n if (indexes) {\n this.sheetIndexes.set(newKey, indexes);\n this.sheetIndexes.delete(oldKey);\n }\n\n return sheet;\n }\n\n updateAllFormulas(updateCallback: (formula: string) => string): CellAddress[] {\n const changed: CellAddress[] = [];\n\n const update = (workbookName: string, map: Map<string, Sheet>) => {\n map.forEach((sheet, sheetName) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n const { colIndex, rowIndex } = parseCellReference(key);\n changed.push({\n workbookName,\n sheetName,\n colIndex,\n rowIndex,\n });\n }\n }\n });\n });\n };\n\n this.workbooks.forEach((workbook, workbookName) => {\n update(workbookName, workbook.sheets);\n });\n\n return changed;\n }\n\n updateFormulasExcluding(\n excludeCellsSet: Set<string>,\n updateCallback: (formula: string) => string\n ): void {\n this.workbooks.forEach((workbook, workbookName) => {\n workbook.sheets.forEach((sheet, sheetName) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const { colIndex, rowIndex } = parseCellReference(key);\n const cellKey = `${workbookName}:${sheetName}:${colIndex}:${rowIndex}`;\n \n // Skip if this cell is in the exclude set\n if (excludeCellsSet.has(cellKey)) {\n return;\n }\n\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n }\n }\n });\n });\n });\n }\n\n updateFormulasForWorkbook(\n workbookName: string,\n updateCallback: (formula: string) => string\n ): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n\n workbook.sheets.forEach((sheet) => {\n sheet.content.forEach((cell, key) => {\n if (typeof cell === \"string\" && cell.startsWith(\"=\")) {\n const formula = cell.slice(1);\n const updatedFormula = updateCallback(formula);\n\n // Only update if the formula actually changed\n if (updatedFormula !== formula) {\n sheet.content.set(key, `=${updatedFormula}`);\n }\n }\n });\n });\n }\n\n getSheetSerialized({\n workbookName,\n sheetName,\n }: {\n workbookName: string;\n sheetName: string;\n }): Map<string, SerializedCellValue> {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new WorkbookNotFoundError(workbookName);\n }\n const sheet = workbook.sheets.get(sheetName);\n if (!sheet) {\n throw new SheetNotFoundError(sheetName);\n }\n\n return sheet.content;\n }\n\n /**\n * Add a cell to the grouped indexes\n */\n private addCellToGroups(\n indexes: SheetIndexes,\n rowIndex: number,\n colIndex: number,\n key: string\n ): void {\n // Add to row group (cells in this row, sorted by column)\n let rowGroup = indexes.rowGroups.get(rowIndex);\n if (!rowGroup) {\n rowGroup = [];\n indexes.rowGroups.set(rowIndex, rowGroup);\n }\n const colEntry: IndexEntry = { number: colIndex, key };\n const colInsertIdx = this.findInsertIndex(rowGroup, colIndex);\n rowGroup.splice(colInsertIdx, 0, colEntry);\n\n // Add to column group (cells in this column, sorted by row)\n let colGroup = indexes.colGroups.get(colIndex);\n if (!colGroup) {\n colGroup = [];\n indexes.colGroups.set(colIndex, colGroup);\n }\n const rowEntry: IndexEntry = { number: rowIndex, key };\n const rowInsertIdx = this.findInsertIndex(colGroup, rowIndex);\n colGroup.splice(rowInsertIdx, 0, rowEntry);\n\n // Add to sorted flat indexes\n this.insertSorted(indexes.cellsSortedByRow, { number: rowIndex, key });\n this.insertSorted(indexes.cellsSortedByCol, { number: colIndex, key });\n }\n\n /**\n * Remove a cell from the grouped indexes\n */\n private removeCellFromGroups(\n indexes: SheetIndexes,\n rowIndex: number,\n colIndex: number,\n key: string\n ): void {\n // Remove from row group\n const rowGroup = indexes.rowGroups.get(rowIndex);\n if (rowGroup) {\n const filteredGroup = rowGroup.filter((e) => e.key !== key);\n if (filteredGroup.length === 0) {\n indexes.rowGroups.delete(rowIndex);\n } else {\n indexes.rowGroups.set(rowIndex, filteredGroup);\n }\n }\n\n // Remove from column group\n const colGroup = indexes.colGroups.get(colIndex);\n if (colGroup) {\n const filteredGroup = colGroup.filter((e) => e.key !== key);\n if (filteredGroup.length === 0) {\n indexes.colGroups.delete(colIndex);\n } else {\n indexes.colGroups.set(colIndex, filteredGroup);\n }\n }\n\n // Remove from sorted flat indexes\n indexes.cellsSortedByRow = indexes.cellsSortedByRow.filter(\n (item) => item.key !== key\n );\n indexes.cellsSortedByCol = indexes.cellsSortedByCol.filter(\n (item) => item.key !== key\n );\n }\n\n /**\n * Find insertion index in sorted array\n */\n private findInsertIndex(entries: IndexEntry[], n: number): number {\n return IndexEntryBinarySearch.findInsertionPoint(entries, n);\n }\n\n /**\n * Inserts an item into a sorted array by number, maintaining sort order.\n * If an item with the same number and key already exists, it won't be added again.\n */\n private insertSorted(array: IndexEntry[], item: IndexEntry): void {\n // Check if item already exists (same number and key)\n const existingIndex = array.findIndex(\n (existing) => existing.number === item.number && existing.key === item.key\n );\n\n if (existingIndex !== -1) {\n // Item already exists, no need to add it again\n return;\n }\n\n // Find the insertion point using binary search for efficiency\n const insertionPoint = IndexEntryBinarySearch.findInsertionPoint(\n array,\n item.number\n );\n\n // Insert at the found position\n array.splice(insertionPoint, 0, item);\n }\n\n setCellContent(\n address: CellAddress,\n content: SerializedCellValue,\n options?: {\n /**\n * for extra performance, if the sheet is already known, it can be passed in\n */\n sheet?: Sheet;\n /**\n * if the sheet is being built from scratch, we can skip some checks\n */\n buildingFromScratch?: boolean;\n }\n ): void {\n const sheet =\n options?.sheet ||\n this.getSheet({\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n });\n\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const indexes = this.getSheetIndexes({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n const adr = getCellReference(address);\n\n if (this.isContentEmpty(content)) {\n if (!options?.buildingFromScratch) {\n sheet.content.delete(adr);\n // Remove from all indexes\n this.removeCellFromGroups(\n indexes,\n address.rowIndex,\n address.colIndex,\n adr\n );\n }\n } else {\n sheet.content.set(adr, content);\n // Add to all indexes\n this.addCellToGroups(indexes, address.rowIndex, address.colIndex, adr);\n }\n }\n\n /**\n * Set metadata for a cell\n */\n setCellMetadata<TMetadata = unknown>(address: CellAddress, metadata: TMetadata | undefined): void {\n const sheet = this.getSheet({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const key = getCellReference(address);\n if (metadata === undefined) {\n sheet.metadata.delete(key);\n } else {\n sheet.metadata.set(key, metadata);\n }\n }\n\n /**\n * Get metadata for a cell\n */\n getCellMetadata<TMetadata = unknown>(address: CellAddress): TMetadata | undefined {\n const sheet = this.getSheet({\n workbookName: address.workbookName,\n sheetName: address.sheetName,\n });\n if (!sheet) {\n return undefined;\n }\n\n const key = getCellReference(address);\n return sheet.metadata.get(key) as TMetadata | undefined;\n }\n\n /**\n * Get all metadata for a sheet\n */\n getSheetMetadataSerialized<TMetadata = unknown>(opts: {\n sheetName: string;\n workbookName: string;\n }): Map<string, TMetadata> {\n const sheet = this.getSheet(opts);\n return sheet?.metadata || new Map();\n }\n\n /**\n * Set metadata for a sheet\n */\n setSheetMetadata<TSheetMetadata = unknown>(\n opts: { workbookName: string; sheetName: string },\n metadata: TSheetMetadata\n ): void {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n throw new SheetNotFoundError(opts.sheetName);\n }\n sheet.sheetMetadata = metadata;\n }\n\n /**\n * Get metadata for a sheet\n */\n getSheetMetadata<TSheetMetadata = unknown>(\n opts: { workbookName: string; sheetName: string }\n ): TSheetMetadata | undefined {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n return undefined;\n }\n return sheet.sheetMetadata as TSheetMetadata | undefined;\n }\n\n /**\n * Set metadata for a workbook\n */\n setWorkbookMetadata<TWorkbookMetadata = unknown>(\n workbookName: string,\n metadata: TWorkbookMetadata\n ): void {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n throw new Error(`Workbook \"${workbookName}\" not found`);\n }\n workbook.workbookMetadata = metadata;\n }\n\n /**\n * Get metadata for a workbook\n */\n getWorkbookMetadata<TWorkbookMetadata = unknown>(\n workbookName: string\n ): TWorkbookMetadata | undefined {\n const workbook = this.workbooks.get(workbookName);\n if (!workbook) {\n return undefined;\n }\n return workbook.workbookMetadata as TWorkbookMetadata | undefined;\n }\n\n /**\n * Replace all content for a sheet (safely, without breaking references)\n * This method clears the existing Map and repopulates it rather than replacing the Map reference\n */\n setSheetContent(\n opts: { sheetName: string; workbookName: string },\n newContent: Map<string, SerializedCellValue>\n ): void {\n const sheet = this.getSheet(opts);\n if (!sheet) {\n throw new SheetNotFoundError(opts.sheetName);\n }\n\n // Clear existing content without breaking the Map reference\n sheet.content.clear();\n\n // Clean up indexes for this sheet\n const key = this.getSheetIndexKey(opts.workbookName, opts.sheetName);\n this.sheetIndexes.delete(key);\n\n // Repopulate with new content\n newContent.forEach((value, key) => {\n this.setCellContent(\n {\n workbookName: opts.workbookName,\n sheetName: opts.sheetName,\n colIndex: parseCellReference(key).colIndex,\n rowIndex: parseCellReference(key).rowIndex,\n },\n value,\n {\n sheet,\n buildingFromScratch: true,\n }\n );\n });\n }\n\n /**\n * Removes the content in the spreadsheet that is inside the range.\n * OPTIMIZED: Uses indexes to only process cells that actually exist.\n * ENHANCED: Now supports infinite ranges.\n */\n clearSpreadsheetRange(address: RangeAddress) {\n const sheet = this.getSheet(address);\n\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n // Get current sheet content and prepare new content with cleared cells\n const newContent = new Map(sheet.content);\n const newMetadata = new Map(sheet.metadata);\n\n // Use iterateCellsInRange to only process cells that actually exist\n // This handles both finite and infinite ranges efficiently\n for (const cellAddress of this.iterateCellsInRange(address)) {\n const cellRef = getCellReference(cellAddress);\n\n // Remove from content and metadata\n newContent.delete(cellRef);\n newMetadata.delete(cellRef);\n }\n\n // Update content\n this.setSheetContent(address, newContent);\n \n // Update metadata\n sheet.metadata = newMetadata;\n }\n\n /**\n * Optimized generator to iterate over cells defined in the content within a range\n * Uses indexes to efficiently find and yield only cells that exist within the range\n */\n *iterateCellsInRange(address: RangeAddress): Generator<CellAddress> {\n // First check if the sheet exists\n const sheet = this.getSheet(address);\n if (!sheet) {\n throw new SheetNotFoundError(address.sheetName);\n }\n\n const indexes = this.getSheetIndexes(address);\n\n const range = address.range;\n\n // Use the sorted index to find only rows that actually contain cells\n // This avoids iterating through empty rows regardless of finite/infinite bounds\n\n if (range.end.row.type === \"number\") {\n // Finite bounds: Use binary search to find the range of cells to check\n const startIndex = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n indexes.cellsSortedByRow,\n range.start.row\n );\n\n if (startIndex === -1) return; // No cells at or after start row\n\n // Process cells from startIndex until we exceed the end row\n for (let i = startIndex; i < indexes.cellsSortedByRow.length; i++) {\n const cellEntry = indexes.cellsSortedByRow[i];\n if (!cellEntry) continue;\n\n const parsed = parseCellReference(cellEntry.key);\n\n // Stop if we've gone beyond the row range\n if (parsed.rowIndex > range.end.row.value) break;\n\n // Check if cell is within column bounds\n if (parsed.colIndex < range.start.col) continue;\n\n if (\n range.end.col.type === \"number\" &&\n parsed.colIndex > range.end.col.value\n ) {\n continue; // Skip this cell but keep checking others in different rows\n }\n\n yield {\n rowIndex: parsed.rowIndex,\n colIndex: parsed.colIndex,\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n };\n }\n } else {\n // Infinite row bounds: Use binary search to find starting point\n const startIndex = IndexEntryBinarySearch.findFirstGreaterOrEqual(\n indexes.cellsSortedByRow,\n range.start.row\n );\n\n if (startIndex === -1) return; // No cells at or after start row\n\n // Process all cells from startIndex to end\n for (let i = startIndex; i < indexes.cellsSortedByRow.length; i++) {\n const cellEntry = indexes.cellsSortedByRow[i];\n if (!cellEntry) continue;\n\n const parsed = parseCellReference(cellEntry.key);\n\n // Check if cell is within column bounds\n if (parsed.colIndex < range.start.col) continue;\n\n if (\n range.end.col.type === \"number\" &&\n parsed.colIndex > range.end.col.value\n ) {\n continue; // Skip this cell but keep checking others in different rows\n }\n\n yield {\n rowIndex: parsed.rowIndex,\n colIndex: parsed.colIndex,\n sheetName: address.sheetName,\n workbookName: address.workbookName,\n };\n }\n }\n }\n\n getCellsInRange(address: RangeAddress): CellAddress[] {\n return Array.from(this.iterateCellsInRange(address));\n }\n\n public getCellContent(cellAddress: CellAddress): SerializedCellValue {\n const sheet = this.getSheet(cellAddress);\n if (!sheet) {\n throw new SheetNotFoundError(cellAddress.sheetName);\n }\n return sheet.content.get(getCellReference(cellAddress));\n }\n\n public getSerializedCellValue(cellAddress: CellAddress): SerializedCellValue {\n const sheet = this.getSheet(cellAddress);\n if (!sheet) {\n throw new SheetNotFoundError(cellAddress.sheetName);\n }\n return normalizeSerializedCellValue(\n sheet.content.get(getCellReference(cellAddress))\n );\n }\n\n public isCellEmpty(cellAddress: CellAddress): boolean {\n const content = this.getCellContent(cellAddress);\n return (\n content === undefined || (typeof content === \"string\" && content === \"\")\n );\n }\n public isFormulaCell(cellAddress: CellAddress): boolean {\n const content = this.getCellContent(cellAddress);\n return typeof content === \"string\" && content.startsWith(\"=\");\n }\n\n /**\n * Build evaluation order for a range\n * Delegates to the buildRangeEvalOrder function\n */\n public buildRangeEvalOrder(\n lookupOrder: \"row-major\" | \"col-major\",\n lookupRange: RangeAddress\n ) {\n // Import and call the function\n return buildRangeEvalOrder.call(this, lookupOrder, lookupRange);\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "4EC38A5B2878AB0064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -66,4 +76,4 @@ var deserialize = (data) => {
|
|
|
66
76
|
return JSON.parse(data, reviver);
|
|
67
77
|
};
|
|
68
78
|
|
|
69
|
-
//# debugId=
|
|
79
|
+
//# debugId=09C51AF4B24A11B164756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"// Replacer: used with JSON.stringify\nexport function replacer(key: string, value: any): any {\n if (value instanceof Set) {\n return {\n __type: \"Set\",\n values: Array.from(value),\n };\n }\n if (value instanceof Map) {\n return {\n __type: \"Map\",\n entries: Array.from(value.entries()),\n };\n }\n return value;\n}\n\n// Reviver: used with JSON.parse\nexport function reviver(key: string, value: any): any {\n if (value && value.__type === \"Set\") {\n return new Set(value.values);\n }\n if (value && value.__type === \"Map\") {\n return new Map(value.entries);\n }\n return value;\n}\n\nexport const serialize = (data: unknown): string => {\n return JSON.stringify(data, replacer);\n};\n\nexport const deserialize = (data: string): unknown => {\n return JSON.parse(data, reviver);\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,SAAS,QAAQ,CAAC,KAAa,OAAiB;AAAA,EACrD,IAAI,iBAAiB,KAAK;AAAA,IACxB,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ,MAAM,KAAK,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,IAAI,iBAAiB,KAAK;AAAA,IACxB,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,MAAM,KAAK,MAAM,QAAQ,CAAC;AAAA,IACrC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAIF,SAAS,OAAO,CAAC,KAAa,OAAiB;AAAA,EACpD,IAAI,SAAS,MAAM,WAAW,OAAO;AAAA,IACnC,OAAO,IAAI,IAAI,MAAM,MAAM;AAAA,EAC7B;AAAA,EACA,IAAI,SAAS,MAAM,WAAW,OAAO;AAAA,IACnC,OAAO,IAAI,IAAI,MAAM,OAAO;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAGF,IAAM,YAAY,CAAC,SAA0B;AAAA,EAClD,OAAO,KAAK,UAAU,MAAM,QAAQ;AAAA;AAG/B,IAAM,cAAc,CAAC,SAA0B;AAAA,EACpD,OAAO,KAAK,MAAM,MAAM,OAAO;AAAA;",
|
|
8
|
+
"debugId": "09C51AF4B24A11B164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -85,4 +95,4 @@ function getReferencedNamedExpressionNames(formula) {
|
|
|
85
95
|
}
|
|
86
96
|
}
|
|
87
97
|
|
|
88
|
-
//# debugId=
|
|
98
|
+
//# debugId=96844B3083D0B8E264756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { parseFormula } from \"../parser/parser.cjs\";\nimport { astToString } from \"../parser/formatter.cjs\";\nimport { transformAST } from \"./ast-traverser.cjs\";\n\n/**\n * Renames named expression references in a formula string\n * @param formula - The formula string (without the leading =)\n * @param oldName - The current named expression name to replace\n * @param newName - The new named expression name\n * @returns The updated formula string, or the original if no changes were made\n */\nexport function renameNamedExpressionInFormula(\n formula: string,\n oldName: string,\n newName: string\n): string {\n try {\n const ast = parseFormula(formula);\n \n const transformedAST = transformAST(ast, (node) => {\n if (node.type === \"named-expression\" && node.name === oldName) {\n return {\n ...node,\n name: newName\n };\n }\n return node;\n });\n\n return astToString(transformedAST);\n } catch (error) {\n // If parsing fails, return the original formula\n return formula;\n }\n}\n\n/**\n * Checks if a formula contains references to a specific named expression\n * @param formula - The formula string (without the leading =)\n * @param namedExpressionName - The named expression name to search for\n * @returns True if the formula contains references to the named expression\n */\nexport function formulaReferencesNamedExpression(formula: string, namedExpressionName: string): boolean {\n try {\n const ast = parseFormula(formula);\n let hasReference = false;\n\n transformAST(ast, (node) => {\n if (node.type === \"named-expression\" && node.name === namedExpressionName) {\n hasReference = true;\n }\n return node;\n });\n\n return hasReference;\n } catch (error) {\n // If parsing fails, assume no reference\n return false;\n }\n}\n\n/**\n * Gets all named expression names referenced in a formula\n * @param formula - The formula string (without the leading =)\n * @returns Array of unique named expression names referenced in the formula\n */\nexport function getReferencedNamedExpressionNames(formula: string): string[] {\n try {\n const ast = parseFormula(formula);\n const namedExpressionNames = new Set<string>();\n\n transformAST(ast, (node) => {\n if (node.type === \"named-expression\" && node.name) {\n namedExpressionNames.add(node.name);\n }\n return node;\n });\n\n return Array.from(namedExpressionNames);\n } catch (error) {\n // If parsing fails, return empty array\n return [];\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAA6B,IAA7B;AAC4B,IAA5B;AAC6B,IAA7B;AASO,SAAS,8BAA8B,CAC5C,SACA,SACA,SACQ;AAAA,EACR,IAAI;AAAA,IACF,MAAM,MAAM,2BAAa,OAAO;AAAA,IAEhC,MAAM,iBAAiB,kCAAa,KAAK,CAAC,SAAS;AAAA,MACjD,IAAI,KAAK,SAAS,sBAAsB,KAAK,SAAS,SAAS;AAAA,QAC7D,OAAO;AAAA,aACF;AAAA,UACH,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,6BAAY,cAAc;AAAA,IACjC,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AAUJ,SAAS,gCAAgC,CAAC,SAAiB,qBAAsC;AAAA,EACtG,IAAI;AAAA,IACF,MAAM,MAAM,2BAAa,OAAO;AAAA,IAChC,IAAI,eAAe;AAAA,IAEnB,kCAAa,KAAK,CAAC,SAAS;AAAA,MAC1B,IAAI,KAAK,SAAS,sBAAsB,KAAK,SAAS,qBAAqB;AAAA,QACzE,eAAe;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,KACR;AAAA,IAED,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IAEd,OAAO;AAAA;AAAA;AASJ,SAAS,iCAAiC,CAAC,SAA2B;AAAA,EAC3E,IAAI;AAAA,IACF,MAAM,MAAM,2BAAa,OAAO;AAAA,IAChC,MAAM,uBAAuB,IAAI;AAAA,IAEjC,kCAAa,KAAK,CAAC,SAAS;AAAA,MAC1B,IAAI,KAAK,SAAS,sBAAsB,KAAK,MAAM;AAAA,QACjD,qBAAqB,IAAI,KAAK,IAAI;AAAA,MACpC;AAAA,MACA,OAAO;AAAA,KACR;AAAA,IAED,OAAO,MAAM,KAAK,oBAAoB;AAAA,IACtC,OAAO,OAAO;AAAA,IAEd,OAAO,CAAC;AAAA;AAAA;",
|
|
8
|
+
"debugId": "96844B3083D0B8E264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
8
|
+
var __toCommonJS = (from) => {
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
10
|
+
if (entry)
|
|
11
|
+
return entry;
|
|
12
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
__moduleCache.set(from, entry);
|
|
22
|
+
return entry;
|
|
23
|
+
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
29
|
+
var __export = (target, all) => {
|
|
30
|
+
for (var name in all)
|
|
31
|
+
__defProp(target, name, {
|
|
32
|
+
get: all[name],
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/core/resource-keys.ts
|
|
40
|
+
var exports_resource_keys = {};
|
|
41
|
+
__export(exports_resource_keys, {
|
|
42
|
+
getWorkbookResourceKey: () => getWorkbookResourceKey,
|
|
43
|
+
getTableResourceKey: () => getTableResourceKey,
|
|
44
|
+
getSheetResourceKey: () => getSheetResourceKey,
|
|
45
|
+
getNamedExpressionResourceKey: () => getNamedExpressionResourceKey
|
|
46
|
+
});
|
|
47
|
+
module.exports = __toCommonJS(exports_resource_keys);
|
|
48
|
+
function getNamedExpressionResourceKey(opts) {
|
|
49
|
+
if (opts.sheetName && opts.workbookName) {
|
|
50
|
+
return `resource:named:sheet:${opts.workbookName}:${opts.sheetName}:${opts.expressionName}`;
|
|
51
|
+
}
|
|
52
|
+
if (opts.workbookName) {
|
|
53
|
+
return `resource:named:workbook:${opts.workbookName}:${opts.expressionName}`;
|
|
54
|
+
}
|
|
55
|
+
return `resource:named:global:${opts.expressionName}`;
|
|
56
|
+
}
|
|
57
|
+
function getTableResourceKey(opts) {
|
|
58
|
+
return `resource:table:${opts.workbookName}:${opts.tableName}`;
|
|
59
|
+
}
|
|
60
|
+
function getSheetResourceKey(opts) {
|
|
61
|
+
return `resource:sheet:${opts.workbookName}:${opts.sheetName}`;
|
|
62
|
+
}
|
|
63
|
+
function getWorkbookResourceKey(workbookName) {
|
|
64
|
+
return `resource:workbook:${workbookName}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//# debugId=57F72D8C7D8D613F64756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/resource-keys.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export function getNamedExpressionResourceKey(opts: {\n expressionName: string;\n workbookName?: string;\n sheetName?: string;\n}): string {\n if (opts.sheetName && opts.workbookName) {\n return `resource:named:sheet:${opts.workbookName}:${opts.sheetName}:${opts.expressionName}`;\n }\n if (opts.workbookName) {\n return `resource:named:workbook:${opts.workbookName}:${opts.expressionName}`;\n }\n return `resource:named:global:${opts.expressionName}`;\n}\n\nexport function getTableResourceKey(opts: {\n workbookName: string;\n tableName: string;\n}): string {\n return `resource:table:${opts.workbookName}:${opts.tableName}`;\n}\n\nexport function getSheetResourceKey(opts: {\n workbookName: string;\n sheetName: string;\n}): string {\n return `resource:sheet:${opts.workbookName}:${opts.sheetName}`;\n}\n\nexport function getWorkbookResourceKey(workbookName: string): string {\n return `resource:workbook:${workbookName}`;\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,6BAA6B,CAAC,MAInC;AAAA,EACT,IAAI,KAAK,aAAa,KAAK,cAAc;AAAA,IACvC,OAAO,wBAAwB,KAAK,gBAAgB,KAAK,aAAa,KAAK;AAAA,EAC7E;AAAA,EACA,IAAI,KAAK,cAAc;AAAA,IACrB,OAAO,2BAA2B,KAAK,gBAAgB,KAAK;AAAA,EAC9D;AAAA,EACA,OAAO,yBAAyB,KAAK;AAAA;AAGhC,SAAS,mBAAmB,CAAC,MAGzB;AAAA,EACT,OAAO,kBAAkB,KAAK,gBAAgB,KAAK;AAAA;AAG9C,SAAS,mBAAmB,CAAC,MAGzB;AAAA,EACT,OAAO,kBAAkB,KAAK,gBAAgB,KAAK;AAAA;AAG9C,SAAS,sBAAsB,CAAC,cAA8B;AAAA,EACnE,OAAO,qBAAqB;AAAA;",
|
|
8
|
+
"debugId": "57F72D8C7D8D613F64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|