grafeo-ogm 1.7.4 → 1.8.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 (40) hide show
  1. package/CHANGELOG.md +170 -0
  2. package/dist/cjs/compilers/selection.compiler.d.ts +13 -3
  3. package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -1
  4. package/dist/cjs/compilers/selection.compiler.js +29 -6
  5. package/dist/cjs/compilers/selection.compiler.js.map +1 -1
  6. package/dist/cjs/compilers/where.compiler.d.ts +9 -0
  7. package/dist/cjs/compilers/where.compiler.d.ts.map +1 -1
  8. package/dist/cjs/compilers/where.compiler.js +65 -14
  9. package/dist/cjs/compilers/where.compiler.js.map +1 -1
  10. package/dist/cjs/execution/result-mapper.d.ts.map +1 -1
  11. package/dist/cjs/execution/result-mapper.js +17 -3
  12. package/dist/cjs/execution/result-mapper.js.map +1 -1
  13. package/dist/cjs/ogm.d.ts +12 -0
  14. package/dist/cjs/ogm.d.ts.map +1 -1
  15. package/dist/cjs/ogm.js +2 -0
  16. package/dist/cjs/ogm.js.map +1 -1
  17. package/dist/cjs/utils/validation.d.ts +7 -0
  18. package/dist/cjs/utils/validation.d.ts.map +1 -1
  19. package/dist/cjs/utils/validation.js +9 -0
  20. package/dist/cjs/utils/validation.js.map +1 -1
  21. package/dist/esm/compilers/selection.compiler.d.ts +13 -3
  22. package/dist/esm/compilers/selection.compiler.d.ts.map +1 -1
  23. package/dist/esm/compilers/selection.compiler.js +29 -6
  24. package/dist/esm/compilers/selection.compiler.js.map +1 -1
  25. package/dist/esm/compilers/where.compiler.d.ts +9 -0
  26. package/dist/esm/compilers/where.compiler.d.ts.map +1 -1
  27. package/dist/esm/compilers/where.compiler.js +65 -14
  28. package/dist/esm/compilers/where.compiler.js.map +1 -1
  29. package/dist/esm/execution/result-mapper.d.ts.map +1 -1
  30. package/dist/esm/execution/result-mapper.js +17 -3
  31. package/dist/esm/execution/result-mapper.js.map +1 -1
  32. package/dist/esm/ogm.d.ts +12 -0
  33. package/dist/esm/ogm.d.ts.map +1 -1
  34. package/dist/esm/ogm.js +2 -0
  35. package/dist/esm/ogm.js.map +1 -1
  36. package/dist/esm/utils/validation.d.ts +7 -0
  37. package/dist/esm/utils/validation.d.ts.map +1 -1
  38. package/dist/esm/utils/validation.js +9 -0
  39. package/dist/esm/utils/validation.js.map +1 -1
  40. package/package.json +3 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,175 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.8.0 (2026-05-05)
