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.
Files changed (316) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +193 -0
  3. package/README.zh-CN.md +194 -0
  4. package/dist/ast/builders.d.ts +8 -0
  5. package/dist/ast/builders.d.ts.map +1 -0
  6. package/dist/ast/builders.js +27 -0
  7. package/dist/ast/builders.js.map +1 -0
  8. package/dist/ast/contains-opaque.d.ts +3 -0
  9. package/dist/ast/contains-opaque.d.ts.map +1 -0
  10. package/dist/ast/contains-opaque.js +14 -0
  11. package/dist/ast/contains-opaque.js.map +1 -0
  12. package/dist/ast/guards.d.ts +7 -0
  13. package/dist/ast/guards.d.ts.map +1 -0
  14. package/dist/ast/guards.js +23 -0
  15. package/dist/ast/guards.js.map +1 -0
  16. package/dist/ast/hash.d.ts +4 -0
  17. package/dist/ast/hash.d.ts.map +1 -0
  18. package/dist/ast/hash.js +67 -0
  19. package/dist/ast/hash.js.map +1 -0
  20. package/dist/ast/index.d.ts +6 -0
  21. package/dist/ast/index.d.ts.map +1 -0
  22. package/dist/ast/index.js +22 -0
  23. package/dist/ast/index.js.map +1 -0
  24. package/dist/ast/types.d.ts +28 -0
  25. package/dist/ast/types.d.ts.map +1 -0
  26. package/dist/ast/types.js +3 -0
  27. package/dist/ast/types.js.map +1 -0
  28. package/dist/ast/visitor.d.ts +3 -0
  29. package/dist/ast/visitor.d.ts.map +1 -0
  30. package/dist/ast/visitor.js +12 -0
  31. package/dist/ast/visitor.js.map +1 -0
  32. package/dist/common/types.d.ts +46 -0
  33. package/dist/common/types.d.ts.map +1 -0
  34. package/dist/common/types.js +3 -0
  35. package/dist/common/types.js.map +1 -0
  36. package/dist/compile/compile.d.ts +5 -0
  37. package/dist/compile/compile.d.ts.map +1 -0
  38. package/dist/compile/compile.js +69 -0
  39. package/dist/compile/compile.js.map +1 -0
  40. package/dist/compile-selector.d.ts +9 -0
  41. package/dist/compile-selector.d.ts.map +1 -0
  42. package/dist/compile-selector.js +14 -0
  43. package/dist/compile-selector.js.map +1 -0
  44. package/dist/conflict.d.ts +18 -0
  45. package/dist/conflict.d.ts.map +1 -0
  46. package/dist/conflict.js +30 -0
  47. package/dist/conflict.js.map +1 -0
  48. package/dist/core/canonicalize.d.ts +11 -0
  49. package/dist/core/canonicalize.d.ts.map +1 -0
  50. package/dist/core/canonicalize.js +104 -0
  51. package/dist/core/canonicalize.js.map +1 -0
  52. package/dist/core/conditions.d.ts +8 -0
  53. package/dist/core/conditions.d.ts.map +1 -0
  54. package/dist/core/conditions.js +282 -0
  55. package/dist/core/conditions.js.map +1 -0
  56. package/dist/core/conflicts-and-tighten.d.ts +15 -0
  57. package/dist/core/conflicts-and-tighten.d.ts.map +1 -0
  58. package/dist/core/conflicts-and-tighten.js +26 -0
  59. package/dist/core/conflicts-and-tighten.js.map +1 -0
  60. package/dist/core/conflicts.d.ts +14 -0
  61. package/dist/core/conflicts.d.ts.map +1 -0
  62. package/dist/core/conflicts.js +157 -0
  63. package/dist/core/conflicts.js.map +1 -0
  64. package/dist/core/constraint-propagation.d.ts +15 -0
  65. package/dist/core/constraint-propagation.d.ts.map +1 -0
  66. package/dist/core/constraint-propagation.js +93 -0
  67. package/dist/core/constraint-propagation.js.map +1 -0
  68. package/dist/core/field-condition-normalize.d.ts +22 -0
  69. package/dist/core/field-condition-normalize.d.ts.map +1 -0
  70. package/dist/core/field-condition-normalize.js +225 -0
  71. package/dist/core/field-condition-normalize.js.map +1 -0
  72. package/dist/core/index.d.ts +6 -0
  73. package/dist/core/index.d.ts.map +1 -0
  74. package/dist/core/index.js +14 -0
  75. package/dist/core/index.js.map +1 -0
  76. package/dist/core/normalize.d.ts +8 -0
  77. package/dist/core/normalize.d.ts.map +1 -0
  78. package/dist/core/normalize.js +44 -0
  79. package/dist/core/normalize.js.map +1 -0
  80. package/dist/core/operators.d.ts +11 -0
  81. package/dist/core/operators.d.ts.map +1 -0
  82. package/dist/core/operators.js +26 -0
  83. package/dist/core/operators.js.map +1 -0
  84. package/dist/core/predicate-merge.d.ts +9 -0
  85. package/dist/core/predicate-merge.d.ts.map +1 -0
  86. package/dist/core/predicate-merge.js +105 -0
  87. package/dist/core/predicate-merge.js.map +1 -0
  88. package/dist/core/predicateMerge.d.ts +17 -0
  89. package/dist/core/predicateMerge.d.ts.map +1 -0
  90. package/dist/core/predicateMerge.js +57 -0
  91. package/dist/core/predicateMerge.js.map +1 -0
  92. package/dist/core/simplify.d.ts +11 -0
  93. package/dist/core/simplify.d.ts.map +1 -0
  94. package/dist/core/simplify.js +128 -0
  95. package/dist/core/simplify.js.map +1 -0
  96. package/dist/core/stable-structural-key.d.ts +7 -0
  97. package/dist/core/stable-structural-key.d.ts.map +1 -0
  98. package/dist/core/stable-structural-key.js +71 -0
  99. package/dist/core/stable-structural-key.js.map +1 -0
  100. package/dist/core/utils.d.ts +16 -0
  101. package/dist/core/utils.d.ts.map +1 -0
  102. package/dist/core/utils.js +109 -0
  103. package/dist/core/utils.js.map +1 -0
  104. package/dist/flatten/flatten.d.ts +43 -0
  105. package/dist/flatten/flatten.d.ts.map +1 -0
  106. package/dist/flatten/flatten.js +68 -0
  107. package/dist/flatten/flatten.js.map +1 -0
  108. package/dist/flatten/index.d.ts +2 -0
  109. package/dist/flatten/index.d.ts.map +1 -0
  110. package/dist/flatten/index.js +10 -0
  111. package/dist/flatten/index.js.map +1 -0
  112. package/dist/flatten.d.ts +43 -0
  113. package/dist/flatten.d.ts.map +1 -0
  114. package/dist/flatten.js +68 -0
  115. package/dist/flatten.js.map +1 -0
  116. package/dist/index.d.ts +4 -0
  117. package/dist/index.d.ts.map +1 -0
  118. package/dist/index.js +8 -0
  119. package/dist/index.js.map +1 -0
  120. package/dist/merge-ops.d.ts +33 -0
  121. package/dist/merge-ops.d.ts.map +1 -0
  122. package/dist/merge-ops.js +52 -0
  123. package/dist/merge-ops.js.map +1 -0
  124. package/dist/normalize-context.d.ts +16 -0
  125. package/dist/normalize-context.d.ts.map +1 -0
  126. package/dist/normalize-context.js +19 -0
  127. package/dist/normalize-context.js.map +1 -0
  128. package/dist/normalize.d.ts +6 -0
  129. package/dist/normalize.d.ts.map +1 -0
  130. package/dist/normalize.js +122 -0
  131. package/dist/normalize.js.map +1 -0
  132. package/dist/observe/diff.d.ts +7 -0
  133. package/dist/observe/diff.d.ts.map +1 -0
  134. package/dist/observe/diff.js +15 -0
  135. package/dist/observe/diff.js.map +1 -0
  136. package/dist/observe/level-boundary-hints.d.ts +11 -0
  137. package/dist/observe/level-boundary-hints.d.ts.map +1 -0
  138. package/dist/observe/level-boundary-hints.js +42 -0
  139. package/dist/observe/level-boundary-hints.js.map +1 -0
  140. package/dist/observe/level-preview-warning.d.ts +11 -0
  141. package/dist/observe/level-preview-warning.d.ts.map +1 -0
  142. package/dist/observe/level-preview-warning.js +42 -0
  143. package/dist/observe/level-preview-warning.js.map +1 -0
  144. package/dist/observe/metrics.d.ts +4 -0
  145. package/dist/observe/metrics.d.ts.map +1 -0
  146. package/dist/observe/metrics.js +30 -0
  147. package/dist/observe/metrics.js.map +1 -0
  148. package/dist/observe/warnings.d.ts +6 -0
  149. package/dist/observe/warnings.d.ts.map +1 -0
  150. package/dist/observe/warnings.js +24 -0
  151. package/dist/observe/warnings.js.map +1 -0
  152. package/dist/operations/compile.d.ts +7 -0
  153. package/dist/operations/compile.d.ts.map +1 -0
  154. package/dist/operations/compile.js +70 -0
  155. package/dist/operations/compile.js.map +1 -0
  156. package/dist/operations/conflicts-and-tighten.d.ts +29 -0
  157. package/dist/operations/conflicts-and-tighten.d.ts.map +1 -0
  158. package/dist/operations/conflicts-and-tighten.js +40 -0
  159. package/dist/operations/conflicts-and-tighten.js.map +1 -0
  160. package/dist/operations/conflicts.d.ts +28 -0
  161. package/dist/operations/conflicts.d.ts.map +1 -0
  162. package/dist/operations/conflicts.js +216 -0
  163. package/dist/operations/conflicts.js.map +1 -0
  164. package/dist/operations/conflictsAndTighten.d.ts +29 -0
  165. package/dist/operations/conflictsAndTighten.d.ts.map +1 -0
  166. package/dist/operations/conflictsAndTighten.js +40 -0
  167. package/dist/operations/conflictsAndTighten.js.map +1 -0
  168. package/dist/operations/merge.d.ts +18 -0
  169. package/dist/operations/merge.d.ts.map +1 -0
  170. package/dist/operations/merge.js +266 -0
  171. package/dist/operations/merge.js.map +1 -0
  172. package/dist/operations/parse.d.ts +20 -0
  173. package/dist/operations/parse.d.ts.map +1 -0
  174. package/dist/operations/parse.js +128 -0
  175. package/dist/operations/parse.js.map +1 -0
  176. package/dist/ops/compile-selector.d.ts +9 -0
  177. package/dist/ops/compile-selector.d.ts.map +1 -0
  178. package/dist/ops/compile-selector.js +14 -0
  179. package/dist/ops/compile-selector.js.map +1 -0
  180. package/dist/ops/index.d.ts +4 -0
  181. package/dist/ops/index.d.ts.map +1 -0
  182. package/dist/ops/index.js +14 -0
  183. package/dist/ops/index.js.map +1 -0
  184. package/dist/ops/merge-ops.d.ts +33 -0
  185. package/dist/ops/merge-ops.d.ts.map +1 -0
  186. package/dist/ops/merge-ops.js +52 -0
  187. package/dist/ops/merge-ops.js.map +1 -0
  188. package/dist/ops/parse-selector.d.ts +18 -0
  189. package/dist/ops/parse-selector.d.ts.map +1 -0
  190. package/dist/ops/parse-selector.js +29 -0
  191. package/dist/ops/parse-selector.js.map +1 -0
  192. package/dist/optimize.d.ts +18 -0
  193. package/dist/optimize.d.ts.map +1 -0
  194. package/dist/optimize.js +33 -0
  195. package/dist/optimize.js.map +1 -0
  196. package/dist/options/constants.d.ts +6 -0
  197. package/dist/options/constants.d.ts.map +1 -0
  198. package/dist/options/constants.js +72 -0
  199. package/dist/options/constants.js.map +1 -0
  200. package/dist/options/resolve.d.ts +3 -0
  201. package/dist/options/resolve.d.ts.map +1 -0
  202. package/dist/options/resolve.js +35 -0
  203. package/dist/options/resolve.js.map +1 -0
  204. package/dist/options/types.d.ts +2 -0
  205. package/dist/options/types.d.ts.map +1 -0
  206. package/dist/options/types.js +3 -0
  207. package/dist/options/types.js.map +1 -0
  208. package/dist/parse/parse.d.ts +4 -0
  209. package/dist/parse/parse.d.ts.map +1 -0
  210. package/dist/parse/parse.js +114 -0
  211. package/dist/parse/parse.js.map +1 -0
  212. package/dist/parse/plain-object.d.ts +2 -0
  213. package/dist/parse/plain-object.d.ts.map +1 -0
  214. package/dist/parse/plain-object.js +7 -0
  215. package/dist/parse/plain-object.js.map +1 -0
  216. package/dist/parse-selector.d.ts +18 -0
  217. package/dist/parse-selector.d.ts.map +1 -0
  218. package/dist/parse-selector.js +29 -0
  219. package/dist/parse-selector.js.map +1 -0
  220. package/dist/passes/canonicalize.d.ts +4 -0
  221. package/dist/passes/canonicalize.d.ts.map +1 -0
  222. package/dist/passes/canonicalize.js +40 -0
  223. package/dist/passes/canonicalize.js.map +1 -0
  224. package/dist/passes/normalize-predicate.d.ts +4 -0
  225. package/dist/passes/normalize-predicate.d.ts.map +1 -0
  226. package/dist/passes/normalize-predicate.js +57 -0
  227. package/dist/passes/normalize-predicate.js.map +1 -0
  228. package/dist/passes/normalize-shape.d.ts +4 -0
  229. package/dist/passes/normalize-shape.d.ts.map +1 -0
  230. package/dist/passes/normalize-shape.js +37 -0
  231. package/dist/passes/normalize-shape.js.map +1 -0
  232. package/dist/passes/simplify.d.ts +4 -0
  233. package/dist/passes/simplify.d.ts.map +1 -0
  234. package/dist/passes/simplify.js +49 -0
  235. package/dist/passes/simplify.js.map +1 -0
  236. package/dist/prune/conflict.d.ts +18 -0
  237. package/dist/prune/conflict.d.ts.map +1 -0
  238. package/dist/prune/conflict.js +30 -0
  239. package/dist/prune/conflict.js.map +1 -0
  240. package/dist/prune/index.d.ts +3 -0
  241. package/dist/prune/index.d.ts.map +1 -0
  242. package/dist/prune/index.js +9 -0
  243. package/dist/prune/index.js.map +1 -0
  244. package/dist/prune/prune.d.ts +11 -0
  245. package/dist/prune/prune.d.ts.map +1 -0
  246. package/dist/prune/prune.js +19 -0
  247. package/dist/prune/prune.js.map +1 -0
  248. package/dist/prune.d.ts +11 -0
  249. package/dist/prune.d.ts.map +1 -0
  250. package/dist/prune.js +19 -0
  251. package/dist/prune.js.map +1 -0
  252. package/dist/rewrite.d.ts +27 -0
  253. package/dist/rewrite.d.ts.map +1 -0
  254. package/dist/rewrite.js +62 -0
  255. package/dist/rewrite.js.map +1 -0
  256. package/dist/rules/experimental/hoist-common-predicates-from-or.d.ts +5 -0
  257. package/dist/rules/experimental/hoist-common-predicates-from-or.d.ts.map +1 -0
  258. package/dist/rules/experimental/hoist-common-predicates-from-or.js +153 -0
  259. package/dist/rules/experimental/hoist-common-predicates-from-or.js.map +1 -0
  260. package/dist/rules/logical/detect-common-predicates-in-or.d.ts +5 -0
  261. package/dist/rules/logical/detect-common-predicates-in-or.d.ts.map +1 -0
  262. package/dist/rules/logical/detect-common-predicates-in-or.js +82 -0
  263. package/dist/rules/logical/detect-common-predicates-in-or.js.map +1 -0
  264. package/dist/rules/predicate/collapse-contradictions.d.ts +5 -0
  265. package/dist/rules/predicate/collapse-contradictions.d.ts.map +1 -0
  266. package/dist/rules/predicate/collapse-contradictions.js +45 -0
  267. package/dist/rules/predicate/collapse-contradictions.js.map +1 -0
  268. package/dist/rules/predicate/dedupe-same-field-predicates.d.ts +5 -0
  269. package/dist/rules/predicate/dedupe-same-field-predicates.d.ts.map +1 -0
  270. package/dist/rules/predicate/dedupe-same-field-predicates.js +33 -0
  271. package/dist/rules/predicate/dedupe-same-field-predicates.js.map +1 -0
  272. package/dist/rules/predicate/merge-comparable-predicates.d.ts +5 -0
  273. package/dist/rules/predicate/merge-comparable-predicates.d.ts.map +1 -0
  274. package/dist/rules/predicate/merge-comparable-predicates.js +30 -0
  275. package/dist/rules/predicate/merge-comparable-predicates.js.map +1 -0
  276. package/dist/rules/predicate/merge-predicates-internal.d.ts +7 -0
  277. package/dist/rules/predicate/merge-predicates-internal.d.ts.map +1 -0
  278. package/dist/rules/predicate/merge-predicates-internal.js +186 -0
  279. package/dist/rules/predicate/merge-predicates-internal.js.map +1 -0
  280. package/dist/rules/shape/collapse-single-child-logical.d.ts +5 -0
  281. package/dist/rules/shape/collapse-single-child-logical.d.ts.map +1 -0
  282. package/dist/rules/shape/collapse-single-child-logical.js +20 -0
  283. package/dist/rules/shape/collapse-single-child-logical.js.map +1 -0
  284. package/dist/rules/shape/dedupe-logical-children.d.ts +6 -0
  285. package/dist/rules/shape/dedupe-logical-children.d.ts.map +1 -0
  286. package/dist/rules/shape/dedupe-logical-children.js +37 -0
  287. package/dist/rules/shape/dedupe-logical-children.js.map +1 -0
  288. package/dist/rules/shape/flatten-logical.d.ts +6 -0
  289. package/dist/rules/shape/flatten-logical.d.ts.map +1 -0
  290. package/dist/rules/shape/flatten-logical.js +37 -0
  291. package/dist/rules/shape/flatten-logical.js.map +1 -0
  292. package/dist/rules/shape/remove-empty-logical.d.ts +5 -0
  293. package/dist/rules/shape/remove-empty-logical.d.ts.map +1 -0
  294. package/dist/rules/shape/remove-empty-logical.js +21 -0
  295. package/dist/rules/shape/remove-empty-logical.js.map +1 -0
  296. package/dist/types.d.ts +70 -0
  297. package/dist/types.d.ts.map +1 -0
  298. package/dist/types.js +8 -0
  299. package/dist/types.js.map +1 -0
  300. package/dist/utils/compare-values.d.ts +6 -0
  301. package/dist/utils/compare-values.d.ts.map +1 -0
  302. package/dist/utils/compare-values.js +31 -0
  303. package/dist/utils/compare-values.js.map +1 -0
  304. package/dist/utils/deep-equal.d.ts +2 -0
  305. package/dist/utils/deep-equal.d.ts.map +1 -0
  306. package/dist/utils/deep-equal.js +30 -0
  307. package/dist/utils/deep-equal.js.map +1 -0
  308. package/dist/utils/is-opaque.d.ts +4 -0
  309. package/dist/utils/is-opaque.d.ts.map +1 -0
  310. package/dist/utils/is-opaque.js +42 -0
  311. package/dist/utils/is-opaque.js.map +1 -0
  312. package/dist/utils/stable-sort.d.ts +2 -0
  313. package/dist/utils/stable-sort.d.ts.map +1 -0
  314. package/dist/utils/stable-sort.js +16 -0
  315. package/dist/utils/stable-sort.js.map +1 -0
  316. 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,4 @@
1
+ import type { QueryNode } from "../ast/types";
2
+ import type { NodeStats } from "../types";
3
+ export declare function collectNodeStats(node: QueryNode): NodeStats;
4
+ //# sourceMappingURL=metrics.d.ts.map
@@ -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"}