grafeo-ogm 2.1.1 → 2.3.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 (95) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/README.md +98 -1
  3. package/dist/cjs/compilers/mutation.compiler.d.ts +94 -31
  4. package/dist/cjs/compilers/mutation.compiler.d.ts.map +1 -1
  5. package/dist/cjs/compilers/mutation.compiler.js +381 -343
  6. package/dist/cjs/compilers/mutation.compiler.js.map +1 -1
  7. package/dist/cjs/compilers/selection.compiler.d.ts +1 -1
  8. package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -1
  9. package/dist/cjs/compilers/selection.compiler.js +33 -39
  10. package/dist/cjs/compilers/selection.compiler.js.map +1 -1
  11. package/dist/cjs/compilers/where.compiler.d.ts +206 -6
  12. package/dist/cjs/compilers/where.compiler.d.ts.map +1 -1
  13. package/dist/cjs/compilers/where.compiler.js +525 -176
  14. package/dist/cjs/compilers/where.compiler.js.map +1 -1
  15. package/dist/cjs/execution/executor.d.ts +11 -1
  16. package/dist/cjs/execution/executor.d.ts.map +1 -1
  17. package/dist/cjs/execution/executor.js +6 -3
  18. package/dist/cjs/execution/executor.js.map +1 -1
  19. package/dist/cjs/index.d.ts +2 -2
  20. package/dist/cjs/index.d.ts.map +1 -1
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/interface-model.d.ts +20 -10
  23. package/dist/cjs/interface-model.d.ts.map +1 -1
  24. package/dist/cjs/interface-model.js +47 -104
  25. package/dist/cjs/interface-model.js.map +1 -1
  26. package/dist/cjs/model.d.ts +42 -30
  27. package/dist/cjs/model.d.ts.map +1 -1
  28. package/dist/cjs/model.js +134 -99
  29. package/dist/cjs/model.js.map +1 -1
  30. package/dist/cjs/ogm.d.ts.map +1 -1
  31. package/dist/cjs/ogm.js +1 -0
  32. package/dist/cjs/ogm.js.map +1 -1
  33. package/dist/cjs/policy/explain.d.ts +59 -0
  34. package/dist/cjs/policy/explain.d.ts.map +1 -0
  35. package/dist/cjs/policy/explain.js +175 -0
  36. package/dist/cjs/policy/explain.js.map +1 -0
  37. package/dist/cjs/policy/nested-writes.d.ts +35 -0
  38. package/dist/cjs/policy/nested-writes.d.ts.map +1 -0
  39. package/dist/cjs/policy/nested-writes.js +199 -0
  40. package/dist/cjs/policy/nested-writes.js.map +1 -0
  41. package/dist/cjs/policy/resolver.d.ts +26 -2
  42. package/dist/cjs/policy/resolver.d.ts.map +1 -1
  43. package/dist/cjs/policy/resolver.js +103 -33
  44. package/dist/cjs/policy/resolver.js.map +1 -1
  45. package/dist/cjs/policy/types.d.ts +105 -0
  46. package/dist/cjs/policy/types.d.ts.map +1 -1
  47. package/dist/cjs/policy/types.js +24 -0
  48. package/dist/cjs/policy/types.js.map +1 -1
  49. package/dist/esm/compilers/mutation.compiler.d.ts +94 -31
  50. package/dist/esm/compilers/mutation.compiler.d.ts.map +1 -1
  51. package/dist/esm/compilers/mutation.compiler.js +381 -344
  52. package/dist/esm/compilers/mutation.compiler.js.map +1 -1
  53. package/dist/esm/compilers/selection.compiler.d.ts +1 -1
  54. package/dist/esm/compilers/selection.compiler.d.ts.map +1 -1
  55. package/dist/esm/compilers/selection.compiler.js +33 -39
  56. package/dist/esm/compilers/selection.compiler.js.map +1 -1
  57. package/dist/esm/compilers/where.compiler.d.ts +206 -6
  58. package/dist/esm/compilers/where.compiler.d.ts.map +1 -1
  59. package/dist/esm/compilers/where.compiler.js +524 -178
  60. package/dist/esm/compilers/where.compiler.js.map +1 -1
  61. package/dist/esm/execution/executor.d.ts +11 -1
  62. package/dist/esm/execution/executor.d.ts.map +1 -1
  63. package/dist/esm/execution/executor.js +6 -3
  64. package/dist/esm/execution/executor.js.map +1 -1
  65. package/dist/esm/index.d.ts +2 -2
  66. package/dist/esm/index.d.ts.map +1 -1
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/interface-model.d.ts +20 -10
  69. package/dist/esm/interface-model.d.ts.map +1 -1
  70. package/dist/esm/interface-model.js +47 -104
  71. package/dist/esm/interface-model.js.map +1 -1
  72. package/dist/esm/model.d.ts +42 -30
  73. package/dist/esm/model.d.ts.map +1 -1
  74. package/dist/esm/model.js +136 -101
  75. package/dist/esm/model.js.map +1 -1
  76. package/dist/esm/ogm.d.ts.map +1 -1
  77. package/dist/esm/ogm.js +1 -0
  78. package/dist/esm/ogm.js.map +1 -1
  79. package/dist/esm/policy/explain.d.ts +59 -0
  80. package/dist/esm/policy/explain.d.ts.map +1 -0
  81. package/dist/esm/policy/explain.js +169 -0
  82. package/dist/esm/policy/explain.js.map +1 -0
  83. package/dist/esm/policy/nested-writes.d.ts +35 -0
  84. package/dist/esm/policy/nested-writes.d.ts.map +1 -0
  85. package/dist/esm/policy/nested-writes.js +193 -0
  86. package/dist/esm/policy/nested-writes.js.map +1 -0
  87. package/dist/esm/policy/resolver.d.ts +26 -2
  88. package/dist/esm/policy/resolver.d.ts.map +1 -1
  89. package/dist/esm/policy/resolver.js +102 -33
  90. package/dist/esm/policy/resolver.js.map +1 -1
  91. package/dist/esm/policy/types.d.ts +105 -0
  92. package/dist/esm/policy/types.d.ts.map +1 -1
  93. package/dist/esm/policy/types.js +23 -0
  94. package/dist/esm/policy/types.js.map +1 -1
  95. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import type { OGMLogger } from '../execution/executor';
