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