mongo-query-normalizer 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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/ne/ne-ne.d.ts +3 -0
- package/dist/predicate/capabilities/ne/ne-ne.d.ts.map +1 -0
- package/dist/predicate/capabilities/ne/ne-ne.js +44 -0
- package/dist/predicate/capabilities/ne/ne-ne.js.map +1 -0
- package/dist/predicate/capabilities/nin/nin-nin.d.ts +3 -0
- package/dist/predicate/capabilities/nin/nin-nin.d.ts.map +1 -0
- package/dist/predicate/capabilities/nin/nin-nin.js +45 -0
- package/dist/predicate/capabilities/nin/nin-nin.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 +23 -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
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QueryNode } from "../../ast/types";
|
|
2
|
+
import type { ScopeTraceEvent } from "../../types";
|
|
3
|
+
import type { ConstraintSet } from "../context/constraint-set";
|
|
4
|
+
import type { ScopeSafetyPolicy } from "../safety/scope-safety-policy";
|
|
5
|
+
export declare function pruneImpossibleOrBranch(branch: QueryNode, inherited: ConstraintSet, policy: ScopeSafetyPolicy, onTrace?: (event: ScopeTraceEvent) => void): QueryNode | null;
|
|
6
|
+
//# sourceMappingURL=prune-impossible-branches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune-impossible-branches.d.ts","sourceRoot":"","sources":["../../../src/scope/rewrite/prune-impossible-branches.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAC3C,SAAS,GAAG,IAAI,CAyBlB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pruneImpossibleOrBranch = pruneImpossibleOrBranch;
|
|
4
|
+
const builders_1 = require("../../ast/builders");
|
|
5
|
+
const analyze_branch_satisfiability_1 = require("../analysis/analyze-branch-satisfiability");
|
|
6
|
+
function pruneImpossibleOrBranch(branch, inherited, policy, onTrace) {
|
|
7
|
+
if (!policy.allowBranchPruning || !policy.allowOrPropagation) {
|
|
8
|
+
onTrace?.({
|
|
9
|
+
type: "prune-branch",
|
|
10
|
+
outcome: "skipped-by-policy",
|
|
11
|
+
detail: "branch pruning or $or propagation disabled by scope safety policy",
|
|
12
|
+
});
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const explained = (0, analyze_branch_satisfiability_1.explainBranchSatisfiability)(branch, inherited, policy);
|
|
16
|
+
onTrace?.({
|
|
17
|
+
type: "or-branch-inherited",
|
|
18
|
+
satisfiabilityCheck: "ran",
|
|
19
|
+
satisfiable: explained.satisfiable,
|
|
20
|
+
detail: explained.reason,
|
|
21
|
+
});
|
|
22
|
+
if (!explained.satisfiable) {
|
|
23
|
+
onTrace?.({
|
|
24
|
+
type: "prune-branch",
|
|
25
|
+
outcome: "pruned-to-false",
|
|
26
|
+
detail: explained.reason,
|
|
27
|
+
});
|
|
28
|
+
return (0, builders_1.falseNode)();
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=prune-impossible-branches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune-impossible-branches.js","sourceRoot":"","sources":["../../../src/scope/rewrite/prune-impossible-branches.ts"],"names":[],"mappings":";;AAOA,0DA8BC;AArCD,iDAA+C;AAK/C,6FAAwF;AAExF,SAAgB,uBAAuB,CACnC,MAAiB,EACjB,SAAwB,EACxB,MAAyB,EACzB,OAA0C;IAE1C,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC3D,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,mBAAmB;YAC5B,MAAM,EAAE,mEAAmE;SAC9E,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,SAAS,GAAG,IAAA,2DAA2B,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC;QACN,IAAI,EAAE,qBAAqB;QAC3B,mBAAmB,EAAE,KAAK;QAC1B,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,MAAM,EAAE,SAAS,CAAC,MAAM;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;SAC3B,CAAC,CAAC;QACH,OAAO,IAAA,oBAAS,GAAE,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QueryNode } from "../../ast/types";
|
|
2
|
+
import type { ScopeTraceEvent } from "../../types";
|
|
3
|
+
import type { ConstraintSet } from "../context/constraint-set";
|
|
4
|
+
import type { ScopeSafetyPolicy } from "../safety/scope-safety-policy";
|
|
5
|
+
export declare function removeCoveredLocalConstraints(branch: QueryNode, inherited: ConstraintSet, policy: ScopeSafetyPolicy, onTrace?: (event: ScopeTraceEvent) => void): QueryNode;
|
|
6
|
+
//# sourceMappingURL=remove-covered-local-constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-covered-local-constraints.d.ts","sourceRoot":"","sources":["../../../src/scope/rewrite/remove-covered-local-constraints.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAavE,wBAAgB,6BAA6B,CACzC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAC3C,SAAS,CA8DX"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.removeCoveredLocalConstraints = removeCoveredLocalConstraints;
|
|
4
|
+
const builders_1 = require("../../ast/builders");
|
|
5
|
+
const guards_1 = require("../../ast/guards");
|
|
6
|
+
const value_equality_1 = require("../../predicate/utils/value-equality");
|
|
7
|
+
function isSingleEqField(node) {
|
|
8
|
+
if (node.predicates.length !== 1) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const p = node.predicates[0];
|
|
12
|
+
if (p.op === "$eq" || (!p.opaque && p.op === "$eq")) {
|
|
13
|
+
return { value: p.value };
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function removeCoveredLocalConstraints(branch, inherited, policy, onTrace) {
|
|
18
|
+
if (!policy.allowConstraintCoverageElimination) {
|
|
19
|
+
onTrace?.({
|
|
20
|
+
type: "coverage-removal",
|
|
21
|
+
outcome: "unchanged",
|
|
22
|
+
detail: "coverage elimination disabled by scope safety policy",
|
|
23
|
+
});
|
|
24
|
+
return branch;
|
|
25
|
+
}
|
|
26
|
+
if (policy.bailoutOnUnsupportedScopeMix && inherited.metadata.hasUnsupportedSemantics) {
|
|
27
|
+
onTrace?.({
|
|
28
|
+
type: "coverage-removal",
|
|
29
|
+
outcome: "unchanged",
|
|
30
|
+
detail: "preserve: inherited constraints flagged unsupported for scope mix bailout",
|
|
31
|
+
});
|
|
32
|
+
return branch;
|
|
33
|
+
}
|
|
34
|
+
if (!(0, guards_1.isFieldNode)(branch)) {
|
|
35
|
+
onTrace?.({
|
|
36
|
+
type: "coverage-removal",
|
|
37
|
+
outcome: "unchanged",
|
|
38
|
+
detail: "not a field leaf; no single-field coverage strip",
|
|
39
|
+
});
|
|
40
|
+
return branch;
|
|
41
|
+
}
|
|
42
|
+
const inheritedAtoms = inherited.byField.get(branch.field) ?? [];
|
|
43
|
+
const eqInherited = inheritedAtoms.find((a) => a.kind === "eq");
|
|
44
|
+
if (!eqInherited || eqInherited.kind !== "eq") {
|
|
45
|
+
onTrace?.({
|
|
46
|
+
type: "coverage-removal",
|
|
47
|
+
outcome: "unchanged",
|
|
48
|
+
detail: "no inherited eq constraint on this field",
|
|
49
|
+
});
|
|
50
|
+
return branch;
|
|
51
|
+
}
|
|
52
|
+
const localEq = isSingleEqField(branch);
|
|
53
|
+
if (!localEq) {
|
|
54
|
+
onTrace?.({
|
|
55
|
+
type: "coverage-removal",
|
|
56
|
+
outcome: "unchanged",
|
|
57
|
+
detail: "local field is not a single $eq; conservative preserve",
|
|
58
|
+
});
|
|
59
|
+
return branch;
|
|
60
|
+
}
|
|
61
|
+
if (!(0, value_equality_1.valuesEqual)(eqInherited.value, localEq.value)) {
|
|
62
|
+
onTrace?.({
|
|
63
|
+
type: "coverage-removal",
|
|
64
|
+
outcome: "unchanged",
|
|
65
|
+
detail: "local $eq differs from inherited $eq",
|
|
66
|
+
});
|
|
67
|
+
return branch;
|
|
68
|
+
}
|
|
69
|
+
onTrace?.({
|
|
70
|
+
type: "coverage-removal",
|
|
71
|
+
outcome: "replaced-with-true",
|
|
72
|
+
detail: "local $eq redundant with inherited $eq on same field",
|
|
73
|
+
});
|
|
74
|
+
return (0, builders_1.trueNode)();
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=remove-covered-local-constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-covered-local-constraints.js","sourceRoot":"","sources":["../../../src/scope/rewrite/remove-covered-local-constraints.ts"],"names":[],"mappings":";;AAmBA,sEAmEC;AAtFD,iDAA8C;AAC9C,6CAA+C;AAG/C,yEAAmE;AAInE,SAAS,eAAe,CAAC,IAAe;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,6BAA6B,CACzC,MAAiB,EACjB,SAAwB,EACxB,MAAyB,EACzB,OAA0C;IAE1C,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,sDAAsD;SACjE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,4BAA4B,IAAI,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACpF,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,2EAA2E;SACtF,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,IAAA,oBAAW,EAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,kDAAkD;SAC7D,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,0CAA0C;SACrD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,wDAAwD;SACnE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAA,4BAAW,EAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;YACN,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,sCAAsC;SACjD,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;QACN,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,oBAAoB;QAC7B,MAAM,EAAE,sDAAsD;KACjE,CAAC,CAAC;IACH,OAAO,IAAA,mBAAQ,GAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ScopeSafetyPolicy = {
|
|
2
|
+
allowBranchPruning: boolean;
|
|
3
|
+
allowConstraintCoverageElimination: boolean;
|
|
4
|
+
allowSingleBranchCollapse: boolean;
|
|
5
|
+
allowOrPropagation: boolean;
|
|
6
|
+
allowAndPropagation: boolean;
|
|
7
|
+
bailoutOnUnsupportedScopeMix: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_SCOPE_SAFETY_POLICY: ScopeSafetyPolicy;
|
|
10
|
+
//# sourceMappingURL=scope-safety-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-safety-policy.d.ts","sourceRoot":"","sources":["../../../src/scope/safety/scope-safety-policy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kCAAkC,EAAE,OAAO,CAAC;IAC5C,yBAAyB,EAAE,OAAO,CAAC;IACnC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4BAA4B,EAAE,OAAO,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,iBAOzC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SCOPE_SAFETY_POLICY = void 0;
|
|
4
|
+
exports.DEFAULT_SCOPE_SAFETY_POLICY = {
|
|
5
|
+
allowBranchPruning: true,
|
|
6
|
+
allowConstraintCoverageElimination: true,
|
|
7
|
+
allowSingleBranchCollapse: true,
|
|
8
|
+
allowOrPropagation: true,
|
|
9
|
+
allowAndPropagation: true,
|
|
10
|
+
bailoutOnUnsupportedScopeMix: true,
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=scope-safety-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-safety-policy.js","sourceRoot":"","sources":["../../../src/scope/safety/scope-safety-policy.ts"],"names":[],"mappings":";;;AASa,QAAA,2BAA2B,GAAsB;IAC1D,kBAAkB,EAAE,IAAI;IACxB,kCAAkC,EAAE,IAAI;IACxC,yBAAyB,EAAE,IAAI;IAC/B,kBAAkB,EAAE,IAAI;IACxB,mBAAmB,EAAE,IAAI;IACzB,4BAA4B,EAAE,IAAI;CACrC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import type { PredicateSafetyPolicy } from "./predicate/safety/predicate-safety-policy";
|
|
2
|
+
import type { ScopeSafetyPolicy } from "./scope/safety/scope-safety-policy";
|
|
3
|
+
import type { ConstraintExtractionRejection } from "./scope/context/constraint-set";
|
|
1
4
|
/**
|
|
2
5
|
* MongoDB 查询对象(规范化入口的输入/输出形状)
|
|
3
6
|
*/
|
|
4
7
|
export type Query = Record<string, unknown>;
|
|
5
|
-
export type NormalizeLevel = "shape" | "predicate" | "
|
|
8
|
+
export type NormalizeLevel = "shape" | "predicate" | "scope";
|
|
6
9
|
export interface NormalizeRules {
|
|
7
10
|
flattenLogical: boolean;
|
|
8
11
|
removeEmptyLogical: boolean;
|
|
@@ -14,7 +17,6 @@ export interface NormalizeRules {
|
|
|
14
17
|
sortLogicalChildren: boolean;
|
|
15
18
|
sortFieldPredicates: boolean;
|
|
16
19
|
detectCommonPredicatesInOr: boolean;
|
|
17
|
-
hoistCommonPredicatesFromOr: boolean;
|
|
18
20
|
}
|
|
19
21
|
export interface NormalizeSafety {
|
|
20
22
|
maxNormalizeDepth: number;
|
|
@@ -23,18 +25,36 @@ export interface NormalizeSafety {
|
|
|
23
25
|
export interface NormalizeObserve {
|
|
24
26
|
collectWarnings: boolean;
|
|
25
27
|
collectMetrics: boolean;
|
|
28
|
+
/** When true, `meta.predicateTraces` lists per-field planner and skip signals. */
|
|
29
|
+
collectPredicateTraces: boolean;
|
|
30
|
+
/** When true, `meta.scopeTrace` records propagation / prune / coverage decisions. */
|
|
31
|
+
collectScopeTraces: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface NormalizePredicateOptions {
|
|
34
|
+
safetyPolicy: PredicateSafetyPolicy;
|
|
35
|
+
}
|
|
36
|
+
export interface NormalizeScopeLayerOptions {
|
|
37
|
+
safetyPolicy: ScopeSafetyPolicy;
|
|
26
38
|
}
|
|
27
39
|
export interface NormalizeOptions {
|
|
28
40
|
level?: NormalizeLevel;
|
|
29
41
|
rules?: Partial<NormalizeRules>;
|
|
30
42
|
safety?: Partial<NormalizeSafety>;
|
|
31
43
|
observe?: Partial<NormalizeObserve>;
|
|
44
|
+
predicate?: {
|
|
45
|
+
safetyPolicy?: Partial<PredicateSafetyPolicy>;
|
|
46
|
+
};
|
|
47
|
+
scope?: {
|
|
48
|
+
safetyPolicy?: Partial<ScopeSafetyPolicy>;
|
|
49
|
+
};
|
|
32
50
|
}
|
|
33
51
|
export interface ResolvedNormalizeOptions {
|
|
34
52
|
level: NormalizeLevel;
|
|
35
53
|
rules: NormalizeRules;
|
|
36
54
|
safety: NormalizeSafety;
|
|
37
55
|
observe: NormalizeObserve;
|
|
56
|
+
predicate: NormalizePredicateOptions;
|
|
57
|
+
scope: NormalizeScopeLayerOptions;
|
|
38
58
|
}
|
|
39
59
|
export interface NodeStats {
|
|
40
60
|
nodeCount: number;
|
|
@@ -44,6 +64,51 @@ export interface NodeStats {
|
|
|
44
64
|
}
|
|
45
65
|
/** 对外名称:`meta.stats` 中 before/after 的树统计。 */
|
|
46
66
|
export type NormalizeStats = NodeStats;
|
|
67
|
+
export type PredicateCapabilitySkipTrace = {
|
|
68
|
+
id: string;
|
|
69
|
+
reason: string;
|
|
70
|
+
};
|
|
71
|
+
export type PredicateFieldTrace = {
|
|
72
|
+
field: string;
|
|
73
|
+
atomKinds: string[];
|
|
74
|
+
appliedCapabilityIds: string[];
|
|
75
|
+
skippedCapabilities: PredicateCapabilitySkipTrace[];
|
|
76
|
+
contradiction: boolean;
|
|
77
|
+
/** When set, identifies the capability that first reported local contradiction. */
|
|
78
|
+
contradictionCapabilityId?: string;
|
|
79
|
+
hadCoverage: boolean;
|
|
80
|
+
/** Number of predicate atoms removed as redundant (same round). */
|
|
81
|
+
coverageAtomCount: number;
|
|
82
|
+
hadTighten: boolean;
|
|
83
|
+
/** True when this field normalized to an unsatisfiable selector (FalseNode → IMPOSSIBLE_SELECTOR). */
|
|
84
|
+
impossibleEmitted: boolean;
|
|
85
|
+
};
|
|
86
|
+
export type ScopeTraceEvent = {
|
|
87
|
+
type: "or-branch-inherited";
|
|
88
|
+
satisfiabilityCheck: "skipped" | "ran";
|
|
89
|
+
satisfiable?: boolean;
|
|
90
|
+
detail: string;
|
|
91
|
+
} | {
|
|
92
|
+
type: "prune-branch";
|
|
93
|
+
outcome: "pruned-to-false" | "skipped-by-policy";
|
|
94
|
+
detail: string;
|
|
95
|
+
} | {
|
|
96
|
+
type: "coverage-removal";
|
|
97
|
+
outcome: "replaced-with-true" | "unchanged";
|
|
98
|
+
detail: string;
|
|
99
|
+
} | {
|
|
100
|
+
type: "collapse-or";
|
|
101
|
+
outcome: "collapsed-single-child" | "unchanged";
|
|
102
|
+
detail: string;
|
|
103
|
+
} | {
|
|
104
|
+
type: "and-propagation";
|
|
105
|
+
outcome: "applied" | "skipped-by-policy";
|
|
106
|
+
detail: string;
|
|
107
|
+
};
|
|
108
|
+
export type ScopeNormalizationTrace = {
|
|
109
|
+
constraintRejections: ConstraintExtractionRejection[];
|
|
110
|
+
events: ScopeTraceEvent[];
|
|
111
|
+
};
|
|
47
112
|
export interface NormalizeMeta {
|
|
48
113
|
changed: boolean;
|
|
49
114
|
level: NormalizeLevel;
|
|
@@ -58,6 +123,8 @@ export interface NormalizeMeta {
|
|
|
58
123
|
before: NodeStats;
|
|
59
124
|
after: NodeStats;
|
|
60
125
|
};
|
|
126
|
+
predicateTraces?: PredicateFieldTrace[];
|
|
127
|
+
scopeTrace?: ScopeNormalizationTrace;
|
|
61
128
|
}
|
|
62
129
|
export interface NormalizeResult<Q = Query> {
|
|
63
130
|
query: Q;
|
|
@@ -66,5 +133,6 @@ export interface NormalizeResult<Q = Query> {
|
|
|
66
133
|
/**
|
|
67
134
|
* FalseNode 编译结果:不可满足选择器(与设计文档一致)
|
|
68
135
|
*/
|
|
136
|
+
/** Canonical unsatisfiable filter: no document has a missing top-level `_id` in normal collections. */
|
|
69
137
|
export declare const IMPOSSIBLE_SELECTOR: Query;
|
|
70
138
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B,EAAE,OAAO,CAAC;IACpC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,yBAAyB,EAAE,OAAO,CAAC;IACnC,yBAAyB,EAAE,OAAO,CAAC;IACnC,sBAAsB,EAAE,OAAO,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,0BAA0B,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,sBAAsB,EAAE,OAAO,CAAC;IAChC,qFAAqF;IACrF,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACtC,YAAY,EAAE,qBAAqB,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;IACvC,YAAY,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;KACjD,CAAC;IACF,KAAK,CAAC,EAAE;QACJ,YAAY,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;KAC7C,CAAC;CACL;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,yBAAyB,CAAC;IACrC,KAAK,EAAE,0BAA0B,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC;AAEvC,MAAM,MAAM,4BAA4B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,4BAA4B,EAAE,CAAC;IACpD,aAAa,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,sGAAsG;IACtG,iBAAiB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GACrB;IACI,IAAI,EAAE,qBAAqB,CAAC;IAC5B,mBAAmB,EAAE,SAAS,GAAG,KAAK,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAClB,GACD;IACI,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;CAClB,GACD;IACI,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,oBAAoB,GAAG,WAAW,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;CAClB,GACD;IACI,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,wBAAwB,GAAG,WAAW,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;CAClB,GACD;IACI,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,SAAS,GAAG,mBAAmB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAER,MAAM,MAAM,uBAAuB,GAAG;IAClC,oBAAoB,EAAE,6BAA6B,EAAE,CAAC;IACtD,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QACJ,MAAM,EAAE,SAAS,CAAC;QAClB,KAAK,EAAE,SAAS,CAAC;KACpB,CAAC;IACF,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACxC,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACxC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,KAAK;IACtC,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,aAAa,CAAC;CACvB;AAED;;GAEG;AACH,uGAAuG;AACvG,eAAO,MAAM,mBAAmB,EAAE,KAA4C,CAAC"}
|
package/dist/types.js
CHANGED
|
@@ -4,5 +4,6 @@ exports.IMPOSSIBLE_SELECTOR = void 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* FalseNode 编译结果:不可满足选择器(与设计文档一致)
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
/** Canonical unsatisfiable filter: no document has a missing top-level `_id` in normal collections. */
|
|
8
|
+
exports.IMPOSSIBLE_SELECTOR = { _id: { $exists: false } };
|
|
8
9
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA2JA;;GAEG;AACH,uGAAuG;AAC1F,QAAA,mBAAmB,GAAU,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mongo-query-normalizer",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "Observable, level-based normalizer for MongoDB query objects. Defaults to conservative shape stabilization;
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Observable, level-based normalizer for MongoDB query objects. Defaults to conservative shape stabilization; optional predicate and scope levels with documented contracts. Predictable output and metadata—not planner optimization.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -13,11 +13,13 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc",
|
|
15
15
|
"test": "npm run build && npm run test:unit && npm run test:semantic",
|
|
16
|
+
"test:api": "mocha \"test/api/**/*.test.js\"",
|
|
17
|
+
"test:levels": "mocha \"test/levels/**/*.test.js\" \"test/contracts/*.test.js\"",
|
|
16
18
|
"test:unit": "mocha \"test/**/*.test.js\" --ignore \"test/semantic/**/*.test.js\" --ignore \"test/regression/**/*.test.js\" --ignore \"test/property/**/*.test.js\"",
|
|
17
19
|
"test:semantic": "mocha --require ./test/helpers/mocha-semantic-hooks.js \"test/semantic/**/*.test.js\" \"test/regression/**/*.test.js\" \"test/property/**/*.test.js\"",
|
|
18
20
|
"test:semantic:quick": "FC_SEED=42 FC_RUNS=45 mocha --require ./test/helpers/mocha-semantic-hooks.js \"test/semantic/**/*.test.js\" \"test/regression/**/*.test.js\" \"test/property/**/*.test.js\"",
|
|
19
21
|
"test:semantic:ci": "FC_RUNS=200 FC_SEED=42 mocha --require ./test/helpers/mocha-semantic-hooks.js \"test/semantic/**/*.test.js\" \"test/regression/**/*.test.js\" \"test/property/**/*.test.js\"",
|
|
20
|
-
"prepublishOnly": "npm run build"
|
|
22
|
+
"prepublishOnly": "npm test && npm run build"
|
|
21
23
|
},
|
|
22
24
|
"author": "",
|
|
23
25
|
"license": "ISC",
|
|
@@ -48,4 +50,4 @@
|
|
|
48
50
|
"mongodb-memory-server": "^11.0.1",
|
|
49
51
|
"typescript": "^5.0.0"
|
|
50
52
|
}
|
|
51
|
-
}
|
|
53
|
+
}
|