@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,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/functions/text/text-helpers.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n FormulaError,\n type CellString,\n type FunctionEvaluationResult,\n type ValueEvaluationResult,\n type CellAddress,\n type SpreadsheetRange,\n type ErrorEvaluationResult,\n type SingleEvaluationResult,\n} from \"src/core/types\";\nimport type { FormulaEngine } from \"src/core/engine\";\nimport type { FormulaEvaluator } from \"src/evaluator/formula-evaluator\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\n\n/**\n * Strictly extracts string value without type coercion\n */\nexport function convertToString(result: FunctionEvaluationResult, context: EvaluationContext): string | ErrorEvaluationResult {\n if (result.type === \"awaiting-evaluation\") {\n return result;\n }\n \n if (result.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Expected a value result\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (result.result.type === \"string\") {\n return result.result.value;\n } else {\n // No type coercion - only strings are valid\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Expected a string value\",\n errAddress: context.dependencyNode,\n };\n }\n}\n\n/**\n * Strictly extracts numeric value without type coercion\n */\nexport function extractNumericValue(result: FunctionEvaluationResult, context: EvaluationContext): number | ErrorEvaluationResult {\n if (result.type === \"awaiting-evaluation\") {\n return result;\n }\n \n if (result.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Expected a value result\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (result.result.type === \"number\") {\n return result.result.value;\n } else {\n // No type coercion - only numbers are valid\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Expected a number value\",\n errAddress: context.dependencyNode,\n };\n }\n}\n\n/**\n * MID substring operation for MID function\n */\nexport function midOperation(\n textResult: FunctionEvaluationResult,\n startNumResult: FunctionEvaluationResult,\n numCharsResult: FunctionEvaluationResult,\n context: EvaluationContext\n): { type: \"value\"; result: CellString } | ErrorEvaluationResult {\n const textStr = convertToString(textResult, context);\n const startNum = extractNumericValue(startNumResult, context);\n const numChars = extractNumericValue(numCharsResult, context);\n\n // Check if any of the results are awaiting evaluation or errors\n if (typeof textStr === \"object\" && (textStr.type === \"awaiting-evaluation\" || textStr.type === \"error\")) {\n return textStr;\n }\n if (typeof startNum === \"object\" && (startNum.type === \"awaiting-evaluation\" || startNum.type === \"error\")) {\n return startNum;\n }\n if (typeof numChars === \"object\" && (numChars.type === \"awaiting-evaluation\" || numChars.type === \"error\")) {\n return numChars;\n }\n\n // At this point, all values should be primitive types\n const textValue = textStr as string;\n const startNumValue = startNum as number;\n const numCharsValue = numChars as number;\n\n // Validate startNum and numChars\n if (startNumValue < 1) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"StartNum argument must be a positive number\",\n errAddress: context.dependencyNode,\n };\n }\n if (numCharsValue < 0) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"NumChars argument must be a positive number\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Convert to 0-based index (Excel uses 1-based)\n const startIndex = Math.floor(startNumValue) - 1;\n const length = Math.floor(numCharsValue);\n\n // Extract substring\n const result = textValue.substring(startIndex, startIndex + length);\n\n return { type: \"value\", result: { type: \"string\", value: result } };\n}\n\n/**\n * Helper for creating spilled-values result for MID function (3 parameters)\n */\nexport function createMidSpilledResult(\n this: FormulaEvaluator,\n {\n textResult,\n startNumResult,\n numCharsResult,\n context,\n }: {\n textResult: FunctionEvaluationResult;\n startNumResult: FunctionEvaluationResult;\n numCharsResult: FunctionEvaluationResult;\n context: EvaluationContext;\n }\n): FunctionEvaluationResult {\n const hasSpilledText = textResult.type === \"spilled-values\";\n const hasSpilledStart = startNumResult.type === \"spilled-values\";\n const hasSpilledNum = numCharsResult.type === \"spilled-values\";\n\n if (!hasSpilledText && !hasSpilledStart && !hasSpilledNum) {\n throw new Error(\"createMidSpilledResult called without spilled values\");\n }\n\n return {\n type: \"spilled-values\",\n spillArea: (origin: CellAddress) => {\n // Calculate spill area (union of all spilled ranges)\n let spillArea: SpreadsheetRange;\n\n if (hasSpilledText && textResult.type === \"spilled-values\") {\n spillArea = textResult.spillArea(origin);\n } else if (hasSpilledStart && startNumResult.type === \"spilled-values\") {\n spillArea = startNumResult.spillArea(origin);\n } else if (hasSpilledNum && numCharsResult.type === \"spilled-values\") {\n spillArea = numCharsResult.spillArea(origin);\n } else {\n // This shouldn't happen since we check for spilled values at the beginning\n throw new Error(\"No spilled values found\");\n }\n\n // Union with other spilled ranges if they exist\n if (\n hasSpilledText &&\n hasSpilledStart &&\n textResult.type === \"spilled-values\" &&\n startNumResult.type === \"spilled-values\"\n ) {\n spillArea = this.unionRanges(\n this.projectRange(textResult.spillArea(origin), origin),\n this.projectRange(startNumResult.spillArea(origin), origin)\n );\n }\n\n if (\n (hasSpilledText || hasSpilledStart) &&\n hasSpilledNum &&\n numCharsResult.type === \"spilled-values\"\n ) {\n const projectedSpillArea = this.projectRange(spillArea, origin);\n const numSpillArea = this.projectRange(\n numCharsResult.spillArea(origin),\n origin\n );\n spillArea = this.unionRanges(projectedSpillArea, numSpillArea);\n }\n return spillArea;\n },\n source: \"MID with spilled values\",\n evaluate: (\n spilledCell,\n evalContext\n ): SingleEvaluationResult => {\n // Evaluate all arguments at this spilled position\n const spillTextResult = hasSpilledText\n ? textResult.evaluate(spilledCell, evalContext)\n : textResult;\n const spillStartResult = hasSpilledStart\n ? startNumResult.evaluate(spilledCell, evalContext)\n : startNumResult;\n const spillNumResult = hasSpilledNum\n ? numCharsResult.evaluate(spilledCell, evalContext)\n : numCharsResult;\n\n if (!spillTextResult || spillTextResult.type === \"error\") {\n return spillTextResult;\n }\n if (!spillStartResult || spillStartResult.type === \"error\") {\n return spillStartResult;\n }\n if (!spillNumResult || spillNumResult.type === \"error\") {\n return spillNumResult;\n }\n\n return midOperation(spillTextResult, spillStartResult, spillNumResult, evalContext);\n },\n evaluateAllCells: (intersectingRange) => {\n throw new Error(\"WIP: evaluateAllCells for MID is not implemented\");\n },\n };\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "81F08635A25A4B9364756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/functions/text/textjoin/textjoin.ts
|
|
30
|
+
var exports_textjoin = {};
|
|
31
|
+
__export(exports_textjoin, {
|
|
32
|
+
TEXTJOIN: () => TEXTJOIN
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(exports_textjoin);
|
|
35
|
+
var import_types = require("src/core/types");
|
|
36
|
+
var MAX_TEXT_LENGTH = 32767;
|
|
37
|
+
function coerceToString(value) {
|
|
38
|
+
switch (value.type) {
|
|
39
|
+
case "string":
|
|
40
|
+
return value.value;
|
|
41
|
+
case "number":
|
|
42
|
+
if (value.value === Infinity) {
|
|
43
|
+
return "INFINITY";
|
|
44
|
+
} else if (value.value === -Infinity) {
|
|
45
|
+
return "-INFINITY";
|
|
46
|
+
} else if (isNaN(value.value)) {
|
|
47
|
+
return "NaN";
|
|
48
|
+
} else {
|
|
49
|
+
return value.value.toString();
|
|
50
|
+
}
|
|
51
|
+
case "boolean":
|
|
52
|
+
return value.value ? "TRUE" : "FALSE";
|
|
53
|
+
case "infinity":
|
|
54
|
+
return value.sign === "positive" ? "INFINITY" : "-INFINITY";
|
|
55
|
+
default:
|
|
56
|
+
return "";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function collectTextItems(args, ignoreEmpty, context) {
|
|
60
|
+
const textItems = [];
|
|
61
|
+
for (const arg of args) {
|
|
62
|
+
if (arg.type === "error") {
|
|
63
|
+
return arg;
|
|
64
|
+
}
|
|
65
|
+
if (arg.type === "value") {
|
|
66
|
+
const text = coerceToString(arg.result);
|
|
67
|
+
if (!ignoreEmpty || text !== "") {
|
|
68
|
+
textItems.push(text);
|
|
69
|
+
}
|
|
70
|
+
} else if (arg.type === "spilled-values") {
|
|
71
|
+
const cellValues = arg.evaluateAllCells.call(this, {
|
|
72
|
+
context,
|
|
73
|
+
origin: context.cellAddress,
|
|
74
|
+
evaluate: arg.evaluate,
|
|
75
|
+
lookupOrder: "col-major"
|
|
76
|
+
});
|
|
77
|
+
if (cellValues.type !== "values") {
|
|
78
|
+
return cellValues;
|
|
79
|
+
}
|
|
80
|
+
for (const cellValue of cellValues.values) {
|
|
81
|
+
if (cellValue.result.type === "error" || cellValue.result.type === "awaiting-evaluation") {
|
|
82
|
+
return cellValue.result;
|
|
83
|
+
}
|
|
84
|
+
if (cellValue.result.type === "value") {
|
|
85
|
+
const text = coerceToString(cellValue.result.result);
|
|
86
|
+
if (!ignoreEmpty || text !== "") {
|
|
87
|
+
textItems.push(text);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return textItems;
|
|
94
|
+
}
|
|
95
|
+
var TEXTJOIN = {
|
|
96
|
+
name: "TEXTJOIN",
|
|
97
|
+
evaluate: function(node, context) {
|
|
98
|
+
if (node.args.length < 3) {
|
|
99
|
+
return {
|
|
100
|
+
type: "error",
|
|
101
|
+
err: import_types.FormulaError.VALUE,
|
|
102
|
+
message: "TEXTJOIN function requires at least 3 arguments",
|
|
103
|
+
errAddress: context.dependencyNode
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const delimiterResult = this.evaluateNode(node.args[0], context);
|
|
107
|
+
if (delimiterResult.type === "error") {
|
|
108
|
+
return delimiterResult;
|
|
109
|
+
}
|
|
110
|
+
if (delimiterResult.type === "awaiting-evaluation") {
|
|
111
|
+
return delimiterResult;
|
|
112
|
+
}
|
|
113
|
+
if (delimiterResult.type === "spilled-values") {
|
|
114
|
+
return {
|
|
115
|
+
type: "error",
|
|
116
|
+
err: import_types.FormulaError.VALUE,
|
|
117
|
+
message: "TEXTJOIN delimiter must be a single value",
|
|
118
|
+
errAddress: context.dependencyNode
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const delimiter = coerceToString(delimiterResult.result);
|
|
122
|
+
const ignoreEmptyResult = this.evaluateNode(node.args[1], context);
|
|
123
|
+
if (ignoreEmptyResult.type === "error") {
|
|
124
|
+
return ignoreEmptyResult;
|
|
125
|
+
}
|
|
126
|
+
if (ignoreEmptyResult.type === "awaiting-evaluation") {
|
|
127
|
+
return ignoreEmptyResult;
|
|
128
|
+
}
|
|
129
|
+
if (ignoreEmptyResult.type === "spilled-values") {
|
|
130
|
+
return {
|
|
131
|
+
type: "error",
|
|
132
|
+
err: import_types.FormulaError.VALUE,
|
|
133
|
+
message: "TEXTJOIN ignore_empty must be a single value",
|
|
134
|
+
errAddress: context.dependencyNode
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
let ignoreEmpty = false;
|
|
138
|
+
if (ignoreEmptyResult.result.type === "boolean") {
|
|
139
|
+
ignoreEmpty = ignoreEmptyResult.result.value;
|
|
140
|
+
} else if (ignoreEmptyResult.result.type === "number") {
|
|
141
|
+
ignoreEmpty = ignoreEmptyResult.result.value !== 0;
|
|
142
|
+
} else if (ignoreEmptyResult.result.type === "string") {
|
|
143
|
+
ignoreEmpty = ignoreEmptyResult.result.value !== "";
|
|
144
|
+
}
|
|
145
|
+
const textArgs = [];
|
|
146
|
+
for (let i = 2;i < node.args.length; i++) {
|
|
147
|
+
const result2 = this.evaluateNode(node.args[i], context);
|
|
148
|
+
if (result2.type === "error" || result2.type === "awaiting-evaluation") {
|
|
149
|
+
return result2;
|
|
150
|
+
}
|
|
151
|
+
textArgs.push(result2);
|
|
152
|
+
}
|
|
153
|
+
const textItems = collectTextItems.call(this, textArgs, ignoreEmpty, context);
|
|
154
|
+
if (!Array.isArray(textItems)) {
|
|
155
|
+
return textItems;
|
|
156
|
+
}
|
|
157
|
+
const result = textItems.join(delimiter);
|
|
158
|
+
if (result.length > MAX_TEXT_LENGTH) {
|
|
159
|
+
return {
|
|
160
|
+
type: "error",
|
|
161
|
+
err: import_types.FormulaError.VALUE,
|
|
162
|
+
message: `TEXTJOIN result exceeds ${MAX_TEXT_LENGTH} character limit`,
|
|
163
|
+
errAddress: context.dependencyNode
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
type: "value",
|
|
168
|
+
result: { type: "string", value: result }
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
//# debugId=A87D4DCDE3D2304764756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/functions/text/textjoin/textjoin.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n FormulaError,\n type CellValue,\n type CellNumber,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n type ValueEvaluationResult,\n type CellAddress,\n type SpreadsheetRange,\n type SpilledValuesEvaluationResult,\n type SingleEvaluationResult,\n type ErrorEvaluationResult,\n type CellString,\n} from \"src/core/types\";\nimport type { EvaluationContext } from \"src/evaluator/evaluation-context\";\nimport type { FormulaEvaluator } from \"src/evaluator/formula-evaluator\";\n\n/**\n * TEXTJOIN function - Joins text from multiple ranges and/or strings with a specified delimiter\n *\n * Usage: TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...)\n *\n * delimiter: String to insert between text items (can be empty string \"\")\n * ignore_empty: If TRUE, empty cells/strings are ignored; if FALSE, they are included\n * text1, text2, ...: Text items to join (can be strings, ranges, or arrays)\n *\n * Examples:\n * TEXTJOIN(\", \", TRUE, A1:A3) - joins A1, A2, A3 with \", \" separator, ignoring empty cells\n * TEXTJOIN(\"-\", FALSE, \"a\", \"b\", \"c\") - returns \"a-b-c\"\n * TEXTJOIN(\", \", TRUE, \"Red\", \"\", \"Blue\") - returns \"Red, Blue\" (empty string ignored)\n *\n * Note:\n * - Supports type coercion: numbers and booleans are converted to strings\n * - Returns #VALUE! if result exceeds 32,767 characters\n */\n\nconst MAX_TEXT_LENGTH = 32767;\n\n/**\n * Helper function to convert a cell value to string with type coercion\n */\nfunction coerceToString(value: CellValue): string {\n switch (value.type) {\n case \"string\":\n return value.value;\n case \"number\":\n // Convert number to string\n if (value.value === Infinity) {\n return \"INFINITY\";\n } else if (value.value === -Infinity) {\n return \"-INFINITY\";\n } else if (isNaN(value.value)) {\n return \"NaN\";\n } else {\n return value.value.toString();\n }\n case \"boolean\":\n // Convert boolean to string\n return value.value ? \"TRUE\" : \"FALSE\";\n case \"infinity\":\n return value.sign === \"positive\" ? \"INFINITY\" : \"-INFINITY\";\n default:\n return \"\";\n }\n}\n\n/**\n * Helper function to collect all text items from arguments, handling ranges\n */\nfunction collectTextItems(\n this: FormulaEvaluator,\n args: FunctionEvaluationResult[],\n ignoreEmpty: boolean,\n context: EvaluationContext\n): string[] | ErrorEvaluationResult {\n const textItems: string[] = [];\n\n for (const arg of args) {\n if (arg.type === \"error\") {\n return arg;\n }\n\n if (arg.type === \"value\") {\n const text = coerceToString(arg.result);\n if (!ignoreEmpty || text !== \"\") {\n textItems.push(text);\n }\n } else if (arg.type === \"spilled-values\") {\n // Extract all values from the range\n const cellValues = arg.evaluateAllCells.call(this, {\n context,\n origin: context.cellAddress,\n evaluate: arg.evaluate,\n lookupOrder: \"col-major\",\n });\n\n if (cellValues.type !== \"values\") {\n return cellValues;\n }\n\n for (const cellValue of cellValues.values) {\n if (\n cellValue.result.type === \"error\" ||\n cellValue.result.type === \"awaiting-evaluation\"\n ) {\n return cellValue.result;\n }\n if (cellValue.result.type === \"value\") {\n const text = coerceToString(cellValue.result.result);\n if (!ignoreEmpty || text !== \"\") {\n textItems.push(text);\n }\n }\n }\n }\n }\n\n return textItems;\n}\n\n/**\n * TEXTJOIN function implementation\n */\nexport const TEXTJOIN: FunctionDefinition = {\n name: \"TEXTJOIN\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length < 3) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"TEXTJOIN function requires at least 3 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate delimiter (first argument)\n const delimiterResult = this.evaluateNode(node.args[0]!, context);\n if (delimiterResult.type === \"error\") {\n return delimiterResult;\n }\n if (delimiterResult.type === \"awaiting-evaluation\") {\n return delimiterResult;\n }\n\n // Delimiter must be a single value\n if (delimiterResult.type === \"spilled-values\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"TEXTJOIN delimiter must be a single value\",\n errAddress: context.dependencyNode,\n };\n }\n\n const delimiter = coerceToString(delimiterResult.result);\n\n // Evaluate ignore_empty (second argument)\n const ignoreEmptyResult = this.evaluateNode(node.args[1]!, context);\n if (ignoreEmptyResult.type === \"error\") {\n return ignoreEmptyResult;\n }\n if (ignoreEmptyResult.type === \"awaiting-evaluation\") {\n return ignoreEmptyResult;\n }\n\n // ignore_empty must be a single value\n if (ignoreEmptyResult.type === \"spilled-values\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"TEXTJOIN ignore_empty must be a single value\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Convert ignore_empty to boolean\n let ignoreEmpty = false;\n if (ignoreEmptyResult.result.type === \"boolean\") {\n ignoreEmpty = ignoreEmptyResult.result.value;\n } else if (ignoreEmptyResult.result.type === \"number\") {\n ignoreEmpty = ignoreEmptyResult.result.value !== 0;\n } else if (ignoreEmptyResult.result.type === \"string\") {\n ignoreEmpty = ignoreEmptyResult.result.value !== \"\";\n }\n\n // Evaluate text arguments (remaining arguments)\n const textArgs: FunctionEvaluationResult[] = [];\n for (let i = 2; i < node.args.length; i++) {\n const result = this.evaluateNode(node.args[i]!, context);\n if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n return result;\n }\n textArgs.push(result);\n }\n\n // Collect all text items from arguments\n const textItems = collectTextItems.call(\n this,\n textArgs,\n ignoreEmpty,\n context\n );\n\n // Check if we got an error\n if (!Array.isArray(textItems)) {\n return textItems;\n }\n\n // Join text items with delimiter\n const result = textItems.join(delimiter);\n\n // Check length limit\n if (result.length > MAX_TEXT_LENGTH) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: `TEXTJOIN result exceeds ${MAX_TEXT_LENGTH} character limit`,\n errAddress: context.dependencyNode,\n };\n }\n\n return {\n type: \"value\",\n result: { type: \"string\", value: result },\n };\n },\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "A87D4DCDE3D2304764756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
6
|
+
var __toCommonJS = (from) => {
|
|
7
|
+
var entry = __moduleCache.get(from), desc;
|
|
8
|
+
if (entry)
|
|
9
|
+
return entry;
|
|
10
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
}));
|
|
16
|
+
__moduleCache.set(from, entry);
|
|
17
|
+
return entry;
|
|
18
|
+
};
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// src/parser/ast.ts
|
|
30
|
+
var exports_ast = {};
|
|
31
|
+
__export(exports_ast, {
|
|
32
|
+
createValueNode: () => createValueNode,
|
|
33
|
+
createUnaryOpNode: () => createUnaryOpNode,
|
|
34
|
+
createThreeDRangeNode: () => createThreeDRangeNode,
|
|
35
|
+
createStructuredReferenceNode: () => createStructuredReferenceNode,
|
|
36
|
+
createReferenceNode: () => createReferenceNode,
|
|
37
|
+
createRangeNode: () => createRangeNode,
|
|
38
|
+
createNamedExpressionNode: () => createNamedExpressionNode,
|
|
39
|
+
createInfinityNode: () => createInfinityNode,
|
|
40
|
+
createFunctionNode: () => createFunctionNode,
|
|
41
|
+
createErrorNode: () => createErrorNode,
|
|
42
|
+
createEmptyNode: () => createEmptyNode,
|
|
43
|
+
createBinaryOpNode: () => createBinaryOpNode,
|
|
44
|
+
createArrayNode: () => createArrayNode
|
|
45
|
+
});
|
|
46
|
+
module.exports = __toCommonJS(exports_ast);
|
|
47
|
+
function createValueNode(value, position) {
|
|
48
|
+
return {
|
|
49
|
+
type: "value",
|
|
50
|
+
value,
|
|
51
|
+
position
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createEmptyNode(position) {
|
|
55
|
+
return { type: "empty", position };
|
|
56
|
+
}
|
|
57
|
+
function createReferenceNode({
|
|
58
|
+
address,
|
|
59
|
+
isAbsolute,
|
|
60
|
+
position,
|
|
61
|
+
sheetName,
|
|
62
|
+
workbookName
|
|
63
|
+
}) {
|
|
64
|
+
return {
|
|
65
|
+
type: "reference",
|
|
66
|
+
address,
|
|
67
|
+
isAbsolute,
|
|
68
|
+
sheetName,
|
|
69
|
+
workbookName,
|
|
70
|
+
position
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function createRangeNode({
|
|
74
|
+
sheetName,
|
|
75
|
+
workbookName,
|
|
76
|
+
range,
|
|
77
|
+
isAbsolute,
|
|
78
|
+
position
|
|
79
|
+
}) {
|
|
80
|
+
return {
|
|
81
|
+
type: "range",
|
|
82
|
+
range,
|
|
83
|
+
sheetName,
|
|
84
|
+
workbookName,
|
|
85
|
+
isAbsolute,
|
|
86
|
+
position
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function createFunctionNode(name, args, position) {
|
|
90
|
+
return {
|
|
91
|
+
type: "function",
|
|
92
|
+
name: name.toUpperCase(),
|
|
93
|
+
args,
|
|
94
|
+
position
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function createUnaryOpNode(operator, operand, position) {
|
|
98
|
+
return {
|
|
99
|
+
type: "unary-op",
|
|
100
|
+
operator,
|
|
101
|
+
operand,
|
|
102
|
+
position
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function createBinaryOpNode(operator, left, right, position) {
|
|
106
|
+
return {
|
|
107
|
+
type: "binary-op",
|
|
108
|
+
operator,
|
|
109
|
+
left,
|
|
110
|
+
right,
|
|
111
|
+
position
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function createArrayNode(elements, position) {
|
|
115
|
+
return {
|
|
116
|
+
type: "array",
|
|
117
|
+
elements,
|
|
118
|
+
position
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function createNamedExpressionNode(name, position, sheetName, workbookName) {
|
|
122
|
+
return {
|
|
123
|
+
type: "named-expression",
|
|
124
|
+
name,
|
|
125
|
+
sheetName,
|
|
126
|
+
workbookName,
|
|
127
|
+
position
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function createErrorNode(error, message, position) {
|
|
131
|
+
return {
|
|
132
|
+
type: "error",
|
|
133
|
+
error,
|
|
134
|
+
message,
|
|
135
|
+
position
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function createThreeDRangeNode(startSheet, endSheet, reference, position, workbookName) {
|
|
139
|
+
return {
|
|
140
|
+
type: "3d-range",
|
|
141
|
+
startSheet,
|
|
142
|
+
endSheet,
|
|
143
|
+
workbookName,
|
|
144
|
+
reference,
|
|
145
|
+
position
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function createStructuredReferenceNode({
|
|
149
|
+
tableName,
|
|
150
|
+
sheetName,
|
|
151
|
+
workbookName,
|
|
152
|
+
cols,
|
|
153
|
+
selector,
|
|
154
|
+
isCurrentRow = false,
|
|
155
|
+
position
|
|
156
|
+
}) {
|
|
157
|
+
return {
|
|
158
|
+
type: "structured-reference",
|
|
159
|
+
tableName,
|
|
160
|
+
sheetName,
|
|
161
|
+
workbookName,
|
|
162
|
+
cols,
|
|
163
|
+
selector,
|
|
164
|
+
isCurrentRow,
|
|
165
|
+
position
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function createInfinityNode(position) {
|
|
169
|
+
return {
|
|
170
|
+
type: "infinity",
|
|
171
|
+
position
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
//# debugId=01361EAD00AC639464756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/parser/ast.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Abstract Syntax Tree (AST) node definitions for formula parsing\n */\n\nimport type {\n CellAddress,\n CellValue,\n FormulaError,\n SpreadsheetRange,\n} from \"../core/types.cjs\";\n\n/**\n * Base interface for all AST nodes\n */\ntype ASTNodeBase = {\n position?: {\n start: number;\n end: number;\n };\n};\n\n/**\n * Literal value node (number, string, boolean, error)\n */\nexport type ValueNode = ASTNodeBase & {\n type: \"value\";\n value: CellValue;\n};\n\n/**\n * Cell reference node (e.g., A1, Sheet1!B2)\n */\nexport type ReferenceNode = ASTNodeBase & {\n type: \"reference\";\n address: {\n colIndex: number;\n rowIndex: number;\n };\n sheetName?: string;\n workbookName?: string;\n isAbsolute: {\n col: boolean;\n row: boolean;\n };\n};\n\n/**\n * Range reference node (e.g., A1:B10)\n */\nexport type RangeNode = ASTNodeBase & {\n type: \"range\";\n sheetName?: string;\n workbookName?: string;\n range: SpreadsheetRange;\n isAbsolute: {\n start: {\n col: boolean;\n row: boolean;\n };\n end: {\n col: boolean;\n row: boolean;\n };\n };\n};\n\n/**\n * Function call node (e.g., SUM(A1:A10))\n */\nexport type FunctionNode = ASTNodeBase & {\n type: \"function\";\n name: string;\n args: ASTNode[];\n};\n\n/**\n * Unary operator node (e.g., -A1, +B2)\n */\nexport type UnaryOpNode = ASTNodeBase & {\n type: \"unary-op\";\n operator: \"+\" | \"-\" | \"%\";\n operand: ASTNode;\n};\n\n/**\n * Binary operator node (e.g., A1+B1, C1*D1)\n */\nexport type BinaryOpNode = ASTNodeBase & {\n type: \"binary-op\";\n operator:\n | \"+\"\n | \"-\"\n | \"*\"\n | \"/\"\n | \"^\"\n | \"&\"\n | \"=\"\n | \"<>\"\n | \"<\"\n | \">\"\n | \"<=\"\n | \">=\";\n left: ASTNode;\n right: ASTNode;\n};\n\n/**\n * Array literal node (e.g., {1,2,3;4,5,6})\n */\nexport type ArrayNode = ASTNodeBase & {\n type: \"array\";\n elements: ASTNode[][]; // 2D array of elements\n};\n\n/**\n * 3D range node (e.g., Sheet1:Sheet3!A1)\n */\nexport type ThreeDRangeNode = ASTNodeBase & {\n type: \"3d-range\";\n startSheet: string;\n endSheet: string;\n workbookName?: string;\n reference: ReferenceNode | RangeNode;\n};\n\n/**\n * Structured reference node (e.g., Table1[Column1])\n */\nexport type StructuredReferenceNode = ASTNodeBase & {\n type: \"structured-reference\";\n tableName?: string;\n sheetName?: string;\n workbookName?: string;\n cols?: {\n startCol: string;\n endCol: string;\n };\n selector?: \"#All\" | \"#Data\" | \"#Headers\";\n isCurrentRow: boolean;\n};\n\n/**\n * Infinity literal node\n */\nexport type InfinityNode = ASTNodeBase & {\n type: \"infinity\";\n};\n\nexport type ASTNode =\n | ValueNode\n | ReferenceNode\n | RangeNode\n | FunctionNode\n | UnaryOpNode\n | BinaryOpNode\n | ArrayNode\n | NamedExpressionNode\n | ErrorNode\n | EmptyNode\n | ThreeDRangeNode\n | StructuredReferenceNode\n | InfinityNode;\n\n/**\n * Named expression reference node\n */\nexport type NamedExpressionNode = ASTNodeBase & {\n type: \"named-expression\";\n name: string;\n sheetName?: string;\n workbookName?: string;\n};\n\n/**\n * Error node for parsing errors\n */\nexport type ErrorNode = ASTNodeBase & {\n type: \"error\";\n error: FormulaError;\n message: string;\n};\n\nexport type EmptyNode = ASTNodeBase & {\n type: \"empty\";\n};\n\n/**\n * Helper function to create a value node\n */\nexport function createValueNode(\n value: CellValue,\n position?: {\n start: number;\n end: number;\n }\n): ValueNode {\n return {\n type: \"value\",\n value,\n position,\n };\n}\n\nexport function createEmptyNode(position?: {\n start: number;\n end: number;\n}): EmptyNode {\n return { type: \"empty\", position };\n}\n\n/**\n * Helper function to create a reference node\n */\nexport function createReferenceNode({\n address,\n isAbsolute,\n position,\n sheetName,\n workbookName,\n}: {\n address: {\n colIndex: number;\n rowIndex: number;\n };\n isAbsolute: { col: boolean; row: boolean };\n position?: {\n start: number;\n end: number;\n };\n sheetName?: string;\n workbookName?: string;\n}): ReferenceNode {\n return {\n type: \"reference\",\n address,\n isAbsolute,\n sheetName,\n workbookName,\n position,\n };\n}\n\n/**\n * Helper function to create a range node\n */\nexport function createRangeNode({\n sheetName,\n workbookName,\n range,\n isAbsolute,\n position,\n}: {\n sheetName?: string;\n workbookName?: string;\n range: SpreadsheetRange;\n isAbsolute: RangeNode[\"isAbsolute\"];\n position?: {\n start: number;\n end: number;\n };\n}): RangeNode {\n return {\n type: \"range\",\n range,\n sheetName,\n workbookName,\n isAbsolute,\n position,\n };\n}\n\n/**\n * Helper function to create a function node\n */\nexport function createFunctionNode(\n name: string,\n args: ASTNode[],\n position?: {\n start: number;\n end: number;\n }\n): FunctionNode {\n return {\n type: \"function\",\n name: name.toUpperCase(), // Normalize function names to uppercase\n args,\n position,\n };\n}\n\n/**\n * Helper function to create a unary operator node\n */\nexport function createUnaryOpNode(\n operator: UnaryOpNode[\"operator\"],\n operand: ASTNode,\n position?: {\n start: number;\n end: number;\n }\n): UnaryOpNode {\n return {\n type: \"unary-op\",\n operator,\n operand,\n position,\n };\n}\n\n/**\n * Helper function to create a binary operator node\n */\nexport function createBinaryOpNode(\n operator: BinaryOpNode[\"operator\"],\n left: ASTNode,\n right: ASTNode,\n position?: {\n start: number;\n end: number;\n }\n): BinaryOpNode {\n return {\n type: \"binary-op\",\n operator,\n left,\n right,\n position,\n };\n}\n\n/**\n * Helper function to create an array node\n */\nexport function createArrayNode(\n elements: ASTNode[][],\n position?: {\n start: number;\n end: number;\n }\n): ArrayNode {\n return {\n type: \"array\",\n elements,\n position,\n };\n}\n\n/**\n * Helper function to create a named expression node\n */\nexport function createNamedExpressionNode(\n name: string,\n position?: {\n start: number;\n end: number;\n },\n sheetName?: string,\n workbookName?: string\n): NamedExpressionNode {\n return {\n type: \"named-expression\",\n name,\n sheetName,\n workbookName,\n position,\n };\n}\n\n/**\n * Helper function to create an error node\n */\nexport function createErrorNode(\n error: FormulaError,\n message: string,\n position?: {\n start: number;\n end: number;\n }\n): ErrorNode {\n return {\n type: \"error\",\n error,\n message,\n position,\n };\n}\n\n/**\n * Helper function to create a 3D range node\n */\nexport function createThreeDRangeNode(\n startSheet: string,\n endSheet: string,\n reference: ReferenceNode | RangeNode,\n position?: {\n start: number;\n end: number;\n },\n workbookName?: string\n): ThreeDRangeNode {\n return {\n type: \"3d-range\",\n startSheet,\n endSheet,\n workbookName,\n reference,\n position,\n };\n}\n\n/**\n * Helper function to create a structured reference node\n */\nexport function createStructuredReferenceNode({\n tableName,\n sheetName,\n workbookName,\n cols,\n selector,\n isCurrentRow = false,\n position,\n}: {\n tableName?: string;\n sheetName?: string;\n workbookName?: string;\n cols?: {\n startCol: string;\n endCol: string;\n };\n selector?: \"#All\" | \"#Data\" | \"#Headers\";\n isCurrentRow?: boolean;\n position?: {\n start: number;\n end: number;\n };\n}): StructuredReferenceNode {\n return {\n type: \"structured-reference\",\n tableName,\n sheetName,\n workbookName,\n cols,\n selector,\n isCurrentRow,\n position,\n };\n}\n\n/**\n * Helper function to create an infinity node\n */\nexport function createInfinityNode(position?: {\n start: number;\n end: number;\n}): InfinityNode {\n return {\n type: \"infinity\",\n position,\n };\n}\n\n/**\n * AST visitor interface for traversing the tree\n */\nexport interface ASTVisitor<T = void> {\n visitValue?(node: ValueNode): T;\n visitReference?(node: ReferenceNode): T;\n visitRange?(node: RangeNode): T;\n visitFunction?(node: FunctionNode): T;\n visitUnaryOp?(node: UnaryOpNode): T;\n visitBinaryOp?(node: BinaryOpNode): T;\n visitArray?(node: ArrayNode): T;\n visitNamedExpression?(node: NamedExpressionNode): T;\n visitError?(node: ErrorNode): T;\n visitEmpty?(node: EmptyNode): T;\n visitThreeDRange?(node: ThreeDRangeNode): T;\n visitStructuredReference?(node: StructuredReferenceNode): T;\n visitInfinity?(node: InfinityNode): T;\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6LO,SAAS,eAAe,CAC7B,OACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAAA;AAGK,SAAS,eAAe,CAAC,UAGlB;AAAA,EACZ,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;AAM5B,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAagB;AAAA,EAChB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GAUY;AAAA,EACZ,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAChC,MACA,MACA,UAIc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK,YAAY;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,iBAAiB,CAC/B,UACA,SACA,UAIa;AAAA,EACb,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAChC,UACA,MACA,OACA,UAIc;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe,CAC7B,UACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,yBAAyB,CACvC,MACA,UAIA,WACA,cACqB;AAAA,EACrB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,eAAe,CAC7B,OACA,SACA,UAIW;AAAA,EACX,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,qBAAqB,CACnC,YACA,UACA,WACA,UAIA,cACiB;AAAA,EACjB,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,GAe0B;AAAA,EAC1B,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA;AAMK,SAAS,kBAAkB,CAAC,UAGlB;AAAA,EACf,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AAAA;",
|
|
8
|
+
"debugId": "01361EAD00AC639464756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|