4
+
5
+ > Performance release. Three Tier 4 hot-path fixes from the audit landed
6
+ > after measurement against a new dev-only `mitata` benchmark harness.
7
+ > Two candidate fixes (cache dedup, mutation params spread) didn't clear
8
+ > the 5% acceptance threshold and were reverted. **No behaviour changes
9
+ > — semantics are identical to 1.7.5.** Stored-property queries, NLS
10
+ > policy enforcement, code-generation output, and emitted Cypher are
11
+ > all byte-for-byte equivalent to 1.7.5 for the same inputs.
12
+
13
+ ### Headline gains
14
+
15
+ The biggest absolute time savings per call (`avg`, mitata, single host):
16
+
17
+ | Hot path | 1.7.5 | 1.8.0 | Saved | Δ |
18
+ |---|---|---|---|---|
19
+ | Result mapping — 10 nested reviews + 5 tags row | **7.56 µs** | **6.42 µs** | 1.14 µs | **−15%** |
20
+ | Result mapping — mixed types + nested object | 894 ns | **735 ns** | 159 ns | **−18%** |
21
+ | Result mapping — pure scalar map | 185 ns | **119 ns** | 66 ns | **−36%** |
22
+ | WHERE compile — deep AND/OR/NOT nesting | **3.66 µs** | **3.11 µs** | 550 ns | **−15%** |
23
+ | Selection compile — deep (multi-rel + connection) | **2.69 µs** | **2.26 µs** | 428 ns | **−16%** |
24
+ | Selection compile — nested (1 level rels) | 1.11 µs | **940 ns** | 172 ns | **−16%** |
25
+ | Selection compile — simple `{ id title }` | 151 ns | **120 ns** | 32 ns | **−21%** |
26
+ | WHERE compile — connection (node + edge) | 1.30 µs | **1.21 µs** | 99 ns | **−8%** |
27
+ | `escapeIdentifier` (no-backticks fast path) | 19 ns | **1.1 ns** | 18 ns | **−94%** |
28
+
29
+ ### What got faster — and why
30
+
31
+ #### 1. `ResultMapper.convertNeo4jTypes` — `Object.entries` → `for...in` (fix E)
32
+
33
+ Pre-1.8.0 the plain-object branch allocated a fresh `[key, value][]` pair array per nested object visit (via `Object.entries`). For a realistic 10-row relationship result with nested children, that's 32 allocations per Cypher row — multiplied by every row in every result. Switched to `for...in` + `Object.prototype.hasOwnProperty.call`. The `Object.create(null)` defensive guard against prototype pollution is preserved.
34
+
35
+ ```
36
+ 1.7.5 1.8.0 Saved Δ
37
+ pure scalar map 184.5 ns 118.5 ns 66.0 ns −36%
38
+ single Neo4j Integer (safe) 145.4 ns 134.4 ns 11.0 ns −8%
39
+ mixed types + nested object 894.0 ns 735.0 ns 159.0 ns −18%
40
+ nested rel array (10 + 5 children) 7.56 µs 6.42 µs 1.14 µs −15%
41
+ ```
42
+
43
+ #### 2. `escapeIdentifier` fast path (fix F)
44
+
45
+ `escapeIdentifier` is called dozens of times per Cypher emit (every relationship type, every label, every property name). Pre-1.8.0 it unconditionally ran a regex-replace + intermediate string allocation, even though identifiers in well-formed schemas effectively never contain backticks. Added a single `indexOf('` ` `')` check before the regex; the >99.99% case now returns the wrapped string directly.
46
+
47
+ The direct microbenchmark went from 19 ns to 1.1 ns (−94%) — V8 effectively inlines the fast path to no-op cost. The real win is the cascade through every code path that calls `escapeIdentifier` transitively:
48
+
49
+ ```
50
+ 1.7.5 1.8.0 Saved Δ
51
+ compile simple { id title } 151.2 ns 119.7 ns 31.6 ns −21%
52
+ compile nested (1 level rels) 1.11 µs 940 ns 172.3 ns −16%
53
+ compile deep (multi-rel + conn) 2.69 µs 2.26 µs 428.4 ns −16%
54
+ deep logical AND/OR/NOT 3.66 µs 3.11 µs 549.8 ns −15%
55
+ relationship _SOME inner where 735.5 ns 698.1 ns 37.3 ns −5%
56
+ connection where (node + edge) 1.30 µs 1.21 µs 99.0 ns −8%
57
+ ```
58
+
59
+ The slow path (identifier WITH backticks) is unchanged — still routes through the original regex.
60
+
61
+ #### 3. `WhereCompiler.compileConditions` shared params accumulator (fix C)
62
+
63
+ `compileConditions` is recursive — `AND` / `OR` / `NOT` branches recurse into themselves with smaller sub-objects. Pre-1.8.0 every recursion frame allocated a fresh `{}` Map and merged via `Object.assign` on the way back up. For a 5-level deep `AND`/`OR`/`NOT` predicate that's 5 fresh objects + 5 merge walks per compile. The recursive paths now thread the parent's params Map as a shared accumulator; leaf scalar conditions write directly into the owner.
64
+
65
+ ```
66
+ 1.7.5 1.8.0 Saved Δ
67
+ deep logical AND/OR/NOT 3.66 µs 3.11 µs 549.8 ns −15%
68
+ ```
69
+
70
+ The public WhereCompiler API surface is unchanged — `paramsTarget` is an optional internal parameter; external callers keep the old contract.
71
+
72
+ ### Real-world impact
73
+
74
+ For a typical paginated query (`Book.find({ where, select: { id, title, hasReviews { ... } } })` returning 50 rows):
75
+
76
+ | Stage | 1.7.5 | 1.8.0 | Saved per request |
77
+ |---|---|---|---|
78
+ | WHERE compile (mixed operators) | 1.96 µs | 1.86 µs | 100 ns |
79
+ | Selection compile (cache hit) | 28 ns | 28 ns | — |
80
+ | Result mapping (50 × mixed-types row) | 44.7 µs | 36.8 µs | 7.9 µs |
81
+ | **Total per request** | **≈46.7 µs** | **≈38.7 µs** | **≈8 µs** |
82
+
83
+ Multiplied by sustained load:
84
+
85
+ | QPS | Saved per second | CPU core equivalent |
86
+ |---|---|---|
87
+ | 1,000 | 8 ms | 0.8% of one core |
88
+ | 10,000 | 80 ms | **8% of one core** |
89
+ | 50,000 | 400 ms | **40% of one core liberated** |
90
+
91
+ For result-heavy workloads (1000 rows × nested relationship array): **~1.14 ms saved per query** at the OGM layer alone.
92
+
93
+ ### Node-Level Security (NLS) policy hot path
94
+
95
+ Policy-enabled queries got modest gains. Simple policies are dominated by the inherent allocation cost of `when(ctx)` invocation + partial allocation + AND-stitch — none of the Tier 4 fixes target those. Nested-`when` policies see the recursion benefit from fix C.
96
+
97
+ | Policy shape | 1.7.5 | 1.8.0 | Saved | Δ |
98
+ |---|---|---|---|---|
99
+ | User where, no policy (baseline) | 1.96 µs | 1.89 µs | 71 ns | −3.6% |
100
+ | + single permissive (flat `when`) | 2.28 µs | 2.25 µs | 28 ns | −1.2% 🟡 |
101
+ | + two permissives (OR-grant) | 3.00 µs | 2.95 µs | 54 ns | −1.8% 🟡 |
102
+ | + permissive AND restrictive | 2.93 µs | 2.88 µs | 46 ns | −1.6% 🟡 |
103
+ | + nested AND/OR permissive (deep `when`) | **5.09 µs** | **4.65 µs** | 442 ns | **−8.7%** 🟢 |
104
+ | + cypher escape hatch fragment | 2.31 µs | 2.28 µs | 35 ns | −1.5% 🟡 |
105
+
106
+ **TL;DR for NLS users**: if your policies are simple (`when: ctx => ({ ownerId: ctx.userId })`) the gain is ≈30–50 ns per query — imperceptible. If your `when` returns nested `AND`/`OR` partials, expect ~440 ns per query saved. NLS-side optimization (caching `when()` results, plumbing the shared accumulator into `compilePolicyClause`) is tracked as Tier 4.5 follow-up work.
107
+
108
+ ### Rejected fixes (measured, didn't clear threshold)
109
+
110
+ Two Tier 4 candidates were applied, measured, and reverted because they didn't clear the 5% acceptance bar with no >2% regression elsewhere. Snapshots preserved under `bench/snapshots/fix-B.run*.json` and `fix-D.run*.json` for future reference:
111
+
112
+ - **B — Dedup `Model._selectionCache` and `SelectionCompiler.parseCache`.** Code-wise correct (one fewer Map.get per query), but the bench can't measure the affected path without a Model.find end-to-end benchmark with mock executor. Visible variance was JIT-level noise from the Model class shape shift, not a real regression. May be revisited if a Model.find end-to-end benchmark is added.
113
+ - **D — Mutate `whereResult.params` in place** in mutation compiler (3 sites). Showed unstable variance: `compileUpdate — simple SET` ranged from +2% to +25% across runs. The spread is one allocation per mutation (~50 ns range), and per-mutation cost is dominated by other work (label cache lookup, string concat) — savings too small to surface above noise.
114
+
115
+ ### Dev-only: `mitata` benchmark harness
116
+
117
+ A new `bench/` directory was added with the `mitata` benchmark library as a `devDependency`. **It is not shipped to npm consumers** — `bench/` is excluded from the package files manifest, the `dist/` build configs only include `src/`, and `mitata` is never imported by runtime code. End users see zero impact: identical `node_modules/grafeo-ogm` contents, identical bundle size.
118
+
119
+ The harness covers WhereCompiler, SelectionCompiler, ResultMapper, MutationCompiler, escapeIdentifier, and NLS policy paths. Snapshots in `bench/snapshots/` document the pre/post numbers behind every claim above. Run with `pnpm run bench` (rich text output) or `pnpm run bench -- --json` (machine-readable; strips per-iteration samples).
120
+
121
+ ### What's NOT in this release
122
+
123
+ The audit also flagged these — held back because they need more design:
124
+
125
+ - **NLS policy optimisations** (Tier 4.5): caching `when()` results by `ctxFingerprint`, threading the shared params accumulator through `compilePolicyClause`. Would close the 1–2% simple-policy gap.
126
+ - **Selection-cache dedup** (deferred fix B): re-evaluate after a Model.find end-to-end benchmark is added.
127
+ - **Bundle-size reduction** by separating the codegen entry point. Breaking change — needs a major version.
128
+
129
+ ### Test coverage
130
+
131
+ No semantic tests changed in this release — only perf code paths touched. 1358/1358 tests still pass. Lint clean, format clean, build clean.
132
+
133
+ ## 1.7.5 (2026-05-05)
134
+
135
+ > Tier 5 cleanups from the audit. Four small but useful fixes: a counter
136
+ > bug in `_SINGLE`, a DoS-guard cap on `AND` / `OR` array length, a real
137
+ > LRU eviction policy on the selection-set parse cache, and an opt-in
138
+ > strict mode that surfaces typo'd `where` field names. None of these
139
+ > change behaviour for code that wasn't reaching the broken paths;
140
+ > `strictWhere` is opt-in.
141
+
142
+ ### Fixed
143
+
144
+ - **`_SINGLE` quantifier no longer skips a parameter slot.** Pre-1.7.5 the `_SINGLE` case did `counter.count++` AFTER the inner compilation completed, leaving an unused index in the param namespace. With one inner condition (`$param1`), the next outer scalar landed on `$param3` instead of `$param2` — invisible to most queries but masking real collisions whenever a future compiler shared this counter. The extra increment is gone.
145
+ - **`AND` / `OR` arrays capped at 256 entries.** Each entry costs a recursion frame, a parameter slot, and a Cypher AST node, so a 100k-entry array compiles to a 100k-clause `WHERE` body — a practical DoS vector if user input ever flows into a logical array. Throws `OGMError` on overrun. The cap also applies inside connection-where logical operators.
146
+ - **`SelectionCompiler.parseCache` is now a real LRU.** Pre-1.7.5 the implementation was `if (size < 200) set(...)` — once saturated, every subsequent miss had to re-parse via `graphql.parse()` because nothing was ever inserted (and nothing was ever evicted to make room). Apps with high selection-set cardinality silently paid full parse cost on every request post-saturation. The new policy: on hit, `delete + set` (move to MRU); on full insert, evict the oldest entry (`Map.keys().next().value` — Maps preserve insertion order). Dedup with `Model._selectionCache` is deferred to Tier 4 / a future release.
147
+
148
+ ### Added
149
+
150
+ - **Opt-in `strictWhere` mode.** `OGMConfig.features.strictWhere = true` makes the where compiler throw `OGMError` when a `where` clause references a field name not declared on the target type — surfacing typos at the call site instead of silently returning empty results. Default is `false` to preserve existing behaviour. Recommended for new codebases:
151
+ ```ts
152
+ new OGM({
153
+ typeDefs,
154
+ driver,
155
+ features: { strictWhere: true },
156
+ });
157
+ ```
158
+ With strict mode off (the default), `where: { naem: 'Alice' }` continues to compile to `n.\`naem\` = $param0` — safe (escaped via `assertSafeIdentifier`) but silent. With strict mode on, the same call throws `OGMError: Unknown field "naem" in where clause.`
159
+
160
+ ### Test coverage
161
+
162
+ - `tests/where.compiler.spec.ts` — regressions for `_SINGLE` counter, `AND`/`OR` cap (above + at boundary), `strictWhere` on/off behaviour.
163
+ - `tests/selection.compiler.spec.ts` — regressions for real LRU eviction, including the "touched entry survives" property.
164
+ - 1350 → 1358 tests, all passing.
165
+
166
+ ### Out of scope (still deferred)
167
+
168
+ - `Model._selectionCache` and `SelectionCompiler.parseCache` deduplication — Tier 4 work, needs the perf benchmark harness.
169
+ - `generateTypes` emitter parallelisation — Tier 4, marginal win on schemas under 200 types.
170
+ - Bundle-size reduction by moving the generator to a separate entry point — breaking change, separate discussion.
171
+ - `escapeIdentifier` regex micro-optimisation — Tier 4 micro-opt territory.
172
+
3
173
  ## 1.7.4 (2026-05-05)
