@_linked/core 2.9.0 → 2.10.0-next.20260630061713
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 +57 -0
- package/README.md +102 -59
- package/lib/cjs/expressions/ExpressionNode.d.ts +2 -1
- package/lib/cjs/expressions/ExpressionNode.js +4 -0
- package/lib/cjs/expressions/ExpressionNode.js.map +1 -1
- package/lib/cjs/index.d.ts +12 -1
- package/lib/cjs/index.js +26 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces/IDataset.d.ts +5 -3
- package/lib/cjs/package.json +7 -1
- package/lib/cjs/queries/ContextRef.d.ts +21 -0
- package/lib/cjs/queries/ContextRef.js +58 -0
- package/lib/cjs/queries/ContextRef.js.map +1 -0
- package/lib/cjs/queries/CreateBuilder.d.ts +20 -4
- package/lib/cjs/queries/CreateBuilder.js +43 -11
- package/lib/cjs/queries/CreateBuilder.js.map +1 -1
- package/lib/cjs/queries/CreateQuery.d.ts +16 -13
- package/lib/cjs/queries/CreateQuery.js +0 -17
- package/lib/cjs/queries/CreateQuery.js.map +1 -1
- package/lib/cjs/queries/DeleteBuilder.d.ts +19 -4
- package/lib/cjs/queries/DeleteBuilder.js +82 -29
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
- package/lib/cjs/queries/DeleteQuery.d.ts +16 -13
- package/lib/cjs/queries/DeleteQuery.js +0 -17
- package/lib/cjs/queries/DeleteQuery.js.map +1 -1
- package/lib/cjs/queries/IRLower.js +48 -3
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +12 -2
- package/lib/cjs/queries/MutationQuery.d.ts +9 -0
- package/lib/cjs/queries/MutationQuery.js +27 -0
- package/lib/cjs/queries/MutationQuery.js.map +1 -1
- package/lib/cjs/queries/MutationSerialization.d.ts +103 -0
- package/lib/cjs/queries/MutationSerialization.js +161 -0
- package/lib/cjs/queries/MutationSerialization.js.map +1 -0
- package/lib/cjs/queries/QueryBuilder.d.ts +44 -33
- package/lib/cjs/queries/QueryBuilder.js +55 -43
- package/lib/cjs/queries/QueryBuilder.js.map +1 -1
- package/lib/cjs/queries/QueryBuilderSerialization.js +16 -5
- package/lib/cjs/queries/QueryBuilderSerialization.js.map +1 -1
- package/lib/cjs/queries/QueryContext.d.ts +36 -0
- package/lib/cjs/queries/QueryContext.js +96 -12
- package/lib/cjs/queries/QueryContext.js.map +1 -1
- package/lib/cjs/queries/SelectQuery.d.ts +16 -7
- package/lib/cjs/queries/SelectQuery.js +22 -13
- package/lib/cjs/queries/SelectQuery.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.d.ts +23 -5
- package/lib/cjs/queries/UpdateBuilder.js +102 -43
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
- package/lib/cjs/queries/UpdateQuery.d.ts +14 -12
- package/lib/cjs/queries/UpdateQuery.js +0 -20
- package/lib/cjs/queries/UpdateQuery.js.map +1 -1
- package/lib/cjs/queries/fromJSON.d.ts +16 -0
- package/lib/cjs/queries/fromJSON.js +41 -0
- package/lib/cjs/queries/fromJSON.js.map +1 -0
- package/lib/cjs/queries/lower.d.ts +28 -0
- package/lib/cjs/queries/lower.js +115 -0
- package/lib/cjs/queries/lower.js.map +1 -0
- package/lib/cjs/queries/lowerMutationJSON.d.ts +12 -0
- package/lib/cjs/queries/lowerMutationJSON.js +135 -0
- package/lib/cjs/queries/lowerMutationJSON.js.map +1 -0
- package/lib/cjs/queries/mutationLowerSpec.d.ts +32 -0
- package/lib/cjs/queries/mutationLowerSpec.js +8 -0
- package/lib/cjs/queries/mutationLowerSpec.js.map +1 -0
- package/lib/cjs/queries/wireVersion.d.ts +7 -0
- package/lib/cjs/queries/wireVersion.js +25 -0
- package/lib/cjs/queries/wireVersion.js.map +1 -0
- package/lib/cjs/shapes/Shape.d.ts +4 -3
- package/lib/cjs/shapes/Shape.js.map +1 -1
- package/lib/cjs/sparql/SparqlDataset.js +22 -17
- package/lib/cjs/sparql/SparqlDataset.js.map +1 -1
- package/lib/cjs/sparql/irToAlgebra.js +20 -5
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
- package/lib/cjs/test-helpers/query-capture-store.js +8 -4
- package/lib/cjs/test-helpers/query-capture-store.js.map +1 -1
- package/lib/cjs/utils/LinkedStorage.d.ts +1 -1
- package/lib/cjs/utils/LinkedStorage.js +20 -7
- package/lib/cjs/utils/LinkedStorage.js.map +1 -1
- package/lib/esm/expressions/ExpressionNode.d.ts +2 -1
- package/lib/esm/expressions/ExpressionNode.js +4 -0
- package/lib/esm/expressions/ExpressionNode.js.map +1 -1
- package/lib/esm/index.d.ts +12 -1
- package/lib/esm/index.js +10 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces/IDataset.d.ts +5 -3
- package/lib/esm/package.json +7 -1
- package/lib/esm/queries/ContextRef.d.ts +21 -0
- package/lib/esm/queries/ContextRef.js +52 -0
- package/lib/esm/queries/ContextRef.js.map +1 -0
- package/lib/esm/queries/CreateBuilder.d.ts +20 -4
- package/lib/esm/queries/CreateBuilder.js +43 -11
- package/lib/esm/queries/CreateBuilder.js.map +1 -1
- package/lib/esm/queries/CreateQuery.d.ts +16 -13
- package/lib/esm/queries/CreateQuery.js +1 -15
- package/lib/esm/queries/CreateQuery.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.d.ts +19 -4
- package/lib/esm/queries/DeleteBuilder.js +82 -29
- package/lib/esm/queries/DeleteBuilder.js.map +1 -1
- package/lib/esm/queries/DeleteQuery.d.ts +16 -13
- package/lib/esm/queries/DeleteQuery.js +1 -15
- package/lib/esm/queries/DeleteQuery.js.map +1 -1
- package/lib/esm/queries/IRLower.js +48 -3
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +12 -2
- package/lib/esm/queries/MutationQuery.d.ts +9 -0
- package/lib/esm/queries/MutationQuery.js +27 -0
- package/lib/esm/queries/MutationQuery.js.map +1 -1
- package/lib/esm/queries/MutationSerialization.d.ts +103 -0
- package/lib/esm/queries/MutationSerialization.js +155 -0
- package/lib/esm/queries/MutationSerialization.js.map +1 -0
- package/lib/esm/queries/QueryBuilder.d.ts +44 -33
- package/lib/esm/queries/QueryBuilder.js +55 -42
- package/lib/esm/queries/QueryBuilder.js.map +1 -1
- package/lib/esm/queries/QueryBuilderSerialization.js +16 -5
- package/lib/esm/queries/QueryBuilderSerialization.js.map +1 -1
- package/lib/esm/queries/QueryContext.d.ts +36 -0
- package/lib/esm/queries/QueryContext.js +92 -11
- package/lib/esm/queries/QueryContext.js.map +1 -1
- package/lib/esm/queries/SelectQuery.d.ts +16 -7
- package/lib/esm/queries/SelectQuery.js +22 -13
- package/lib/esm/queries/SelectQuery.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +23 -5
- package/lib/esm/queries/UpdateBuilder.js +102 -43
- package/lib/esm/queries/UpdateBuilder.js.map +1 -1
- package/lib/esm/queries/UpdateQuery.d.ts +14 -12
- package/lib/esm/queries/UpdateQuery.js +1 -18
- package/lib/esm/queries/UpdateQuery.js.map +1 -1
- package/lib/esm/queries/fromJSON.d.ts +16 -0
- package/lib/esm/queries/fromJSON.js +38 -0
- package/lib/esm/queries/fromJSON.js.map +1 -0
- package/lib/esm/queries/lower.d.ts +28 -0
- package/lib/esm/queries/lower.js +112 -0
- package/lib/esm/queries/lower.js.map +1 -0
- package/lib/esm/queries/lowerMutationJSON.d.ts +12 -0
- package/lib/esm/queries/lowerMutationJSON.js +131 -0
- package/lib/esm/queries/lowerMutationJSON.js.map +1 -0
- package/lib/esm/queries/mutationLowerSpec.d.ts +32 -0
- package/lib/esm/queries/mutationLowerSpec.js +7 -0
- package/lib/esm/queries/mutationLowerSpec.js.map +1 -0
- package/lib/esm/queries/wireVersion.d.ts +7 -0
- package/lib/esm/queries/wireVersion.js +21 -0
- package/lib/esm/queries/wireVersion.js.map +1 -0
- package/lib/esm/shapes/Shape.d.ts +4 -3
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlDataset.js +22 -17
- package/lib/esm/sparql/SparqlDataset.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.js +20 -5
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/test-helpers/query-capture-store.js +8 -4
- package/lib/esm/test-helpers/query-capture-store.js.map +1 -1
- package/lib/esm/utils/LinkedStorage.d.ts +1 -1
- package/lib/esm/utils/LinkedStorage.js +20 -7
- package/lib/esm/utils/LinkedStorage.js.map +1 -1
- package/package.json +7 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.decodeNodeData = decodeNodeData;
|
|
9
|
+
exports.lowerMutationJSON = lowerMutationJSON;
|
|
10
|
+
const ExpressionNode_js_1 = require("../expressions/ExpressionNode.js");
|
|
11
|
+
const ShapeClass_js_1 = require("../utils/ShapeClass.js");
|
|
12
|
+
const QueryBuilderSerialization_js_1 = require("./QueryBuilderSerialization.js");
|
|
13
|
+
const IRDesugar_js_1 = require("./IRDesugar.js");
|
|
14
|
+
const IRCanonicalize_js_1 = require("./IRCanonicalize.js");
|
|
15
|
+
const IRLower_js_1 = require("./IRLower.js");
|
|
16
|
+
const IRMutation_js_1 = require("./IRMutation.js");
|
|
17
|
+
const ContextRef_js_1 = require("./ContextRef.js");
|
|
18
|
+
const wireVersion_js_1 = require("./wireVersion.js");
|
|
19
|
+
const MutationSerialization_js_1 = require("./MutationSerialization.js");
|
|
20
|
+
function requireShape(shapeId) {
|
|
21
|
+
var _a;
|
|
22
|
+
const shape = (_a = (0, ShapeClass_js_1.getShapeClass)(shapeId)) === null || _a === void 0 ? void 0 : _a.shape;
|
|
23
|
+
if (!shape) {
|
|
24
|
+
throw new Error(`Shape '${shapeId}' is not registered. The receiving side must have the shape registered to lower mutation DSL-JSON.`);
|
|
25
|
+
}
|
|
26
|
+
return shape;
|
|
27
|
+
}
|
|
28
|
+
/** Decode a tagged value to the normalized form the canonical-IR builders consume. */
|
|
29
|
+
function decodeValue(json) {
|
|
30
|
+
switch (json.kind) {
|
|
31
|
+
case 'unset':
|
|
32
|
+
return undefined;
|
|
33
|
+
case 'lit':
|
|
34
|
+
return json.value;
|
|
35
|
+
case 'date':
|
|
36
|
+
return new Date(json.value);
|
|
37
|
+
case 'ref':
|
|
38
|
+
return { id: json.id };
|
|
39
|
+
case 'ctxRef': {
|
|
40
|
+
// Lowering path: a mutation must hit a concrete node, so resolve the
|
|
41
|
+
// context now and throw if it isn't set.
|
|
42
|
+
const id = (0, ContextRef_js_1.resolveContextId)(json.name, true);
|
|
43
|
+
return { id };
|
|
44
|
+
}
|
|
45
|
+
case 'node':
|
|
46
|
+
return decodeNodeData(json.data);
|
|
47
|
+
case 'array':
|
|
48
|
+
return json.items.map((item) => decodeValue(item));
|
|
49
|
+
case 'setMod': {
|
|
50
|
+
const mod = {};
|
|
51
|
+
if (json.add) {
|
|
52
|
+
mod.$add = json.add.map((v) => decodeValue(v));
|
|
53
|
+
}
|
|
54
|
+
if (json.remove)
|
|
55
|
+
mod.$remove = json.remove.map((id) => ({ id }));
|
|
56
|
+
return mod;
|
|
57
|
+
}
|
|
58
|
+
case 'expr':
|
|
59
|
+
return new ExpressionNode_js_1.ExpressionNode(json.ir, (0, MutationSerialization_js_1.recordToRefs)(json.refs));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Rebuild a normalized node description from JSON, resolving labels via the shape. */
|
|
63
|
+
function decodeNodeData(json) {
|
|
64
|
+
const shape = requireShape(json.shape);
|
|
65
|
+
const fields = json.fields.map((f) => {
|
|
66
|
+
const prop = shape.getPropertyShape(f.prop);
|
|
67
|
+
if (!prop) {
|
|
68
|
+
throw new Error(`Property '${f.prop}' not found on shape '${shape.label || shape.id}'`);
|
|
69
|
+
}
|
|
70
|
+
return { prop, val: decodeValue(f.value) };
|
|
71
|
+
});
|
|
72
|
+
const desc = { shape, fields };
|
|
73
|
+
if (json.id)
|
|
74
|
+
desc.__id = json.id;
|
|
75
|
+
return desc;
|
|
76
|
+
}
|
|
77
|
+
function lowerWhere(shape, json) {
|
|
78
|
+
const wherePath = (0, QueryBuilderSerialization_js_1.deserializeWherePath)(shape, json);
|
|
79
|
+
const canonical = (0, IRCanonicalize_js_1.canonicalizeWhere)((0, IRDesugar_js_1.toWhere)(wherePath));
|
|
80
|
+
return (0, IRLower_js_1.lowerWhereToIR)(canonical);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Lower a mutation DSL-JSON envelope to the canonical IR mutation the dataset
|
|
84
|
+
* expects. Mirrors the IR that `lower()` produces from the live builder.
|
|
85
|
+
*/
|
|
86
|
+
function lowerMutationJSON(json) {
|
|
87
|
+
(0, wireVersion_js_1.assertWireVersion)(json.v);
|
|
88
|
+
switch (json.op) {
|
|
89
|
+
case 'create':
|
|
90
|
+
return (0, IRMutation_js_1.buildCanonicalCreateMutationIR)({
|
|
91
|
+
shape: requireShape(json.shape),
|
|
92
|
+
description: decodeNodeData(json.data),
|
|
93
|
+
});
|
|
94
|
+
case 'update': {
|
|
95
|
+
const shape = requireShape(json.shape);
|
|
96
|
+
const updates = decodeNodeData(json.data);
|
|
97
|
+
if (json.mode === 'for') {
|
|
98
|
+
// A `{$ctx}` target resolves against the current context map; a mutation
|
|
99
|
+
// must hit a concrete subject, so an unresolved context throws.
|
|
100
|
+
const id = (0, ContextRef_js_1.isContextRefJSON)(json.targetId)
|
|
101
|
+
? (0, ContextRef_js_1.resolveContextId)(json.targetId.$ctx, true)
|
|
102
|
+
: json.targetId;
|
|
103
|
+
if (!id) {
|
|
104
|
+
throw new Error('update mode "for" requires a targetId');
|
|
105
|
+
}
|
|
106
|
+
return (0, IRMutation_js_1.buildCanonicalUpdateMutationIR)({ id, shape, updates });
|
|
107
|
+
}
|
|
108
|
+
let where;
|
|
109
|
+
let wherePatterns;
|
|
110
|
+
if (json.mode === 'where') {
|
|
111
|
+
if (!json.where)
|
|
112
|
+
throw new Error('update mode "where" requires a where clause');
|
|
113
|
+
({ where, wherePatterns } = lowerWhere(shape, json.where));
|
|
114
|
+
}
|
|
115
|
+
return (0, IRMutation_js_1.buildCanonicalUpdateWhereMutationIR)({ shape, updates, where, wherePatterns });
|
|
116
|
+
}
|
|
117
|
+
case 'delete': {
|
|
118
|
+
const shape = requireShape(json.shape);
|
|
119
|
+
if (json.mode === 'ids') {
|
|
120
|
+
return (0, IRMutation_js_1.buildCanonicalDeleteMutationIR)({
|
|
121
|
+
shape,
|
|
122
|
+
// A `{$ctx}` id resolves against the live map; a delete must hit a
|
|
123
|
+
// concrete node, so an unresolved context throws.
|
|
124
|
+
ids: json.ids.map((id) => (0, ContextRef_js_1.isContextRefJSON)(id) ? { id: (0, ContextRef_js_1.resolveContextId)(id.$ctx, true) } : { id }),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (json.mode === 'all') {
|
|
128
|
+
return (0, IRMutation_js_1.buildCanonicalDeleteAllMutationIR)({ shape });
|
|
129
|
+
}
|
|
130
|
+
const { where, wherePatterns } = lowerWhere(shape, json.where);
|
|
131
|
+
return (0, IRMutation_js_1.buildCanonicalDeleteWhereMutationIR)({ shape, where, wherePatterns });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=lowerMutationJSON.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lowerMutationJSON.js","sourceRoot":"","sources":["../../../src/queries/lowerMutationJSON.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IR-free "lowering specs" — the minimal, plain description each mutation
|
|
3
|
+
* builder hands to `lower()` so the canonical-IR construction can live entirely
|
|
4
|
+
* in the IR tier. The builders depend only on these types (no IR), keeping the
|
|
5
|
+
* IR pipeline reachable solely through `lower()`.
|
|
6
|
+
*/
|
|
7
|
+
import type { Shape, ShapeConstructor } from '../shapes/Shape.js';
|
|
8
|
+
import type { UpdatePartial } from './QueryFactory.js';
|
|
9
|
+
import type { WherePath } from './SelectQuery.js';
|
|
10
|
+
import type { NodeId } from './MutationQuery.js';
|
|
11
|
+
import type { PendingQueryContext } from './QueryContext.js';
|
|
12
|
+
export interface CreateLowerSpec<S extends Shape = Shape> {
|
|
13
|
+
shapeClass: ShapeConstructor<S>;
|
|
14
|
+
/** The create data, with any fixed id already injected as `__id`. */
|
|
15
|
+
data: UpdatePartial<S>;
|
|
16
|
+
}
|
|
17
|
+
export interface UpdateLowerSpec<S extends Shape = Shape> {
|
|
18
|
+
shapeClass: ShapeConstructor<S>;
|
|
19
|
+
data: UpdatePartial<S>;
|
|
20
|
+
mode: 'for' | 'forAll' | 'where';
|
|
21
|
+
/** Resolved target id (id-based update); the builder already resolved any context. */
|
|
22
|
+
targetId?: string;
|
|
23
|
+
/** A pre-evaluated where path (where-mode). */
|
|
24
|
+
wherePath?: WherePath;
|
|
25
|
+
}
|
|
26
|
+
export interface DeleteLowerSpec<S extends Shape = Shape> {
|
|
27
|
+
shapeClass: ShapeConstructor<S>;
|
|
28
|
+
/** Ids to delete: concrete ids/`{id}` refs, or unresolved context refs (resolved at lower). */
|
|
29
|
+
ids?: (NodeId | PendingQueryContext)[];
|
|
30
|
+
mode: 'ids' | 'all' | 'where';
|
|
31
|
+
wherePath?: WherePath;
|
|
32
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=mutationLowerSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutationLowerSpec.js","sourceRoot":"","sources":["../../../src/queries/mutationLowerSpec.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Current DSL-JSON wire-format version, stamped onto every `toJSON` envelope as `v`. */
|
|
2
|
+
export declare const WIRE_VERSION = "1.0";
|
|
3
|
+
/**
|
|
4
|
+
* Validate an incoming envelope's `v`. A missing `v` is tolerated (pre-versioned /
|
|
5
|
+
* assumed current). A different MAJOR version is rejected — the structures may differ.
|
|
6
|
+
*/
|
|
7
|
+
export declare function assertWireVersion(v: unknown): void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.WIRE_VERSION = void 0;
|
|
9
|
+
exports.assertWireVersion = assertWireVersion;
|
|
10
|
+
/** Current DSL-JSON wire-format version, stamped onto every `toJSON` envelope as `v`. */
|
|
11
|
+
exports.WIRE_VERSION = '1.0';
|
|
12
|
+
/**
|
|
13
|
+
* Validate an incoming envelope's `v`. A missing `v` is tolerated (pre-versioned /
|
|
14
|
+
* assumed current). A different MAJOR version is rejected — the structures may differ.
|
|
15
|
+
*/
|
|
16
|
+
function assertWireVersion(v) {
|
|
17
|
+
if (v === undefined || v === null)
|
|
18
|
+
return;
|
|
19
|
+
const incomingMajor = String(v).split('.')[0];
|
|
20
|
+
const ourMajor = exports.WIRE_VERSION.split('.')[0];
|
|
21
|
+
if (incomingMajor !== ourMajor) {
|
|
22
|
+
throw new Error(`Unsupported DSL-JSON wire version "${v}". This build speaks ${exports.WIRE_VERSION}.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=wireVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireVersion.js","sourceRoot":"","sources":["../../../src/queries/wireVersion.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AASH,8CASC;AAhBD,yFAAyF;AAC5E,QAAA,YAAY,GAAG,KAAK,CAAC;AAElC;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,CAAU;IAC1C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO;IAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,oBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,sCAAsC,CAAC,wBAAwB,oBAAY,GAAG,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { NodeShape, PropertyShape } from './SHACL.js';
|
|
2
2
|
import type { QueryBuildFn, QueryResponseToResultType, SelectAllQueryResponse, WhereClause } from '../queries/SelectQuery.js';
|
|
3
3
|
import type { NodeReferenceValue, UpdatePartial } from '../queries/QueryFactory.js';
|
|
4
|
-
import type { NodeId } from '../queries/MutationQuery.js';
|
|
5
4
|
import { QueryBuilder } from '../queries/QueryBuilder.js';
|
|
6
5
|
import { CreateBuilder } from '../queries/CreateBuilder.js';
|
|
7
6
|
import { UpdateBuilder } from '../queries/UpdateBuilder.js';
|
|
8
|
-
import { DeleteBuilder } from '../queries/DeleteBuilder.js';
|
|
7
|
+
import { DeleteBuilder, type DeleteId } from '../queries/DeleteBuilder.js';
|
|
9
8
|
import type { ExpressionUpdateProxy, ExpressionUpdateResult } from '../expressions/ExpressionMethods.js';
|
|
10
9
|
import { ShapeSet } from '../collections/ShapeSet.js';
|
|
11
10
|
type AccessPropertiesShape<T extends Shape> = {
|
|
@@ -28,6 +27,8 @@ export declare abstract class Shape {
|
|
|
28
27
|
static shape: NodeShape;
|
|
29
28
|
static typesToShapes: Map<string, Set<typeof Shape>>;
|
|
30
29
|
__queryContextId?: string;
|
|
30
|
+
/** The query-context name this shape was registered under (for `{$ctx}` refs). */
|
|
31
|
+
__queryContextName?: string;
|
|
31
32
|
id?: string;
|
|
32
33
|
constructor(node?: string | NodeReferenceValue);
|
|
33
34
|
get nodeShape(): NodeShape;
|
|
@@ -62,7 +63,7 @@ export declare abstract class Shape {
|
|
|
62
63
|
static update<S extends Shape>(this: ShapeConstructor<S>, data: (p: ExpressionUpdateProxy<S>) => ExpressionUpdateResult<S>): UpdateBuilder<S, any>;
|
|
63
64
|
static update<S extends Shape, U extends UpdatePartial<S>>(this: ShapeConstructor<S>, data: U): UpdateBuilder<S, U>;
|
|
64
65
|
static create<S extends Shape, U extends UpdatePartial<S>>(this: ShapeConstructor<S>, updateObjectOrFn?: U): CreateBuilder<S, U>;
|
|
65
|
-
static delete<S extends Shape>(this: ShapeConstructor<S>, id:
|
|
66
|
+
static delete<S extends Shape>(this: ShapeConstructor<S>, id: DeleteId | DeleteId[] | NodeReferenceValue[]): DeleteBuilder<S>;
|
|
66
67
|
/** Delete all instances of this shape type. Returns void. */
|
|
67
68
|
static deleteAll<S extends Shape>(this: ShapeConstructor<S>): DeleteBuilder<S, void>;
|
|
68
69
|
/** Delete instances matching a condition. Sugar for `.delete().where(fn)`. Returns void. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":";;;AAeA,gEAAwD;AACxD,kEAA0D;AAC1D,kEAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ const irToAlgebra_js_1 = require("./irToAlgebra.js");
|
|
|
14
14
|
const resultMapping_js_1 = require("./resultMapping.js");
|
|
15
15
|
const sparqlUtils_js_1 = require("./sparqlUtils.js");
|
|
16
16
|
const Shape_js_1 = require("../shapes/Shape.js");
|
|
17
|
+
const lower_js_1 = require("../queries/lower.js");
|
|
17
18
|
/**
|
|
18
19
|
* Abstract base class for SPARQL-backed datasets.
|
|
19
20
|
*
|
|
@@ -48,49 +49,53 @@ class SparqlDataset extends Shape_js_1.Shape {
|
|
|
48
49
|
}
|
|
49
50
|
selectQuery(query) {
|
|
50
51
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
-
const
|
|
52
|
+
const ir = (0, lower_js_1.lower)(query);
|
|
53
|
+
const sparql = (0, irToAlgebra_js_1.selectToSparql)(ir, this.options);
|
|
52
54
|
const json = yield this.executeSparqlSelect(sparql);
|
|
53
|
-
return (0, resultMapping_js_1.mapSparqlSelectResult)(json,
|
|
55
|
+
return (0, resultMapping_js_1.mapSparqlSelectResult)(json, ir);
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
createQuery(query) {
|
|
57
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
const ir = (0, lower_js_1.lower)(query);
|
|
61
|
+
const uri = ir.data.id || (0, sparqlUtils_js_1.generateEntityUri)(ir.data.shape, this.options);
|
|
62
|
+
ir.data.id = uri;
|
|
63
|
+
const sparql = (0, irToAlgebra_js_1.createToSparql)(ir, this.options);
|
|
61
64
|
yield this.executeSparqlUpdate(sparql);
|
|
62
|
-
return (0, resultMapping_js_1.mapSparqlCreateResult)(uri,
|
|
65
|
+
return (0, resultMapping_js_1.mapSparqlCreateResult)(uri, ir);
|
|
63
66
|
});
|
|
64
67
|
}
|
|
65
68
|
updateQuery(query) {
|
|
66
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
const ir = (0, lower_js_1.lower)(query);
|
|
71
|
+
if (ir.kind === 'update_where') {
|
|
72
|
+
const sparql = (0, irToAlgebra_js_1.updateWhereToSparql)(ir, this.options);
|
|
69
73
|
yield this.executeSparqlUpdate(sparql);
|
|
70
74
|
return { id: '' };
|
|
71
75
|
}
|
|
72
|
-
const sparql = (0, irToAlgebra_js_1.updateToSparql)(
|
|
76
|
+
const sparql = (0, irToAlgebra_js_1.updateToSparql)(ir, this.options);
|
|
73
77
|
yield this.executeSparqlUpdate(sparql);
|
|
74
|
-
return (0, resultMapping_js_1.mapSparqlUpdateResult)(
|
|
78
|
+
return (0, resultMapping_js_1.mapSparqlUpdateResult)(ir);
|
|
75
79
|
});
|
|
76
80
|
}
|
|
77
81
|
deleteQuery(query) {
|
|
78
82
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
const ir = (0, lower_js_1.lower)(query);
|
|
84
|
+
if (ir.kind === 'delete_all') {
|
|
85
|
+
const sparql = (0, irToAlgebra_js_1.deleteAllToSparql)(ir, this.options);
|
|
81
86
|
yield this.executeSparqlUpdate(sparql);
|
|
82
87
|
return { deleted: [], count: 0 };
|
|
83
88
|
}
|
|
84
|
-
if (
|
|
85
|
-
const sparql = (0, irToAlgebra_js_1.deleteWhereToSparql)(
|
|
89
|
+
if (ir.kind === 'delete_where') {
|
|
90
|
+
const sparql = (0, irToAlgebra_js_1.deleteWhereToSparql)(ir, this.options);
|
|
86
91
|
yield this.executeSparqlUpdate(sparql);
|
|
87
92
|
return { deleted: [], count: 0 };
|
|
88
93
|
}
|
|
89
|
-
const sparql = (0, irToAlgebra_js_1.deleteToSparql)(
|
|
94
|
+
const sparql = (0, irToAlgebra_js_1.deleteToSparql)(ir, this.options);
|
|
90
95
|
yield this.executeSparqlUpdate(sparql);
|
|
91
96
|
return {
|
|
92
|
-
deleted:
|
|
93
|
-
count:
|
|
97
|
+
deleted: ir.ids,
|
|
98
|
+
count: ir.ids.length,
|
|
94
99
|
};
|
|
95
100
|
});
|
|
96
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlDataset.js","sourceRoot":"","sources":["../../../src/sparql/SparqlDataset.ts"],"names":[],"mappings":";;;;;;;;;;;;AAWA,qDAQ0B;AAC1B,yDAI4B;AAC5B,qDAAuE;AACvE,iDAAyC;
|
|
1
|
+
{"version":3,"file":"SparqlDataset.js","sourceRoot":"","sources":["../../../src/sparql/SparqlDataset.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ const shacl_js_1 = require("../ontologies/shacl.js");
|
|
|
23
23
|
const xsd_js_1 = require("../ontologies/xsd.js");
|
|
24
24
|
const normalizePropertyPath_js_1 = require("../paths/normalizePropertyPath.js");
|
|
25
25
|
const ShapeClass_js_1 = require("../utils/ShapeClass.js");
|
|
26
|
+
const QueryContext_js_1 = require("../queries/QueryContext.js");
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
27
28
|
// Constants
|
|
28
29
|
// ---------------------------------------------------------------------------
|
|
@@ -135,6 +136,19 @@ function bindingKey(alias, property) {
|
|
|
135
136
|
function contextAliasKey(contextIri) {
|
|
136
137
|
return `__ctx__${contextIri}`;
|
|
137
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Defense-in-depth: a `reference_expr`/`context_property_expr` must arrive here with its
|
|
141
|
+
* IRI already resolved (lowering's `resolveContextRefs` fills it from `contextName`). If it
|
|
142
|
+
* didn't — an unresolved `{$ctx}` reaching the algebra through some path that bypassed
|
|
143
|
+
* resolution — fail with a clear `UnresolvedContextError` instead of an opaque
|
|
144
|
+
* `undefined.substring` crash deeper in URI formatting.
|
|
145
|
+
*/
|
|
146
|
+
function resolvedContextIri(iri, contextName) {
|
|
147
|
+
if (iri === undefined) {
|
|
148
|
+
throw new QueryContext_js_1.UnresolvedContextError(contextName !== null && contextName !== void 0 ? contextName : '<unknown>');
|
|
149
|
+
}
|
|
150
|
+
return iri;
|
|
151
|
+
}
|
|
138
152
|
function mergeKeySets(...sets) {
|
|
139
153
|
const merged = new Set();
|
|
140
154
|
for (const set of sets) {
|
|
@@ -887,10 +901,11 @@ function processExpressionForProperties(expr, registry, optionalPropertyTriples,
|
|
|
887
901
|
// Context entity property — emit a triple with fixed IRI as subject.
|
|
888
902
|
// Use raw IRI as registry key to avoid collision between IRIs that
|
|
889
903
|
// sanitize to the same string (e.g. ctx-1 vs ctx_1).
|
|
890
|
-
const
|
|
904
|
+
const contextIri = resolvedContextIri(expr.contextIri, expr.contextName);
|
|
905
|
+
const ctxKey = contextAliasKey(contextIri);
|
|
891
906
|
if (!registry.has(ctxKey, expr.property)) {
|
|
892
907
|
const varName = registry.getOrCreate(ctxKey, expr.property);
|
|
893
|
-
const triple = tripleOf(iriTerm(
|
|
908
|
+
const triple = tripleOf(iriTerm(contextIri), resolvePropertyPredicateTerm(expr.property), varTerm(varName));
|
|
894
909
|
const triples = requiredPropertyKeys.has(bindingKey(ctxKey, expr.property))
|
|
895
910
|
? requiredPropertyTriples
|
|
896
911
|
: optionalPropertyTriples;
|
|
@@ -914,7 +929,7 @@ function collectRequiredBindingKeys(expr) {
|
|
|
914
929
|
case 'property_expr':
|
|
915
930
|
return new Set([bindingKey(expr.sourceAlias, expr.property)]);
|
|
916
931
|
case 'context_property_expr':
|
|
917
|
-
return new Set([bindingKey(contextAliasKey(expr.contextIri), expr.property)]);
|
|
932
|
+
return new Set([bindingKey(contextAliasKey(resolvedContextIri(expr.contextIri, expr.contextName)), expr.property)]);
|
|
918
933
|
case 'binary_expr':
|
|
919
934
|
return mergeKeySets(collectRequiredBindingKeys(expr.left), collectRequiredBindingKeys(expr.right));
|
|
920
935
|
case 'function_expr':
|
|
@@ -970,11 +985,11 @@ function convertExpression(expr, registry, optionalPropertyTriples) {
|
|
|
970
985
|
return { kind: 'literal_expr', value: String(value) };
|
|
971
986
|
}
|
|
972
987
|
case 'reference_expr':
|
|
973
|
-
return { kind: 'iri_expr', value: expr.value };
|
|
988
|
+
return { kind: 'iri_expr', value: resolvedContextIri(expr.value, expr.contextName) };
|
|
974
989
|
case 'alias_expr':
|
|
975
990
|
return { kind: 'variable_expr', name: expr.alias };
|
|
976
991
|
case 'context_property_expr': {
|
|
977
|
-
const ctxKey = `__ctx__${expr.contextIri}`;
|
|
992
|
+
const ctxKey = `__ctx__${resolvedContextIri(expr.contextIri, expr.contextName)}`;
|
|
978
993
|
const ctxVarName = registry.getOrCreate(ctxKey, expr.property);
|
|
979
994
|
return { kind: 'variable_expr', name: ctxVarName };
|
|
980
995
|
}
|