@_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,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: 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":"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"}
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 sparql = (0, irToAlgebra_js_1.selectToSparql)(query, this.options);
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, query);
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 uri = query.data.id || (0, sparqlUtils_js_1.generateEntityUri)(query.data.shape, this.options);
59
- query.data.id = uri;
60
- const sparql = (0, irToAlgebra_js_1.createToSparql)(query, this.options);
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, query);
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
- if (query.kind === 'update_where') {
68
- const sparql = (0, irToAlgebra_js_1.updateWhereToSparql)(query, this.options);
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)(query, this.options);
76
+ const sparql = (0, irToAlgebra_js_1.updateToSparql)(ir, this.options);
73
77
  yield this.executeSparqlUpdate(sparql);
74
- return (0, resultMapping_js_1.mapSparqlUpdateResult)(query);
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
- if (query.kind === 'delete_all') {
80
- const sparql = (0, irToAlgebra_js_1.deleteAllToSparql)(query, this.options);
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 (query.kind === 'delete_where') {
85
- const sparql = (0, irToAlgebra_js_1.deleteWhereToSparql)(query, this.options);
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)(query, this.options);
94
+ const sparql = (0, irToAlgebra_js_1.deleteToSparql)(ir, this.options);
90
95
  yield this.executeSparqlUpdate(sparql);
91
96
  return {
92
- deleted: query.ids,
93
- count: query.ids.length,
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":"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"}
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 ctxKey = contextAliasKey(expr.contextIri);
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(expr.contextIri), resolvePropertyPredicateTerm(expr.property), varTerm(varName));
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
  }