grafeo-ogm 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +49 -0
  3. package/dist/cjs/compilers/where.compiler.d.ts +83 -6
  4. package/dist/cjs/compilers/where.compiler.d.ts.map +1 -1
  5. package/dist/cjs/compilers/where.compiler.js +155 -75
  6. package/dist/cjs/compilers/where.compiler.js.map +1 -1
  7. package/dist/cjs/execution/executor.d.ts +11 -1
  8. package/dist/cjs/execution/executor.d.ts.map +1 -1
  9. package/dist/cjs/execution/executor.js +6 -3
  10. package/dist/cjs/execution/executor.js.map +1 -1
  11. package/dist/cjs/index.d.ts +2 -2
  12. package/dist/cjs/index.d.ts.map +1 -1
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/model.d.ts +38 -1
  15. package/dist/cjs/model.d.ts.map +1 -1
  16. package/dist/cjs/model.js +120 -2
  17. package/dist/cjs/model.js.map +1 -1
  18. package/dist/cjs/ogm.d.ts.map +1 -1
  19. package/dist/cjs/ogm.js +1 -0
  20. package/dist/cjs/ogm.js.map +1 -1
  21. package/dist/cjs/policy/explain.d.ts +59 -0
  22. package/dist/cjs/policy/explain.d.ts.map +1 -0
  23. package/dist/cjs/policy/explain.js +175 -0
  24. package/dist/cjs/policy/explain.js.map +1 -0
  25. package/dist/cjs/policy/resolver.d.ts +26 -2
  26. package/dist/cjs/policy/resolver.d.ts.map +1 -1
  27. package/dist/cjs/policy/resolver.js +103 -33
  28. package/dist/cjs/policy/resolver.js.map +1 -1
  29. package/dist/cjs/policy/types.d.ts +87 -0
  30. package/dist/cjs/policy/types.d.ts.map +1 -1
  31. package/dist/esm/compilers/where.compiler.d.ts +83 -6
  32. package/dist/esm/compilers/where.compiler.d.ts.map +1 -1
  33. package/dist/esm/compilers/where.compiler.js +154 -75
  34. package/dist/esm/compilers/where.compiler.js.map +1 -1
  35. package/dist/esm/execution/executor.d.ts +11 -1
  36. package/dist/esm/execution/executor.d.ts.map +1 -1
  37. package/dist/esm/execution/executor.js +6 -3
  38. package/dist/esm/execution/executor.js.map +1 -1
  39. package/dist/esm/index.d.ts +2 -2
  40. package/dist/esm/index.d.ts.map +1 -1
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/model.d.ts +38 -1
  43. package/dist/esm/model.d.ts.map +1 -1
  44. package/dist/esm/model.js +121 -3
  45. package/dist/esm/model.js.map +1 -1
  46. package/dist/esm/ogm.d.ts.map +1 -1
  47. package/dist/esm/ogm.js +1 -0
  48. package/dist/esm/ogm.js.map +1 -1
  49. package/dist/esm/policy/explain.d.ts +59 -0
  50. package/dist/esm/policy/explain.d.ts.map +1 -0
  51. package/dist/esm/policy/explain.js +169 -0
  52. package/dist/esm/policy/explain.js.map +1 -0
  53. package/dist/esm/policy/resolver.d.ts +26 -2
  54. package/dist/esm/policy/resolver.d.ts.map +1 -1
  55. package/dist/esm/policy/resolver.js +102 -33
  56. package/dist/esm/policy/resolver.js.map +1 -1
  57. package/dist/esm/policy/types.d.ts +87 -0
  58. package/dist/esm/policy/types.d.ts.map +1 -1
  59. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PolicyResolver = void 0;
4
+ exports.projectResolution = projectResolution;
4
5
  exports.hashCtx = hashCtx;
5
6
  const crypto_1 = require("crypto");
6
7
  /**
@@ -30,68 +31,137 @@ class PolicyResolver {
30
31
  * identical Cypher).
31
32
  */
