mongo-query-normalizer 0.1.0 → 0.2.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 +369 -39
- package/README.zh-CN.md +363 -44
- package/dist/ast/types.d.ts +4 -0
- package/dist/ast/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/normalize-context.d.ts +5 -1
- package/dist/normalize-context.d.ts.map +1 -1
- package/dist/normalize-context.js +3 -0
- package/dist/normalize-context.js.map +1 -1
- package/dist/normalize.d.ts +1 -1
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +105 -52
- package/dist/normalize.js.map +1 -1
- package/dist/options/constants.d.ts.map +1 -1
- package/dist/options/constants.js +7 -16
- package/dist/options/constants.js.map +1 -1
- package/dist/options/resolve.d.ts.map +1 -1
- package/dist/options/resolve.js +32 -1
- package/dist/options/resolve.js.map +1 -1
- package/dist/options/types.d.ts +1 -1
- package/dist/options/types.d.ts.map +1 -1
- package/dist/passes/normalize-predicate.d.ts.map +1 -1
- package/dist/passes/normalize-predicate.js +93 -14
- package/dist/passes/normalize-predicate.js.map +1 -1
- package/dist/predicate/analysis/detect-array-sensitive.d.ts +3 -0
- package/dist/predicate/analysis/detect-array-sensitive.d.ts.map +1 -0
- package/dist/predicate/analysis/detect-array-sensitive.js +33 -0
- package/dist/predicate/analysis/detect-array-sensitive.js.map +1 -0
- package/dist/predicate/analysis/detect-null-sensitive.d.ts +3 -0
- package/dist/predicate/analysis/detect-null-sensitive.d.ts.map +1 -0
- package/dist/predicate/analysis/detect-null-sensitive.js +24 -0
- package/dist/predicate/analysis/detect-null-sensitive.js.map +1 -0
- package/dist/predicate/analysis/detect-opaque-mix.d.ts +3 -0
- package/dist/predicate/analysis/detect-opaque-mix.d.ts.map +1 -0
- package/dist/predicate/analysis/detect-opaque-mix.js +9 -0
- package/dist/predicate/analysis/detect-opaque-mix.js.map +1 -0
- package/dist/predicate/analysis/detect-path-conflict-risk.d.ts +3 -0
- package/dist/predicate/analysis/detect-path-conflict-risk.d.ts.map +1 -0
- package/dist/predicate/analysis/detect-path-conflict-risk.js +14 -0
- package/dist/predicate/analysis/detect-path-conflict-risk.js.map +1 -0
- package/dist/predicate/analysis/merge-range-bounds.d.ts +27 -0
- package/dist/predicate/analysis/merge-range-bounds.d.ts.map +1 -0
- package/dist/predicate/analysis/merge-range-bounds.js +150 -0
- package/dist/predicate/analysis/merge-range-bounds.js.map +1 -0
- package/dist/predicate/capabilities/eq/eq-eq.d.ts +3 -0
- package/dist/predicate/capabilities/eq/eq-eq.d.ts.map +1 -0
- package/dist/predicate/capabilities/eq/eq-eq.js +53 -0
- package/dist/predicate/capabilities/eq/eq-eq.js.map +1 -0
- package/dist/predicate/capabilities/eq/eq-in.d.ts +3 -0
- package/dist/predicate/capabilities/eq/eq-in.d.ts.map +1 -0
- package/dist/predicate/capabilities/eq/eq-in.js +117 -0
- package/dist/predicate/capabilities/eq/eq-in.js.map +1 -0
- package/dist/predicate/capabilities/eq/eq-ne.d.ts +3 -0
- package/dist/predicate/capabilities/eq/eq-ne.d.ts.map +1 -0
- package/dist/predicate/capabilities/eq/eq-ne.js +37 -0
- package/dist/predicate/capabilities/eq/eq-ne.js.map +1 -0
- package/dist/predicate/capabilities/eq/eq-range.d.ts +3 -0
- package/dist/predicate/capabilities/eq/eq-range.d.ts.map +1 -0
- package/dist/predicate/capabilities/eq/eq-range.js +138 -0
- package/dist/predicate/capabilities/eq/eq-range.js.map +1 -0
- package/dist/predicate/capabilities/range/range-range.d.ts +3 -0
- package/dist/predicate/capabilities/range/range-range.d.ts.map +1 -0
- package/dist/predicate/capabilities/range/range-range.js +154 -0
- package/dist/predicate/capabilities/range/range-range.js.map +1 -0
- package/dist/predicate/capabilities/shared/capability-types.d.ts +11 -0
- package/dist/predicate/capabilities/shared/capability-types.d.ts.map +1 -0
- package/dist/predicate/capabilities/shared/capability-types.js +3 -0
- package/dist/predicate/capabilities/shared/capability-types.js.map +1 -0
- package/dist/predicate/capabilities/shared/relation-context.d.ts +13 -0
- package/dist/predicate/capabilities/shared/relation-context.d.ts.map +1 -0
- package/dist/predicate/capabilities/shared/relation-context.js +3 -0
- package/dist/predicate/capabilities/shared/relation-context.js.map +1 -0
- package/dist/predicate/capabilities/shared/relation-result.d.ts +12 -0
- package/dist/predicate/capabilities/shared/relation-result.d.ts.map +1 -0
- package/dist/predicate/capabilities/shared/relation-result.js +14 -0
- package/dist/predicate/capabilities/shared/relation-result.js.map +1 -0
- package/dist/predicate/index.d.ts +12 -0
- package/dist/predicate/index.d.ts.map +1 -0
- package/dist/predicate/index.js +22 -0
- package/dist/predicate/index.js.map +1 -0
- package/dist/predicate/ir/build-field-bundle.d.ts +7 -0
- package/dist/predicate/ir/build-field-bundle.d.ts.map +1 -0
- package/dist/predicate/ir/build-field-bundle.js +88 -0
- package/dist/predicate/ir/build-field-bundle.js.map +1 -0
- package/dist/predicate/ir/compile-field-bundle.d.ts +4 -0
- package/dist/predicate/ir/compile-field-bundle.d.ts.map +1 -0
- package/dist/predicate/ir/compile-field-bundle.js +57 -0
- package/dist/predicate/ir/compile-field-bundle.js.map +1 -0
- package/dist/predicate/ir/dedupe-atoms.d.ts +6 -0
- package/dist/predicate/ir/dedupe-atoms.d.ts.map +1 -0
- package/dist/predicate/ir/dedupe-atoms.js +42 -0
- package/dist/predicate/ir/dedupe-atoms.js.map +1 -0
- package/dist/predicate/ir/field-predicate-bundle.d.ts +16 -0
- package/dist/predicate/ir/field-predicate-bundle.d.ts.map +1 -0
- package/dist/predicate/ir/field-predicate-bundle.js +3 -0
- package/dist/predicate/ir/field-predicate-bundle.js.map +1 -0
- package/dist/predicate/ir/predicate-atom.d.ts +33 -0
- package/dist/predicate/ir/predicate-atom.d.ts.map +1 -0
- package/dist/predicate/ir/predicate-atom.js +3 -0
- package/dist/predicate/ir/predicate-atom.js.map +1 -0
- package/dist/predicate/local-normalize-result.d.ts +17 -0
- package/dist/predicate/local-normalize-result.d.ts.map +1 -0
- package/dist/predicate/local-normalize-result.js +3 -0
- package/dist/predicate/local-normalize-result.js.map +1 -0
- package/dist/predicate/meta/collect-predicate-meta.d.ts +16 -0
- package/dist/predicate/meta/collect-predicate-meta.d.ts.map +1 -0
- package/dist/predicate/meta/collect-predicate-meta.js +13 -0
- package/dist/predicate/meta/collect-predicate-meta.js.map +1 -0
- package/dist/predicate/normalize-field-predicate-bundle.d.ts +18 -0
- package/dist/predicate/normalize-field-predicate-bundle.d.ts.map +1 -0
- package/dist/predicate/normalize-field-predicate-bundle.js +126 -0
- package/dist/predicate/normalize-field-predicate-bundle.js.map +1 -0
- package/dist/predicate/normalize-predicate.d.ts +5 -0
- package/dist/predicate/normalize-predicate.d.ts.map +1 -0
- package/dist/predicate/normalize-predicate.js +10 -0
- package/dist/predicate/normalize-predicate.js.map +1 -0
- package/dist/predicate/planner/capability-selector.d.ts +8 -0
- package/dist/predicate/planner/capability-selector.d.ts.map +1 -0
- package/dist/predicate/planner/capability-selector.js +23 -0
- package/dist/predicate/planner/capability-selector.js.map +1 -0
- package/dist/predicate/planner/relation-plan.d.ts +10 -0
- package/dist/predicate/planner/relation-plan.d.ts.map +1 -0
- package/dist/predicate/planner/relation-plan.js +3 -0
- package/dist/predicate/planner/relation-plan.js.map +1 -0
- package/dist/predicate/planner/relation-planner.d.ts +5 -0
- package/dist/predicate/planner/relation-planner.d.ts.map +1 -0
- package/dist/predicate/planner/relation-planner.js +62 -0
- package/dist/predicate/planner/relation-planner.js.map +1 -0
- package/dist/predicate/registry/predicate-capability-registry.d.ts +3 -0
- package/dist/predicate/registry/predicate-capability-registry.d.ts.map +1 -0
- package/dist/predicate/registry/predicate-capability-registry.js +19 -0
- package/dist/predicate/registry/predicate-capability-registry.js.map +1 -0
- package/dist/predicate/safety/predicate-safety-policy.d.ts +9 -0
- package/dist/predicate/safety/predicate-safety-policy.d.ts.map +1 -0
- package/dist/predicate/safety/predicate-safety-policy.js +11 -0
- package/dist/predicate/safety/predicate-safety-policy.js.map +1 -0
- package/dist/predicate/utils/bson-compare.d.ts +2 -0
- package/dist/predicate/utils/bson-compare.d.ts.map +1 -0
- package/dist/predicate/utils/bson-compare.js +7 -0
- package/dist/predicate/utils/bson-compare.js.map +1 -0
- package/dist/predicate/utils/intersect-in-lists.d.ts +5 -0
- package/dist/predicate/utils/intersect-in-lists.d.ts.map +1 -0
- package/dist/predicate/utils/intersect-in-lists.js +15 -0
- package/dist/predicate/utils/intersect-in-lists.js.map +1 -0
- package/dist/predicate/utils/set-ops.d.ts +3 -0
- package/dist/predicate/utils/set-ops.d.ts.map +1 -0
- package/dist/predicate/utils/set-ops.js +18 -0
- package/dist/predicate/utils/set-ops.js.map +1 -0
- package/dist/predicate/utils/value-equality.d.ts +2 -0
- package/dist/predicate/utils/value-equality.d.ts.map +1 -0
- package/dist/predicate/utils/value-equality.js +8 -0
- package/dist/predicate/utils/value-equality.js.map +1 -0
- package/dist/rules/or-common-predicate/detect-common-predicates-in-or.d.ts +6 -0
- package/dist/rules/or-common-predicate/detect-common-predicates-in-or.d.ts.map +1 -0
- package/dist/rules/or-common-predicate/detect-common-predicates-in-or.js +83 -0
- package/dist/rules/or-common-predicate/detect-common-predicates-in-or.js.map +1 -0
- package/dist/rules/shape/collapse-single-child-logical.js +1 -1
- package/dist/rules/shape/collapse-single-child-logical.js.map +1 -1
- package/dist/rules/shape/dedupe-logical-children.js +1 -1
- package/dist/rules/shape/dedupe-logical-children.js.map +1 -1
- package/dist/rules/shape/flatten-logical.js +2 -2
- package/dist/rules/shape/flatten-logical.js.map +1 -1
- package/dist/rules/shape/remove-empty-logical.js +2 -2
- package/dist/rules/shape/remove-empty-logical.js.map +1 -1
- package/dist/scope/analysis/analyze-branch-coverage.d.ts +5 -0
- package/dist/scope/analysis/analyze-branch-coverage.d.ts.map +1 -0
- package/dist/scope/analysis/analyze-branch-coverage.js +8 -0
- package/dist/scope/analysis/analyze-branch-coverage.js.map +1 -0
- package/dist/scope/analysis/analyze-branch-satisfiability.d.ts +9 -0
- package/dist/scope/analysis/analyze-branch-satisfiability.d.ts.map +1 -0
- package/dist/scope/analysis/analyze-branch-satisfiability.js +33 -0
- package/dist/scope/analysis/analyze-branch-satisfiability.js.map +1 -0
- package/dist/scope/context/build-inherited-constraints.d.ts +6 -0
- package/dist/scope/context/build-inherited-constraints.d.ts.map +1 -0
- package/dist/scope/context/build-inherited-constraints.js +119 -0
- package/dist/scope/context/build-inherited-constraints.js.map +1 -0
- package/dist/scope/context/constraint-set.d.ts +19 -0
- package/dist/scope/context/constraint-set.d.ts.map +1 -0
- package/dist/scope/context/constraint-set.js +26 -0
- package/dist/scope/context/constraint-set.js.map +1 -0
- package/dist/scope/context/merge-constraint-sources.d.ts +4 -0
- package/dist/scope/context/merge-constraint-sources.d.ts.map +1 -0
- package/dist/scope/context/merge-constraint-sources.js +28 -0
- package/dist/scope/context/merge-constraint-sources.js.map +1 -0
- package/dist/scope/index.d.ts +8 -0
- package/dist/scope/index.d.ts.map +1 -0
- package/dist/scope/index.js +19 -0
- package/dist/scope/index.js.map +1 -0
- package/dist/scope/meta/collect-scope-meta.d.ts +5 -0
- package/dist/scope/meta/collect-scope-meta.d.ts.map +1 -0
- package/dist/scope/meta/collect-scope-meta.js +7 -0
- package/dist/scope/meta/collect-scope-meta.js.map +1 -0
- package/dist/scope/normalize-scope.d.ts +4 -0
- package/dist/scope/normalize-scope.d.ts.map +1 -0
- package/dist/scope/normalize-scope.js +149 -0
- package/dist/scope/normalize-scope.js.map +1 -0
- package/dist/scope/planner/scope-plan.d.ts +6 -0
- package/dist/scope/planner/scope-plan.d.ts.map +1 -0
- package/dist/scope/planner/scope-plan.js +9 -0
- package/dist/scope/planner/scope-plan.js.map +1 -0
- package/dist/scope/planner/scope-rewrite-planner.d.ts +4 -0
- package/dist/scope/planner/scope-rewrite-planner.d.ts.map +1 -0
- package/dist/scope/planner/scope-rewrite-planner.js +8 -0
- package/dist/scope/planner/scope-rewrite-planner.js.map +1 -0
- package/dist/scope/propagation/create-branch-local-bundle.d.ts +5 -0
- package/dist/scope/propagation/create-branch-local-bundle.d.ts.map +1 -0
- package/dist/scope/propagation/create-branch-local-bundle.js +16 -0
- package/dist/scope/propagation/create-branch-local-bundle.js.map +1 -0
- package/dist/scope/propagation/propagate-constraints-to-children.d.ts +6 -0
- package/dist/scope/propagation/propagate-constraints-to-children.d.ts.map +1 -0
- package/dist/scope/propagation/propagate-constraints-to-children.js +9 -0
- package/dist/scope/propagation/propagate-constraints-to-children.js.map +1 -0
- package/dist/scope/rewrite/collapse-single-branch.d.ts +5 -0
- package/dist/scope/rewrite/collapse-single-branch.d.ts.map +1 -0
- package/dist/scope/rewrite/collapse-single-branch.js +28 -0
- package/dist/scope/rewrite/collapse-single-branch.js.map +1 -0
- package/dist/scope/rewrite/prune-impossible-branches.d.ts +6 -0
- package/dist/scope/rewrite/prune-impossible-branches.d.ts.map +1 -0
- package/dist/scope/rewrite/prune-impossible-branches.js +32 -0
- package/dist/scope/rewrite/prune-impossible-branches.js.map +1 -0
- package/dist/scope/rewrite/remove-covered-local-constraints.d.ts +6 -0
- package/dist/scope/rewrite/remove-covered-local-constraints.d.ts.map +1 -0
- package/dist/scope/rewrite/remove-covered-local-constraints.js +76 -0
- package/dist/scope/rewrite/remove-covered-local-constraints.js.map +1 -0
- package/dist/scope/safety/scope-safety-policy.d.ts +10 -0
- package/dist/scope/safety/scope-safety-policy.d.ts.map +1 -0
- package/dist/scope/safety/scope-safety-policy.js +12 -0
- package/dist/scope/safety/scope-safety-policy.js.map +1 -0
- package/dist/types.d.ts +70 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -4
package/dist/normalize.js
CHANGED
|
@@ -5,21 +5,20 @@ const hash_1 = require("./ast/hash");
|
|
|
5
5
|
const compile_1 = require("./compile/compile");
|
|
6
6
|
const normalize_context_1 = require("./normalize-context");
|
|
7
7
|
const metrics_1 = require("./observe/metrics");
|
|
8
|
-
const
|
|
8
|
+
const warnings_1 = require("./observe/warnings");
|
|
9
9
|
const resolve_1 = require("./options/resolve");
|
|
10
10
|
const canonicalize_1 = require("./passes/canonicalize");
|
|
11
11
|
const normalize_predicate_1 = require("./passes/normalize-predicate");
|
|
12
12
|
const normalize_shape_1 = require("./passes/normalize-shape");
|
|
13
13
|
const simplify_1 = require("./passes/simplify");
|
|
14
|
+
const normalize_scope_1 = require("./scope/normalize-scope");
|
|
14
15
|
const parse_1 = require("./parse/parse");
|
|
15
|
-
const
|
|
16
|
-
const detect_common_predicates_in_or_1 = require("./rules/logical/detect-common-predicates-in-or");
|
|
16
|
+
const detect_common_predicates_in_or_1 = require("./rules/or-common-predicate/detect-common-predicates-in-or");
|
|
17
17
|
/**
|
|
18
|
-
* 主入口:parse →(shape / predicate
|
|
18
|
+
* 主入口:parse →(shape / predicate / scope 直至稳定)→(scope 下可选 observe-only 的 detectCommonPredicatesInOr)→ canonicalize → compile。
|
|
19
19
|
*/
|
|
20
20
|
function normalizeQuery(query, options) {
|
|
21
21
|
const normalizeContext = (0, normalize_context_1.createNormalizeContext)((0, resolve_1.resolveNormalizeOptions)(options));
|
|
22
|
-
(0, level_boundary_hints_1.applyPreviewLevelBoundaryHints)(normalizeContext);
|
|
23
22
|
const beforeNode = (0, parse_1.parseQuery)(query, normalizeContext);
|
|
24
23
|
recordBeforeObservation(normalizeContext, beforeNode);
|
|
25
24
|
let workingNode = beforeNode;
|
|
@@ -42,53 +41,97 @@ function recordAfterObservation(normalizeContext, node) {
|
|
|
42
41
|
normalizeContext.afterHash = (0, hash_1.hashNode)(node);
|
|
43
42
|
}
|
|
44
43
|
const MAX_NORMALIZE_STABLE_ROUNDS = 8;
|
|
45
|
-
function
|
|
46
|
-
let
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
normalizeContext.options.level === "experimental";
|
|
50
|
-
for (let o = 0; o < MAX_NORMALIZE_STABLE_ROUNDS; o++) {
|
|
51
|
-
const outerStart = (0, hash_1.hashNode)(node);
|
|
44
|
+
function runStabilizationPhases(node, normalizeContext, root, shouldRunPredicate, shouldRunScope, emitInnerNonConvergeWarnings) {
|
|
45
|
+
let n = node;
|
|
46
|
+
{
|
|
47
|
+
let shapeConverged = false;
|
|
52
48
|
for (let r = 0; r < MAX_NORMALIZE_STABLE_ROUNDS; r++) {
|
|
53
|
-
const beforeRound = (0, hash_1.hashNode)(
|
|
54
|
-
|
|
49
|
+
const beforeRound = (0, hash_1.hashNode)(n);
|
|
50
|
+
n = (0, normalize_shape_1.normalizeShape)(n, normalizeContext);
|
|
55
51
|
if (normalizeContext.bailedOut) {
|
|
56
52
|
return root;
|
|
57
53
|
}
|
|
58
|
-
if ((0, hash_1.hashNode)(
|
|
54
|
+
if ((0, hash_1.hashNode)(n) === beforeRound) {
|
|
55
|
+
shapeConverged = true;
|
|
59
56
|
break;
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
59
|
+
if (!shapeConverged && emitInnerNonConvergeWarnings) {
|
|
60
|
+
(0, warnings_1.addWarning)(normalizeContext, `[mongo-query-normalizer] shape normalization did not reach a fixed point within ${MAX_NORMALIZE_STABLE_ROUNDS} internal rounds`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (shouldRunPredicate) {
|
|
64
|
+
let predicateConverged = false;
|
|
65
|
+
for (let r = 0; r < MAX_NORMALIZE_STABLE_ROUNDS; r++) {
|
|
66
|
+
const beforeRound = (0, hash_1.hashNode)(n);
|
|
67
|
+
n = (0, normalize_predicate_1.normalizePredicate)(n, normalizeContext);
|
|
68
|
+
if (normalizeContext.bailedOut) {
|
|
69
|
+
return root;
|
|
70
|
+
}
|
|
71
|
+
n = (0, simplify_1.simplify)(n, normalizeContext);
|
|
72
|
+
if (normalizeContext.bailedOut) {
|
|
73
|
+
return root;
|
|
74
|
+
}
|
|
75
|
+
if ((0, hash_1.hashNode)(n) === beforeRound) {
|
|
76
|
+
predicateConverged = true;
|
|
77
|
+
break;
|
|
76
78
|
}
|
|
77
79
|
}
|
|
80
|
+
if (!predicateConverged && emitInnerNonConvergeWarnings) {
|
|
81
|
+
(0, warnings_1.addWarning)(normalizeContext, `[mongo-query-normalizer] predicate normalization (with simplify) did not reach a fixed point within ${MAX_NORMALIZE_STABLE_ROUNDS} internal rounds`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (shouldRunScope) {
|
|
85
|
+
let scopeConverged = false;
|
|
86
|
+
for (let r = 0; r < MAX_NORMALIZE_STABLE_ROUNDS; r++) {
|
|
87
|
+
const beforeRound = (0, hash_1.hashNode)(n);
|
|
88
|
+
n = (0, normalize_scope_1.normalizeScope)(n, normalizeContext);
|
|
89
|
+
if (normalizeContext.bailedOut) {
|
|
90
|
+
return root;
|
|
91
|
+
}
|
|
92
|
+
n = (0, simplify_1.simplify)(n, normalizeContext);
|
|
93
|
+
if (normalizeContext.bailedOut) {
|
|
94
|
+
return root;
|
|
95
|
+
}
|
|
96
|
+
if ((0, hash_1.hashNode)(n) === beforeRound) {
|
|
97
|
+
scopeConverged = true;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!scopeConverged && emitInnerNonConvergeWarnings) {
|
|
102
|
+
(0, warnings_1.addWarning)(normalizeContext, `[mongo-query-normalizer] scope normalization (with simplify) did not reach a fixed point within ${MAX_NORMALIZE_STABLE_ROUNDS} internal rounds`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return (0, canonicalize_1.canonicalize)(n, normalizeContext);
|
|
106
|
+
}
|
|
107
|
+
function runNormalizePipeline(root, normalizeContext) {
|
|
108
|
+
let node = root;
|
|
109
|
+
const shouldRunPredicate = normalizeContext.options.level === "predicate" || normalizeContext.options.level === "scope";
|
|
110
|
+
const shouldRunScope = normalizeContext.options.level === "scope";
|
|
111
|
+
let outerReachedFixedPoint = false;
|
|
112
|
+
for (let o = 0; o < MAX_NORMALIZE_STABLE_ROUNDS; o++) {
|
|
113
|
+
const outerStart = (0, hash_1.hashNode)(node);
|
|
114
|
+
node = runStabilizationPhases(node, normalizeContext, root, shouldRunPredicate, shouldRunScope, true);
|
|
115
|
+
if (normalizeContext.bailedOut) {
|
|
116
|
+
return root;
|
|
117
|
+
}
|
|
78
118
|
if ((0, hash_1.hashNode)(node) === outerStart) {
|
|
119
|
+
outerReachedFixedPoint = true;
|
|
79
120
|
break;
|
|
80
121
|
}
|
|
81
122
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
123
|
+
if (!outerReachedFixedPoint && !normalizeContext.bailedOut) {
|
|
124
|
+
(0, warnings_1.addWarning)(normalizeContext, `[mongo-query-normalizer] normalize pipeline did not reach an outer fixed point within ${MAX_NORMALIZE_STABLE_ROUNDS} outer rounds`);
|
|
125
|
+
}
|
|
126
|
+
if (!normalizeContext.bailedOut) {
|
|
127
|
+
node = (0, parse_1.parseQuery)((0, compile_1.compileQuery)(node, normalizeContext), normalizeContext);
|
|
128
|
+
node = runStabilizationPhases(node, normalizeContext, root, shouldRunPredicate, shouldRunScope, false);
|
|
85
129
|
if (normalizeContext.bailedOut) {
|
|
86
130
|
return root;
|
|
87
131
|
}
|
|
88
132
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
node = (0, hoist_common_predicates_from_or_1.hoistCommonPredicatesFromOr)(node, normalizeContext);
|
|
133
|
+
if (normalizeContext.options.level === "scope" && normalizeContext.options.rules.detectCommonPredicatesInOr) {
|
|
134
|
+
node = (0, detect_common_predicates_in_or_1.detectCommonPredicatesInOr)(node, normalizeContext);
|
|
92
135
|
if (normalizeContext.bailedOut) {
|
|
93
136
|
return root;
|
|
94
137
|
}
|
|
@@ -98,25 +141,35 @@ function runNormalizePipeline(root, normalizeContext) {
|
|
|
98
141
|
}
|
|
99
142
|
function buildNormalizeResult(_originalQuery, finalQuery, _beforeNode, _afterNode, normalizeContext) {
|
|
100
143
|
const changed = normalizeContext.beforeHash !== normalizeContext.afterHash;
|
|
144
|
+
const meta = {
|
|
145
|
+
changed,
|
|
146
|
+
level: normalizeContext.options.level,
|
|
147
|
+
appliedRules: normalizeContext.appliedRules,
|
|
148
|
+
skippedRules: normalizeContext.skippedRules,
|
|
149
|
+
warnings: normalizeContext.warnings,
|
|
150
|
+
bailedOut: normalizeContext.bailedOut,
|
|
151
|
+
bailoutReason: normalizeContext.bailoutReason,
|
|
152
|
+
beforeHash: normalizeContext.beforeHash,
|
|
153
|
+
afterHash: normalizeContext.afterHash,
|
|
154
|
+
stats: normalizeContext.options.observe.collectMetrics && normalizeContext.beforeStats && normalizeContext.afterStats
|
|
155
|
+
? {
|
|
156
|
+
before: normalizeContext.beforeStats,
|
|
157
|
+
after: normalizeContext.afterStats,
|
|
158
|
+
}
|
|
159
|
+
: undefined,
|
|
160
|
+
};
|
|
161
|
+
if (normalizeContext.options.observe.collectPredicateTraces) {
|
|
162
|
+
meta.predicateTraces = [...(normalizeContext.predicateTraces ?? [])];
|
|
163
|
+
}
|
|
164
|
+
if (normalizeContext.options.observe.collectScopeTraces) {
|
|
165
|
+
meta.scopeTrace = {
|
|
166
|
+
constraintRejections: [...(normalizeContext.scopeConstraintRejections ?? [])],
|
|
167
|
+
events: [...(normalizeContext.scopeTraceEvents ?? [])],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
101
170
|
return {
|
|
102
171
|
query: finalQuery,
|
|
103
|
-
meta
|
|
104
|
-
changed,
|
|
105
|
-
level: normalizeContext.options.level,
|
|
106
|
-
appliedRules: normalizeContext.appliedRules,
|
|
107
|
-
skippedRules: normalizeContext.skippedRules,
|
|
108
|
-
warnings: normalizeContext.warnings,
|
|
109
|
-
bailedOut: normalizeContext.bailedOut,
|
|
110
|
-
bailoutReason: normalizeContext.bailoutReason,
|
|
111
|
-
beforeHash: normalizeContext.beforeHash,
|
|
112
|
-
afterHash: normalizeContext.afterHash,
|
|
113
|
-
stats: normalizeContext.options.observe.collectMetrics && normalizeContext.beforeStats && normalizeContext.afterStats
|
|
114
|
-
? {
|
|
115
|
-
before: normalizeContext.beforeStats,
|
|
116
|
-
after: normalizeContext.afterStats,
|
|
117
|
-
}
|
|
118
|
-
: undefined,
|
|
119
|
-
},
|
|
172
|
+
meta,
|
|
120
173
|
};
|
|
121
174
|
}
|
|
122
175
|
//# sourceMappingURL=normalize.js.map
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/options/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAElG,eAAO,MAAM,aAAa,EAAE,cAAwB,CAAC;AAErD,eAAO,MAAM,cAAc,EAAE,eAG5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/options/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAElG,eAAO,MAAM,aAAa,EAAE,cAAwB,CAAC;AAErD,eAAO,MAAM,cAAc,EAAE,eAG5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,gBAK7B,CAAC;AA+DF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,CAIzE,CAAC"}
|
|
@@ -9,6 +9,8 @@ exports.DEFAULT_SAFETY = {
|
|
|
9
9
|
exports.DEFAULT_OBSERVE = {
|
|
10
10
|
collectWarnings: true,
|
|
11
11
|
collectMetrics: false,
|
|
12
|
+
collectPredicateTraces: false,
|
|
13
|
+
collectScopeTraces: false,
|
|
12
14
|
};
|
|
13
15
|
const SORT_RULES = {
|
|
14
16
|
sortLogicalChildren: true,
|
|
@@ -25,12 +27,10 @@ const PREDICATE_RULES = {
|
|
|
25
27
|
mergeComparablePredicates: true,
|
|
26
28
|
collapseContradictions: true,
|
|
27
29
|
};
|
|
28
|
-
|
|
30
|
+
/** Default extra rules when `level` is `scope` (includes `$or` common-predicate detection). */
|
|
31
|
+
const SCOPE_LEVEL_EXTRA = {
|
|
29
32
|
detectCommonPredicatesInOr: true,
|
|
30
33
|
};
|
|
31
|
-
const EXPERIMENTAL_EXTRA = {
|
|
32
|
-
hoistCommonPredicatesFromOr: true,
|
|
33
|
-
};
|
|
34
34
|
function rulesForLevel(level) {
|
|
35
35
|
const base = {
|
|
36
36
|
...BASE_SHAPE_RULES,
|
|
@@ -39,7 +39,6 @@ function rulesForLevel(level) {
|
|
|
39
39
|
collapseContradictions: false,
|
|
40
40
|
...SORT_RULES,
|
|
41
41
|
detectCommonPredicatesInOr: false,
|
|
42
|
-
hoistCommonPredicatesFromOr: false,
|
|
43
42
|
};
|
|
44
43
|
if (level === "shape") {
|
|
45
44
|
return base;
|
|
@@ -51,22 +50,14 @@ function rulesForLevel(level) {
|
|
|
51
50
|
if (level === "predicate") {
|
|
52
51
|
return withPredicate;
|
|
53
52
|
}
|
|
54
|
-
const withLogical = {
|
|
55
|
-
...withPredicate,
|
|
56
|
-
...LOGICAL_EXTRA,
|
|
57
|
-
};
|
|
58
|
-
if (level === "logical") {
|
|
59
|
-
return withLogical;
|
|
60
|
-
}
|
|
61
53
|
return {
|
|
62
|
-
...
|
|
63
|
-
...
|
|
54
|
+
...withPredicate,
|
|
55
|
+
...SCOPE_LEVEL_EXTRA,
|
|
64
56
|
};
|
|
65
57
|
}
|
|
66
58
|
exports.DEFAULT_RULES_BY_LEVEL = {
|
|
67
59
|
shape: rulesForLevel("shape"),
|
|
68
60
|
predicate: rulesForLevel("predicate"),
|
|
69
|
-
|
|
70
|
-
experimental: rulesForLevel("experimental"),
|
|
61
|
+
scope: rulesForLevel("scope"),
|
|
71
62
|
};
|
|
72
63
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/options/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAmB,OAAO,CAAC;AAExC,QAAA,cAAc,GAAoB;IAC3C,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,GAAG;CAC1B,CAAC;AAEW,QAAA,eAAe,GAAqB;IAC7C,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/options/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAmB,OAAO,CAAC;AAExC,QAAA,cAAc,GAAoB;IAC3C,iBAAiB,EAAE,EAAE;IACrB,kBAAkB,EAAE,GAAG;CAC1B,CAAC;AAEW,QAAA,eAAe,GAAqB;IAC7C,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;IAC7B,kBAAkB,EAAE,KAAK;CAC5B,CAAC;AAEF,MAAM,UAAU,GAAwE;IACpF,mBAAmB,EAAE,IAAI;IACzB,mBAAmB,EAAE,IAAI;CAC5B,CAAC;AAEF,MAAM,gBAAgB,GAMlB;IACA,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,IAAI;IACxB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,IAAI;CAC9B,CAAC;AAEF,MAAM,eAAe,GAGjB;IACA,yBAAyB,EAAE,IAAI;IAC/B,yBAAyB,EAAE,IAAI;IAC/B,sBAAsB,EAAE,IAAI;CAC/B,CAAC;AAEF,+FAA+F;AAC/F,MAAM,iBAAiB,GAAuD;IAC1E,0BAA0B,EAAE,IAAI;CACnC,CAAC;AAEF,SAAS,aAAa,CAAC,KAAqB;IACxC,MAAM,IAAI,GAAmB;QACzB,GAAG,gBAAgB;QACnB,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,KAAK;QAChC,sBAAsB,EAAE,KAAK;QAC7B,GAAG,UAAU;QACb,0BAA0B,EAAE,KAAK;KACpC,CAAC;IAEF,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,aAAa,GAAmB;QAClC,GAAG,IAAI;QACP,GAAG,eAAe;KACrB,CAAC;IAEF,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,OAAO;QACH,GAAG,aAAa;QAChB,GAAG,iBAAiB;KACvB,CAAC;AACN,CAAC;AAEY,QAAA,sBAAsB,GAA2C;IAC1E,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7B,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC;IACrC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;CAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/options/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/options/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAiC3F,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,wBAAwB,CAe5F"}
|
package/dist/options/resolve.js
CHANGED
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveNormalizeOptions = resolveNormalizeOptions;
|
|
4
|
+
const predicate_safety_policy_1 = require("../predicate/safety/predicate-safety-policy");
|
|
5
|
+
const scope_safety_policy_1 = require("../scope/safety/scope-safety-policy");
|
|
4
6
|
const constants_1 = require("./constants");
|
|
7
|
+
function mergePredicateSafetyPolicy(partial) {
|
|
8
|
+
return {
|
|
9
|
+
...predicate_safety_policy_1.DEFAULT_PREDICATE_SAFETY_POLICY,
|
|
10
|
+
...(partial ?? {}),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function mergeScopeSafetyPolicy(partial) {
|
|
14
|
+
const merged = { ...scope_safety_policy_1.DEFAULT_SCOPE_SAFETY_POLICY };
|
|
15
|
+
if (!partial) {
|
|
16
|
+
return merged;
|
|
17
|
+
}
|
|
18
|
+
for (const key of Object.keys(scope_safety_policy_1.DEFAULT_SCOPE_SAFETY_POLICY)) {
|
|
19
|
+
if (Object.prototype.hasOwnProperty.call(partial, key)) {
|
|
20
|
+
merged[key] = partial[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return merged;
|
|
24
|
+
}
|
|
5
25
|
function resolveNormalizeOptions(options) {
|
|
6
26
|
const level = resolveLevel(options?.level);
|
|
7
27
|
return {
|
|
@@ -9,10 +29,21 @@ function resolveNormalizeOptions(options) {
|
|
|
9
29
|
rules: mergeRules(level, options?.rules),
|
|
10
30
|
safety: mergeSafety(options?.safety),
|
|
11
31
|
observe: mergeObserve(options?.observe),
|
|
32
|
+
predicate: {
|
|
33
|
+
safetyPolicy: mergePredicateSafetyPolicy(options?.predicate?.safetyPolicy),
|
|
34
|
+
},
|
|
35
|
+
scope: {
|
|
36
|
+
safetyPolicy: mergeScopeSafetyPolicy(options?.scope?.safetyPolicy),
|
|
37
|
+
},
|
|
12
38
|
};
|
|
13
39
|
}
|
|
14
40
|
function resolveLevel(level) {
|
|
15
|
-
|
|
41
|
+
const resolved = level ?? constants_1.DEFAULT_LEVEL;
|
|
42
|
+
if (Object.prototype.hasOwnProperty.call(constants_1.DEFAULT_RULES_BY_LEVEL, resolved)) {
|
|
43
|
+
return resolved;
|
|
44
|
+
}
|
|
45
|
+
const allowed = Object.keys(constants_1.DEFAULT_RULES_BY_LEVEL).join(", ");
|
|
46
|
+
throw new Error(`[mongo-query-normalizer] invalid normalize level: ${JSON.stringify(level)}. Expected one of: ${allowed}.`);
|
|
16
47
|
}
|
|
17
48
|
function mergeRules(level, rules) {
|
|
18
49
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/options/resolve.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/options/resolve.ts"],"names":[],"mappings":";;AAiCA,0DAeC;AA/CD,yFAGqD;AACrD,6EAA0G;AAC1G,2CAKqB;AAErB,SAAS,0BAA0B,CAAC,OAAwC;IACxE,OAAO;QACH,GAAG,yDAA+B;QAClC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACrB,CAAC;AACN,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAoC;IAChE,MAAM,MAAM,GAAsB,EAAE,GAAG,iDAA2B,EAAE,CAAC;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,iDAA2B,CAAgC,EAAE,CAAC;QACxF,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAE,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAgB,uBAAuB,CAAC,OAA0B;IAC9D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C,OAAO;QACH,KAAK;QACL,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;QACxC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;QACpC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;QACvC,SAAS,EAAE;YACP,YAAY,EAAE,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC;SAC7E;QACD,KAAK,EAAE;YACH,YAAY,EAAE,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC;SACrE;KACJ,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,KAAiC;IACnD,MAAM,QAAQ,GAAG,KAAK,IAAI,yBAAa,CAAC;IACxC,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,kCAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,kCAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,IAAI,KAAK,CACX,qDAAqD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,OAAO,GAAG,CAC7G,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,KAAqB,EAAE,KAAkD;IACzF,OAAO;QACH,GAAG,kCAAsB,CAAC,KAAK,CAAC;QAChC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;KACnB,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,MAAoD;IACrE,OAAO;QACH,GAAG,0BAAc;QACjB,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;KACpB,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,OAAsD;IACxE,OAAO;QACH,GAAG,2BAAe;QAClB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACrB,CAAC;AACN,CAAC"}
|
package/dist/options/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { NormalizeLevel, NormalizeObserve, NormalizeOptions, NormalizeResult, NormalizeRules, NormalizeSafety, NormalizeStats, ResolvedNormalizeOptions, } from "../types";
|
|
1
|
+
export type { NormalizeLevel, NormalizeObserve, NormalizeOptions, NormalizePredicateOptions, NormalizeResult, NormalizeRules, NormalizeSafety, NormalizeStats, NormalizeScopeLayerOptions, PredicateFieldTrace, ResolvedNormalizeOptions, ScopeNormalizationTrace, ScopeTraceEvent, } from "../types";
|
|
2
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,wBAAwB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,GAClB,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-predicate.d.ts","sourceRoot":"","sources":["../../src/passes/normalize-predicate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize-predicate.d.ts","sourceRoot":"","sources":["../../src/passes/normalize-predicate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA6B,SAAS,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAS7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAEjG"}
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizePredicate = normalizePredicate;
|
|
4
4
|
const builders_1 = require("../ast/builders");
|
|
5
|
+
const hash_1 = require("../ast/hash");
|
|
5
6
|
const guards_1 = require("../ast/guards");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const warnings_1 = require("../observe/warnings");
|
|
8
|
+
const build_field_bundle_1 = require("../predicate/ir/build-field-bundle");
|
|
9
|
+
const normalize_field_predicate_bundle_1 = require("../predicate/normalize-field-predicate-bundle");
|
|
9
10
|
function normalizePredicate(node, normalizeContext) {
|
|
10
11
|
return normalizePredicateRecursive(node, normalizeContext);
|
|
11
12
|
}
|
|
@@ -20,9 +21,6 @@ function normalizePredicateRecursive(node, normalizeContext) {
|
|
|
20
21
|
}
|
|
21
22
|
return node;
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
-
* 同一 `$and` 层上合并同名字段子句,再跑谓词规则(可检出 `{ $and: [{ a: 1 }, { a: 2 }] }` 等矛盾)。
|
|
25
|
-
*/
|
|
26
24
|
function mergeAndSiblingFieldNodesUnderAnd(children, normalizeContext) {
|
|
27
25
|
const byField = new Map();
|
|
28
26
|
const rest = [];
|
|
@@ -41,17 +39,98 @@ function mergeAndSiblingFieldNodesUnderAnd(children, normalizeContext) {
|
|
|
41
39
|
}
|
|
42
40
|
return [...rest, ...merged];
|
|
43
41
|
}
|
|
42
|
+
const RULE_DEDUPE = "predicate.dedupeSameFieldPredicates";
|
|
43
|
+
const RULE_MERGE = "predicate.mergeComparablePredicates";
|
|
44
|
+
const RULE_COLLAPSE = "predicate.collapseContradictions";
|
|
45
|
+
const MERGE_CAPABILITY_IDS = ["eq.eq", "eq.in", "eq.range", "range.range"];
|
|
46
|
+
function fieldPredicatesUnchanged(a, b) {
|
|
47
|
+
if (a.length !== b.length) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return a.every((p, i) => (0, hash_1.hashPredicate)(p) === (0, hash_1.hashPredicate)(b[i]));
|
|
51
|
+
}
|
|
44
52
|
function applyPredicateRulesToField(node, normalizeContext) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
const rules = normalizeContext.options.rules;
|
|
54
|
+
const runAny = rules.dedupeSameFieldPredicates || rules.mergeComparablePredicates || rules.collapseContradictions;
|
|
55
|
+
if (!runAny) {
|
|
56
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_DEDUPE, "predicate rules disabled");
|
|
57
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_MERGE, "predicate rules disabled");
|
|
58
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_COLLAPSE, "predicate rules disabled");
|
|
59
|
+
return node;
|
|
60
|
+
}
|
|
61
|
+
const bundle = (0, build_field_bundle_1.buildFieldPredicateBundleFromFieldNode)(node);
|
|
62
|
+
const local = (0, normalize_field_predicate_bundle_1.normalizeFieldPredicateBundle)(bundle, {
|
|
63
|
+
safety: normalizeContext.options.predicate.safetyPolicy,
|
|
64
|
+
engine: {
|
|
65
|
+
dedupeAtoms: rules.dedupeSameFieldPredicates,
|
|
66
|
+
mergeComparable: rules.mergeComparablePredicates,
|
|
67
|
+
collapseContradictions: rules.collapseContradictions,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const out = (0, normalize_field_predicate_bundle_1.compileLocalNormalizeResultToAst)(local);
|
|
71
|
+
if (normalizeContext.options.observe.collectPredicateTraces) {
|
|
72
|
+
const trace = {
|
|
73
|
+
field: node.field,
|
|
74
|
+
atomKinds: local.atomKinds,
|
|
75
|
+
appliedCapabilityIds: [...local.appliedCapabilities],
|
|
76
|
+
skippedCapabilities: local.skippedCapabilities.map((s) => ({
|
|
77
|
+
id: s.id,
|
|
78
|
+
reason: s.reason,
|
|
79
|
+
})),
|
|
80
|
+
contradiction: local.contradiction,
|
|
81
|
+
contradictionCapabilityId: local.contradiction ? local.contradictionCapabilityId : undefined,
|
|
82
|
+
hadCoverage: local.coveredAtoms.length > 0,
|
|
83
|
+
coverageAtomCount: local.coveredAtoms.length,
|
|
84
|
+
hadTighten: local.changed && !local.contradiction,
|
|
85
|
+
impossibleEmitted: local.contradiction,
|
|
86
|
+
};
|
|
87
|
+
if (!normalizeContext.predicateTraces) {
|
|
88
|
+
normalizeContext.predicateTraces = [];
|
|
89
|
+
}
|
|
90
|
+
normalizeContext.predicateTraces.push(trace);
|
|
91
|
+
}
|
|
92
|
+
if (rules.dedupeSameFieldPredicates) {
|
|
93
|
+
if (local.atomDedupeChanged) {
|
|
94
|
+
(0, warnings_1.markRuleApplied)(normalizeContext, RULE_DEDUPE);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_DEDUPE, "no duplicate predicates");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_DEDUPE, "rule disabled");
|
|
102
|
+
}
|
|
103
|
+
if (rules.mergeComparablePredicates) {
|
|
104
|
+
const mergeTouched = local.appliedCapabilities.some((id) => MERGE_CAPABILITY_IDS.includes(id));
|
|
105
|
+
if (mergeTouched) {
|
|
106
|
+
(0, warnings_1.markRuleApplied)(normalizeContext, RULE_MERGE);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_MERGE, "no comparable predicate merge applied");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_MERGE, "rule disabled");
|
|
114
|
+
}
|
|
115
|
+
if (rules.collapseContradictions) {
|
|
116
|
+
const collapseContradictionCaps = ["eq.ne", "eq.in"];
|
|
117
|
+
const collapseHit = local.appliedCapabilities.includes("eq.ne") ||
|
|
118
|
+
(local.contradiction &&
|
|
119
|
+
local.contradictionCapabilityId !== undefined &&
|
|
120
|
+
collapseContradictionCaps.includes(local.contradictionCapabilityId));
|
|
121
|
+
if (collapseHit) {
|
|
122
|
+
(0, warnings_1.markRuleApplied)(normalizeContext, RULE_COLLAPSE);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_COLLAPSE, "no explicit contradiction");
|
|
126
|
+
}
|
|
48
127
|
}
|
|
49
|
-
|
|
50
|
-
|
|
128
|
+
else {
|
|
129
|
+
(0, warnings_1.markRuleSkipped)(normalizeContext, RULE_COLLAPSE, "rule disabled");
|
|
51
130
|
}
|
|
52
|
-
if ((0, guards_1.isFieldNode)(
|
|
53
|
-
|
|
131
|
+
if ((0, guards_1.isFieldNode)(out) && out.field === node.field && fieldPredicatesUnchanged(out.predicates, node.predicates)) {
|
|
132
|
+
return node;
|
|
54
133
|
}
|
|
55
|
-
return
|
|
134
|
+
return out;
|
|
56
135
|
}
|
|
57
136
|
//# sourceMappingURL=normalize-predicate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-predicate.js","sourceRoot":"","sources":["../../src/passes/normalize-predicate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"normalize-predicate.js","sourceRoot":"","sources":["../../src/passes/normalize-predicate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-array-sensitive.d.ts","sourceRoot":"","sources":["../../../src/predicate/analysis/detect-array-sensitive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AA0BzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAOnF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectArraySensitiveSemantics = detectArraySensitiveSemantics;
|
|
4
|
+
function valueLooksArraySensitive(value) {
|
|
5
|
+
if (value === null || value === undefined) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === "object") {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
function atomIsArraySensitive(atom) {
|
|
17
|
+
if (atom.kind === "nin") {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (atom.kind === "in") {
|
|
21
|
+
return atom.values.some(valueLooksArraySensitive);
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
function detectArraySensitiveSemantics(bundle) {
|
|
26
|
+
for (const atom of bundle.predicates) {
|
|
27
|
+
if (atomIsArraySensitive(atom)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=detect-array-sensitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-array-sensitive.js","sourceRoot":"","sources":["../../../src/predicate/analysis/detect-array-sensitive.ts"],"names":[],"mappings":";;AA0BA,sEAOC;AA9BD,SAAS,wBAAwB,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAmB;IAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAA4B;IACtE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-null-sensitive.d.ts","sourceRoot":"","sources":["../../../src/predicate/analysis/detect-null-sensitive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAiBzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAOlF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectNullSensitiveSemantics = detectNullSensitiveSemantics;
|
|
4
|
+
function containsNull(value) {
|
|
5
|
+
return value === null;
|
|
6
|
+
}
|
|
7
|
+
function atomHasNullSemantics(atom) {
|
|
8
|
+
if (atom.kind === "eq" || atom.kind === "ne") {
|
|
9
|
+
return containsNull(atom.value);
|
|
10
|
+
}
|
|
11
|
+
if (atom.kind === "in" || atom.kind === "nin") {
|
|
12
|
+
return atom.values.some(containsNull);
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
function detectNullSensitiveSemantics(bundle) {
|
|
17
|
+
for (const atom of bundle.predicates) {
|
|
18
|
+
if (atomHasNullSemantics(atom)) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=detect-null-sensitive.js.map
|