mongo-query-normalizer 0.1.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/LICENSE +15 -0
- package/README.md +193 -0
- package/README.zh-CN.md +194 -0
- package/dist/ast/builders.d.ts +8 -0
- package/dist/ast/builders.d.ts.map +1 -0
- package/dist/ast/builders.js +27 -0
- package/dist/ast/builders.js.map +1 -0
- package/dist/ast/contains-opaque.d.ts +3 -0
- package/dist/ast/contains-opaque.d.ts.map +1 -0
- package/dist/ast/contains-opaque.js +14 -0
- package/dist/ast/contains-opaque.js.map +1 -0
- package/dist/ast/guards.d.ts +7 -0
- package/dist/ast/guards.d.ts.map +1 -0
- package/dist/ast/guards.js +23 -0
- package/dist/ast/guards.js.map +1 -0
- package/dist/ast/hash.d.ts +4 -0
- package/dist/ast/hash.d.ts.map +1 -0
- package/dist/ast/hash.js +67 -0
- package/dist/ast/hash.js.map +1 -0
- package/dist/ast/index.d.ts +6 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +22 -0
- package/dist/ast/index.js.map +1 -0
- package/dist/ast/types.d.ts +28 -0
- package/dist/ast/types.d.ts.map +1 -0
- package/dist/ast/types.js +3 -0
- package/dist/ast/types.js.map +1 -0
- package/dist/ast/visitor.d.ts +3 -0
- package/dist/ast/visitor.d.ts.map +1 -0
- package/dist/ast/visitor.js +12 -0
- package/dist/ast/visitor.js.map +1 -0
- package/dist/common/types.d.ts +46 -0
- package/dist/common/types.d.ts.map +1 -0
- package/dist/common/types.js +3 -0
- package/dist/common/types.js.map +1 -0
- package/dist/compile/compile.d.ts +5 -0
- package/dist/compile/compile.d.ts.map +1 -0
- package/dist/compile/compile.js +69 -0
- package/dist/compile/compile.js.map +1 -0
- package/dist/compile-selector.d.ts +9 -0
- package/dist/compile-selector.d.ts.map +1 -0
- package/dist/compile-selector.js +14 -0
- package/dist/compile-selector.js.map +1 -0
- package/dist/conflict.d.ts +18 -0
- package/dist/conflict.d.ts.map +1 -0
- package/dist/conflict.js +30 -0
- package/dist/conflict.js.map +1 -0
- package/dist/core/canonicalize.d.ts +11 -0
- package/dist/core/canonicalize.d.ts.map +1 -0
- package/dist/core/canonicalize.js +104 -0
- package/dist/core/canonicalize.js.map +1 -0
- package/dist/core/conditions.d.ts +8 -0
- package/dist/core/conditions.d.ts.map +1 -0
- package/dist/core/conditions.js +282 -0
- package/dist/core/conditions.js.map +1 -0
- package/dist/core/conflicts-and-tighten.d.ts +15 -0
- package/dist/core/conflicts-and-tighten.d.ts.map +1 -0
- package/dist/core/conflicts-and-tighten.js +26 -0
- package/dist/core/conflicts-and-tighten.js.map +1 -0
- package/dist/core/conflicts.d.ts +14 -0
- package/dist/core/conflicts.d.ts.map +1 -0
- package/dist/core/conflicts.js +157 -0
- package/dist/core/conflicts.js.map +1 -0
- package/dist/core/constraint-propagation.d.ts +15 -0
- package/dist/core/constraint-propagation.d.ts.map +1 -0
- package/dist/core/constraint-propagation.js +93 -0
- package/dist/core/constraint-propagation.js.map +1 -0
- package/dist/core/field-condition-normalize.d.ts +22 -0
- package/dist/core/field-condition-normalize.d.ts.map +1 -0
- package/dist/core/field-condition-normalize.js +225 -0
- package/dist/core/field-condition-normalize.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/normalize.d.ts +8 -0
- package/dist/core/normalize.d.ts.map +1 -0
- package/dist/core/normalize.js +44 -0
- package/dist/core/normalize.js.map +1 -0
- package/dist/core/operators.d.ts +11 -0
- package/dist/core/operators.d.ts.map +1 -0
- package/dist/core/operators.js +26 -0
- package/dist/core/operators.js.map +1 -0
- package/dist/core/predicate-merge.d.ts +9 -0
- package/dist/core/predicate-merge.d.ts.map +1 -0
- package/dist/core/predicate-merge.js +105 -0
- package/dist/core/predicate-merge.js.map +1 -0
- package/dist/core/predicateMerge.d.ts +17 -0
- package/dist/core/predicateMerge.d.ts.map +1 -0
- package/dist/core/predicateMerge.js +57 -0
- package/dist/core/predicateMerge.js.map +1 -0
- package/dist/core/simplify.d.ts +11 -0
- package/dist/core/simplify.d.ts.map +1 -0
- package/dist/core/simplify.js +128 -0
- package/dist/core/simplify.js.map +1 -0
- package/dist/core/stable-structural-key.d.ts +7 -0
- package/dist/core/stable-structural-key.d.ts.map +1 -0
- package/dist/core/stable-structural-key.js +71 -0
- package/dist/core/stable-structural-key.js.map +1 -0
- package/dist/core/utils.d.ts +16 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +109 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/flatten/flatten.d.ts +43 -0
- package/dist/flatten/flatten.d.ts.map +1 -0
- package/dist/flatten/flatten.js +68 -0
- package/dist/flatten/flatten.js.map +1 -0
- package/dist/flatten/index.d.ts +2 -0
- package/dist/flatten/index.d.ts.map +1 -0
- package/dist/flatten/index.js +10 -0
- package/dist/flatten/index.js.map +1 -0
- package/dist/flatten.d.ts +43 -0
- package/dist/flatten.d.ts.map +1 -0
- package/dist/flatten.js +68 -0
- package/dist/flatten.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/merge-ops.d.ts +33 -0
- package/dist/merge-ops.d.ts.map +1 -0
- package/dist/merge-ops.js +52 -0
- package/dist/merge-ops.js.map +1 -0
- package/dist/normalize-context.d.ts +16 -0
- package/dist/normalize-context.d.ts.map +1 -0
- package/dist/normalize-context.js +19 -0
- package/dist/normalize-context.js.map +1 -0
- package/dist/normalize.d.ts +6 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +122 -0
- package/dist/normalize.js.map +1 -0
- package/dist/observe/diff.d.ts +7 -0
- package/dist/observe/diff.d.ts.map +1 -0
- package/dist/observe/diff.js +15 -0
- package/dist/observe/diff.js.map +1 -0
- package/dist/observe/level-boundary-hints.d.ts +11 -0
- package/dist/observe/level-boundary-hints.d.ts.map +1 -0
- package/dist/observe/level-boundary-hints.js +42 -0
- package/dist/observe/level-boundary-hints.js.map +1 -0
- package/dist/observe/level-preview-warning.d.ts +11 -0
- package/dist/observe/level-preview-warning.d.ts.map +1 -0
- package/dist/observe/level-preview-warning.js +42 -0
- package/dist/observe/level-preview-warning.js.map +1 -0
- package/dist/observe/metrics.d.ts +4 -0
- package/dist/observe/metrics.d.ts.map +1 -0
- package/dist/observe/metrics.js +30 -0
- package/dist/observe/metrics.js.map +1 -0
- package/dist/observe/warnings.d.ts +6 -0
- package/dist/observe/warnings.d.ts.map +1 -0
- package/dist/observe/warnings.js +24 -0
- package/dist/observe/warnings.js.map +1 -0
- package/dist/operations/compile.d.ts +7 -0
- package/dist/operations/compile.d.ts.map +1 -0
- package/dist/operations/compile.js +70 -0
- package/dist/operations/compile.js.map +1 -0
- package/dist/operations/conflicts-and-tighten.d.ts +29 -0
- package/dist/operations/conflicts-and-tighten.d.ts.map +1 -0
- package/dist/operations/conflicts-and-tighten.js +40 -0
- package/dist/operations/conflicts-and-tighten.js.map +1 -0
- package/dist/operations/conflicts.d.ts +28 -0
- package/dist/operations/conflicts.d.ts.map +1 -0
- package/dist/operations/conflicts.js +216 -0
- package/dist/operations/conflicts.js.map +1 -0
- package/dist/operations/conflictsAndTighten.d.ts +29 -0
- package/dist/operations/conflictsAndTighten.d.ts.map +1 -0
- package/dist/operations/conflictsAndTighten.js +40 -0
- package/dist/operations/conflictsAndTighten.js.map +1 -0
- package/dist/operations/merge.d.ts +18 -0
- package/dist/operations/merge.d.ts.map +1 -0
- package/dist/operations/merge.js +266 -0
- package/dist/operations/merge.js.map +1 -0
- package/dist/operations/parse.d.ts +20 -0
- package/dist/operations/parse.d.ts.map +1 -0
- package/dist/operations/parse.js +128 -0
- package/dist/operations/parse.js.map +1 -0
- package/dist/ops/compile-selector.d.ts +9 -0
- package/dist/ops/compile-selector.d.ts.map +1 -0
- package/dist/ops/compile-selector.js +14 -0
- package/dist/ops/compile-selector.js.map +1 -0
- package/dist/ops/index.d.ts +4 -0
- package/dist/ops/index.d.ts.map +1 -0
- package/dist/ops/index.js +14 -0
- package/dist/ops/index.js.map +1 -0
- package/dist/ops/merge-ops.d.ts +33 -0
- package/dist/ops/merge-ops.d.ts.map +1 -0
- package/dist/ops/merge-ops.js +52 -0
- package/dist/ops/merge-ops.js.map +1 -0
- package/dist/ops/parse-selector.d.ts +18 -0
- package/dist/ops/parse-selector.d.ts.map +1 -0
- package/dist/ops/parse-selector.js +29 -0
- package/dist/ops/parse-selector.js.map +1 -0
- package/dist/optimize.d.ts +18 -0
- package/dist/optimize.d.ts.map +1 -0
- package/dist/optimize.js +33 -0
- package/dist/optimize.js.map +1 -0
- package/dist/options/constants.d.ts +6 -0
- package/dist/options/constants.d.ts.map +1 -0
- package/dist/options/constants.js +72 -0
- package/dist/options/constants.js.map +1 -0
- package/dist/options/resolve.d.ts +3 -0
- package/dist/options/resolve.d.ts.map +1 -0
- package/dist/options/resolve.js +35 -0
- package/dist/options/resolve.js.map +1 -0
- package/dist/options/types.d.ts +2 -0
- package/dist/options/types.d.ts.map +1 -0
- package/dist/options/types.js +3 -0
- package/dist/options/types.js.map +1 -0
- package/dist/parse/parse.d.ts +4 -0
- package/dist/parse/parse.d.ts.map +1 -0
- package/dist/parse/parse.js +114 -0
- package/dist/parse/parse.js.map +1 -0
- package/dist/parse/plain-object.d.ts +2 -0
- package/dist/parse/plain-object.d.ts.map +1 -0
- package/dist/parse/plain-object.js +7 -0
- package/dist/parse/plain-object.js.map +1 -0
- package/dist/parse-selector.d.ts +18 -0
- package/dist/parse-selector.d.ts.map +1 -0
- package/dist/parse-selector.js +29 -0
- package/dist/parse-selector.js.map +1 -0
- package/dist/passes/canonicalize.d.ts +4 -0
- package/dist/passes/canonicalize.d.ts.map +1 -0
- package/dist/passes/canonicalize.js +40 -0
- package/dist/passes/canonicalize.js.map +1 -0
- package/dist/passes/normalize-predicate.d.ts +4 -0
- package/dist/passes/normalize-predicate.d.ts.map +1 -0
- package/dist/passes/normalize-predicate.js +57 -0
- package/dist/passes/normalize-predicate.js.map +1 -0
- package/dist/passes/normalize-shape.d.ts +4 -0
- package/dist/passes/normalize-shape.d.ts.map +1 -0
- package/dist/passes/normalize-shape.js +37 -0
- package/dist/passes/normalize-shape.js.map +1 -0
- package/dist/passes/simplify.d.ts +4 -0
- package/dist/passes/simplify.d.ts.map +1 -0
- package/dist/passes/simplify.js +49 -0
- package/dist/passes/simplify.js.map +1 -0
- package/dist/prune/conflict.d.ts +18 -0
- package/dist/prune/conflict.d.ts.map +1 -0
- package/dist/prune/conflict.js +30 -0
- package/dist/prune/conflict.js.map +1 -0
- package/dist/prune/index.d.ts +3 -0
- package/dist/prune/index.d.ts.map +1 -0
- package/dist/prune/index.js +9 -0
- package/dist/prune/index.js.map +1 -0
- package/dist/prune/prune.d.ts +11 -0
- package/dist/prune/prune.d.ts.map +1 -0
- package/dist/prune/prune.js +19 -0
- package/dist/prune/prune.js.map +1 -0
- package/dist/prune.d.ts +11 -0
- package/dist/prune.d.ts.map +1 -0
- package/dist/prune.js +19 -0
- package/dist/prune.js.map +1 -0
- package/dist/rewrite.d.ts +27 -0
- package/dist/rewrite.d.ts.map +1 -0
- package/dist/rewrite.js +62 -0
- package/dist/rewrite.js.map +1 -0
- package/dist/rules/experimental/hoist-common-predicates-from-or.d.ts +5 -0
- package/dist/rules/experimental/hoist-common-predicates-from-or.d.ts.map +1 -0
- package/dist/rules/experimental/hoist-common-predicates-from-or.js +153 -0
- package/dist/rules/experimental/hoist-common-predicates-from-or.js.map +1 -0
- package/dist/rules/logical/detect-common-predicates-in-or.d.ts +5 -0
- package/dist/rules/logical/detect-common-predicates-in-or.d.ts.map +1 -0
- package/dist/rules/logical/detect-common-predicates-in-or.js +82 -0
- package/dist/rules/logical/detect-common-predicates-in-or.js.map +1 -0
- package/dist/rules/predicate/collapse-contradictions.d.ts +5 -0
- package/dist/rules/predicate/collapse-contradictions.d.ts.map +1 -0
- package/dist/rules/predicate/collapse-contradictions.js +45 -0
- package/dist/rules/predicate/collapse-contradictions.js.map +1 -0
- package/dist/rules/predicate/dedupe-same-field-predicates.d.ts +5 -0
- package/dist/rules/predicate/dedupe-same-field-predicates.d.ts.map +1 -0
- package/dist/rules/predicate/dedupe-same-field-predicates.js +33 -0
- package/dist/rules/predicate/dedupe-same-field-predicates.js.map +1 -0
- package/dist/rules/predicate/merge-comparable-predicates.d.ts +5 -0
- package/dist/rules/predicate/merge-comparable-predicates.d.ts.map +1 -0
- package/dist/rules/predicate/merge-comparable-predicates.js +30 -0
- package/dist/rules/predicate/merge-comparable-predicates.js.map +1 -0
- package/dist/rules/predicate/merge-predicates-internal.d.ts +7 -0
- package/dist/rules/predicate/merge-predicates-internal.d.ts.map +1 -0
- package/dist/rules/predicate/merge-predicates-internal.js +186 -0
- package/dist/rules/predicate/merge-predicates-internal.js.map +1 -0
- package/dist/rules/shape/collapse-single-child-logical.d.ts +5 -0
- package/dist/rules/shape/collapse-single-child-logical.d.ts.map +1 -0
- package/dist/rules/shape/collapse-single-child-logical.js +20 -0
- package/dist/rules/shape/collapse-single-child-logical.js.map +1 -0
- package/dist/rules/shape/dedupe-logical-children.d.ts +6 -0
- package/dist/rules/shape/dedupe-logical-children.d.ts.map +1 -0
- package/dist/rules/shape/dedupe-logical-children.js +37 -0
- package/dist/rules/shape/dedupe-logical-children.js.map +1 -0
- package/dist/rules/shape/flatten-logical.d.ts +6 -0
- package/dist/rules/shape/flatten-logical.d.ts.map +1 -0
- package/dist/rules/shape/flatten-logical.js +37 -0
- package/dist/rules/shape/flatten-logical.js.map +1 -0
- package/dist/rules/shape/remove-empty-logical.d.ts +5 -0
- package/dist/rules/shape/remove-empty-logical.d.ts.map +1 -0
- package/dist/rules/shape/remove-empty-logical.js +21 -0
- package/dist/rules/shape/remove-empty-logical.js.map +1 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/compare-values.d.ts +6 -0
- package/dist/utils/compare-values.d.ts.map +1 -0
- package/dist/utils/compare-values.js +31 -0
- package/dist/utils/compare-values.js.map +1 -0
- package/dist/utils/deep-equal.d.ts +2 -0
- package/dist/utils/deep-equal.d.ts.map +1 -0
- package/dist/utils/deep-equal.js +30 -0
- package/dist/utils/deep-equal.js.map +1 -0
- package/dist/utils/is-opaque.d.ts +4 -0
- package/dist/utils/is-opaque.d.ts.map +1 -0
- package/dist/utils/is-opaque.js +42 -0
- package/dist/utils/is-opaque.js.map +1 -0
- package/dist/utils/stable-sort.d.ts +2 -0
- package/dist/utils/stable-sort.d.ts.map +1 -0
- package/dist/utils/stable-sort.js +16 -0
- package/dist/utils/stable-sort.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AACvB,6CAA4D;AAAnD,kHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ParsedOp } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 按字段分组后,对同一字段的多个操作符进行合并(如多个 $eq -> $in,$gt 取 max,$in 取交集等)。
|
|
4
|
+
* 语义参考「合并同类项」,减少冗余条件并可能暴露冲突(如合并后 $in: [])。
|
|
5
|
+
*
|
|
6
|
+
* @param parsedOps - 解析后的条件列表(通常来自同一 $and 下的 parseSelector 结果)
|
|
7
|
+
* @returns 合并后的条件列表,可能更短或出现不可满足项
|
|
8
|
+
*/
|
|
9
|
+
export declare function reduceOps(parsedOps: ParsedOp[]): ParsedOp[];
|
|
10
|
+
/**
|
|
11
|
+
* 对同一字段的多个 ParsedOp 做合并($eq/$gt/$gte/$lt/$lte/$in/$nin 等可合并,其余保留)。
|
|
12
|
+
*
|
|
13
|
+
* @param field - 字段名
|
|
14
|
+
* @param ops - 该字段的 op+value 列表
|
|
15
|
+
* @returns 合并后的该字段对应的 ParsedOp 列表
|
|
16
|
+
*/
|
|
17
|
+
export declare function mergeFieldOps(field: string, ops: ParsedOp[]): ParsedOp[];
|
|
18
|
+
/**
|
|
19
|
+
* 深度比较两个值是否相等(含 Date、数组、对象),用于去重与交集等。
|
|
20
|
+
*
|
|
21
|
+
* @param a - 任意值
|
|
22
|
+
* @param b - 任意值
|
|
23
|
+
* @returns 是否相等
|
|
24
|
+
*/
|
|
25
|
+
export declare function valueIsEqual(a: unknown, b: unknown): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* 数组去重(使用 valueIsEqual 比较)。
|
|
28
|
+
*
|
|
29
|
+
* @param array - 待去重数组
|
|
30
|
+
* @returns 去重后的新数组
|
|
31
|
+
*/
|
|
32
|
+
export declare function deduplicateArray<T>(array: T[]): T[];
|
|
33
|
+
//# sourceMappingURL=merge-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ops.d.ts","sourceRoot":"","sources":["../src/merge-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAG3D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAIxE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAGnD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reduceOps = reduceOps;
|
|
4
|
+
exports.mergeFieldOps = mergeFieldOps;
|
|
5
|
+
exports.valueIsEqual = valueIsEqual;
|
|
6
|
+
exports.deduplicateArray = deduplicateArray;
|
|
7
|
+
/**
|
|
8
|
+
* 按字段分组后,对同一字段的多个操作符进行合并(如多个 $eq -> $in,$gt 取 max,$in 取交集等)。
|
|
9
|
+
* 语义参考「合并同类项」,减少冗余条件并可能暴露冲突(如合并后 $in: [])。
|
|
10
|
+
*
|
|
11
|
+
* @param parsedOps - 解析后的条件列表(通常来自同一 $and 下的 parseSelector 结果)
|
|
12
|
+
* @returns 合并后的条件列表,可能更短或出现不可满足项
|
|
13
|
+
*/
|
|
14
|
+
function reduceOps(parsedOps) {
|
|
15
|
+
void parsedOps;
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 对同一字段的多个 ParsedOp 做合并($eq/$gt/$gte/$lt/$lte/$in/$nin 等可合并,其余保留)。
|
|
20
|
+
*
|
|
21
|
+
* @param field - 字段名
|
|
22
|
+
* @param ops - 该字段的 op+value 列表
|
|
23
|
+
* @returns 合并后的该字段对应的 ParsedOp 列表
|
|
24
|
+
*/
|
|
25
|
+
function mergeFieldOps(field, ops) {
|
|
26
|
+
void field;
|
|
27
|
+
void ops;
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 深度比较两个值是否相等(含 Date、数组、对象),用于去重与交集等。
|
|
32
|
+
*
|
|
33
|
+
* @param a - 任意值
|
|
34
|
+
* @param b - 任意值
|
|
35
|
+
* @returns 是否相等
|
|
36
|
+
*/
|
|
37
|
+
function valueIsEqual(a, b) {
|
|
38
|
+
void a;
|
|
39
|
+
void b;
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 数组去重(使用 valueIsEqual 比较)。
|
|
44
|
+
*
|
|
45
|
+
* @param array - 待去重数组
|
|
46
|
+
* @returns 去重后的新数组
|
|
47
|
+
*/
|
|
48
|
+
function deduplicateArray(array) {
|
|
49
|
+
void array;
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=merge-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ops.js","sourceRoot":"","sources":["../src/merge-ops.ts"],"names":[],"mappings":";;AASA,8BAGC;AASD,sCAIC;AASD,oCAIC;AAQD,4CAGC;AA/CD;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,SAAqB;IAC7C,KAAK,SAAS,CAAC;IACf,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,KAAa,EAAE,GAAe;IAC1D,KAAK,KAAK,CAAC;IACX,KAAK,GAAG,CAAC;IACT,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,CAAU,EAAE,CAAU;IACjD,KAAK,CAAC,CAAC;IACP,KAAK,CAAC,CAAC;IACP,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAI,KAAU;IAC5C,KAAK,KAAK,CAAC;IACX,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NodeStats, ResolvedNormalizeOptions } from "./types";
|
|
2
|
+
export interface NormalizeContext {
|
|
3
|
+
options: ResolvedNormalizeOptions;
|
|
4
|
+
appliedRules: string[];
|
|
5
|
+
skippedRules: string[];
|
|
6
|
+
warnings: string[];
|
|
7
|
+
bailedOut: boolean;
|
|
8
|
+
bailoutReason?: string;
|
|
9
|
+
beforeHash?: string;
|
|
10
|
+
afterHash?: string;
|
|
11
|
+
beforeStats?: NodeStats;
|
|
12
|
+
afterStats?: NodeStats;
|
|
13
|
+
depth: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function createNormalizeContext(options: ResolvedNormalizeOptions): NormalizeContext;
|
|
16
|
+
//# sourceMappingURL=normalize-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-context.d.ts","sourceRoot":"","sources":["../src/normalize-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,wBAAwB,CAAC;IAClC,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,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,gBAAgB,CAc1F"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNormalizeContext = createNormalizeContext;
|
|
4
|
+
function createNormalizeContext(options) {
|
|
5
|
+
return {
|
|
6
|
+
options,
|
|
7
|
+
appliedRules: [],
|
|
8
|
+
skippedRules: [],
|
|
9
|
+
warnings: [],
|
|
10
|
+
bailedOut: false,
|
|
11
|
+
bailoutReason: undefined,
|
|
12
|
+
beforeHash: undefined,
|
|
13
|
+
afterHash: undefined,
|
|
14
|
+
beforeStats: undefined,
|
|
15
|
+
afterStats: undefined,
|
|
16
|
+
depth: 0,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=normalize-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-context.js","sourceRoot":"","sources":["../src/normalize-context.ts"],"names":[],"mappings":";;AAgBA,wDAcC;AAdD,SAAgB,sBAAsB,CAAC,OAAiC;IACpE,OAAO;QACH,OAAO;QACP,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,SAAS;QACxB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,CAAC;KACX,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NormalizeOptions, NormalizeResult, Query } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 主入口:parse →(shape / predicate 直至稳定)→(可选 logical / experimental)→ canonicalize → compile。
|
|
4
|
+
*/
|
|
5
|
+
export declare function normalizeQuery(query: Query, options?: NormalizeOptions): NormalizeResult;
|
|
6
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAExE;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAgBxF"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeQuery = normalizeQuery;
|
|
4
|
+
const hash_1 = require("./ast/hash");
|
|
5
|
+
const compile_1 = require("./compile/compile");
|
|
6
|
+
const normalize_context_1 = require("./normalize-context");
|
|
7
|
+
const metrics_1 = require("./observe/metrics");
|
|
8
|
+
const level_boundary_hints_1 = require("./observe/level-boundary-hints");
|
|
9
|
+
const resolve_1 = require("./options/resolve");
|
|
10
|
+
const canonicalize_1 = require("./passes/canonicalize");
|
|
11
|
+
const normalize_predicate_1 = require("./passes/normalize-predicate");
|
|
12
|
+
const normalize_shape_1 = require("./passes/normalize-shape");
|
|
13
|
+
const simplify_1 = require("./passes/simplify");
|
|
14
|
+
const parse_1 = require("./parse/parse");
|
|
15
|
+
const hoist_common_predicates_from_or_1 = require("./rules/experimental/hoist-common-predicates-from-or");
|
|
16
|
+
const detect_common_predicates_in_or_1 = require("./rules/logical/detect-common-predicates-in-or");
|
|
17
|
+
/**
|
|
18
|
+
* 主入口:parse →(shape / predicate 直至稳定)→(可选 logical / experimental)→ canonicalize → compile。
|
|
19
|
+
*/
|
|
20
|
+
function normalizeQuery(query, options) {
|
|
21
|
+
const normalizeContext = (0, normalize_context_1.createNormalizeContext)((0, resolve_1.resolveNormalizeOptions)(options));
|
|
22
|
+
(0, level_boundary_hints_1.applyPreviewLevelBoundaryHints)(normalizeContext);
|
|
23
|
+
const beforeNode = (0, parse_1.parseQuery)(query, normalizeContext);
|
|
24
|
+
recordBeforeObservation(normalizeContext, beforeNode);
|
|
25
|
+
let workingNode = beforeNode;
|
|
26
|
+
workingNode = runNormalizePipeline(workingNode, normalizeContext);
|
|
27
|
+
const afterNode = normalizeContext.bailedOut ? beforeNode : workingNode;
|
|
28
|
+
recordAfterObservation(normalizeContext, afterNode);
|
|
29
|
+
const finalQuery = (0, compile_1.compileQuery)(afterNode, normalizeContext);
|
|
30
|
+
return buildNormalizeResult(query, finalQuery, beforeNode, afterNode, normalizeContext);
|
|
31
|
+
}
|
|
32
|
+
function recordBeforeObservation(normalizeContext, node) {
|
|
33
|
+
if (normalizeContext.options.observe.collectMetrics) {
|
|
34
|
+
normalizeContext.beforeStats = (0, metrics_1.collectNodeStats)(node);
|
|
35
|
+
}
|
|
36
|
+
normalizeContext.beforeHash = (0, hash_1.hashNode)(node);
|
|
37
|
+
}
|
|
38
|
+
function recordAfterObservation(normalizeContext, node) {
|
|
39
|
+
if (normalizeContext.options.observe.collectMetrics) {
|
|
40
|
+
normalizeContext.afterStats = (0, metrics_1.collectNodeStats)(node);
|
|
41
|
+
}
|
|
42
|
+
normalizeContext.afterHash = (0, hash_1.hashNode)(node);
|
|
43
|
+
}
|
|
44
|
+
const MAX_NORMALIZE_STABLE_ROUNDS = 8;
|
|
45
|
+
function runNormalizePipeline(root, normalizeContext) {
|
|
46
|
+
let node = root;
|
|
47
|
+
const shouldRunPredicate = normalizeContext.options.level === "predicate" ||
|
|
48
|
+
normalizeContext.options.level === "logical" ||
|
|
49
|
+
normalizeContext.options.level === "experimental";
|
|
50
|
+
for (let o = 0; o < MAX_NORMALIZE_STABLE_ROUNDS; o++) {
|
|
51
|
+
const outerStart = (0, hash_1.hashNode)(node);
|
|
52
|
+
for (let r = 0; r < MAX_NORMALIZE_STABLE_ROUNDS; r++) {
|
|
53
|
+
const beforeRound = (0, hash_1.hashNode)(node);
|
|
54
|
+
node = (0, normalize_shape_1.normalizeShape)(node, normalizeContext);
|
|
55
|
+
if (normalizeContext.bailedOut) {
|
|
56
|
+
return root;
|
|
57
|
+
}
|
|
58
|
+
if ((0, hash_1.hashNode)(node) === beforeRound) {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (shouldRunPredicate) {
|
|
63
|
+
for (let r = 0; r < MAX_NORMALIZE_STABLE_ROUNDS; r++) {
|
|
64
|
+
const beforeRound = (0, hash_1.hashNode)(node);
|
|
65
|
+
node = (0, normalize_predicate_1.normalizePredicate)(node, normalizeContext);
|
|
66
|
+
if (normalizeContext.bailedOut) {
|
|
67
|
+
return root;
|
|
68
|
+
}
|
|
69
|
+
node = (0, simplify_1.simplify)(node, normalizeContext);
|
|
70
|
+
if (normalizeContext.bailedOut) {
|
|
71
|
+
return root;
|
|
72
|
+
}
|
|
73
|
+
if ((0, hash_1.hashNode)(node) === beforeRound) {
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if ((0, hash_1.hashNode)(node) === outerStart) {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const shouldRunLogicalDetect = normalizeContext.options.level === "logical" || normalizeContext.options.level === "experimental";
|
|
83
|
+
if (shouldRunLogicalDetect && normalizeContext.options.rules.detectCommonPredicatesInOr) {
|
|
84
|
+
node = (0, detect_common_predicates_in_or_1.detectCommonPredicatesInOr)(node, normalizeContext);
|
|
85
|
+
if (normalizeContext.bailedOut) {
|
|
86
|
+
return root;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const shouldRunExperimental = normalizeContext.options.level === "experimental" && normalizeContext.options.rules.hoistCommonPredicatesFromOr;
|
|
90
|
+
if (shouldRunExperimental) {
|
|
91
|
+
node = (0, hoist_common_predicates_from_or_1.hoistCommonPredicatesFromOr)(node, normalizeContext);
|
|
92
|
+
if (normalizeContext.bailedOut) {
|
|
93
|
+
return root;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
node = (0, canonicalize_1.canonicalize)(node, normalizeContext);
|
|
97
|
+
return node;
|
|
98
|
+
}
|
|
99
|
+
function buildNormalizeResult(_originalQuery, finalQuery, _beforeNode, _afterNode, normalizeContext) {
|
|
100
|
+
const changed = normalizeContext.beforeHash !== normalizeContext.afterHash;
|
|
101
|
+
return {
|
|
102
|
+
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
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { QueryNode } from "../ast/types";
|
|
2
|
+
export declare function hasNodeChanged(before: QueryNode, after: QueryNode): boolean;
|
|
3
|
+
export declare function createHashPair(before: QueryNode, after: QueryNode): {
|
|
4
|
+
beforeHash: string;
|
|
5
|
+
afterHash: string;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/observe/diff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAK7G"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasNodeChanged = hasNodeChanged;
|
|
4
|
+
exports.createHashPair = createHashPair;
|
|
5
|
+
const hash_1 = require("../ast/hash");
|
|
6
|
+
function hasNodeChanged(before, after) {
|
|
7
|
+
return (0, hash_1.hashNode)(before) !== (0, hash_1.hashNode)(after);
|
|
8
|
+
}
|
|
9
|
+
function createHashPair(before, after) {
|
|
10
|
+
return {
|
|
11
|
+
beforeHash: (0, hash_1.hashNode)(before),
|
|
12
|
+
afterHash: (0, hash_1.hashNode)(after),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/observe/diff.ts"],"names":[],"mappings":";;AAGA,wCAEC;AAED,wCAKC;AAZD,sCAAuC;AAGvC,SAAgB,cAAc,CAAC,MAAiB,EAAE,KAAgB;IAC9D,OAAO,IAAA,eAAQ,EAAC,MAAM,CAAC,KAAK,IAAA,eAAQ,EAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,cAAc,CAAC,MAAiB,EAAE,KAAgB;IAC9D,OAAO;QACH,UAAU,EAAE,IAAA,eAAQ,EAAC,MAAM,CAAC;QAC5B,SAAS,EAAE,IAAA,eAAQ,EAAC,KAAK,CAAC;KAC7B,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NormalizeContext } from "../normalize-context";
|
|
2
|
+
import type { NormalizeLevel } from "../types";
|
|
3
|
+
/** Clears process-wide console dedupe state; for unit tests only. */
|
|
4
|
+
export declare function resetLevelPreviewConsoleStateForTests(): void;
|
|
5
|
+
export declare function formatPreviewOnlyWarningMessage(level: NormalizeLevel): string;
|
|
6
|
+
/**
|
|
7
|
+
* Records a v0.1.0 boundary hint for non-`shape` levels in `meta.warnings`, and may emit a
|
|
8
|
+
* one-time-per-level `console.warn` in non-production environments.
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyPreviewLevelBoundaryHints(normalizeContext: NormalizeContext): void;
|
|
11
|
+
//# sourceMappingURL=level-boundary-hints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-boundary-hints.d.ts","sourceRoot":"","sources":["../../src/observe/level-boundary-hints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,qEAAqE;AACrE,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAE7E;AASD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAmBvF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetLevelPreviewConsoleStateForTests = resetLevelPreviewConsoleStateForTests;
|
|
4
|
+
exports.formatPreviewOnlyWarningMessage = formatPreviewOnlyWarningMessage;
|
|
5
|
+
exports.applyPreviewLevelBoundaryHints = applyPreviewLevelBoundaryHints;
|
|
6
|
+
const warnedPreviewLevelsInProcess = new Set();
|
|
7
|
+
/** Clears process-wide console dedupe state; for unit tests only. */
|
|
8
|
+
function resetLevelPreviewConsoleStateForTests() {
|
|
9
|
+
warnedPreviewLevelsInProcess.clear();
|
|
10
|
+
}
|
|
11
|
+
function formatPreviewOnlyWarningMessage(level) {
|
|
12
|
+
return `[mongo-query-normalizer] level "${level}" is preview-only in v0.1.0 and is not recommended for general production use. Prefer level "shape" for production traffic.`;
|
|
13
|
+
}
|
|
14
|
+
function shouldEmitConsoleWarning() {
|
|
15
|
+
if (typeof process === "undefined") {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return process.env.NODE_ENV !== "production";
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Records a v0.1.0 boundary hint for non-`shape` levels in `meta.warnings`, and may emit a
|
|
22
|
+
* one-time-per-level `console.warn` in non-production environments.
|
|
23
|
+
*/
|
|
24
|
+
function applyPreviewLevelBoundaryHints(normalizeContext) {
|
|
25
|
+
const level = normalizeContext.options.level;
|
|
26
|
+
if (level === "shape") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const message = formatPreviewOnlyWarningMessage(level);
|
|
30
|
+
if (!normalizeContext.warnings.includes(message)) {
|
|
31
|
+
normalizeContext.warnings.push(message);
|
|
32
|
+
}
|
|
33
|
+
if (!shouldEmitConsoleWarning()) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (warnedPreviewLevelsInProcess.has(level)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
warnedPreviewLevelsInProcess.add(level);
|
|
40
|
+
console.warn(message);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=level-boundary-hints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-boundary-hints.js","sourceRoot":"","sources":["../../src/observe/level-boundary-hints.ts"],"names":[],"mappings":";;AAMA,sFAEC;AAED,0EAEC;AAaD,wEAmBC;AAzCD,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/D,qEAAqE;AACrE,SAAgB,qCAAqC;IACjD,4BAA4B,CAAC,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,+BAA+B,CAAC,KAAqB;IACjE,OAAO,mCAAmC,KAAK,6HAA6H,CAAC;AACjL,CAAC;AAED,SAAS,wBAAwB;IAC7B,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,SAAgB,8BAA8B,CAAC,gBAAkC;IAC7E,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IACD,IAAI,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO;IACX,CAAC;IACD,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NormalizeContext } from "../normalize-context";
|
|
2
|
+
import type { NormalizeLevel } from "../types";
|
|
3
|
+
/** Clears process-wide console dedupe state; for unit tests only. */
|
|
4
|
+
export declare function resetLevelPreviewConsoleStateForTests(): void;
|
|
5
|
+
export declare function formatPreviewOnlyWarningMessage(level: NormalizeLevel): string;
|
|
6
|
+
/**
|
|
7
|
+
* Records a v0.1.0 boundary hint for non-`shape` levels in `meta.warnings`, and may emit a
|
|
8
|
+
* one-time-per-level `console.warn` in non-production environments.
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyPreviewLevelBoundaryHints(normalizeContext: NormalizeContext): void;
|
|
11
|
+
//# sourceMappingURL=level-preview-warning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-preview-warning.d.ts","sourceRoot":"","sources":["../../src/observe/level-preview-warning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,qEAAqE;AACrE,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAE7E;AASD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAmBvF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetLevelPreviewConsoleStateForTests = resetLevelPreviewConsoleStateForTests;
|
|
4
|
+
exports.formatPreviewOnlyWarningMessage = formatPreviewOnlyWarningMessage;
|
|
5
|
+
exports.applyPreviewLevelBoundaryHints = applyPreviewLevelBoundaryHints;
|
|
6
|
+
const warnedPreviewLevelsInProcess = new Set();
|
|
7
|
+
/** Clears process-wide console dedupe state; for unit tests only. */
|
|
8
|
+
function resetLevelPreviewConsoleStateForTests() {
|
|
9
|
+
warnedPreviewLevelsInProcess.clear();
|
|
10
|
+
}
|
|
11
|
+
function formatPreviewOnlyWarningMessage(level) {
|
|
12
|
+
return `[mongo-query-normalizer] level "${level}" is preview-only in v0.1.0 and is not recommended for general production use. Prefer level "shape" for production traffic.`;
|
|
13
|
+
}
|
|
14
|
+
function shouldEmitConsoleWarning() {
|
|
15
|
+
if (typeof process === "undefined") {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return process.env.NODE_ENV !== "production";
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Records a v0.1.0 boundary hint for non-`shape` levels in `meta.warnings`, and may emit a
|
|
22
|
+
* one-time-per-level `console.warn` in non-production environments.
|
|
23
|
+
*/
|
|
24
|
+
function applyPreviewLevelBoundaryHints(normalizeContext) {
|
|
25
|
+
const level = normalizeContext.options.level;
|
|
26
|
+
if (level === "shape") {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const message = formatPreviewOnlyWarningMessage(level);
|
|
30
|
+
if (!normalizeContext.warnings.includes(message)) {
|
|
31
|
+
normalizeContext.warnings.push(message);
|
|
32
|
+
}
|
|
33
|
+
if (!shouldEmitConsoleWarning()) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (warnedPreviewLevelsInProcess.has(level)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
warnedPreviewLevelsInProcess.add(level);
|
|
40
|
+
console.warn(message);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=level-preview-warning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-preview-warning.js","sourceRoot":"","sources":["../../src/observe/level-preview-warning.ts"],"names":[],"mappings":";;AAMA,sFAEC;AAED,0EAEC;AAaD,wEAmBC;AAzCD,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/D,qEAAqE;AACrE,SAAgB,qCAAqC;IACjD,4BAA4B,CAAC,KAAK,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,+BAA+B,CAAC,KAAqB;IACjE,OAAO,mCAAmC,KAAK,6HAA6H,CAAC;AACjL,CAAC;AAED,SAAS,wBAAwB;IAC7B,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,SAAgB,8BAA8B,CAAC,gBAAkC;IAC7E,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC;QAC9B,OAAO;IACX,CAAC;IACD,IAAI,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO;IACX,CAAC;IACD,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observe/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAS3D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectNodeStats = collectNodeStats;
|
|
4
|
+
const guards_1 = require("../ast/guards");
|
|
5
|
+
function collectNodeStats(node) {
|
|
6
|
+
const acc = {
|
|
7
|
+
nodeCount: 0,
|
|
8
|
+
maxDepth: 0,
|
|
9
|
+
andCount: 0,
|
|
10
|
+
orCount: 0,
|
|
11
|
+
};
|
|
12
|
+
walkNode(node, 1, acc);
|
|
13
|
+
return acc;
|
|
14
|
+
}
|
|
15
|
+
function walkNode(node, depth, acc) {
|
|
16
|
+
acc.nodeCount += 1;
|
|
17
|
+
acc.maxDepth = Math.max(acc.maxDepth, depth);
|
|
18
|
+
if ((0, guards_1.isLogicalNode)(node)) {
|
|
19
|
+
if (node.op === "$and") {
|
|
20
|
+
acc.andCount += 1;
|
|
21
|
+
}
|
|
22
|
+
if (node.op === "$or") {
|
|
23
|
+
acc.orCount += 1;
|
|
24
|
+
}
|
|
25
|
+
for (const child of node.children) {
|
|
26
|
+
walkNode(child, depth + 1, acc);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observe/metrics.ts"],"names":[],"mappings":";;AAIA,4CASC;AAbD,0CAA8C;AAI9C,SAAgB,gBAAgB,CAAC,IAAe;IAC5C,MAAM,GAAG,GAAc;QACnB,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;KACb,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,IAAe,EAAE,KAAa,EAAE,GAAc;IAC5D,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;IACnB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,IAAA,sBAAa,EAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;YACrB,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YACpB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NormalizeContext } from "../normalize-context";
|
|
2
|
+
export declare function addWarning(normalizeContext: NormalizeContext, message: string): void;
|
|
3
|
+
export declare function markRuleApplied(normalizeContext: NormalizeContext, ruleId: string): void;
|
|
4
|
+
export declare function markRuleSkipped(normalizeContext: NormalizeContext, ruleId: string, reason?: string): void;
|
|
5
|
+
export declare function bailout(normalizeContext: NormalizeContext, reason: string): void;
|
|
6
|
+
//# sourceMappingURL=warnings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../src/observe/warnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,wBAAgB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKpF;AAED,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAExF;AAED,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAEzG;AAED,wBAAgB,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIhF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addWarning = addWarning;
|
|
4
|
+
exports.markRuleApplied = markRuleApplied;
|
|
5
|
+
exports.markRuleSkipped = markRuleSkipped;
|
|
6
|
+
exports.bailout = bailout;
|
|
7
|
+
function addWarning(normalizeContext, message) {
|
|
8
|
+
if (!normalizeContext.options.observe.collectWarnings) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
normalizeContext.warnings.push(message);
|
|
12
|
+
}
|
|
13
|
+
function markRuleApplied(normalizeContext, ruleId) {
|
|
14
|
+
normalizeContext.appliedRules.push(ruleId);
|
|
15
|
+
}
|
|
16
|
+
function markRuleSkipped(normalizeContext, ruleId, reason) {
|
|
17
|
+
normalizeContext.skippedRules.push(reason ? `${ruleId}: ${reason}` : ruleId);
|
|
18
|
+
}
|
|
19
|
+
function bailout(normalizeContext, reason) {
|
|
20
|
+
normalizeContext.bailedOut = true;
|
|
21
|
+
normalizeContext.bailoutReason = reason;
|
|
22
|
+
addWarning(normalizeContext, `bailout: ${reason}`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnings.js","sourceRoot":"","sources":["../../src/observe/warnings.ts"],"names":[],"mappings":";;AAEA,gCAKC;AAED,0CAEC;AAED,0CAEC;AAED,0BAIC;AAnBD,SAAgB,UAAU,CAAC,gBAAkC,EAAE,OAAe;IAC1E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACpD,OAAO;IACX,CAAC;IACD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,eAAe,CAAC,gBAAkC,EAAE,MAAc;IAC9E,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,eAAe,CAAC,gBAAkC,EAAE,MAAc,EAAE,MAAe;IAC/F,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,SAAgB,OAAO,CAAC,gBAAkC,EAAE,MAAc;IACtE,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,aAAa,GAAG,MAAM,CAAC;IACxC,UAAU,CAAC,gBAAgB,EAAE,YAAY,MAAM,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Selector } from "../types";
|
|
2
|
+
import type { SelectorAST } from "../ast/types";
|
|
3
|
+
/**
|
|
4
|
+
* AST → Mongo Selector 纯直译,不修改结构(结构由 canonicalize 保证)。
|
|
5
|
+
*/
|
|
6
|
+
export declare function compileSelector(ast: SelectorAST): Selector;
|
|
7
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/operations/compile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,cAAc,CAAC;AAWhE;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CAkC1D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.compileSelector = compileSelector;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
function isEmptyObject(value) {
|
|
6
|
+
return (typeof value === "object" &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
!Array.isArray(value) &&
|
|
9
|
+
Object.keys(value).length === 0);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* AST → Mongo Selector 纯直译,不修改结构(结构由 canonicalize 保证)。
|
|
13
|
+
*/
|
|
14
|
+
function compileSelector(ast) {
|
|
15
|
+
switch (ast.type) {
|
|
16
|
+
case "true":
|
|
17
|
+
return {};
|
|
18
|
+
case "false":
|
|
19
|
+
return types_1.IMPOSSIBLE_SELECTOR;
|
|
20
|
+
case "field":
|
|
21
|
+
return { [ast.field]: compileFieldConditions(ast.conditions) };
|
|
22
|
+
case "logical": {
|
|
23
|
+
if (ast.op === "$and") {
|
|
24
|
+
const compiled = [];
|
|
25
|
+
for (const child of ast.children) {
|
|
26
|
+
const c = compileSelector(child);
|
|
27
|
+
if (!isEmptyObject(c)) {
|
|
28
|
+
compiled.push(c);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (compiled.length === 0) {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
if (compiled.length === 1) {
|
|
35
|
+
return compiled[0];
|
|
36
|
+
}
|
|
37
|
+
return { $and: compiled };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
[ast.op]: ast.children.map((c) => compileSelector(c)),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
default:
|
|
44
|
+
throw new Error("Unknown AST node type: " + (ast && typeof ast === "object" && "type" in ast ? ast.type : String(ast)));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 将已规范化的 FieldCondition[] 编译为 Mongo 字段值(字面量或 { $op: value })。
|
|
49
|
+
* 条件合并与 $eq/$in 规范化由 fieldConditionNormalize 在 AST 层完成,此处仅做直译。
|
|
50
|
+
*
|
|
51
|
+
* **不变量(前置条件)**:同一 `op` 在 `conditions` 中至多出现一次。
|
|
52
|
+
* 若违反,对象字面量赋值会静默覆盖;开发环境下会抛出以便尽早发现上游回归。
|
|
53
|
+
*/
|
|
54
|
+
function compileFieldConditions(conditions) {
|
|
55
|
+
if (conditions.length === 0) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (conditions.length === 1 && conditions[0].op === "$eq") {
|
|
59
|
+
return conditions[0].value;
|
|
60
|
+
}
|
|
61
|
+
const out = {};
|
|
62
|
+
for (const c of conditions) {
|
|
63
|
+
if (Object.prototype.hasOwnProperty.call(out, c.op)) {
|
|
64
|
+
throw new Error(`compileFieldConditions: duplicate operator "${c.op}" — upstream must merge or order uniquely`);
|
|
65
|
+
}
|
|
66
|
+
out[c.op] = c.value;
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/operations/compile.ts"],"names":[],"mappings":";;AAgBA,0CAkCC;AAjDD,oCAA+C;AAG/C,SAAS,aAAa,CAAC,KAAc;IACjC,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,MAAM,KAAK,CAAC,CAC5C,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAgB;IAC5C,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACP,OAAO,EAAE,CAAC;QACd,KAAK,OAAO;YACR,OAAO,2BAAmB,CAAC;QAC/B,KAAK,OAAO;YACR,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAc,CAAC;QAC/E,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAe,EAAE,CAAC;gBAChC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,EAAE,CAAC;gBACd,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAc,CAAC;YAC1C,CAAC;YACD,OAAO;gBACH,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;aAC5C,CAAC;QAClB,CAAC;QACD;YACI,MAAM,IAAI,KAAK,CACX,yBAAyB,GAAG,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAE,GAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAChI,CAAC;IACV,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,UAA4B;IACxD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACxD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACX,+CAA+C,CAAC,CAAC,EAAE,2CAA2C,CACjG,CAAC;QACN,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|