32
33
  resolve(typeName, op, ctx) {
34
+ const detailed = this.resolveDetailed(typeName, op, ctx);
35
+ return detailed ? projectResolution(detailed) : null;
36
+ }
37
+ /**
38
+ * Resolve every operation-matching policy for `(typeName, op, ctx)`
39
+ * WITHOUT dropping any: `applied` records the `appliesWhen(ctx)` gate
40
+ * (or, for overrides, `when(ctx)`), and `skipped` marks policies never
41
+ * evaluated because an earlier override fired. This is the single place
42
+ * the resolver invokes `appliesWhen`; `resolve()` projects from it.
43
+ *
44
+ * Callback invocation order is unchanged from the pre-explain resolver:
45
+ * override `when` callbacks first (stopping at the first that fires),
46
+ * then `appliesWhen` in registration order — skipped entirely when an
47
+ * override fired.
48
+ *
49
+ * Returns `null` exactly when `resolve()` does.
50
+ */
51
+ resolveDetailed(typeName, op, ctx) {
33
52
  const sources = this.gatherSources(typeName);
34
53
  if (sources.length === 0)
35
54
  return null;
36
55
  const matching = [];
37
- for (const list of sources)
38
- for (const p of list)
39
- if (operationMatches(p.operations, op))
40
- matching.push(p);
56
+ for (const { source, policies } of sources)
57
+ policies.forEach((policy, index) => {
58
+ if (operationMatches(policy.operations, op))
59
+ matching.push({ policy, source, index });
60
+ });
41
61
  if (matching.length === 0)
42
62
  return null;
43
63
  // Override short-circuit. First matching override whose `when` returns
44
- // true wins — emit nothing.
45
- for (const p of matching)
46
- if (p.kind === 'override' && p.when(ctx))
47
- return {
48
- overridden: true,
49
- permissives: [],
50
- restrictives: [],
51
- evaluated: [p.name ?? 'override'],
52
- };
53
- const permissives = [];
54
- const restrictives = [];
55
- const evaluated = [];
56
- for (const p of matching)
57
- if (p.kind === 'permissive') {
58
- // appliesWhen is compile-time. False → drop policy entirely.
59
- if (p.appliesWhen && !p.appliesWhen(ctx))
60
- continue;
61
- permissives.push(p);
62
- evaluated.push(p.name ?? 'permissive');
64
+ // true wins — nothing after it is evaluated.
65
+ let firing = -1;
66
+ for (let i = 0; i < matching.length; i++) {
67
+ const p = matching[i].policy;
68
+ if (p.kind === 'override' && p.when(ctx)) {
69
+ firing = i;
70
+ break;
63
71
  }
64
- else if (p.kind === 'restrictive') {
65
- restrictives.push(p);
66
- evaluated.push(p.name ?? 'restrictive');
72
+ }
73
+ const entries = matching.map(({ policy, source, index }, i) => {
74
+ const named = Boolean(policy.name);
75
+ const name = named
76
+ ? policy.name
77
+ : `${source}.${policy.kind}[${index}]`;
78
+ const base = { policy, kind: policy.kind, source, index, name, named };
79
+ if (firing >= 0) {
80
+ if (i === firing)
81
+ return { ...base, applied: true, skipped: false };
82
+ // Overrides before the firing one WERE evaluated (to false).
83
+ if (policy.kind === 'override' && i < firing)
84
+ return { ...base, applied: false, skipped: false };
85
+ return { ...base, applied: false, skipped: true };
67
86
  }
87
+ if (policy.kind === 'override')
88
+ return { ...base, applied: false, skipped: false };
89
+ const applied = !policy.appliesWhen || policy.appliesWhen(ctx);
90
+ return { ...base, applied, skipped: false };
91
+ });
68
92
  return {
69
- overridden: false,
70
- permissives,
71
- restrictives,
72
- evaluated,
93
+ overriddenBy: firing >= 0 ? entries[firing].name : null,
94
+ entries,
73
95
  };
74
96
  }
75
97
  /**
76
98
  * Gather all sources of policy that apply to a given concrete type:
77
- * the type's own list, plus any interfaces it implements.
99
+ * the type's own list, plus any interfaces it implements — each tagged
100
+ * with the registry key that declared it.
78
101
  */
79
102
  gatherSources(typeName) {
80
103
  const out = [];
81
104
  const own = this.registry.get(typeName);
82
105
  if (own)
83
- out.push(own);
106
+ out.push({ source: typeName, policies: own });
84
107
  const nodeDef = this.schema.nodes.get(typeName);
85
108
  if (nodeDef)
86
109
  for (const ifaceName of nodeDef.implementsInterfaces) {
87
110
  const ifacePolicies = this.registry.get(ifaceName);
88
111
  if (ifacePolicies)
89
- out.push(ifacePolicies);
112
+ out.push({ source: ifaceName, policies: ifacePolicies });
90
113
  }
91
114
  return out;
92
115
  }
93
116
  }
94
117
  exports.PolicyResolver = PolicyResolver;
118
+ /**
119
+ * Project a detailed resolution onto the `ResolvedPolicies` shape the
120
+ * compilers consume. `PolicyResolver.resolve()` is exactly
121
+ * `projectResolution(resolveDetailed(...))`; the explain path calls it on
122
+ * the SAME detailed object it reports on, so the compiled fragments stay
123
+ * positionally aligned with the reported entries.
124
+ */
125
+ function projectResolution(detailed) {
126
+ if (detailed.overriddenBy !== null) {
127
+ const firing = detailed.entries.find((e) => e.policy.kind === 'override' && e.applied);
128
+ return {
129
+ overridden: true,
130
+ permissives: [],
131
+ restrictives: [],
132
+ evaluated: [firing.policy.name ?? 'override'],
133
+ };
134
+ }
135
+ const permissives = [];
136
+ const restrictives = [];
137
+ const evaluated = [];
138
+ for (const { policy: p, applied } of detailed.entries)
139
+ if (p.kind === 'permissive') {
140
+ // appliesWhen is compile-time. False → drop policy entirely.
141
+ if (!applied)
142
+ continue;
143
+ permissives.push(p);
144
+ evaluated.push(p.name ?? 'permissive');
145
+ }
146
+ else if (p.kind === 'restrictive') {
147
+ // Restrictives are kept even when `appliesWhen(ctx)` is false —
148
+ // the compiler / `evaluateWriteRestrictives` enforce the gate
149
+ // downstream. Dropping them here would change what
150
+ // `InterfaceModel.compileInterfacePolicyClause` sees: an
151
+ // implementer left with no permissives AND no restrictives is
152
+ // treated as unconstrained (`THEN true`) instead of default-deny.
153
+ restrictives.push(p);
154
+ // Audit metadata lists only policies that actually applied.
155
+ if (applied)
156
+ evaluated.push(p.name ?? 'restrictive');
157
+ }
158
+ return {
159
+ overridden: false,
160
+ permissives,
161
+ restrictives,
162
+ evaluated,
163
+ };
164
+ }
95
165
  function operationMatches(operations, op) {
96
166
  for (const candidate of operations)
97
167
  if (candidate === '*' || candidate === op)
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"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"}
@@ -167,6 +167,93 @@ export interface ResolvedPolicies<C extends PolicyContext = PolicyContext> {
167
167
  /** Names of policies that fired (for audit logging). */
168
168
  evaluated: ReadonlyArray<string>;
169
169
  }
170
+ /**
171
+ * One operation-matching policy as seen by
172
+ * `PolicyResolver.resolveDetailed()`. Unlike `ResolvedPolicies`, nothing
173
+ * is dropped: policies gated off by `appliesWhen` and policies never
174
+ * evaluated because an override fired are reported too. Consumed by the
175
+ * explain path (`Model.explainPolicies`).
176
+ */
177
+ export interface DetailedPolicy<C extends PolicyContext = PolicyContext> {
178
+ readonly policy: Policy<C>;
179
+ readonly kind: Policy<C>['kind'];
180
+ /** Type or interface whose registry entry declared this policy. */
181
+ readonly source: string;
182
+ /** Position in `source`'s registration list (all operations counted). */
183
+ readonly index: number;
184
+ /** `policy.name`, or `<source>.<kind>[<index>]` when unnamed. */
185
+ readonly name: string;
186
+ /** False when `name` is the synthesized fallback identifier. */
187
+ readonly named: boolean;
188
+ /**
189
+ * `appliesWhen(ctx)` held (absent counts as held). For an override:
190
+ * its `when(ctx)` returned true. Always false when `skipped`.
191
+ */
192
+ readonly applied: boolean;
193
+ /** Not evaluated at all because an earlier override fired. */
194
+ readonly skipped: boolean;
195
+ }
196
+ /**
197
+ * Outcome of one policy for one candidate node, as reported by
198
+ * `Model.explainPolicies()`:
199
+ *
200
+ * - `pass` — applied; its predicate evaluated to `true`.
201
+ * - `fail` — applied; evaluated to `false` (includes a restrictive hard
202
+ * deny, `when: () => false`).
203
+ * - `null` — applied; evaluated to NULL (three-valued logic, e.g. a
204
+ * missing property). Enforcement treats it as not-true.
205
+ * - `abstain` — applied, but emitted no predicate. A permissive abstain
206
+ * grants nothing; a restrictive abstain restricts nothing.
207
+ * - `not-applied` — `appliesWhen(ctx)` was false (override: `when(ctx)`
208
+ * was false). Not compiled or evaluated.
209
+ * - `skipped` — not evaluated because an earlier override fired.
210
+ */
211
+ export type PolicyClauseOutcome = 'pass' | 'fail' | 'null' | 'abstain' | 'not-applied' | 'skipped';
212
+ /** One policy's report within a `PolicyExplanation`. */
213
+ export interface PolicyClauseExplanation {
214
+ /** `policy.name`, or `<source>.<kind>[<index>]` when unnamed. */
215
+ readonly name: string;
216
+ /** False when `name` is the synthesized fallback identifier. */
217
+ readonly named: boolean;
218
+ readonly kind: 'override' | 'permissive' | 'restrictive';
219
+ /** Type or interface whose registry entry declared the policy. */
220
+ readonly source: string;
221
+ /** `appliesWhen(ctx)` held (override: `when(ctx)` was true). */
222
+ readonly applied: boolean;
223
+ readonly outcome: PolicyClauseOutcome;
224
+ }
225
+ /**
226
+ * Per-candidate result of `Model.explainPolicies()`. `visible` is the
227
+ * exact verdict `find` enforces for the same bound context; the other
228
+ * fields explain it.
229
+ */
230
+ export interface PolicyExplanation<T = Record<string, unknown>> {
231
+ /** The candidate, projected with the requested selection. */
232
+ readonly node: T;
233
+ /** Would `find` return this node for the bound context? */
234
+ readonly visible: boolean;
235
+ /** Name of the override that fired, else `null`. */
236
+ readonly overriddenBy: string | null;
237
+ /**
238
+ * Some permissive granted access (`true` when an override fired or the
239
+ * type has no policies). `false` → default deny.
240
+ */
241
+ readonly permissiveGranted: boolean;
242
+ /** Names of applied restrictives whose outcome is `fail` or `null`. */
243
+ readonly failedRestrictives: ReadonlyArray<string>;
244
+ /** Every `read` policy for the type, in registration order. */
245
+ readonly policies: ReadonlyArray<PolicyClauseExplanation>;
246
+ }
247
+ /**
248
+ * Full resolution for one (typeName, operation, ctx) triple. Entries are
249
+ * in registration order — the type's own policies first, then each
250
+ * implemented interface's.
251
+ */
252
+ export interface DetailedResolution<C extends PolicyContext = PolicyContext> {
253
+ /** Fallback-aware name of the override that fired, else `null`. */
254
+ readonly overriddenBy: string | null;
255
+ readonly entries: ReadonlyArray<DetailedPolicy<C>>;
256
+ }
170
257
  /**
171
258
  * Carries policy state through one compile pass. Created per query in
172
259
  * `Model` / `InterfaceModel` and threaded into `WhereCompiler` /
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/policy/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/policy/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { OGMLogger } from '../execution/executor';
2
- import type { PolicyContextBundle } from '../policy/types';
2
+ import type { PermissivePolicy, PolicyContextBundle, RestrictivePolicy } from '../policy/types';
3
3
  import { NodeDefinition, SchemaMetadata } from '../schema/types';
4
4
  export interface WhereResult {
5
5
  cypher: string;
@@ -17,6 +17,43 @@ export interface WhereResult {
17
17
  */
18
18
  preludes?: string[];
19
19
  }