2
- import type { PolicyContextBundle } from '../policy/types';
2
+ import type { Operation, PermissivePolicy, PolicyContextBundle, RestrictivePolicy } from '../policy/types';
3
3
  import { NodeDefinition, SchemaMetadata } from '../schema/types';
4
+ import { CypherFieldScope } from '../utils/cypher-field-projection';
4
5
  export interface WhereResult {
5
6
  cypher: string;
6
7
  params: Record<string, unknown>;
@@ -17,6 +18,43 @@ export interface WhereResult {
17
18
  */
18
19
  preludes?: string[];
19
20
  }
21
+ /**
22
+ * One resolved policy's compiled contribution to the policy clause.
23
+ * `parts` are its boolean fragments in emission order (the `when` part,
24
+ * then the `cypher` part) — exactly what `composePolicyClause` joins.
25
+ * Empty `parts` → the policy emitted no predicate: it abstained, or (for
26
+ * restrictives) it is write-side or gated off by `appliesWhen`.
27
+ */
28
+ export interface CompiledPolicy {
29
+ readonly policy: PermissivePolicy | RestrictivePolicy;
30
+ readonly parts: ReadonlyArray<string>;
31
+ }
32
+ /**
33
+ * Per-policy compilation of one (typeName, op) frame. Positionally
34
+ * aligned with the bundle's `resolved.permissives` /
35
+ * `resolved.restrictives` — one entry per policy, in order.
36
+ */
37
+ export interface CompiledPolicyFragments {
38
+ readonly permissives: ReadonlyArray<CompiledPolicy>;
39
+ readonly restrictives: ReadonlyArray<CompiledPolicy>;
40
+ }
41
+ /** Result of `WhereCompiler.compileForExplain` (explain path). */
42
+ export interface ExplainWhereResult {
43
+ /** User where body only — the candidate filter. `''` when absent. */
44
+ userCypher: string;
45
+ /** User-where params followed by policy params (same as `compile()`). */
46
+ params: Record<string, unknown>;
47
+ /** Top-level `@cypher` preludes for BOTH the user where and policies. */
48
+ preludes: string[];
49
+ /**
50
+ * Root policy clause, or `null` when none applies (override fired).
51
+ * `clause` is byte-identical to what `compile()` AND-stitches.
52
+ */
53
+ policy: {
54
+ fragments: CompiledPolicyFragments;
55
+ clause: string;
56
+ } | null;
57
+ }
20
58
  type OperatorSuffix = string;
21
59
  export interface WhereCompilerOptions {
22
60
  /** Set of operator suffixes to reject at runtime (e.g. `new Set(['_MATCHES'])`) */
@@ -73,17 +111,93 @@ export declare class WhereCompiler {
73
111
  * responsible for rejecting BEFORE compile — see `Model`.
74
112
  */
75
113
  policyContext?: PolicyContextBundle;
114
+ /**
115
+ * Caller-owned `@cypher` prelude scope (v2.3.0). When given, preludes
116
+ * register into it and are NOT returned — the caller emits the scope
117
+ * once, so several compiles against the same variable (a connection's
118
+ * node filter and its target policy) share one `CALL`/`WITH` chain.
119
+ * `preserveVars` is ignored (the scope already carries its own).
120
+ */
121
+ scope?: CypherFieldScope;
76
122
  }): WhereResult;
77
123
  /**
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.
124
+ * Explain-path twin of `compile()`, used by `Model.explainPolicies`.
125
+ * Compiles the user `where` EXACTLY as `compile()` does — same order,
126
+ * same `paramCounter`, same `@cypher` prelude scope, same policy-aware
127
+ * relationship traversal — but returns the root policy clause
128
+ * separately instead of AND-stitching it: as per-policy fragments AND
129
+ * as the composed string `compile()` would have stitched. Both come
130
+ * from one compilation, so an explanation cannot drift from
131
+ * enforcement.
132
+ *
133
+ * `policy` is `null` when no root policy clause applies (an override
134
+ * fired).
135
+ *
136
+ * @internal
137
+ */
138
+ compileForExplain(where: Record<string, unknown> | undefined | null, nodeVar: string, nodeDef: NodeDefinition, paramCounter: {
139
+ count: number;
140
+ }, policyContext: PolicyContextBundle): ExplainWhereResult;
141
+ /**
142
+ * The policy clause guarding a node of a possibly ABSTRACT type for one
143
+ * operation (v2.3.0) — the single construction behind every target-
144
+ * policy consumer (nested selection, traversal filters, nested writes)
145
+ * and `InterfaceModel`'s root clause:
146
+ *
147
+ * - concrete type → its own composed clause for `op` (byte-identical
148
+ * to compiling it directly); `null` when it has no policy for `op`
149
+ * or an override fires.
150
+ * - interface / union →
151
+ * `(CASE WHEN v:M1 THEN <M1 clause> WHEN v:M2 THEN … ELSE false END)`
152
+ * over the concrete members, each branch being exactly that member's
153
+ * own clause (`resolveForType(M, op)` already folds in M's interface
154
+ * policies). A member without a policy for `op`, or whose override
155
+ * fires, is `true`; when EVERY member is `true` the result is `null`
156
+ * (unconstrained, like a concrete type without policies). `ELSE false`
157
+ * excludes a node carrying no known member label (defense in depth).
158
+ *
159
+ * Pre-2.3.0 abstract targets resolved the ABSTRACT type's name, so the
160
+ * implementers' own policies were never applied through relationships.
161
+ *
162
+ * `fallbackOp`: resolve it for a type with NO policy for `op` — the
163
+ * `aggregate` → `read` fallback `Model.aggregate` applies at the root.
164
+ *
165
+ * `preludes` (for `@cypher` fields referenced by a policy) are returned
166
+ * to the caller; nested contexts reject them.
167
+ *
168
+ * @internal
169
+ */
170
+ compileTargetPolicyClause(typeName: string, varName: string, op: Operation, policyContext: PolicyContextBundle, paramCounter: {
171
+ count: number;
172
+ }, fallbackOp?: Operation): {
173
+ cypher: string | null;
174
+ params: Record<string, unknown>;
175
+ preludes: string[];
176
+ };
177
+ private compileConcreteTargetClause;
178
+ /** Concrete members of an interface / union; `null` for any other type. */
179
+ private abstractMembers;
180
+ /**
181
+ * Shared body of `compile()` / `compileForExplain()`: compiles the user
182
+ * where, then the policy fragments, sharing one `paramCounter` and one
183
+ * top-level `@cypher` scope. Returns `null` when there is nothing to
184
+ * compile (no user where and no active policy).
185
+ */
186
+ private compileUserAndPolicy;
187
+ /**
188
+ * Compile each resolved policy of a single (typeName, op) frame into
189
+ * its boolean fragments ("parts"), WITHOUT combining them —
190
+ * `composePolicyClause` does that. Shares the same `paramCounter` and
191
+ * `scope` as the user where so that nothing collides downstream.
192
+ *
193
+ * The result is positionally aligned with `resolved.permissives` /
194
+ * `resolved.restrictives`: one entry per policy, in order, even when a
195
+ * policy contributes no part.
82
196
  *
83
197
  * Permissive `cypher.params` keys are namespaced with `policy_p<n>_`
84
198
  * to guarantee no collision with `param0..N`.
85
199
  */
86
- private compilePolicyClause;
200
+ private compilePolicyFragments;
87
201
  /**
88
202
  * Build a `PolicyContextBundle` for a target type when crossing a
89
203
  * node-type boundary inside a relationship traversal (`_SOME` /
@@ -99,6 +213,36 @@ export declare class WhereCompiler {
99
213
  * nesting (target → target's relationship → ...) keeps cascading.
100
214
  */
101
215
  private buildTargetBundle;
216
+ /**
217
+ * Compile a traversal's filter against its target node with the
218
+ * caller's filter (`user`) and the target's `read` policy (`policy`)
219
+ * kept SEPARATE, so each quantifier composes them correctly — the
220
+ * policy must never sit inside a negation (v2.3.0). Pre-2.3.0 the policy
221
+ * was compiled INTO the filter, so `_ALL` (`NOT (user AND policy)`) was
222
+ * falsified by hidden related nodes (an existence oracle), and a
223
+ * connection `node_NOT` was SATISFIED by them.
224
+ *
225
+ * - no policy context → plain compile.
226
+ * - concrete target → one `compileUserAndPolicy` pass (shared `@cypher`
227
+ * prelude scope); the bundle cascades as `NO_ROOT_POLICY` at any depth.
228
+ * - interface target → filter via a `NO_ROOT_POLICY` traversal bundle,
229
+ * policy via `compileTargetPolicyClause` (CASE over the members'
230
+ * own clauses — pre-2.3.0 only the interface's own policies ran).
231
+ *
232
+ * `''` for an absent part. With `scope`, concrete-target preludes
233
+ * register into it (caller emits); otherwise they are returned.
234
+ * Shared with `SelectionCompiler`'s nested-projection filters.
235
+ *
236
+ * @internal
237
+ */
238
+ compileTargetBody(where: Record<string, unknown> | undefined | null, targetVar: string, targetDef: NodeDefinition, counter: {
239
+ count: number;
240
+ }, policyContext: PolicyContextBundle | undefined, scope?: CypherFieldScope): {
241
+ user: string;
242
+ policy: string;
243
+ params: Record<string, unknown>;
244
+ preludes: string[];
245
+ };
102
246
  private compileConditions;
103
247
  /**
104
248
  * Resolve the Cypher reference for a where-clause field. For stored
@@ -129,6 +273,37 @@ export declare class WhereCompiler {
129
273
  * Multiple members are combined with OR.
130
274
  */
131
275
  private compileUnionRelationship;
276
+ /**
277
+ * Compile `<key>: null` on a node (v2.3.0). The operator suffix is split
278
+ * off FIRST: pre-2.3.0 the whole key was treated as a property name, so
279
+ * the common "is not null" idiom `{ deletedAt_NOT: null }` compiled to
280
+ * `n.deletedAt_NOT IS NULL` — always true, silently matching every row
281
+ * (and silently restricting nothing when used in a restrictive policy).
282
+ *
283
+ * field: null → field IS NULL
284
+ * field_NOT: null → field IS NOT NULL
285
+ * rel: null → NOT EXISTS { MATCH (n)-[:REL]->(…) }
286
+ * rel_NOT: null → EXISTS { MATCH (n)-[:REL]->(…) }
287
+ * any other operator → OGMError (null has no meaning there)
288
+ * undeclared field → OGMError regardless of `strictWhere` — a null
289
+ * filter on an undeclared field matches every
290
+ * row (fail OPEN), unlike a non-null one
291
+ *
292
+ * A field literally named `key` always wins over suffix parsing.
293
+ */
294
+ private compileNullCondition;
295
+ /**
296
+ * Scalar half of the null semantics above, shared by node properties and
297
+ * relationship-edge properties: `IS NULL` / `IS NOT NULL`, or an
298
+ * `OGMError` for any other operator and for undeclared fields.
299
+ */
300
+ private compileNullScalar;
301
+ /**
302
+ * `NOT EXISTS` (no related node) / `EXISTS` (at least one) for a
303
+ * relationship null filter. Byte-identical to the pre-2.3.0 `rel: null`
304
+ * emission for the `NOT EXISTS` case.
305
+ */
306
+ private compileRelationshipExistence;
132
307
  private compileEdgeConditions;
133
308
  /**
134
309
  * Compile a scalar where-condition. If `fieldName` resolves to a
@@ -139,5 +314,30 @@ export declare class WhereCompiler {
139
314
  */
140
315
  private compileScalarCondition;
141
316
  }
