@ricsam/formula-engine 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/ast-traverser.cjs +19 -9
- package/dist/cjs/core/ast-traverser.cjs.map +2 -2
- package/dist/cjs/core/autofill-utils.cjs +19 -9
- package/dist/cjs/core/autofill-utils.cjs.map +2 -2
- package/dist/cjs/core/cell-mover.cjs +19 -9
- package/dist/cjs/core/cell-mover.cjs.map +2 -2
- package/dist/cjs/core/commands/command-executor.cjs +24 -13
- package/dist/cjs/core/commands/command-executor.cjs.map +3 -3
- package/dist/cjs/core/commands/content-commands.cjs +292 -9
- package/dist/cjs/core/commands/content-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/metadata-commands.cjs +19 -9
- package/dist/cjs/core/commands/metadata-commands.cjs.map +2 -2
- package/dist/cjs/core/commands/named-expression-commands.cjs +138 -13
- package/dist/cjs/core/commands/named-expression-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/structure-commands.cjs +216 -15
- package/dist/cjs/core/commands/structure-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/style-commands.cjs +19 -9
- package/dist/cjs/core/commands/style-commands.cjs.map +2 -2
- package/dist/cjs/core/commands/table-commands.cjs +134 -13
- package/dist/cjs/core/commands/table-commands.cjs.map +3 -3
- package/dist/cjs/core/commands/types.cjs +36 -9
- package/dist/cjs/core/commands/types.cjs.map +3 -3
- package/dist/cjs/core/engine-snapshot.cjs +51 -0
- package/dist/cjs/core/engine-snapshot.cjs.map +10 -0
- package/dist/cjs/core/engine.cjs +58 -34
- package/dist/cjs/core/engine.cjs.map +3 -3
- package/dist/cjs/core/managers/cache-manager.cjs +123 -9
- package/dist/cjs/core/managers/cache-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/copy-manager.cjs +19 -9
- package/dist/cjs/core/managers/copy-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/dependency-manager.cjs +697 -9
- package/dist/cjs/core/managers/dependency-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/dependency-node.cjs +14 -8
- package/dist/cjs/core/managers/dependency-node.cjs.map +1 -1
- package/dist/cjs/core/managers/evaluation-manager.cjs +296 -11
- package/dist/cjs/core/managers/evaluation-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/event-manager.cjs +19 -9
- package/dist/cjs/core/managers/event-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs +65 -12
- package/dist/cjs/core/managers/frontier-dependency-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/isDependencyNode.cjs +19 -9
- package/dist/cjs/core/managers/isDependencyNode.cjs.map +2 -2
- package/dist/cjs/core/managers/named-expression-manager.cjs +121 -29
- package/dist/cjs/core/managers/named-expression-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/range-eval-order-builder.cjs +19 -9
- package/dist/cjs/core/managers/range-eval-order-builder.cjs.map +2 -2
- package/dist/cjs/core/managers/reference-manager.cjs +25 -9
- package/dist/cjs/core/managers/reference-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/schema-manager.cjs +19 -9
- package/dist/cjs/core/managers/schema-manager.cjs.map +2 -2
- package/dist/cjs/core/managers/style-manager.cjs +28 -9
- package/dist/cjs/core/managers/style-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/table-manager.cjs +25 -9
- package/dist/cjs/core/managers/table-manager.cjs.map +3 -3
- package/dist/cjs/core/managers/workbook-manager.cjs +38 -13
- package/dist/cjs/core/managers/workbook-manager.cjs.map +3 -3
- package/dist/cjs/core/map-serializer.cjs +19 -9
- package/dist/cjs/core/map-serializer.cjs.map +2 -2
- package/dist/cjs/core/named-expression-renamer.cjs +19 -9
- package/dist/cjs/core/named-expression-renamer.cjs.map +2 -2
- package/dist/cjs/core/resource-keys.cjs +67 -0
- package/dist/cjs/core/resource-keys.cjs.map +10 -0
- package/dist/cjs/core/schema/cell-orm.cjs +19 -9
- package/dist/cjs/core/schema/cell-orm.cjs.map +2 -2
- package/dist/cjs/core/schema/grid-orm.cjs +19 -9
- package/dist/cjs/core/schema/grid-orm.cjs.map +2 -2
- package/dist/cjs/core/schema/schema-builder.cjs +19 -9
- package/dist/cjs/core/schema/schema-builder.cjs.map +2 -2
- package/dist/cjs/core/schema/schema-helpers.cjs +19 -9
- package/dist/cjs/core/schema/schema-helpers.cjs.map +2 -2
- package/dist/cjs/core/schema/schema.cjs +19 -9
- package/dist/cjs/core/schema/schema.cjs.map +2 -2
- package/dist/cjs/core/schema/table-orm.cjs +19 -9
- package/dist/cjs/core/schema/table-orm.cjs.map +2 -2
- package/dist/cjs/core/sheet-renamer.cjs +19 -9
- package/dist/cjs/core/sheet-renamer.cjs.map +2 -2
- package/dist/cjs/core/sheet-utils.cjs +19 -9
- package/dist/cjs/core/sheet-utils.cjs.map +2 -2
- package/dist/cjs/core/table-renamer.cjs +19 -9
- package/dist/cjs/core/table-renamer.cjs.map +2 -2
- package/dist/cjs/core/types.cjs +19 -9
- package/dist/cjs/core/types.cjs.map +2 -2
- package/dist/cjs/core/utils/color-utils.cjs +19 -9
- package/dist/cjs/core/utils/color-utils.cjs.map +2 -2
- package/dist/cjs/core/utils/range-serializer.cjs +19 -9
- package/dist/cjs/core/utils/range-serializer.cjs.map +2 -2
- package/dist/cjs/core/utils/range-utils.cjs +19 -9
- package/dist/cjs/core/utils/range-utils.cjs.map +2 -2
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs +19 -9
- package/dist/cjs/core/utils/spreadsheet-visualizer.cjs.map +2 -2
- package/dist/cjs/core/utils.cjs +19 -9
- package/dist/cjs/core/utils.cjs.map +2 -2
- package/dist/cjs/core/workbook-renamer.cjs +19 -9
- package/dist/cjs/core/workbook-renamer.cjs.map +2 -2
- package/dist/cjs/debug/flags.cjs +19 -9
- package/dist/cjs/debug/flags.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/add/add.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/add/add.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/divide/divide.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/multiply/multiply.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/power/power.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/power/power.cjs.map +2 -2
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs +19 -9
- package/dist/cjs/evaluator/arithmetic/subtract/subtract.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/equals.cjs +19 -9
- package/dist/cjs/evaluator/comparison/equals.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs +19 -9
- package/dist/cjs/evaluator/comparison/greater-than-or-equal.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/greater-than.cjs +19 -9
- package/dist/cjs/evaluator/comparison/greater-than.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs +19 -9
- package/dist/cjs/evaluator/comparison/less-than-or-equal.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/less-than.cjs +19 -9
- package/dist/cjs/evaluator/comparison/less-than.cjs.map +2 -2
- package/dist/cjs/evaluator/comparison/not-equals.cjs +19 -9
- package/dist/cjs/evaluator/comparison/not-equals.cjs.map +2 -2
- package/dist/cjs/evaluator/concatenation/concatenate.cjs +19 -9
- package/dist/cjs/evaluator/concatenation/concatenate.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs +19 -9
- package/dist/cjs/evaluator/dependency-nodes/ast-evaluation-node.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs +35 -9
- package/dist/cjs/evaluator/dependency-nodes/base-eval-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs +22 -9
- package/dist/cjs/evaluator/dependency-nodes/cell-value-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs +35 -11
- package/dist/cjs/evaluator/dependency-nodes/empty-cell-evaluation-node.cjs.map +3 -3
- package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs +61 -0
- package/dist/cjs/evaluator/dependency-nodes/resource-dependency-node.cjs.map +10 -0
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs +19 -9
- package/dist/cjs/evaluator/dependency-nodes/spill-meta-node.cjs.map +2 -2
- package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs +22 -9
- package/dist/cjs/evaluator/dependency-nodes/virtual-cell-value-node.cjs.map +3 -3
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs +19 -9
- package/dist/cjs/evaluator/evaluate-scalar-operator.cjs.map +2 -2
- package/dist/cjs/evaluator/evaluation-context.cjs +19 -9
- package/dist/cjs/evaluator/evaluation-context.cjs.map +2 -2
- package/dist/cjs/evaluator/evaluation-error.cjs +19 -9
- package/dist/cjs/evaluator/evaluation-error.cjs.map +2 -2
- package/dist/cjs/evaluator/formula-evaluator.cjs +55 -12
- package/dist/cjs/evaluator/formula-evaluator.cjs.map +3 -3
- package/dist/cjs/evaluator/range-evaluation-node.cjs +35 -11
- package/dist/cjs/evaluator/range-evaluation-node.cjs.map +3 -3
- package/dist/cjs/functions/_template/template.cjs +19 -9
- package/dist/cjs/functions/_template/template.cjs.map +2 -2
- package/dist/cjs/functions/array/sequence/sequence.cjs +19 -9
- package/dist/cjs/functions/array/sequence/sequence.cjs.map +2 -2
- package/dist/cjs/functions/criteria-parser.cjs +19 -9
- package/dist/cjs/functions/criteria-parser.cjs.map +2 -2
- package/dist/cjs/functions/criteria-utils.cjs +19 -9
- package/dist/cjs/functions/criteria-utils.cjs.map +2 -2
- package/dist/cjs/functions/function-registry.cjs +19 -9
- package/dist/cjs/functions/function-registry.cjs.map +2 -2
- package/dist/cjs/functions/function-utils.cjs +19 -9
- package/dist/cjs/functions/function-utils.cjs.map +2 -2
- package/dist/cjs/functions/information/cell/cell.cjs +19 -9
- package/dist/cjs/functions/information/cell/cell.cjs.map +2 -2
- package/dist/cjs/functions/information/column/column.cjs +19 -9
- package/dist/cjs/functions/information/column/column.cjs.map +2 -2
- package/dist/cjs/functions/information/row/row.cjs +19 -9
- package/dist/cjs/functions/information/row/row.cjs.map +2 -2
- package/dist/cjs/functions/logical/and/and.cjs +19 -9
- package/dist/cjs/functions/logical/and/and.cjs.map +2 -2
- package/dist/cjs/functions/logical/if/if.cjs +19 -9
- package/dist/cjs/functions/logical/if/if.cjs.map +2 -2
- package/dist/cjs/functions/logical/iferror/iferror.cjs +19 -9
- package/dist/cjs/functions/logical/iferror/iferror.cjs.map +2 -2
- package/dist/cjs/functions/logical/or/or.cjs +19 -9
- package/dist/cjs/functions/logical/or/or.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/count-utils.cjs +19 -9
- package/dist/cjs/functions/lookup/count/count-utils.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/count.cjs +19 -9
- package/dist/cjs/functions/lookup/count/count.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/countif.cjs +19 -9
- package/dist/cjs/functions/lookup/count/countif.cjs.map +2 -2
- package/dist/cjs/functions/lookup/count/countifs.cjs +19 -9
- package/dist/cjs/functions/lookup/count/countifs.cjs.map +2 -2
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs +19 -9
- package/dist/cjs/functions/lookup/index-lookup/index-lookup.cjs.map +2 -2
- package/dist/cjs/functions/lookup/match/match.cjs +21 -10
- package/dist/cjs/functions/lookup/match/match.cjs.map +3 -3
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs +19 -9
- package/dist/cjs/functions/lookup/xlookup/xlookup.cjs.map +2 -2
- package/dist/cjs/functions/math/average/average-utils.cjs +19 -9
- package/dist/cjs/functions/math/average/average-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/average/average.cjs +19 -9
- package/dist/cjs/functions/math/average/average.cjs.map +2 -2
- package/dist/cjs/functions/math/average/averageif.cjs +19 -9
- package/dist/cjs/functions/math/average/averageif.cjs.map +2 -2
- package/dist/cjs/functions/math/average/averageifs.cjs +19 -9
- package/dist/cjs/functions/math/average/averageifs.cjs.map +2 -2
- package/dist/cjs/functions/math/ceiling/ceiling.cjs +19 -9
- package/dist/cjs/functions/math/ceiling/ceiling.cjs.map +2 -2
- package/dist/cjs/functions/math/max/max-utils.cjs +19 -9
- package/dist/cjs/functions/math/max/max-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/max/max.cjs +19 -9
- package/dist/cjs/functions/math/max/max.cjs.map +2 -2
- package/dist/cjs/functions/math/max/maxif.cjs +19 -9
- package/dist/cjs/functions/math/max/maxif.cjs.map +2 -2
- package/dist/cjs/functions/math/max/maxifs.cjs +19 -9
- package/dist/cjs/functions/math/max/maxifs.cjs.map +2 -2
- package/dist/cjs/functions/math/min/min-utils.cjs +19 -9
- package/dist/cjs/functions/math/min/min-utils.cjs.map +2 -2
- package/dist/cjs/functions/math/min/min.cjs +19 -9
- package/dist/cjs/functions/math/min/min.cjs.map +2 -2
- package/dist/cjs/functions/math/min/minif.cjs +19 -9
- package/dist/cjs/functions/math/min/minif.cjs.map +2 -2
- package/dist/cjs/functions/math/min/minifs.cjs +19 -9
- package/dist/cjs/functions/math/min/minifs.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sum.cjs +19 -9
- package/dist/cjs/functions/math/sum/sum.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sumif.cjs +19 -9
- package/dist/cjs/functions/math/sum/sumif.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/sumifs.cjs +19 -9
- package/dist/cjs/functions/math/sum/sumifs.cjs.map +2 -2
- package/dist/cjs/functions/math/sum/summation-utils.cjs +19 -9
- package/dist/cjs/functions/math/sum/summation-utils.cjs.map +2 -2
- package/dist/cjs/functions/reference/address/address.cjs +19 -9
- package/dist/cjs/functions/reference/address/address.cjs.map +2 -2
- package/dist/cjs/functions/reference/indirect/indirect.cjs +19 -9
- package/dist/cjs/functions/reference/indirect/indirect.cjs.map +2 -2
- package/dist/cjs/functions/reference/offset/offset.cjs +19 -9
- package/dist/cjs/functions/reference/offset/offset.cjs.map +2 -2
- package/dist/cjs/functions/text/concatenate/concatenate.cjs +21 -9
- package/dist/cjs/functions/text/concatenate/concatenate.cjs.map +3 -3
- package/dist/cjs/functions/text/exact/exact.cjs +19 -9
- package/dist/cjs/functions/text/exact/exact.cjs.map +2 -2
- package/dist/cjs/functions/text/find/find.cjs +19 -9
- package/dist/cjs/functions/text/find/find.cjs.map +2 -2
- package/dist/cjs/functions/text/left/left.cjs +19 -9
- package/dist/cjs/functions/text/left/left.cjs.map +2 -2
- package/dist/cjs/functions/text/len/len.cjs +19 -9
- package/dist/cjs/functions/text/len/len.cjs.map +2 -2
- package/dist/cjs/functions/text/mid/mid.cjs +19 -9
- package/dist/cjs/functions/text/mid/mid.cjs.map +2 -2
- package/dist/cjs/functions/text/right/right.cjs +19 -9
- package/dist/cjs/functions/text/right/right.cjs.map +2 -2
- package/dist/cjs/functions/text/text-helpers.cjs +19 -9
- package/dist/cjs/functions/text/text-helpers.cjs.map +2 -2
- package/dist/cjs/functions/text/textjoin/textjoin.cjs +19 -9
- package/dist/cjs/functions/text/textjoin/textjoin.cjs.map +2 -2
- package/dist/cjs/lib.cjs +24 -13
- package/dist/cjs/lib.cjs.map +2 -2
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/parser/ast.cjs +19 -9
- package/dist/cjs/parser/ast.cjs.map +2 -2
- package/dist/cjs/parser/formatter.cjs +19 -9
- package/dist/cjs/parser/formatter.cjs.map +2 -2
- package/dist/cjs/parser/grammar.cjs +19 -9
- package/dist/cjs/parser/grammar.cjs.map +2 -2
- package/dist/cjs/parser/lexer.cjs +19 -9
- package/dist/cjs/parser/lexer.cjs.map +2 -2
- package/dist/cjs/parser/parser.cjs +19 -9
- package/dist/cjs/parser/parser.cjs.map +2 -2
- package/dist/cjs/react/hooks.cjs +31 -10
- package/dist/cjs/react/hooks.cjs.map +2 -2
- package/dist/mjs/core/commands/command-executor.mjs +7 -5
- package/dist/mjs/core/commands/command-executor.mjs.map +3 -3
- package/dist/mjs/core/commands/content-commands.mjs +279 -2
- package/dist/mjs/core/commands/content-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/named-expression-commands.mjs +121 -6
- package/dist/mjs/core/commands/named-expression-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/structure-commands.mjs +204 -8
- package/dist/mjs/core/commands/structure-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/table-commands.mjs +117 -6
- package/dist/mjs/core/commands/table-commands.mjs.map +3 -3
- package/dist/mjs/core/commands/types.mjs +18 -1
- package/dist/mjs/core/commands/types.mjs.map +3 -3
- package/dist/mjs/core/engine-snapshot.mjs +11 -0
- package/dist/mjs/core/engine-snapshot.mjs.map +10 -0
- package/dist/mjs/core/engine.mjs +42 -26
- package/dist/mjs/core/engine.mjs.map +3 -3
- package/dist/mjs/core/managers/cache-manager.mjs +105 -1
- package/dist/mjs/core/managers/cache-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/dependency-manager.mjs +687 -2
- package/dist/mjs/core/managers/dependency-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/evaluation-manager.mjs +283 -4
- package/dist/mjs/core/managers/evaluation-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs +47 -4
- package/dist/mjs/core/managers/frontier-dependency-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/named-expression-manager.mjs +104 -21
- package/dist/mjs/core/managers/named-expression-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/reference-manager.mjs +7 -1
- package/dist/mjs/core/managers/reference-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/style-manager.mjs +10 -1
- package/dist/mjs/core/managers/style-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/table-manager.mjs +7 -1
- package/dist/mjs/core/managers/table-manager.mjs.map +3 -3
- package/dist/mjs/core/managers/workbook-manager.mjs +20 -5
- package/dist/mjs/core/managers/workbook-manager.mjs.map +3 -3
- package/dist/mjs/core/resource-keys.mjs +27 -0
- package/dist/mjs/core/resource-keys.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs +17 -1
- package/dist/mjs/evaluator/dependency-nodes/base-eval-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs +4 -1
- package/dist/mjs/evaluator/dependency-nodes/cell-value-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs +17 -3
- package/dist/mjs/evaluator/dependency-nodes/empty-cell-evaluation-node.mjs.map +3 -3
- package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs +21 -0
- package/dist/mjs/evaluator/dependency-nodes/resource-dependency-node.mjs.map +10 -0
- package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs +4 -1
- package/dist/mjs/evaluator/dependency-nodes/virtual-cell-value-node.mjs.map +3 -3
- package/dist/mjs/evaluator/formula-evaluator.mjs +42 -4
- package/dist/mjs/evaluator/formula-evaluator.mjs.map +3 -3
- package/dist/mjs/evaluator/range-evaluation-node.mjs +17 -3
- package/dist/mjs/evaluator/range-evaluation-node.mjs.map +3 -3
- package/dist/mjs/functions/lookup/match/match.mjs +3 -2
- package/dist/mjs/functions/lookup/match/match.mjs.map +3 -3
- package/dist/mjs/functions/text/concatenate/concatenate.mjs +3 -1
- package/dist/mjs/functions/text/concatenate/concatenate.mjs.map +3 -3
- package/dist/mjs/package.json +1 -1
- package/dist/types/core/commands/content-commands.d.ts +31 -1
- package/dist/types/core/commands/named-expression-commands.d.ts +16 -1
- package/dist/types/core/commands/structure-commands.d.ts +24 -1
- package/dist/types/core/commands/table-commands.d.ts +16 -1
- package/dist/types/core/commands/types.d.ts +25 -1
- package/dist/types/core/engine-snapshot.d.ts +138 -0
- package/dist/types/core/engine.d.ts +19 -1
- package/dist/types/core/managers/cache-manager.d.ts +9 -0
- package/dist/types/core/managers/dependency-manager.d.ts +56 -1
- package/dist/types/core/managers/dependency-node.d.ts +2 -1
- package/dist/types/core/managers/evaluation-manager.d.ts +21 -1
- package/dist/types/core/managers/frontier-dependency-manager.d.ts +12 -2
- package/dist/types/core/managers/named-expression-manager.d.ts +17 -1
- package/dist/types/core/managers/reference-manager.d.ts +3 -0
- package/dist/types/core/managers/style-manager.d.ts +3 -0
- package/dist/types/core/managers/table-manager.d.ts +3 -0
- package/dist/types/core/managers/workbook-manager.d.ts +4 -1
- package/dist/types/core/resource-keys.d.ts +14 -0
- package/dist/types/evaluator/dependency-nodes/base-eval-node.d.ts +5 -0
- package/dist/types/evaluator/dependency-nodes/cell-value-node.d.ts +1 -0
- package/dist/types/evaluator/dependency-nodes/empty-cell-evaluation-node.d.ts +8 -1
- package/dist/types/evaluator/dependency-nodes/resource-dependency-node.d.ts +8 -0
- package/dist/types/evaluator/dependency-nodes/virtual-cell-value-node.d.ts +1 -0
- package/dist/types/evaluator/range-evaluation-node.d.ts +8 -1
- package/package.json +6 -2
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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 CellInRangeResult,\n type EvaluateAllCellsResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\nimport type { FormulaEvaluator } from \"../../../evaluator/formula-evaluator.cjs\";\n\n/**\n * XLOOKUP function - Searches for a value and returns a corresponding value from another array\n * XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])\n *\n * Parameters:\n * - lookup_value: The value to search for (any type)\n * - lookup_array: The array or range to search\n * - return_array: The array or range to return values from\n * - if_not_found: Optional value to return when no match is found (default: #N/A)\n * - match_mode: Optional integer specifying match type (default: 0)\n * - 0: Exact match; if none, return #N/A\n * - -1: Exact match; if none, return next smaller item\n * - 1: Exact match; if none, return next larger item\n * - 2: Wildcard match (*, ?, ~)\n * - search_mode: Optional integer specifying search direction (default: 1)\n * - 1: Search from first item (forward)\n * - -1: Search from last item (reverse)\n * - 2: Binary search (ascending order required)\n * - -2: Binary search (descending order required)\n */\n\n// Helper to compare values for XLOOKUP\nfunction compareValues(a: CellValue, b: CellValue): number {\n // Handle different type comparisons\n if (a.type !== b.type) {\n // Numbers < Strings < Booleans in Excel comparison order\n const typeOrder = { number: 0, string: 1, boolean: 2, infinity: 0 };\n return (typeOrder[a.type] || 3) - (typeOrder[b.type] || 3);\n }\n\n // Same type comparison\n if (a.type === \"number\" && b.type === \"number\") {\n return a.value - b.value;\n }\n if (a.type === \"string\" && b.type === \"string\") {\n return a.value.localeCompare(b.value);\n }\n if (a.type === \"boolean\" && b.type === \"boolean\") {\n return (a.value ? 1 : 0) - (b.value ? 1 : 0);\n }\n\n return 0;\n}\n\n// Helper to check if values match (exact match)\nfunction valuesMatch(a: CellValue, b: CellValue): boolean {\n if (a.type !== b.type) return false;\n if (a.type === \"number\" && b.type === \"number\") {\n return a.value === b.value;\n }\n if (a.type === \"string\" && b.type === \"string\") {\n return a.value === b.value;\n }\n if (a.type === \"boolean\" && b.type === \"boolean\") {\n return a.value === b.value;\n }\n return false;\n}\n\n// Helper to check wildcard match\nfunction wildcardMatch(pattern: string, text: string): boolean {\n // Convert wildcard pattern to regex\n // ~ is escape character, * matches any sequence, ? matches single char\n let regex = \"\";\n let i = 0;\n while (i < pattern.length) {\n const char = pattern[i];\n if (!char) break;\n\n if (char === \"~\" && i + 1 < pattern.length) {\n // Escape next character\n const nextChar = pattern[i + 1];\n if (nextChar) {\n regex += nextChar.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n }\n i += 2;\n } else if (char === \"*\") {\n regex += \".*\";\n i++;\n } else if (char === \"?\") {\n regex += \".\";\n i++;\n } else {\n regex += char.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n i++;\n }\n }\n\n try {\n const re = new RegExp(`^${regex}$`, \"i\"); // Case-insensitive\n return re.test(text);\n } catch {\n return false;\n }\n}\n\n// Helper function to perform XLOOKUP operation\nfunction xlookupOperation(\n this: FormulaEvaluator,\n lookupValue: CellValue,\n lookupArray: EvaluateAllCellsResult,\n returnArray: EvaluateAllCellsResult,\n ifNotFound: CellValue | null,\n hasIfNotFound: boolean,\n matchMode: number,\n searchMode: number,\n context: EvaluationContext\n): FunctionEvaluationResult {\n // Validate match_mode\n if (![0, -1, 1, 2].includes(matchMode)) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: `XLOOKUP match_mode must be -1, 0, 1, or 2, got ${matchMode}`,\n };\n }\n\n // Validate search_mode\n if (![1, -1, 2, -2].includes(searchMode)) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: `XLOOKUP search_mode must be 1, -1, 2, or -2, got ${searchMode}`,\n };\n }\n\n if (lookupArray.type !== \"values\") {\n return lookupArray;\n }\n if (returnArray.type !== \"values\") {\n return returnArray;\n }\n\n // Check arrays have same length\n if (lookupArray.values.length !== returnArray.values.length) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message:\n \"XLOOKUP lookup_array and return_array must have same dimensions\",\n };\n }\n\n if (lookupArray.values.length === 0) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP lookup_array cannot be empty\",\n };\n }\n\n // Binary search modes (not yet implemented)\n if (searchMode === 2 || searchMode === -2) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP binary search mode not yet implemented\",\n };\n }\n\n // Determine search order\n const searchArray =\n searchMode === -1 ? [...lookupArray.values].reverse() : lookupArray.values;\n const searchReturnArray =\n searchMode === -1 ? [...returnArray.values].reverse() : returnArray.values;\n\n let bestMatchIndex = -1;\n let bestMatchValue: CellValue | null = null;\n\n // Search through the array\n for (let i = 0; i < searchArray.length; i++) {\n const item = searchArray[i];\n if (!item || item.result.type !== \"value\") continue;\n\n const arrayValue = item.result.result;\n\n // Match mode 0: Exact match\n if (matchMode === 0) {\n if (valuesMatch(lookupValue, arrayValue)) {\n const returnItem = searchReturnArray[i];\n if (!returnItem) continue;\n\n if (returnItem.result.type === \"value\") {\n return {\n type: \"value\",\n result: returnItem.result.result,\n };\n } else if (returnItem.result.type === \"error\") {\n return returnItem.result;\n }\n }\n }\n // Match mode 2: Wildcard match\n else if (matchMode === 2) {\n if (lookupValue.type === \"string\" && arrayValue.type === \"string\") {\n if (wildcardMatch(lookupValue.value, arrayValue.value)) {\n const returnItem = searchReturnArray[i];\n if (!returnItem) continue;\n\n if (returnItem.result.type === \"value\") {\n return {\n type: \"value\",\n result: returnItem.result.result,\n };\n } else if (returnItem.result.type === \"error\") {\n return returnItem.result;\n }\n }\n }\n }\n // Match mode -1: Exact or next smaller\n else if (matchMode === -1) {\n const cmp = compareValues(arrayValue, lookupValue);\n if (cmp === 0) {\n // Exact match found\n const returnItem = searchReturnArray[i];\n if (!returnItem) continue;\n\n if (returnItem.result.type === \"value\") {\n return {\n type: \"value\",\n result: returnItem.result.result,\n };\n } else if (returnItem.result.type === \"error\") {\n return returnItem.result;\n }\n } else if (cmp < 0) {\n // arrayValue < lookupValue\n if (\n bestMatchValue === null ||\n compareValues(arrayValue, bestMatchValue) > 0\n ) {\n bestMatchIndex = i;\n bestMatchValue = arrayValue;\n }\n }\n }\n // Match mode 1: Exact or next larger\n else if (matchMode === 1) {\n const cmp = compareValues(arrayValue, lookupValue);\n if (cmp === 0) {\n // Exact match found\n const returnItem = searchReturnArray[i];\n if (!returnItem) continue;\n\n if (returnItem.result.type === \"value\") {\n return {\n type: \"value\",\n result: returnItem.result.result,\n };\n } else if (returnItem.result.type === \"error\") {\n return returnItem.result;\n }\n } else if (cmp > 0) {\n // arrayValue > lookupValue\n if (\n bestMatchValue === null ||\n compareValues(arrayValue, bestMatchValue) < 0\n ) {\n bestMatchIndex = i;\n bestMatchValue = arrayValue;\n }\n }\n }\n }\n\n // Check if we found an approximate match\n if (bestMatchIndex !== -1) {\n const returnItem = searchReturnArray[bestMatchIndex];\n if (returnItem && returnItem.result.type === \"value\") {\n return {\n type: \"value\",\n result: returnItem.result.result,\n };\n } else if (returnItem && returnItem.result.type === \"error\") {\n return returnItem.result;\n }\n }\n\n // No match found - return if_not_found or #N/A\n if (hasIfNotFound && ifNotFound !== null) {\n return {\n type: \"value\",\n result: ifNotFound,\n };\n }\n\n return {\n type: \"error\",\n err: FormulaError.NA,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: lookup_value not found\",\n };\n}\n\nexport const XLOOKUP: FunctionDefinition = {\n name: \"XLOOKUP\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length < 3 || node.args.length > 6) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP function takes 3 to 6 arguments\",\n };\n }\n\n // Evaluate lookup_value\n const lookupValueResult = this.evaluateNode(node.args[0]!, context);\n if (lookupValueResult.type === \"error\") {\n return lookupValueResult;\n }\n\n // Evaluate lookup_array\n const lookupArrayResult = this.evaluateNode(node.args[1]!, context);\n if (lookupArrayResult.type === \"error\") {\n return lookupArrayResult;\n }\n\n // Evaluate return_array\n const returnArrayResult = this.evaluateNode(node.args[2]!, context);\n if (returnArrayResult.type === \"error\") {\n return returnArrayResult;\n }\n\n // Evaluate if_not_found (optional)\n let ifNotFoundResult: FunctionEvaluationResult | null = null;\n if (node.args[3]) {\n ifNotFoundResult = this.evaluateNode(node.args[3], context);\n if (ifNotFoundResult.type === \"error\") {\n return ifNotFoundResult;\n }\n }\n\n // Evaluate match_mode (optional, defaults to 0)\n let matchModeResult: FunctionEvaluationResult = {\n type: \"value\",\n result: { type: \"number\", value: 0 },\n };\n if (node.args[4]) {\n matchModeResult = this.evaluateNode(node.args[4], context);\n if (matchModeResult.type === \"error\") {\n return matchModeResult;\n }\n }\n\n // Evaluate search_mode (optional, defaults to 1)\n let searchModeResult: FunctionEvaluationResult = {\n type: \"value\",\n result: { type: \"number\", value: 1 },\n };\n if (node.args[5]) {\n searchModeResult = this.evaluateNode(node.args[5], context);\n if (searchModeResult.type === \"error\") {\n return searchModeResult;\n }\n }\n\n // Handle spilled arrays for simple arguments\n if (\n lookupValueResult.type === \"spilled-values\" ||\n (ifNotFoundResult && ifNotFoundResult.type === \"spilled-values\") ||\n matchModeResult.type === \"spilled-values\" ||\n searchModeResult.type === \"spilled-values\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Spilled array arguments not yet supported\",\n };\n }\n\n // Validate result types\n if (lookupValueResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid lookup_value result type\",\n };\n }\n\n if (matchModeResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid match_mode result type\",\n };\n }\n\n if (searchModeResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid search_mode result type\",\n };\n }\n\n // Type check match_mode\n if (matchModeResult.result.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: `XLOOKUP match_mode must be number, got ${matchModeResult.result.type}`,\n };\n }\n\n // Type check search_mode\n if (searchModeResult.result.type !== \"number\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: `XLOOKUP search_mode must be number, got ${searchModeResult.result.type}`,\n };\n }\n\n // Extract if_not_found value\n let ifNotFound: CellValue | null = null;\n const hasIfNotFound = !!ifNotFoundResult;\n if (ifNotFoundResult && ifNotFoundResult.type === \"value\") {\n ifNotFound = ifNotFoundResult.result;\n }\n\n // Extract match_mode and search_mode as integers\n const matchMode = Math.floor(matchModeResult.result.value);\n const searchMode = Math.floor(searchModeResult.result.value);\n\n // Extract lookup_array values\n let lookupArray: EvaluateAllCellsResult = {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid lookup_array type\",\n };\n if (lookupArrayResult.type === \"value\") {\n lookupArray = {\n type: \"values\",\n values: [{ result: lookupArrayResult, relativePos: { x: 0, y: 0 } }],\n };\n } else if (lookupArrayResult.type === \"spilled-values\") {\n lookupArray = lookupArrayResult.evaluateAllCells.call(this, {\n context,\n evaluate: lookupArrayResult.evaluate,\n origin: context.cellAddress,\n lookupOrder: \"col-major\",\n });\n } else {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid lookup_array type\",\n };\n }\n\n // Extract return_array values\n let returnArray: EvaluateAllCellsResult = {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid return_array type\",\n };\n if (returnArrayResult.type === \"value\") {\n returnArray = {\n type: \"values\",\n values: [{ result: returnArrayResult, relativePos: { x: 0, y: 0 } }],\n };\n } else if (returnArrayResult.type === \"spilled-values\") {\n returnArray = returnArrayResult.evaluateAllCells.call(this, {\n context,\n evaluate: returnArrayResult.evaluate,\n origin: context.cellAddress,\n lookupOrder: \"col-major\",\n });\n } else {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n errAddress: context.dependencyNode,\n message: \"XLOOKUP: Invalid return_array type\",\n };\n }\n\n // Perform XLOOKUP operation\n return xlookupOperation.call(\n this,\n lookupValueResult.result,\n lookupArray,\n returnArray,\n ifNotFound,\n hasIfNotFound,\n matchMode,\n searchMode,\n context\n );\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "61ECD6C4AEC362E564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -69,4 +79,4 @@ function performAverage(results, context) {
|
|
|
69
79
|
};
|
|
70
80
|
}
|
|
71
81
|
|
|
72
|
-
//# debugId=
|
|
82
|
+
//# debugId=54CF976D3EB1FBC964756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n FormulaError,\n type FunctionEvaluationResult,\n type SingleEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\n\n/**\n * Performs averaging of an iterable of SingleEvaluationResult values\n * Handles numbers, infinities, and errors according to Excel's AVERAGE behavior\n *\n * @param results - Iterable of SingleEvaluationResult to average\n * @returns FunctionEvaluationResult with the average or appropriate error\n */\nexport function performAverage(\n results: SingleEvaluationResult[],\n context: EvaluationContext\n): FunctionEvaluationResult {\n let sum = 0;\n let count = 0;\n\n for (const result of results) {\n if (result.type === \"error\") {\n // Propagate errors immediately\n return result;\n }\n if (result.type === \"awaiting-evaluation\") {\n return result;\n }\n\n if (result.type === \"value\") {\n if (result.result.type === \"number\") {\n sum += result.result.value;\n count++;\n } else if (result.result.type === \"infinity\") {\n // Infinity dominates - return immediately\n return {\n type: \"value\",\n result: result.result,\n };\n }\n // Non-numeric values (strings, booleans) are ignored\n }\n }\n\n if (count === 0) {\n return {\n type: \"error\",\n err: FormulaError.DIV0,\n message: \"Cannot calculate average of empty range\",\n errAddress: context.dependencyNode,\n };\n }\n\n return {\n type: \"value\",\n result: { type: \"number\", value: sum / count },\n };\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAJP;AAcO,SAAS,cAAc,CAC5B,SACA,SAC0B;AAAA,EAC1B,IAAI,MAAM;AAAA,EACV,IAAI,QAAQ;AAAA,EAEZ,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,SAAS,SAAS;AAAA,MAE3B,OAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO,SAAS,uBAAuB;AAAA,MACzC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,SAAS,SAAS;AAAA,MAC3B,IAAI,OAAO,OAAO,SAAS,UAAU;AAAA,QACnC,OAAO,OAAO,OAAO;AAAA,QACrB;AAAA,MACF,EAAO,SAAI,OAAO,OAAO,SAAS,YAAY;AAAA,QAE5C,OAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,IAAI,UAAU,GAAG;AAAA,IACf,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,0BAAa;AAAA,MAClB,SAAS;AAAA,MACT,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,UAAU,OAAO,MAAM,MAAM;AAAA,EAC/C;AAAA;",
|
|
8
|
+
"debugId": "54CF976D3EB1FBC964756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -45,4 +55,4 @@ var AVERAGE = {
|
|
|
45
55
|
}
|
|
46
56
|
};
|
|
47
57
|
|
|
48
|
-
//# debugId=
|
|
58
|
+
//# debugId=C46F2467260ECA8B64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport { performAverage } from \"./average-utils.cjs\";\nimport { createArgumentIterator } from \"../../function-utils.cjs\";\n\n/**\n * AVERAGE function - Calculates the arithmetic mean of all numbers in the arguments\n *\n * Usage: AVERAGE(value1, [value2], ...)\n *\n * Examples:\n * AVERAGE(1, 2, 3) - returns 2\n * AVERAGE(A1:A10) - averages all numbers in the range A1:A10\n * AVERAGE(A1:A5, B1:B5) - averages all numbers in both ranges\n *\n * Note:\n * - Only numeric values are included in the calculation\n * - Text, logical values, and empty cells are ignored in ranges\n * - Direct text/logical arguments cause errors\n * - Returns #DIV/0! if no numeric values are found\n */\nexport const AVERAGE: FunctionDefinition = {\n name: \"AVERAGE\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Create iterator over all argument values\n const argumentValues = createArgumentIterator(\n this,\n node,\n context,\n \"col-major\"\n );\n\n if (argumentValues.type !== \"values\") {\n return argumentValues;\n }\n\n // Use shared averaging utility (now with unified error propagation)\n return performAverage(argumentValues.values, context);\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI+B,IAA/B;AACuC,IAAvC;AAkBO,IAAM,UAA8B;AAAA,EACzC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,iBAAiB,6CACrB,MACA,MACA,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,UAAU;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAGA,OAAO,oCAAe,eAAe,QAAQ,OAAO;AAAA;AAExD;",
|
|
8
|
+
"debugId": "C46F2467260ECA8B64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -80,4 +90,4 @@ var AVERAGEIF = {
|
|
|
80
90
|
}
|
|
81
91
|
};
|
|
82
92
|
|
|
83
|
-
//# debugId=
|
|
93
|
+
//# debugId=E22C0424CC0EB1B664756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n FormulaError,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport { parseCriteria } from \"../../criteria-parser.cjs\";\nimport {\n processMultiCriteriaValues,\n validateSingleCriteriaArgs,\n} from \"../../criteria-utils.cjs\";\nimport { performAverage } from \"./average-utils.cjs\";\n\n/**\n * AVERAGEIF function - Calculates the average of cells in a range that meet a criteria\n * \n * Usage: AVERAGEIF(range, criteria, [average_range])\n * \n * range: The range of cells to evaluate against the criteria\n * criteria: The criteria to match against. Can be:\n * - Exact value: \"Apple\", 42\n * - Comparison: \">10\", \"<=5\", \"<>0\"\n * - Wildcards: \"App*\", \"?ruit\"\n * average_range: Optional. The range to average. If omitted, uses the range parameter\n * \n * Examples:\n * AVERAGEIF(A1:A10, \"Apple\") - averages cells in A1:A10 that contain \"Apple\"\n * AVERAGEIF(B1:B10, \">10\") - averages cells in B1:B10 with values greater than 10\n * AVERAGEIF(A1:A10, \"Apple\", B1:B10) - averages B1:B10 where A1:A10 contains \"Apple\"\n * \n * Note:\n * - Only numeric values are included in the average calculation\n * - Returns error if no values match the criteria\n */\nexport const AVERAGEIF: FunctionDefinition = {\n name: \"AVERAGEIF\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Validate arguments\n const argError = validateSingleCriteriaArgs(\"AVERAGEIF\", node.args.length, context);\n if (argError) {\n return argError;\n }\n\n // Evaluate criteria range (first argument)\n const criteriaRangeResult = this.evaluateNode(node.args[0]!, context);\n if (criteriaRangeResult.type === \"error\") {\n return criteriaRangeResult;\n }\n\n // Evaluate criteria (second argument)\n const criteriaResult = this.evaluateNode(node.args[1]!, context);\n if (criteriaResult.type === \"error\") {\n return criteriaResult;\n }\n\n if (criteriaResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"AVERAGEIF criteria must be a single value\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Parse criteria\n const parsedCriteria = parseCriteria(criteriaResult.result);\n if (parsedCriteria.type === \"error\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: parsedCriteria.message,\n errAddress: context.dependencyNode,\n };\n }\n\n // Determine average range (third argument if present, otherwise same as criteria range)\n const averageRangeResult = node.args.length === 3 \n ? this.evaluateNode(node.args[2]!, context)\n : criteriaRangeResult;\n \n if (averageRangeResult.type === \"error\") {\n return averageRangeResult;\n }\n\n // Use shared average utility for standard cases\n const matchingValues = processMultiCriteriaValues(\n this,\n averageRangeResult,\n [{ rangeResult: criteriaRangeResult, parsedCriteria }],\n context,\n \"col-major\"\n );\n\n if (matchingValues.type === \"error\" || matchingValues.type === \"awaiting-evaluation\") {\n return matchingValues;\n }\n\n return performAverage(matchingValues.values, context);\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,IAJP;AAK8B,IAA9B;AAIO,IAHP;AAI+B,IAA/B;AAuBO,IAAM,YAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,WAAW,iDAA2B,aAAa,KAAK,KAAK,QAAQ,OAAO;AAAA,IAClF,IAAI,UAAU;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,sBAAsB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IACpE,IAAI,oBAAoB,SAAS,SAAS;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAC/D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,qCAAc,eAAe,MAAM;AAAA,IAC1D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,0BAAa;AAAA,QAClB,SAAS,eAAe;AAAA,QACxB,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,qBAAqB,KAAK,KAAK,WAAW,IAC5C,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO,IACxC;AAAA,IAEJ,IAAI,mBAAmB,SAAS,SAAS;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,iDACrB,MACA,oBACA,CAAC,EAAE,aAAa,qBAAqB,eAAe,CAAC,GACrD,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,oCAAe,eAAe,QAAQ,OAAO;AAAA;AAExD;",
|
|
8
|
+
"debugId": "E22C0424CC0EB1B664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -58,4 +68,4 @@ var AVERAGEIFS = {
|
|
|
58
68
|
}
|
|
59
69
|
};
|
|
60
70
|
|
|
61
|
-
//# debugId=
|
|
71
|
+
//# debugId=96AAC1AD73EBA9A764756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport {\n parseCriteriaPairs,\n processMultiCriteriaValues,\n validateMultiCriteriaArgs,\n} from \"../../criteria-utils.cjs\";\nimport { performAverage } from \"./average-utils.cjs\";\n\n/**\n * AVERAGEIFS function - Calculates the average of cells in a range that meet multiple criteria\n *\n * Usage: AVERAGEIFS(average_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)\n *\n * average_range: The range of cells to average\n * criteria_range1: The first range to evaluate against criteria1\n * criteria1: The first criteria to match against\n * criteria_range2, criteria2: Optional additional criteria pairs\n *\n * Examples:\n * AVERAGEIFS(B1:B10, A1:A10, \"Apple\") - averages B1:B10 where A1:A10 = \"Apple\"\n * AVERAGEIFS(C1:C10, A1:A10, \"Apple\", B1:B10, \">10\") - averages C1:C10 where A1:A10 = \"Apple\" AND B1:B10 > 10\n *\n * Note:\n * - All criteria must be satisfied for a value to be included\n * - Only numeric values are included in the average calculation\n * - Returns error if no values match all criteria\n */\nexport const AVERAGEIFS: FunctionDefinition = {\n name: \"AVERAGEIFS\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Validate arguments using utility\n const argError = validateMultiCriteriaArgs(\"AVERAGEIFS\", node.args.length, context);\n if (argError) {\n return argError;\n }\n\n // Evaluate average range\n const averageRangeResult = this.evaluateNode(node.args[0]!, context);\n if (averageRangeResult.type === \"error\") {\n return averageRangeResult;\n }\n\n // Parse criteria pairs using utility\n const criteriaPairsResult = parseCriteriaPairs.call(\n this,\n node,\n context,\n this.evaluateNode,\n 1\n );\n if (\"type\" in criteriaPairsResult) {\n return criteriaPairsResult;\n }\n const criteriaPairs = criteriaPairsResult;\n\n // Use shared average utility for standard cases\n const matchingValues = processMultiCriteriaValues(\n this,\n averageRangeResult,\n criteriaPairs,\n context,\n \"col-major\"\n );\n\n if (matchingValues.type === \"error\" || matchingValues.type === \"awaiting-evaluation\") {\n return matchingValues;\n }\n\n return performAverage(matchingValues.values, context);\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,IAJP;AAK+B,IAA/B;AAqBO,IAAM,aAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,WAAW,gDAA0B,cAAc,KAAK,KAAK,QAAQ,OAAO;AAAA,IAClF,IAAI,UAAU;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,qBAAqB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IACnE,IAAI,mBAAmB,SAAS,SAAS;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,sBAAsB,yCAAmB,KAC7C,MACA,MACA,SACA,KAAK,cACL,CACF;AAAA,IACA,IAAI,UAAU,qBAAqB;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,IACA,MAAM,gBAAgB;AAAA,IAGtB,MAAM,iBAAiB,iDACrB,MACA,oBACA,eACA,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,oCAAe,eAAe,QAAQ,OAAO;AAAA;AAExD;",
|
|
8
|
+
"debugId": "96AAC1AD73EBA9A764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -216,4 +226,4 @@ var CEILING = {
|
|
|
216
226
|
}
|
|
217
227
|
};
|
|
218
228
|
|
|
219
|
-
//# debugId=
|
|
229
|
+
//# debugId=8F59A60E50F1ADEC64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n FormulaError,\n type CellAddress,\n type CellInfinity,\n type CellNumber,\n type ErrorEvaluationResult,\n type FunctionDefinition,\n type FunctionEvaluationResult,\n type SingleEvaluationResult,\n type SpilledValuesEvaluationResult,\n type SpreadsheetRange\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\nimport type { FormulaEvaluator } from \"../../../evaluator/formula-evaluator.cjs\";\n\n/**\n * CEILING function - Rounds a number up to the nearest multiple of significance\n *\n * Usage: CEILING(number, significance)\n *\n * number: The number to round up (required)\n * significance: The multiple to round up to (required)\n *\n * Examples:\n * CEILING(4.3) returns 5 (rounds up to nearest integer)\n * CEILING(4.3, 0.5) returns 4.5 (rounds up to nearest 0.5)\n * CEILING(-2.1, -1) returns -3 (rounds away from zero)\n *\n * Note:\n * - Both arguments are required and must be numbers (no type coercion)\n * - Positive number with negative significance returns #NUM! error\n * - Supports spilled values (dynamic arrays)\n * - Handles infinity values appropriately\n */\n\n/**\n * Helper function to perform CEILING operation\n */\nfunction ceilingOperation(\n numberValue: CellNumber | CellInfinity,\n significanceValue: CellNumber | CellInfinity,\n context: EvaluationContext\n): CellNumber | CellInfinity | ErrorEvaluationResult {\n // Handle infinity cases\n if (numberValue.type === \"infinity\") {\n return numberValue; // Infinity remains infinity\n }\n\n if (significanceValue.type === \"infinity\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Cannot use infinity as significance\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Both are numbers\n const num = numberValue.value;\n const sig = significanceValue.value;\n\n // Significance cannot be zero\n if (sig === 0) {\n return {\n type: \"error\",\n err: FormulaError.DIV0,\n message: \"Significance cannot be zero\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Excel CEILING behavior based on testing:\n // - Always rounds away from zero\n // - Positive number with negative significance gives #NUM! error\n\n if (num > 0 && sig < 0) {\n return {\n type: \"error\",\n err: FormulaError.NUM,\n message: \"Positive number cannot be used with negative significance\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (num < 0 && sig > 0) {\n return {\n type: \"error\",\n err: FormulaError.NUM,\n message: \"Negative number cannot be used with positive significance\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Calculate result - always rounds away from zero\n let result: number;\n\n if (sig > 0) {\n // Positive significance with positive/zero number\n result = Math.ceil(num / sig) * sig;\n } else {\n // Negative significance with negative/zero number\n // Round away from zero: -2.1/-1 = 2.1, ceil(2.1) = 3, 3*-1 = -3\n result = Math.ceil(num / sig) * sig;\n }\n\n return { type: \"number\", value: result };\n}\n\n/**\n * Helper for creating spilled-values result for CEILING function\n */\nfunction createCeilingSpilledResult(\n this: FormulaEvaluator,\n {\n numberResult,\n significanceResult,\n context,\n }: {\n numberResult: FunctionEvaluationResult;\n significanceResult: FunctionEvaluationResult;\n context: EvaluationContext;\n }\n): SpilledValuesEvaluationResult | ErrorEvaluationResult {\n const hasSpilledNumber = numberResult.type === \"spilled-values\";\n const hasSpilledSignificance = significanceResult.type === \"spilled-values\";\n\n if (!hasSpilledNumber && !hasSpilledSignificance) {\n throw new Error(\"createCeilingSpilledResult called without spilled values\");\n }\n\n return {\n type: \"spilled-values\",\n spillArea: (origin: CellAddress): SpreadsheetRange => {\n // Calculate spill area (union of spilled ranges)\n if (hasSpilledNumber && numberResult.type === \"spilled-values\") {\n const spillArea = numberResult.spillArea(origin);\n if (\n hasSpilledSignificance &&\n significanceResult.type === \"spilled-values\"\n ) {\n return this.unionRanges(\n this.projectRange(spillArea, origin),\n this.projectRange(significanceResult.spillArea(origin), origin)\n );\n }\n return spillArea;\n } else if (\n hasSpilledSignificance &&\n significanceResult.type === \"spilled-values\"\n ) {\n return significanceResult.spillArea(origin);\n } else {\n throw new Error(\"No spilled values found\");\n }\n },\n source: \"CEILING with spilled values\",\n evaluate: (spilledCell: any, evalContext: any): SingleEvaluationResult => {\n // Evaluate arguments at this spilled position\n const spillNumberResult = hasSpilledNumber\n ? numberResult.evaluate(spilledCell, evalContext)\n : numberResult;\n const spillSigResult = hasSpilledSignificance\n ? significanceResult.evaluate(spilledCell, evalContext)\n : significanceResult;\n\n if (spillNumberResult === undefined || spillSigResult === undefined) {\n return {\n type: \"error\",\n err: FormulaError.REF,\n message: \"The spilled results have not been evaluated\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (spillNumberResult.type === \"error\") {\n return spillNumberResult;\n }\n if (spillSigResult.type === \"error\") {\n return spillSigResult;\n }\n\n if (\n spillNumberResult.type !== \"value\" ||\n spillSigResult.type !== \"value\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Invalid spilled result for CEILING\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Type checking\n if (\n spillNumberResult.result.type !== \"number\" &&\n spillNumberResult.result.type !== \"infinity\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Number argument must be a number\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (\n spillSigResult.result.type !== \"number\" &&\n spillSigResult.result.type !== \"infinity\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Significance argument must be a number\",\n errAddress: context.dependencyNode,\n };\n }\n\n const result = ceilingOperation(\n spillNumberResult.result,\n spillSigResult.result,\n context\n );\n if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n return result;\n }\n return { type: \"value\", result };\n },\n evaluateAllCells: (intersectingRange: any) => {\n throw new Error(\"WIP: evaluateAllCells for CEILING is not implemented\");\n },\n };\n}\n\n/**\n * CEILING function implementation\n */\nexport const CEILING: FunctionDefinition = {\n name: \"CEILING\",\n evaluate: function (node, context): FunctionEvaluationResult {\n if (node.args.length !== 2) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"CEILING function takes exactly 2 arguments\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Evaluate number argument\n const numberResult = this.evaluateNode(node.args[0]!, context);\n if (numberResult.type === \"error\" || numberResult.type === \"awaiting-evaluation\") {\n return numberResult;\n }\n\n // Evaluate significance argument (required)\n const significanceResult = this.evaluateNode(node.args[1]!, context);\n if (significanceResult.type === \"error\" || significanceResult.type === \"awaiting-evaluation\") {\n return significanceResult;\n }\n\n // Handle spilled values\n const hasSpilledValues =\n numberResult.type === \"spilled-values\" ||\n significanceResult.type === \"spilled-values\";\n\n if (hasSpilledValues) {\n return createCeilingSpilledResult.call(this, {\n numberResult,\n significanceResult,\n context,\n });\n }\n\n // Both arguments are single values\n if (numberResult.type !== \"value\" || significanceResult.type !== \"value\") {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Invalid argument type\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Type checking - only numbers and infinity allowed\n if (\n numberResult.result.type !== \"number\" &&\n numberResult.result.type !== \"infinity\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Number argument must be a number\",\n errAddress: context.dependencyNode,\n };\n }\n\n if (\n significanceResult.result.type !== \"number\" &&\n significanceResult.result.type !== \"infinity\"\n ) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"Significance argument must be a number\",\n errAddress: context.dependencyNode,\n };\n }\n\n // Perform CEILING operation\n const result = ceilingOperation(\n numberResult.result,\n significanceResult.result,\n context\n );\n if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n return result;\n }\n return { type: \"value\", result };\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "8F59A60E50F1ADEC64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -68,4 +78,4 @@ function performMaximum(results, context) {
|
|
|
68
78
|
};
|
|
69
79
|
}
|
|
70
80
|
|
|
71
|
-
//# debugId=
|
|
81
|
+
//# debugId=12DA47BD18240EF064756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n FormulaError,\n type FunctionEvaluationResult,\n type SingleEvaluationResult,\n type CellInfinity,\n} from \"../../../core/types.cjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.cjs\";\n\n/**\n * Result type for processInfinity in max functions\n */\nexport type ProcessInfinityResult<T> =\n | { type: \"infinity\"; infinity: CellInfinity }\n | { type: \"state\"; state: T };\n\n/**\n * Perform maximum calculation over an iterator of SingleEvaluationResults\n * Handles the common logic shared by MAX, MAXIF, MAXIFS functions\n *\n * @param results - Iterator of SingleEvaluationResults to find maximum from\n * @returns FunctionEvaluationResult with the maximum, infinity, or error\n */\nexport function performMaximum(\n results: Iterable<SingleEvaluationResult>,\n context: EvaluationContext\n): FunctionEvaluationResult {\n let maxValue = -Infinity;\n let hasValues = false;\n\n for (const result of results) {\n if (result.type === \"error\") {\n // Propagate errors immediately\n return result;\n }\n\n if (result.type === \"value\") {\n if (result.result.type === \"number\") {\n maxValue = Math.max(maxValue, result.result.value);\n hasValues = true;\n } else if (result.result.type === \"infinity\") {\n if (result.result.sign === \"positive\") {\n // Positive infinity is always the maximum - return immediately\n return {\n type: \"value\",\n result: result.result,\n };\n }\n // Negative infinity doesn't change the maximum\n }\n // Non-numeric values (strings, booleans) are ignored in maximum calculation\n }\n }\n\n if (!hasValues) {\n return {\n type: \"error\",\n err: FormulaError.VALUE,\n message: \"No numeric values found\",\n errAddress: context.dependencyNode,\n };\n }\n\n return {\n type: \"value\",\n result: { type: \"number\", value: maxValue },\n };\n}\n\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,IALP;AAsBO,SAAS,cAAc,CAC5B,SACA,SAC0B;AAAA,EAC1B,IAAI,WAAW;AAAA,EACf,IAAI,YAAY;AAAA,EAEhB,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,SAAS,SAAS;AAAA,MAE3B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,SAAS,SAAS;AAAA,MAC3B,IAAI,OAAO,OAAO,SAAS,UAAU;AAAA,QACnC,WAAW,KAAK,IAAI,UAAU,OAAO,OAAO,KAAK;AAAA,QACjD,YAAY;AAAA,MACd,EAAO,SAAI,OAAO,OAAO,SAAS,YAAY;AAAA,QAC5C,IAAI,OAAO,OAAO,SAAS,YAAY;AAAA,UAErC,OAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ,OAAO;AAAA,UACjB;AAAA,QACF;AAAA,MAEF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,WAAW;AAAA,IACd,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,0BAAa;AAAA,MAClB,SAAS;AAAA,MACT,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,UAAU,OAAO,SAAS;AAAA,EAC5C;AAAA;",
|
|
8
|
+
"debugId": "12DA47BD18240EF064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,27 +2,37 @@ var __defProp = Object.defineProperty;
|
|
|
2
2
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
|
|
5
|
+
function __accessProp(key) {
|
|
6
|
+
return this[key];
|
|
7
|
+
}
|
|
6
8
|
var __toCommonJS = (from) => {
|
|
7
|
-
var entry = __moduleCache.get(from), desc;
|
|
9
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
8
10
|
if (entry)
|
|
9
11
|
return entry;
|
|
10
12
|
entry = __defProp({}, "__esModule", { value: true });
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function")
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (var key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(entry, key))
|
|
16
|
+
__defProp(entry, key, {
|
|
17
|
+
get: __accessProp.bind(from, key),
|
|
18
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
19
|
+
});
|
|
20
|
+
}
|
|
16
21
|
__moduleCache.set(from, entry);
|
|
17
22
|
return entry;
|
|
18
23
|
};
|
|
24
|
+
var __moduleCache;
|
|
25
|
+
var __returnValue = (v) => v;
|
|
26
|
+
function __exportSetter(name, newValue) {
|
|
27
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
28
|
+
}
|
|
19
29
|
var __export = (target, all) => {
|
|
20
30
|
for (var name in all)
|
|
21
31
|
__defProp(target, name, {
|
|
22
32
|
get: all[name],
|
|
23
33
|
enumerable: true,
|
|
24
34
|
configurable: true,
|
|
25
|
-
set: (
|
|
35
|
+
set: __exportSetter.bind(all, name)
|
|
26
36
|
});
|
|
27
37
|
};
|
|
28
38
|
|
|
@@ -45,4 +55,4 @@ var MAX = {
|
|
|
45
55
|
}
|
|
46
56
|
};
|
|
47
57
|
|
|
48
|
-
//# debugId=
|
|
58
|
+
//# debugId=5466A89F45A347C664756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n type FunctionDefinition,\n type FunctionEvaluationResult,\n} from \"../../../core/types.cjs\";\nimport { performMaximum } from \"./max-utils.cjs\";\nimport { createArgumentIterator } from \"../../function-utils.cjs\";\n\n/**\n * MAX function - Returns the largest number in the arguments\n *\n * Usage: MAX(value1, [value2], ...)\n *\n * Examples:\n * MAX(1, 2, 3) - returns 3\n * MAX(A1:A10) - finds maximum in the range A1:A10\n * MAX(A1:A5, B1:B5) - finds maximum across both ranges\n *\n * Note:\n * - Only numeric values are considered\n * - Text, logical values, and empty cells are ignored in ranges\n * - Direct text/logical arguments cause errors\n * - Returns error if no numeric values are found\n */\nexport const MAX: FunctionDefinition = {\n name: \"MAX\",\n evaluate: function (node, context): FunctionEvaluationResult {\n // Create iterator over all argument values\n const argumentValues = createArgumentIterator(this, node, context, \"col-major\");\n if (argumentValues.type !== \"values\") {\n return argumentValues;\n }\n // Use shared maximum utility (now with unified error propagation)\n return performMaximum(argumentValues.values, context);\n },\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI+B,IAA/B;AACuC,IAAvC;AAkBO,IAAM,MAA0B;AAAA,EACrC,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,iBAAiB,6CAAuB,MAAM,MAAM,SAAS,WAAW;AAAA,IAC9E,IAAI,eAAe,SAAS,UAAU;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,gCAAe,eAAe,QAAQ,OAAO;AAAA;AAExD;",
|
|
8
|
+
"debugId": "5466A89F45A347C664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|