@_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.
Files changed (153) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +102 -59
  3. package/lib/cjs/expressions/ExpressionNode.d.ts +2 -1
  4. package/lib/cjs/expressions/ExpressionNode.js +4 -0
  5. package/lib/cjs/expressions/ExpressionNode.js.map +1 -1
  6. package/lib/cjs/index.d.ts +12 -1
  7. package/lib/cjs/index.js +26 -1
  8. package/lib/cjs/index.js.map +1 -1
  9. package/lib/cjs/interfaces/IDataset.d.ts +5 -3
  10. package/lib/cjs/package.json +7 -1
  11. package/lib/cjs/queries/ContextRef.d.ts +21 -0
  12. package/lib/cjs/queries/ContextRef.js +58 -0
  13. package/lib/cjs/queries/ContextRef.js.map +1 -0
  14. package/lib/cjs/queries/CreateBuilder.d.ts +20 -4
  15. package/lib/cjs/queries/CreateBuilder.js +43 -11
  16. package/lib/cjs/queries/CreateBuilder.js.map +1 -1
  17. package/lib/cjs/queries/CreateQuery.d.ts +16 -13
  18. package/lib/cjs/queries/CreateQuery.js +0 -17
  19. package/lib/cjs/queries/CreateQuery.js.map +1 -1
  20. package/lib/cjs/queries/DeleteBuilder.d.ts +19 -4
  21. package/lib/cjs/queries/DeleteBuilder.js +82 -29
  22. package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
  23. package/lib/cjs/queries/DeleteQuery.d.ts +16 -13
  24. package/lib/cjs/queries/DeleteQuery.js +0 -17
  25. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  26. package/lib/cjs/queries/IRLower.js +48 -3
  27. package/lib/cjs/queries/IRLower.js.map +1 -1
  28. package/lib/cjs/queries/IntermediateRepresentation.d.ts +12 -2
  29. package/lib/cjs/queries/MutationQuery.d.ts +9 -0
  30. package/lib/cjs/queries/MutationQuery.js +27 -0
  31. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  32. package/lib/cjs/queries/MutationSerialization.d.ts +103 -0
  33. package/lib/cjs/queries/MutationSerialization.js +161 -0
  34. package/lib/cjs/queries/MutationSerialization.js.map +1 -0
  35. package/lib/cjs/queries/QueryBuilder.d.ts +44 -33
  36. package/lib/cjs/queries/QueryBuilder.js +55 -43
  37. package/lib/cjs/queries/QueryBuilder.js.map +1 -1
  38. package/lib/cjs/queries/QueryBuilderSerialization.js +16 -5
  39. package/lib/cjs/queries/QueryBuilderSerialization.js.map +1 -1
  40. package/lib/cjs/queries/QueryContext.d.ts +36 -0
  41. package/lib/cjs/queries/QueryContext.js +96 -12
  42. package/lib/cjs/queries/QueryContext.js.map +1 -1
  43. package/lib/cjs/queries/SelectQuery.d.ts +16 -7
  44. package/lib/cjs/queries/SelectQuery.js +22 -13
  45. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  46. package/lib/cjs/queries/UpdateBuilder.d.ts +23 -5
  47. package/lib/cjs/queries/UpdateBuilder.js +102 -43
  48. package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
  49. package/lib/cjs/queries/UpdateQuery.d.ts +14 -12
  50. package/lib/cjs/queries/UpdateQuery.js +0 -20
  51. package/lib/cjs/queries/UpdateQuery.js.map +1 -1
  52. package/lib/cjs/queries/fromJSON.d.ts +16 -0
  53. package/lib/cjs/queries/fromJSON.js +41 -0
  54. package/lib/cjs/queries/fromJSON.js.map +1 -0
  55. package/lib/cjs/queries/lower.d.ts +28 -0
  56. package/lib/cjs/queries/lower.js +115 -0
  57. package/lib/cjs/queries/lower.js.map +1 -0
  58. package/lib/cjs/queries/lowerMutationJSON.d.ts +12 -0
  59. package/lib/cjs/queries/lowerMutationJSON.js +135 -0
  60. package/lib/cjs/queries/lowerMutationJSON.js.map +1 -0
  61. package/lib/cjs/queries/mutationLowerSpec.d.ts +32 -0
  62. package/lib/cjs/queries/mutationLowerSpec.js +8 -0
  63. package/lib/cjs/queries/mutationLowerSpec.js.map +1 -0
  64. package/lib/cjs/queries/wireVersion.d.ts +7 -0
  65. package/lib/cjs/queries/wireVersion.js +25 -0
  66. package/lib/cjs/queries/wireVersion.js.map +1 -0
  67. package/lib/cjs/shapes/Shape.d.ts +4 -3
  68. package/lib/cjs/shapes/Shape.js.map +1 -1
  69. package/lib/cjs/sparql/SparqlDataset.js +22 -17
  70. package/lib/cjs/sparql/SparqlDataset.js.map +1 -1
  71. package/lib/cjs/sparql/irToAlgebra.js +20 -5
  72. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  73. package/lib/cjs/test-helpers/query-capture-store.js +8 -4
  74. package/lib/cjs/test-helpers/query-capture-store.js.map +1 -1
  75. package/lib/cjs/utils/LinkedStorage.d.ts +1 -1
  76. package/lib/cjs/utils/LinkedStorage.js +20 -7
  77. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  78. package/lib/esm/expressions/ExpressionNode.d.ts +2 -1
  79. package/lib/esm/expressions/ExpressionNode.js +4 -0
  80. package/lib/esm/expressions/ExpressionNode.js.map +1 -1
  81. package/lib/esm/index.d.ts +12 -1
  82. package/lib/esm/index.js +10 -1
  83. package/lib/esm/index.js.map +1 -1
  84. package/lib/esm/interfaces/IDataset.d.ts +5 -3
  85. package/lib/esm/package.json +7 -1
  86. package/lib/esm/queries/ContextRef.d.ts +21 -0
  87. package/lib/esm/queries/ContextRef.js +52 -0
  88. package/lib/esm/queries/ContextRef.js.map +1 -0
  89. package/lib/esm/queries/CreateBuilder.d.ts +20 -4
  90. package/lib/esm/queries/CreateBuilder.js +43 -11
  91. package/lib/esm/queries/CreateBuilder.js.map +1 -1
  92. package/lib/esm/queries/CreateQuery.d.ts +16 -13
  93. package/lib/esm/queries/CreateQuery.js +1 -15
  94. package/lib/esm/queries/CreateQuery.js.map +1 -1
  95. package/lib/esm/queries/DeleteBuilder.d.ts +19 -4
  96. package/lib/esm/queries/DeleteBuilder.js +82 -29
  97. package/lib/esm/queries/DeleteBuilder.js.map +1 -1
  98. package/lib/esm/queries/DeleteQuery.d.ts +16 -13
  99. package/lib/esm/queries/DeleteQuery.js +1 -15
  100. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  101. package/lib/esm/queries/IRLower.js +48 -3
  102. package/lib/esm/queries/IRLower.js.map +1 -1
  103. package/lib/esm/queries/IntermediateRepresentation.d.ts +12 -2
  104. package/lib/esm/queries/MutationQuery.d.ts +9 -0
  105. package/lib/esm/queries/MutationQuery.js +27 -0
  106. package/lib/esm/queries/MutationQuery.js.map +1 -1
  107. package/lib/esm/queries/MutationSerialization.d.ts +103 -0
  108. package/lib/esm/queries/MutationSerialization.js +155 -0
  109. package/lib/esm/queries/MutationSerialization.js.map +1 -0
  110. package/lib/esm/queries/QueryBuilder.d.ts +44 -33
  111. package/lib/esm/queries/QueryBuilder.js +55 -42
  112. package/lib/esm/queries/QueryBuilder.js.map +1 -1
  113. package/lib/esm/queries/QueryBuilderSerialization.js +16 -5
  114. package/lib/esm/queries/QueryBuilderSerialization.js.map +1 -1
  115. package/lib/esm/queries/QueryContext.d.ts +36 -0
  116. package/lib/esm/queries/QueryContext.js +92 -11
  117. package/lib/esm/queries/QueryContext.js.map +1 -1
  118. package/lib/esm/queries/SelectQuery.d.ts +16 -7
  119. package/lib/esm/queries/SelectQuery.js +22 -13
  120. package/lib/esm/queries/SelectQuery.js.map +1 -1
  121. package/lib/esm/queries/UpdateBuilder.d.ts +23 -5
  122. package/lib/esm/queries/UpdateBuilder.js +102 -43
  123. package/lib/esm/queries/UpdateBuilder.js.map +1 -1
  124. package/lib/esm/queries/UpdateQuery.d.ts +14 -12
  125. package/lib/esm/queries/UpdateQuery.js +1 -18
  126. package/lib/esm/queries/UpdateQuery.js.map +1 -1
  127. package/lib/esm/queries/fromJSON.d.ts +16 -0
  128. package/lib/esm/queries/fromJSON.js +38 -0
  129. package/lib/esm/queries/fromJSON.js.map +1 -0
  130. package/lib/esm/queries/lower.d.ts +28 -0
  131. package/lib/esm/queries/lower.js +112 -0
  132. package/lib/esm/queries/lower.js.map +1 -0
  133. package/lib/esm/queries/lowerMutationJSON.d.ts +12 -0
  134. package/lib/esm/queries/lowerMutationJSON.js +131 -0
  135. package/lib/esm/queries/lowerMutationJSON.js.map +1 -0
  136. package/lib/esm/queries/mutationLowerSpec.d.ts +32 -0
  137. package/lib/esm/queries/mutationLowerSpec.js +7 -0
  138. package/lib/esm/queries/mutationLowerSpec.js.map +1 -0
  139. package/lib/esm/queries/wireVersion.d.ts +7 -0
  140. package/lib/esm/queries/wireVersion.js +21 -0
  141. package/lib/esm/queries/wireVersion.js.map +1 -0
  142. package/lib/esm/shapes/Shape.d.ts +4 -3
  143. package/lib/esm/shapes/Shape.js.map +1 -1
  144. package/lib/esm/sparql/SparqlDataset.js +22 -17
  145. package/lib/esm/sparql/SparqlDataset.js.map +1 -1
  146. package/lib/esm/sparql/irToAlgebra.js +20 -5
  147. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  148. package/lib/esm/test-helpers/query-capture-store.js +8 -4
  149. package/lib/esm/test-helpers/query-capture-store.js.map +1 -1
  150. package/lib/esm/utils/LinkedStorage.d.ts +1 -1
  151. package/lib/esm/utils/LinkedStorage.js +20 -7
  152. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  153. 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: NodeId | NodeId[] | NodeReferenceValue[]): DeleteBuilder<S>;
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,EAAC,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AAwBpD,MAAM,OAAgB,KAAK;IAQzB,YAAY,IAAkC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAQ,IAAI,CAAC,WAA4B,CAAC,KAAK,CAAC;IAClD,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,UAAwB,EAAE,IAAyB;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAsBD,MAAM,CAAC,MAAM,CAMX,QAA6B;QAE7B,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAA8B,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAe,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,OAAyC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS;QASd,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAsC,CAAC;IACjF,CAAC;IAmBD,MAAM,CAAC,MAAM,CAEX,IAAS;QAET,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAqC,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,MAAM,CAEX,gBAAoB;QAEpB,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAA0B,CAAC;QAChE,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,OAAyC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,MAAM,CAEX,EAA4C;QAE5C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAqB,CAAC;IAC1D,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,SAAS;QAGd,OAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAsB,CAAC,GAAG,EAAE,CAAC;IAC9D,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,WAAW,CAEhB,EAAkB;QAElB,OAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,iBAAiB,CAEtB,WAAuD;QAEvD,8EAA8E;QAC9E,kEAAkE;QAClE,IAAI,UAAU,GAAQ,IAAI,IAAI,EAAE,CAAC;QACjC,UAAU,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;YACvC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ;gBACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;wBACtB,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;4BAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClC,CAAC;wBACD,IAAI,aAAa,GAAG,uBAAuB,CACzC,UAAU,CAAC,WAAW,EACtB,GAAG,CAAC,QAAQ,EAAE,CACf,CAAC;wBACF,IAAI,aAAa,EAAE,CAAC;4BAClB,OAAO,aAAa,CAAC;wBACvB,CAAC;wBACD,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,iGAAiG,CAChI,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAEb,MAAiD;QAEjD,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAK,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,GAAG,CAAC,GAAG,CAAC,KAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,QAAQ,CAAC,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;;AA5MM,iBAAW,GAAuB,IAAI,CAAC;AAEvC,mBAAa,GAAmC,IAAI,GAAG,EAAE,CAAC"}
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 sparql = selectToSparql(query, this.options);
49
+ const ir = lower(query);
50
+ const sparql = selectToSparql(ir, this.options);
49
51
  const json = yield this.executeSparqlSelect(sparql);
