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
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application-layer policy checks for create / update input (v2.3.0),
|
|
3
|
+
* shared by the ROOT write and every NESTED write reached through its
|
|
4
|
+
* relationships. A nested write enforces exactly what the equivalent
|
|
5
|
+
* direct write on the target type would:
|
|
6
|
+
*
|
|
7
|
+
* - nested `create` → the target's `create` permissives (default-deny)
|
|
8
|
+
* and write restrictives (WITH CHECK) on the node input, as
|
|
9
|
+
* `Model.create` does;
|
|
10
|
+
* - nested `update` → the target's `update` write restrictives on the
|
|
11
|
+
* node input, as `Model.update` does. Its row filter (and
|
|
12
|
+
* `onDeny: 'throw'`) is enforced in the compiled MATCH by the
|
|
13
|
+
* mutation compiler.
|
|
14
|
+
*
|
|
15
|
+
* Pre-2.3.0 only the root type was checked, so a nested `create` / `update`
|
|
16
|
+
* wrote into protected types with none of their write policies applied.
|
|
17
|
+
*
|
|
18
|
+
* Runs BEFORE compile, so a rejected nested write never reaches the
|
|
19
|
+
* database. The walk mirrors the mutation compiler's input shapes:
|
|
20
|
+
* relationship → `{ create, update, … }` (single item or array), union
|
|
21
|
+
* targets keyed by member name, `create` items as `{ node, edge }` or a
|
|
22
|
+
* bare node, `update` as `{ node, edge }` or a bare node. Interface
|
|
23
|
+
* targets are skipped, as they are by the compiler (it emits no nested
|
|
24
|
+
* create / update for them).
|
|
25
|
+
*/
|
|
26
|
+
import { OGMError } from '../errors';
|
|
27
|
+
import { isPlainObject } from '../utils/validation';
|
|
28
|
+
import { PolicyDeniedError } from './errors';
|
|
29
|
+
import { isWriteRestrictive, NO_ROOT_POLICY, } from './types';
|
|
30
|
+
/** Guards against pathological (e.g. cyclic) input objects. */
|
|
31
|
+
const MAX_NESTED_WRITE_DEPTH = 32;
|
|
32
|
+
/**
|
|
33
|
+
* Evaluate `'create'` policies in JS for `inputs` of `typeName`.
|
|
34
|
+
*
|
|
35
|
+
* - Override → all input is allowed.
|
|
36
|
+
* - Permissive → at least one (whose `appliesWhen` matches) must exist;
|
|
37
|
+
* create cannot fall back to default-deny silent-empty.
|
|
38
|
+
* - Restrictive → `when(ctx, input)` must return exactly `true` for every
|
|
39
|
+
* input (v1.8.7 — explicit positive consent).
|
|
40
|
+
*
|
|
41
|
+
* A permissive's `when(ctx)` where-partial is a SHAPE hint only — it is
|
|
42
|
+
* not compiled against the input. Restrictive `when(ctx, input)` is the
|
|
43
|
+
* canonical "WITH CHECK" hook.
|
|
44
|
+
*/
|
|
45
|
+
export function evaluateCreatePolicies(bundle, typeName, inputs) {
|
|
46
|
+
if (!bundle || bundle.resolved.overridden)
|
|
47
|
+
return;
|
|
48
|
+
if (bundle.resolved.permissives.length === 0)
|
|
49
|
+
throw new PolicyDeniedError({
|
|
50
|
+
typeName,
|
|
51
|
+
operation: 'create',
|
|
52
|
+
reason: 'no-permissive-matched',
|
|
53
|
+
...(bundle.defaults.onDeny === 'throw'
|
|
54
|
+
? {}
|
|
55
|
+
: {
|
|
56
|
+
detail: 'create operations cannot rely on default-deny silent-empty; at least one permissive must apply.',
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
for (const input of inputs)
|
|
60
|
+
evaluateWriteRestrictives(bundle, typeName, 'create', input);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Evaluate WRITE-side restrictives (create/update) at the application
|
|
64
|
+
* layer. Each `WriteRestrictive` is invoked once with `(ctx, input)`;
|
|
65
|
+
* anything but an explicit `true` rejects with `PolicyDeniedError`.
|
|
66
|
+
* ReadRestrictives are not consumed here — they filter rows via the
|
|
67
|
+
* compiled WHERE clause.
|
|
68
|
+
*/
|
|
69
|
+
export function evaluateWriteRestrictives(bundle, typeName, operation, input) {
|
|
70
|
+
if (!bundle || bundle.resolved.overridden)
|
|
71
|
+
return;
|
|
72
|
+
for (const r of bundle.resolved.restrictives) {
|
|
73
|
+
if (!isWriteRestrictive(r))
|
|
74
|
+
continue;
|
|
75
|
+
// Compile-time gate: `appliesWhen` returning false drops the policy.
|
|
76
|
+
if (r.appliesWhen && !r.appliesWhen(bundle.ctx))
|
|
77
|
+
continue;
|
|
78
|
+
if (r.when(bundle.ctx, input ?? {}) !== true)
|
|
79
|
+
throw new PolicyDeniedError({
|
|
80
|
+
typeName,
|
|
81
|
+
operation,
|
|
82
|
+
reason: 'restrictive-rejected-input',
|
|
83
|
+
policyName: r.name,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check every nested `create` / `update` inside create inputs of
|
|
89
|
+
* `nodeDef` (the root's own checks are the caller's).
|
|
90
|
+
*/
|
|
91
|
+
export function assertNestedCreatesAllowed(schema, nodeDef, inputs, bundle) {
|
|
92
|
+
if (!bundle)
|
|
93
|
+
return;
|
|
94
|
+
for (const input of inputs)
|
|
95
|
+
if (isPlainObject(input))
|
|
96
|
+
walkCreate(schema, nodeDef, input, bundle, 0);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check every nested `create` / `update` inside an update input of
|
|
100
|
+
* `nodeDef` (the root's own checks are the caller's).
|
|
101
|
+
*/
|
|
102
|
+
export function assertNestedUpdatesAllowed(schema, nodeDef, update, bundle) {
|
|
103
|
+
if (!bundle || !isPlainObject(update))
|
|
104
|
+
return;
|
|
105
|
+
walkUpdate(schema, nodeDef, update, bundle, 0);
|
|
106
|
+
}
|
|
107
|
+
/** A create node spec: its relationship keys may carry nested creates. */
|
|
108
|
+
function walkCreate(schema, nodeDef, nodeSpec, bundle, depth) {
|
|
109
|
+
assertDepth(depth);
|
|
110
|
+
for (const [key, value] of Object.entries(nodeSpec)) {
|
|
111
|
+
const relDef = nodeDef.relationships.get(key);
|
|
112
|
+
if (!relDef || !isPlainObject(value))
|
|
113
|
+
continue;
|
|
114
|
+
for (const [targetDef, relInput] of relationshipTargets(schema, relDef, value))
|
|
115
|
+
if (isPlainObject(relInput))
|
|
116
|
+
checkCreates(schema, targetDef, relInput.create, bundle, depth);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** An update spec: its relationship keys carry nested operation items. */
|
|
120
|
+
function walkUpdate(schema, nodeDef, update, bundle, depth) {
|
|
121
|
+
assertDepth(depth);
|
|
122
|
+
for (const [key, value] of Object.entries(update)) {
|
|
123
|
+
const relDef = nodeDef.relationships.get(key);
|
|
124
|
+
if (!relDef || value == null)
|
|
125
|
+
continue;
|
|
126
|
+
for (const [targetDef, items] of relationshipTargets(schema, relDef, value))
|
|
127
|
+
for (const item of asArray(items)) {
|
|
128
|
+
if (!isPlainObject(item))
|
|
129
|
+
continue;
|
|
130
|
+
if (item.create)
|
|
131
|
+
checkCreates(schema, targetDef, item.create, bundle, depth);
|
|
132
|
+
if (isPlainObject(item.update)) {
|
|
133
|
+
// Same node-spec resolution as the compiler's nested update.
|
|
134
|
+
const spec = item.update;
|
|
135
|
+
const nodeUpdate = (spec.node ?? (spec.edge ? {} : spec));
|
|
136
|
+
evaluateWriteRestrictives(targetBundle(bundle, targetDef.typeName, 'update'), targetDef.typeName, 'update', nodeUpdate);
|
|
137
|
+
if (isPlainObject(nodeUpdate))
|
|
138
|
+
walkUpdate(schema, targetDef, nodeUpdate, bundle, depth + 1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function checkCreates(schema, targetDef, creates, bundle, depth) {
|
|
144
|
+
for (const item of asArray(creates)) {
|
|
145
|
+
if (!isPlainObject(item))
|
|
146
|
+
continue;
|
|
147
|
+
// Same node-spec resolution as the compiler's nested create.
|
|
148
|
+
const nodeSpec = (item.node ?? item);
|
|
149
|
+
evaluateCreatePolicies(targetBundle(bundle, targetDef.typeName, 'create'), targetDef.typeName, [nodeSpec]);
|
|
150
|
+
if (isPlainObject(nodeSpec))
|
|
151
|
+
walkCreate(schema, targetDef, nodeSpec, bundle, depth + 1);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Concrete targets of a relationship paired with their slice of the
|
|
156
|
+
* input: the whole value for a node target, one entry per member key
|
|
157
|
+
* for a union target, none for an interface target.
|
|
158
|
+
*/
|
|
159
|
+
function relationshipTargets(schema, relDef, value) {
|
|
160
|
+
const nodeDef = schema.nodes.get(relDef.target);
|
|
161
|
+
if (nodeDef)
|
|
162
|
+
return [[nodeDef, value]];
|
|
163
|
+
const members = schema.unions?.get(relDef.target);
|
|
164
|
+
if (!members || !isPlainObject(value))
|
|
165
|
+
return [];
|
|
166
|
+
const targets = [];
|
|
167
|
+
for (const [memberKey, memberValue] of Object.entries(value)) {
|
|
168
|
+
const memberDef = members.includes(memberKey)
|
|
169
|
+
? schema.nodes.get(memberKey)
|
|
170
|
+
: undefined;
|
|
171
|
+
if (memberDef && memberValue != null)
|
|
172
|
+
targets.push([memberDef, memberValue]);
|
|
173
|
+
}
|
|
174
|
+
return targets;
|
|
175
|
+
}
|
|
176
|
+
/** The target type's bundle for `op`; a type without policies is open. */
|
|
177
|
+
function targetBundle(bundle, typeName, op) {
|
|
178
|
+
return {
|
|
179
|
+
...bundle,
|
|
180
|
+
operation: op,
|
|
181
|
+
resolved: bundle.resolveForType(typeName, op) ?? NO_ROOT_POLICY,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function asArray(value) {
|
|
185
|
+
if (value == null)
|
|
186
|
+
return [];
|
|
187
|
+
return Array.isArray(value) ? value : [value];
|
|
188
|
+
}
|
|
189
|
+
function assertDepth(depth) {
|
|
190
|
+
if (depth > MAX_NESTED_WRITE_DEPTH)
|
|
191
|
+
throw new OGMError(`Nested write input exceeds the maximum depth of ${MAX_NESTED_WRITE_DEPTH}.`);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=nested-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nested-writes.js","sourceRoot":"","sources":["../../../src/policy/nested-writes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SchemaMetadata } from '../schema/types';
|
|
2
|
-
import type { Operation, Policy, PolicyContext, ResolvedPolicies } from './types';
|
|
2
|
+
import type { DetailedResolution, Operation, Policy, PolicyContext, ResolvedPolicies } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Build an immutable resolver from a registry. The registry is built by
|
|
5
5
|
* the OGM constructor after schema validation.
|
|
@@ -24,12 +24,36 @@ export declare class PolicyResolver<C extends PolicyContext = PolicyContext> {
|
|
|
24
24
|
* identical Cypher).
|
|
25
25
|
*/
|
|
26
26
|
resolve(typeName: string, op: Operation, ctx: C): ResolvedPolicies<C> | null;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve every operation-matching policy for `(typeName, op, ctx)`
|
|
29
|
+
* WITHOUT dropping any: `applied` records the `appliesWhen(ctx)` gate
|
|
30
|
+
* (or, for overrides, `when(ctx)`), and `skipped` marks policies never
|
|
31
|
+
* evaluated because an earlier override fired. This is the single place
|
|
32
|
+
* the resolver invokes `appliesWhen`; `resolve()` projects from it.
|
|
33
|
+
*
|
|
34
|
+
* Callback invocation order is unchanged from the pre-explain resolver:
|
|
35
|
+
* override `when` callbacks first (stopping at the first that fires),
|
|
36
|
+
* then `appliesWhen` in registration order — skipped entirely when an
|
|
37
|
+
* override fired.
|
|
38
|
+
*
|
|
39
|
+
* Returns `null` exactly when `resolve()` does.
|
|
40
|
+
*/
|
|
41
|
+
resolveDetailed(typeName: string, op: Operation, ctx: C): DetailedResolution<C> | null;
|
|
27
42
|
/**
|
|
28
43
|
* Gather all sources of policy that apply to a given concrete type:
|
|
29
|
-
* the type's own list, plus any interfaces it implements
|
|
44
|
+
* the type's own list, plus any interfaces it implements — each tagged
|
|
45
|
+
* with the registry key that declared it.
|
|
30
46
|
*/
|
|
31
47
|
private gatherSources;
|
|
32
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Project a detailed resolution onto the `ResolvedPolicies` shape the
|
|
51
|
+
* compilers consume. `PolicyResolver.resolve()` is exactly
|
|
52
|
+
* `projectResolution(resolveDetailed(...))`; the explain path calls it on
|
|
53
|
+
* the SAME detailed object it reports on, so the compiled fragments stay
|
|
54
|
+
* positionally aligned with the reported entries.
|
|
55
|
+
*/
|
|
56
|
+
export declare function projectResolution<C extends PolicyContext>(detailed: DetailedResolution<C>): ResolvedPolicies<C>;
|
|
33
57
|
/**
|
|
34
58
|
* Stable, value-free fingerprint of a context object. Used in audit
|
|
35
59
|
* metadata so query logs can be correlated by ctx-shape WITHOUT leaking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAEV,kBAAkB,EAClB,SAAS,EAGT,MAAM,EACN,aAAa,EACb,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;IACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAGtC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,MAAM,EAAE,cAAc;IAMxB,kFAAkF;IAClF,MAAM,IAAI,OAAO;IAIjB;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK5E;;;;;;;;;;;;;OAaG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,CAAC,GACL,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI;IA0D/B;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAiBtB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,aAAa,EACvD,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC9B,gBAAgB,CAAC,CAAC,CAAC,CAyCrB;AAWD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAK9D"}
|
|
@@ -26,67 +26,136 @@ export class PolicyResolver {
|
|
|
26
26
|
* identical Cypher).
|
|
27
27
|
*/
|
|
28
28
|
resolve(typeName, op, ctx) {
|
|
29
|
+
const detailed = this.resolveDetailed(typeName, op, ctx);
|
|
30
|
+
return detailed ? projectResolution(detailed) : null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve every operation-matching policy for `(typeName, op, ctx)`
|
|
34
|
+
* WITHOUT dropping any: `applied` records the `appliesWhen(ctx)` gate
|
|
35
|
+
* (or, for overrides, `when(ctx)`), and `skipped` marks policies never
|
|
36
|
+
* evaluated because an earlier override fired. This is the single place
|
|
37
|
+
* the resolver invokes `appliesWhen`; `resolve()` projects from it.
|
|
38
|
+
*
|
|
39
|
+
* Callback invocation order is unchanged from the pre-explain resolver:
|
|
40
|
+
* override `when` callbacks first (stopping at the first that fires),
|
|
41
|
+
* then `appliesWhen` in registration order — skipped entirely when an
|
|
42
|
+
* override fired.
|
|
43
|
+
*
|
|
44
|
+
* Returns `null` exactly when `resolve()` does.
|
|
45
|
+
*/
|
|
46
|
+
resolveDetailed(typeName, op, ctx) {
|
|
29
47
|
const sources = this.gatherSources(typeName);
|
|
30
48
|
if (sources.length === 0)
|
|
31
49
|
return null;
|
|
32
50
|
const matching = [];
|
|
33
|
-
for (const
|
|
34
|
-
|
|
35
|
-
if (operationMatches(
|
|
36
|
-
matching.push(
|
|
51
|
+
for (const { source, policies } of sources)
|
|
52
|
+
policies.forEach((policy, index) => {
|
|
53
|
+
if (operationMatches(policy.operations, op))
|
|
54
|
+
matching.push({ policy, source, index });
|
|
55
|
+
});
|
|
37
56
|
if (matching.length === 0)
|
|
38
57
|
return null;
|
|
39
58
|
// Override short-circuit. First matching override whose `when` returns
|
|
40
|
-
// true wins —
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
evaluated: [p.name ?? 'override'],
|
|
48
|
-
};
|
|
49
|
-
const permissives = [];
|
|
50
|
-
const restrictives = [];
|
|
51
|
-
const evaluated = [];
|
|
52
|
-
for (const p of matching)
|
|
53
|
-
if (p.kind === 'permissive') {
|
|
54
|
-
// appliesWhen is compile-time. False → drop policy entirely.
|
|
55
|
-
if (p.appliesWhen && !p.appliesWhen(ctx))
|
|
56
|
-
continue;
|
|
57
|
-
permissives.push(p);
|
|
58
|
-
evaluated.push(p.name ?? 'permissive');
|
|
59
|
+
// true wins — nothing after it is evaluated.
|
|
60
|
+
let firing = -1;
|
|
61
|
+
for (let i = 0; i < matching.length; i++) {
|
|
62
|
+
const p = matching[i].policy;
|
|
63
|
+
if (p.kind === 'override' && p.when(ctx)) {
|
|
64
|
+
firing = i;
|
|
65
|
+
break;
|
|
59
66
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
}
|
|
68
|
+
const entries = matching.map(({ policy, source, index }, i) => {
|
|
69
|
+
const named = Boolean(policy.name);
|
|
70
|
+
const name = named
|
|
71
|
+
? policy.name
|
|
72
|
+
: `${source}.${policy.kind}[${index}]`;
|
|
73
|
+
const base = { policy, kind: policy.kind, source, index, name, named };
|
|
74
|
+
if (firing >= 0) {
|
|
75
|
+
if (i === firing)
|
|
76
|
+
return { ...base, applied: true, skipped: false };
|
|
77
|
+
// Overrides before the firing one WERE evaluated (to false).
|
|
78
|
+
if (policy.kind === 'override' && i < firing)
|
|
79
|
+
return { ...base, applied: false, skipped: false };
|
|
80
|
+
return { ...base, applied: false, skipped: true };
|
|
63
81
|
}
|
|
82
|
+
if (policy.kind === 'override')
|
|
83
|
+
return { ...base, applied: false, skipped: false };
|
|
84
|
+
const applied = !policy.appliesWhen || policy.appliesWhen(ctx);
|
|
85
|
+
return { ...base, applied, skipped: false };
|
|
86
|
+
});
|
|
64
87
|
return {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
restrictives,
|
|
68
|
-
evaluated,
|
|
88
|
+
overriddenBy: firing >= 0 ? entries[firing].name : null,
|
|
89
|
+
entries,
|
|
69
90
|
};
|
|
70
91
|
}
|
|
71
92
|
/**
|
|
72
93
|
* Gather all sources of policy that apply to a given concrete type:
|
|
73
|
-
* the type's own list, plus any interfaces it implements
|
|
94
|
+
* the type's own list, plus any interfaces it implements — each tagged
|
|
95
|
+
* with the registry key that declared it.
|
|
74
96
|
*/
|
|
75
97
|
gatherSources(typeName) {
|
|
76
98
|
const out = [];
|
|
77
99
|
const own = this.registry.get(typeName);
|
|
78
100
|
if (own)
|
|
79
|
-
out.push(own);
|
|
101
|
+
out.push({ source: typeName, policies: own });
|
|
80
102
|
const nodeDef = this.schema.nodes.get(typeName);
|
|
81
103
|
if (nodeDef)
|
|
82
104
|
for (const ifaceName of nodeDef.implementsInterfaces) {
|
|
83
105
|
const ifacePolicies = this.registry.get(ifaceName);
|
|
84
106
|
if (ifacePolicies)
|
|
85
|
-
out.push(ifacePolicies);
|
|
107
|
+
out.push({ source: ifaceName, policies: ifacePolicies });
|
|
86
108
|
}
|
|
87
109
|
return out;
|
|
88
110
|
}
|
|
89
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Project a detailed resolution onto the `ResolvedPolicies` shape the
|
|
114
|
+
* compilers consume. `PolicyResolver.resolve()` is exactly
|
|
115
|
+
* `projectResolution(resolveDetailed(...))`; the explain path calls it on
|
|
116
|
+
* the SAME detailed object it reports on, so the compiled fragments stay
|
|
117
|
+
* positionally aligned with the reported entries.
|
|
118
|
+
*/
|
|
119
|
+
export function projectResolution(detailed) {
|
|
120
|
+
if (detailed.overriddenBy !== null) {
|
|
121
|
+
const firing = detailed.entries.find((e) => e.policy.kind === 'override' && e.applied);
|
|
122
|
+
return {
|
|
123
|
+
overridden: true,
|
|
124
|
+
permissives: [],
|
|
125
|
+
restrictives: [],
|
|
126
|
+
evaluated: [firing.policy.name ?? 'override'],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const permissives = [];
|
|
130
|
+
const restrictives = [];
|
|
131
|
+
const evaluated = [];
|
|
132
|
+
for (const { policy: p, applied } of detailed.entries)
|
|
133
|
+
if (p.kind === 'permissive') {
|
|
134
|
+
// appliesWhen is compile-time. False → drop policy entirely.
|
|
135
|
+
if (!applied)
|
|
136
|
+
continue;
|
|
137
|
+
permissives.push(p);
|
|
138
|
+
evaluated.push(p.name ?? 'permissive');
|
|
139
|
+
}
|
|
140
|
+
else if (p.kind === 'restrictive') {
|
|
141
|
+
// Restrictives are kept even when `appliesWhen(ctx)` is false —
|
|
142
|
+
// the compiler / `evaluateWriteRestrictives` enforce the gate
|
|
143
|
+
// downstream. Dropping them here would change what
|
|
144
|
+
// `InterfaceModel.compileInterfacePolicyClause` sees: an
|
|
145
|
+
// implementer left with no permissives AND no restrictives is
|
|
146
|
+
// treated as unconstrained (`THEN true`) instead of default-deny.
|
|
147
|
+
restrictives.push(p);
|
|
148
|
+
// Audit metadata lists only policies that actually applied.
|
|
149
|
+
if (applied)
|
|
150
|
+
evaluated.push(p.name ?? 'restrictive');
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
overridden: false,
|
|
154
|
+
permissives,
|
|
155
|
+
restrictives,
|
|
156
|
+
evaluated,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
90
159
|
function operationMatches(operations, op) {
|
|
91
160
|
for (const candidate of operations)
|
|
92
161
|
if (candidate === '*' || candidate === op)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/policy/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -167,6 +167,111 @@ 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
|
+
* Resolution used for a ROOT type that has no policy for the operation,
|
|
172
|
+
* when a policy context is bound anyway (v2.3.0). Binding it — instead of
|
|
173
|
+
* dropping the whole bundle — keeps `resolveForType` reachable, so the
|
|
174
|
+
* policies of every TARGET type reached through relationships (nested
|
|
175
|
+
* selection, traversal filters, nested writes) stay enforced; a type
|
|
176
|
+
* without policies must not be a gateway around its neighbours'.
|
|
177
|
+
*
|
|
178
|
+
* `overridden: true` carries exactly its documented operational meaning
|
|
179
|
+
* here ("emit no root clause"): every root-level consumer treats it like
|
|
180
|
+
* the absence of a bundle, and no target-policy consumer reads it.
|
|
181
|
+
*
|
|
182
|
+
* Compare by identity (`resolved === NO_ROOT_POLICY`) to ask "did the
|
|
183
|
+
* root resolve anything for this operation?" — e.g. `aggregate`'s
|
|
184
|
+
* fallback to `read` policies. A real override resolution is a different
|
|
185
|
+
* object and must NOT be mistaken for it.
|
|
186
|
+
*/
|
|
187
|
+
export declare const NO_ROOT_POLICY: ResolvedPolicies;
|
|
188
|
+
/**
|
|
189
|
+
* One operation-matching policy as seen by
|
|
190
|
+
* `PolicyResolver.resolveDetailed()`. Unlike `ResolvedPolicies`, nothing
|
|
191
|
+
* is dropped: policies gated off by `appliesWhen` and policies never
|
|
192
|
+
* evaluated because an override fired are reported too. Consumed by the
|
|
193
|
+
* explain path (`Model.explainPolicies`).
|
|
194
|
+
*/
|
|
195
|
+
export interface DetailedPolicy<C extends PolicyContext = PolicyContext> {
|
|
196
|
+
readonly policy: Policy<C>;
|
|
197
|
+
readonly kind: Policy<C>['kind'];
|
|
198
|
+
/** Type or interface whose registry entry declared this policy. */
|
|
199
|
+
readonly source: string;
|
|
200
|
+
/** Position in `source`'s registration list (all operations counted). */
|
|
201
|
+
readonly index: number;
|
|
202
|
+
/** `policy.name`, or `<source>.<kind>[<index>]` when unnamed. */
|
|
203
|
+
readonly name: string;
|
|
204
|
+
/** False when `name` is the synthesized fallback identifier. */
|
|
205
|
+
readonly named: boolean;
|
|
206
|
+
/**
|
|
207
|
+
* `appliesWhen(ctx)` held (absent counts as held). For an override:
|
|
208
|
+
* its `when(ctx)` returned true. Always false when `skipped`.
|
|
209
|
+
*/
|
|
210
|
+
readonly applied: boolean;
|
|
211
|
+
/** Not evaluated at all because an earlier override fired. */
|
|
212
|
+
readonly skipped: boolean;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Outcome of one policy for one candidate node, as reported by
|
|
216
|
+
* `Model.explainPolicies()`:
|
|
217
|
+
*
|
|
218
|
+
* - `pass` — applied; its predicate evaluated to `true`.
|
|
219
|
+
* - `fail` — applied; evaluated to `false` (includes a restrictive hard
|
|
220
|
+
* deny, `when: () => false`).
|
|
221
|
+
* - `null` — applied; evaluated to NULL (three-valued logic, e.g. a
|
|
222
|
+
* missing property). Enforcement treats it as not-true.
|
|
223
|
+
* - `abstain` — applied, but emitted no predicate. A permissive abstain
|
|
224
|
+
* grants nothing; a restrictive abstain restricts nothing.
|
|
225
|
+
* - `not-applied` — `appliesWhen(ctx)` was false (override: `when(ctx)`
|
|
226
|
+
* was false). Not compiled or evaluated.
|
|
227
|
+
* - `skipped` — not evaluated because an earlier override fired.
|
|
228
|
+
*/
|
|
229
|
+
export type PolicyClauseOutcome = 'pass' | 'fail' | 'null' | 'abstain' | 'not-applied' | 'skipped';
|
|
230
|
+
/** One policy's report within a `PolicyExplanation`. */
|
|
231
|
+
export interface PolicyClauseExplanation {
|
|
232
|
+
/** `policy.name`, or `<source>.<kind>[<index>]` when unnamed. */
|
|
233
|
+
readonly name: string;
|
|
234
|
+
/** False when `name` is the synthesized fallback identifier. */
|
|
235
|
+
readonly named: boolean;
|
|
236
|
+
readonly kind: 'override' | 'permissive' | 'restrictive';
|
|
237
|
+
/** Type or interface whose registry entry declared the policy. */
|
|
238
|
+
readonly source: string;
|
|
239
|
+
/** `appliesWhen(ctx)` held (override: `when(ctx)` was true). */
|
|
240
|
+
readonly applied: boolean;
|
|
241
|
+
readonly outcome: PolicyClauseOutcome;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Per-candidate result of `Model.explainPolicies()`. `visible` is the
|
|
245
|
+
* exact verdict `find` enforces for the same bound context; the other
|
|
246
|
+
* fields explain it.
|
|
247
|
+
*/
|
|
248
|
+
export interface PolicyExplanation<T = Record<string, unknown>> {
|
|
249
|
+
/** The candidate, projected with the requested selection. */
|
|
250
|
+
readonly node: T;
|
|
251
|
+
/** Would `find` return this node for the bound context? */
|
|
252
|
+
readonly visible: boolean;
|
|
253
|
+
/** Name of the override that fired, else `null`. */
|
|
254
|
+
readonly overriddenBy: string | null;
|
|
255
|
+
/**
|
|
256
|
+
* Some permissive granted access (`true` when an override fired or the
|
|
257
|
+
* type has no policies). `false` → default deny.
|
|
258
|
+
*/
|
|
259
|
+
readonly permissiveGranted: boolean;
|
|
260
|
+
/** Names of applied restrictives whose outcome is `fail` or `null`. */
|
|
261
|
+
readonly failedRestrictives: ReadonlyArray<string>;
|
|
262
|
+
/** Every `read` policy for the type, in registration order. */
|
|
263
|
+
readonly policies: ReadonlyArray<PolicyClauseExplanation>;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Full resolution for one (typeName, operation, ctx) triple. Entries are
|
|
267
|
+
* in registration order — the type's own policies first, then each
|
|
268
|
+
* implemented interface's.
|
|
269
|
+
*/
|
|
270
|
+
export interface DetailedResolution<C extends PolicyContext = PolicyContext> {
|
|
271
|
+
/** Fallback-aware name of the override that fired, else `null`. */
|
|
272
|
+
readonly overriddenBy: string | null;
|
|
273
|
+
readonly entries: ReadonlyArray<DetailedPolicy<C>>;
|
|
274
|
+
}
|
|
170
275
|
/**
|
|
171
276
|
* Carries policy state through one compile pass. Created per query in
|
|
172
277
|
* `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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"}
|
package/dist/esm/policy/types.js
CHANGED
|
@@ -120,4 +120,27 @@ export function isWriteRestrictive(p) {
|
|
|
120
120
|
return true;
|
|
121
121
|
return false;
|
|
122
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolution used for a ROOT type that has no policy for the operation,
|
|
125
|
+
* when a policy context is bound anyway (v2.3.0). Binding it — instead of
|
|
126
|
+
* dropping the whole bundle — keeps `resolveForType` reachable, so the
|
|
127
|
+
* policies of every TARGET type reached through relationships (nested
|
|
128
|
+
* selection, traversal filters, nested writes) stay enforced; a type
|
|
129
|
+
* without policies must not be a gateway around its neighbours'.
|
|
130
|
+
*
|
|
131
|
+
* `overridden: true` carries exactly its documented operational meaning
|
|
132
|
+
* here ("emit no root clause"): every root-level consumer treats it like
|
|
133
|
+
* the absence of a bundle, and no target-policy consumer reads it.
|
|
134
|
+
*
|
|
135
|
+
* Compare by identity (`resolved === NO_ROOT_POLICY`) to ask "did the
|
|
136
|
+
* root resolve anything for this operation?" — e.g. `aggregate`'s
|
|
137
|
+
* fallback to `read` policies. A real override resolution is a different
|
|
138
|
+
* object and must NOT be mistaken for it.
|
|
139
|
+
*/
|
|
140
|
+
export const NO_ROOT_POLICY = Object.freeze({
|
|
141
|
+
overridden: true,
|
|
142
|
+
permissives: Object.freeze([]),
|
|
143
|
+
restrictives: Object.freeze([]),
|
|
144
|
+
evaluated: Object.freeze([]),
|
|
145
|
+
});
|
|
123
146
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/policy/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/policy/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAoLrC,8EAA8E;AAC9E,wEAAwE;AACxE,+DAA+D;AAC/D,8EAA8E;AAE9E,SAAS,MAAM,CAAmB,GAAM;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAC5B,UAA8C,EAC9C,IAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACvD,MAAM,IAAI,QAAQ,CAChB,GAAG,IAAI,kDAAkD,CAC1D,CAAC;AACN,CAAC;AAED,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAS;IAC5D,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,OAAO;IACP,GAAG;CACJ,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAC5B,UAA8C,EAC9C,IAAY;IAEZ,KAAK,MAAM,EAAE,IAAI,UAAU;QACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,QAAQ,CAChB,GAAG,IAAI,+BAA+B,EAAE,0DAA0D,CACnG,CAAC;AACR,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,IAAqC;IAErC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU;QACjC,MAAM,IAAI,QAAQ,CAChB,8EAA8E,CAC/E,CAAC;IACJ,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAGxB,IAA0C;IAC1C,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;QAC5B,MAAM,IAAI,QAAQ,CAChB,yEAAyE,CAC1E,CAAC;IACJ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU;YAC5C,MAAM,IAAI,QAAQ,CAChB,wDAAwD,CACzD,CAAC;QACJ,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;YAC1C,MAAM,IAAI,QAAQ,CAChB,sDAAsD,CACvD,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAS;IAC3D,MAAM;IACN,QAAQ;IACR,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAS;IAC5D,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAC7B,UAA8C;IAE9C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,EAAE,IAAI,UAAU;QACzB,IAAI,EAAE,KAAK,GAAG;YAAE,WAAW,GAAG,IAAI,CAAC;aAC9B,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC;aAC5C,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,QAAQ,GAAG,IAAI,CAAC;IAErD,IAAI,WAAW;QACb,MAAM,IAAI,QAAQ,CAChB,oOAAoO,CACrO,CAAC;IACJ,IAAI,OAAO,IAAI,QAAQ;QACrB,MAAM,IAAI,QAAQ,CAChB,8SAA8S,CAC/S,CAAC;IACJ,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACrC,CAAC;AAgBD,MAAM,UAAU,WAAW,CAKzB,IAE8C;IAE9C,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACtD,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEvD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAkD,CAAC;QACrE,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU;YACtC,MAAM,IAAI,QAAQ,CAChB,6MAA6M,CAC9M,CAAC;QACJ,IAAI,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS;YACzD,MAAM,IAAI,QAAQ,CAChB,+KAA+K,CAChL,CAAC;QACJ,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,YAAY;IACZ,MAAM,QAAQ,GAAG,IAAiD,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;QACpC,MAAM,IAAI,QAAQ,CAChB,0EAA0E,CAC3E,CAAC;IACJ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU;YAChD,MAAM,IAAI,QAAQ,CAChB,yDAAyD,CAC1D,CAAC;QACJ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;YAC9C,MAAM,IAAI,QAAQ,CAChB,uDAAuD,CACxD,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,2CAA2C;AAC3C,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAC/B,CAAuB;IAEvB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU;QAC3B,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAY,CAAC;YAAE,OAAO,KAAK,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,CAAuB;IAEvB,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU;QAC3B,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAY,CAAC;YAAE,OAAO,IAAI,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB,MAAM,CAAC,MAAM,CAAC;IAC5D,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;CAC7B,CAAC,CAAC"}
|