@_linked/core 2.10.0 → 2.10.1-next.20260702052553
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 +58 -0
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/queries/CreateBuilder.js +3 -2
- package/lib/cjs/queries/CreateBuilder.js.map +1 -1
- package/lib/cjs/queries/DeleteBuilder.js +1 -1
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
- package/lib/cjs/queries/FieldSet.d.ts +32 -4
- package/lib/cjs/queries/FieldSet.js +127 -12
- package/lib/cjs/queries/FieldSet.js.map +1 -1
- package/lib/cjs/queries/MutationSerialization.d.ts +39 -40
- package/lib/cjs/queries/MutationSerialization.js +113 -87
- package/lib/cjs/queries/MutationSerialization.js.map +1 -1
- package/lib/cjs/queries/QueryBuilder.d.ts +2 -2
- package/lib/cjs/queries/QueryBuilder.js +11 -16
- package/lib/cjs/queries/QueryBuilder.js.map +1 -1
- package/lib/cjs/queries/QueryBuilderSerialization.d.ts +17 -81
- package/lib/cjs/queries/QueryBuilderSerialization.js +21 -295
- package/lib/cjs/queries/QueryBuilderSerialization.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.js +3 -3
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
- package/lib/cjs/queries/ZcExpression.d.ts +68 -0
- package/lib/cjs/queries/ZcExpression.js +369 -0
- package/lib/cjs/queries/ZcExpression.js.map +1 -0
- package/lib/cjs/queries/lowerMutationJSON.d.ts +15 -2
- package/lib/cjs/queries/lowerMutationJSON.js +68 -46
- package/lib/cjs/queries/lowerMutationJSON.js.map +1 -1
- package/lib/cjs/shapes/SHACL.js +10 -0
- package/lib/cjs/shapes/SHACL.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/queries/CreateBuilder.js +3 -2
- package/lib/esm/queries/CreateBuilder.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.js +1 -1
- package/lib/esm/queries/DeleteBuilder.js.map +1 -1
- package/lib/esm/queries/FieldSet.d.ts +32 -4
- package/lib/esm/queries/FieldSet.js +129 -14
- package/lib/esm/queries/FieldSet.js.map +1 -1
- package/lib/esm/queries/MutationSerialization.d.ts +39 -40
- package/lib/esm/queries/MutationSerialization.js +112 -86
- package/lib/esm/queries/MutationSerialization.js.map +1 -1
- package/lib/esm/queries/QueryBuilder.d.ts +2 -2
- package/lib/esm/queries/QueryBuilder.js +11 -16
- package/lib/esm/queries/QueryBuilder.js.map +1 -1
- package/lib/esm/queries/QueryBuilderSerialization.d.ts +17 -81
- package/lib/esm/queries/QueryBuilderSerialization.js +21 -260
- package/lib/esm/queries/QueryBuilderSerialization.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.js +3 -3
- package/lib/esm/queries/UpdateBuilder.js.map +1 -1
- package/lib/esm/queries/ZcExpression.d.ts +68 -0
- package/lib/esm/queries/ZcExpression.js +361 -0
- package/lib/esm/queries/ZcExpression.js.map +1 -0
- package/lib/esm/queries/lowerMutationJSON.d.ts +15 -2
- package/lib/esm/queries/lowerMutationJSON.js +69 -47
- package/lib/esm/queries/lowerMutationJSON.js.map +1 -1
- package/lib/esm/shapes/SHACL.js +10 -0
- package/lib/esm/shapes/SHACL.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import { ExpressionNode, ExistsCondition, tracedPropertyExpression, tracedAliasExpression, } from '../expressions/ExpressionNode.js';
|
|
2
|
+
import { walkPropertyPath } from './PropertyPath.js';
|
|
3
|
+
const COMPARISON_OPS = new Set([
|
|
4
|
+
'=',
|
|
5
|
+
'!=',
|
|
6
|
+
'>',
|
|
7
|
+
'>=',
|
|
8
|
+
'<',
|
|
9
|
+
'<=',
|
|
10
|
+
]);
|
|
11
|
+
const COMBINATORS = new Set(['and', 'or', 'not']);
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Path helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/** PropertyShape id = `{shapeId}/{label}` (SHACL.ts), so the label is the last segment. */
|
|
16
|
+
function labelOf(segmentIri) {
|
|
17
|
+
const i = segmentIri.lastIndexOf('/');
|
|
18
|
+
return i >= 0 ? segmentIri.slice(i + 1) : segmentIri;
|
|
19
|
+
}
|
|
20
|
+
/** Property-shape IRIs → a dotted label path. */
|
|
21
|
+
export function segmentsToPath(segmentIds) {
|
|
22
|
+
return segmentIds.map(labelOf).join('.');
|
|
23
|
+
}
|
|
24
|
+
/** A dotted label path → its property-shape IRIs, resolved against `shape`. */
|
|
25
|
+
export function pathToSegmentIds(shape, path) {
|
|
26
|
+
return walkPropertyPath(shape, path).segments.map((s) => s.id);
|
|
27
|
+
}
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// refs merging
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
function mergeRefs(into, from) {
|
|
32
|
+
for (const [k, v] of from)
|
|
33
|
+
into.set(k, v);
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// VALUE tier
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/** Encode an IR expression used as a value/operand into a Z-c value. */
|
|
39
|
+
export function encodeValueExpr(ir, refs) {
|
|
40
|
+
switch (ir.kind) {
|
|
41
|
+
case 'literal_expr': {
|
|
42
|
+
const v = ir.value;
|
|
43
|
+
if (v instanceof Date)
|
|
44
|
+
return { date: v.toISOString() };
|
|
45
|
+
return v;
|
|
46
|
+
}
|
|
47
|
+
case 'reference_expr':
|
|
48
|
+
if (ir.contextName !== undefined)
|
|
49
|
+
return { $ctx: ir.contextName };
|
|
50
|
+
return { id: ir.value };
|
|
51
|
+
case 'context_property_expr':
|
|
52
|
+
return { $ctx: ir.contextName, path: labelOf(ir.property) };
|
|
53
|
+
case 'property_expr': {
|
|
54
|
+
const segs = refs.get(ir.sourceAlias);
|
|
55
|
+
return { path: segs ? segmentsToPath(segs) : labelOf(ir.property) };
|
|
56
|
+
}
|
|
57
|
+
case 'alias_expr': {
|
|
58
|
+
const segs = refs.get(ir.alias);
|
|
59
|
+
// A bare alias_expr as a value is the node at the end of the traversal.
|
|
60
|
+
return { path: segs ? segmentsToPath(segs) : ir.alias };
|
|
61
|
+
}
|
|
62
|
+
case 'binary_expr':
|
|
63
|
+
return [
|
|
64
|
+
ir.operator,
|
|
65
|
+
encodeValueExpr(ir.left, refs),
|
|
66
|
+
encodeValueExpr(ir.right, refs),
|
|
67
|
+
];
|
|
68
|
+
case 'logical_expr':
|
|
69
|
+
return [ir.operator, ...ir.expressions.map((e) => encodeValueExpr(e, refs))];
|
|
70
|
+
case 'not_expr':
|
|
71
|
+
return ['not', encodeValueExpr(ir.expression, refs)];
|
|
72
|
+
case 'function_expr':
|
|
73
|
+
return [ir.name, ...ir.args.map((a) => encodeValueExpr(a, refs))];
|
|
74
|
+
case 'aggregate_expr':
|
|
75
|
+
return [ir.name, ...ir.args.map((a) => encodeValueExpr(a, refs))];
|
|
76
|
+
default:
|
|
77
|
+
throw new Error(`Cannot encode expression of kind '${ir.kind}'`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Decode a Z-c value back into an IR expression + its placeholder refs. */
|
|
81
|
+
export function decodeValueExpr(zc, shape) {
|
|
82
|
+
// S-expr array
|
|
83
|
+
if (Array.isArray(zc)) {
|
|
84
|
+
const [head, ...operands] = zc;
|
|
85
|
+
const refs = new Map();
|
|
86
|
+
const args = operands.map((o) => {
|
|
87
|
+
const { ir, refs: r } = decodeValueExpr(o, shape);
|
|
88
|
+
mergeRefs(refs, r);
|
|
89
|
+
return ir;
|
|
90
|
+
});
|
|
91
|
+
return { ir: headToIR(head, args), refs };
|
|
92
|
+
}
|
|
93
|
+
// Objects: recognized value-objects
|
|
94
|
+
if (zc !== null && typeof zc === 'object') {
|
|
95
|
+
const o = zc;
|
|
96
|
+
if ('id' in o) {
|
|
97
|
+
return { ir: { kind: 'reference_expr', value: o.id }, refs: new Map() };
|
|
98
|
+
}
|
|
99
|
+
if ('$ctx' in o) {
|
|
100
|
+
if (typeof o.path === 'string') {
|
|
101
|
+
const property = pathToSegmentIds(shape, o.path).pop();
|
|
102
|
+
return {
|
|
103
|
+
ir: { kind: 'context_property_expr', contextName: o.$ctx, property },
|
|
104
|
+
refs: new Map(),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { ir: { kind: 'reference_expr', contextName: o.$ctx }, refs: new Map() };
|
|
108
|
+
}
|
|
109
|
+
if ('date' in o) {
|
|
110
|
+
return { ir: { kind: 'literal_expr', value: new Date(o.date) }, refs: new Map() };
|
|
111
|
+
}
|
|
112
|
+
if ('path' in o) {
|
|
113
|
+
return propertyOrAlias(shape, o.path);
|
|
114
|
+
}
|
|
115
|
+
if ('list' in o) {
|
|
116
|
+
throw new Error('A {list} value is only valid as an in/nin operand');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// bare scalar literal
|
|
120
|
+
return { ir: { kind: 'literal_expr', value: zc }, refs: new Map() };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolve a dotted path to its expression node:
|
|
124
|
+
* - empty path `""` → `alias_expr` (the bare subject, e.g. `p.equals(x)`);
|
|
125
|
+
* - any non-empty path → `property_expr` (a property access, relation or not —
|
|
126
|
+
* `p.bestFriend.equals(x)` compares the property value, no traversal).
|
|
127
|
+
*/
|
|
128
|
+
function propertyOrAlias(shape, path) {
|
|
129
|
+
const node = path === ''
|
|
130
|
+
? tracedAliasExpression([])
|
|
131
|
+
: tracedPropertyExpression(pathToSegmentIds(shape, path));
|
|
132
|
+
return { ir: node.ir, refs: node._refs };
|
|
133
|
+
}
|
|
134
|
+
/** Build an IR node from an S-expr head symbol/name + decoded args. */
|
|
135
|
+
function headToIR(head, args) {
|
|
136
|
+
if (head === 'and' || head === 'or') {
|
|
137
|
+
return { kind: 'logical_expr', operator: head, expressions: args };
|
|
138
|
+
}
|
|
139
|
+
if (head === 'not') {
|
|
140
|
+
return { kind: 'not_expr', expression: args[0] };
|
|
141
|
+
}
|
|
142
|
+
if (COMPARISON_OPS.has(head) || '+-*/'.includes(head)) {
|
|
143
|
+
return { kind: 'binary_expr', operator: head, left: args[0], right: args[1] };
|
|
144
|
+
}
|
|
145
|
+
if (AGGREGATES.has(head)) {
|
|
146
|
+
return { kind: 'aggregate_expr', name: head, args };
|
|
147
|
+
}
|
|
148
|
+
// default: a named function (verbatim IR function name, e.g. STRLEN)
|
|
149
|
+
return { kind: 'function_expr', name: head, args };
|
|
150
|
+
}
|
|
151
|
+
const AGGREGATES = new Set(['count', 'sum', 'avg', 'min', 'max']);
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
// CONDITION tier
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
/** Encode a where-clause node (boolean) into a Z-c condition. */
|
|
156
|
+
export function encodeCondition(node, shape) {
|
|
157
|
+
if (node instanceof ExistsCondition) {
|
|
158
|
+
return encodeExists(node, shape);
|
|
159
|
+
}
|
|
160
|
+
return encodeBoolExpr(node.ir, node._refs, shape);
|
|
161
|
+
}
|
|
162
|
+
function encodeExists(ec, shape) {
|
|
163
|
+
const rel = segmentsToPath(ec.pathSegmentIds);
|
|
164
|
+
let quantifier;
|
|
165
|
+
let predIr = ec.predicate.ir;
|
|
166
|
+
const predRefs = ec.predicate._refs;
|
|
167
|
+
if (!ec.negated) {
|
|
168
|
+
quantifier = 'some';
|
|
169
|
+
}
|
|
170
|
+
else if (predIr.kind === 'not_expr') {
|
|
171
|
+
// every(fn) was built as NOT EXISTS(NOT fn) — unwrap the inner predicate.
|
|
172
|
+
quantifier = 'every';
|
|
173
|
+
predIr = predIr.expression;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
quantifier = 'none';
|
|
177
|
+
}
|
|
178
|
+
let base = {
|
|
179
|
+
[`${rel}.${quantifier}`]: encodeBoolExpr(predIr, predRefs, shape),
|
|
180
|
+
};
|
|
181
|
+
// Fold any chained and/or conditions into nested logical combinators.
|
|
182
|
+
for (const { op, condition } of ec.chain) {
|
|
183
|
+
const c = encodeCondition(condition instanceof ExistsCondition ? condition : condition, shape);
|
|
184
|
+
base = { [op]: [base, c] };
|
|
185
|
+
}
|
|
186
|
+
return base;
|
|
187
|
+
}
|
|
188
|
+
/** Encode a boolean IR expression into a Z-c condition (path-keyed where possible). */
|
|
189
|
+
function encodeBoolExpr(ir, refs, shape) {
|
|
190
|
+
if (ir.kind === 'logical_expr') {
|
|
191
|
+
const parts = ir.expressions.map((e) => encodeBoolExpr(e, refs, shape));
|
|
192
|
+
if (ir.operator === 'and') {
|
|
193
|
+
const merged = tryMergeAnd(parts);
|
|
194
|
+
if (merged)
|
|
195
|
+
return merged;
|
|
196
|
+
}
|
|
197
|
+
return { [ir.operator]: parts };
|
|
198
|
+
}
|
|
199
|
+
if (ir.kind === 'not_expr') {
|
|
200
|
+
return { not: encodeBoolExpr(ir.expression, refs, shape) };
|
|
201
|
+
}
|
|
202
|
+
if (ir.kind === 'binary_expr' && COMPARISON_OPS.has(ir.operator)) {
|
|
203
|
+
const key = pathKeyOf(ir.left, refs);
|
|
204
|
+
if (key !== null) {
|
|
205
|
+
const value = encodeValueExpr(ir.right, refs);
|
|
206
|
+
if (ir.operator === '=')
|
|
207
|
+
return { [key]: value };
|
|
208
|
+
return { [key]: { [ir.operator]: value } };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Fallback: S-expr (boolean expression that isn't a simple path-keyed shape).
|
|
212
|
+
return encodeValueExpr(ir, refs);
|
|
213
|
+
}
|
|
214
|
+
/** A path key for a left operand that is a single property/alias/context property. */
|
|
215
|
+
function pathKeyOf(ir, refs) {
|
|
216
|
+
if (ir.kind === 'property_expr') {
|
|
217
|
+
const segs = refs.get(ir.sourceAlias);
|
|
218
|
+
return segs ? segmentsToPath(segs) : labelOf(ir.property);
|
|
219
|
+
}
|
|
220
|
+
if (ir.kind === 'alias_expr') {
|
|
221
|
+
const segs = refs.get(ir.alias);
|
|
222
|
+
return segs ? segmentsToPath(segs) : null;
|
|
223
|
+
}
|
|
224
|
+
if (ir.kind === 'context_property_expr') {
|
|
225
|
+
return null; // a context property on the LHS is uncommon; use S-expr
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/** Merge AND conjuncts into one path-keyed object iff all are distinct single-key path conditions. */
|
|
230
|
+
function tryMergeAnd(parts) {
|
|
231
|
+
const out = {};
|
|
232
|
+
for (const p of parts) {
|
|
233
|
+
if (Array.isArray(p) || typeof p !== 'object' || p === null)
|
|
234
|
+
return null;
|
|
235
|
+
const keys = Object.keys(p);
|
|
236
|
+
if (keys.length !== 1)
|
|
237
|
+
return null;
|
|
238
|
+
const k = keys[0];
|
|
239
|
+
if (COMBINATORS.has(k) || k in out)
|
|
240
|
+
return null;
|
|
241
|
+
out[k] = p[k];
|
|
242
|
+
}
|
|
243
|
+
return out;
|
|
244
|
+
}
|
|
245
|
+
/** Decode a Z-c condition into a runtime WherePath (`{expressionNode}` | `{existsCondition}`). */
|
|
246
|
+
export function decodeCondition(zc, shape) {
|
|
247
|
+
const node = decodeConditionNode(zc, shape);
|
|
248
|
+
return node instanceof ExistsCondition
|
|
249
|
+
? { existsCondition: node }
|
|
250
|
+
: { expressionNode: node };
|
|
251
|
+
}
|
|
252
|
+
function decodeConditionNode(zc, shape) {
|
|
253
|
+
// S-expr fallback
|
|
254
|
+
if (Array.isArray(zc)) {
|
|
255
|
+
const { ir, refs } = decodeValueExpr(zc, shape);
|
|
256
|
+
return new ExpressionNode(ir, refs);
|
|
257
|
+
}
|
|
258
|
+
const o = zc;
|
|
259
|
+
const keys = Object.keys(o);
|
|
260
|
+
// Combinators
|
|
261
|
+
if (keys.length === 1 && COMBINATORS.has(keys[0])) {
|
|
262
|
+
const k = keys[0];
|
|
263
|
+
if (k === 'not') {
|
|
264
|
+
const inner = decodeConditionNode(o.not, shape);
|
|
265
|
+
if (inner instanceof ExistsCondition)
|
|
266
|
+
return inner.not();
|
|
267
|
+
return new ExpressionNode({ kind: 'not_expr', expression: inner.ir }, inner._refs);
|
|
268
|
+
}
|
|
269
|
+
// and / or
|
|
270
|
+
const elems = o[k].map((c) => decodeConditionNode(c, shape));
|
|
271
|
+
// An exists-chain: first operand is an ExistsCondition → fold the rest as its chain.
|
|
272
|
+
if (elems[0] instanceof ExistsCondition) {
|
|
273
|
+
let ec = elems[0];
|
|
274
|
+
for (let i = 1; i < elems.length; i++) {
|
|
275
|
+
ec = (k === 'and' ? ec.and(elems[i]) : ec.or(elems[i]));
|
|
276
|
+
}
|
|
277
|
+
return ec;
|
|
278
|
+
}
|
|
279
|
+
const refs = new Map();
|
|
280
|
+
const expressions = elems.map((e) => {
|
|
281
|
+
mergeRefs(refs, e._refs);
|
|
282
|
+
return e.ir;
|
|
283
|
+
});
|
|
284
|
+
return new ExpressionNode({ kind: 'logical_expr', operator: k, expressions }, refs);
|
|
285
|
+
}
|
|
286
|
+
// Single quantifier key: "rel.some" | "rel.every" | "rel.none"
|
|
287
|
+
if (keys.length === 1) {
|
|
288
|
+
const q = matchQuantifier(keys[0]);
|
|
289
|
+
if (q) {
|
|
290
|
+
const predicate = expressionNodeFromCondition(o[keys[0]], shape);
|
|
291
|
+
const segmentIds = pathToSegmentIds(shape, q.rel);
|
|
292
|
+
if (q.kind === 'some')
|
|
293
|
+
return new ExistsCondition(segmentIds, predicate, false);
|
|
294
|
+
if (q.kind === 'none')
|
|
295
|
+
return new ExistsCondition(segmentIds, predicate, true);
|
|
296
|
+
// every(fn) = NOT EXISTS(NOT fn)
|
|
297
|
+
return new ExistsCondition(segmentIds, new ExpressionNode({ kind: 'not_expr', expression: predicate.ir }, predicate._refs), true);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Path-keyed condition(s): one or more `path: value|opMap` → AND of comparisons.
|
|
301
|
+
const refs = new Map();
|
|
302
|
+
const comparisons = [];
|
|
303
|
+
for (const key of keys) {
|
|
304
|
+
const left = propertyOrAlias(shape, key);
|
|
305
|
+
mergeRefs(refs, left.refs);
|
|
306
|
+
const v = o[key];
|
|
307
|
+
for (const cmp of comparisonsFor(left.ir, v, shape, refs))
|
|
308
|
+
comparisons.push(cmp);
|
|
309
|
+
}
|
|
310
|
+
const ir = comparisons.length === 1
|
|
311
|
+
? comparisons[0]
|
|
312
|
+
: { kind: 'logical_expr', operator: 'and', expressions: comparisons };
|
|
313
|
+
return new ExpressionNode(ir, refs);
|
|
314
|
+
}
|
|
315
|
+
function comparisonsFor(left, value, shape, refs) {
|
|
316
|
+
// operator map: { ">": 18, "<": 65 }
|
|
317
|
+
if (isOpMap(value)) {
|
|
318
|
+
return Object.entries(value).map(([op, v]) => {
|
|
319
|
+
const r = decodeValueExpr(v, shape);
|
|
320
|
+
mergeRefs(refs, r.refs);
|
|
321
|
+
return { kind: 'binary_expr', operator: op, left, right: r.ir };
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// implicit equals
|
|
325
|
+
const r = decodeValueExpr(value, shape);
|
|
326
|
+
mergeRefs(refs, r.refs);
|
|
327
|
+
return [{ kind: 'binary_expr', operator: '=', left, right: r.ir }];
|
|
328
|
+
}
|
|
329
|
+
/** An object whose keys are all operator symbols (not a recognized value-object). */
|
|
330
|
+
function isOpMap(value) {
|
|
331
|
+
if (Array.isArray(value) || value === null || typeof value !== 'object')
|
|
332
|
+
return false;
|
|
333
|
+
const keys = Object.keys(value);
|
|
334
|
+
if (keys.length === 0)
|
|
335
|
+
return false;
|
|
336
|
+
if (keys.some((k) => k === 'id' || k === '$ctx' || k === 'path' || k === 'date' || k === 'list')) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
// Only comparison operators form an op-map. `in`/`nin` are intentionally NOT
|
|
340
|
+
// recognized here: there is no matching IR operator or encoder path yet, so
|
|
341
|
+
// accepting them would only produce a broken decode (backlog 002, G7).
|
|
342
|
+
return keys.every((k) => COMPARISON_OPS.has(k));
|
|
343
|
+
}
|
|
344
|
+
function matchQuantifier(key) {
|
|
345
|
+
for (const kind of ['some', 'every', 'none']) {
|
|
346
|
+
if (key.endsWith(`.${kind}`)) {
|
|
347
|
+
return { rel: key.slice(0, -(kind.length + 1)), kind };
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
/** A quantifier predicate decodes to an ExpressionNode (its inner boolean). */
|
|
353
|
+
function expressionNodeFromCondition(zc, shape) {
|
|
354
|
+
const node = decodeConditionNode(zc, shape);
|
|
355
|
+
if (node instanceof ExistsCondition) {
|
|
356
|
+
// Nested exists as a predicate is uncommon; wrap is not representable here.
|
|
357
|
+
throw new Error('Nested exists inside a quantifier predicate is not supported');
|
|
358
|
+
}
|
|
359
|
+
return node;
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=ZcExpression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZcExpression.js","sourceRoot":"","sources":["../../../src/queries/ZcExpression.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lower mutation DSL-JSON to canonical IR.
|
|
3
|
+
*
|
|
4
|
+
* This is the **IR side** of mutation (de)serialization, kept deliberately
|
|
5
|
+
* separate from the IR-free wire codec in `MutationSerialization.ts`. The
|
|
6
|
+
* canonical-IR builders (`IRMutation` / `IRLower` / …) are reachable only from
|
|
7
|
+
* here and from `lower()`, so a client that serializes mutations to JSON and
|
|
8
|
+
* forwards them (without ever lowering) tree-shakes the whole IR pipeline away.
|
|
9
|
+
*/
|
|
10
|
+
import type { NodeShape } from '../shapes/SHACL.js';
|
|
1
11
|
import { type NodeDescriptionValue } from './QueryFactory.js';
|
|
2
12
|
import type { IRCreateQuery } from './CreateQuery.js';
|
|
3
13
|
import type { IRUpdateQuery } from './UpdateQuery.js';
|
|
4
14
|
import type { IRDeleteQuery } from './DeleteQuery.js';
|
|
5
15
|
import { type MutationJSON, type MutationNodeDataJSON } from './MutationSerialization.js';
|
|
6
|
-
/**
|
|
7
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Rebuild a normalized node description from path-keyed JSON, resolving labels via the
|
|
18
|
+
* shape. `shape` is the shape inferred from context; `__shape` overrides it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function decodeNodeData(json: MutationNodeDataJSON, shape?: NodeShape): NodeDescriptionValue;
|
|
8
21
|
/**
|
|
9
22
|
* Lower a mutation DSL-JSON envelope to the canonical IR mutation the dataset
|
|
10
23
|
* expects. Mirrors the IR that `lower()` produces from the live builder.
|
|
@@ -12,7 +12,8 @@ import { lowerWhereToIR } from './IRLower.js';
|
|
|
12
12
|
import { buildCanonicalCreateMutationIR, buildCanonicalUpdateMutationIR, buildCanonicalUpdateWhereMutationIR, buildCanonicalDeleteMutationIR, buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
|
|
13
13
|
import { isContextRefJSON, resolveContextId } from './ContextRef.js';
|
|
14
14
|
import { assertWireVersion } from './wireVersion.js';
|
|
15
|
-
import {
|
|
15
|
+
import { valueShapeOf, } from './MutationSerialization.js';
|
|
16
|
+
import { decodeValueExpr } from './ZcExpression.js';
|
|
16
17
|
function requireShape(shapeId) {
|
|
17
18
|
var _a;
|
|
18
19
|
const shape = (_a = getShapeClass(shapeId)) === null || _a === void 0 ? void 0 : _a.shape;
|
|
@@ -21,53 +22,72 @@ function requireShape(shapeId) {
|
|
|
21
22
|
}
|
|
22
23
|
return shape;
|
|
23
24
|
}
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Decode a Z-c value to the normalized form the canonical-IR builders consume.
|
|
27
|
+
* `currentShape` resolves computed `{path}`/S-expr; `prop` gives a nested node's shape.
|
|
28
|
+
*/
|
|
29
|
+
function decodeValue(json, currentShape, prop) {
|
|
30
|
+
var _a;
|
|
31
|
+
// S-expr computed value (no IR on the wire)
|
|
32
|
+
if (Array.isArray(json)) {
|
|
33
|
+
const { ir, refs } = decodeValueExpr(json, currentShape);
|
|
34
|
+
return new ExpressionNode(ir, refs);
|
|
35
|
+
}
|
|
36
|
+
if (json === null)
|
|
37
|
+
return null;
|
|
38
|
+
if (typeof json !== 'object')
|
|
39
|
+
return json; // bare scalar literal
|
|
40
|
+
const o = json;
|
|
41
|
+
if ('unset' in o)
|
|
42
|
+
return undefined;
|
|
43
|
+
if ('date' in o)
|
|
44
|
+
return new Date(o.date);
|
|
45
|
+
if ('$ctx' in o) {
|
|
46
|
+
// Lowering path: a mutation must hit a concrete node, so resolve the
|
|
47
|
+
// context now and throw if it isn't set.
|
|
48
|
+
const id = resolveContextId(o.$ctx, true);
|
|
49
|
+
return { id };
|
|
50
|
+
}
|
|
51
|
+
if ('id' in o)
|
|
52
|
+
return { id: o.id };
|
|
53
|
+
if ('list' in o) {
|
|
54
|
+
return o.list.map((item) => decodeValue(item, currentShape, prop));
|
|
55
|
+
}
|
|
56
|
+
if ('add' in o || 'remove' in o) {
|
|
57
|
+
const mod = {};
|
|
58
|
+
if (o.add) {
|
|
59
|
+
mod.$add = o.add.map((v) => decodeValue(v, currentShape, prop));
|
|
53
60
|
}
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
if (o.remove)
|
|
62
|
+
mod.$remove = o.remove.map((id) => ({ id }));
|
|
63
|
+
return mod;
|
|
64
|
+
}
|
|
65
|
+
if ('path' in o) {
|
|
66
|
+
const { ir, refs } = decodeValueExpr(json, currentShape);
|
|
67
|
+
return new ExpressionNode(ir, refs);
|
|
56
68
|
}
|
|
69
|
+
// Otherwise: a bare path-keyed nested-node create.
|
|
70
|
+
return decodeNodeData(o, (_a = valueShapeOf(prop)) !== null && _a !== void 0 ? _a : currentShape);
|
|
57
71
|
}
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Rebuild a normalized node description from path-keyed JSON, resolving labels via the
|
|
74
|
+
* shape. `shape` is the shape inferred from context; `__shape` overrides it.
|
|
75
|
+
*/
|
|
76
|
+
export function decodeNodeData(json, shape) {
|
|
77
|
+
const nodeShape = typeof json.__shape === 'string' ? requireShape(json.__shape) : shape;
|
|
78
|
+
const fields = [];
|
|
79
|
+
for (const [key, val] of Object.entries(json)) {
|
|
80
|
+
if (key === '__id' || key === '__shape' || val === undefined)
|
|
81
|
+
continue;
|
|
82
|
+
const prop = nodeShape.getPropertyShape(key);
|
|
63
83
|
if (!prop) {
|
|
64
|
-
throw new Error(`Property '${
|
|
84
|
+
throw new Error(`Property '${key}' not found on shape '${nodeShape.label || nodeShape.id}'`);
|
|
65
85
|
}
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
const desc = { shape, fields };
|
|
69
|
-
if (json.
|
|
70
|
-
desc.__id = json.
|
|
86
|
+
fields.push({ prop, val: decodeValue(val, nodeShape, prop) });
|
|
87
|
+
}
|
|
88
|
+
const desc = { shape: nodeShape, fields };
|
|
89
|
+
if (typeof json.__id === 'string')
|
|
90
|
+
desc.__id = json.__id;
|
|
71
91
|
return desc;
|
|
72
92
|
}
|
|
73
93
|
function lowerWhere(shape, json) {
|
|
@@ -82,14 +102,16 @@ function lowerWhere(shape, json) {
|
|
|
82
102
|
export function lowerMutationJSON(json) {
|
|
83
103
|
assertWireVersion(json.v);
|
|
84
104
|
switch (json.op) {
|
|
85
|
-
case 'create':
|
|
105
|
+
case 'create': {
|
|
106
|
+
const shape = requireShape(json.shape);
|
|
86
107
|
return buildCanonicalCreateMutationIR({
|
|
87
|
-
shape
|
|
88
|
-
description: decodeNodeData(json.data),
|
|
108
|
+
shape,
|
|
109
|
+
description: decodeNodeData(json.data, shape),
|
|
89
110
|
});
|
|
111
|
+
}
|
|
90
112
|
case 'update': {
|
|
91
113
|
const shape = requireShape(json.shape);
|
|
92
|
-
const updates = decodeNodeData(json.data);
|
|
114
|
+
const updates = decodeNodeData(json.data, shape);
|
|
93
115
|
if (json.mode === 'for') {
|
|
94
116
|
// A `{$ctx}` target resolves against the current context map; a mutation
|
|
95
117
|
// must hit a concrete subject, so an unresolved context throws.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lowerMutationJSON.js","sourceRoot":"","sources":["../../../src/queries/lowerMutationJSON.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,EAAC,cAAc,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,oBAAoB,GAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,mCAAmC,EACnC,8BAA8B,EAC9B,iCAAiC,EACjC,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,YAAY,GAIb,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"lowerMutationJSON.js","sourceRoot":"","sources":["../../../src/queries/lowerMutationJSON.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/shapes/SHACL.js
CHANGED
|
@@ -308,7 +308,17 @@ const connectValueShape = (config, propertyKey, property) => {
|
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
310
|
};
|
|
311
|
+
/**
|
|
312
|
+
* The DSL-JSON where-clause combinators. A property may not be named after one,
|
|
313
|
+
* because a condition key in those positions has no `{path}` escape (the key is a
|
|
314
|
+
* bare string). See documentation/dsl-json.md (Reserved words).
|
|
315
|
+
*/
|
|
316
|
+
const RESERVED_PROPERTY_LABELS = new Set(['and', 'or', 'not']);
|
|
311
317
|
export function registerPropertyShape(shape, propertyShape) {
|
|
318
|
+
if (RESERVED_PROPERTY_LABELS.has(propertyShape.label)) {
|
|
319
|
+
throw new Error(`Property label '${propertyShape.label}' is reserved (a DSL-JSON boolean combinator) ` +
|
|
320
|
+
`and cannot be used as a property name. See documentation/dsl-json.md (Reserved words).`);
|
|
321
|
+
}
|
|
312
322
|
const inherited = shape.getPropertyShape(propertyShape.label, true);
|
|
313
323
|
const existing = shape.getPropertyShape(propertyShape.label, false);
|
|
314
324
|
if (!existing && inherited) {
|