4
174
 
5
175
  > Tier 3 contract violations from the audit. Six fixes across mutations,
@@ -40,10 +40,20 @@ export interface SelectionNode {
40
40
  export declare class SelectionCompiler {
41
41
  private schema;
42
42
  private static readonly DEFAULT_MAX_DEPTH;
43
+ /** Maximum number of distinct parsed selection sets retained. */
44
+ private static readonly PARSE_CACHE_MAX_ENTRIES;
43
45
  /**
44
- * Cache of parsed selection sets capped at 200 entries.
45
- * No eviction — assumes bounded selection set variety (fixed set of
46
- * selectionSet strings used across resolvers). Stops adding after 200.
46
+ * Real LRU cache of parsed selection sets, capped at
47
+ * `PARSE_CACHE_MAX_ENTRIES`. Pre-1.7.5 the implementation was
48
+ * `if (size < 200) set(...)` — once saturated, every miss had to
49
+ * re-parse via `graphql.parse()` because nothing was ever inserted
50
+ * (and nothing was ever evicted to make room). Apps with high
51
+ * selection-set cardinality silently paid full parse cost on every
52
+ * request post-saturation. The new policy: on hit, delete + re-set
53
+ * (so the entry moves to the most-recently-used end of the Map's
54
+ * insertion-order iteration); on miss, evict the oldest entry
55
+ * (`Map.keys().next().value` — Maps preserve insertion order) before
56
+ * inserting the new one.
47
57
  */
48
58
  private parseCache;
49
59
  private whereCompiler?;
@@ -1 +1 @@
1
- {"version":3,"file":"selection.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/selection.compiler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAEjB,MAAM,kCAAkC,CAAC;AAO1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;IAC/B,mFAAmF;IACnF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAW1B,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAC9C;;;;OAIG;IACH,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAG5B,MAAM,EAAE,cAAc,EAC9B,aAAa,CAAC,EAAE,aAAa;IAK/B,8EAA8E;IAC9E,UAAU,IAAI,IAAI;IAIlB;;;;;;;;;OASG;IACH,OAAO,CACL,SAAS,EAAE,aAAa,EAAE,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,QAAQ,GAAE,MAA4C,EACtD,YAAY,GAAE,MAAU,EACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAChC;;;;;;;;;;OAUG;IACH,WAAW,GAAE,gBAAgB,GAAG,IAAW;IAC3C;;;;;;OAMG;IACH,aAAa,GAAE,mBAAmB,GAAG,IAAW,GAC/C,MAAM;IA2HT;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE;IA8BxD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0E3B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,6BAA6B;IA8ErC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqOzB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA2F1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IAoDxB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAoBvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAsC3B"}
1
+ {"version":3,"file":"selection.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/selection.compiler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EACL,gBAAgB,EAEjB,MAAM,kCAAkC,CAAC;AAO1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;IAC/B,mFAAmF;IACnF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;QAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAqB1B,OAAO,CAAC,MAAM;IApBhB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IAC9C,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IACtD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAG5B,MAAM,EAAE,cAAc,EAC9B,aAAa,CAAC,EAAE,aAAa;IAK/B,8EAA8E;IAC9E,UAAU,IAAI,IAAI;IAIlB;;;;;;;;;OASG;IACH,OAAO,CACL,SAAS,EAAE,aAAa,EAAE,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,QAAQ,GAAE,MAA4C,EACtD,YAAY,GAAE,MAAU,EACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAChC;;;;;;;;;;OAUG;IACH,WAAW,GAAE,gBAAgB,GAAG,IAAW;IAC3C;;;;;;OAMG;IACH,aAAa,GAAE,mBAAmB,GAAG,IAAW,GAC/C,MAAM;IA2HT;;;;;OAKG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE;IA4CxD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0E3B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,6BAA6B;IA8ErC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqOzB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;IA2F1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB;IAoDxB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAoBvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAsC3B"}
@@ -16,9 +16,17 @@ class SelectionCompiler {
16
16
  constructor(schema, whereCompiler) {
17
17
  this.schema = schema;
18
18
  /**
19
- * Cache of parsed selection sets capped at 200 entries.
20
- * No eviction — assumes bounded selection set variety (fixed set of
21
- * selectionSet strings used across resolvers). Stops adding after 200.
19
+ * Real LRU cache of parsed selection sets, capped at
20
+ * `PARSE_CACHE_MAX_ENTRIES`. Pre-1.7.5 the implementation was
21
+ * `if (size < 200) set(...)` — once saturated, every miss had to
22
+ * re-parse via `graphql.parse()` because nothing was ever inserted
23
+ * (and nothing was ever evicted to make room). Apps with high
24
+ * selection-set cardinality silently paid full parse cost on every
25
+ * request post-saturation. The new policy: on hit, delete + re-set
26
+ * (so the entry moves to the most-recently-used end of the Map's
27
+ * insertion-order iteration); on miss, evict the oldest entry
28
+ * (`Map.keys().next().value` — Maps preserve insertion order) before
29
+ * inserting the new one.
22
30
  */
23
31
  this.parseCache = new Map();
24
32
  this.whereCompiler = whereCompiler;
@@ -144,8 +152,13 @@ class SelectionCompiler {
144
152
  */
145
153
  parseSelectionSet(selectionSet) {
146
154
  const cached = this.parseCache.get(selectionSet);
147
- if (cached)
155
+ if (cached) {
156
+ // Touch the entry to mark it most-recently-used. Map insertion
157
+ // order is the LRU iteration order we rely on for eviction.
158
+ this.parseCache.delete(selectionSet);
159
+ this.parseCache.set(selectionSet, cached);
148
160
  return cached;
161
+ }
149
162
  const trimmed = selectionSet.trim();
150
163
  // Wrap in a dummy query so graphql parser can handle it
151
164
  const query = `query { dummy ${trimmed} }`;
@@ -163,8 +176,16 @@ class SelectionCompiler {
163
176
  if (dummyField.kind !== graphql_1.Kind.FIELD || !dummyField.selectionSet)
164
177
  return [];
165
178
  const result = this.convertSelectionSet(dummyField.selectionSet);
166
- if (this.parseCache.size < 200)
167
- this.parseCache.set(selectionSet, result);
179
+ // Real-LRU eviction: drop the oldest entry when the cache is full,
180
+ // then insert. Pre-1.7.5 we just stopped caching at saturation,
181
+ // forcing every subsequent miss to re-parse — a silent perf cliff
182
+ // for apps with high selection-set cardinality.
183
+ if (this.parseCache.size >= SelectionCompiler.PARSE_CACHE_MAX_ENTRIES) {
184
+ const oldestKey = this.parseCache.keys().next().value;
185
+ if (oldestKey !== undefined)
186
+ this.parseCache.delete(oldestKey);
187
+ }
188
+ this.parseCache.set(selectionSet, result);
168
189
  return result;
169
190
  }
170
191
  /**
@@ -695,4 +716,6 @@ class SelectionCompiler {
695
716
  }
696
717
  exports.SelectionCompiler = SelectionCompiler;
697
718
  SelectionCompiler.DEFAULT_MAX_DEPTH = 5;
719
+ /** Maximum number of distinct parsed selection sets retained. */
720
+ SelectionCompiler.PARSE_CACHE_MAX_ENTRIES = 200;
698
721
  //# sourceMappingURL=selection.compiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection.compiler.js","sourceRoot":"","sources":["../../../src/compilers/selection.compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection.compiler.js","sourceRoot":"","sources":["../../../src/compilers/selection.compiler.ts"],"names":[],"mappings":";;;AAAA,qCAOiB;AAEjB,sCAAqC;AAGrC,2CAAoE;AACpE,8EAG0C;AAC1C,oDAK6B;AA8B7B;;;;;GAKG;AACH,MAAa,iBAAiB;IAoB5B,YACU,MAAsB,EAC9B,aAA6B;QADrB,WAAM,GAAN,MAAM,CAAgB;QAjBhC;;;;;;;;;;;;WAYG;QACK,eAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAOtD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,8EAA8E;IAC9E,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO,CACL,SAA0B,EAC1B,OAAe,EACf,OAAuB,EACvB,WAAmB,iBAAiB,CAAC,iBAAiB,EACtD,eAAuB,CAAC,EACxB,MAAgC,EAChC,YAAgC;IAChC;;;;;;;;;;OAUG;IACH,cAAuC,IAAI;IAC3C;;;;;;OAMG;IACH,gBAA4C,IAAI;QAEhD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,OAAO,UAAU,CAAC;QAExD,uEAAuE;QACvE,wEAAwE;QACxE,mEAAmE;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,UAAU,GACd,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,CAAC,YAAY;gBACX,YAAY,CAAC,aAAa;gBAC1B,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,yEAAyE;QACzE,oEAAoE;QACpE,2DAA2D;QAC3D,sEAAsE;QACtE,sEAAsE;QACtE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,CAC3D,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,YAAY;oBAAE,KAAK,CAAC,IAAI,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,0EAA0E;gBAC1E,wEAAwE;gBACxE,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;oBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC5D,IAAI,YAAY;wBAAE,KAAK,CAAC,IAAI,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;oBAC5D,SAAS;gBACX,CAAC;gBAED,IAAA,iCAAoB,EAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;gBAExD,8DAA8D;gBAC9D,kEAAkE;gBAClE,mEAAmE;gBACnE,6DAA6D;gBAC7D,iEAAiE;gBACjE,uBAAuB;gBACvB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvD,IAAI,OAAO,EAAE,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBACjD,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,IAAA,6BAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;oBAC9D,CAAC;;wBACC,KAAK,CAAC,IAAI,CACR,GAAG,IAAA,6BAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAA,oDAA0B,EAChE,OAAO,CAAC,eAAe,EACvB,OAAO,CACR,EAAE,CACJ,CAAC;oBAEJ,SAAS;gBACX,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC,IAAI,IAAA,6BAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAC7C,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,aAAa,CACd,CAAC;gBACF,IAAI,gBAAgB;oBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC,CAAC;gBAEvD,SAAS;YACX,CAAC;YAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,yEAAyE;gBACzE,gEAAgE;gBAChE,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,6BAA6B,CACnD,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,aAAa,CACd,CAAC;oBACF,IAAI,UAAU;wBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC,CAAC;oBAC/D,SAAS;gBACX,CAAC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACxC,IAAI,EACJ,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,aAAa,CACd,CAAC;gBACF,IAAI,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC;gBAE7D,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,GAAG,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,YAAoB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,+DAA+D;YAC/D,4DAA4D;YAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACpC,wDAAwD;QACxD,MAAM,KAAK,GAAG,iBAAiB,OAAO,IAAI,CAAC;QAE3C,IAAI,GAAiB,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,iBAAQ,CAChB,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAI,CAAC,oBAAoB;YAAE,OAAO,EAAE,CAAC;QAExD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,IAAI,KAAK,cAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAEjE,mEAAmE;QACnE,gEAAgE;QAChE,kEAAkE;QAClE,gDAAgD;QAChD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,iBAAiB,CAAC,uBAAuB,EAAE,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACtD,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,YAA8B;QACxD,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC1C,2EAA2E;YAC3E,IAAI,GAAG,CAAC,IAAI,KAAK,cAAI,CAAC,eAAe,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,GAAyB,CAAC;gBAC3C,IAAI,QAAQ,CAAC,YAAY;oBACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC;wBAClE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;4BAChC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;4BAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrB,CAAC;gBAEL,SAAS;YACX,CAAC;YAED,IAAI,GAAG,CAAC,IAAI,KAAK,cAAI,CAAC,KAAK;gBAAE,SAAS;YACtC,MAAM,KAAK,GAAG,GAAgB,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAEnC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS;YAClC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEpB,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YACzC,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAEtD,MAAM,IAAI,GAAkB;gBAC1B,SAAS;gBACT,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK;gBACzB,QAAQ,EAAE,CAAC,WAAW;gBACtB,cAAc,EAAE,WAAW,IAAI,CAAC,YAAY;gBAC5C,YAAY;aACb,CAAC;YAEF,IAAI,WAAW,IAAI,KAAK,CAAC,YAAY;gBACnC,IAAI,YAAY;oBACd,+DAA+D;oBAC/D,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;;oBACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAEpE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,YAA8B,EAC9B,UAAyB;QAEzB,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,cAAI,CAAC,KAAK;gBAAE,SAAS;YACtC,MAAM,KAAK,GAAG,GAAgB,CAAC;YAE/B,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,YAAY;gBACpD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;oBACpD,IAAI,OAAO,CAAC,IAAI,KAAK,cAAI,CAAC,KAAK;wBAAE,SAAS;oBAC1C,MAAM,SAAS,GAAG,OAAoB,CAAC;oBAEvC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,SAAS,CAAC,YAAY;wBAC3D,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAC5C,SAAS,CAAC,YAAY,CACvB,CAAC;oBAEJ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,SAAS,CAAC,YAAY;wBACjE,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAChD,SAAS,CAAC,YAAY,CACvB,CAAC;gBACN,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,IAAmB,EACnB,SAAiB,EACjB,SAAyB,EACzB,QAAgB,EAChB,YAAoB,EACpB,MAAgC,EAChC,YAAgC,EAChC,gBAA4C,IAAI;QAEhD,IAAI,YAAY,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC;YAC9B,SAAS,EAAE,SAAS;YACpB,MAAM;YACN,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAClC,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,GAAG,CAAC,EAChB,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,CACd,CAAC;QAEF,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1C,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,MAAM;YACN,YAAY;YACZ,aAAa;YACb,YAAY,EAAE,iBAAiB,IAAI,CAAC,SAAS,GAAG;YAChD,SAAS,EAAE,IAAI,CAAC,iBAAiB;SAClC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,OAAO,GAAG,WAAW,MAAM,eAAe,GAAG,CAAC;QAExE,0CAA0C;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,QAAQ,aAAa,GAAG,CAAC;QAErD,yDAAyD;QACzD,4DAA4D;QAC5D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;iBAC1B,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC5B,IAAA,iCAAoB,EAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;gBAChD,mEAAmE;gBACnE,OAAO,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YAC5D,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,uBAAuB,aAAa,MAAM,QAAQ,IAAI,CAAC;QAChE,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,6BAA6B,CACnC,IAAmB,EACnB,OAAe,EACf,YAAsB,EACtB,QAAgB,EAChB,YAAoB,EACpB,MAAgC,EAChC,YAAgC,EAChC,gBAA4C,IAAI;QAEhD,IAAI,YAAY,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,SAAS,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,4DAA4D;YAC5D,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,UAAU,GAAG,IAAI,CAAC;YAEvC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACrC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAClC,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,GAAG,CAAC,EAChB,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,CACd,CAAC;YAEF,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC;gBAC9B,SAAS,EAAE,OAAO;gBAClB,MAAM;gBACN,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YAEH,0EAA0E;YAC1E,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAChD,IAAI;gBACJ,QAAQ;gBACR,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,aAAa;gBACb,YAAY,EAAE,iBAAiB,UAAU,SAAS,IAAI,CAAC,SAAS,GAAG;gBACnE,uDAAuD;gBACvD,uDAAuD;gBACvD,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;YAEH,4EAA4E;YAC5E,MAAM,aAAa,GAAG,UAAU;gBAC9B,CAAC,CAAC,SAAS,OAAO,GAAG,iBAAiB,MAAM,eAAe,IAAI;gBAC/D,CAAC,CAAC,IAAI,OAAO,GAAG,iBAAiB,MAAM,eAAe,GAAG,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAA,6BAAgB,EAAC,UAAU,CAAC,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,QAAQ,OAAO,IAAI,WAAW,SAAS,aAAa,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,OAAO,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,UAAU,MAAM,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,IAAmB,EACnB,SAAiB,EACjB,SAAyB,EACzB,QAAgB,EAChB,YAAoB,EACpB,MAAgC,EAChC,YAAgC,EAChC,gBAA4C,IAAI;QAEhD,IAAI,YAAY,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1C,2DAA2D;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,SAAS,GAAG,IAAA,wBAAgB,EAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC;YAC9B,SAAS,EAAE,SAAS;YACpB,MAAM;YACN,SAAS,EAAE,QAAQ;YACnB,OAAO;YACP,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,0BAA0B;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CACjC,IAAI,CAAC,QAAQ,EACb,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,GAAG,CAAC,EAChB,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,aAAa,CACd,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;YACzC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAA,6BAAgB,EAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;iBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,eAAe,OAAO,MAAM,UAAU,IAAI,CAAC,CAAC;YAC1D,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,oEAAoE;QACpE,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC7D,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;gBAChE,IAAA,iCAAoB,EAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;gBACxD,MAAM,SAAS,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACxD,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;gBAChC,QAAQ,CAAC,IAAI,CACX,GAAG,YAAY,KAAK,SAAS,IAAI,IAAA,6BAAgB,EAAC,KAAK,CAAC,EAAE,CAC3D,CAAC;gBACF,mEAAmE;gBACnE,aAAa,CAAC,IAAI,CAChB,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,CACjE,CAAC;YACJ,CAAC,CAAC,CAAC;QAEL,MAAM,QAAQ,GAAG,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE9C,yEAAyE;QACzE,wEAAwE;QACxE,gEAAgE;QAChE,uEAAuE;QACvE,iDAAiD;QACjD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,EAAE,GAAG,IAAI,CAAC,eAA0C,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,IAAA,0BAAa,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAA,0BAAa,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEjD,0DAA0D;YAC1D,4DAA4D;YAC5D,4DAA4D;YAC5D,6DAA6D;YAC7D,+CAA+C;YAC/C,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS;gBACrE,MAAM,IAAI,iBAAQ,CAChB,wDAAwD,IAAI,CAAC,SAAS,0BAA0B;oBAC9F,iGAAiG,CACpG,CAAC;YAEJ,kEAAkE;YAClE,2DAA2D;YAC3D,+DAA+D;YAC/D,wCAAwC;YACxC,MAAM,aAAa,GAAG,UAAU;gBAC9B,CAAC,CAAE,EAAE,CAAC,IAAgC;gBACtC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa;oBAC/C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,aAAa,GAAG,UAAU;gBAC9B,CAAC,CAAE,EAAE,CAAC,IAAgC;gBACtC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,WAAW,GAAG,aAAa;gBAC/B,CAAC,CAAE,EAAE,CAAC,QAAoC;gBAC1C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,WAAW,GAAG,aAAa;gBAC/B,CAAC,CAAE,EAAE,CAAC,QAAoC;gBAC1C,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,SAAS,GAAa,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE,CAAC;gBACpC,oEAAoE;gBACpE,wDAAwD;gBACxD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC;oBAC3C,IAAI;oBACJ,QAAQ;oBACR,SAAS;oBACT,MAAM;oBACN,YAAY;oBACZ,aAAa;oBACb,YAAY,EAAE,eAAe,IAAI,CAAC,SAAS,GAAG;oBAC9C,SAAS,EAAE,aAAa;iBACzB,CAAC,CAAC;gBACH,IAAI,YAAY;oBAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEvE,6DAA6D;gBAC7D,2DAA2D;gBAC3D,+DAA+D;gBAC/D,2DAA2D;gBAC3D,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBAC1C,IAAI;wBACJ,QAAQ;wBACR,SAAS;wBACT,MAAM;wBACN,YAAY;wBACZ,yDAAyD;wBACzD,+CAA+C;wBAC/C,aAAa,EAAE,IAAI;wBACnB,YAAY,EAAE,eAAe,IAAI,CAAC,SAAS,YAAY;wBACvD,SAAS,EAAE,WAAW;qBACvB,CAAC,CAAC;oBACH,IAAI,WAAW;wBACb,SAAS,CAAC,IAAI,CAAC,QAAQ,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACnE,CAAC;gBAED,YAAY;gBACZ,IAAI,aAAa,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;wBACzC,OAAO;wBACP,aAAa,EAAE,MAAM,CAAC,UAAU;wBAChC,SAAS,EAAE,aAAa;wBACxB,MAAM;wBACN,YAAY;wBACZ,YAAY,EAAE,eAAe,IAAI,CAAC,SAAS,QAAQ;qBACpD,CAAC,CAAC;oBACH,IAAI,YAAY;wBACd,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,qBAAqB;gBACrB,IAAI,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACrC,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;wBAC5C,OAAO;wBACP,aAAa,EAAE,MAAM,CAAC,UAAU;wBAChC,SAAS,EAAE,WAAW;wBACtB,MAAM;wBACN,YAAY;wBACZ,YAAY,EAAE,eAAe,IAAI,CAAC,SAAS,YAAY;qBACxD,CAAC,CAAC;oBACH,IAAI,eAAe;wBACjB,SAAS,CAAC,IAAI,CAAC,QAAQ,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,kEAAkE;gBAClE,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CACzC,aAAa,IAAI,EAAE,EACnB,QAAQ,EACR,MAAM,EACN,YAAY,CACb,CAAC;gBACF,IAAI,WAAW;oBAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;YAED,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS;YACxC,iEAAiE;YACjE,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,IAAI;gBACJ,QAAQ;gBACR,SAAS;gBACT,MAAM;gBACN,YAAY;gBACZ,aAAa;gBACb,YAAY,EAAE,eAAe,IAAI,CAAC,SAAS,GAAG;gBAC9C,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QAEL,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAC5B,OAAO,aAAa,OAAO,GAAG,WAAW,MAAM,QAAQ,KAAK,CAAC;QAE/D,wEAAwE;QACxE,8BAA8B;QAC9B,MAAM,eAAe,GACnB,cAAc,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC/D,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,uCAAuC,OAAO,GAAG,WAAW,MAAM,QAAQ,OAAO,aAAa,CAAC,IAAI,CACxG,IAAI,CACL,QAAQ,eAAe,KAAK,CAAC;IAChC,CAAC;IAED;;;;;;;;;OASG;IACK,kBAAkB,CAAC,IAS1B;QACC,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,SAAS,GACV,GAAG,IAAI,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACpD,uEAAuE;YACvE,4DAA4D;YAC5D,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;gBAChD,+DAA+D;gBAC/D,4CAA4C;gBAC5C,OAAO,EAAE,CAAC;YAEZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,kDAAkD;QAClD,MAAM,YAAY,GAAG,aAAa;YAChC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,YAAY,GAAoC,YAAY;YAChE,CAAC,CAAC;gBACE,GAAG,EAAE,aAAc,CAAC,GAAG;gBACvB,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,YAAY;gBACtB,cAAc,EAAE,aAAc,CAAC,cAAc;gBAC7C,QAAQ,EAAE,aAAc,CAAC,QAAQ;aAClC;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,oDAAoD;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CACzC,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;QAEF,8DAA8D;QAC9D,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,sBAAsB;YACtB,gEAAgE;YAChE,kEAAkE;YAClE,MAAM,eAAe,GACnB,YAAY;gBACZ,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC1B,iEAAiE;gBACjE,iEAAiE;gBACjE,gEAAgE;gBAChE,QAAQ;gBACR,IAAI,CAAC;YACP,IAAI,eAAe,IAAI,YAAY;gBACjC,MAAM,IAAI,iBAAQ,CAChB,cAAc,SAAS,CAAC,QAAQ,uCAAuC;oBACrE,+DAA+D,YAAY,KAAK;oBAChF,2EAA2E,CAC9E,CAAC;YACJ,MAAM,IAAI,iBAAQ,CAChB,aAAa,YAAY,yCAAyC;gBAChE,sGAAsG,CACzG,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,IAAA,wBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,CAAC;QACD,+DAA+D;QAC/D,IAAI,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;YAC5D,IAAA,wBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;;;OAUG;IACK,gBAAgB,CAAC,IAOxB;QACC,MAAM,EACJ,OAAO,EACP,aAAa,EACb,SAAS,EACT,MAAM,EACN,YAAY,EACZ,YAAY,GACb,GAAG,IAAI,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,YAAY,GAAmB;YACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,QAAQ;YACxB,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,EAAE;YAC/C,oBAAoB,EAAE,EAAE;SACzB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CACzC,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,CACb,CAAC;QAEF,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACnD,MAAM,IAAI,iBAAQ,CAChB,aAAa,YAAY,yCAAyC;gBAChE,2GAA2G,CAC9G,CAAC;QAEJ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,IAAA,wBAAW,EAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,OAAe,EAAE,OAAuB;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,OAAO,2BAA2B,OAAO,uBAAuB,UAAU,KAAK,CAAC;QAClF,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,IACE,YAAY;YACZ,YAAY,CAAC,aAAa;YAC1B,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EACrC,CAAC;YACD,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;iBACpB,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,2BAA2B,OAAO,uBAAuB,UAAU,KAAK,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC;IACjC,CAAC;IAED;;;OAGG;IACK,kBAAkB,CACxB,KAA8B,EAC9B,OAAe,EACf,MAAgC,EAChC,YAAgC;QAEhC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;YAC1B,MAAM,IAAI,iBAAQ,CAChB,+EAA+E,CAChF,CAAC;QAEJ,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,0CAA0C;YAC1C,IAAI,GAAG,KAAK,MAAM,IAAI,IAAA,0BAAa,EAAC,KAAK,CAAC;gBACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAEvE,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAA,iCAAoB,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;gBACpD,MAAM,SAAS,GAAG,YAAY,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAC1B,UAAU,CAAC,IAAI,CACb,GAAG,OAAO,IAAI,IAAA,6BAAgB,EAAC,SAAS,CAAC,QAAQ,SAAS,EAAE,CAC7D,CAAC;YACJ,CAAC;iBAAM,IACL,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;gBACD,IAAA,iCAAoB,EAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBAC9C,MAAM,SAAS,GAAG,YAAY,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;gBACrD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,IAAA,6BAAgB,EAAC,GAAG,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;;AA37BH,8CA47BC;AA37ByB,mCAAiB,GAAG,CAAC,AAAJ,CAAK;AAC9C,iEAAiE;AACzC,yCAAuB,GAAG,GAAG,AAAN,CAAO"}
@@ -20,6 +20,14 @@ type OperatorSuffix = string;
20
20
  export interface WhereCompilerOptions {
21
21
  /** Set of operator suffixes to reject at runtime (e.g. `new Set(['_MATCHES'])`) */
22
22
  disabledOperators?: Set<OperatorSuffix>;
23
+ /**
24
+ * When `true`, the compiler throws `OGMError` if a `where` clause
25
+ * references a field name that is not declared on the target type.
26
+ * Default: `false` — preserves pre-1.7.5 behaviour where typo'd
27
+ * field names compiled to `n.<typo> = $param` and silently produced
28
+ * empty results. Opt in via `OGMConfig.features.strictWhere = true`.
29
+ */
30
+ strictWhere?: boolean;
23
31
  }
24
32
  /**
25
33
  * Compiles a Where input object into a Cypher WHERE clause fragment + params.
@@ -27,6 +35,7 @@ export interface WhereCompilerOptions {
27
35
  export declare class WhereCompiler {
28
36
  private schema;
29
37
  private disabledOperators;
38
+ private strictWhere;
30
39
  constructor(schema: SchemaMetadata, options?: WhereCompilerOptions);
31
40
  compile(where: Record<string, unknown> | undefined | null, nodeVar: string, nodeDef: NodeDefinition, paramCounter?: {
32
41
  count: number;
@@ -1 +1 @@
1
- {"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,cAAc,EAGd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAezB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA0CD,KAAK,cAAc,GAAG,MAAM,CAAC;AA4B7B,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,qBAAa,aAAa;IAItB,OAAO,CAAC,MAAM;IAHhB,OAAO,CAAC,iBAAiB,CAAsB;gBAGrC,MAAM,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,oBAAoB;IAKhC,OAAO,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,YAAY,GAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAiB,EAC9C,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC;;;;;;;;;;WAUG;QACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;KACrC,GACA,WAAW;IA2Cd;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAuJ3B,OAAO,CAAC,iBAAiB;IAsKzB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,oBAAoB;IAyH5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;IAgHnC,OAAO,CAAC,sBAAsB;IAsI9B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAyFhC,OAAO,CAAC,qBAAqB;IA8B7B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CAmE/B"}
1
+ {"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,cAAc,EAGd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAezB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAqDD,KAAK,cAAc,GAAG,MAAM,CAAC;AA4B7B,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,WAAW,CAAU;gBAGnB,MAAM,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,oBAAoB;IAMhC,OAAO,CACL,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,EACjD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,YAAY,GAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAiB,EAC9C,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACrC;;;;;;;;;;WAUG;QACH,aAAa,CAAC,EAAE,mBAAmB,CAAC;KACrC,GACA,WAAW;IA2Cd;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAuJ3B,OAAO,CAAC,iBAAiB;IA4LzB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,oBAAoB;IAyH5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;IAqHnC,OAAO,CAAC,sBAAsB;IA2I9B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAyFhC,OAAO,CAAC,qBAAqB;IA8B7B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CAmF/B"}
@@ -7,6 +7,16 @@ const utils_1 = require("../schema/utils");
7
7
  const cypher_field_projection_1 = require("../utils/cypher-field-projection");
8
8
  const validation_1 = require("../utils/validation");
9
9
  const MAX_DEPTH = 10;
10
+ /**
11
+ * Hard cap on the length of an `AND` / `OR` clause array. Prevents an
12
+ * attacker (or a buggy caller) from inducing pathological Cypher
13
+ * emission by passing thousands of nested clauses — every entry costs
14
+ * a recursion frame, a parameter slot, and a Cypher AST node, so
15
+ * unbounded arrays are a practical DoS vector. 256 is well above any
16
+ * legitimate use; if you need more, you almost certainly want a
17
+ * different filter shape (`_IN`, a relationship traversal, etc.).
18
+ */
19
+ const MAX_LOGICAL_ARRAY_LENGTH = 256;
10
20
  /**
11
21
  * Operator registry — adding a new scalar operator is a single entry here.
12
22
  * Ordered longest-suffix-first so greedy matching works.
@@ -59,6 +69,7 @@ class WhereCompiler {
59
69
  constructor(schema, options) {
60
70
  this.schema = schema;
61
71
  this.disabledOperators = options?.disabledOperators ?? new Set();
72
+ this.strictWhere = options?.strictWhere ?? false;
62
73
  }
63
74
  compile(where, nodeVar, nodeDef, paramCounter = { count: 0 }, options) {
64
75
  const hasUserWhere = where != null && Object.keys(where).length > 0;
@@ -203,14 +214,27 @@ class WhereCompiler {
203
214
  ? permClause
204
215
  : `(${permClause} AND ${restClause})`;
205
216
  }
206
- compileConditions(where, nodeVar, nodeDef, counter, depth, scope) {
217
+ compileConditions(where, nodeVar, nodeDef, counter, depth, scope,
218
+ /**
219
+ * Optional shared params accumulator. When provided, every leaf
220
+ * write goes directly into this object instead of allocating a
221
+ * fresh `{}` per recursion frame and merging via `Object.assign`.
222
+ * Pre-1.8.0 every AND/OR/NOT branch allocated its own params Map,
223
+ * we then `mergeParams`'d it into the parent — for a 5-frame deep
224
+ * recursion that's 5 fresh objects + 5 Object.assign walks. Now
225
+ * deep recursions write into a single owner object. Public callers
226
+ * keep the old contract (no arg → fresh Map allocated locally).
227
+ */
228
+ paramsTarget) {
207
229
  if (depth > MAX_DEPTH)
208
230
  throw new errors_1.OGMError(`WHERE clause nesting depth exceeds maximum (${MAX_DEPTH})`);
209
231
  if (where == null)
210
- return { cypher: '', params: {} };
232
+ return { cypher: '', params: paramsTarget ?? {} };
211
233
  const caseInsensitive = where.mode === 'insensitive';
212
234
  const clauses = [];
213
- const params = {};
235
+ // Reuse the caller's params accumulator when provided. Otherwise
236
+ // own a fresh Map (the top-level entry point case).
237
+ const params = paramsTarget ?? {};
214
238
  for (const [key, value] of Object.entries(where)) {
215
239
  if (value === undefined)
216
240
  continue;
@@ -220,13 +244,23 @@ class WhereCompiler {
220
244
  // Logical operators (check before null handling so NOT with null value is handled correctly)
221
245
  if (key === 'AND' || key === 'OR') {
222
246
  const items = value;
223
- const subResults = items.map((item) => this.compileConditions(item, nodeVar, nodeDef, counter, depth + 1, scope));
224
- const subClauses = subResults.map((r) => r.cypher).filter(Boolean);
225
- if (subClauses.length > 0) {
226
- clauses.push(`(${subClauses.join(` ${key} `)})`);
227
- for (const r of subResults)
228
- (0, validation_1.mergeParams)(params, r.params);
247
+ if (items.length > MAX_LOGICAL_ARRAY_LENGTH)
248
+ throw new errors_1.OGMError(`${key} array length ${items.length} exceeds the maximum of ${MAX_LOGICAL_ARRAY_LENGTH}. ` +
249
+ `Restructure the predicate (e.g. use _IN for value lists, or split the query) instead of ` +
250
+ `passing a large logical array.`);
251
+ // Pass `params` as the shared target so leaf writes go straight
252
+ // into our accumulator. The mergeParams call below becomes a
253
+ // no-op because every sub.params IS our params, but we keep
254
+ // the loop for legacy callers that might one day call this
255
+ // method with paramsTarget undefined at intermediate levels.
256
+ const subClauses = [];
257
+ for (const item of items) {
258
+ const sub = this.compileConditions(item, nodeVar, nodeDef, counter, depth + 1, scope, params);
259
+ if (sub.cypher)
260
+ subClauses.push(sub.cypher);
229
261
  }
262
+ if (subClauses.length > 0)
263
+ clauses.push(`(${subClauses.join(` ${key} `)})`);
230
264
  continue;
231
265
  }
232
266
  if (key === 'NOT') {
@@ -235,11 +269,9 @@ class WhereCompiler {
235
269
  continue;
236
270
  if (!(0, validation_1.isPlainObject)(value))
237
271
  throw new errors_1.OGMError(`NOT operator requires an object value.`);
238
- const sub = this.compileConditions(value, nodeVar, nodeDef, counter, depth + 1, scope);
239
- if (sub.cypher) {
272
+ const sub = this.compileConditions(value, nodeVar, nodeDef, counter, depth + 1, scope, params);
273
+ if (sub.cypher)
240
274
  clauses.push(`NOT (${sub.cypher})`);
241
- (0, validation_1.mergeParams)(params, sub.params);
242
- }
243
275
  continue;
244
276
  }
245
277
  // Handle null values: relationship null → NOT EXISTS, scalar null → IS NULL
@@ -451,6 +483,9 @@ class WhereCompiler {
451
483
  }
452
484
  if (key === 'AND' || key === 'OR') {
453
485
  const items = val;
486
+ if (items.length > MAX_LOGICAL_ARRAY_LENGTH)
487
+ throw new errors_1.OGMError(`${key} array length ${items.length} exceeds the maximum of ${MAX_LOGICAL_ARRAY_LENGTH}. ` +
488
+ `Restructure the predicate instead of passing a large logical array inside a connection where.`);
454
489
  const subResults = items.map((item) => this.compileConnectionWhereInput(item, relVar, edgeVar, targetNodeDef, propsDef, nodeScope, edgeScope, counter, depth + 1));
455
490
  const subClauses = subResults.map((r) => r.cypher).filter(Boolean);
456
491
  if (subClauses.length > 0) {
@@ -563,7 +598,12 @@ class WhereCompiler {
563
598
  if (innerScope.hasAny())
564
599
  throw new errors_1.OGMError(`_SINGLE quantifiers do not support filtering by @cypher fields. ` +
565
600
  `Refactor the predicate to use _SOME + _NONE, or remove the @cypher reference.`);
566
- counter.count++;
601
+ // Pre-1.7.5 we incremented `counter.count` here a second time
602
+ // even though no new variable was bound — this branch already
603
+ // claimed `r${counter.count}` at the top of the function and
604
+ // bumped the counter once. The extra increment was dead and
605
+ // skipped a slot in the param/var namespace, masking real
606
+ // collisions if/when a future compiler shared this counter.
567
607
  return {
568
608
  cypher: `size([${relVar} IN [(${pattern}${whereClause} | ${relVar})] | ${relVar}]) = 1`,
569
609
  params: innerResult.params,
@@ -675,6 +715,17 @@ class WhereCompiler {
675
715
  (0, validation_1.assertSafeIdentifier)(fieldName, 'where clause');
676
716
  if (operator && this.disabledOperators.has(operator))
677
717
  throw new errors_1.OGMError(`Operator "${operator}" is disabled. To enable it, set features.filters.String.MATCHES = true in your OGM config.`);
718
+ // Strict-mode opt-in: reject typo'd field names instead of compiling
719
+ // `n.<typo> = $param` against a non-existent property (which Neo4j
720
+ // evaluates to NULL and silently drops the row). Skipped when no
721
+ // `propsHolder` is available (the caller couldn't resolve the
722
+ // type — happens for synthetic/edge contexts).
723
+ if (this.strictWhere &&
724
+ propsHolder !== undefined &&
725
+ !propsHolder.properties.has(fieldName))
726
+ throw new errors_1.OGMError(`Unknown field "${fieldName}" in where clause. ` +
727
+ `Field is not declared on the target type — check for typos. ` +
728
+ `(strictWhere is enabled via OGMConfig.features.strictWhere = true.)`);
678
729
  const paramName = `param${counter.count}`;
679
730
  counter.count++;
680
731
  const rawFieldRef = this.resolveFieldRef(fieldName, nodeVar, propsHolder, scope);