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.
- package/CHANGELOG.md +126 -0
- package/README.md +98 -1
- package/dist/cjs/compilers/mutation.compiler.d.ts +94 -31
- package/dist/cjs/compilers/mutation.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/mutation.compiler.js +381 -343
- package/dist/cjs/compilers/mutation.compiler.js.map +1 -1
- package/dist/cjs/compilers/selection.compiler.d.ts +1 -1
- package/dist/cjs/compilers/selection.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/selection.compiler.js +33 -39
- package/dist/cjs/compilers/selection.compiler.js.map +1 -1
- package/dist/cjs/compilers/where.compiler.d.ts +206 -6
- package/dist/cjs/compilers/where.compiler.d.ts.map +1 -1
- package/dist/cjs/compilers/where.compiler.js +525 -176
- package/dist/cjs/compilers/where.compiler.js.map +1 -1
- package/dist/cjs/execution/executor.d.ts +11 -1
- package/dist/cjs/execution/executor.d.ts.map +1 -1
- package/dist/cjs/execution/executor.js +6 -3
- package/dist/cjs/execution/executor.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interface-model.d.ts +20 -10
- package/dist/cjs/interface-model.d.ts.map +1 -1
- package/dist/cjs/interface-model.js +47 -104
- package/dist/cjs/interface-model.js.map +1 -1
- package/dist/cjs/model.d.ts +42 -30
- package/dist/cjs/model.d.ts.map +1 -1
- package/dist/cjs/model.js +134 -99
- package/dist/cjs/model.js.map +1 -1
- package/dist/cjs/ogm.d.ts.map +1 -1
- package/dist/cjs/ogm.js +1 -0
- package/dist/cjs/ogm.js.map +1 -1
- package/dist/cjs/policy/explain.d.ts +59 -0
- package/dist/cjs/policy/explain.d.ts.map +1 -0
- package/dist/cjs/policy/explain.js +175 -0
- package/dist/cjs/policy/explain.js.map +1 -0
- package/dist/cjs/policy/nested-writes.d.ts +35 -0
- package/dist/cjs/policy/nested-writes.d.ts.map +1 -0
- package/dist/cjs/policy/nested-writes.js +199 -0
- package/dist/cjs/policy/nested-writes.js.map +1 -0
- package/dist/cjs/policy/resolver.d.ts +26 -2
- package/dist/cjs/policy/resolver.d.ts.map +1 -1
- package/dist/cjs/policy/resolver.js +103 -33
- package/dist/cjs/policy/resolver.js.map +1 -1
- package/dist/cjs/policy/types.d.ts +105 -0
- package/dist/cjs/policy/types.d.ts.map +1 -1
- package/dist/cjs/policy/types.js +24 -0
- package/dist/cjs/policy/types.js.map +1 -1
- package/dist/esm/compilers/mutation.compiler.d.ts +94 -31
- package/dist/esm/compilers/mutation.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/mutation.compiler.js +381 -344
- package/dist/esm/compilers/mutation.compiler.js.map +1 -1
- package/dist/esm/compilers/selection.compiler.d.ts +1 -1
- package/dist/esm/compilers/selection.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/selection.compiler.js +33 -39
- package/dist/esm/compilers/selection.compiler.js.map +1 -1
- package/dist/esm/compilers/where.compiler.d.ts +206 -6
- package/dist/esm/compilers/where.compiler.d.ts.map +1 -1
- package/dist/esm/compilers/where.compiler.js +524 -178
- package/dist/esm/compilers/where.compiler.js.map +1 -1
- package/dist/esm/execution/executor.d.ts +11 -1
- package/dist/esm/execution/executor.d.ts.map +1 -1
- package/dist/esm/execution/executor.js +6 -3
- package/dist/esm/execution/executor.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interface-model.d.ts +20 -10
- package/dist/esm/interface-model.d.ts.map +1 -1
- package/dist/esm/interface-model.js +47 -104
- package/dist/esm/interface-model.js.map +1 -1
- package/dist/esm/model.d.ts +42 -30
- package/dist/esm/model.d.ts.map +1 -1
- package/dist/esm/model.js +136 -101
- package/dist/esm/model.js.map +1 -1
- package/dist/esm/ogm.d.ts.map +1 -1
- package/dist/esm/ogm.js +1 -0
- package/dist/esm/ogm.js.map +1 -1
- package/dist/esm/policy/explain.d.ts +59 -0
- package/dist/esm/policy/explain.d.ts.map +1 -0
- package/dist/esm/policy/explain.js +169 -0
- package/dist/esm/policy/explain.js.map +1 -0
- package/dist/esm/policy/nested-writes.d.ts +35 -0
- package/dist/esm/policy/nested-writes.d.ts.map +1 -0
- package/dist/esm/policy/nested-writes.js +193 -0
- package/dist/esm/policy/nested-writes.js.map +1 -0
- package/dist/esm/policy/resolver.d.ts +26 -2
- package/dist/esm/policy/resolver.d.ts.map +1 -1
- package/dist/esm/policy/resolver.js +102 -33
- package/dist/esm/policy/resolver.js.map +1 -1
- package/dist/esm/policy/types.d.ts +105 -0
- package/dist/esm/policy/types.d.ts.map +1 -1
- package/dist/esm/policy/types.js +23 -0
- package/dist/esm/policy/types.js.map +1 -1
- 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
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* same `paramCounter
|
|
81
|
-
*
|
|
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
|
|
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,
|
|
1
|
+
{"version":3,"file":"where.compiler.d.ts","sourceRoot":"","sources":["../../../src/compilers/where.compiler.ts"],"names":[],"mappings":"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"}
|