@_linked/core 1.1.0 → 1.2.0-next.20260302120536

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 (187) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +321 -43
  3. package/lib/cjs/index.js +4 -0
  4. package/lib/cjs/index.js.map +1 -1
  5. package/lib/cjs/interfaces/IQuadStore.d.ts +19 -7
  6. package/lib/cjs/queries/CreateQuery.d.ts +7 -8
  7. package/lib/cjs/queries/CreateQuery.js +4 -4
  8. package/lib/cjs/queries/CreateQuery.js.map +1 -1
  9. package/lib/cjs/queries/DeleteQuery.d.ts +7 -8
  10. package/lib/cjs/queries/DeleteQuery.js +4 -4
  11. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  12. package/lib/cjs/queries/IRAliasScope.d.ts +20 -0
  13. package/lib/cjs/queries/IRAliasScope.js +52 -0
  14. package/lib/cjs/queries/IRAliasScope.js.map +1 -0
  15. package/lib/cjs/queries/IRCanonicalize.d.ts +36 -0
  16. package/lib/cjs/queries/IRCanonicalize.js +121 -0
  17. package/lib/cjs/queries/IRCanonicalize.js.map +1 -0
  18. package/lib/cjs/queries/IRDesugar.d.ts +98 -0
  19. package/lib/cjs/queries/IRDesugar.js +244 -0
  20. package/lib/cjs/queries/IRDesugar.js.map +1 -0
  21. package/lib/cjs/queries/IRLower.d.ts +8 -0
  22. package/lib/cjs/queries/IRLower.js +272 -0
  23. package/lib/cjs/queries/IRLower.js.map +1 -0
  24. package/lib/cjs/queries/IRMutation.d.ts +23 -0
  25. package/lib/cjs/queries/IRMutation.js +77 -0
  26. package/lib/cjs/queries/IRMutation.js.map +1 -0
  27. package/lib/cjs/queries/IRPipeline.d.ts +8 -0
  28. package/lib/cjs/queries/IRPipeline.js +25 -0
  29. package/lib/cjs/queries/IRPipeline.js.map +1 -0
  30. package/lib/cjs/queries/IRProjection.d.ts +38 -0
  31. package/lib/cjs/queries/IRProjection.js +98 -0
  32. package/lib/cjs/queries/IRProjection.js.map +1 -0
  33. package/lib/cjs/queries/IntermediateRepresentation.d.ts +210 -0
  34. package/lib/cjs/queries/IntermediateRepresentation.js +3 -0
  35. package/lib/cjs/queries/IntermediateRepresentation.js.map +1 -0
  36. package/lib/cjs/queries/MutationQuery.js +9 -23
  37. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  38. package/lib/cjs/queries/QueryFactory.d.ts +0 -2
  39. package/lib/cjs/queries/QueryFactory.js +0 -3
  40. package/lib/cjs/queries/QueryFactory.js.map +1 -1
  41. package/lib/cjs/queries/QueryParser.d.ts +6 -1
  42. package/lib/cjs/queries/QueryParser.js +14 -22
  43. package/lib/cjs/queries/QueryParser.js.map +1 -1
  44. package/lib/cjs/queries/SelectQuery.d.ts +18 -27
  45. package/lib/cjs/queries/SelectQuery.js +54 -45
  46. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  47. package/lib/cjs/queries/UpdateQuery.d.ts +8 -9
  48. package/lib/cjs/queries/UpdateQuery.js +4 -4
  49. package/lib/cjs/queries/UpdateQuery.js.map +1 -1
  50. package/lib/cjs/shapes/SHACL.d.ts +1 -0
  51. package/lib/cjs/shapes/SHACL.js +82 -2
  52. package/lib/cjs/shapes/SHACL.js.map +1 -1
  53. package/lib/cjs/shapes/Shape.d.ts +11 -10
  54. package/lib/cjs/shapes/Shape.js +11 -5
  55. package/lib/cjs/shapes/Shape.js.map +1 -1
  56. package/lib/cjs/sparql/SparqlAlgebra.d.ts +158 -0
  57. package/lib/cjs/sparql/SparqlAlgebra.js +4 -0
  58. package/lib/cjs/sparql/SparqlAlgebra.js.map +1 -0
  59. package/lib/cjs/sparql/SparqlStore.d.ts +52 -0
  60. package/lib/cjs/sparql/SparqlStore.js +81 -0
  61. package/lib/cjs/sparql/SparqlStore.js.map +1 -0
  62. package/lib/cjs/sparql/algebraToString.d.ts +13 -0
  63. package/lib/cjs/sparql/algebraToString.js +298 -0
  64. package/lib/cjs/sparql/algebraToString.js.map +1 -0
  65. package/lib/cjs/sparql/index.d.ts +9 -0
  66. package/lib/cjs/sparql/index.js +40 -0
  67. package/lib/cjs/sparql/index.js.map +1 -0
  68. package/lib/cjs/sparql/irToAlgebra.d.ts +39 -0
  69. package/lib/cjs/sparql/irToAlgebra.js +927 -0
  70. package/lib/cjs/sparql/irToAlgebra.js.map +1 -0
  71. package/lib/cjs/sparql/resultMapping.d.ts +36 -0
  72. package/lib/cjs/sparql/resultMapping.js +501 -0
  73. package/lib/cjs/sparql/resultMapping.js.map +1 -0
  74. package/lib/cjs/sparql/sparqlUtils.d.ts +32 -0
  75. package/lib/cjs/sparql/sparqlUtils.js +89 -0
  76. package/lib/cjs/sparql/sparqlUtils.js.map +1 -0
  77. package/lib/cjs/test-helpers/FusekiStore.d.ts +29 -0
  78. package/lib/cjs/test-helpers/FusekiStore.js +82 -0
  79. package/lib/cjs/test-helpers/FusekiStore.js.map +1 -0
  80. package/lib/cjs/test-helpers/fuseki-test-store.d.ts +43 -0
  81. package/lib/cjs/test-helpers/fuseki-test-store.js +144 -0
  82. package/lib/cjs/test-helpers/fuseki-test-store.js.map +1 -0
  83. package/lib/cjs/test-helpers/query-capture-store.d.ts +5 -0
  84. package/lib/cjs/test-helpers/query-capture-store.js +59 -0
  85. package/lib/cjs/test-helpers/query-capture-store.js.map +1 -0
  86. package/lib/cjs/test-helpers/query-fixtures.d.ts +700 -117
  87. package/lib/cjs/test-helpers/query-fixtures.js +39 -1
  88. package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
  89. package/lib/cjs/utils/LinkedStorage.d.ts +7 -7
  90. package/lib/cjs/utils/LinkedStorage.js +4 -3
  91. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  92. package/lib/esm/index.js +4 -0
  93. package/lib/esm/index.js.map +1 -1
  94. package/lib/esm/interfaces/IQuadStore.d.ts +19 -7
  95. package/lib/esm/queries/CreateQuery.d.ts +7 -8
  96. package/lib/esm/queries/CreateQuery.js +4 -4
  97. package/lib/esm/queries/CreateQuery.js.map +1 -1
  98. package/lib/esm/queries/DeleteQuery.d.ts +7 -8
  99. package/lib/esm/queries/DeleteQuery.js +4 -4
  100. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  101. package/lib/esm/queries/IRAliasScope.d.ts +20 -0
  102. package/lib/esm/queries/IRAliasScope.js +47 -0
  103. package/lib/esm/queries/IRAliasScope.js.map +1 -0
  104. package/lib/esm/queries/IRCanonicalize.d.ts +36 -0
  105. package/lib/esm/queries/IRCanonicalize.js +116 -0
  106. package/lib/esm/queries/IRCanonicalize.js.map +1 -0
  107. package/lib/esm/queries/IRDesugar.d.ts +98 -0
  108. package/lib/esm/queries/IRDesugar.js +240 -0
  109. package/lib/esm/queries/IRDesugar.js.map +1 -0
  110. package/lib/esm/queries/IRLower.d.ts +8 -0
  111. package/lib/esm/queries/IRLower.js +268 -0
  112. package/lib/esm/queries/IRLower.js.map +1 -0
  113. package/lib/esm/queries/IRMutation.d.ts +23 -0
  114. package/lib/esm/queries/IRMutation.js +71 -0
  115. package/lib/esm/queries/IRMutation.js.map +1 -0
  116. package/lib/esm/queries/IRPipeline.d.ts +8 -0
  117. package/lib/esm/queries/IRPipeline.js +21 -0
  118. package/lib/esm/queries/IRPipeline.js.map +1 -0
  119. package/lib/esm/queries/IRProjection.d.ts +38 -0
  120. package/lib/esm/queries/IRProjection.js +92 -0
  121. package/lib/esm/queries/IRProjection.js.map +1 -0
  122. package/lib/esm/queries/IntermediateRepresentation.d.ts +210 -0
  123. package/lib/esm/queries/IntermediateRepresentation.js +2 -0
  124. package/lib/esm/queries/IntermediateRepresentation.js.map +1 -0
  125. package/lib/esm/queries/MutationQuery.js +9 -23
  126. package/lib/esm/queries/MutationQuery.js.map +1 -1
  127. package/lib/esm/queries/QueryFactory.d.ts +0 -2
  128. package/lib/esm/queries/QueryFactory.js +0 -3
  129. package/lib/esm/queries/QueryFactory.js.map +1 -1
  130. package/lib/esm/queries/QueryParser.d.ts +6 -1
  131. package/lib/esm/queries/QueryParser.js +14 -23
  132. package/lib/esm/queries/QueryParser.js.map +1 -1
  133. package/lib/esm/queries/SelectQuery.d.ts +18 -27
  134. package/lib/esm/queries/SelectQuery.js +54 -45
  135. package/lib/esm/queries/SelectQuery.js.map +1 -1
  136. package/lib/esm/queries/UpdateQuery.d.ts +8 -9
  137. package/lib/esm/queries/UpdateQuery.js +4 -4
  138. package/lib/esm/queries/UpdateQuery.js.map +1 -1
  139. package/lib/esm/shapes/SHACL.d.ts +1 -0
  140. package/lib/esm/shapes/SHACL.js +82 -2
  141. package/lib/esm/shapes/SHACL.js.map +1 -1
  142. package/lib/esm/shapes/Shape.d.ts +11 -10
  143. package/lib/esm/shapes/Shape.js +11 -5
  144. package/lib/esm/shapes/Shape.js.map +1 -1
  145. package/lib/esm/sparql/SparqlAlgebra.d.ts +158 -0
  146. package/lib/esm/sparql/SparqlAlgebra.js +3 -0
  147. package/lib/esm/sparql/SparqlAlgebra.js.map +1 -0
  148. package/lib/esm/sparql/SparqlStore.d.ts +52 -0
  149. package/lib/esm/sparql/SparqlStore.js +77 -0
  150. package/lib/esm/sparql/SparqlStore.js.map +1 -0
  151. package/lib/esm/sparql/algebraToString.d.ts +13 -0
  152. package/lib/esm/sparql/algebraToString.js +289 -0
  153. package/lib/esm/sparql/algebraToString.js.map +1 -0
  154. package/lib/esm/sparql/index.d.ts +9 -0
  155. package/lib/esm/sparql/index.js +13 -0
  156. package/lib/esm/sparql/index.js.map +1 -0
  157. package/lib/esm/sparql/irToAlgebra.d.ts +39 -0
  158. package/lib/esm/sparql/irToAlgebra.js +917 -0
  159. package/lib/esm/sparql/irToAlgebra.js.map +1 -0
  160. package/lib/esm/sparql/resultMapping.d.ts +36 -0
  161. package/lib/esm/sparql/resultMapping.js +496 -0
  162. package/lib/esm/sparql/resultMapping.js.map +1 -0
  163. package/lib/esm/sparql/sparqlUtils.d.ts +32 -0
  164. package/lib/esm/sparql/sparqlUtils.js +82 -0
  165. package/lib/esm/sparql/sparqlUtils.js.map +1 -0
  166. package/lib/esm/test-helpers/FusekiStore.d.ts +29 -0
  167. package/lib/esm/test-helpers/FusekiStore.js +78 -0
  168. package/lib/esm/test-helpers/FusekiStore.js.map +1 -0
  169. package/lib/esm/test-helpers/fuseki-test-store.d.ts +43 -0
  170. package/lib/esm/test-helpers/fuseki-test-store.js +135 -0
  171. package/lib/esm/test-helpers/fuseki-test-store.js.map +1 -0
  172. package/lib/esm/test-helpers/query-capture-store.d.ts +5 -0
  173. package/lib/esm/test-helpers/query-capture-store.js +55 -0
  174. package/lib/esm/test-helpers/query-capture-store.js.map +1 -0
  175. package/lib/esm/test-helpers/query-fixtures.d.ts +700 -117
  176. package/lib/esm/test-helpers/query-fixtures.js +38 -0
  177. package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
  178. package/lib/esm/utils/LinkedStorage.d.ts +7 -7
  179. package/lib/esm/utils/LinkedStorage.js +4 -3
  180. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  181. package/package.json +7 -3
  182. package/lib/cjs/interfaces/IQueryParser.d.ts +0 -13
  183. package/lib/cjs/interfaces/IQueryParser.js +0 -10
  184. package/lib/cjs/interfaces/IQueryParser.js.map +0 -1
  185. package/lib/esm/interfaces/IQueryParser.d.ts +0 -13
  186. package/lib/esm/interfaces/IQueryParser.js +0 -7
  187. package/lib/esm/interfaces/IQueryParser.js.map +0 -1
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lowerSelectQuery = void 0;
4
+ const IRCanonicalize_js_1 = require("./IRCanonicalize.js");
5
+ const IRProjection_js_1 = require("./IRProjection.js");
6
+ const IRAliasScope_js_1 = require("./IRAliasScope.js");
7
+ class LoweringContext {
8
+ constructor() {
9
+ this.counter = 0;
10
+ this.patterns = [];
11
+ this.traverseMap = new Map();
12
+ this.filterMap = new Map();
13
+ this.rootAlias = this.nextAlias();
14
+ }
15
+ nextAlias() {
16
+ return `a${this.counter++}`;
17
+ }
18
+ getOrCreateTraversal(fromAlias, propertyShapeId) {
19
+ const key = `${fromAlias}:${propertyShapeId}`;
20
+ const existing = this.traverseMap.get(key);
21
+ if (existing)
22
+ return existing;
23
+ const toAlias = this.nextAlias();
24
+ this.patterns.push({
25
+ kind: 'traverse',
26
+ from: fromAlias,
27
+ to: toAlias,
28
+ property: propertyShapeId,
29
+ });
30
+ this.traverseMap.set(key, toAlias);
31
+ return toAlias;
32
+ }
33
+ generateAlias() {
34
+ return this.nextAlias();
35
+ }
36
+ /**
37
+ * Attaches an inline where filter to the traverse pattern targeting `toAlias`.
38
+ * The filter will be merged into the pattern when `getPatterns()` is called.
39
+ */
40
+ attachFilter(toAlias, filter) {
41
+ this.filterMap.set(toAlias, filter);
42
+ }
43
+ getPatterns() {
44
+ return this.patterns.map((p) => {
45
+ if (p.kind === 'traverse' && this.filterMap.has(p.to)) {
46
+ return Object.assign(Object.assign({}, p), { filter: this.filterMap.get(p.to) });
47
+ }
48
+ return p;
49
+ });
50
+ }
51
+ }
52
+ const isShapeRef = (value) => !!value && typeof value === 'object' && 'id' in value && 'shape' in value;
53
+ const isNodeRef = (value) => typeof value === 'object' && value !== null && 'id' in value;
54
+ const lowerPath = (path, options) => (0, IRProjection_js_1.lowerSelectionPathExpression)(path, options);
55
+ const lowerWhereArg = (arg, ctx, options) => {
56
+ if (typeof arg === 'string' || typeof arg === 'number' || typeof arg === 'boolean') {
57
+ return { kind: 'literal_expr', value: arg };
58
+ }
59
+ if (arg instanceof Date) {
60
+ return { kind: 'literal_expr', value: arg.toISOString() };
61
+ }
62
+ if (arg && typeof arg === 'object') {
63
+ if ('kind' in arg && arg.kind === 'arg_path') {
64
+ const argPath = arg;
65
+ if (argPath.subject && argPath.subject.id) {
66
+ // Context entity path — resolve property relative to the context IRI
67
+ const lastStep = argPath.path.steps[argPath.path.steps.length - 1];
68
+ if (lastStep && lastStep.kind === 'property_step') {
69
+ return {
70
+ kind: 'context_property_expr',
71
+ contextIri: argPath.subject.id,
72
+ property: lastStep.propertyShapeId,
73
+ };
74
+ }
75
+ }
76
+ return lowerPath(argPath.path, options);
77
+ }
78
+ if (isShapeRef(arg)) {
79
+ return { kind: 'reference_expr', value: arg.id };
80
+ }
81
+ if (isNodeRef(arg)) {
82
+ return { kind: 'reference_expr', value: arg.id };
83
+ }
84
+ }
85
+ return { kind: 'literal_expr', value: null };
86
+ };
87
+ const lowerWhere = (where, ctx, options) => {
88
+ switch (where.kind) {
89
+ case 'where_binary': {
90
+ const comp = where;
91
+ return {
92
+ kind: 'binary_expr',
93
+ operator: comp.operator,
94
+ left: lowerPath(comp.left, options),
95
+ right: comp.right.length > 0
96
+ ? lowerWhereArg(comp.right[0], ctx, options)
97
+ : { kind: 'literal_expr', value: null },
98
+ };
99
+ }
100
+ case 'where_logical': {
101
+ const logical = where;
102
+ return {
103
+ kind: 'logical_expr',
104
+ operator: logical.operator,
105
+ expressions: logical.expressions.map((expr) => lowerWhere(expr, ctx, options)),
106
+ };
107
+ }
108
+ case 'where_exists': {
109
+ const exists = where;
110
+ const traversals = [];
111
+ const localTraversalMap = new Map();
112
+ const existsResolveTraversal = (fromAlias, propertyShapeId) => {
113
+ const key = `${fromAlias}:${propertyShapeId}`;
114
+ const existing = localTraversalMap.get(key);
115
+ if (existing)
116
+ return existing;
117
+ const toAlias = ctx.generateAlias();
118
+ traversals.push({
119
+ kind: 'traverse',
120
+ from: fromAlias,
121
+ to: toAlias,
122
+ property: propertyShapeId,
123
+ });
124
+ localTraversalMap.set(key, toAlias);
125
+ return toAlias;
126
+ };
127
+ let existsRootAlias = options.rootAlias;
128
+ for (const step of exists.path.steps) {
129
+ if (step.kind === 'property_step') {
130
+ existsRootAlias = existsResolveTraversal(existsRootAlias, step.propertyShapeId);
131
+ }
132
+ }
133
+ const filter = lowerWhere(exists.predicate, ctx, {
134
+ rootAlias: existsRootAlias,
135
+ resolveTraversal: existsResolveTraversal,
136
+ });
137
+ return {
138
+ kind: 'exists_expr',
139
+ pattern: traversals.length === 1
140
+ ? traversals[0]
141
+ : { kind: 'join', patterns: traversals },
142
+ filter,
143
+ };
144
+ }
145
+ case 'where_not': {
146
+ const not = where;
147
+ return {
148
+ kind: 'not_expr',
149
+ expression: lowerWhere(not.expression, ctx, options),
150
+ };
151
+ }
152
+ default:
153
+ throw new Error(`Unknown canonical where kind: ${where.kind}`);
154
+ }
155
+ };
156
+ const combineWithParentPath = (parentPath, path) => ({
157
+ kind: 'selection_path',
158
+ steps: [...parentPath, ...path.steps],
159
+ });
160
+ /**
161
+ * Lowers a canonical desugared select query into the final IRSelectQuery.
162
+ * Introduces aliases, graph patterns (shape scans, traversals), and
163
+ * converts selection paths and where-clauses into IR expressions.
164
+ */
165
+ const lowerSelectQuery = (canonical) => {
166
+ const ctx = new LoweringContext();
167
+ const pathOptions = {
168
+ rootAlias: ctx.rootAlias,
169
+ resolveTraversal: (fromAlias, propertyShapeId) => ctx.getOrCreateTraversal(fromAlias, propertyShapeId),
170
+ };
171
+ const root = {
172
+ kind: 'shape_scan',
173
+ shape: canonical.shapeId || '',
174
+ alias: ctx.rootAlias,
175
+ };
176
+ const aliasAfterPath = (steps) => {
177
+ let currentAlias = pathOptions.rootAlias;
178
+ for (const step of steps) {
179
+ if (step.kind === 'property_step') {
180
+ currentAlias = pathOptions.resolveTraversal(currentAlias, step.propertyShapeId);
181
+ }
182
+ }
183
+ return currentAlias;
184
+ };
185
+ const collectProjectionSeeds = (selection, key, parentPath = []) => {
186
+ if (selection.kind === 'selection_path') {
187
+ return [{
188
+ kind: 'path',
189
+ path: combineWithParentPath(parentPath, selection),
190
+ key,
191
+ }];
192
+ }
193
+ if (selection.kind === 'sub_select') {
194
+ return collectProjectionSeeds(selection.selections, key, [...parentPath, ...selection.parentPath]);
195
+ }
196
+ if (selection.kind === 'custom_object_select') {
197
+ return selection.entries.flatMap((entry) => collectProjectionSeeds(entry.value, entry.key, parentPath));
198
+ }
199
+ if (selection.kind === 'multi_selection') {
200
+ return selection.selections.map((path) => ({
201
+ kind: 'path',
202
+ path: combineWithParentPath(parentPath, path),
203
+ key,
204
+ }));
205
+ }
206
+ if (selection.kind === 'evaluation_select') {
207
+ const canonicalWhere = (0, IRCanonicalize_js_1.canonicalizeWhere)(selection.where);
208
+ return [{
209
+ kind: 'expression',
210
+ key: key || 'value',
211
+ expression: lowerWhere(canonicalWhere, ctx, {
212
+ rootAlias: aliasAfterPath(parentPath),
213
+ resolveTraversal: pathOptions.resolveTraversal,
214
+ }),
215
+ }];
216
+ }
217
+ return [];
218
+ };
219
+ const projectionSeeds = canonical.selections.flatMap((selection) => collectProjectionSeeds(selection));
220
+ const projectionScope = new IRAliasScope_js_1.IRAliasScope('projection');
221
+ projectionScope.registerAlias(ctx.rootAlias, 'root');
222
+ const projection = [];
223
+ const resultMapEntries = [];
224
+ // Inline filter handler: when a property step has `.where()`, canonicalize
225
+ // and lower the where predicate, then attach it to the traverse pattern.
226
+ const inlineFilterHandler = (traverseAlias, where) => {
227
+ const canonical = (0, IRCanonicalize_js_1.canonicalizeWhere)(where);
228
+ const filterExpr = lowerWhere(canonical, ctx, {
229
+ rootAlias: traverseAlias,
230
+ resolveTraversal: pathOptions.resolveTraversal,
231
+ });
232
+ ctx.attachFilter(traverseAlias, filterExpr);
233
+ };
234
+ for (const seed of projectionSeeds) {
235
+ const key = seed.kind === 'path'
236
+ ? (seed.key || (0, IRProjection_js_1.projectionKeyFromPath)(seed.path))
237
+ : seed.key;
238
+ const alias = projectionScope.generateAlias(key).alias;
239
+ projection.push({
240
+ alias,
241
+ expression: seed.kind === 'path'
242
+ ? (0, IRProjection_js_1.lowerSelectionPathExpression)(seed.path, pathOptions, inlineFilterHandler)
243
+ : seed.expression,
244
+ });
245
+ resultMapEntries.push({
246
+ key,
247
+ alias,
248
+ });
249
+ }
250
+ const where = canonical.where ? lowerWhere(canonical.where, ctx, pathOptions) : undefined;
251
+ const orderBy = canonical.sortBy
252
+ ? canonical.sortBy.paths.map((path) => ({
253
+ expression: lowerPath(path, pathOptions),
254
+ direction: canonical.sortBy.direction,
255
+ }))
256
+ : undefined;
257
+ return {
258
+ kind: 'select',
259
+ root,
260
+ patterns: ctx.getPatterns(),
261
+ projection,
262
+ where,
263
+ orderBy,
264
+ limit: canonical.limit,
265
+ offset: canonical.offset,
266
+ subjectId: canonical.subjectId,
267
+ singleResult: canonical.singleResult,
268
+ resultMap: resultMapEntries,
269
+ };
270
+ };
271
+ exports.lowerSelectQuery = lowerSelectQuery;
272
+ //# sourceMappingURL=IRLower.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRLower.js","sourceRoot":"","sources":["../../../src/queries/IRLower.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { NodeShape } from '../shapes/SHACL.js';
2
+ import { NodeDescriptionValue, NodeReferenceValue } from './QueryFactory.js';
3
+ import { IRCreateMutation, IRDeleteMutation, IRUpdateMutation } from './IntermediateRepresentation.js';
4
+ type CreateMutationInput = {
5
+ shape: NodeShape;
6
+ description: NodeDescriptionValue;
7
+ };
8
+ type UpdateMutationInput = {
9
+ id: string;
10
+ shape: NodeShape;
11
+ updates: NodeDescriptionValue;
12
+ };
13
+ type DeleteMutationInput = {
14
+ shape: NodeShape;
15
+ ids: NodeReferenceValue[];
16
+ };
17
+ /** Builds an IRCreateMutation from a create factory's internal description. */
18
+ export declare const buildCanonicalCreateMutationIR: (query: CreateMutationInput) => IRCreateMutation;
19
+ /** Builds an IRUpdateMutation from an update factory's internal description. */
20
+ export declare const buildCanonicalUpdateMutationIR: (query: UpdateMutationInput) => IRUpdateMutation;
21
+ /** Builds an IRDeleteMutation from a delete factory's internal description. */
22
+ export declare const buildCanonicalDeleteMutationIR: (query: DeleteMutationInput) => IRDeleteMutation;
23
+ export {};
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCanonicalDeleteMutationIR = exports.buildCanonicalUpdateMutationIR = exports.buildCanonicalCreateMutationIR = void 0;
4
+ const QueryFactory_js_1 = require("./QueryFactory.js");
5
+ const toNodeReference = (value) => ({
6
+ id: value.id,
7
+ });
8
+ const toSetModification = (value) => {
9
+ return {
10
+ add: value.$add
11
+ ? value.$add.map((item) => toFieldValue(item))
12
+ : undefined,
13
+ remove: value.$remove ? value.$remove.map((item) => toNodeReference(item)) : undefined,
14
+ };
15
+ };
16
+ const toSingleFieldValue = (value) => {
17
+ if (value === undefined) {
18
+ return undefined;
19
+ }
20
+ if (typeof value === 'string' ||
21
+ typeof value === 'number' ||
22
+ typeof value === 'boolean' ||
23
+ value instanceof Date) {
24
+ return value;
25
+ }
26
+ if ('id' in value) {
27
+ return toNodeReference(value);
28
+ }
29
+ return toNodeData(value);
30
+ };
31
+ const toFieldValue = (value) => {
32
+ if (Array.isArray(value)) {
33
+ return value.map((item) => toSingleFieldValue(item));
34
+ }
35
+ if ((0, QueryFactory_js_1.isSetModificationValue)(value)) {
36
+ return toSetModification(value);
37
+ }
38
+ return toSingleFieldValue(value);
39
+ };
40
+ const toFieldUpdate = (field) => {
41
+ return {
42
+ property: field.prop.id,
43
+ value: toFieldValue(field.val),
44
+ };
45
+ };
46
+ const toNodeData = (description) => {
47
+ return Object.assign({ shape: description.shape.id, fields: description.fields.map(toFieldUpdate) }, (description.__id ? { id: description.__id } : {}));
48
+ };
49
+ /** Builds an IRCreateMutation from a create factory's internal description. */
50
+ const buildCanonicalCreateMutationIR = (query) => {
51
+ return {
52
+ kind: 'create',
53
+ shape: query.shape.id,
54
+ data: toNodeData(query.description),
55
+ };
56
+ };
57
+ exports.buildCanonicalCreateMutationIR = buildCanonicalCreateMutationIR;
58
+ /** Builds an IRUpdateMutation from an update factory's internal description. */
59
+ const buildCanonicalUpdateMutationIR = (query) => {
60
+ return {
61
+ kind: 'update',
62
+ shape: query.shape.id,
63
+ id: query.id,
64
+ data: toNodeData(query.updates),
65
+ };
66
+ };
67
+ exports.buildCanonicalUpdateMutationIR = buildCanonicalUpdateMutationIR;
68
+ /** Builds an IRDeleteMutation from a delete factory's internal description. */
69
+ const buildCanonicalDeleteMutationIR = (query) => {
70
+ return {
71
+ kind: 'delete',
72
+ shape: query.shape.id,
73
+ ids: query.ids.map((id) => ({ id: id.id })),
74
+ };
75
+ };
76
+ exports.buildCanonicalDeleteMutationIR = buildCanonicalDeleteMutationIR;
77
+ //# sourceMappingURL=IRMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRMutation.js","sourceRoot":"","sources":["../../../src/queries/IRMutation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { RawSelectInput } from './IRDesugar.js';
2
+ import { IRSelectQuery } from './IntermediateRepresentation.js';
3
+ /**
4
+ * Runs the full select pipeline: desugar → canonicalize → lower.
5
+ * Accepts either a RawSelectInput (from a query factory) or an already-built
6
+ * IRSelectQuery (returned as-is).
7
+ */
8
+ export declare const buildSelectQuery: (query: RawSelectInput | IRSelectQuery) => IRSelectQuery;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSelectQuery = void 0;
4
+ const IRDesugar_js_1 = require("./IRDesugar.js");
5
+ const IRCanonicalize_js_1 = require("./IRCanonicalize.js");
6
+ const IRLower_js_1 = require("./IRLower.js");
7
+ const isIRSelectQuery = (query) => !!query &&
8
+ typeof query === 'object' &&
9
+ 'kind' in query &&
10
+ query.kind === 'select';
11
+ /**
12
+ * Runs the full select pipeline: desugar → canonicalize → lower.
13
+ * Accepts either a RawSelectInput (from a query factory) or an already-built
14
+ * IRSelectQuery (returned as-is).
15
+ */
16
+ const buildSelectQuery = (query) => {
17
+ if (isIRSelectQuery(query)) {
18
+ return query;
19
+ }
20
+ const desugared = (0, IRDesugar_js_1.desugarSelectQuery)(query);
21
+ const canonical = (0, IRCanonicalize_js_1.canonicalizeDesugaredSelectQuery)(desugared);
22
+ return (0, IRLower_js_1.lowerSelectQuery)(canonical);
23
+ };
24
+ exports.buildSelectQuery = buildSelectQuery;
25
+ //# sourceMappingURL=IRPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRPipeline.js","sourceRoot":"","sources":["../../../src/queries/IRPipeline.ts"],"names":[],"mappings":";;;AAAA,iDAAkE;AAClE,2DAAqE;AACrE,6CAA8C;AAG9C,MAAM,eAAe,GAAG,CAAC,KAAc,EAA0B,EAAE,CACjE,CAAC,CAAC,KAAK;IACP,OAAO,KAAK,KAAK,QAAQ;IACzB,MAAM,IAAI,KAAK;IACd,KAAuB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAE7C;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,KAAqC,EAAiB,EAAE;IACvF,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,iCAAkB,EAAC,KAAuB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAA,oDAAgC,EAAC,SAAS,CAAC,CAAC;IAC9D,OAAO,IAAA,6BAAgB,EAAC,SAAS,CAAC,CAAC;AACrC,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B"}
@@ -0,0 +1,38 @@
1
+ import { DesugaredSelectionPath, DesugaredWhere } from './IRDesugar.js';
2
+ import { IRAliasScope } from './IRAliasScope.js';
3
+ import { IRExpression, IRProjectionItem, IRResultMapEntry } from './IntermediateRepresentation.js';
4
+ /**
5
+ * Callback invoked when a property step with an inline `.where()` is encountered
6
+ * during path lowering. The callback receives the traversal alias (target entity)
7
+ * and the desugared where predicate so the caller can canonicalize and lower it.
8
+ */
9
+ export type InlineFilterCallback = (traverseAlias: string, where: DesugaredWhere) => void;
10
+ export type ProjectionPathLoweringOptions = {
11
+ rootAlias: string;
12
+ resolveTraversal: (fromAlias: string, propertyShapeId: string) => string;
13
+ };
14
+ export type CanonicalProjectionResult = {
15
+ projection: IRProjectionItem[];
16
+ resultMap?: IRResultMapEntry[];
17
+ };
18
+ export type ProjectionPathInput = DesugaredSelectionPath | {
19
+ path: DesugaredSelectionPath;
20
+ key?: string;
21
+ };
22
+ /** Derives a result key name from the last step of a selection path. */
23
+ export declare const projectionKeyFromPath: (path: DesugaredSelectionPath) => string;
24
+ /**
25
+ * Lowers a single desugared selection path into an IR expression,
26
+ * creating traversal aliases for intermediate property steps.
27
+ *
28
+ * When `onInlineFilter` is provided, property steps with `.where()` will
29
+ * force a traversal creation and invoke the callback with the traversal
30
+ * alias and the where predicate. For last steps with `.where()`, an
31
+ * `alias_expr` is returned instead of a `property_expr`.
32
+ */
33
+ export declare const lowerSelectionPathExpression: (path: DesugaredSelectionPath, options: ProjectionPathLoweringOptions, onInlineFilter?: InlineFilterCallback) => IRExpression;
34
+ /**
35
+ * Builds projection items and a result map from an array of selection paths.
36
+ * Each path gets a unique alias and is lowered into an IR expression.
37
+ */
38
+ export declare const buildCanonicalProjection: (selections: ProjectionPathInput[], options: ProjectionPathLoweringOptions, scope?: IRAliasScope) => CanonicalProjectionResult;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildCanonicalProjection = exports.lowerSelectionPathExpression = exports.projectionKeyFromPath = void 0;
4
+ const IRAliasScope_js_1 = require("./IRAliasScope.js");
5
+ /** Derives a result key name from the last step of a selection path. */
6
+ const projectionKeyFromPath = (path) => {
7
+ if (!path.steps.length)
8
+ return 'value';
9
+ const lastStep = path.steps[path.steps.length - 1];
10
+ if (lastStep.kind === 'property_step')
11
+ return lastStep.propertyShapeId;
12
+ if (lastStep.kind === 'count_step')
13
+ return lastStep.label || 'count';
14
+ if (lastStep.kind === 'type_cast_step')
15
+ return lastStep.shapeId;
16
+ return 'value';
17
+ };
18
+ exports.projectionKeyFromPath = projectionKeyFromPath;
19
+ /**
20
+ * Lowers a single desugared selection path into an IR expression,
21
+ * creating traversal aliases for intermediate property steps.
22
+ *
23
+ * When `onInlineFilter` is provided, property steps with `.where()` will
24
+ * force a traversal creation and invoke the callback with the traversal
25
+ * alias and the where predicate. For last steps with `.where()`, an
26
+ * `alias_expr` is returned instead of a `property_expr`.
27
+ */
28
+ const lowerSelectionPathExpression = (path, options, onInlineFilter) => {
29
+ if (path.steps.length === 0) {
30
+ return { kind: 'alias_expr', alias: options.rootAlias };
31
+ }
32
+ let currentAlias = options.rootAlias;
33
+ for (let i = 0; i < path.steps.length; i++) {
34
+ const step = path.steps[i];
35
+ const isLast = i === path.steps.length - 1;
36
+ if (step.kind === 'property_step') {
37
+ if (step.where && onInlineFilter) {
38
+ // Force traversal creation for step with inline where
39
+ currentAlias = options.resolveTraversal(currentAlias, step.propertyShapeId);
40
+ onInlineFilter(currentAlias, step.where);
41
+ if (isLast) {
42
+ return { kind: 'alias_expr', alias: currentAlias };
43
+ }
44
+ continue;
45
+ }
46
+ if (isLast) {
47
+ return {
48
+ kind: 'property_expr',
49
+ sourceAlias: currentAlias,
50
+ property: step.propertyShapeId,
51
+ };
52
+ }
53
+ currentAlias = options.resolveTraversal(currentAlias, step.propertyShapeId);
54
+ continue;
55
+ }
56
+ if (step.kind === 'count_step') {
57
+ return {
58
+ kind: 'aggregate_expr',
59
+ name: 'count',
60
+ args: step.path.map((propertyStep) => ({
61
+ kind: 'property_expr',
62
+ sourceAlias: currentAlias,
63
+ property: propertyStep.propertyShapeId,
64
+ })),
65
+ };
66
+ }
67
+ }
68
+ return { kind: 'alias_expr', alias: currentAlias };
69
+ };
70
+ exports.lowerSelectionPathExpression = lowerSelectionPathExpression;
71
+ /**
72
+ * Builds projection items and a result map from an array of selection paths.
73
+ * Each path gets a unique alias and is lowered into an IR expression.
74
+ */
75
+ const buildCanonicalProjection = (selections, options, scope = new IRAliasScope_js_1.IRAliasScope('projection')) => {
76
+ const projection = [];
77
+ const entries = [];
78
+ selections.forEach((selection) => {
79
+ const path = 'path' in selection ? selection.path : selection;
80
+ const key = 'path' in selection ? selection.key : undefined;
81
+ const resultKey = key || (0, exports.projectionKeyFromPath)(path);
82
+ const binding = scope.generateAlias(resultKey);
83
+ projection.push({
84
+ alias: binding.alias,
85
+ expression: (0, exports.lowerSelectionPathExpression)(path, options),
86
+ });
87
+ entries.push({
88
+ key: resultKey,
89
+ alias: binding.alias,
90
+ });
91
+ });
92
+ return {
93
+ projection,
94
+ resultMap: entries,
95
+ };
96
+ };
97
+ exports.buildCanonicalProjection = buildCanonicalProjection;
98
+ //# sourceMappingURL=IRProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRProjection.js","sourceRoot":"","sources":["../../../src/queries/IRProjection.ts"],"names":[],"mappings":"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"}