317
+ /**
318
+ * Stitch a user where-body and a policy clause into a single Cypher
319
+ * fragment. Both come from `compileConditions` so each is already a
320
+ * valid boolean expression. Empty user bodies skip the AND wrap.
321
+ */
322
+ export declare function stitchUserAndPolicy(userBody: string, policyClause: string): string;
323
+ /**
324
+ * The bundle a traversal's USER filter compiles under (v2.3.0): no clause
325
+ * for the target itself (its policy is composed separately by the caller),
326
+ * but `resolveForType` stays live so deeper traversals keep enforcing.
327
+ *
328
+ * @internal
329
+ */
330
+ export declare function traversalBundle(policyContext: PolicyContextBundle): PolicyContextBundle;
331
+ /**
332
+ * The boolean value ONE compiled policy contributes to
333
+ * `composePolicyClause`, as a standalone expression (explain path): a
334
+ * permissive's parts are OR-ed — they join the permissive disjunction —
335
+ * and a restrictive's parts are AND-ed — they join the restrictive
336
+ * conjunction. OR/AND are associative in Cypher's three-valued logic,
337
+ * so grouping per policy preserves the composed clause's truth value.
338
+ *
339
+ * Returns `null` when the policy has no parts (it abstained).
340
+ */
341
+ export declare function policyValueExpression(kind: 'permissive' | 'restrictive', parts: ReadonlyArray<string>): string | null;
142
342
  export {};
143
343
  //# 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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"}