@quereus/quereus 3.2.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/src/common/datatype.d.ts +12 -0
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/types.d.ts +24 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +37 -9
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +62 -106
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +163 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +235 -21
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +28 -0
- package/dist/src/core/database-external-changes.d.ts.map +1 -0
- package/dist/src/core/database-external-changes.js +242 -0
- package/dist/src/core/database-external-changes.js.map +1 -0
- package/dist/src/core/database-internal.d.ts +50 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +1253 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views.js +3064 -0
- package/dist/src/core/database-materialized-views.js.map +1 -0
- package/dist/src/core/database-options.d.ts +4 -0
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js +10 -0
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +19 -3
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +30 -3
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +19 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +63 -3
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +203 -11
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +493 -29
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +137 -0
- package/dist/src/core/derived-row-validator.d.ts.map +1 -0
- package/dist/src/core/derived-row-validator.js +314 -0
- package/dist/src/core/derived-row-validator.js.map +1 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +30 -9
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +135 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +795 -120
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -10
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +32 -0
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +3 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +229 -0
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +10 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts +2 -0
- package/dist/src/func/builtins/mutation.d.ts.map +1 -0
- package/dist/src/func/builtins/mutation.js +53 -0
- package/dist/src/func/builtins/mutation.js.map +1 -0
- package/dist/src/func/builtins/schema.d.ts +2 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +713 -26
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.js +1 -1
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/registration.d.ts +9 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +4 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +25 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +27 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +353 -21
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/index.d.ts +14 -1
- package/dist/src/parser/index.d.ts.map +1 -1
- package/dist/src/parser/index.js +19 -0
- package/dist/src/parser/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts +9 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -0
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +277 -8
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1393 -471
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +12 -8
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +4 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
- package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
- package/dist/src/planner/analysis/authored-inverse.js +267 -0
- package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/binding-extractor.js +9 -6
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +34 -4
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +115 -7
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +174 -46
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/coarsened-key.js +228 -0
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.js +341 -0
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +13 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +220 -21
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
- package/dist/src/planner/analysis/coverage-prover.js +1038 -0
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
- package/dist/src/planner/analysis/key-filter.d.ts +22 -0
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
- package/dist/src/planner/analysis/key-filter.js +105 -0
- package/dist/src/planner/analysis/key-filter.js.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +51 -13
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
- package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
- package/dist/src/planner/analysis/update-lineage.js +322 -0
- package/dist/src/planner/analysis/update-lineage.js.map +1 -0
- package/dist/src/planner/analysis/view-complement.d.ts +42 -0
- package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
- package/dist/src/planner/analysis/view-complement.js +54 -0
- package/dist/src/planner/analysis/view-complement.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +211 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +18 -1
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +33 -5
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +63 -28
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +9 -0
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +41 -12
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +94 -0
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/declare-schema.d.ts +1 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
- package/dist/src/planner/building/declare-schema.js +4 -1
- package/dist/src/planner/building/declare-schema.js.map +1 -1
- package/dist/src/planner/building/default-scope.d.ts +26 -0
- package/dist/src/planner/building/default-scope.d.ts.map +1 -0
- package/dist/src/planner/building/default-scope.js +41 -0
- package/dist/src/planner/building/default-scope.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts +19 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +116 -34
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +118 -0
- package/dist/src/planner/building/dml-target.d.ts.map +1 -0
- package/dist/src/planner/building/dml-target.js +282 -0
- package/dist/src/planner/building/dml-target.js.map +1 -0
- package/dist/src/planner/building/drop-index.d.ts.map +1 -1
- package/dist/src/planner/building/drop-index.js +4 -1
- package/dist/src/planner/building/drop-index.js.map +1 -1
- package/dist/src/planner/building/drop-view.d.ts.map +1 -1
- package/dist/src/planner/building/drop-view.js +4 -2
- package/dist/src/planner/building/drop-view.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +60 -21
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +160 -129
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts +45 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +257 -88
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
- package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
- package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/building/materialized-view.d.ts +16 -0
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
- package/dist/src/planner/building/materialized-view.js +57 -0
- package/dist/src/planner/building/materialized-view.js.map +1 -0
- package/dist/src/planner/building/returning-star.d.ts +32 -0
- package/dist/src/planner/building/returning-star.d.ts.map +1 -0
- package/dist/src/planner/building/returning-star.js +45 -0
- package/dist/src/planner/building/returning-star.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +51 -13
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +84 -11
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +10 -2
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +7 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +6 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +18 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +30 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +8 -2
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +26 -4
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +8 -5
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +164 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/set-object-tags.d.ts +7 -0
- package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
- package/dist/src/planner/building/set-object-tags.js +38 -0
- package/dist/src/planner/building/set-object-tags.js.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.js +37 -0
- package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
- package/dist/src/planner/building/update.d.ts +18 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +134 -58
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
- package/dist/src/planner/building/view-mutation-builder.js +1158 -0
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
- package/dist/src/planner/building/with.d.ts +11 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +48 -10
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +83 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +114 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +38 -4
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -6
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +2 -1
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +7 -1
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +39 -1
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +18 -2
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +131 -0
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
- package/dist/src/planner/mutation/backward-body.js +135 -0
- package/dist/src/planner/mutation/backward-body.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +364 -0
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
- package/dist/src/planner/mutation/decomposition.d.ts +273 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
- package/dist/src/planner/mutation/decomposition.js +1719 -0
- package/dist/src/planner/mutation/decomposition.js.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.js +745 -0
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
- package/dist/src/planner/mutation/multi-source.d.ts +568 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/multi-source.js +2915 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.js +31 -0
- package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts +97 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
- package/dist/src/planner/mutation/propagate.js +220 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -0
- package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
- package/dist/src/planner/mutation/scope-transform.js +574 -0
- package/dist/src/planner/mutation/scope-transform.js.map +1 -0
- package/dist/src/planner/mutation/set-op.d.ts +242 -0
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
- package/dist/src/planner/mutation/set-op.js +1687 -0
- package/dist/src/planner/mutation/set-op.js.map +1 -0
- package/dist/src/planner/mutation/single-source.d.ts +261 -0
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/single-source.js +1096 -0
- package/dist/src/planner/mutation/single-source.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts +6 -4
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +11 -9
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +5 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +27 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
- package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/analyze-node.js +21 -1
- package/dist/src/planner/nodes/analyze-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +33 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +2 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +4 -1
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +32 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +27 -3
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
- package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
- package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +63 -13
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +6 -16
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +41 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +78 -8
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +33 -6
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +131 -10
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts +12 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +52 -3
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +2 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +9 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +265 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +12 -0
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +14 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +103 -16
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +63 -30
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +7 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +10 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +20 -0
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +71 -14
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
- package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
- package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
- package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +302 -18
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +8 -7
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +8 -23
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +2 -0
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +18 -2
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +23 -3
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +6 -0
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/values-node.d.ts +3 -1
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +26 -0
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/view-mutation-node.js +273 -0
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
- package/dist/src/planner/nodes/window-function.d.ts +17 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +15 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js +3 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +372 -39
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +1 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +8 -27
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +9 -3
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +56 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +8 -7
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +14 -21
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +42 -5
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +25 -9
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +19 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +5 -2
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +10 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +2 -2
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +16 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +47 -4
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +14 -0
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +66 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +228 -36
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +501 -84
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +27 -1
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +80 -6
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +26 -3
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +182 -33
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
- package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
- package/dist/src/planner/util/set-op-wrapper.js +82 -0
- package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +13 -1
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +7 -1
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +30 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +38 -4
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +38 -5
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +10 -8
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +664 -108
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +2 -1
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +24 -9
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
- package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
- package/dist/src/runtime/emit/asserted-keys.js +13 -0
- package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +24 -19
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +24 -36
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/block.d.ts.map +1 -1
- package/dist/src/runtime/emit/block.js +11 -2
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +12 -4
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +50 -1
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +8 -0
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +16 -1
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/delete.d.ts.map +1 -1
- package/dist/src/runtime/emit/delete.js +15 -5
- package/dist/src/runtime/emit/delete.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +413 -193
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +10 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +17 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/envelope-scan.js +22 -0
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts +10 -2
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +128 -38
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view.js +187 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +19 -5
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +10 -5
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +101 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.js +57 -0
- package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +140 -24
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +110 -5
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +34 -6
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
- package/dist/src/runtime/emit/view-mutation.js +299 -0
- package/dist/src/runtime/emit/view-mutation.js.map +1 -0
- package/dist/src/runtime/emit/window.js +29 -5
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +580 -172
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +5 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +17 -1
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +10 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/basis-backfill.d.ts +63 -0
- package/dist/src/schema/basis-backfill.d.ts.map +1 -0
- package/dist/src/schema/basis-backfill.js +161 -0
- package/dist/src/schema/basis-backfill.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +115 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +249 -22
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +42 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/column.d.ts +16 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +182 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -0
- package/dist/src/schema/constraint-builder.js +424 -0
- package/dist/src/schema/constraint-builder.js.map +1 -0
- package/dist/src/schema/ddl-generator.d.ts +86 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +316 -20
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +51 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +61 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +106 -0
- package/dist/src/schema/derivation.d.ts.map +1 -0
- package/dist/src/schema/derivation.js +25 -0
- package/dist/src/schema/derivation.js.map +1 -0
- package/dist/src/schema/function.d.ts +13 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-ack.d.ts +90 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -0
- package/dist/src/schema/lens-ack.js +361 -0
- package/dist/src/schema/lens-ack.js.map +1 -0
- package/dist/src/schema/lens-compiler.d.ts +62 -0
- package/dist/src/schema/lens-compiler.d.ts.map +1 -0
- package/dist/src/schema/lens-compiler.js +1594 -0
- package/dist/src/schema/lens-compiler.js.map +1 -0
- package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
- package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
- package/dist/src/schema/lens-fk-discovery.js +336 -0
- package/dist/src/schema/lens-fk-discovery.js.map +1 -0
- package/dist/src/schema/lens-prover.d.ts +336 -0
- package/dist/src/schema/lens-prover.d.ts.map +1 -0
- package/dist/src/schema/lens-prover.js +1988 -0
- package/dist/src/schema/lens-prover.js.map +1 -0
- package/dist/src/schema/lens.d.ts +254 -0
- package/dist/src/schema/lens.d.ts.map +1 -0
- package/dist/src/schema/lens.js +21 -0
- package/dist/src/schema/lens.js.map +1 -0
- package/dist/src/schema/manager.d.ts +676 -18
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +1573 -238
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
- package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
- package/dist/src/schema/mapping-advertisement-tags.js +216 -0
- package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
- package/dist/src/schema/rename-rewriter.d.ts +45 -4
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +412 -19
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
- package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags-policy.js +34 -0
- package/dist/src/schema/reserved-tags-policy.js.map +1 -0
- package/dist/src/schema/reserved-tags.d.ts +170 -0
- package/dist/src/schema/reserved-tags.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags.js +507 -0
- package/dist/src/schema/reserved-tags.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts +158 -2
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +1460 -78
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +8 -3
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +22 -2
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/schema.d.ts +25 -1
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +36 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +259 -10
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +309 -26
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +78 -0
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
- package/dist/src/schema/unique-enforcement.js +93 -0
- package/dist/src/schema/unique-enforcement.js.map +1 -0
- package/dist/src/schema/view.d.ts +83 -2
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +67 -1
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/schema/window-function.d.ts +9 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/types/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +71 -36
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/comparison.d.ts +24 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +34 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/mutation-statement.d.ts.map +1 -1
- package/dist/src/util/mutation-statement.js +4 -1
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/dist/src/util/serialization.d.ts +9 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +26 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/backing-host.d.ts +286 -0
- package/dist/src/vtab/backing-host.d.ts.map +1 -0
- package/dist/src/vtab/backing-host.js +118 -0
- package/dist/src/vtab/backing-host.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +21 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -5
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
- package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
- package/dist/src/vtab/mapping-advertisement.js +2 -0
- package/dist/src/vtab/mapping-advertisement.js.map +1 -0
- package/dist/src/vtab/memory/index.d.ts +64 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +119 -12
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +38 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +112 -24
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +1050 -91
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +5 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +17 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +82 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +15 -5
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/types.d.ts +20 -2
- package/dist/src/vtab/memory/types.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +46 -24
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -5
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +203 -4
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -0
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { ACKNOWLEDGEABLE_ADVISORY_CODES } from './lens-prover.js';
|
|
2
|
+
import { getReservedTag, getReservedTagByTemplate } from './reserved-tags.js';
|
|
3
|
+
import { fnv1aHash, toBase64Url } from '../util/hash.js';
|
|
4
|
+
/**
|
|
5
|
+
* Lens advisory acknowledgment & escalation governance — the anti-fatigue half
|
|
6
|
+
* of the lens capstone (`docs/lens.md` § Acknowledging advisories).
|
|
7
|
+
*
|
|
8
|
+
* Sits **atop** the advisory list the prover (`lens-prover.ts`) produces: that
|
|
9
|
+
* module proves write-soundness and emits coded, sited, fingerprint-bearing
|
|
10
|
+
* advisories; this module lets a developer consciously accept those advisories
|
|
11
|
+
* in source (the reserved `quereus.lens.ack.<code>` tag), **re-surfaces** them
|
|
12
|
+
* when the underlying facts change (fingerprint mismatch), and lets a project
|
|
13
|
+
* escalate specific codes to hard requirements (`error-on` / `require-ack`).
|
|
14
|
+
* No new enforcement semantics — pure governance over the advisory channel.
|
|
15
|
+
*
|
|
16
|
+
* The three mechanics the doc locks (and this module realizes):
|
|
17
|
+
* - **Coded + sited + targeted.** An ack `quereus.lens.ack.<code>[:<target>]`
|
|
18
|
+
* on the logical table or a constraint suppresses exactly the advisory whose
|
|
19
|
+
* `(code, site[, target])` it names — never a class by accident.
|
|
20
|
+
* - **Fingerprinted (anti-fatigue).** Each ack records the coarse facts behind
|
|
21
|
+
* its advisory ({@link FingerprintInputs}, banded so ordinary churn is
|
|
22
|
+
* invisible). When the recorded fingerprint no longer matches the freshly
|
|
23
|
+
* computed one, the advisory re-surfaces flagged "previously acknowledged;
|
|
24
|
+
* situation changed." A first-write ack with no recorded fingerprint is
|
|
25
|
+
* honored *unconditionally* (record-on-first-sight; the author opted out of
|
|
26
|
+
* re-surfacing).
|
|
27
|
+
* - **Escalation policy.** `error-on: [code]` makes the code a hard error an ack
|
|
28
|
+
* cannot suppress; `require-ack: [code]` makes an *un*-acknowledged instance a
|
|
29
|
+
* hard error a valid ack clears. Default-empty (projects opt in).
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Advisory codes are spelled `lens.<x>` ({@link LensCheckCode}); the ack tag
|
|
33
|
+
* `quereus.lens.ack.<code>` carries only the `<x>` remainder (the `quereus.lens.`
|
|
34
|
+
* literal already encodes the `lens.` prefix). So `lens.no-backing-index` is
|
|
35
|
+
* acknowledged by `quereus.lens.ack.no-backing-index`.
|
|
36
|
+
*/
|
|
37
|
+
const ADVISORY_CODE_PREFIX = 'lens.';
|
|
38
|
+
const ACK_TEMPLATE = 'quereus.lens.ack.<code>';
|
|
39
|
+
/**
|
|
40
|
+
* In-DDL fingerprint storage (resolved-lean): the recorded fingerprint rides the
|
|
41
|
+
* ack tag *value* as a trailing `#fp=<hash>` token, so it survives schema export
|
|
42
|
+
* round-trip, is version-controlled, and shows up in review alongside the
|
|
43
|
+
* rationale (the same reason the lens doc keeps acks in source). This is the
|
|
44
|
+
* least-noisy shape that round-trips through `reserved-tags.ts` validation: the
|
|
45
|
+
* value is still a single non-empty TEXT rationale (validation unchanged), and no
|
|
46
|
+
* sibling key collides with the `quereus.lens.ack.<code>` template. The anchored
|
|
47
|
+
* suffix keeps an ordinary rationale (which may contain `#`) unambiguous.
|
|
48
|
+
*/
|
|
49
|
+
const FINGERPRINT_SUFFIX_RE = /\s*#fp=([A-Za-z0-9_-]+)\s*$/;
|
|
50
|
+
/** The default policy: nothing escalated (out of the box). */
|
|
51
|
+
export const EMPTY_ESCALATION_POLICY = {
|
|
52
|
+
errorOn: new Set(),
|
|
53
|
+
requireAck: new Set(),
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Resolves the escalation policy for one logical table from its reserved policy
|
|
57
|
+
* tags (`quereus.lens.policy.error-on` / `quereus.lens.policy.require-ack`, each a
|
|
58
|
+
* CSV of advisory codes). Default-empty when neither tag is present — out of the
|
|
59
|
+
* box no code is escalated; a project opts in per logical table. (A schema-wide
|
|
60
|
+
* policy is expressed by tagging each table; see `docs/lens.md` § Escalation
|
|
61
|
+
* policy.)
|
|
62
|
+
*/
|
|
63
|
+
export function resolveEscalationPolicy(logicalTable) {
|
|
64
|
+
return {
|
|
65
|
+
errorOn: parseCodeCsv(getReservedTag(logicalTable.tags, 'quereus.lens.policy.error-on')),
|
|
66
|
+
requireAck: parseCodeCsv(getReservedTag(logicalTable.tags, 'quereus.lens.policy.require-ack')),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parses a CSV of advisory codes into a set of **code bases** (empty when
|
|
71
|
+
* absent). Each entry is normalized through {@link advisoryCodeBase}, so a policy
|
|
72
|
+
* may name a code either fully (`lens.no-backing-index`) or bare
|
|
73
|
+
* (`no-backing-index`, mirroring the ack tag remainder) — both resolve to the
|
|
74
|
+
* same base the governance compares against. Without this, the bare form would
|
|
75
|
+
* silently no-op the escalation.
|
|
76
|
+
*/
|
|
77
|
+
function parseCodeCsv(value) {
|
|
78
|
+
const set = new Set();
|
|
79
|
+
if (!value)
|
|
80
|
+
return set;
|
|
81
|
+
for (const part of value.split(',')) {
|
|
82
|
+
const code = part.trim().toLowerCase();
|
|
83
|
+
if (code.length > 0)
|
|
84
|
+
set.add(advisoryCodeBase(code));
|
|
85
|
+
}
|
|
86
|
+
return set;
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Fingerprint
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
/**
|
|
92
|
+
* Computes the stable fingerprint of an advisory from the coarse facts behind it
|
|
93
|
+
* ({@link FingerprintInputs}) plus its code + site. Canonicalized (columns
|
|
94
|
+
* lowercased + sorted, cardinality already **banded** by the prover) so ordinary
|
|
95
|
+
* row-count drift within a band does not churn the hash — only a band crossing,
|
|
96
|
+
* a covering-structure change, or a constraint-column change moves it. The result
|
|
97
|
+
* is a short base64url FNV-1a digest, suitable for embedding in the ack tag value.
|
|
98
|
+
*
|
|
99
|
+
* **Cardinality bands** (`lens-prover.ts:cardinalityBand`): `empty` (0 rows),
|
|
100
|
+
* `small` (<1e3), `medium` (<1e6), `large` (≥1e6), `unknown` (no estimate). An
|
|
101
|
+
* ack survives any row-count change that stays within one band; crossing a band
|
|
102
|
+
* boundary re-surfaces it.
|
|
103
|
+
*/
|
|
104
|
+
export function computeAdvisoryFingerprint(code, site, inputs) {
|
|
105
|
+
const canonical = JSON.stringify({
|
|
106
|
+
code,
|
|
107
|
+
table: site.table.toLowerCase(),
|
|
108
|
+
constraint: site.constraint?.toLowerCase() ?? null,
|
|
109
|
+
column: site.column?.toLowerCase() ?? null,
|
|
110
|
+
cols: inputs?.constraintColumns
|
|
111
|
+
? [...inputs.constraintColumns].map(c => c.toLowerCase()).sort()
|
|
112
|
+
: null,
|
|
113
|
+
cover: inputs?.hasCoveringStructure ?? null,
|
|
114
|
+
band: inputs?.cardinalityBand ?? null,
|
|
115
|
+
basis: inputs?.basisRelation ?? null,
|
|
116
|
+
// Conditionally serialized: advisories carrying no domain (every code
|
|
117
|
+
// before `lens.getput-lossy`) keep their pre-existing hashes, while a
|
|
118
|
+
// CHECK `in (...)` list change moves a round-trip advisory's fingerprint
|
|
119
|
+
// and re-surfaces its acknowledgment.
|
|
120
|
+
...(inputs?.domainValues ? { domain: [...inputs.domainValues].sort() } : {}),
|
|
121
|
+
// Conditionally serialized (same as `domain`): only `lens.over-restrictive-basis-key`
|
|
122
|
+
// carries a governing basis key, so every other advisory keeps its existing hash. A
|
|
123
|
+
// basis-key change (tightened to match the logical key, or loosened) moves the hash
|
|
124
|
+
// and re-surfaces the acknowledgment.
|
|
125
|
+
...(inputs?.basisKeyColumns ? { basisKey: [...inputs.basisKeyColumns].map(c => c.toLowerCase()).sort() } : {}),
|
|
126
|
+
});
|
|
127
|
+
return toBase64Url(fnv1aHash(canonical)).slice(0, 12);
|
|
128
|
+
}
|
|
129
|
+
/** Splits an ack tag value into `{ rationale, recordedFingerprint }`. */
|
|
130
|
+
function parseAckValue(value) {
|
|
131
|
+
const m = FINGERPRINT_SUFFIX_RE.exec(value);
|
|
132
|
+
if (!m)
|
|
133
|
+
return { rationale: value.trim() };
|
|
134
|
+
return { rationale: value.slice(0, m.index).trim(), recordedFingerprint: m[1] };
|
|
135
|
+
}
|
|
136
|
+
/** Splits an ack template segment `<code>[:<target>]` into its parts. */
|
|
137
|
+
function splitAckSegment(segment) {
|
|
138
|
+
const colon = segment.indexOf(':');
|
|
139
|
+
if (colon < 0)
|
|
140
|
+
return { codeBase: segment.toLowerCase() };
|
|
141
|
+
return { codeBase: segment.slice(0, colon).toLowerCase(), target: segment.slice(colon + 1).toLowerCase() };
|
|
142
|
+
}
|
|
143
|
+
/** Collects every ack on the logical table's tags. */
|
|
144
|
+
function collectTableAcks(tags) {
|
|
145
|
+
return getReservedTagByTemplate(tags, ACK_TEMPLATE).map(inst => {
|
|
146
|
+
const { codeBase, target } = splitAckSegment(inst.segment);
|
|
147
|
+
const { rationale, recordedFingerprint } = parseAckValue(inst.value);
|
|
148
|
+
return { codeBase, target, rationale, recordedFingerprint, emptyRationale: rationale.length === 0, scope: 'table' };
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/** Collects every ack on one constraint's tags (scoped to that constraint's columns). */
|
|
152
|
+
function collectConstraintAcks(constraint, columnNames) {
|
|
153
|
+
if (constraint.kind === 'primaryKey')
|
|
154
|
+
return []; // a PK carries no tag surface
|
|
155
|
+
const tags = constraint.constraint.tags;
|
|
156
|
+
const cols = constraintColumns(constraint, columnNames);
|
|
157
|
+
return getReservedTagByTemplate(tags, ACK_TEMPLATE).map(inst => {
|
|
158
|
+
const { codeBase, target } = splitAckSegment(inst.segment);
|
|
159
|
+
const { rationale, recordedFingerprint } = parseAckValue(inst.value);
|
|
160
|
+
return {
|
|
161
|
+
codeBase, target, rationale, recordedFingerprint,
|
|
162
|
+
emptyRationale: rationale.length === 0, scope: 'constraint', constraintColumns: cols,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/** The lowercased column names a constraint covers (best-effort by kind). */
|
|
167
|
+
function constraintColumns(constraint, columnNames) {
|
|
168
|
+
const idx = (i) => (columnNames.get(i) ?? `#${i}`).toLowerCase();
|
|
169
|
+
switch (constraint.kind) {
|
|
170
|
+
case 'primaryKey': return constraint.columns.map(c => idx(c.index));
|
|
171
|
+
case 'unique': return constraint.constraint.columns.map(idx);
|
|
172
|
+
case 'foreignKey': return constraint.constraint.columns.map(idx);
|
|
173
|
+
case 'check': return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** Reads every ack on a slot (table tags + each constraint's tags). */
|
|
177
|
+
function collectAcks(slot) {
|
|
178
|
+
const columnNames = new Map();
|
|
179
|
+
slot.logicalTable.columns.forEach((c, i) => columnNames.set(i, c.name));
|
|
180
|
+
const acks = collectTableAcks(slot.logicalTable.tags);
|
|
181
|
+
for (const c of slot.attachedConstraints)
|
|
182
|
+
acks.push(...collectConstraintAcks(c, columnNames));
|
|
183
|
+
return acks;
|
|
184
|
+
}
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
// Matching
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
/** The advisory-code base an ack must name to suppress this advisory. */
|
|
189
|
+
function advisoryCodeBase(code) {
|
|
190
|
+
return code.startsWith(ADVISORY_CODE_PREFIX) ? code.slice(ADVISORY_CODE_PREFIX.length) : code;
|
|
191
|
+
}
|
|
192
|
+
/** Does `target` (an ack refinement) name this advisory's constraint / column / one of its columns? */
|
|
193
|
+
function targetMatches(target, advisory) {
|
|
194
|
+
const cols = advisory.fingerprintInputs?.constraintColumns ?? [];
|
|
195
|
+
return target === advisory.site.constraint?.toLowerCase()
|
|
196
|
+
|| target === advisory.site.column?.toLowerCase()
|
|
197
|
+
|| cols.some(c => c.toLowerCase() === target);
|
|
198
|
+
}
|
|
199
|
+
/** Do an ack's constraint columns (set) equal the advisory's constraint columns (set)? */
|
|
200
|
+
function constraintColumnsMatch(ackColumns, advisory) {
|
|
201
|
+
const advCols = advisory.fingerprintInputs?.constraintColumns;
|
|
202
|
+
if (!ackColumns || !advCols || ackColumns.length !== advCols.length)
|
|
203
|
+
return false;
|
|
204
|
+
const advSet = new Set(advCols.map(c => c.toLowerCase()));
|
|
205
|
+
return ackColumns.every(c => advSet.has(c.toLowerCase()));
|
|
206
|
+
}
|
|
207
|
+
/** Finds the ack (if any) that suppresses `advisory`. See § Coded + sited + targeted. */
|
|
208
|
+
function matchAck(advisory, acks) {
|
|
209
|
+
const base = advisoryCodeBase(advisory.code);
|
|
210
|
+
for (const ack of acks) {
|
|
211
|
+
if (ack.codeBase !== base)
|
|
212
|
+
continue;
|
|
213
|
+
if (ack.target !== undefined) {
|
|
214
|
+
if (targetMatches(ack.target, advisory))
|
|
215
|
+
return ack;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
// Untargeted: a table ack suppresses the class for that table; a
|
|
219
|
+
// constraint ack only its own constraint (matched by its column set).
|
|
220
|
+
if (ack.scope === 'table')
|
|
221
|
+
return ack;
|
|
222
|
+
if (constraintColumnsMatch(ack.constraintColumns, advisory))
|
|
223
|
+
return ack;
|
|
224
|
+
}
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
// Governance
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
/**
|
|
231
|
+
* The recognized escalation-policy code bases — every advisory code that can flow
|
|
232
|
+
* through governance, normalized through {@link advisoryCodeBase} so it compares
|
|
233
|
+
* against a policy's bare/`lens.`-prefixed forms exactly as the resolved policy set
|
|
234
|
+
* stores them. A policy entry whose base is absent here names no real advisory and
|
|
235
|
+
* would silently fail open, so {@link applyAckGovernance} rejects it.
|
|
236
|
+
*/
|
|
237
|
+
const RECOGNIZED_ADVISORY_BASES = new Set([...ACKNOWLEDGEABLE_ADVISORY_CODES].map(advisoryCodeBase));
|
|
238
|
+
/** The recognized advisory codes (full `lens.<base>` form), for diagnostics. */
|
|
239
|
+
const RECOGNIZED_ADVISORY_CODES_DISPLAY = [...ACKNOWLEDGEABLE_ADVISORY_CODES].join(', ');
|
|
240
|
+
/**
|
|
241
|
+
* Emits one error {@link LensDiagnostic} for each policy code that names no real
|
|
242
|
+
* advisory — a typo'd or stale escalation entry that would otherwise silently fail
|
|
243
|
+
* open (the deploy stays advisory while the author believes they hardened it). The
|
|
244
|
+
* resolved policy holds normalized bases; the full `lens.<base>` form is
|
|
245
|
+
* reconstructed for the message. Validated against the *vocabulary*, independent of
|
|
246
|
+
* whether any advisory currently fires (pre-empting a not-yet-triggered but
|
|
247
|
+
* recognized code is valid and must NOT error).
|
|
248
|
+
*/
|
|
249
|
+
function validatePolicyCodes(slot, policy) {
|
|
250
|
+
const errors = [];
|
|
251
|
+
const check = (bases, tag) => {
|
|
252
|
+
for (const base of bases) {
|
|
253
|
+
if (RECOGNIZED_ADVISORY_BASES.has(base))
|
|
254
|
+
continue;
|
|
255
|
+
errors.push(unknownPolicyCodeError(slot, tag, base));
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
check(policy.errorOn, 'error-on');
|
|
259
|
+
check(policy.requireAck, 'require-ack');
|
|
260
|
+
return errors;
|
|
261
|
+
}
|
|
262
|
+
/** The deploy-blocking diagnostic for an unrecognized escalation policy code. */
|
|
263
|
+
function unknownPolicyCodeError(slot, tag, base) {
|
|
264
|
+
const table = slot.logicalTable.name;
|
|
265
|
+
return {
|
|
266
|
+
code: 'lens.unknown-policy-code',
|
|
267
|
+
severity: 'error',
|
|
268
|
+
site: { table },
|
|
269
|
+
message: `lens: escalation policy tag 'quereus.lens.policy.${tag}' on '${table}' references unknown advisory code '${ADVISORY_CODE_PREFIX}${base}' — it will never match and the escalation silently does nothing; recognized codes: ${RECOGNIZED_ADVISORY_CODES_DISPLAY}`,
|
|
270
|
+
resurfaced: false,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Applies ack-suppression, fingerprint re-surfacing, and the escalation policy to
|
|
275
|
+
* one slot's prover warnings. Pure analysis — does not mutate the slot or report.
|
|
276
|
+
*
|
|
277
|
+
* First validates the policy codes against the advisory vocabulary
|
|
278
|
+
* ({@link validatePolicyCodes}) — an unrecognized code is a deploy-blocking error,
|
|
279
|
+
* never a silent no-op. Then, order per advisory:
|
|
280
|
+
* 1. **error-on** wins first — the code is a hard error regardless of any ack.
|
|
281
|
+
* 2. Otherwise match an ack. No ack ⇒ the advisory stays in the default report.
|
|
282
|
+
* 3. A matched ack with a recorded fingerprint that *mismatches* the freshly
|
|
283
|
+
* computed one ⇒ the advisory **re-surfaces** (flagged), counted as
|
|
284
|
+
* un-acknowledged. A matching (or first-sight, unconditional) fingerprint ⇒
|
|
285
|
+
* acknowledged + suppressed. An empty rationale additionally surfaces a
|
|
286
|
+
* meta-warning (the ack still suppresses).
|
|
287
|
+
* 4. **require-ack**: an advisory of a require-ack code that is not validly
|
|
288
|
+
* acknowledged (no ack, or re-surfaced) becomes a hard error.
|
|
289
|
+
*/
|
|
290
|
+
export function applyAckGovernance(slot, warnings, policy) {
|
|
291
|
+
const acks = collectAcks(slot);
|
|
292
|
+
const outWarnings = [];
|
|
293
|
+
const acknowledged = [];
|
|
294
|
+
// Up front: reject policy entries naming no real advisory code (a typo/stale
|
|
295
|
+
// code that would silently fail open). Validated against the vocabulary,
|
|
296
|
+
// independent of whether any advisory below actually fires.
|
|
297
|
+
const errors = validatePolicyCodes(slot, policy);
|
|
298
|
+
for (const w of warnings) {
|
|
299
|
+
const codeBase = advisoryCodeBase(w.code);
|
|
300
|
+
if (policy.errorOn.has(codeBase)) {
|
|
301
|
+
errors.push(escalationError(w, 'error-on'));
|
|
302
|
+
continue; // an ack cannot suppress an error-on code
|
|
303
|
+
}
|
|
304
|
+
const ack = matchAck(w, acks);
|
|
305
|
+
let validlyAcked = false;
|
|
306
|
+
if (ack) {
|
|
307
|
+
const currentFp = computeAdvisoryFingerprint(w.code, w.site, w.fingerprintInputs);
|
|
308
|
+
if (ack.emptyRationale)
|
|
309
|
+
outWarnings.push(emptyRationaleWarning(w));
|
|
310
|
+
if (ack.recordedFingerprint !== undefined && ack.recordedFingerprint !== currentFp) {
|
|
311
|
+
outWarnings.push(resurface(w, ack.recordedFingerprint, currentFp));
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
acknowledged.push({
|
|
315
|
+
code: w.code,
|
|
316
|
+
site: w.site,
|
|
317
|
+
message: w.message,
|
|
318
|
+
rationale: ack.rationale,
|
|
319
|
+
target: ack.target,
|
|
320
|
+
currentFingerprint: currentFp,
|
|
321
|
+
recordedFingerprint: ack.recordedFingerprint,
|
|
322
|
+
unconditional: ack.recordedFingerprint === undefined,
|
|
323
|
+
});
|
|
324
|
+
validlyAcked = true;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
outWarnings.push(w);
|
|
329
|
+
}
|
|
330
|
+
if (policy.requireAck.has(codeBase) && !validlyAcked) {
|
|
331
|
+
errors.push(escalationError(w, 'require-ack'));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return { warnings: outWarnings, acknowledged, errors };
|
|
335
|
+
}
|
|
336
|
+
/** Flags a re-surfaced advisory: kept in the report, message annotated. */
|
|
337
|
+
function resurface(w, recorded, current) {
|
|
338
|
+
return {
|
|
339
|
+
...w,
|
|
340
|
+
resurfaced: true,
|
|
341
|
+
message: `${w.message} [previously acknowledged; situation changed — recorded fingerprint '${recorded}' no longer matches '${current}'; re-acknowledge to suppress again]`,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
/** The meta-warning for an ack whose rationale is empty (docs/lens.md:211). */
|
|
345
|
+
function emptyRationaleWarning(w) {
|
|
346
|
+
return {
|
|
347
|
+
code: w.code,
|
|
348
|
+
severity: 'warning',
|
|
349
|
+
site: w.site,
|
|
350
|
+
message: `lens: acknowledgment of '${w.code}' on '${w.site.table}' has an empty rationale — every suppression should carry its justification (set the ack tag value to a non-empty reason)`,
|
|
351
|
+
resurfaced: false,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
/** Promotes an advisory to a blocking error under the named escalation policy. */
|
|
355
|
+
function escalationError(w, kind) {
|
|
356
|
+
const detail = kind === 'error-on'
|
|
357
|
+
? `escalated to a hard error by the 'error-on' policy (an ack cannot suppress it)`
|
|
358
|
+
: `un-acknowledged but required by the 'require-ack' policy (add a 'quereus.lens.ack.${advisoryCodeBase(w.code)}' tag with a rationale to clear it)`;
|
|
359
|
+
return { ...w, severity: 'error', message: `${w.message} [${detail}]` };
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=lens-ack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens-ack.js","sourceRoot":"","sources":["../../../src/schema/lens-ack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Database } from '../core/database.js';
|
|
2
|
+
import type { Schema } from './schema.js';
|
|
3
|
+
import type { SchemaManager } from './manager.js';
|
|
4
|
+
import { type TableSchema } from './table.js';
|
|
5
|
+
import type * as AST from '../parser/ast.js';
|
|
6
|
+
import { type LensDeployReport } from './lens-prover.js';
|
|
7
|
+
/**
|
|
8
|
+
* Lens compiler — the `apply schema X` step for a **logical** schema.
|
|
9
|
+
*
|
|
10
|
+
* For each declared logical table it: builds the logical spec, aligns it against
|
|
11
|
+
* the basis schema (the default name-based aligner), produces the inlined
|
|
12
|
+
* effective view body, populates the lens slot, and registers the body as an
|
|
13
|
+
* ordinary `ViewSchema`. The query processor then sees a view; reads ride the
|
|
14
|
+
* standard view-resolution path and writes ride view-updateability.
|
|
15
|
+
*
|
|
16
|
+
* v1 is **single-source, name-based** (see `docs/lens.md` § The Default Mapper):
|
|
17
|
+
* a logical table maps to a name-matching basis table, and each logical column
|
|
18
|
+
* to a name-matching basis column. Type/nullability conformance and the n-way
|
|
19
|
+
* decomposition shape are deferred to the prover / decomposition tickets.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Deploys (or re-deploys) a logical schema's lens slots + compiled view bodies.
|
|
23
|
+
*
|
|
24
|
+
* Re-deploy semantics are **clear-and-rebuild**: every existing lens view + slot
|
|
25
|
+
* in the logical schema is dropped, then rebuilt from the current declaration.
|
|
26
|
+
* This is how asymmetric removal falls out for free — a logical table dropped
|
|
27
|
+
* from the declaration is simply not rebuilt (its view + slot vanish), and the
|
|
28
|
+
* basis is never touched (logical removals never cascade to basis storage; see
|
|
29
|
+
* `docs/lens.md` § Deployment).
|
|
30
|
+
*/
|
|
31
|
+
export declare function deployLogicalSchema(db: Database, declaredSchema: AST.DeclareSchemaStmt, logicalSchemaName: string): LensDeployReport;
|
|
32
|
+
/**
|
|
33
|
+
* Rejects every physical construct under a logical declared schema, naming the
|
|
34
|
+
* offending construct and the logical-schema context. Tags are allowed (they
|
|
35
|
+
* are engine-facing and survive into the compiled view).
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateLogicalDeclaration(declaredSchema: AST.DeclareSchemaStmt, logicalSchemaName: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Infers the default basis for a logical schema (MVP binding — there is no
|
|
40
|
+
* `declare lens for X over Y` yet). The basis is the single registered
|
|
41
|
+
* **physical** schema that contains ≥1 table, excluding the logical schema
|
|
42
|
+
* itself and `temp`. See `docs/lens.md` § Default-basis inference.
|
|
43
|
+
*/
|
|
44
|
+
export declare function inferDefaultBasis(schemaManager: SchemaManager, logicalSchemaName: string): {
|
|
45
|
+
schema: Schema;
|
|
46
|
+
schemaName: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* The default name-based aligner: produces `select <logical columns> from B.T'`
|
|
50
|
+
* for one logical table `L.T` over basis schema `B`.
|
|
51
|
+
*
|
|
52
|
+
* - The basis table is matched by name (case-insensitive).
|
|
53
|
+
* - Each logical column is matched to a basis column by name (case-insensitive).
|
|
54
|
+
* - The projection lists exactly the logical columns, in declaration order, so
|
|
55
|
+
* a basis table with extra columns is correctly projected down.
|
|
56
|
+
*
|
|
57
|
+
* The empty-key (singleton) case needs no special path: a `primary key ()`
|
|
58
|
+
* logical table over a `primary key ()` basis table is an ordinary single-source
|
|
59
|
+
* projection.
|
|
60
|
+
*/
|
|
61
|
+
export declare function compileDefaultBody(logicalTable: TableSchema, logicalSchemaName: string, basisSchema: Schema, basisSchemaName: string): AST.SelectStmt;
|
|
62
|
+
//# sourceMappingURL=lens-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens-compiler.d.ts","sourceRoot":"","sources":["../../../src/schema/lens-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAS7C,OAAO,EAAoC,KAAK,gBAAgB,EAAkD,MAAM,kBAAkB,CAAC;AAU3I;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAClC,EAAE,EAAE,QAAQ,EACZ,cAAc,EAAE,GAAG,CAAC,iBAAiB,EACrC,iBAAiB,EAAE,MAAM,GACvB,gBAAgB,CA+NlB;AAqSD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,cAAc,EAAE,GAAG,CAAC,iBAAiB,EACrC,iBAAiB,EAAE,MAAM,GACvB,IAAI,CA+BN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,MAAM,GACvB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAyBxC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CACjC,YAAY,EAAE,WAAW,EACzB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACrB,GAAG,CAAC,UAAU,CAuChB"}
|