50
- return mapSparqlSelectResult(json, query);
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 uri = query.data.id || generateEntityUri(query.data.shape, this.options);
56
- query.data.id = uri;
57
- const sparql = createToSparql(query, this.options);
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, query);
62
+ return mapSparqlCreateResult(uri, ir);
60
63
  });
61
64
  }
62
65
  updateQuery(query) {
63
66
  return __awaiter(this, void 0, void 0, function* () {
64
- if (query.kind === 'update_where') {
65
- const sparql = updateWhereToSparql(query, this.options);
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(query, this.options);
73
+ const sparql = updateToSparql(ir, this.options);
70
74
  yield this.executeSparqlUpdate(sparql);
71
- return mapSparqlUpdateResult(query);
75
+ return mapSparqlUpdateResult(ir);
72
76
  });
73
77
  }
74
78
  deleteQuery(query) {
75
79
  return __awaiter(this, void 0, void 0, function* () {
76
- if (query.kind === 'delete_all') {
77
- const sparql = deleteAllToSparql(query, this.options);
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 (query.kind === 'delete_where') {
82
- const sparql = deleteWhereToSparql(query, this.options);
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(query, this.options);
91
+ const sparql = deleteToSparql(ir, this.options);
87
92
  yield this.executeSparqlUpdate(sparql);
88
93
  return {
89
- deleted: query.ids,
90
- count: query.ids.length,
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":"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"}
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 ctxKey = contextAliasKey(expr.contextIri);
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(expr.contextIri), resolvePropertyPredicateTerm(expr.property), varTerm(varName));
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
  }