@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
|
@@ -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
|
|
|
@@ -32,6 +42,7 @@ __export(exports_dependency_manager, {
|
|
|
32
42
|
DependencyManager: () => DependencyManager
|
|
33
43
|
});
|
|
34
44
|
module.exports = __toCommonJS(exports_dependency_manager);
|
|
45
|
+
var import_engine_snapshot = require("../engine-snapshot.cjs");
|
|
35
46
|
var import_evaluation_context = require("../../evaluator/evaluation-context.cjs");
|
|
36
47
|
var import_utils = require("../utils.cjs");
|
|
37
48
|
var import_ast_evaluation_node = require("../../evaluator/dependency-nodes/ast-evaluation-node.cjs");
|
|
@@ -42,6 +53,7 @@ var import_range_evaluation_node = require("../../evaluator/range-evaluation-nod
|
|
|
42
53
|
var import_formatter = require("../../parser/formatter.cjs");
|
|
43
54
|
var import_virtual_cell_value_node = require("../../evaluator/dependency-nodes/virtual-cell-value-node.cjs");
|
|
44
55
|
var import_parser = require("../../parser/parser.cjs");
|
|
56
|
+
var import_resource_dependency_node = require("../../evaluator/dependency-nodes/resource-dependency-node.cjs");
|
|
45
57
|
|
|
46
58
|
class DependencyManager {
|
|
47
59
|
cacheManager;
|
|
@@ -52,10 +64,175 @@ class DependencyManager {
|
|
|
52
64
|
virtualCellValueNodes = new Map;
|
|
53
65
|
_spilledValues = new Map;
|
|
54
66
|
ranges = new Map;
|
|
67
|
+
resourceNodes = new Map;
|
|
68
|
+
hardDependents = new Map;
|
|
69
|
+
frontierDependents = new Map;
|
|
70
|
+
registeredDependencies = new Map;
|
|
71
|
+
coverageWatchersBySheet = new Map;
|
|
72
|
+
frontierWatchersBySheet = new Map;
|
|
55
73
|
constructor(cacheManager, workbookManager) {
|
|
56
74
|
this.cacheManager = cacheManager;
|
|
57
75
|
this.workbookManager = workbookManager;
|
|
58
76
|
}
|
|
77
|
+
getSheetWatcherKey(address) {
|
|
78
|
+
return `${address.workbookName}:${address.sheetName}`;
|
|
79
|
+
}
|
|
80
|
+
addReverseEdge(map, dependency, dependent) {
|
|
81
|
+
const dependents = map.get(dependency) ?? new Set;
|
|
82
|
+
dependents.add(dependent);
|
|
83
|
+
map.set(dependency, dependents);
|
|
84
|
+
}
|
|
85
|
+
removeReverseEdge(map, dependency, dependent) {
|
|
86
|
+
const dependents = map.get(dependency);
|
|
87
|
+
if (!dependents) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
dependents.delete(dependent);
|
|
91
|
+
if (dependents.size === 0) {
|
|
92
|
+
map.delete(dependency);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
getWatcherRange(node) {
|
|
96
|
+
return node instanceof import_range_evaluation_node.RangeEvaluationNode ? node.address : node.getFrontierRange();
|
|
97
|
+
}
|
|
98
|
+
addWatcher(map, node) {
|
|
99
|
+
const watcherKey = this.getSheetWatcherKey(this.getWatcherRange(node));
|
|
100
|
+
const watchers = map.get(watcherKey) ?? new Set;
|
|
101
|
+
watchers.add(node);
|
|
102
|
+
map.set(watcherKey, watchers);
|
|
103
|
+
}
|
|
104
|
+
removeWatcher(map, node) {
|
|
105
|
+
const watcherKey = this.getSheetWatcherKey(this.getWatcherRange(node));
|
|
106
|
+
const watchers = map.get(watcherKey);
|
|
107
|
+
if (!watchers) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
watchers.delete(node);
|
|
111
|
+
if (watchers.size === 0) {
|
|
112
|
+
map.delete(watcherKey);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
registerWatcherNode(node) {
|
|
116
|
+
this.addWatcher(this.coverageWatchersBySheet, node);
|
|
117
|
+
this.addWatcher(this.frontierWatchersBySheet, node);
|
|
118
|
+
}
|
|
119
|
+
unregisterWatcherNode(node) {
|
|
120
|
+
this.removeWatcher(this.coverageWatchersBySheet, node);
|
|
121
|
+
this.removeWatcher(this.frontierWatchersBySheet, node);
|
|
122
|
+
}
|
|
123
|
+
isWatcherNodeResolved(node) {
|
|
124
|
+
return node instanceof import_range_evaluation_node.RangeEvaluationNode ? node.result.type !== "awaiting-evaluation" : node.evaluationResult.type !== "awaiting-evaluation";
|
|
125
|
+
}
|
|
126
|
+
getAllPersistentNodes() {
|
|
127
|
+
const astNodes = [];
|
|
128
|
+
for (const astEntries of this.asts.values()) {
|
|
129
|
+
for (const astEntry of astEntries.entries.values()) {
|
|
130
|
+
astNodes.push(astEntry.evalNode);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return [
|
|
134
|
+
...this.cellNodes.values(),
|
|
135
|
+
...this.spillMetaNodes.values(),
|
|
136
|
+
...this.emptyCells.values(),
|
|
137
|
+
...this.ranges.values(),
|
|
138
|
+
...this.resourceNodes.values(),
|
|
139
|
+
...astNodes
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
getExistingCellValueNode(nodeKey) {
|
|
143
|
+
return this.cellNodes.get(nodeKey);
|
|
144
|
+
}
|
|
145
|
+
getExistingSpillMetaNode(nodeKey) {
|
|
146
|
+
return this.spillMetaNodes.get(nodeKey);
|
|
147
|
+
}
|
|
148
|
+
getExistingEmptyCellNode(nodeKey) {
|
|
149
|
+
return this.emptyCells.get(nodeKey);
|
|
150
|
+
}
|
|
151
|
+
collectExistingNodesForCell(address) {
|
|
152
|
+
const baseKey = import_utils.cellAddressToKey(address);
|
|
153
|
+
const nodes = [
|
|
154
|
+
this.getExistingCellValueNode(baseKey),
|
|
155
|
+
this.getExistingEmptyCellNode(baseKey.replace(/^cell-value:/, "empty:")),
|
|
156
|
+
this.getExistingSpillMetaNode(baseKey.replace(/^cell-value:/, "spill-meta:"))
|
|
157
|
+
];
|
|
158
|
+
return nodes.filter((node) => node !== undefined);
|
|
159
|
+
}
|
|
160
|
+
collectSpillOriginsAffectingCell(address) {
|
|
161
|
+
const affected = new Set;
|
|
162
|
+
for (const [spillOriginKey, spilledValue] of this._spilledValues.entries()) {
|
|
163
|
+
if (spilledValue.origin.workbookName !== address.workbookName || spilledValue.origin.sheetName !== address.sheetName) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
const isOriginCell = spilledValue.origin.colIndex === address.colIndex && spilledValue.origin.rowIndex === address.rowIndex;
|
|
167
|
+
if (isOriginCell || !import_utils.isCellInRange(address, spilledValue.spillOnto)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const cellValueNode = this.cellNodes.get(`cell-value:${spillOriginKey}`);
|
|
171
|
+
if (cellValueNode) {
|
|
172
|
+
affected.add(cellValueNode);
|
|
173
|
+
}
|
|
174
|
+
const spillMetaNode = this.spillMetaNodes.get(`spill-meta:${spillOriginKey}`);
|
|
175
|
+
if (spillMetaNode) {
|
|
176
|
+
affected.add(spillMetaNode);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return affected;
|
|
180
|
+
}
|
|
181
|
+
getLinkedSpillMetaNode(node) {
|
|
182
|
+
if (node instanceof import_spill_meta_node.SpillMetaNode) {
|
|
183
|
+
return node;
|
|
184
|
+
}
|
|
185
|
+
return this.spillMetaNodes.get(node.key.replace(/^cell-value:/, "spill-meta:"));
|
|
186
|
+
}
|
|
187
|
+
getLinkedCellValueNode(node) {
|
|
188
|
+
if (node instanceof import_cell_value_node.CellValueNode) {
|
|
189
|
+
return node;
|
|
190
|
+
}
|
|
191
|
+
return this.cellNodes.get(node.key.replace(/^spill-meta:/, "cell-value:"));
|
|
192
|
+
}
|
|
193
|
+
registerNode(node) {
|
|
194
|
+
this.unregisterNode(node);
|
|
195
|
+
const hardDependencies = new Set(node.getDependencies());
|
|
196
|
+
const frontierDependencies = node instanceof import_range_evaluation_node.RangeEvaluationNode || node instanceof import_empty_cell_evaluation_node.EmptyCellEvaluationNode ? new Set(node.getFrontierDependencies()) : new Set;
|
|
197
|
+
this.registeredDependencies.set(node, {
|
|
198
|
+
hard: hardDependencies,
|
|
199
|
+
frontier: frontierDependencies
|
|
200
|
+
});
|
|
201
|
+
for (const dependency of hardDependencies) {
|
|
202
|
+
this.addReverseEdge(this.hardDependents, dependency, node);
|
|
203
|
+
}
|
|
204
|
+
for (const dependency of frontierDependencies) {
|
|
205
|
+
this.addReverseEdge(this.frontierDependents, dependency, node);
|
|
206
|
+
}
|
|
207
|
+
if ((node instanceof import_range_evaluation_node.RangeEvaluationNode || node instanceof import_empty_cell_evaluation_node.EmptyCellEvaluationNode) && this.isWatcherNodeResolved(node)) {
|
|
208
|
+
this.registerWatcherNode(node);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
unregisterNode(node) {
|
|
212
|
+
const registration = this.registeredDependencies.get(node);
|
|
213
|
+
if (registration) {
|
|
214
|
+
for (const dependency of registration.hard) {
|
|
215
|
+
this.removeReverseEdge(this.hardDependents, dependency, node);
|
|
216
|
+
}
|
|
217
|
+
for (const dependency of registration.frontier) {
|
|
218
|
+
this.removeReverseEdge(this.frontierDependents, dependency, node);
|
|
219
|
+
}
|
|
220
|
+
this.registeredDependencies.delete(node);
|
|
221
|
+
}
|
|
222
|
+
if (node instanceof import_range_evaluation_node.RangeEvaluationNode || node instanceof import_empty_cell_evaluation_node.EmptyCellEvaluationNode) {
|
|
223
|
+
this.unregisterWatcherNode(node);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
rebuildRuntimeIndexes() {
|
|
227
|
+
this.hardDependents.clear();
|
|
228
|
+
this.frontierDependents.clear();
|
|
229
|
+
this.registeredDependencies.clear();
|
|
230
|
+
this.coverageWatchersBySheet.clear();
|
|
231
|
+
this.frontierWatchersBySheet.clear();
|
|
232
|
+
for (const node of this.getAllPersistentNodes()) {
|
|
233
|
+
this.registerNode(node);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
59
236
|
get spilledValues() {
|
|
60
237
|
return this._spilledValues.values();
|
|
61
238
|
}
|
|
@@ -109,7 +286,272 @@ class DependencyManager {
|
|
|
109
286
|
this.asts.clear();
|
|
110
287
|
this.spillMetaNodes.clear();
|
|
111
288
|
this.ranges.clear();
|
|
289
|
+
this.resourceNodes.clear();
|
|
112
290
|
this._spilledValues.clear();
|
|
291
|
+
this.hardDependents.clear();
|
|
292
|
+
this.frontierDependents.clear();
|
|
293
|
+
this.registeredDependencies.clear();
|
|
294
|
+
this.coverageWatchersBySheet.clear();
|
|
295
|
+
this.frontierWatchersBySheet.clear();
|
|
296
|
+
}
|
|
297
|
+
toSnapshot(evaluationManager) {
|
|
298
|
+
const isNodeSnapshotEligible = (node) => {
|
|
299
|
+
if (node instanceof import_resource_dependency_node.ResourceDependencyNode) {
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
if (node instanceof import_range_evaluation_node.RangeEvaluationNode) {
|
|
303
|
+
return node.result.type !== "awaiting-evaluation";
|
|
304
|
+
}
|
|
305
|
+
return node.evaluationResult.type !== "awaiting-evaluation";
|
|
306
|
+
};
|
|
307
|
+
const astNodes = new Set;
|
|
308
|
+
for (const astEntries of this.asts.values()) {
|
|
309
|
+
for (const { evalNode } of astEntries.entries.values()) {
|
|
310
|
+
if (isNodeSnapshotEligible(evalNode)) {
|
|
311
|
+
astNodes.add(evalNode);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
const resolvedNodes = [
|
|
316
|
+
...Array.from(this.cellNodes.values()).filter(isNodeSnapshotEligible),
|
|
317
|
+
...Array.from(this.spillMetaNodes.values()).filter(isNodeSnapshotEligible),
|
|
318
|
+
...Array.from(this.emptyCells.values()).filter(isNodeSnapshotEligible),
|
|
319
|
+
...Array.from(this.ranges.values()).filter(isNodeSnapshotEligible),
|
|
320
|
+
...Array.from(this.resourceNodes.values()).filter(isNodeSnapshotEligible),
|
|
321
|
+
...Array.from(astNodes.values())
|
|
322
|
+
];
|
|
323
|
+
const allNodeSnapshotIds = new Map;
|
|
324
|
+
for (const node of resolvedNodes) {
|
|
325
|
+
if (node instanceof import_ast_evaluation_node.AstEvaluationNode) {
|
|
326
|
+
allNodeSnapshotIds.set(node, import_engine_snapshot.getAstNodeSnapshotId(node));
|
|
327
|
+
} else {
|
|
328
|
+
allNodeSnapshotIds.set(node, node.key);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const getAllNodeSnapshotId = (node) => {
|
|
332
|
+
const snapshotId = allNodeSnapshotIds.get(node);
|
|
333
|
+
if (!snapshotId) {
|
|
334
|
+
throw new Error(`Missing snapshot id for dependency node ${node.key}`);
|
|
335
|
+
}
|
|
336
|
+
return snapshotId;
|
|
337
|
+
};
|
|
338
|
+
const nodeSnapshots = [];
|
|
339
|
+
const includedSnapshotIds = new Set;
|
|
340
|
+
for (const node of resolvedNodes) {
|
|
341
|
+
const snapshot = this.serializeNodeSnapshot(node, evaluationManager, getAllNodeSnapshotId, allNodeSnapshotIds);
|
|
342
|
+
if (!snapshot) {
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
includedSnapshotIds.add(snapshot.snapshotId);
|
|
346
|
+
nodeSnapshots.push(snapshot);
|
|
347
|
+
}
|
|
348
|
+
const filteredNodeSnapshots = nodeSnapshots.map((snapshot) => {
|
|
349
|
+
const dependencies = snapshot.dependencies.filter((dependency2) => includedSnapshotIds.has(dependency2));
|
|
350
|
+
if (snapshot.kind === "cell-value") {
|
|
351
|
+
return {
|
|
352
|
+
...snapshot,
|
|
353
|
+
dependencies,
|
|
354
|
+
spillMetaSnapshotId: snapshot.spillMetaSnapshotId && includedSnapshotIds.has(snapshot.spillMetaSnapshotId) ? snapshot.spillMetaSnapshotId : undefined
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
...snapshot,
|
|
359
|
+
dependencies
|
|
360
|
+
};
|
|
361
|
+
});
|
|
362
|
+
const dependency = {
|
|
363
|
+
nodes: filteredNodeSnapshots,
|
|
364
|
+
spilledValues: Array.from(this._spilledValues.entries())
|
|
365
|
+
};
|
|
366
|
+
const cache = this.cacheManager.toSnapshot((node) => {
|
|
367
|
+
const snapshotId = allNodeSnapshotIds.get(node);
|
|
368
|
+
if (!snapshotId || !includedSnapshotIds.has(snapshotId)) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
return snapshotId;
|
|
372
|
+
});
|
|
373
|
+
return { dependency, cache };
|
|
374
|
+
}
|
|
375
|
+
restoreFromSnapshot(snapshots, evaluationManager) {
|
|
376
|
+
this.clearEvaluationCache();
|
|
377
|
+
const nodesBySnapshotId = new Map;
|
|
378
|
+
for (const snapshot of snapshots.dependency.nodes) {
|
|
379
|
+
const node = this.createNodeFromSnapshot(snapshot);
|
|
380
|
+
nodesBySnapshotId.set(snapshot.snapshotId, node);
|
|
381
|
+
}
|
|
382
|
+
const resolveNodeSnapshotId = (snapshotId) => nodesBySnapshotId.get(snapshotId);
|
|
383
|
+
const resolveRequiredNodeSnapshotId = (snapshotId) => {
|
|
384
|
+
const node = resolveNodeSnapshotId(snapshotId);
|
|
385
|
+
if (!node) {
|
|
386
|
+
throw new Error(`Unknown node snapshot id: ${snapshotId}`);
|
|
387
|
+
}
|
|
388
|
+
return node;
|
|
389
|
+
};
|
|
390
|
+
for (const snapshot of snapshots.dependency.nodes) {
|
|
391
|
+
const dependencies = new Set(snapshot.dependencies.map(resolveNodeSnapshotId).filter((node2) => node2 !== undefined));
|
|
392
|
+
if (snapshot.kind === "cell-value") {
|
|
393
|
+
const node2 = nodesBySnapshotId.get(snapshot.snapshotId);
|
|
394
|
+
node2.restoreResolvedSnapshot({
|
|
395
|
+
dependencies,
|
|
396
|
+
evaluationResult: evaluationManager.deserializeSingleEvaluationResultSnapshot(snapshot.evaluationResult, resolveRequiredNodeSnapshotId)
|
|
397
|
+
});
|
|
398
|
+
if (snapshot.spillMetaSnapshotId) {
|
|
399
|
+
const spillMetaNode = resolveNodeSnapshotId(snapshot.spillMetaSnapshotId);
|
|
400
|
+
if (spillMetaNode instanceof import_spill_meta_node.SpillMetaNode) {
|
|
401
|
+
node2.setSpillMetaNode(spillMetaNode);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
if (snapshot.kind === "spill-meta") {
|
|
407
|
+
const node2 = nodesBySnapshotId.get(snapshot.snapshotId);
|
|
408
|
+
node2.restoreResolvedSnapshot({
|
|
409
|
+
dependencies,
|
|
410
|
+
evaluationResult: evaluationManager.deserializeSpillMetaEvaluationResultSnapshot(snapshot.evaluationResult, resolveRequiredNodeSnapshotId)
|
|
411
|
+
});
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
if (snapshot.kind === "empty") {
|
|
415
|
+
const node2 = nodesBySnapshotId.get(snapshot.snapshotId);
|
|
416
|
+
node2.restoreResolvedSnapshot({
|
|
417
|
+
dependencies,
|
|
418
|
+
evaluationResult: evaluationManager.deserializeSingleEvaluationResultSnapshot(snapshot.evaluationResult, resolveRequiredNodeSnapshotId)
|
|
419
|
+
});
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
if (snapshot.kind === "range") {
|
|
423
|
+
const node2 = nodesBySnapshotId.get(snapshot.snapshotId);
|
|
424
|
+
node2.restoreResolvedSnapshot({
|
|
425
|
+
dependencies,
|
|
426
|
+
result: evaluationManager.deserializeEvaluateAllCellsResultSnapshot(snapshot.result, resolveRequiredNodeSnapshotId)
|
|
427
|
+
});
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
if (snapshot.kind === "resource") {
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
const node = nodesBySnapshotId.get(snapshot.snapshotId);
|
|
434
|
+
node.restoreResolvedSnapshot({
|
|
435
|
+
dependencies,
|
|
436
|
+
evaluationResult: evaluationManager.deserializeFunctionEvaluationResultSnapshot(snapshot.evaluationResult, resolveRequiredNodeSnapshotId)
|
|
437
|
+
});
|
|
438
|
+
this.saveAstNode(node, snapshot.contextDependency);
|
|
439
|
+
}
|
|
440
|
+
this._spilledValues = new Map(snapshots.dependency.spilledValues);
|
|
441
|
+
this.rebuildRuntimeIndexes();
|
|
442
|
+
this.cacheManager.restoreFromSnapshot(snapshots.cache, resolveNodeSnapshotId);
|
|
443
|
+
}
|
|
444
|
+
serializeNodeSnapshot(node, evaluationManager, getNodeSnapshotId, allNodeSnapshotIds) {
|
|
445
|
+
const snapshotId = getNodeSnapshotId(node);
|
|
446
|
+
const dependencies = Array.from(node.getDependencies()).map((dependency) => allNodeSnapshotIds.get(dependency)).filter((dependency) => dependency !== undefined);
|
|
447
|
+
if (node instanceof import_cell_value_node.CellValueNode) {
|
|
448
|
+
const evaluationResult2 = evaluationManager.serializeSingleEvaluationResultSnapshot(node.evaluationResult, getNodeSnapshotId);
|
|
449
|
+
if (!evaluationResult2) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
kind: "cell-value",
|
|
454
|
+
snapshotId,
|
|
455
|
+
key: node.key,
|
|
456
|
+
dependencies,
|
|
457
|
+
evaluationResult: evaluationResult2,
|
|
458
|
+
spillMetaSnapshotId: node.spillMeta ? allNodeSnapshotIds.get(node.spillMeta) : undefined
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
if (node instanceof import_spill_meta_node.SpillMetaNode) {
|
|
462
|
+
const evaluationResult2 = evaluationManager.serializeSpillMetaEvaluationResultSnapshot(node.evaluationResult, {
|
|
463
|
+
sourceNode: node,
|
|
464
|
+
getNodeSnapshotId
|
|
465
|
+
});
|
|
466
|
+
if (!evaluationResult2) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
return {
|
|
470
|
+
kind: "spill-meta",
|
|
471
|
+
snapshotId,
|
|
472
|
+
key: node.key,
|
|
473
|
+
dependencies,
|
|
474
|
+
evaluationResult: evaluationResult2
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
if (node instanceof import_empty_cell_evaluation_node.EmptyCellEvaluationNode) {
|
|
478
|
+
const evaluationResult2 = evaluationManager.serializeSingleEvaluationResultSnapshot(node.evaluationResult, getNodeSnapshotId);
|
|
479
|
+
if (!evaluationResult2) {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
return {
|
|
483
|
+
kind: "empty",
|
|
484
|
+
snapshotId,
|
|
485
|
+
key: node.key,
|
|
486
|
+
dependencies,
|
|
487
|
+
evaluationResult: evaluationResult2
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
if (node instanceof import_range_evaluation_node.RangeEvaluationNode) {
|
|
491
|
+
const result = evaluationManager.serializeEvaluateAllCellsResultSnapshot(node.result, getNodeSnapshotId);
|
|
492
|
+
if (!result) {
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
return {
|
|
496
|
+
kind: "range",
|
|
497
|
+
snapshotId,
|
|
498
|
+
key: node.key,
|
|
499
|
+
dependencies,
|
|
500
|
+
result
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
if (node instanceof import_resource_dependency_node.ResourceDependencyNode) {
|
|
504
|
+
return {
|
|
505
|
+
kind: "resource",
|
|
506
|
+
snapshotId,
|
|
507
|
+
key: node.key,
|
|
508
|
+
dependencies
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
const evaluationResult = evaluationManager.serializeFunctionEvaluationResultSnapshot(node.evaluationResult, {
|
|
512
|
+
sourceNode: node,
|
|
513
|
+
getNodeSnapshotId
|
|
514
|
+
});
|
|
515
|
+
if (!evaluationResult) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
return {
|
|
519
|
+
kind: "ast",
|
|
520
|
+
snapshotId,
|
|
521
|
+
key: node.key,
|
|
522
|
+
dependencies,
|
|
523
|
+
contextDependency: node.getContextDependency(),
|
|
524
|
+
evaluationResult
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
createNodeFromSnapshot(snapshot) {
|
|
528
|
+
if (snapshot.kind === "cell-value") {
|
|
529
|
+
const node2 = new import_cell_value_node.CellValueNode(snapshot.key);
|
|
530
|
+
this.cellNodes.set(snapshot.key, node2);
|
|
531
|
+
return node2;
|
|
532
|
+
}
|
|
533
|
+
if (snapshot.kind === "spill-meta") {
|
|
534
|
+
const node2 = new import_spill_meta_node.SpillMetaNode(snapshot.key);
|
|
535
|
+
this.spillMetaNodes.set(snapshot.key, node2);
|
|
536
|
+
return node2;
|
|
537
|
+
}
|
|
538
|
+
if (snapshot.kind === "empty") {
|
|
539
|
+
const node2 = new import_empty_cell_evaluation_node.EmptyCellEvaluationNode(snapshot.key, this, this.workbookManager, { skipInitialBuild: true });
|
|
540
|
+
this.emptyCells.set(snapshot.key, node2);
|
|
541
|
+
return node2;
|
|
542
|
+
}
|
|
543
|
+
if (snapshot.kind === "range") {
|
|
544
|
+
const node2 = new import_range_evaluation_node.RangeEvaluationNode(snapshot.key, this, this.workbookManager, { skipInitialBuild: true });
|
|
545
|
+
this.ranges.set(snapshot.key, node2);
|
|
546
|
+
return node2;
|
|
547
|
+
}
|
|
548
|
+
if (snapshot.kind === "resource") {
|
|
549
|
+
const node2 = new import_resource_dependency_node.ResourceDependencyNode(snapshot.key);
|
|
550
|
+
this.resourceNodes.set(snapshot.key, node2);
|
|
551
|
+
return node2;
|
|
552
|
+
}
|
|
553
|
+
const node = new import_ast_evaluation_node.AstEvaluationNode(import_parser.parseFormula(snapshot.key.slice(4)), snapshot.contextDependency);
|
|
554
|
+
return node;
|
|
113
555
|
}
|
|
114
556
|
setSpilledValue(nodeKey, spilledValue) {
|
|
115
557
|
this._spilledValues.set(nodeKey.replace(/^[^:]+:/, ""), spilledValue);
|
|
@@ -117,6 +559,9 @@ class DependencyManager {
|
|
|
117
559
|
getSpilledValue(nodeKey) {
|
|
118
560
|
return this._spilledValues.get(nodeKey.replace(/^[^:]+:/, ""));
|
|
119
561
|
}
|
|
562
|
+
deleteSpilledValue(nodeKey) {
|
|
563
|
+
this._spilledValues.delete(nodeKey.replace(/^[^:]+:/, ""));
|
|
564
|
+
}
|
|
120
565
|
getEmptyCellNode(nodeKey) {
|
|
121
566
|
if (!nodeKey.startsWith("empty:")) {
|
|
122
567
|
throw new Error("Invalid empty cell node key: " + nodeKey);
|
|
@@ -150,6 +595,14 @@ class DependencyManager {
|
|
|
150
595
|
}
|
|
151
596
|
return this.cellNodes.get(nodeKey);
|
|
152
597
|
}
|
|
598
|
+
getResourceNode(resourceKey) {
|
|
599
|
+
if (!this.resourceNodes.has(resourceKey)) {
|
|
600
|
+
const node = new import_resource_dependency_node.ResourceDependencyNode(resourceKey);
|
|
601
|
+
this.resourceNodes.set(resourceKey, node);
|
|
602
|
+
return node;
|
|
603
|
+
}
|
|
604
|
+
return this.resourceNodes.get(resourceKey);
|
|
605
|
+
}
|
|
153
606
|
getCellValueOrEmptyCellNode(nodeKey) {
|
|
154
607
|
const cellAddress = import_utils.keyToCellAddress(nodeKey);
|
|
155
608
|
const emptyKey = nodeKey.replace(/^[^:]+:/, "empty:");
|
|
@@ -236,6 +689,241 @@ class DependencyManager {
|
|
|
236
689
|
});
|
|
237
690
|
}
|
|
238
691
|
}
|
|
692
|
+
isFiniteEndAfter(value, end) {
|
|
693
|
+
return end.type === "infinity" || value < end.value;
|
|
694
|
+
}
|
|
695
|
+
doesAddressAffectWatcherFrontier(address, watcher) {
|
|
696
|
+
const watcherRange = this.getWatcherRange(watcher).range;
|
|
697
|
+
const rowWithinRange = address.rowIndex >= watcherRange.start.row && (watcherRange.end.row.type === "infinity" || address.rowIndex <= watcherRange.end.row.value);
|
|
698
|
+
const colWithinRange = address.colIndex >= watcherRange.start.col && (watcherRange.end.col.type === "infinity" || address.colIndex <= watcherRange.end.col.value);
|
|
699
|
+
const canReachFurtherRows = this.isFiniteEndAfter(address.rowIndex, watcherRange.end.row);
|
|
700
|
+
const canReachFurtherCols = this.isFiniteEndAfter(address.colIndex, watcherRange.end.col);
|
|
701
|
+
return rowWithinRange && canReachFurtherCols || colWithinRange && canReachFurtherRows || canReachFurtherRows && canReachFurtherCols;
|
|
702
|
+
}
|
|
703
|
+
collectCoverageWatchers(address) {
|
|
704
|
+
const watchers = this.coverageWatchersBySheet.get(this.getSheetWatcherKey(address)) ?? new Set;
|
|
705
|
+
const affected = new Set;
|
|
706
|
+
for (const watcher of watchers) {
|
|
707
|
+
if (import_utils.isCellInRange(address, this.getWatcherRange(watcher).range)) {
|
|
708
|
+
affected.add(watcher);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
return affected;
|
|
712
|
+
}
|
|
713
|
+
collectFrontierWatchers(address) {
|
|
714
|
+
const watchers = this.frontierWatchersBySheet.get(this.getSheetWatcherKey(address)) ?? new Set;
|
|
715
|
+
const affected = new Set;
|
|
716
|
+
for (const watcher of watchers) {
|
|
717
|
+
if (this.doesAddressAffectWatcherFrontier(address, watcher)) {
|
|
718
|
+
affected.add(watcher);
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
return affected;
|
|
722
|
+
}
|
|
723
|
+
collectWatchersIntersectingRange(address) {
|
|
724
|
+
const watchers = this.coverageWatchersBySheet.get(this.getSheetWatcherKey(address)) ?? new Set;
|
|
725
|
+
const affected = new Set;
|
|
726
|
+
for (const watcher of watchers) {
|
|
727
|
+
if (import_utils.checkRangeIntersection(address.range, this.getWatcherRange(watcher).range)) {
|
|
728
|
+
affected.add(watcher);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
return affected;
|
|
732
|
+
}
|
|
733
|
+
getNodeDependents(node) {
|
|
734
|
+
return (this.hardDependents.get(node) ?? new Set).union(this.frontierDependents.get(node) ?? new Set);
|
|
735
|
+
}
|
|
736
|
+
collectInvalidationExtras(node) {
|
|
737
|
+
const extras = new Set;
|
|
738
|
+
if (node instanceof import_cell_value_node.CellValueNode || node instanceof import_spill_meta_node.SpillMetaNode) {
|
|
739
|
+
const spillMetaNode = this.getLinkedSpillMetaNode(node);
|
|
740
|
+
if (spillMetaNode) {
|
|
741
|
+
extras.add(spillMetaNode);
|
|
742
|
+
}
|
|
743
|
+
const cellNode = this.getLinkedCellValueNode(node);
|
|
744
|
+
if (cellNode) {
|
|
745
|
+
extras.add(cellNode);
|
|
746
|
+
}
|
|
747
|
+
const spill = this.getSpilledValue(node.key);
|
|
748
|
+
if (spill) {
|
|
749
|
+
for (const watcher of this.collectWatchersIntersectingRange({
|
|
750
|
+
workbookName: spill.origin.workbookName,
|
|
751
|
+
sheetName: spill.origin.sheetName,
|
|
752
|
+
range: spill.spillOnto
|
|
753
|
+
})) {
|
|
754
|
+
extras.add(watcher);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
const cellAddress = node.cellAddress;
|
|
758
|
+
for (const watcher of this.collectCoverageWatchers(cellAddress)) {
|
|
759
|
+
extras.add(watcher);
|
|
760
|
+
}
|
|
761
|
+
for (const watcher of this.collectFrontierWatchers(cellAddress)) {
|
|
762
|
+
extras.add(watcher);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
return extras;
|
|
766
|
+
}
|
|
767
|
+
invalidateNodeState(node, invalidatedKeys) {
|
|
768
|
+
this.unregisterNode(node);
|
|
769
|
+
invalidatedKeys.add(node.key);
|
|
770
|
+
if (node instanceof import_cell_value_node.CellValueNode) {
|
|
771
|
+
node.clearSpillMetaNode();
|
|
772
|
+
this.deleteSpilledValue(node.key);
|
|
773
|
+
node.invalidate();
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
if (node instanceof import_spill_meta_node.SpillMetaNode) {
|
|
777
|
+
this.deleteSpilledValue(node.key);
|
|
778
|
+
this.getLinkedCellValueNode(node)?.clearSpillMetaNode();
|
|
779
|
+
node.invalidate();
|
|
780
|
+
return;
|
|
781
|
+
}
|
|
782
|
+
if (node instanceof import_empty_cell_evaluation_node.EmptyCellEvaluationNode || node instanceof import_range_evaluation_node.RangeEvaluationNode || node instanceof import_ast_evaluation_node.AstEvaluationNode) {
|
|
783
|
+
node.invalidate();
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
if (node instanceof import_resource_dependency_node.ResourceDependencyNode) {
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
isResourceNodeInRemovedScope(resourceKey, scope) {
|
|
791
|
+
if (scope.type === "workbook") {
|
|
792
|
+
return resourceKey === `resource:workbook:${scope.workbookName}` || resourceKey.startsWith(`resource:sheet:${scope.workbookName}:`) || resourceKey.startsWith(`resource:table:${scope.workbookName}:`) || resourceKey.startsWith(`resource:named:workbook:${scope.workbookName}:`) || resourceKey.startsWith(`resource:named:sheet:${scope.workbookName}:`);
|
|
793
|
+
}
|
|
794
|
+
return resourceKey === `resource:sheet:${scope.workbookName}:${scope.sheetName}` || resourceKey.startsWith(`resource:named:sheet:${scope.workbookName}:${scope.sheetName}:`);
|
|
795
|
+
}
|
|
796
|
+
isNodeInRemovedScope(node, scope) {
|
|
797
|
+
if (node instanceof import_resource_dependency_node.ResourceDependencyNode) {
|
|
798
|
+
return this.isResourceNodeInRemovedScope(node.key, scope);
|
|
799
|
+
}
|
|
800
|
+
if (node instanceof import_ast_evaluation_node.AstEvaluationNode) {
|
|
801
|
+
const contextDependency = node.getContextDependency();
|
|
802
|
+
if (scope.type === "workbook") {
|
|
803
|
+
return contextDependency.workbookName === scope.workbookName;
|
|
804
|
+
}
|
|
805
|
+
return contextDependency.workbookName === scope.workbookName && contextDependency.sheetName === scope.sheetName;
|
|
806
|
+
}
|
|
807
|
+
const workbookName = node instanceof import_range_evaluation_node.RangeEvaluationNode ? node.address.workbookName : node.cellAddress.workbookName;
|
|
808
|
+
const sheetName = node instanceof import_range_evaluation_node.RangeEvaluationNode ? node.address.sheetName : node.cellAddress.sheetName;
|
|
809
|
+
if (scope.type === "workbook") {
|
|
810
|
+
return workbookName === scope.workbookName;
|
|
811
|
+
}
|
|
812
|
+
return workbookName === scope.workbookName && sheetName === scope.sheetName;
|
|
813
|
+
}
|
|
814
|
+
collectNodesForRemovedScopes(removedScopes) {
|
|
815
|
+
const affected = new Set;
|
|
816
|
+
for (const node of this.getAllPersistentNodes()) {
|
|
817
|
+
if (removedScopes.some((scope) => this.isNodeInRemovedScope(node, scope))) {
|
|
818
|
+
affected.add(node);
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
return affected;
|
|
822
|
+
}
|
|
823
|
+
purgeRemovedScopes(removedScopes) {
|
|
824
|
+
const shouldRemoveAddress = (address) => removedScopes.some((scope) => scope.type === "workbook" ? address.workbookName === scope.workbookName : address.workbookName === scope.workbookName && address.sheetName === scope.sheetName);
|
|
825
|
+
for (const [key, node] of Array.from(this.cellNodes.entries())) {
|
|
826
|
+
if (shouldRemoveAddress(node.cellAddress)) {
|
|
827
|
+
this.unregisterNode(node);
|
|
828
|
+
this.cellNodes.delete(key);
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
for (const [key, node] of Array.from(this.spillMetaNodes.entries())) {
|
|
832
|
+
if (shouldRemoveAddress(node.cellAddress)) {
|
|
833
|
+
this.unregisterNode(node);
|
|
834
|
+
this.spillMetaNodes.delete(key);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
for (const [key, node] of Array.from(this.emptyCells.entries())) {
|
|
838
|
+
if (shouldRemoveAddress(node.cellAddress)) {
|
|
839
|
+
this.unregisterNode(node);
|
|
840
|
+
this.emptyCells.delete(key);
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
for (const [key, node] of Array.from(this.ranges.entries())) {
|
|
844
|
+
if (shouldRemoveAddress({
|
|
845
|
+
workbookName: node.address.workbookName,
|
|
846
|
+
sheetName: node.address.sheetName
|
|
847
|
+
})) {
|
|
848
|
+
this.unregisterNode(node);
|
|
849
|
+
this.ranges.delete(key);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
for (const [key, node] of Array.from(this.resourceNodes.entries())) {
|
|
853
|
+
if (removedScopes.some((scope) => this.isResourceNodeInRemovedScope(key, scope))) {
|
|
854
|
+
this.unregisterNode(node);
|
|
855
|
+
this.resourceNodes.delete(key);
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
for (const [astKey, astEntries] of Array.from(this.asts.entries())) {
|
|
859
|
+
for (const [contextKey, astEntry] of Array.from(astEntries.entries.entries())) {
|
|
860
|
+
if (removedScopes.some((scope) => this.isNodeInRemovedScope(astEntry.evalNode, scope))) {
|
|
861
|
+
this.unregisterNode(astEntry.evalNode);
|
|
862
|
+
astEntries.entries.delete(contextKey);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
if (astEntries.entries.size === 0) {
|
|
866
|
+
this.asts.delete(astKey);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
for (const [spillOriginKey, spilledValue] of Array.from(this._spilledValues.entries())) {
|
|
870
|
+
if (shouldRemoveAddress({
|
|
871
|
+
workbookName: spilledValue.origin.workbookName,
|
|
872
|
+
sheetName: spilledValue.origin.sheetName
|
|
873
|
+
})) {
|
|
874
|
+
this._spilledValues.delete(spillOriginKey);
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
invalidateFromMutation(footprint) {
|
|
879
|
+
const queue = [];
|
|
880
|
+
const visited = new Set;
|
|
881
|
+
const invalidatedNodeKeys = new Set;
|
|
882
|
+
for (const touchedCell of footprint.touchedCells) {
|
|
883
|
+
for (const node of this.collectExistingNodesForCell(touchedCell.address)) {
|
|
884
|
+
queue.push(node);
|
|
885
|
+
}
|
|
886
|
+
for (const node of this.collectSpillOriginsAffectingCell(touchedCell.address)) {
|
|
887
|
+
queue.push(node);
|
|
888
|
+
}
|
|
889
|
+
for (const watcher of this.collectCoverageWatchers(touchedCell.address)) {
|
|
890
|
+
queue.push(watcher);
|
|
891
|
+
}
|
|
892
|
+
for (const watcher of this.collectFrontierWatchers(touchedCell.address)) {
|
|
893
|
+
queue.push(watcher);
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
for (const resourceKey of footprint.resourceKeys) {
|
|
897
|
+
const resourceNode = this.resourceNodes.get(resourceKey);
|
|
898
|
+
if (resourceNode) {
|
|
899
|
+
queue.push(resourceNode);
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
if (footprint.removedScopes?.length) {
|
|
903
|
+
for (const node of this.collectNodesForRemovedScopes(footprint.removedScopes)) {
|
|
904
|
+
queue.push(node);
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
while (queue.length > 0) {
|
|
908
|
+
const node = queue.pop();
|
|
909
|
+
if (!node || visited.has(node)) {
|
|
910
|
+
continue;
|
|
911
|
+
}
|
|
912
|
+
visited.add(node);
|
|
913
|
+
for (const dependent of this.getNodeDependents(node)) {
|
|
914
|
+
queue.push(dependent);
|
|
915
|
+
}
|
|
916
|
+
for (const extra of this.collectInvalidationExtras(node)) {
|
|
917
|
+
queue.push(extra);
|
|
918
|
+
}
|
|
919
|
+
this.invalidateNodeState(node, invalidatedNodeKeys);
|
|
920
|
+
}
|
|
921
|
+
this.cacheManager.deleteEvaluationOrders(invalidatedNodeKeys);
|
|
922
|
+
this.cacheManager.clearSCCCache();
|
|
923
|
+
if (footprint.removedScopes?.length) {
|
|
924
|
+
this.purgeRemovedScopes(footprint.removedScopes);
|
|
925
|
+
}
|
|
926
|
+
}
|
|
239
927
|
getTransitiveDepsForEvalOrder(node, visited = new Set) {
|
|
240
928
|
if (visited.has(node)) {
|
|
241
929
|
return new Set;
|
|
@@ -610,4 +1298,4 @@ class DependencyManager {
|
|
|
610
1298
|
}
|
|
611
1299
|
}
|
|
612
1300
|
|
|
613
|
-
//# debugId=
|
|
1301
|
+
//# debugId=88CA47D7AF9DA3D664756E2164756E21
|