@ricsam/formula-engine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/cjs/core/ast-traverser.cjs +124 -0
- package/dist/cjs/core/ast-traverser.cjs.map +10 -0
- package/dist/cjs/core/autofill-utils.cjs +304 -0
- package/dist/cjs/core/autofill-utils.cjs.map +10 -0
- package/dist/cjs/core/engine.cjs +390 -0
- package/dist/cjs/core/engine.cjs.map +10 -0
- package/dist/cjs/core/managers/cache-manager.cjs +58 -0
- package/dist/cjs/core/managers/cache-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/dependency-manager.cjs +620 -0
- package/dist/cjs/core/managers/dependency-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/dependency-node.cjs +24 -0
- package/dist/cjs/core/managers/dependency-node.cjs.map +9 -0
- package/dist/cjs/core/managers/evaluation-manager.cjs +433 -0
- package/dist/cjs/core/managers/evaluation-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/event-manager.cjs +49 -0
- package/dist/cjs/core/managers/event-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs +181 -0
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/index.cjs +49 -0
- package/dist/cjs/core/managers/index.cjs.map +10 -0
- package/dist/cjs/core/managers/isDependencyNode.cjs +44 -0
- package/dist/cjs/core/managers/isDependencyNode.cjs.map +10 -0
- package/dist/cjs/core/managers/named-expression-manager.cjs +379 -0
- package/dist/cjs/core/managers/named-expression-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/range-eval-order-builder.cjs +644 -0
- package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +10 -0
- package/dist/cjs/core/managers/table-manager.cjs +254 -0
- package/dist/cjs/core/managers/table-manager.cjs.map +10 -0
- package/dist/cjs/core/managers/workbook-manager.cjs +474 -0
- package/dist/cjs/core/managers/workbook-manager.cjs.map +10 -0
- package/dist/cjs/core/map-serializer.cjs +69 -0
- package/dist/cjs/core/map-serializer.cjs.map +10 -0
- package/dist/cjs/core/named-expression-renamer.cjs +88 -0
- package/dist/cjs/core/named-expression-renamer.cjs.map +10 -0
- package/dist/cjs/core/sheet-renamer.cjs +89 -0
- package/dist/cjs/core/sheet-renamer.cjs.map +10 -0
- package/dist/cjs/core/sheet-utils.cjs +39 -0
- package/dist/cjs/core/sheet-utils.cjs.map +10 -0
- package/dist/cjs/core/table-renamer.cjs +88 -0
- package/dist/cjs/core/table-renamer.cjs.map +10 -0
- package/dist/cjs/core/types.cjs +48 -0
- package/dist/cjs/core/types.cjs.map +10 -0
- package/dist/cjs/core/utils/range-serializer.cjs +65 -0
- package/dist/cjs/core/utils/range-serializer.cjs.map +10 -0
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +142 -0
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +10 -0
- package/dist/cjs/core/utils.cjs +434 -0
- package/dist/cjs/core/utils.cjs.map +10 -0
- package/dist/cjs/core/workbook-renamer.cjs +106 -0
- package/dist/cjs/core/workbook-renamer.cjs.map +10 -0
- package/dist/cjs/debug/flags.cjs +47 -0
- package/dist/cjs/debug/flags.cjs.map +10 -0
- package/dist/cjs/evaluator/arithmetic/add/add.cjs +82 -0
- package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +10 -0
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +107 -0
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +10 -0
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +93 -0
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +10 -0
- package/dist/cjs/evaluator/arithmetic/power/power.cjs +125 -0
- package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +10 -0
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +84 -0
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/equals.cjs +64 -0
- package/dist/cjs/evaluator/comparison/equals.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +61 -0
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/greater-than.cjs +61 -0
- package/dist/cjs/evaluator/comparison/greater-than.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +69 -0
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/less-than.cjs +68 -0
- package/dist/cjs/evaluator/comparison/less-than.cjs.map +10 -0
- package/dist/cjs/evaluator/comparison/not-equals.cjs +53 -0
- package/dist/cjs/evaluator/comparison/not-equals.cjs.map +10 -0
- package/dist/cjs/evaluator/concatenation/concatenate.cjs +72 -0
- package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +58 -0
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +112 -0
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +54 -0
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +108 -0
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +50 -0
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +10 -0
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +254 -0
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +10 -0
- package/dist/cjs/evaluator/evaluation-context.cjs +154 -0
- package/dist/cjs/evaluator/evaluation-context.cjs.map +10 -0
- package/dist/cjs/evaluator/evaluation-error.cjs +75 -0
- package/dist/cjs/evaluator/evaluation-error.cjs.map +10 -0
- package/dist/cjs/evaluator/formula-evaluator.cjs +797 -0
- package/dist/cjs/evaluator/formula-evaluator.cjs.map +10 -0
- package/dist/cjs/evaluator/range-evaluation-node.cjs +88 -0
- package/dist/cjs/evaluator/range-evaluation-node.cjs.map +10 -0
- package/dist/cjs/functions/_template/template.cjs +42 -0
- package/dist/cjs/functions/_template/template.cjs.map +10 -0
- package/dist/cjs/functions/array/sequence/sequence.cjs +315 -0
- package/dist/cjs/functions/array/sequence/sequence.cjs.map +10 -0
- package/dist/cjs/functions/criteria-parser.cjs +217 -0
- package/dist/cjs/functions/criteria-parser.cjs.map +10 -0
- package/dist/cjs/functions/criteria-utils.cjs +291 -0
- package/dist/cjs/functions/criteria-utils.cjs.map +10 -0
- package/dist/cjs/functions/function-utils.cjs +63 -0
- package/dist/cjs/functions/function-utils.cjs.map +10 -0
- package/dist/cjs/functions/index.cjs +125 -0
- package/dist/cjs/functions/index.cjs.map +10 -0
- package/dist/cjs/functions/information/cell/cell.cjs +196 -0
- package/dist/cjs/functions/information/cell/cell.cjs.map +10 -0
- package/dist/cjs/functions/information/column/column.cjs +144 -0
- package/dist/cjs/functions/information/column/column.cjs.map +10 -0
- package/dist/cjs/functions/information/row/row.cjs +150 -0
- package/dist/cjs/functions/information/row/row.cjs.map +10 -0
- package/dist/cjs/functions/logical/and/and.cjs +112 -0
- package/dist/cjs/functions/logical/and/and.cjs.map +10 -0
- package/dist/cjs/functions/logical/if/if.cjs +195 -0
- package/dist/cjs/functions/logical/if/if.cjs.map +10 -0
- package/dist/cjs/functions/logical/iferror/iferror.cjs +126 -0
- package/dist/cjs/functions/logical/iferror/iferror.cjs.map +10 -0
- package/dist/cjs/functions/logical/or/or.cjs +112 -0
- package/dist/cjs/functions/logical/or/or.cjs.map +10 -0
- package/dist/cjs/functions/lookup/count/count-utils.cjs +65 -0
- package/dist/cjs/functions/lookup/count/count-utils.cjs.map +10 -0
- package/dist/cjs/functions/lookup/count/count.cjs +48 -0
- package/dist/cjs/functions/lookup/count/count.cjs.map +10 -0
- package/dist/cjs/functions/lookup/count/countif.cjs +94 -0
- package/dist/cjs/functions/lookup/count/countif.cjs.map +10 -0
- package/dist/cjs/functions/lookup/count/countifs.cjs +63 -0
- package/dist/cjs/functions/lookup/count/countifs.cjs.map +10 -0
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +187 -0
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +10 -0
- package/dist/cjs/functions/lookup/match/match.cjs +168 -0
- package/dist/cjs/functions/lookup/match/match.cjs.map +10 -0
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +410 -0
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +10 -0
- package/dist/cjs/functions/math/average/average-utils.cjs +72 -0
- package/dist/cjs/functions/math/average/average-utils.cjs.map +10 -0
- package/dist/cjs/functions/math/average/average.cjs +48 -0
- package/dist/cjs/functions/math/average/average.cjs.map +10 -0
- package/dist/cjs/functions/math/average/averageif.cjs +83 -0
- package/dist/cjs/functions/math/average/averageif.cjs.map +10 -0
- package/dist/cjs/functions/math/average/averageifs.cjs +61 -0
- package/dist/cjs/functions/math/average/averageifs.cjs.map +10 -0
- package/dist/cjs/functions/math/ceiling/ceiling.cjs +219 -0
- package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +10 -0
- package/dist/cjs/functions/math/max/max-utils.cjs +71 -0
- package/dist/cjs/functions/math/max/max-utils.cjs.map +10 -0
- package/dist/cjs/functions/math/max/max.cjs +48 -0
- package/dist/cjs/functions/math/max/max.cjs.map +10 -0
- package/dist/cjs/functions/math/max/maxif.cjs +83 -0
- package/dist/cjs/functions/math/max/maxif.cjs.map +10 -0
- package/dist/cjs/functions/math/max/maxifs.cjs +61 -0
- package/dist/cjs/functions/math/max/maxifs.cjs.map +10 -0
- package/dist/cjs/functions/math/min/min-utils.cjs +71 -0
- package/dist/cjs/functions/math/min/min-utils.cjs.map +10 -0
- package/dist/cjs/functions/math/min/min.cjs +48 -0
- package/dist/cjs/functions/math/min/min.cjs.map +10 -0
- package/dist/cjs/functions/math/min/minif.cjs +83 -0
- package/dist/cjs/functions/math/min/minif.cjs.map +10 -0
- package/dist/cjs/functions/math/min/minifs.cjs +61 -0
- package/dist/cjs/functions/math/min/minifs.cjs.map +10 -0
- package/dist/cjs/functions/math/sum/sum.cjs +48 -0
- package/dist/cjs/functions/math/sum/sum.cjs.map +10 -0
- package/dist/cjs/functions/math/sum/sumif.cjs +83 -0
- package/dist/cjs/functions/math/sum/sumif.cjs.map +10 -0
- package/dist/cjs/functions/math/sum/sumifs.cjs +60 -0
- package/dist/cjs/functions/math/sum/sumifs.cjs.map +10 -0
- package/dist/cjs/functions/math/sum/summation-utils.cjs +57 -0
- package/dist/cjs/functions/math/sum/summation-utils.cjs.map +10 -0
- package/dist/cjs/functions/reference/address/address.cjs +163 -0
- package/dist/cjs/functions/reference/address/address.cjs.map +10 -0
- package/dist/cjs/functions/reference/indirect/indirect.cjs +102 -0
- package/dist/cjs/functions/reference/indirect/indirect.cjs.map +10 -0
- package/dist/cjs/functions/reference/offset/offset.cjs +233 -0
- package/dist/cjs/functions/reference/offset/offset.cjs.map +10 -0
- package/dist/cjs/functions/text/concatenate/concatenate.cjs +167 -0
- package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +10 -0
- package/dist/cjs/functions/text/exact/exact.cjs +171 -0
- package/dist/cjs/functions/text/exact/exact.cjs.map +10 -0
- package/dist/cjs/functions/text/find/find.cjs +397 -0
- package/dist/cjs/functions/text/find/find.cjs.map +10 -0
- package/dist/cjs/functions/text/left/left.cjs +109 -0
- package/dist/cjs/functions/text/left/left.cjs.map +10 -0
- package/dist/cjs/functions/text/len/len.cjs +119 -0
- package/dist/cjs/functions/text/len/len.cjs.map +10 -0
- package/dist/cjs/functions/text/mid/mid.cjs +103 -0
- package/dist/cjs/functions/text/mid/mid.cjs.map +10 -0
- package/dist/cjs/functions/text/right/right.cjs +167 -0
- package/dist/cjs/functions/text/right/right.cjs.map +10 -0
- package/dist/cjs/functions/text/text-helpers.cjs +179 -0
- package/dist/cjs/functions/text/text-helpers.cjs.map +10 -0
- package/dist/cjs/functions/text/textjoin/textjoin.cjs +173 -0
- package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +10 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/parser/ast.cjs +175 -0
- package/dist/cjs/parser/ast.cjs.map +10 -0
- package/dist/cjs/parser/formatter.cjs +319 -0
- package/dist/cjs/parser/formatter.cjs.map +10 -0
- package/dist/cjs/parser/grammar.cjs +375 -0
- package/dist/cjs/parser/grammar.cjs.map +10 -0
- package/dist/cjs/parser/lexer.cjs +443 -0
- package/dist/cjs/parser/lexer.cjs.map +10 -0
- package/dist/cjs/parser/parser.cjs +1700 -0
- package/dist/cjs/parser/parser.cjs.map +10 -0
- package/dist/cjs/react/hooks.cjs +59 -0
- package/dist/cjs/react/hooks.cjs.map +10 -0
- package/dist/mjs/core/ast-traverser.mjs +94 -0
- package/dist/mjs/core/ast-traverser.mjs.map +10 -0
- package/dist/mjs/core/autofill-utils.mjs +274 -0
- package/dist/mjs/core/autofill-utils.mjs.map +10 -0
- package/dist/mjs/core/engine.mjs +366 -0
- package/dist/mjs/core/engine.mjs.map +10 -0
- package/dist/mjs/core/managers/cache-manager.mjs +27 -0
- package/dist/mjs/core/managers/cache-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/dependency-manager.mjs +593 -0
- package/dist/mjs/core/managers/dependency-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/dependency-node.mjs +2 -0
- package/dist/mjs/core/managers/dependency-node.mjs.map +9 -0
- package/dist/mjs/core/managers/evaluation-manager.mjs +415 -0
- package/dist/mjs/core/managers/evaluation-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/event-manager.mjs +18 -0
- package/dist/mjs/core/managers/event-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs +151 -0
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/index.mjs +21 -0
- package/dist/mjs/core/managers/index.mjs.map +10 -0
- package/dist/mjs/core/managers/isDependencyNode.mjs +14 -0
- package/dist/mjs/core/managers/isDependencyNode.mjs.map +10 -0
- package/dist/mjs/core/managers/named-expression-manager.mjs +348 -0
- package/dist/mjs/core/managers/named-expression-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/range-eval-order-builder.mjs +618 -0
- package/dist/mjs/core/managers/range-eval-order-builder.mjs.map +10 -0
- package/dist/mjs/core/managers/table-manager.mjs +224 -0
- package/dist/mjs/core/managers/table-manager.mjs.map +10 -0
- package/dist/mjs/core/managers/workbook-manager.mjs +447 -0
- package/dist/mjs/core/managers/workbook-manager.mjs.map +10 -0
- package/dist/mjs/core/map-serializer.mjs +39 -0
- package/dist/mjs/core/map-serializer.mjs.map +10 -0
- package/dist/mjs/core/named-expression-renamer.mjs +58 -0
- package/dist/mjs/core/named-expression-renamer.mjs.map +10 -0
- package/dist/mjs/core/sheet-renamer.mjs +59 -0
- package/dist/mjs/core/sheet-renamer.mjs.map +10 -0
- package/dist/mjs/core/sheet-utils.mjs +8 -0
- package/dist/mjs/core/sheet-utils.mjs.map +10 -0
- package/dist/mjs/core/table-renamer.mjs +58 -0
- package/dist/mjs/core/table-renamer.mjs.map +10 -0
- package/dist/mjs/core/types.mjs +18 -0
- package/dist/mjs/core/types.mjs.map +10 -0
- package/dist/mjs/core/utils/range-serializer.mjs +35 -0
- package/dist/mjs/core/utils/range-serializer.mjs.map +10 -0
- package/dist/mjs/core/utils/spreadsheet-visualizer.mjs +112 -0
- package/dist/mjs/core/utils/spreadsheet-visualizer.mjs.map +10 -0
- package/dist/mjs/core/utils.mjs +409 -0
- package/dist/mjs/core/utils.mjs.map +10 -0
- package/dist/mjs/core/workbook-renamer.mjs +76 -0
- package/dist/mjs/core/workbook-renamer.mjs.map +10 -0
- package/dist/mjs/debug/flags.mjs +17 -0
- package/dist/mjs/debug/flags.mjs.map +10 -0
- package/dist/mjs/evaluator/arithmetic/add/add.mjs +52 -0
- package/dist/mjs/evaluator/arithmetic/add/add.mjs.map +10 -0
- package/dist/mjs/evaluator/arithmetic/divide/divide.mjs +77 -0
- package/dist/mjs/evaluator/arithmetic/divide/divide.mjs.map +10 -0
- package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs +63 -0
- package/dist/mjs/evaluator/arithmetic/multiply/multiply.mjs.map +10 -0
- package/dist/mjs/evaluator/arithmetic/power/power.mjs +95 -0
- package/dist/mjs/evaluator/arithmetic/power/power.mjs.map +10 -0
- package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs +54 -0
- package/dist/mjs/evaluator/arithmetic/subtract/subtract.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/equals.mjs +34 -0
- package/dist/mjs/evaluator/comparison/equals.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs +31 -0
- package/dist/mjs/evaluator/comparison/greater-than-or-equal.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/greater-than.mjs +31 -0
- package/dist/mjs/evaluator/comparison/greater-than.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs +39 -0
- package/dist/mjs/evaluator/comparison/less-than-or-equal.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/less-than.mjs +38 -0
- package/dist/mjs/evaluator/comparison/less-than.mjs.map +10 -0
- package/dist/mjs/evaluator/comparison/not-equals.mjs +23 -0
- package/dist/mjs/evaluator/comparison/not-equals.mjs.map +10 -0
- package/dist/mjs/evaluator/concatenation/concatenate.mjs +42 -0
- package/dist/mjs/evaluator/concatenation/concatenate.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs +28 -0
- package/dist/mjs/evaluator/dependency-nodes/ast-evaluation-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +81 -0
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +24 -0
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +78 -0
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs +20 -0
- package/dist/mjs/evaluator/dependency-nodes/spill-meta-node.mjs.map +10 -0
- package/dist/mjs/evaluator/evaluate-scalar-operator.mjs +226 -0
- package/dist/mjs/evaluator/evaluate-scalar-operator.mjs.map +10 -0
- package/dist/mjs/evaluator/evaluation-context.mjs +123 -0
- package/dist/mjs/evaluator/evaluation-context.mjs.map +10 -0
- package/dist/mjs/evaluator/evaluation-error.mjs +44 -0
- package/dist/mjs/evaluator/evaluation-error.mjs.map +10 -0
- package/dist/mjs/evaluator/formula-evaluator.mjs +780 -0
- package/dist/mjs/evaluator/formula-evaluator.mjs.map +10 -0
- package/dist/mjs/evaluator/range-evaluation-node.mjs +58 -0
- package/dist/mjs/evaluator/range-evaluation-node.mjs.map +10 -0
- package/dist/mjs/functions/_template/template.mjs +12 -0
- package/dist/mjs/functions/_template/template.mjs.map +10 -0
- package/dist/mjs/functions/array/sequence/sequence.mjs +287 -0
- package/dist/mjs/functions/array/sequence/sequence.mjs.map +10 -0
- package/dist/mjs/functions/criteria-parser.mjs +187 -0
- package/dist/mjs/functions/criteria-parser.mjs.map +10 -0
- package/dist/mjs/functions/criteria-utils.mjs +268 -0
- package/dist/mjs/functions/criteria-utils.mjs.map +10 -0
- package/dist/mjs/functions/function-utils.mjs +33 -0
- package/dist/mjs/functions/function-utils.mjs.map +10 -0
- package/dist/mjs/functions/index.mjs +95 -0
- package/dist/mjs/functions/index.mjs.map +10 -0
- package/dist/mjs/functions/information/cell/cell.mjs +168 -0
- package/dist/mjs/functions/information/cell/cell.mjs.map +10 -0
- package/dist/mjs/functions/information/column/column.mjs +120 -0
- package/dist/mjs/functions/information/column/column.mjs.map +10 -0
- package/dist/mjs/functions/information/row/row.mjs +126 -0
- package/dist/mjs/functions/information/row/row.mjs.map +10 -0
- package/dist/mjs/functions/logical/and/and.mjs +84 -0
- package/dist/mjs/functions/logical/and/and.mjs.map +10 -0
- package/dist/mjs/functions/logical/if/if.mjs +167 -0
- package/dist/mjs/functions/logical/if/if.mjs.map +10 -0
- package/dist/mjs/functions/logical/iferror/iferror.mjs +98 -0
- package/dist/mjs/functions/logical/iferror/iferror.mjs.map +10 -0
- package/dist/mjs/functions/logical/or/or.mjs +84 -0
- package/dist/mjs/functions/logical/or/or.mjs.map +10 -0
- package/dist/mjs/functions/lookup/count/count-utils.mjs +35 -0
- package/dist/mjs/functions/lookup/count/count-utils.mjs.map +10 -0
- package/dist/mjs/functions/lookup/count/count.mjs +18 -0
- package/dist/mjs/functions/lookup/count/count.mjs.map +10 -0
- package/dist/mjs/functions/lookup/count/countif.mjs +68 -0
- package/dist/mjs/functions/lookup/count/countif.mjs.map +10 -0
- package/dist/mjs/functions/lookup/count/countifs.mjs +37 -0
- package/dist/mjs/functions/lookup/count/countifs.mjs.map +10 -0
- package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs +159 -0
- package/dist/mjs/functions/lookup/index-lookup/index-lookup.mjs.map +10 -0
- package/dist/mjs/functions/lookup/match/match.mjs +140 -0
- package/dist/mjs/functions/lookup/match/match.mjs.map +10 -0
- package/dist/mjs/functions/lookup/xlookup/xlookup.mjs +382 -0
- package/dist/mjs/functions/lookup/xlookup/xlookup.mjs.map +10 -0
- package/dist/mjs/functions/math/average/average-utils.mjs +44 -0
- package/dist/mjs/functions/math/average/average-utils.mjs.map +10 -0
- package/dist/mjs/functions/math/average/average.mjs +18 -0
- package/dist/mjs/functions/math/average/average.mjs.map +10 -0
- package/dist/mjs/functions/math/average/averageif.mjs +58 -0
- package/dist/mjs/functions/math/average/averageif.mjs.map +10 -0
- package/dist/mjs/functions/math/average/averageifs.mjs +35 -0
- package/dist/mjs/functions/math/average/averageifs.mjs.map +10 -0
- package/dist/mjs/functions/math/ceiling/ceiling.mjs +191 -0
- package/dist/mjs/functions/math/ceiling/ceiling.mjs.map +10 -0
- package/dist/mjs/functions/math/max/max-utils.mjs +43 -0
- package/dist/mjs/functions/math/max/max-utils.mjs.map +10 -0
- package/dist/mjs/functions/math/max/max.mjs +18 -0
- package/dist/mjs/functions/math/max/max.mjs.map +10 -0
- package/dist/mjs/functions/math/max/maxif.mjs +58 -0
- package/dist/mjs/functions/math/max/maxif.mjs.map +10 -0
- package/dist/mjs/functions/math/max/maxifs.mjs +35 -0
- package/dist/mjs/functions/math/max/maxifs.mjs.map +10 -0
- package/dist/mjs/functions/math/min/min-utils.mjs +43 -0
- package/dist/mjs/functions/math/min/min-utils.mjs.map +10 -0
- package/dist/mjs/functions/math/min/min.mjs +18 -0
- package/dist/mjs/functions/math/min/min.mjs.map +10 -0
- package/dist/mjs/functions/math/min/minif.mjs +58 -0
- package/dist/mjs/functions/math/min/minif.mjs.map +10 -0
- package/dist/mjs/functions/math/min/minifs.mjs +35 -0
- package/dist/mjs/functions/math/min/minifs.mjs.map +10 -0
- package/dist/mjs/functions/math/sum/sum.mjs +18 -0
- package/dist/mjs/functions/math/sum/sum.mjs.map +10 -0
- package/dist/mjs/functions/math/sum/sumif.mjs +58 -0
- package/dist/mjs/functions/math/sum/sumif.mjs.map +10 -0
- package/dist/mjs/functions/math/sum/sumifs.mjs +34 -0
- package/dist/mjs/functions/math/sum/sumifs.mjs.map +10 -0
- package/dist/mjs/functions/math/sum/summation-utils.mjs +27 -0
- package/dist/mjs/functions/math/sum/summation-utils.mjs.map +10 -0
- package/dist/mjs/functions/reference/address/address.mjs +135 -0
- package/dist/mjs/functions/reference/address/address.mjs.map +10 -0
- package/dist/mjs/functions/reference/indirect/indirect.mjs +74 -0
- package/dist/mjs/functions/reference/indirect/indirect.mjs.map +10 -0
- package/dist/mjs/functions/reference/offset/offset.mjs +205 -0
- package/dist/mjs/functions/reference/offset/offset.mjs.map +10 -0
- package/dist/mjs/functions/text/concatenate/concatenate.mjs +139 -0
- package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +10 -0
- package/dist/mjs/functions/text/exact/exact.mjs +143 -0
- package/dist/mjs/functions/text/exact/exact.mjs.map +10 -0
- package/dist/mjs/functions/text/find/find.mjs +369 -0
- package/dist/mjs/functions/text/find/find.mjs.map +10 -0
- package/dist/mjs/functions/text/left/left.mjs +81 -0
- package/dist/mjs/functions/text/left/left.mjs.map +10 -0
- package/dist/mjs/functions/text/len/len.mjs +91 -0
- package/dist/mjs/functions/text/len/len.mjs.map +10 -0
- package/dist/mjs/functions/text/mid/mid.mjs +75 -0
- package/dist/mjs/functions/text/mid/mid.mjs.map +10 -0
- package/dist/mjs/functions/text/right/right.mjs +143 -0
- package/dist/mjs/functions/text/right/right.mjs.map +10 -0
- package/dist/mjs/functions/text/text-helpers.mjs +151 -0
- package/dist/mjs/functions/text/text-helpers.mjs.map +10 -0
- package/dist/mjs/functions/text/textjoin/textjoin.mjs +145 -0
- package/dist/mjs/functions/text/textjoin/textjoin.mjs.map +10 -0
- package/dist/mjs/package.json +5 -0
- package/dist/mjs/parser/ast.mjs +145 -0
- package/dist/mjs/parser/ast.mjs.map +10 -0
- package/dist/mjs/parser/formatter.mjs +289 -0
- package/dist/mjs/parser/formatter.mjs.map +10 -0
- package/dist/mjs/parser/grammar.mjs +345 -0
- package/dist/mjs/parser/grammar.mjs.map +10 -0
- package/dist/mjs/parser/lexer.mjs +412 -0
- package/dist/mjs/parser/lexer.mjs.map +10 -0
- package/dist/mjs/parser/parser.mjs +1692 -0
- package/dist/mjs/parser/parser.mjs.map +10 -0
- package/dist/mjs/react/hooks.mjs +16 -0
- package/dist/mjs/react/hooks.mjs.map +10 -0
- package/dist/types/core/ast-traverser.d.ts +28 -0
- package/dist/types/core/autofill-utils.d.ts +32 -0
- package/dist/types/core/engine.d.ts +184 -0
- package/dist/types/core/managers/cache-manager.d.ts +14 -0
- package/dist/types/core/managers/dependency-manager.d.ts +147 -0
- package/dist/types/core/managers/dependency-node.d.ts +13 -0
- package/dist/types/core/managers/evaluation-manager.d.ts +30 -0
- package/dist/types/core/managers/event-manager.d.ts +8 -0
- package/dist/types/core/managers/frontier-dependency-manager.d.ts +69 -0
- package/dist/types/core/managers/index.d.ts +7 -0
- package/dist/types/core/managers/isDependencyNode.d.ts +2 -0
- package/dist/types/core/managers/named-expression-manager.d.ts +101 -0
- package/dist/types/core/managers/range-eval-order-builder.d.ts +33 -0
- package/dist/types/core/managers/table-manager.d.ts +84 -0
- package/dist/types/core/managers/workbook-manager.d.ts +136 -0
- package/dist/types/core/map-serializer.d.ts +4 -0
- package/dist/types/core/named-expression-renamer.d.ts +21 -0
- package/dist/types/core/sheet-renamer.d.ts +28 -0
- package/dist/types/core/sheet-utils.d.ts +2 -0
- package/dist/types/core/table-renamer.d.ts +21 -0
- package/dist/types/core/types.d.ts +272 -0
- package/dist/types/core/utils/cell-address-parsing.test.d.ts +1 -0
- package/dist/types/core/utils/range-serializer.d.ts +22 -0
- package/dist/types/core/utils/range-serializer.test.d.ts +1 -0
- package/dist/types/core/utils/spreadsheet-visualizer.d.ts +30 -0
- package/dist/types/core/utils.d.ts +48 -0
- package/dist/types/core/workbook-renamer.d.ts +28 -0
- package/dist/types/debug/flags.d.ts +11 -0
- package/dist/types/evaluator/arithmetic/add/add.d.ts +2 -0
- package/dist/types/evaluator/arithmetic/add/add.test.d.ts +1 -0
- package/dist/types/evaluator/arithmetic/divide/divide.d.ts +2 -0
- package/dist/types/evaluator/arithmetic/divide/divide.test.d.ts +1 -0
- package/dist/types/evaluator/arithmetic/multiply/multiply.d.ts +2 -0
- package/dist/types/evaluator/arithmetic/multiply/multiply.test.d.ts +1 -0
- package/dist/types/evaluator/arithmetic/power/power.d.ts +2 -0
- package/dist/types/evaluator/arithmetic/power/power.test.d.ts +1 -0
- package/dist/types/evaluator/arithmetic/subtract/subtract.d.ts +2 -0
- package/dist/types/evaluator/arithmetic/subtract/subtract.test.d.ts +1 -0
- package/dist/types/evaluator/comparison/comparison-operators.test.d.ts +1 -0
- package/dist/types/evaluator/comparison/equals.d.ts +6 -0
- package/dist/types/evaluator/comparison/greater-than-or-equal.d.ts +6 -0
- package/dist/types/evaluator/comparison/greater-than.d.ts +6 -0
- package/dist/types/evaluator/comparison/less-than-or-equal.d.ts +6 -0
- package/dist/types/evaluator/comparison/less-than.d.ts +6 -0
- package/dist/types/evaluator/comparison/not-equals.d.ts +6 -0
- package/dist/types/evaluator/concatenation/concatenate.d.ts +6 -0
- package/dist/types/evaluator/concatenation/concatenate.test.d.ts +1 -0
- package/dist/types/evaluator/dependency-nodes/ast-evaluation-node.d.ts +12 -0
- package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +31 -0
- package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +10 -0
- package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +17 -0
- package/dist/types/evaluator/dependency-nodes/spill-meta-node.d.ts +7 -0
- package/dist/types/evaluator/evaluate-scalar-operator.d.ts +12 -0
- package/dist/types/evaluator/evaluation-context.d.ts +66 -0
- package/dist/types/evaluator/evaluation-error.d.ts +20 -0
- package/dist/types/evaluator/formula-evaluator.d.ts +67 -0
- package/dist/types/evaluator/open-range-evaluator.test.d.ts +1 -0
- package/dist/types/evaluator/range-evaluation-node.d.ts +16 -0
- package/dist/types/functions/_template/template.d.ts +5 -0
- package/dist/types/functions/_template/template.test.d.ts +1 -0
- package/dist/types/functions/array/sequence/performance-test.d.ts +1 -0
- package/dist/types/functions/array/sequence/sequence.d.ts +14 -0
- package/dist/types/functions/array/sequence/sequence.test.d.ts +1 -0
- package/dist/types/functions/criteria-parser.d.ts +27 -0
- package/dist/types/functions/criteria-utils.d.ts +61 -0
- package/dist/types/functions/function-utils.d.ts +21 -0
- package/dist/types/functions/index.d.ts +2 -0
- package/dist/types/functions/information/cell/cell.d.ts +24 -0
- package/dist/types/functions/information/cell/cell.test.d.ts +1 -0
- package/dist/types/functions/information/column/column.d.ts +14 -0
- package/dist/types/functions/information/column/column.test.d.ts +1 -0
- package/dist/types/functions/information/row/row.d.ts +14 -0
- package/dist/types/functions/information/row/row.test.d.ts +1 -0
- package/dist/types/functions/logical/and/and.d.ts +5 -0
- package/dist/types/functions/logical/and/and.test.d.ts +1 -0
- package/dist/types/functions/logical/if/if.d.ts +5 -0
- package/dist/types/functions/logical/if/if.test.d.ts +1 -0
- package/dist/types/functions/logical/iferror/iferror.d.ts +5 -0
- package/dist/types/functions/logical/iferror/iferror.test.d.ts +1 -0
- package/dist/types/functions/logical/or/or.d.ts +5 -0
- package/dist/types/functions/logical/or/or.test.d.ts +1 -0
- package/dist/types/functions/lookup/count/count-utils.d.ts +14 -0
- package/dist/types/functions/lookup/count/count.d.ts +21 -0
- package/dist/types/functions/lookup/count/count.test.d.ts +1 -0
- package/dist/types/functions/lookup/count/countif.d.ts +26 -0
- package/dist/types/functions/lookup/count/countif.test.d.ts +1 -0
- package/dist/types/functions/lookup/count/countifs.d.ts +21 -0
- package/dist/types/functions/lookup/count/countifs.test.d.ts +1 -0
- package/dist/types/functions/lookup/index-lookup/index-lookup.d.ts +2 -0
- package/dist/types/functions/lookup/index-lookup/index-lookup.test.d.ts +1 -0
- package/dist/types/functions/lookup/match/match.d.ts +2 -0
- package/dist/types/functions/lookup/match/match.test.d.ts +1 -0
- package/dist/types/functions/lookup/xlookup/xlookup.d.ts +2 -0
- package/dist/types/functions/lookup/xlookup/xlookup.test.d.ts +1 -0
- package/dist/types/functions/math/average/average-utils.d.ts +10 -0
- package/dist/types/functions/math/average/average.d.ts +18 -0
- package/dist/types/functions/math/average/average.test.d.ts +1 -0
- package/dist/types/functions/math/average/averageif.d.ts +23 -0
- package/dist/types/functions/math/average/averageif.test.d.ts +1 -0
- package/dist/types/functions/math/average/averageifs.d.ts +21 -0
- package/dist/types/functions/math/average/averageifs.test.d.ts +1 -0
- package/dist/types/functions/math/ceiling/ceiling.d.ts +5 -0
- package/dist/types/functions/math/ceiling/ceiling.test.d.ts +1 -0
- package/dist/types/functions/math/max/max-utils.d.ts +20 -0
- package/dist/types/functions/math/max/max.d.ts +18 -0
- package/dist/types/functions/math/max/max.test.d.ts +1 -0
- package/dist/types/functions/math/max/maxif.d.ts +23 -0
- package/dist/types/functions/math/max/maxif.test.d.ts +1 -0
- package/dist/types/functions/math/max/maxifs.d.ts +21 -0
- package/dist/types/functions/math/max/maxifs.test.d.ts +1 -0
- package/dist/types/functions/math/min/min-utils.d.ts +20 -0
- package/dist/types/functions/math/min/min.d.ts +5 -0
- package/dist/types/functions/math/min/min.test.d.ts +1 -0
- package/dist/types/functions/math/min/minif.d.ts +23 -0
- package/dist/types/functions/math/min/minif.test.d.ts +1 -0
- package/dist/types/functions/math/min/minifs.d.ts +21 -0
- package/dist/types/functions/math/min/minifs.test.d.ts +1 -0
- package/dist/types/functions/math/sum/sum.d.ts +5 -0
- package/dist/types/functions/math/sum/sum.test.d.ts +1 -0
- package/dist/types/functions/math/sum/sumif.d.ts +23 -0
- package/dist/types/functions/math/sum/sumif.test.d.ts +1 -0
- package/dist/types/functions/math/sum/sumifs.d.ts +21 -0
- package/dist/types/functions/math/sum/sumifs.test.d.ts +1 -0
- package/dist/types/functions/math/sum/summation-utils.d.ts +19 -0
- package/dist/types/functions/reference/address/address.d.ts +18 -0
- package/dist/types/functions/reference/address/address.test.d.ts +1 -0
- package/dist/types/functions/reference/indirect/indirect.d.ts +20 -0
- package/dist/types/functions/reference/indirect/indirect.test.d.ts +1 -0
- package/dist/types/functions/reference/offset/offset.d.ts +23 -0
- package/dist/types/functions/reference/offset/offset.test.d.ts +1 -0
- package/dist/types/functions/text/concatenate/concatenate.d.ts +5 -0
- package/dist/types/functions/text/concatenate/concatenate.test.d.ts +1 -0
- package/dist/types/functions/text/exact/exact.d.ts +5 -0
- package/dist/types/functions/text/exact/exact.test.d.ts +1 -0
- package/dist/types/functions/text/find/find.d.ts +20 -0
- package/dist/types/functions/text/find/find.test.d.ts +1 -0
- package/dist/types/functions/text/left/left.d.ts +19 -0
- package/dist/types/functions/text/left/left.test.d.ts +1 -0
- package/dist/types/functions/text/len/len.d.ts +16 -0
- package/dist/types/functions/text/len/len.test.d.ts +1 -0
- package/dist/types/functions/text/mid/mid.d.ts +20 -0
- package/dist/types/functions/text/mid/mid.test.d.ts +1 -0
- package/dist/types/functions/text/right/right.d.ts +2 -0
- package/dist/types/functions/text/right/right.test.d.ts +1 -0
- package/dist/types/functions/text/text-helpers.d.ts +27 -0
- package/dist/types/functions/text/textjoin/textjoin.d.ts +5 -0
- package/dist/types/functions/text/textjoin/textjoin.test.d.ts +1 -0
- package/dist/types/parser/ast.d.ts +275 -0
- package/dist/types/parser/formatter.d.ts +6 -0
- package/dist/types/parser/grammar.d.ts +203 -0
- package/dist/types/parser/lexer.d.ts +144 -0
- package/dist/types/parser/parser.d.ts +159 -0
- package/dist/types/react/hooks.d.ts +5 -0
- package/package.json +41 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { type ContextDependency } from "src/evaluator/evaluation-context";
|
|
2
|
+
import { type CellAddress, type EvaluationOrder, type SpilledValue } from "../types";
|
|
3
|
+
import { AstEvaluationNode } from "src/evaluator/dependency-nodes/ast-evaluation-node";
|
|
4
|
+
import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
|
|
5
|
+
import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
|
|
6
|
+
import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
|
|
7
|
+
import type { ASTNode } from "src/parser/ast";
|
|
8
|
+
import { CacheManager } from "./cache-manager";
|
|
9
|
+
import type { CellNodeKeyDictionary, CellNodeType, DependencyNode } from "./dependency-node";
|
|
10
|
+
import { WorkbookManager } from "./workbook-manager";
|
|
11
|
+
import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
|
|
12
|
+
export interface DependencyTreeNode {
|
|
13
|
+
type: "cell" | "range" | "empty";
|
|
14
|
+
circular?: boolean;
|
|
15
|
+
key: string;
|
|
16
|
+
directDepsUpdated?: boolean;
|
|
17
|
+
resolved?: boolean;
|
|
18
|
+
canResolve: boolean;
|
|
19
|
+
resultType: "awaiting-evaluation" | "spilled-values" | "value" | "range" | "error" | "does-not-spill";
|
|
20
|
+
deps?: DependencyTreeNode[];
|
|
21
|
+
frontierDependencies?: DependencyTreeNode[];
|
|
22
|
+
self?: boolean;
|
|
23
|
+
_debug?: {
|
|
24
|
+
rawFrontierDependencies?: string[];
|
|
25
|
+
discardedFrontierDependencies?: string[];
|
|
26
|
+
activeFrontierDependencies?: string[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The DependencyManager is responsible for storing the evaluated values and their dependencies.
|
|
31
|
+
*/
|
|
32
|
+
export declare class DependencyManager {
|
|
33
|
+
private cacheManager;
|
|
34
|
+
private workbookManager;
|
|
35
|
+
/**
|
|
36
|
+
* The dependency graph
|
|
37
|
+
*/
|
|
38
|
+
private evaluatedNodes;
|
|
39
|
+
private spillMetaNodes;
|
|
40
|
+
private emptyCells;
|
|
41
|
+
/**
|
|
42
|
+
* registry of spilled values
|
|
43
|
+
*/
|
|
44
|
+
private _spilledValues;
|
|
45
|
+
/**
|
|
46
|
+
* Key is workbook:sheetName:rangeKey, e.g. Workbook1:Sheet1:A1:D10, from rangeAddressToKey
|
|
47
|
+
*/
|
|
48
|
+
private ranges;
|
|
49
|
+
constructor(cacheManager: CacheManager, workbookManager: WorkbookManager);
|
|
50
|
+
get spilledValues(): IterableIterator<SpilledValue>;
|
|
51
|
+
isSpillOrigin(cellAddress: CellAddress): boolean;
|
|
52
|
+
getSpillValue(cellAddress: CellAddress): SpilledValue | undefined;
|
|
53
|
+
getSpilledAddress(cellAddress: CellAddress,
|
|
54
|
+
/**
|
|
55
|
+
* if the spilled value is already available, we can use it to get the source address
|
|
56
|
+
*/
|
|
57
|
+
passedSpilledValue?: SpilledValue): {
|
|
58
|
+
address: CellAddress;
|
|
59
|
+
spillOffset: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
clearEvaluationCache(): void;
|
|
65
|
+
setSpilledValue(nodeKey: string, spilledValue: SpilledValue): void;
|
|
66
|
+
getSpilledValue(nodeKey: string): SpilledValue | undefined;
|
|
67
|
+
getEmptyCellNode(nodeKey: string): EmptyCellEvaluationNode;
|
|
68
|
+
getSpillMetaNode(nodeKey: string): SpillMetaNode;
|
|
69
|
+
getCellValueNode(nodeKey: string): CellValueNode;
|
|
70
|
+
getCellValueOrEmptyCellNode(nodeKey: string): CellValueNode | EmptyCellEvaluationNode;
|
|
71
|
+
getSpillMetaOrEmptySpillMetaNode(nodeKey: string): SpillMetaNode | EmptyCellEvaluationNode;
|
|
72
|
+
lookupCellNode<T extends CellNodeType>(nodeKey: string, types: T[]): CellNodeKeyDictionary[T][];
|
|
73
|
+
getRangeNode(rangeKey: string): RangeEvaluationNode;
|
|
74
|
+
asts: Map<
|
|
75
|
+
/**
|
|
76
|
+
* ast key
|
|
77
|
+
*/
|
|
78
|
+
string, {
|
|
79
|
+
entries: Map<
|
|
80
|
+
/**
|
|
81
|
+
* context dependency key
|
|
82
|
+
*/
|
|
83
|
+
string, {
|
|
84
|
+
evalNode: AstEvaluationNode;
|
|
85
|
+
contextDependency: ContextDependency;
|
|
86
|
+
}>;
|
|
87
|
+
}>;
|
|
88
|
+
getAstNode(ast: ASTNode, currentContext: Omit<Required<ContextDependency>, "tableName"> & {
|
|
89
|
+
tableName?: string;
|
|
90
|
+
}): AstEvaluationNode;
|
|
91
|
+
/**
|
|
92
|
+
* Once an AST node is evaluated, we know if it is context dependent
|
|
93
|
+
* and will thus save it under the correct cache key according to its
|
|
94
|
+
* contextDependency
|
|
95
|
+
*
|
|
96
|
+
* only resolved ast nodes can be saved
|
|
97
|
+
*/
|
|
98
|
+
private saveAstNode;
|
|
99
|
+
getEvaluatedNodes(): Map<string, CellValueNode>;
|
|
100
|
+
/**
|
|
101
|
+
* Get transitive dependencies and transitive frontier dependencies
|
|
102
|
+
* This is only used by buildEvaluationOrder, so we'll optimize it there
|
|
103
|
+
*/
|
|
104
|
+
getTransitiveDepsForEvalOrder(node: DependencyNode, visited?: Set<DependencyNode>): Set<DependencyNode>;
|
|
105
|
+
/**
|
|
106
|
+
* Build evaluation order for a cell using SCC-based condensation DAG approach
|
|
107
|
+
*
|
|
108
|
+
* Algorithm:
|
|
109
|
+
* 1. Discover all transitive dependencies (skipping resolved nodes)
|
|
110
|
+
* 2. Find SCCs using Tarjan's algorithm
|
|
111
|
+
* 3. Create condensation DAG from SCCs
|
|
112
|
+
* 4. Topologically sort the condensation DAG using Kahn's algorithm
|
|
113
|
+
* 5. For each SCC, create internal evaluation order with cycle breaking
|
|
114
|
+
* 6. Join the sorted SCC evaluation orders to create final evaluation order
|
|
115
|
+
*/
|
|
116
|
+
buildEvaluationOrder(node: CellValueNode | EmptyCellEvaluationNode): EvaluationOrder;
|
|
117
|
+
/**
|
|
118
|
+
* Find strongly connected components using Tarjan's algorithm
|
|
119
|
+
* @param nodes - Map of nodes to analyze
|
|
120
|
+
* @param includeFrontier - If true, use getAllDependencies(); if false, use getDependencies()
|
|
121
|
+
* @returns Array of SCCs (each SCC is a Set of nodes)
|
|
122
|
+
*/
|
|
123
|
+
private findSCCs;
|
|
124
|
+
/**
|
|
125
|
+
* Build evaluation order within a single SCC using DFS with cycle breaking
|
|
126
|
+
* Uses all dependencies (including frontier) for proper evaluation ordering
|
|
127
|
+
*/
|
|
128
|
+
private buildSCCEvaluationOrder;
|
|
129
|
+
/**
|
|
130
|
+
* Compute hash representing the graph structure including SCC information
|
|
131
|
+
*/
|
|
132
|
+
private computeGraphHash;
|
|
133
|
+
/**
|
|
134
|
+
* Compute a hash representing the current state of evaluated nodes
|
|
135
|
+
* This hash changes when dependencies, frontier dependencies, or discarded frontier dependencies change
|
|
136
|
+
*/
|
|
137
|
+
private computeHash;
|
|
138
|
+
/**
|
|
139
|
+
* Get a hierarchical dependency tree for a node
|
|
140
|
+
*/
|
|
141
|
+
getDependencyTree(node: DependencyNode): DependencyTreeNode;
|
|
142
|
+
markResolvedNodes(node: DependencyNode): void;
|
|
143
|
+
/**
|
|
144
|
+
* Update SCCs in cache to mark them as resolved if all their nodes are resolved
|
|
145
|
+
*/
|
|
146
|
+
updateResolvedSCCs(evalOrder: EvaluationOrder): void;
|
|
147
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AstEvaluationNode } from "src/evaluator/dependency-nodes/ast-evaluation-node";
|
|
2
|
+
import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
|
|
3
|
+
import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
|
|
4
|
+
import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
|
|
5
|
+
import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
|
|
6
|
+
export type DependencyNode = CellValueNode | RangeEvaluationNode | EmptyCellEvaluationNode | AstEvaluationNode | SpillMetaNode;
|
|
7
|
+
export type CellNodeType = "cell-value" | "empty" | "spill-meta";
|
|
8
|
+
export type CellNodeKey = `${CellNodeType}:${string}`;
|
|
9
|
+
export type CellNodeKeyDictionary = {
|
|
10
|
+
"cell-value": CellValueNode;
|
|
11
|
+
empty: EmptyCellEvaluationNode;
|
|
12
|
+
"spill-meta": SpillMetaNode;
|
|
13
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
|
|
2
|
+
import { RangeEvaluationNode } from "src/evaluator/range-evaluation-node";
|
|
3
|
+
import { FormulaEvaluator } from "../../evaluator/formula-evaluator";
|
|
4
|
+
import { type CellAddress, type CellValue, type SerializedCellValue, type SingleEvaluationResult, type SpreadsheetRange } from "../types";
|
|
5
|
+
import type { DependencyManager } from "./dependency-manager";
|
|
6
|
+
import type { WorkbookManager } from "./workbook-manager";
|
|
7
|
+
import { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
|
|
8
|
+
import { EmptyCellEvaluationNode } from "src/evaluator/dependency-nodes/empty-cell-evaluation-node";
|
|
9
|
+
import type { TableManager } from "./table-manager";
|
|
10
|
+
export declare class EvaluationManager {
|
|
11
|
+
private workbookManager;
|
|
12
|
+
private tableManager;
|
|
13
|
+
private formulaEvaluator;
|
|
14
|
+
private dependencyManager;
|
|
15
|
+
private isEvaluating;
|
|
16
|
+
constructor(workbookManager: WorkbookManager, tableManager: TableManager, formulaEvaluator: FormulaEvaluator, dependencyManager: DependencyManager);
|
|
17
|
+
clearEvaluationCache(): void;
|
|
18
|
+
evaluationResultToSerializedValue(evaluation: SingleEvaluationResult, cellAddress: CellAddress, debug?: boolean): SerializedCellValue;
|
|
19
|
+
evaluateEmptyCell(node: EmptyCellEvaluationNode): void;
|
|
20
|
+
evaluateRangeNode(node: RangeEvaluationNode): void;
|
|
21
|
+
evaluateCellNode(node: CellValueNode | SpillMetaNode): void;
|
|
22
|
+
evaluateDependencyNode(dependencyKey: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Evaluates a cell by building the evaluation order and evaluating the dependencies in order
|
|
25
|
+
*/
|
|
26
|
+
evaluateCell(node: CellValueNode | EmptyCellEvaluationNode): void;
|
|
27
|
+
convertScalarValueToCellValue(val: SerializedCellValue): CellValue;
|
|
28
|
+
canSpill(spillCandidate: CellAddress, spillArea: SpreadsheetRange): boolean;
|
|
29
|
+
getCellEvaluationResult(cellAddress: CellAddress): SingleEvaluationResult | undefined;
|
|
30
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CellValueNode } from "src/evaluator/dependency-nodes/cell-value-node";
|
|
2
|
+
import type { CellAddress, CellInRangeResult, RangeAddress } from "../types";
|
|
3
|
+
import type { DependencyManager } from "./dependency-manager";
|
|
4
|
+
import type { DependencyNode } from "./dependency-node";
|
|
5
|
+
import type { WorkbookManager } from "./workbook-manager";
|
|
6
|
+
import type { SpillMetaNode } from "src/evaluator/dependency-nodes/spill-meta-node";
|
|
7
|
+
type EvalOrderEntry = {
|
|
8
|
+
type: "value";
|
|
9
|
+
address: CellAddress;
|
|
10
|
+
node: CellValueNode;
|
|
11
|
+
} | {
|
|
12
|
+
type: "empty_cell";
|
|
13
|
+
address: CellAddress;
|
|
14
|
+
candidates: SpillMetaNode[];
|
|
15
|
+
} | {
|
|
16
|
+
type: "empty_range";
|
|
17
|
+
address: RangeAddress;
|
|
18
|
+
candidates: SpillMetaNode[];
|
|
19
|
+
};
|
|
20
|
+
export declare class FrontierDependencyManager {
|
|
21
|
+
private frontierRange;
|
|
22
|
+
protected workbookManager: WorkbookManager;
|
|
23
|
+
protected evaluationManager: DependencyManager;
|
|
24
|
+
private evalOrder;
|
|
25
|
+
private _resolved;
|
|
26
|
+
private _directDepsUpdated;
|
|
27
|
+
constructor(frontierRange: RangeAddress, workbookManager: WorkbookManager, evaluationManager: DependencyManager);
|
|
28
|
+
/**
|
|
29
|
+
* frontierDependencies is the set of dependency node keys that could spill values onto the target range (if evaluationResult is spilled-values)
|
|
30
|
+
* Key is from cellAddressToKey
|
|
31
|
+
*
|
|
32
|
+
* soft edge dependencies, which can not cause cycles in the dependency graph
|
|
33
|
+
*/
|
|
34
|
+
private _frontierDependencies;
|
|
35
|
+
/**
|
|
36
|
+
* discardedFrontierDependencies is the set of dependency node keys that were discarded as frontier dependencies because
|
|
37
|
+
* they they do not produce spilled values that spill onto the target range
|
|
38
|
+
* Key is from cellAddressToKey
|
|
39
|
+
*/
|
|
40
|
+
private _discardedFrontierDependencies;
|
|
41
|
+
/**
|
|
42
|
+
* hard edge dependencies, which can cause cycles in the dependency graph
|
|
43
|
+
*/
|
|
44
|
+
private _dependencies;
|
|
45
|
+
/**
|
|
46
|
+
* cache, should maybe be stored in the cache manager
|
|
47
|
+
*/
|
|
48
|
+
get iterateAllCells(): undefined | Iterable<CellInRangeResult>;
|
|
49
|
+
getRangeEvalOrder(): EvalOrderEntry[];
|
|
50
|
+
get frontierDependencies(): Set<SpillMetaNode>;
|
|
51
|
+
get discardedFrontierDependencies(): Set<SpillMetaNode>;
|
|
52
|
+
maybeDiscardFrontierDependency(dependency: SpillMetaNode): void;
|
|
53
|
+
maybeUpgradeFrontierDependency(dependency: SpillMetaNode): void;
|
|
54
|
+
/**
|
|
55
|
+
* a range is considered resolved when the dependencies has been established
|
|
56
|
+
*/
|
|
57
|
+
resolve(): void;
|
|
58
|
+
canResolve(): boolean;
|
|
59
|
+
get resolved(): boolean;
|
|
60
|
+
get directDepsUpdated(): boolean;
|
|
61
|
+
resetDirectDepsUpdated(): void;
|
|
62
|
+
getDependencies(): Set<DependencyNode>;
|
|
63
|
+
getFrontierDependencies(): Set<SpillMetaNode>;
|
|
64
|
+
getAllDependencies(): Set<DependencyNode>;
|
|
65
|
+
getDiscardedFrontierDependencies(): Set<SpillMetaNode>;
|
|
66
|
+
addDependency(dependency: DependencyNode): void;
|
|
67
|
+
upgradeFrontierDependencies(): void;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { WorkbookManager } from "./workbook-manager";
|
|
2
|
+
export { NamedExpressionManager } from "./named-expression-manager";
|
|
3
|
+
export { TableManager } from "./table-manager";
|
|
4
|
+
export { EventManager } from "./event-manager";
|
|
5
|
+
export { EvaluationManager } from "./evaluation-manager";
|
|
6
|
+
export { DependencyManager } from "./dependency-manager";
|
|
7
|
+
export { buildRangeEvalOrder, type LookupOrder, type RangeEvalOrderEntry, } from "./range-eval-order-builder";
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { NamedExpression } from "../types";
|
|
2
|
+
import type { NamedExpressionNode } from "src/parser/ast";
|
|
3
|
+
import type { EvaluationContext } from "src/evaluator/evaluation-context";
|
|
4
|
+
export declare class NamedExpressionManager {
|
|
5
|
+
sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>>;
|
|
6
|
+
workbookExpressions: Map<string, Map<string, NamedExpression>>;
|
|
7
|
+
globalExpressions: Map<string, NamedExpression>;
|
|
8
|
+
addNamedExpression({ expression, expressionName, sheetName, workbookName, }: {
|
|
9
|
+
expression: string;
|
|
10
|
+
expressionName: string;
|
|
11
|
+
sheetName?: string;
|
|
12
|
+
workbookName?: string;
|
|
13
|
+
}): void;
|
|
14
|
+
removeNamedExpression({ expressionName, sheetName, workbookName, }: {
|
|
15
|
+
expressionName: string;
|
|
16
|
+
sheetName?: string;
|
|
17
|
+
workbookName?: string;
|
|
18
|
+
}): boolean;
|
|
19
|
+
updateNamedExpression({ expression, expressionName, sheetName, workbookName, }: {
|
|
20
|
+
expression: string;
|
|
21
|
+
expressionName: string;
|
|
22
|
+
sheetName?: string;
|
|
23
|
+
workbookName?: string;
|
|
24
|
+
}): void;
|
|
25
|
+
renameNamedExpression({ expressionName, sheetName, workbookName, newName, }: {
|
|
26
|
+
expressionName: string;
|
|
27
|
+
sheetName?: string;
|
|
28
|
+
workbookName?: string;
|
|
29
|
+
newName: string;
|
|
30
|
+
}): boolean;
|
|
31
|
+
updateAllNamedExpressions(updateCallback: (formula: string) => string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Replace all named expressions
|
|
34
|
+
*/
|
|
35
|
+
setNamedExpressions(opts: ({
|
|
36
|
+
type: "global";
|
|
37
|
+
} | {
|
|
38
|
+
type: "sheet";
|
|
39
|
+
sheetName: string;
|
|
40
|
+
workbookName: string;
|
|
41
|
+
} | {
|
|
42
|
+
type: "workbook";
|
|
43
|
+
workbookName: string;
|
|
44
|
+
}) & {
|
|
45
|
+
expressions: Map<string, NamedExpression>;
|
|
46
|
+
}): void;
|
|
47
|
+
getNamedExpression(depNode: {
|
|
48
|
+
name: string;
|
|
49
|
+
scope: {
|
|
50
|
+
type: "global";
|
|
51
|
+
} | {
|
|
52
|
+
type: "workbook";
|
|
53
|
+
workbookName: string;
|
|
54
|
+
} | {
|
|
55
|
+
type: "sheet";
|
|
56
|
+
workbookName: string;
|
|
57
|
+
sheetName: string;
|
|
58
|
+
};
|
|
59
|
+
}): NamedExpression | undefined;
|
|
60
|
+
resolveNamedExpression(namedExpression: Pick<NamedExpressionNode, "name" | "sheetName" | "workbookName">, context: EvaluationContext): string | undefined;
|
|
61
|
+
getNamedExpressions(): {
|
|
62
|
+
sheetExpressions: Map<string, Map<string, Map<string, NamedExpression>>>;
|
|
63
|
+
workbookExpressions: Map<string, Map<string, NamedExpression>>;
|
|
64
|
+
globalExpressions: Map<string, NamedExpression>;
|
|
65
|
+
};
|
|
66
|
+
resetNamedExpressions(namedExpressions: ReturnType<typeof this.getNamedExpressions>): void;
|
|
67
|
+
/**
|
|
68
|
+
* When adding a sheet, we need to initialize the new maps
|
|
69
|
+
*/
|
|
70
|
+
addSheet(opts: {
|
|
71
|
+
workbookName: string;
|
|
72
|
+
sheetName: string;
|
|
73
|
+
}): void;
|
|
74
|
+
/**
|
|
75
|
+
* When adding a workbook, we need to initialize the new maps
|
|
76
|
+
*/
|
|
77
|
+
addWorkbook(workbookName: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* When removing a workbook, we need to remove the workbook from the sheet level
|
|
80
|
+
*/
|
|
81
|
+
removeWorkbook(workbookName: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* When removing a sheet, we need to remove the sheet from the workbook level
|
|
84
|
+
*/
|
|
85
|
+
removeSheet(opts: {
|
|
86
|
+
workbookName: string;
|
|
87
|
+
sheetName: string;
|
|
88
|
+
}): void;
|
|
89
|
+
/**
|
|
90
|
+
* Rename a sheet's named expressions, mainly used when renaming a sheet
|
|
91
|
+
*/
|
|
92
|
+
renameSheet(options: {
|
|
93
|
+
sheetName: string;
|
|
94
|
+
newSheetName: string;
|
|
95
|
+
workbookName: string;
|
|
96
|
+
}): void;
|
|
97
|
+
renameWorkbook(opts: {
|
|
98
|
+
workbookName: string;
|
|
99
|
+
newWorkbookName: string;
|
|
100
|
+
}): void;
|
|
101
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CellAddress, type RangeAddress } from "../types";
|
|
2
|
+
import { type WorkbookManager } from "./workbook-manager";
|
|
3
|
+
export type LookupOrder = "row-major" | "col-major";
|
|
4
|
+
export type RangeEvalOrderEntryDict = {
|
|
5
|
+
value: {
|
|
6
|
+
type: "value";
|
|
7
|
+
address: CellAddress;
|
|
8
|
+
};
|
|
9
|
+
empty_cell: {
|
|
10
|
+
type: "empty_cell";
|
|
11
|
+
address: CellAddress;
|
|
12
|
+
candidates: CellAddress[];
|
|
13
|
+
};
|
|
14
|
+
empty_range: {
|
|
15
|
+
type: "empty_range";
|
|
16
|
+
address: RangeAddress;
|
|
17
|
+
candidates: CellAddress[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type RangeEvalOrderEntry = RangeEvalOrderEntryDict["value"] | RangeEvalOrderEntryDict["empty_cell"] | RangeEvalOrderEntryDict["empty_range"];
|
|
21
|
+
/**
|
|
22
|
+
* Build a deterministic, ordered list describing every cell inside a lookup range.
|
|
23
|
+
* This function analyzes the range and classifies each cell/range as either:
|
|
24
|
+
* - A value-like cell (occupied)
|
|
25
|
+
* - An empty cell with 0-2 frontier candidates
|
|
26
|
+
* - An empty range with 0-2 frontier candidates
|
|
27
|
+
*
|
|
28
|
+
* @param this - WorkbookManager instance
|
|
29
|
+
* @param lookupOrder - "row-major" or "col-major" iteration order
|
|
30
|
+
* @param lookupRange - The range to analyze
|
|
31
|
+
* @returns Ordered array of entries describing the range
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildRangeEvalOrder(this: WorkbookManager, lookupOrder: LookupOrder, lookupRange: RangeAddress): RangeEvalOrderEntry[];
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CellAddress, SerializedCellValue, SpreadsheetRangeEnd, TableDefinition } from "../types";
|
|
2
|
+
import type { WorkbookManager } from "./workbook-manager";
|
|
3
|
+
export declare class TableManager {
|
|
4
|
+
tables: Map<
|
|
5
|
+
/**
|
|
6
|
+
* workbook name -> table name -> table definition
|
|
7
|
+
*/
|
|
8
|
+
string, Map<string, TableDefinition>>;
|
|
9
|
+
private workbookManager;
|
|
10
|
+
constructor(workbookManager: WorkbookManager);
|
|
11
|
+
getTables(workbookName: string): Map<string, TableDefinition>;
|
|
12
|
+
getTable(opts: {
|
|
13
|
+
workbookName: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}): TableDefinition | undefined;
|
|
16
|
+
makeTable({ tableName, sheetName, workbookName, start, numRows, numCols, getCellValue, }: {
|
|
17
|
+
tableName: string;
|
|
18
|
+
sheetName: string;
|
|
19
|
+
start: string;
|
|
20
|
+
numRows: SpreadsheetRangeEnd;
|
|
21
|
+
numCols: number;
|
|
22
|
+
workbookName: string;
|
|
23
|
+
getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
|
|
24
|
+
}): TableDefinition;
|
|
25
|
+
copyTable(from: {
|
|
26
|
+
workbookName: string;
|
|
27
|
+
tableName: string;
|
|
28
|
+
}, to: {
|
|
29
|
+
workbookName: string;
|
|
30
|
+
tableName: string;
|
|
31
|
+
}): void;
|
|
32
|
+
addTable(props: {
|
|
33
|
+
tableName: string;
|
|
34
|
+
sheetName: string;
|
|
35
|
+
start: string;
|
|
36
|
+
numRows: SpreadsheetRangeEnd;
|
|
37
|
+
numCols: number;
|
|
38
|
+
workbookName: string;
|
|
39
|
+
getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
|
|
40
|
+
}): TableDefinition;
|
|
41
|
+
renameTable(workbookName: string, names: {
|
|
42
|
+
oldName: string;
|
|
43
|
+
newName: string;
|
|
44
|
+
}): void;
|
|
45
|
+
updateTable({ tableName, sheetName, start, numRows, numCols, workbookName, getCellValue, }: {
|
|
46
|
+
tableName: string;
|
|
47
|
+
sheetName?: string;
|
|
48
|
+
start?: string;
|
|
49
|
+
numRows?: SpreadsheetRangeEnd;
|
|
50
|
+
workbookName: string;
|
|
51
|
+
numCols?: number;
|
|
52
|
+
getCellValue: (cellAddress: CellAddress) => SerializedCellValue;
|
|
53
|
+
}): void;
|
|
54
|
+
removeTable({ tableName, workbookName, }: {
|
|
55
|
+
tableName: string;
|
|
56
|
+
workbookName: string;
|
|
57
|
+
}): boolean;
|
|
58
|
+
updateTablesForSheetRename(options: {
|
|
59
|
+
sheetName: string;
|
|
60
|
+
newSheetName: string;
|
|
61
|
+
workbookName: string;
|
|
62
|
+
}): void;
|
|
63
|
+
updateTablesForWorkbookRename(options: {
|
|
64
|
+
workbookName: string;
|
|
65
|
+
newWorkbookName: string;
|
|
66
|
+
}): void;
|
|
67
|
+
resetTables(newTables: Map<string, Map<string, TableDefinition>>): void;
|
|
68
|
+
/**
|
|
69
|
+
* When adding a workbook, we need to initialize the new maps
|
|
70
|
+
*/
|
|
71
|
+
addWorkbook(workbookName: string): void;
|
|
72
|
+
/**
|
|
73
|
+
* When removing a workbook, we need to remove the maps
|
|
74
|
+
*/
|
|
75
|
+
removeWorkbook(workbookName: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* When removing a sheet, we need to remove the tables that belong to the sheet
|
|
78
|
+
*/
|
|
79
|
+
removeSheet(opts: {
|
|
80
|
+
sheetName: string;
|
|
81
|
+
workbookName: string;
|
|
82
|
+
}): void;
|
|
83
|
+
isCellInTable(cellAddress: CellAddress): TableDefinition | undefined;
|
|
84
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { type CellAddress, type SerializedCellValue, type Sheet, type Workbook } from "../types";
|
|
2
|
+
import type { RangeAddress } from "src/core/types";
|
|
3
|
+
interface IndexEntry {
|
|
4
|
+
number: number;
|
|
5
|
+
key: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SheetIndexes {
|
|
8
|
+
rowGroups: Map<number, IndexEntry[]>;
|
|
9
|
+
colGroups: Map<number, IndexEntry[]>;
|
|
10
|
+
cellsSortedByRow: IndexEntry[];
|
|
11
|
+
cellsSortedByCol: IndexEntry[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Utility class for binary search operations on IndexEntry arrays
|
|
15
|
+
*/
|
|
16
|
+
export declare class IndexEntryBinarySearch {
|
|
17
|
+
/**
|
|
18
|
+
* Find the insertion point for a number in a sorted IndexEntry array
|
|
19
|
+
* Returns the index where the number should be inserted to maintain sort order
|
|
20
|
+
*/
|
|
21
|
+
static findInsertionPoint(entries: IndexEntry[], target: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Find the first element >= target
|
|
24
|
+
* Returns the index of the first element, or -1 if not found
|
|
25
|
+
*/
|
|
26
|
+
static findFirstGreaterOrEqual(entries: IndexEntry[], target: number): number;
|
|
27
|
+
/**
|
|
28
|
+
* Find the rightmost position where we could insert a target value
|
|
29
|
+
* Useful for finding elements that come before a target
|
|
30
|
+
*/
|
|
31
|
+
static findRightmostInsertionPoint(entries: IndexEntry[], target: number): number;
|
|
32
|
+
}
|
|
33
|
+
export declare class WorkbookManager {
|
|
34
|
+
private workbooks;
|
|
35
|
+
private sheetIndexes;
|
|
36
|
+
/**
|
|
37
|
+
* Generate a key for the sheet indexes map
|
|
38
|
+
*/
|
|
39
|
+
private getSheetIndexKey;
|
|
40
|
+
/**
|
|
41
|
+
* Get or create indexes for a sheet
|
|
42
|
+
*/
|
|
43
|
+
getSheetIndexes(opts: {
|
|
44
|
+
workbookName: string;
|
|
45
|
+
sheetName: string;
|
|
46
|
+
}): SheetIndexes;
|
|
47
|
+
getSheets(workbookName: string): Map<string, Sheet>;
|
|
48
|
+
getWorkbooks(): Map<string, Workbook>;
|
|
49
|
+
addWorkbook(workbookName: string): void;
|
|
50
|
+
removeWorkbook(workbookName: string): void;
|
|
51
|
+
isContentEmpty(content: SerializedCellValue): boolean;
|
|
52
|
+
renameWorkbook(opts: {
|
|
53
|
+
workbookName: string;
|
|
54
|
+
newWorkbookName: string;
|
|
55
|
+
}): void;
|
|
56
|
+
resetWorkbooks(workbooks: Map<string, Workbook>): void;
|
|
57
|
+
getSheet({ workbookName, sheetName, }: {
|
|
58
|
+
workbookName: string;
|
|
59
|
+
sheetName: string;
|
|
60
|
+
}): Sheet | undefined;
|
|
61
|
+
addSheet({ workbookName, sheetName, }: {
|
|
62
|
+
workbookName: string;
|
|
63
|
+
sheetName: string;
|
|
64
|
+
}): Sheet;
|
|
65
|
+
removeSheet({ workbookName, sheetName, }: {
|
|
66
|
+
workbookName: string;
|
|
67
|
+
sheetName: string;
|
|
68
|
+
}): Sheet;
|
|
69
|
+
renameSheet({ workbookName, sheetName, newSheetName, }: {
|
|
70
|
+
workbookName: string;
|
|
71
|
+
sheetName: string;
|
|
72
|
+
newSheetName: string;
|
|
73
|
+
}): Sheet;
|
|
74
|
+
updateAllFormulas(updateCallback: (formula: string) => string): void;
|
|
75
|
+
getSheetSerialized({ workbookName, sheetName, }: {
|
|
76
|
+
workbookName: string;
|
|
77
|
+
sheetName: string;
|
|
78
|
+
}): Map<string, SerializedCellValue>;
|
|
79
|
+
/**
|
|
80
|
+
* Add a cell to the grouped indexes
|
|
81
|
+
*/
|
|
82
|
+
private addCellToGroups;
|
|
83
|
+
/**
|
|
84
|
+
* Remove a cell from the grouped indexes
|
|
85
|
+
*/
|
|
86
|
+
private removeCellFromGroups;
|
|
87
|
+
/**
|
|
88
|
+
* Find insertion index in sorted array
|
|
89
|
+
*/
|
|
90
|
+
private findInsertIndex;
|
|
91
|
+
/**
|
|
92
|
+
* Inserts an item into a sorted array by number, maintaining sort order.
|
|
93
|
+
* If an item with the same number and key already exists, it won't be added again.
|
|
94
|
+
*/
|
|
95
|
+
private insertSorted;
|
|
96
|
+
setCellContent(address: CellAddress, content: SerializedCellValue, options?: {
|
|
97
|
+
/**
|
|
98
|
+
* for extra performance, if the sheet is already known, it can be passed in
|
|
99
|
+
*/
|
|
100
|
+
sheet?: Sheet;
|
|
101
|
+
/**
|
|
102
|
+
* if the sheet is being built from scratch, we can skip some checks
|
|
103
|
+
*/
|
|
104
|
+
buildingFromScratch?: boolean;
|
|
105
|
+
}): void;
|
|
106
|
+
/**
|
|
107
|
+
* Replace all content for a sheet (safely, without breaking references)
|
|
108
|
+
* This method clears the existing Map and repopulates it rather than replacing the Map reference
|
|
109
|
+
*/
|
|
110
|
+
setSheetContent(opts: {
|
|
111
|
+
sheetName: string;
|
|
112
|
+
workbookName: string;
|
|
113
|
+
}, newContent: Map<string, SerializedCellValue>): void;
|
|
114
|
+
/**
|
|
115
|
+
* Removes the content in the spreadsheet that is inside the range.
|
|
116
|
+
* OPTIMIZED: Uses indexes to only process cells that actually exist.
|
|
117
|
+
* ENHANCED: Now supports infinite ranges.
|
|
118
|
+
*/
|
|
119
|
+
clearSpreadsheetRange(address: RangeAddress): void;
|
|
120
|
+
/**
|
|
121
|
+
* Optimized generator to iterate over cells defined in the content within a range
|
|
122
|
+
* Uses indexes to efficiently find and yield only cells that exist within the range
|
|
123
|
+
*/
|
|
124
|
+
iterateCellsInRange(address: RangeAddress): Generator<CellAddress>;
|
|
125
|
+
getCellsInRange(address: RangeAddress): CellAddress[];
|
|
126
|
+
private getCellContent;
|
|
127
|
+
getSerializedCellValue(cellAddress: CellAddress): SerializedCellValue;
|
|
128
|
+
isCellEmpty(cellAddress: CellAddress): boolean;
|
|
129
|
+
isFormulaCell(cellAddress: CellAddress): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Build evaluation order for a range
|
|
132
|
+
* Delegates to the buildRangeEvalOrder function
|
|
133
|
+
*/
|
|
134
|
+
buildRangeEvalOrder(lookupOrder: "row-major" | "col-major", lookupRange: RangeAddress): import("./range-eval-order-builder").RangeEvalOrderEntry[];
|
|
135
|
+
}
|
|
136
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renames named expression references in a formula string
|
|
3
|
+
* @param formula - The formula string (without the leading =)
|
|
4
|
+
* @param oldName - The current named expression name to replace
|
|
5
|
+
* @param newName - The new named expression name
|
|
6
|
+
* @returns The updated formula string, or the original if no changes were made
|
|
7
|
+
*/
|
|
8
|
+
export declare function renameNamedExpressionInFormula(formula: string, oldName: string, newName: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a formula contains references to a specific named expression
|
|
11
|
+
* @param formula - The formula string (without the leading =)
|
|
12
|
+
* @param namedExpressionName - The named expression name to search for
|
|
13
|
+
* @returns True if the formula contains references to the named expression
|
|
14
|
+
*/
|
|
15
|
+
export declare function formulaReferencesNamedExpression(formula: string, namedExpressionName: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Gets all named expression names referenced in a formula
|
|
18
|
+
* @param formula - The formula string (without the leading =)
|
|
19
|
+
* @returns Array of unique named expression names referenced in the formula
|
|
20
|
+
*/
|
|
21
|
+
export declare function getReferencedNamedExpressionNames(formula: string): string[];
|