20
+ /**
21
+ * One resolved policy's compiled contribution to the policy clause.
22
+ * `parts` are its boolean fragments in emission order (the `when` part,
23
+ * then the `cypher` part) — exactly what `composePolicyClause` joins.
24
+ * Empty `parts` → the policy emitted no predicate: it abstained, or (for
25
+ * restrictives) it is write-side or gated off by `appliesWhen`.
26
+ */
27
+ export interface CompiledPolicy {
28
+ readonly policy: PermissivePolicy | RestrictivePolicy;
29
+ readonly parts: ReadonlyArray<string>;
30
+ }
31
+ /**
32
+ * Per-policy compilation of one (typeName, op) frame. Positionally
33
+ * aligned with the bundle's `resolved.permissives` /
34
+ * `resolved.restrictives` — one entry per policy, in order.
35
+ */
36
+ export interface CompiledPolicyFragments {
37
+ readonly permissives: ReadonlyArray<CompiledPolicy>;
38
+ readonly restrictives: ReadonlyArray<CompiledPolicy>;
39
+ }
40
+ /** Result of `WhereCompiler.compileForExplain` (explain path). */
41
+ export interface ExplainWhereResult {
42
+ /** User where body only — the candidate filter. `''` when absent. */
43
+ userCypher: string;
44
+ /** User-where params followed by policy params (same as `compile()`). */
45
+ params: Record<string, unknown>;
46
+ /** Top-level `@cypher` preludes for BOTH the user where and policies. */
47
+ preludes: string[];
48
+ /**
49
+ * Root policy clause, or `null` when none applies (override fired).
50
+ * `clause` is byte-identical to what `compile()` AND-stitches.
51
+ */
52
+ policy: {
53
+ fragments: CompiledPolicyFragments;
54
+ clause: string;
55
+ } | null;
56
+ }
20
57
  type OperatorSuffix = string;
