@_linked/core 2.9.0 → 2.10.0-next.20260630062115
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,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
*/
|
|
6
|
+
import { ExpressionNode } from '../expressions/ExpressionNode.js';
|
|
7
|
+
import { getShapeClass } from '../utils/ShapeClass.js';
|
|
8
|
+
import { deserializeWherePath, } from './QueryBuilderSerialization.js';
|
|
9
|
+
import { toWhere } from './IRDesugar.js';
|
|
10
|
+
import { canonicalizeWhere } from './IRCanonicalize.js';
|
|
11
|
+
import { lowerWhereToIR } from './IRLower.js';
|
|
12
|
+
import { buildCanonicalCreateMutationIR, buildCanonicalUpdateMutationIR, buildCanonicalUpdateWhereMutationIR, buildCanonicalDeleteMutationIR, buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
|
|
13
|
+
import { isContextRefJSON, resolveContextId } from './ContextRef.js';
|
|
14
|
+
import { assertWireVersion } from './wireVersion.js';
|
|
15
|
+
import { recordToRefs, } from './MutationSerialization.js';
|
|
16
|
+
function requireShape(shapeId) {
|
|
17
|
+
var _a;
|
|
18
|
+
const shape = (_a = getShapeClass(shapeId)) === null || _a === void 0 ? void 0 : _a.shape;
|
|
19
|
+
if (!shape) {
|
|
20
|
+
throw new Error(`Shape '${shapeId}' is not registered. The receiving side must have the shape registered to lower mutation DSL-JSON.`);
|
|
21
|
+
}
|
|
22
|
+
return shape;
|
|
23
|
+
}
|
|
24
|
+
/** Decode a tagged value to the normalized form the canonical-IR builders consume. */
|
|
25
|
+
function decodeValue(json) {
|
|
26
|
+
switch (json.kind) {
|
|
27
|
+
case 'unset':
|
|
28
|
+
return undefined;
|
|
29
|
+
case 'lit':
|
|
30
|
+
return json.value;
|
|
31
|
+
case 'date':
|
|
32
|
+
return new Date(json.value);
|
|
33
|
+
case 'ref':
|
|
34
|
+
return { id: json.id };
|
|
35
|
+
case 'ctxRef': {
|
|
36
|
+
// Lowering path: a mutation must hit a concrete node, so resolve the
|
|
37
|
+
// context now and throw if it isn't set.
|
|
38
|
+
const id = resolveContextId(json.name, true);
|
|
39
|
+
return { id };
|
|
40
|
+
}
|
|
41
|
+
case 'node':
|
|
42
|
+
return decodeNodeData(json.data);
|
|
43
|
+
case 'array':
|
|
44
|
+
return json.items.map((item) => decodeValue(item));
|
|
45
|
+
case 'setMod': {
|
|
46
|
+
const mod = {};
|
|
47
|
+
if (json.add) {
|
|
48
|
+
mod.$add = json.add.map((v) => decodeValue(v));
|
|
49
|
+
}
|
|
50
|
+
if (json.remove)
|
|
51
|
+
mod.$remove = json.remove.map((id) => ({ id }));
|
|
52
|
+
return mod;
|
|
53
|
+
}
|
|
54
|
+
case 'expr':
|
|
55
|
+
return new ExpressionNode(json.ir, recordToRefs(json.refs));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Rebuild a normalized node description from JSON, resolving labels via the shape. */
|
|
59
|
+
export function decodeNodeData(json) {
|
|
60
|
+
const shape = requireShape(json.shape);
|
|
61
|
+
const fields = json.fields.map((f) => {
|
|
62
|
+
const prop = shape.getPropertyShape(f.prop);
|
|
63
|
+
if (!prop) {
|
|
64
|
+
throw new Error(`Property '${f.prop}' not found on shape '${shape.label || shape.id}'`);
|
|
65
|
+
}
|
|
66
|
+
return { prop, val: decodeValue(f.value) };
|
|
67
|
+
});
|
|
68
|
+
const desc = { shape, fields };
|
|
69
|
+
if (json.id)
|
|
70
|
+
desc.__id = json.id;
|
|
71
|
+
return desc;
|
|
72
|
+
}
|
|
73
|
+
function lowerWhere(shape, json) {
|
|
74
|
+
const wherePath = deserializeWherePath(shape, json);
|
|
75
|
+
const canonical = canonicalizeWhere(toWhere(wherePath));
|
|
76
|
+
return lowerWhereToIR(canonical);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Lower a mutation DSL-JSON envelope to the canonical IR mutation the dataset
|
|
80
|
+
* expects. Mirrors the IR that `lower()` produces from the live builder.
|
|
81
|
+
*/
|
|
82
|
+
export function lowerMutationJSON(json) {
|
|
83
|
+
assertWireVersion(json.v);
|
|
84
|
+
switch (json.op) {
|
|
85
|
+
case 'create':
|
|
86
|
+
return buildCanonicalCreateMutationIR({
|
|
87
|
+
shape: requireShape(json.shape),
|
|
88
|
+
description: decodeNodeData(json.data),
|
|
89
|
+
});
|
|
90
|
+
case 'update': {
|
|
91
|
+
const shape = requireShape(json.shape);
|
|
92
|
+
const updates = decodeNodeData(json.data);
|
|
93
|
+
if (json.mode === 'for') {
|
|
94
|
+
// A `{$ctx}` target resolves against the current context map; a mutation
|
|
95
|
+
// must hit a concrete subject, so an unresolved context throws.
|
|
96
|
+
const id = isContextRefJSON(json.targetId)
|
|
97
|
+
? resolveContextId(json.targetId.$ctx, true)
|
|
98
|
+
: json.targetId;
|
|
99
|
+
if (!id) {
|
|
100
|
+
throw new Error('update mode "for" requires a targetId');
|
|
101
|
+
}
|
|
102
|
+
return buildCanonicalUpdateMutationIR({ id, shape, updates });
|
|
103
|
+
}
|
|
104
|
+
let where;
|
|
105
|
+
let wherePatterns;
|
|
106
|
+
if (json.mode === 'where') {
|
|
107
|
+
if (!json.where)
|
|
108
|
+
throw new Error('update mode "where" requires a where clause');
|
|
109
|
+
({ where, wherePatterns } = lowerWhere(shape, json.where));
|
|
110
|
+
}
|
|
111
|
+
return buildCanonicalUpdateWhereMutationIR({ shape, updates, where, wherePatterns });
|
|
112
|
+
}
|
|
113
|
+
case 'delete': {
|
|
114
|
+
const shape = requireShape(json.shape);
|
|
115
|
+
if (json.mode === 'ids') {
|
|
116
|
+
return buildCanonicalDeleteMutationIR({
|
|
117
|
+
shape,
|
|
118
|
+
// A `{$ctx}` id resolves against the live map; a delete must hit a
|
|
119
|
+
// concrete node, so an unresolved context throws.
|
|
120
|
+
ids: json.ids.map((id) => isContextRefJSON(id) ? { id: resolveContextId(id.$ctx, true) } : { id }),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (json.mode === 'all') {
|
|
124
|
+
return buildCanonicalDeleteAllMutationIR({ shape });
|
|
125
|
+
}
|
|
126
|
+
const { where, wherePatterns } = lowerWhere(shape, json.where);
|
|
127
|
+
return buildCanonicalDeleteWhereMutationIR({ shape, where, wherePatterns });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# 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,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# 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,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
3
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
4
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
|
+
*/
|
|
6
|
+
/** Current DSL-JSON wire-format version, stamped onto every `toJSON` envelope as `v`. */
|
|
7
|
+
export const WIRE_VERSION = '1.0';
|
|
8
|
+
/**
|
|
9
|
+
* Validate an incoming envelope's `v`. A missing `v` is tolerated (pre-versioned /
|
|
10
|
+
* assumed current). A different MAJOR version is rejected — the structures may differ.
|
|
11
|
+
*/
|
|
12
|
+
export function assertWireVersion(v) {
|
|
13
|
+
if (v === undefined || v === null)
|
|
14
|
+
return;
|
|
15
|
+
const incomingMajor = String(v).split('.')[0];
|
|
16
|
+
const ourMajor = WIRE_VERSION.split('.')[0];
|
|
17
|
+
if (incomingMajor !== ourMajor) {
|
|
18
|
+
throw new Error(`Unsupported DSL-JSON wire version "${v}". This build speaks ${WIRE_VERSION}.`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=wireVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireVersion.js","sourceRoot":"","sources":["../../../src/queries/wireVersion.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,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,YAAY,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,YAAY,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,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { selectToSparql, createToSparql, updateToSparql, updateWhereToSparql, de
|
|
|
11
11
|
import { mapSparqlSelectResult, mapSparqlCreateResult, mapSparqlUpdateResult, } from './resultMapping.js';
|
|
12
12
|
import { generateEntityUri } from './sparqlUtils.js';
|
|
13
13
|
import { Shape } from '../shapes/Shape.js';
|
|
14
|
+
import { lower } from '../queries/lower.js';
|
|
14
15
|
/**
|
|
15
16
|
* Abstract base class for SPARQL-backed datasets.
|
|
16
17
|
*
|
|
@@ -45,49 +46,53 @@ export class SparqlDataset extends Shape {
|
|
|
45
46
|
}
|
|
46
47
|
selectQuery(query) {
|
|
47
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
const
|
|
49
|
+
const ir = lower(query);
|
|
50
|
+
const sparql = selectToSparql(ir, this.options);
|
|
49
51
|
const json = yield this.executeSparqlSelect(sparql);
|
|
50
|
-
return mapSparqlSelectResult(json,
|
|
52
|
+
return mapSparqlSelectResult(json, ir);
|
|
51
53
|
});
|
|
52
54
|
}
|
|
53
55
|
createQuery(query) {
|
|
54
56
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
const ir = lower(query);
|
|
58
|
+
const uri = ir.data.id || generateEntityUri(ir.data.shape, this.options);
|
|
59
|
+
ir.data.id = uri;
|
|
60
|
+
const sparql = createToSparql(ir, this.options);
|
|
58
61
|
yield this.executeSparqlUpdate(sparql);
|
|
59
|
-
return mapSparqlCreateResult(uri,
|
|
62
|
+
return mapSparqlCreateResult(uri, ir);
|
|
60
63
|
});
|
|
61
64
|
}
|
|
62
65
|
updateQuery(query) {
|
|
63
66
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
const ir = lower(query);
|
|
68
|
+
if (ir.kind === 'update_where') {
|
|
69
|
+
const sparql = updateWhereToSparql(ir, this.options);
|
|
66
70
|
yield this.executeSparqlUpdate(sparql);
|
|
67
71
|
return { id: '' };
|
|
68
72
|
}
|
|
69
|
-
const sparql = updateToSparql(
|
|
73
|
+
const sparql = updateToSparql(ir, this.options);
|
|
70
74
|
yield this.executeSparqlUpdate(sparql);
|
|
71
|
-
return mapSparqlUpdateResult(
|
|
75
|
+
return mapSparqlUpdateResult(ir);
|
|
72
76
|
});
|
|
73
77
|
}
|
|
74
78
|
deleteQuery(query) {
|
|
75
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
const ir = lower(query);
|
|
81
|
+
if (ir.kind === 'delete_all') {
|
|
82
|
+
const sparql = deleteAllToSparql(ir, this.options);
|
|
78
83
|
yield this.executeSparqlUpdate(sparql);
|
|
79
84
|
return { deleted: [], count: 0 };
|
|
80
85
|
}
|
|
81
|
-
if (
|
|
82
|
-
const sparql = deleteWhereToSparql(
|
|
86
|
+
if (ir.kind === 'delete_where') {
|
|
87
|
+
const sparql = deleteWhereToSparql(ir, this.options);
|
|
83
88
|
yield this.executeSparqlUpdate(sparql);
|
|
84
89
|
return { deleted: [], count: 0 };
|
|
85
90
|
}
|
|
86
|
-
const sparql = deleteToSparql(
|
|
91
|
+
const sparql = deleteToSparql(ir, this.options);
|
|
87
92
|
yield this.executeSparqlUpdate(sparql);
|
|
88
93
|
return {
|
|
89
|
-
deleted:
|
|
90
|
-
count:
|
|
94
|
+
deleted: ir.ids,
|
|
95
|
+
count: ir.ids.length,
|
|
91
96
|
};
|
|
92
97
|
});
|
|
93
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlDataset.js","sourceRoot":"","sources":["../../../src/sparql/SparqlDataset.ts"],"names":[],"mappings":";;;;;;;;;AAWA,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,iBAAiB,EAAqB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SparqlDataset.js","sourceRoot":"","sources":["../../../src/sparql/SparqlDataset.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { shacl } from '../ontologies/shacl.js';
|
|
|
6
6
|
import { xsd } from '../ontologies/xsd.js';
|
|
7
7
|
import { getSimplePathId } from '../paths/normalizePropertyPath.js';
|
|
8
8
|
import { getAllShapeClasses, getShapeClass } from '../utils/ShapeClass.js';
|
|
9
|
+
import { UnresolvedContextError } from '../queries/QueryContext.js';
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Constants
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
@@ -118,6 +119,19 @@ function bindingKey(alias, property) {
|
|
|
118
119
|
function contextAliasKey(contextIri) {
|
|
119
120
|
return `__ctx__${contextIri}`;
|
|
120
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Defense-in-depth: a `reference_expr`/`context_property_expr` must arrive here with its
|
|
124
|
+
* IRI already resolved (lowering's `resolveContextRefs` fills it from `contextName`). If it
|
|
125
|
+
* didn't — an unresolved `{$ctx}` reaching the algebra through some path that bypassed
|
|
126
|
+
* resolution — fail with a clear `UnresolvedContextError` instead of an opaque
|
|
127
|
+
* `undefined.substring` crash deeper in URI formatting.
|
|
128
|
+
*/
|
|
129
|
+
function resolvedContextIri(iri, contextName) {
|
|
130
|
+
if (iri === undefined) {
|
|
131
|
+
throw new UnresolvedContextError(contextName !== null && contextName !== void 0 ? contextName : '<unknown>');
|
|
132
|
+
}
|
|
133
|
+
return iri;
|
|
134
|
+
}
|
|
121
135
|
function mergeKeySets(...sets) {
|
|
122
136
|
const merged = new Set();
|
|
123
137
|
for (const set of sets) {
|
|
@@ -870,10 +884,11 @@ function processExpressionForProperties(expr, registry, optionalPropertyTriples,
|
|
|
870
884
|
// Context entity property — emit a triple with fixed IRI as subject.
|
|
871
885
|
// Use raw IRI as registry key to avoid collision between IRIs that
|
|
872
886
|
// sanitize to the same string (e.g. ctx-1 vs ctx_1).
|
|
873
|
-
const
|
|
887
|
+
const contextIri = resolvedContextIri(expr.contextIri, expr.contextName);
|
|
888
|
+
const ctxKey = contextAliasKey(contextIri);
|
|
874
889
|
if (!registry.has(ctxKey, expr.property)) {
|
|
875
890
|
const varName = registry.getOrCreate(ctxKey, expr.property);
|
|
876
|
-
const triple = tripleOf(iriTerm(
|
|
891
|
+
const triple = tripleOf(iriTerm(contextIri), resolvePropertyPredicateTerm(expr.property), varTerm(varName));
|
|
877
892
|
const triples = requiredPropertyKeys.has(bindingKey(ctxKey, expr.property))
|
|
878
893
|
? requiredPropertyTriples
|
|
879
894
|
: optionalPropertyTriples;
|
|
@@ -897,7 +912,7 @@ function collectRequiredBindingKeys(expr) {
|
|
|
897
912
|
case 'property_expr':
|
|
898
913
|
return new Set([bindingKey(expr.sourceAlias, expr.property)]);
|
|
899
914
|
case 'context_property_expr':
|
|
900
|
-
return new Set([bindingKey(contextAliasKey(expr.contextIri), expr.property)]);
|
|
915
|
+
return new Set([bindingKey(contextAliasKey(resolvedContextIri(expr.contextIri, expr.contextName)), expr.property)]);
|
|
901
916
|
case 'binary_expr':
|
|
902
917
|
return mergeKeySets(collectRequiredBindingKeys(expr.left), collectRequiredBindingKeys(expr.right));
|
|
903
918
|
case 'function_expr':
|
|
@@ -953,11 +968,11 @@ function convertExpression(expr, registry, optionalPropertyTriples) {
|
|
|
953
968
|
return { kind: 'literal_expr', value: String(value) };
|
|
954
969
|
}
|
|
955
970
|
case 'reference_expr':
|
|
956
|
-
return { kind: 'iri_expr', value: expr.value };
|
|
971
|
+
return { kind: 'iri_expr', value: resolvedContextIri(expr.value, expr.contextName) };
|
|
957
972
|
case 'alias_expr':
|
|
958
973
|
return { kind: 'variable_expr', name: expr.alias };
|
|
959
974
|
case 'context_property_expr': {
|
|
960
|
-
const ctxKey = `__ctx__${expr.contextIri}`;
|
|
975
|
+
const ctxKey = `__ctx__${resolvedContextIri(expr.contextIri, expr.contextName)}`;
|
|
961
976
|
const ctxVarName = registry.getOrCreate(ctxKey, expr.property);
|
|
962
977
|
return { kind: 'variable_expr', name: ctxVarName };
|
|
963
978
|
}
|