21
58
  export interface WhereCompilerOptions {
22
59
  /** Set of operator suffixes to reject at runtime (e.g. `new Set(['_MATCHES'])`) */
@@ -75,15 +112,44 @@ export declare class WhereCompiler {
75
112
  policyContext?: PolicyContextBundle;
76
113
  }): WhereResult;
77
114
  /**
78
- * Compile the policy clause for a single (typeName, op) frame. AND-
79
- * stitches into the user's body via `stitchUserAndPolicy`. Shares the
80
- * same `paramCounter` and `scope` as the user where so that nothing
81
- * collides downstream.
115
+ * Explain-path twin of `compile()`, used by `Model.explainPolicies`.
116
+ * Compiles the user `where` EXACTLY as `compile()` does — same order,
117
+ * same `paramCounter`, same `@cypher` prelude scope, same policy-aware
118
+ * relationship traversal — but returns the root policy clause
119
+ * separately instead of AND-stitching it: as per-policy fragments AND
120
+ * as the composed string `compile()` would have stitched. Both come
121
+ * from one compilation, so an explanation cannot drift from
122
+ * enforcement.
123
+ *
124
+ * `policy` is `null` when no root policy clause applies (an override
125
+ * fired).
126
+ *
127
+ * @internal
128
+ */
129
+ compileForExplain(where: Record<string, unknown> | undefined | null, nodeVar: string, nodeDef: NodeDefinition, paramCounter: {
130
+ count: number;
131
+ }, policyContext: PolicyContextBundle): ExplainWhereResult;
132
+ /**
133
+ * Shared body of `compile()` / `compileForExplain()`: compiles the user
134
+ * where, then the policy fragments, sharing one `paramCounter` and one
135
+ * top-level `@cypher` scope. Returns `null` when there is nothing to
136
+ * compile (no user where and no active policy).
137
+ */
138
+ private compileUserAndPolicy;
139
+ /**
140
+ * Compile each resolved policy of a single (typeName, op) frame into
141
+ * its boolean fragments ("parts"), WITHOUT combining them —
142
+ * `composePolicyClause` does that. Shares the same `paramCounter` and
143
+ * `scope` as the user where so that nothing collides downstream.
144
+ *
145
+ * The result is positionally aligned with `resolved.permissives` /
146
+ * `resolved.restrictives`: one entry per policy, in order, even when a
147
+ * policy contributes no part.
82
148
  *
83
149
  * Permissive `cypher.params` keys are namespaced with `policy_p<n>_`
84
150
  * to guarantee no collision with `param0..N`.
85
151
  */
86
- private compilePolicyClause;
152
+ private compilePolicyFragments;
87
153
  /**
88
154
  * Build a `PolicyContextBundle` for a target type when crossing a
89
155
  * node-type boundary inside a relationship traversal (`_SOME` /
@@ -139,5 +205,16 @@ export declare class WhereCompiler {
139
205
  */
140
206
  private compileScalarCondition;
141
207
  }
208
+ /**
209
+ * The boolean value ONE compiled policy contributes to
210
+ * `composePolicyClause`, as a standalone expression (explain path): a
211
+ * permissive's parts are OR-ed — they join the permissive disjunction —
212
+ * and a restrictive's parts are AND-ed — they join the restrictive
213
+ * conjunction. OR/AND are associative in Cypher's three-valued logic,
214
+ * so grouping per policy preserves the composed clause's truth value.
215
+ *
216
+ * Returns `null` when the policy has no parts (it abstained).
217
+ */
218
+ export declare function policyValueExpression(kind: 'permissive' | 'restrictive', parts: ReadonlyArray<string>): string | null;
142
219
  export {};
143
220
  //# sourceMappingURL=where.compiler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,cAAc,EAGd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAiBzB,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;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,aAAa;IAMtB,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAY;gBAGjB,MAAM,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,oBAAoB;IAOhC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAQxB,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;IAoDd;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA6K3B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,iBAAiB;IAsNzB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,oBAAoB;IA0I5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;IAsKnC,OAAO,CAAC,sBAAsB;IAsK9B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAyKhC,OAAO,CAAC,qBAAqB;IA8B7B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CA0G/B"}
1
+ {"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"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"}