@_linked/core 1.3.0 → 2.0.0-next.20260310085832

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 (143) hide show
  1. package/CHANGELOG.md +113 -10
  2. package/README.md +209 -14
  3. package/lib/cjs/index.d.ts +10 -2
  4. package/lib/cjs/index.js +31 -6
  5. package/lib/cjs/index.js.map +1 -1
  6. package/lib/cjs/package.d.ts +1 -1
  7. package/lib/cjs/queries/CreateBuilder.d.ts +38 -0
  8. package/lib/cjs/queries/CreateBuilder.js +100 -0
  9. package/lib/cjs/queries/CreateBuilder.js.map +1 -0
  10. package/lib/cjs/queries/CreateQuery.d.ts +3 -3
  11. package/lib/cjs/queries/CreateQuery.js.map +1 -1
  12. package/lib/cjs/queries/DeleteBuilder.d.ts +39 -0
  13. package/lib/cjs/queries/DeleteBuilder.js +85 -0
  14. package/lib/cjs/queries/DeleteBuilder.js.map +1 -0
  15. package/lib/cjs/queries/DeleteQuery.d.ts +3 -3
  16. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  17. package/lib/cjs/queries/FieldSet.d.ts +203 -0
  18. package/lib/cjs/queries/FieldSet.js +533 -0
  19. package/lib/cjs/queries/FieldSet.js.map +1 -0
  20. package/lib/cjs/queries/IRDesugar.d.ts +13 -8
  21. package/lib/cjs/queries/IRDesugar.js +143 -132
  22. package/lib/cjs/queries/IRDesugar.js.map +1 -1
  23. package/lib/cjs/queries/IRLower.js +1 -0
  24. package/lib/cjs/queries/IRLower.js.map +1 -1
  25. package/lib/cjs/queries/IntermediateRepresentation.d.ts +1 -0
  26. package/lib/cjs/queries/MutationQuery.d.ts +1 -1
  27. package/lib/cjs/queries/MutationQuery.js +1 -6
  28. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  29. package/lib/cjs/queries/PropertyPath.d.ts +38 -0
  30. package/lib/cjs/queries/PropertyPath.js +82 -0
  31. package/lib/cjs/queries/PropertyPath.js.map +1 -0
  32. package/lib/cjs/queries/ProxiedPathBuilder.d.ts +14 -0
  33. package/lib/cjs/queries/ProxiedPathBuilder.js +29 -0
  34. package/lib/cjs/queries/ProxiedPathBuilder.js.map +1 -0
  35. package/lib/cjs/queries/QueryBuilder.d.ts +141 -0
  36. package/lib/cjs/queries/QueryBuilder.js +334 -0
  37. package/lib/cjs/queries/QueryBuilder.js.map +1 -0
  38. package/lib/cjs/queries/SelectQuery.d.ts +60 -134
  39. package/lib/cjs/queries/SelectQuery.js +67 -526
  40. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  41. package/lib/cjs/queries/UpdateBuilder.d.ts +37 -0
  42. package/lib/cjs/queries/UpdateBuilder.js +84 -0
  43. package/lib/cjs/queries/UpdateBuilder.js.map +1 -0
  44. package/lib/cjs/queries/UpdateQuery.d.ts +3 -3
  45. package/lib/cjs/queries/UpdateQuery.js.map +1 -1
  46. package/lib/cjs/queries/WhereCondition.d.ts +18 -0
  47. package/lib/cjs/queries/WhereCondition.js +3 -0
  48. package/lib/cjs/queries/WhereCondition.js.map +1 -0
  49. package/lib/cjs/queries/resolveShape.d.ts +10 -0
  50. package/lib/cjs/queries/resolveShape.js +23 -0
  51. package/lib/cjs/queries/resolveShape.js.map +1 -0
  52. package/lib/cjs/shapes/SHACL.js +7 -5
  53. package/lib/cjs/shapes/SHACL.js.map +1 -1
  54. package/lib/cjs/shapes/Shape.d.ts +33 -52
  55. package/lib/cjs/shapes/Shape.js +36 -56
  56. package/lib/cjs/shapes/Shape.js.map +1 -1
  57. package/lib/cjs/sparql/SparqlAlgebra.d.ts +6 -1
  58. package/lib/cjs/sparql/algebraToString.js +10 -0
  59. package/lib/cjs/sparql/algebraToString.js.map +1 -1
  60. package/lib/cjs/sparql/irToAlgebra.js +6 -2
  61. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  62. package/lib/cjs/test-helpers/query-fixtures.d.ts +568 -3049
  63. package/lib/cjs/test-helpers/query-fixtures.js +59 -18
  64. package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
  65. package/lib/cjs/test-helpers/test-utils.d.ts +18 -0
  66. package/lib/cjs/test-helpers/test-utils.js +47 -0
  67. package/lib/cjs/test-helpers/test-utils.js.map +1 -0
  68. package/lib/cjs/utils/Package.d.ts +8 -8
  69. package/lib/cjs/utils/Package.js.map +1 -1
  70. package/lib/cjs/utils/ShapeClass.d.ts +2 -2
  71. package/lib/cjs/utils/ShapeClass.js +4 -22
  72. package/lib/cjs/utils/ShapeClass.js.map +1 -1
  73. package/lib/esm/index.d.ts +10 -2
  74. package/lib/esm/index.js +23 -2
  75. package/lib/esm/index.js.map +1 -1
  76. package/lib/esm/package.d.ts +1 -1
  77. package/lib/esm/queries/CreateBuilder.d.ts +38 -0
  78. package/lib/esm/queries/CreateBuilder.js +96 -0
  79. package/lib/esm/queries/CreateBuilder.js.map +1 -0
  80. package/lib/esm/queries/CreateQuery.d.ts +3 -3
  81. package/lib/esm/queries/CreateQuery.js.map +1 -1
  82. package/lib/esm/queries/DeleteBuilder.d.ts +39 -0
  83. package/lib/esm/queries/DeleteBuilder.js +81 -0
  84. package/lib/esm/queries/DeleteBuilder.js.map +1 -0
  85. package/lib/esm/queries/DeleteQuery.d.ts +3 -3
  86. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  87. package/lib/esm/queries/FieldSet.d.ts +203 -0
  88. package/lib/esm/queries/FieldSet.js +529 -0
  89. package/lib/esm/queries/FieldSet.js.map +1 -0
  90. package/lib/esm/queries/IRDesugar.d.ts +13 -8
  91. package/lib/esm/queries/IRDesugar.js +143 -132
  92. package/lib/esm/queries/IRDesugar.js.map +1 -1
  93. package/lib/esm/queries/IRLower.js +1 -0
  94. package/lib/esm/queries/IRLower.js.map +1 -1
  95. package/lib/esm/queries/IntermediateRepresentation.d.ts +1 -0
  96. package/lib/esm/queries/MutationQuery.d.ts +1 -1
  97. package/lib/esm/queries/MutationQuery.js +1 -6
  98. package/lib/esm/queries/MutationQuery.js.map +1 -1
  99. package/lib/esm/queries/PropertyPath.d.ts +38 -0
  100. package/lib/esm/queries/PropertyPath.js +77 -0
  101. package/lib/esm/queries/PropertyPath.js.map +1 -0
  102. package/lib/esm/queries/ProxiedPathBuilder.d.ts +14 -0
  103. package/lib/esm/queries/ProxiedPathBuilder.js +26 -0
  104. package/lib/esm/queries/ProxiedPathBuilder.js.map +1 -0
  105. package/lib/esm/queries/QueryBuilder.d.ts +141 -0
  106. package/lib/esm/queries/QueryBuilder.js +330 -0
  107. package/lib/esm/queries/QueryBuilder.js.map +1 -0
  108. package/lib/esm/queries/SelectQuery.d.ts +60 -134
  109. package/lib/esm/queries/SelectQuery.js +61 -515
  110. package/lib/esm/queries/SelectQuery.js.map +1 -1
  111. package/lib/esm/queries/UpdateBuilder.d.ts +37 -0
  112. package/lib/esm/queries/UpdateBuilder.js +80 -0
  113. package/lib/esm/queries/UpdateBuilder.js.map +1 -0
  114. package/lib/esm/queries/UpdateQuery.d.ts +3 -3
  115. package/lib/esm/queries/UpdateQuery.js.map +1 -1
  116. package/lib/esm/queries/WhereCondition.d.ts +18 -0
  117. package/lib/esm/queries/WhereCondition.js +2 -0
  118. package/lib/esm/queries/WhereCondition.js.map +1 -0
  119. package/lib/esm/queries/resolveShape.d.ts +10 -0
  120. package/lib/esm/queries/resolveShape.js +20 -0
  121. package/lib/esm/queries/resolveShape.js.map +1 -0
  122. package/lib/esm/shapes/SHACL.js +7 -5
  123. package/lib/esm/shapes/SHACL.js.map +1 -1
  124. package/lib/esm/shapes/Shape.d.ts +33 -52
  125. package/lib/esm/shapes/Shape.js +36 -53
  126. package/lib/esm/shapes/Shape.js.map +1 -1
  127. package/lib/esm/sparql/SparqlAlgebra.d.ts +6 -1
  128. package/lib/esm/sparql/algebraToString.js +10 -0
  129. package/lib/esm/sparql/algebraToString.js.map +1 -1
  130. package/lib/esm/sparql/irToAlgebra.js +6 -2
  131. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  132. package/lib/esm/test-helpers/query-fixtures.d.ts +568 -3049
  133. package/lib/esm/test-helpers/query-fixtures.js +59 -18
  134. package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
  135. package/lib/esm/test-helpers/test-utils.d.ts +18 -0
  136. package/lib/esm/test-helpers/test-utils.js +41 -0
  137. package/lib/esm/test-helpers/test-utils.js.map +1 -0
  138. package/lib/esm/utils/Package.d.ts +8 -8
  139. package/lib/esm/utils/Package.js.map +1 -1
  140. package/lib/esm/utils/ShapeClass.d.ts +2 -2
  141. package/lib/esm/utils/ShapeClass.js +4 -22
  142. package/lib/esm/utils/ShapeClass.js.map +1 -1
  143. package/package.json +1 -1
@@ -0,0 +1,533 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FieldSet = void 0;
4
+ const PropertyPath_js_1 = require("./PropertyPath.js");
5
+ const ShapeClass_js_1 = require("../utils/ShapeClass.js");
6
+ const ProxiedPathBuilder_js_1 = require("./ProxiedPathBuilder.js");
7
+ const isQueryBuilderObject = (obj) => obj !== null &&
8
+ typeof obj === 'object' &&
9
+ 'property' in obj &&
10
+ 'subject' in obj &&
11
+ typeof obj.getPropertyPath === 'function';
12
+ const isSetSize = (obj) => obj !== null &&
13
+ typeof obj === 'object' &&
14
+ 'subject' in obj &&
15
+ typeof obj.as === 'function' &&
16
+ typeof obj.getPropertyPath === 'function' &&
17
+ // SetSize has a 'countable' field (may be undefined) and 'label' field
18
+ 'label' in obj;
19
+ // Evaluation: has .method (WhereMethods), .value (QueryBuilderObject), .getWherePath()
20
+ const isEvaluation = (obj) => obj !== null &&
21
+ typeof obj === 'object' &&
22
+ 'method' in obj &&
23
+ 'value' in obj &&
24
+ typeof obj.getWherePath === 'function';
25
+ // BoundComponent: has .source (QueryBuilderObject) and .originalValue (component-like)
26
+ const isBoundComponent = (obj) => obj !== null &&
27
+ typeof obj === 'object' &&
28
+ 'source' in obj &&
29
+ 'originalValue' in obj;
30
+ /**
31
+ * An immutable, composable collection of property paths for a shape.
32
+ *
33
+ * FieldSet describes which properties to select, independent of
34
+ * how the query is built. It integrates with QueryBuilder via
35
+ * `.select(fieldSet)`.
36
+ *
37
+ * Every mutation method returns a new FieldSet — the original is never modified.
38
+ */
39
+ class FieldSet {
40
+ constructor(shape, entries) {
41
+ this.shape = shape;
42
+ this.entries = entries;
43
+ }
44
+ static for(shape, fieldsOrFn) {
45
+ const resolved = FieldSet.resolveShapeInput(shape);
46
+ const resolvedShape = resolved.nodeShape;
47
+ if (typeof fieldsOrFn === 'function') {
48
+ if (!resolved.shapeClass) {
49
+ throw new Error(`Cannot use callback form for shape '${resolved.nodeShape.id}': no ShapeConstructor registered. ` +
50
+ `Use string field names instead, or pass the Shape class directly.`);
51
+ }
52
+ const fields = FieldSet.traceFieldsWithProxy(resolved.nodeShape, resolved.shapeClass, fieldsOrFn);
53
+ return new FieldSet(resolved.nodeShape, fields);
54
+ }
55
+ const entries = FieldSet.resolveInputs(resolvedShape, fieldsOrFn);
56
+ return new FieldSet(resolvedShape, entries);
57
+ }
58
+ /**
59
+ * Create a typed FieldSet for a sub-select. Traces the callback through the proxy,
60
+ * stores parentSegments and traceResponse for runtime compatibility, and preserves
61
+ * R and Source generics for conditional type inference.
62
+ */
63
+ static forSubSelect(shapeClass, fn, parentSegments) {
64
+ const nodeShape = shapeClass.shape || shapeClass;
65
+ // Trace once: get both the raw response (for type carriers) and the entries
66
+ const proxy = (0, ProxiedPathBuilder_js_1.createProxiedPathBuilder)(shapeClass);
67
+ const traceResponse = fn(proxy);
68
+ const entries = FieldSet.extractSubSelectEntries(nodeShape, traceResponse);
69
+ const fs = new FieldSet(nodeShape, entries);
70
+ // Writable cast — these readonly fields are initialised once here at construction time
71
+ const w = fs;
72
+ w.traceResponse = traceResponse;
73
+ w.parentSegments = parentSegments;
74
+ w.shapeType = shapeClass;
75
+ return fs;
76
+ }
77
+ static all(shape, opts) {
78
+ var _a;
79
+ const depth = (_a = opts === null || opts === void 0 ? void 0 : opts.depth) !== null && _a !== void 0 ? _a : 1;
80
+ if (depth < 1) {
81
+ throw new Error('FieldSet.all() requires depth >= 1. Use a node reference ({id}) for depth 0.');
82
+ }
83
+ const resolved = FieldSet.resolveShapeInput(shape);
84
+ // Seed visited with the root shape to prevent self-referencing cycles
85
+ const visited = new Set([resolved.nodeShape.id]);
86
+ return FieldSet.allForShape(resolved.nodeShape, depth, visited);
87
+ }
88
+ /**
89
+ * Recursive helper for all(). Tracks visited shape IDs to prevent infinite loops
90
+ * from circular shape references.
91
+ */
92
+ static allForShape(nodeShape, depth, visited) {
93
+ const propertyShapes = nodeShape.getUniquePropertyShapes();
94
+ const entries = [];
95
+ for (const ps of propertyShapes) {
96
+ const entry = { path: new PropertyPath_js_1.PropertyPath(nodeShape, [ps]) };
97
+ // If depth > 1, recurse into nested shapes
98
+ if (depth > 1 && ps.valueShape) {
99
+ const nestedShapeClass = (0, ShapeClass_js_1.getShapeClass)(ps.valueShape);
100
+ if ((nestedShapeClass === null || nestedShapeClass === void 0 ? void 0 : nestedShapeClass.shape) && !visited.has(nestedShapeClass.shape.id)) {
101
+ visited.add(nestedShapeClass.shape.id);
102
+ const nestedFs = FieldSet.allForShape(nestedShapeClass.shape, depth - 1, visited);
103
+ if (nestedFs.entries.length > 0) {
104
+ entry.subSelect = nestedFs;
105
+ }
106
+ }
107
+ }
108
+ entries.push(entry);
109
+ }
110
+ return new FieldSet(nodeShape, entries);
111
+ }
112
+ /**
113
+ * Merge multiple FieldSets into one, deduplicating by path equality.
114
+ * All FieldSets must share the same root shape.
115
+ */
116
+ static merge(sets) {
117
+ if (sets.length === 0) {
118
+ throw new Error('Cannot merge empty array of FieldSets');
119
+ }
120
+ const shape = sets[0].shape;
121
+ for (const set of sets) {
122
+ if (set.shape.id !== shape.id) {
123
+ throw new Error(`Cannot merge FieldSets with different shapes: '${shape.label || shape.id}' and '${set.shape.label || set.shape.id}'`);
124
+ }
125
+ }
126
+ const merged = [];
127
+ const seen = new Set();
128
+ for (const set of sets) {
129
+ for (const entry of set.entries) {
130
+ // Include aggregation in the dedup key so that 'friends' and 'friends(count)' are distinct
131
+ const key = entry.aggregation
132
+ ? `${entry.path.toString()}:${entry.aggregation}`
133
+ : entry.path.toString();
134
+ if (!seen.has(key)) {
135
+ seen.add(key);
136
+ merged.push(entry);
137
+ }
138
+ }
139
+ }
140
+ return new FieldSet(shape, merged);
141
+ }
142
+ // ---------------------------------------------------------------------------
143
+ // Composition methods — each returns a new FieldSet
144
+ // ---------------------------------------------------------------------------
145
+ /** Returns a new FieldSet with only the given fields. */
146
+ select(fields) {
147
+ const entries = FieldSet.resolveInputs(this.shape, fields);
148
+ return new FieldSet(this.shape, entries);
149
+ }
150
+ /** Returns a new FieldSet with additional entries. */
151
+ add(fields) {
152
+ const newEntries = FieldSet.resolveInputs(this.shape, fields);
153
+ // Deduplicate
154
+ const existing = new Set(this.entries.map((e) => e.path.toString()));
155
+ const combined = [...this.entries];
156
+ for (const entry of newEntries) {
157
+ if (!existing.has(entry.path.toString())) {
158
+ combined.push(entry);
159
+ }
160
+ }
161
+ return new FieldSet(this.shape, combined);
162
+ }
163
+ /** Returns a new FieldSet without entries matching the given labels. */
164
+ remove(labels) {
165
+ const labelSet = new Set(labels);
166
+ const filtered = this.entries.filter((e) => { var _a; return !labelSet.has((_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label); });
167
+ return new FieldSet(this.shape, filtered);
168
+ }
169
+ /** Synonym for replacing all entries — returns a new FieldSet with only the given fields. */
170
+ set(fields) {
171
+ const entries = FieldSet.resolveInputs(this.shape, fields);
172
+ return new FieldSet(this.shape, entries);
173
+ }
174
+ /** Returns a new FieldSet keeping only entries matching the given labels. */
175
+ pick(labels) {
176
+ const labelSet = new Set(labels);
177
+ const filtered = this.entries.filter((e) => { var _a; return labelSet.has((_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label); });
178
+ return new FieldSet(this.shape, filtered);
179
+ }
180
+ /** Returns all PropertyPaths in this FieldSet. */
181
+ paths() {
182
+ return this.entries.map((e) => e.path);
183
+ }
184
+ /** Returns terminal property labels of all entries. */
185
+ labels() {
186
+ return this.entries.map((e) => { var _a; return (_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label; }).filter(Boolean);
187
+ }
188
+ // ---------------------------------------------------------------------------
189
+ // Serialization
190
+ // ---------------------------------------------------------------------------
191
+ /**
192
+ * Serialize this FieldSet to a plain JSON object.
193
+ * Shape is identified by its IRI, paths by dot-separated labels.
194
+ */
195
+ toJSON() {
196
+ return {
197
+ shape: this.shape.id,
198
+ fields: this.entries.map((entry) => {
199
+ const field = { path: entry.path.toString() };
200
+ if (entry.alias) {
201
+ field.as = entry.alias;
202
+ }
203
+ if (entry.subSelect) {
204
+ field.subSelect = entry.subSelect.toJSON();
205
+ }
206
+ if (entry.aggregation) {
207
+ field.aggregation = entry.aggregation;
208
+ }
209
+ if (entry.customKey) {
210
+ field.customKey = entry.customKey;
211
+ }
212
+ if (entry.evaluation) {
213
+ field.evaluation = entry.evaluation;
214
+ }
215
+ return field;
216
+ }),
217
+ };
218
+ }
219
+ /**
220
+ * Reconstruct a FieldSet from a JSON object.
221
+ * Resolves shape IRI via getShapeClass() and paths via walkPropertyPath().
222
+ */
223
+ static fromJSON(json) {
224
+ const resolvedShape = FieldSet.resolveShape(json.shape);
225
+ const entries = json.fields.map((field) => {
226
+ const entry = {
227
+ path: (0, PropertyPath_js_1.walkPropertyPath)(resolvedShape, field.path),
228
+ alias: field.as,
229
+ };
230
+ if (field.subSelect) {
231
+ entry.subSelect = FieldSet.fromJSON(field.subSelect);
232
+ }
233
+ if (field.aggregation) {
234
+ entry.aggregation = field.aggregation;
235
+ }
236
+ if (field.customKey) {
237
+ entry.customKey = field.customKey;
238
+ }
239
+ if (field.evaluation) {
240
+ entry.evaluation = field.evaluation;
241
+ }
242
+ return entry;
243
+ });
244
+ return new FieldSet(resolvedShape, entries);
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Private helpers
248
+ // ---------------------------------------------------------------------------
249
+ /**
250
+ * Resolves any of the accepted shape input types to a NodeShape and optional ShapeClass.
251
+ * Accepts: ShapeConstructor (class with .shape), NodeShape, or IRI string.
252
+ */
253
+ static resolveShapeInput(shape) {
254
+ if (typeof shape === 'string') {
255
+ const shapeClass = (0, ShapeClass_js_1.getShapeClass)(shape);
256
+ if (!shapeClass || !shapeClass.shape) {
257
+ throw new Error(`Cannot resolve shape for '${shape}'`);
258
+ }
259
+ return { nodeShape: shapeClass.shape, shapeClass };
260
+ }
261
+ // ShapeConstructor: has a static .shape property that is a NodeShape
262
+ if ('shape' in shape && typeof shape.shape === 'object' && shape.shape !== null && 'id' in shape.shape) {
263
+ return { nodeShape: shape.shape, shapeClass: shape };
264
+ }
265
+ // NodeShape: has .id directly — try to look up its ShapeConstructor for full proxy support
266
+ const nodeShape = shape;
267
+ const shapeClass = nodeShape.id ? (0, ShapeClass_js_1.getShapeClass)(nodeShape.id) : undefined;
268
+ return shapeClass
269
+ ? { nodeShape, shapeClass }
270
+ : { nodeShape };
271
+ }
272
+ /** @deprecated Use resolveShapeInput instead. Kept for fromJSON which only passes NodeShape|string. */
273
+ static resolveShape(shape) {
274
+ return FieldSet.resolveShapeInput(shape).nodeShape;
275
+ }
276
+ static resolveInputs(shape, inputs) {
277
+ const entries = [];
278
+ for (const input of inputs) {
279
+ if (typeof input === 'string') {
280
+ entries.push({ path: (0, PropertyPath_js_1.walkPropertyPath)(shape, input) });
281
+ }
282
+ else if (input instanceof PropertyPath_js_1.PropertyPath) {
283
+ entries.push({ path: input });
284
+ }
285
+ else if (input instanceof FieldSet) {
286
+ entries.push(...input.entries);
287
+ }
288
+ else if (typeof input === 'object') {
289
+ // Nested object form: { friends: ['name', 'hobby'] }
290
+ for (const [key, value] of Object.entries(input)) {
291
+ const basePath = (0, PropertyPath_js_1.walkPropertyPath)(shape, key);
292
+ if (value instanceof FieldSet) {
293
+ // Merge nested FieldSet entries under this path
294
+ for (const entry of value.entries) {
295
+ const combined = new PropertyPath_js_1.PropertyPath(shape, [
296
+ ...basePath.segments,
297
+ ...entry.path.segments,
298
+ ]);
299
+ entries.push({ path: combined, alias: entry.alias, scopedFilter: entry.scopedFilter });
300
+ }
301
+ }
302
+ else if (Array.isArray(value)) {
303
+ // Resolve nested string fields
304
+ const basePropertyShape = basePath.terminal;
305
+ if (!(basePropertyShape === null || basePropertyShape === void 0 ? void 0 : basePropertyShape.valueShape)) {
306
+ throw new Error(`Property '${key}' has no valueShape; cannot resolve nested fields`);
307
+ }
308
+ const nestedShapeClass = (0, ShapeClass_js_1.getShapeClass)(basePropertyShape.valueShape);
309
+ if (!nestedShapeClass || !nestedShapeClass.shape) {
310
+ throw new Error(`Cannot resolve valueShape for property '${key}'`);
311
+ }
312
+ for (const nestedField of value) {
313
+ const nestedPath = (0, PropertyPath_js_1.walkPropertyPath)(nestedShapeClass.shape, nestedField);
314
+ const combined = new PropertyPath_js_1.PropertyPath(shape, [
315
+ ...basePath.segments,
316
+ ...nestedPath.segments,
317
+ ]);
318
+ entries.push({ path: combined });
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ return entries;
325
+ }
326
+ /**
327
+ * Trace fields using the full ProxiedPathBuilder proxy (createProxiedPathBuilder).
328
+ * Handles nested paths, where conditions, aggregations, and sub-selects.
329
+ */
330
+ static traceFieldsWithProxy(nodeShape, shapeClass, fn) {
331
+ const proxy = (0, ProxiedPathBuilder_js_1.createProxiedPathBuilder)(shapeClass);
332
+ const result = fn(proxy);
333
+ // Normalize result: could be a single value, array, or custom object
334
+ if (Array.isArray(result)) {
335
+ return result.map((item) => FieldSet.convertTraceResult(nodeShape, item));
336
+ }
337
+ if (isQueryBuilderObject(result)) {
338
+ return [FieldSet.convertTraceResult(nodeShape, result)];
339
+ }
340
+ // Single FieldSet sub-select (e.g. p.friends.select(f => [f.name]))
341
+ if (result instanceof FieldSet && result.parentSegments !== undefined) {
342
+ return [FieldSet.convertTraceResult(nodeShape, result)];
343
+ }
344
+ // Single SetSize (e.g. p.friends.size())
345
+ if (isSetSize(result)) {
346
+ return [FieldSet.convertTraceResult(nodeShape, result)];
347
+ }
348
+ // Single Evaluation (e.g. p.bestFriend.equals(...))
349
+ if (isEvaluation(result)) {
350
+ return [FieldSet.convertTraceResult(nodeShape, result)];
351
+ }
352
+ // Single BoundComponent (e.g. p.bestFriend.preloadFor(comp))
353
+ if (isBoundComponent(result)) {
354
+ return [FieldSet.convertTraceResult(nodeShape, result)];
355
+ }
356
+ if (typeof result === 'object' && result !== null) {
357
+ // Custom object form: {name: p.name, hobby: p.hobby}
358
+ const entries = [];
359
+ for (const [key, value] of Object.entries(result)) {
360
+ const entry = FieldSet.convertTraceResult(nodeShape, value);
361
+ entry.customKey = key;
362
+ entries.push(entry);
363
+ }
364
+ return entries;
365
+ }
366
+ return [];
367
+ }
368
+ /**
369
+ * Convert a single proxy trace result (QueryBuilderObject, SetSize, or FieldSet sub-select)
370
+ * into a FieldSetEntry.
371
+ */
372
+ static convertTraceResult(rootShape, obj) {
373
+ // SetSize → aggregation: 'count'
374
+ if (isSetSize(obj)) {
375
+ const segments = FieldSet.collectPropertySegments(obj.subject);
376
+ return {
377
+ path: new PropertyPath_js_1.PropertyPath(rootShape, segments),
378
+ aggregation: 'count',
379
+ };
380
+ }
381
+ // FieldSet sub-select — use its entries directly (created by forSubSelect)
382
+ if (obj instanceof FieldSet && obj.parentSegments !== undefined) {
383
+ const subSelect = obj.entries.length > 0 ? obj : undefined;
384
+ return {
385
+ path: new PropertyPath_js_1.PropertyPath(rootShape, obj.parentSegments),
386
+ subSelect: subSelect,
387
+ };
388
+ }
389
+ // Evaluation → where-as-selection (e.g. p.bestFriend.equals(...) used as select)
390
+ // The Evaluation's .value is the QueryBuilderObject chain leading to the comparison.
391
+ if (isEvaluation(obj)) {
392
+ const segments = FieldSet.collectPropertySegments(obj.value);
393
+ return {
394
+ path: new PropertyPath_js_1.PropertyPath(rootShape, segments),
395
+ evaluation: { method: obj.method, wherePath: obj.getWherePath() },
396
+ };
397
+ }
398
+ // BoundComponent → preload composition (e.g. p.bestFriend.preloadFor(component))
399
+ // Extract the component's FieldSet and store it as preloadSubSelect.
400
+ if (isBoundComponent(obj)) {
401
+ const segments = FieldSet.collectPropertySegments(obj.source);
402
+ const componentFieldSet = FieldSet.extractComponentFieldSet(obj.originalValue);
403
+ return {
404
+ path: new PropertyPath_js_1.PropertyPath(rootShape, segments),
405
+ preloadSubSelect: componentFieldSet,
406
+ };
407
+ }
408
+ // QueryBuilderObject → walk the chain to collect PropertyPath segments
409
+ if (isQueryBuilderObject(obj)) {
410
+ const segments = FieldSet.collectPropertySegments(obj);
411
+ const entry = {
412
+ path: new PropertyPath_js_1.PropertyPath(rootShape, segments),
413
+ };
414
+ if (obj.wherePath) {
415
+ entry.scopedFilter = obj.wherePath;
416
+ }
417
+ return entry;
418
+ }
419
+ // Fallback: string label
420
+ if (typeof obj === 'string') {
421
+ return { path: (0, PropertyPath_js_1.walkPropertyPath)(rootShape, obj) };
422
+ }
423
+ throw new Error(`Unknown trace result type: ${obj}`);
424
+ }
425
+ /**
426
+ * Walk a QueryBuilderObject-like chain (via .subject) collecting PropertyShape segments
427
+ * from leaf to root, then reverse to get root-to-leaf order.
428
+ */
429
+ static collectPropertySegments(obj) {
430
+ const segments = [];
431
+ let current = obj;
432
+ while (current) {
433
+ if (current.property) {
434
+ segments.unshift(current.property);
435
+ }
436
+ current = current.subject;
437
+ }
438
+ return segments;
439
+ }
440
+ /**
441
+ * Extract a FieldSet from a component-like object for preload composition.
442
+ *
443
+ * Supports multiple component interfaces:
444
+ * - `.fields` as a FieldSet directly
445
+ * - `.query` as a FieldSet, QueryBuilder (duck-typed via .fields()), or
446
+ * Record<string, QueryBuilder> (e.g. `{person: PersonQuery}`)
447
+ */
448
+ static extractComponentFieldSet(component) {
449
+ // Prefer .fields if it's a FieldSet
450
+ if (component.fields instanceof FieldSet) {
451
+ return component.fields;
452
+ }
453
+ const query = component.query;
454
+ if (query instanceof FieldSet) {
455
+ return query;
456
+ }
457
+ // QueryBuilder duck-type — has .fields() method
458
+ if (query && typeof query.fields === 'function') {
459
+ return query.fields();
460
+ }
461
+ // Record form: { propName: QueryBuilder }
462
+ if (typeof query === 'object') {
463
+ for (const key in query) {
464
+ const value = query[key];
465
+ if (value && typeof value.fields === 'function') {
466
+ return value.fields();
467
+ }
468
+ }
469
+ }
470
+ return undefined;
471
+ }
472
+ /**
473
+ * Internal factory that bypasses the private constructor for use by static methods.
474
+ */
475
+ static createInternal(shape, entries) {
476
+ return new FieldSet(shape, entries);
477
+ }
478
+ /**
479
+ * Create a FieldSet from raw entries. Used by QueryBuilder to merge preload entries.
480
+ */
481
+ static createFromEntries(shape, entries) {
482
+ return new FieldSet(shape, entries);
483
+ }
484
+ /**
485
+ * Extract FieldSetEntry[] from a sub-query's traceResponse.
486
+ * Public alias for use by lightweight sub-select wrappers.
487
+ */
488
+ static extractSubSelectEntriesPublic(rootShape, traceResponse) {
489
+ return FieldSet.extractSubSelectEntries(rootShape, traceResponse);
490
+ }
491
+ /**
492
+ * Extract FieldSetEntry[] from a sub-select's traceResponse.
493
+ * The traceResponse is the result of calling the sub-query callback with a proxy,
494
+ * containing QueryBuilderObjects, arrays, custom objects, etc.
495
+ */
496
+ static extractSubSelectEntries(rootShape, traceResponse) {
497
+ if (Array.isArray(traceResponse)) {
498
+ return traceResponse
499
+ .filter((item) => item !== null && item !== undefined)
500
+ .map((item) => FieldSet.convertTraceResult(rootShape, item));
501
+ }
502
+ if (isQueryBuilderObject(traceResponse)) {
503
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
504
+ }
505
+ // Single FieldSet sub-select — convert directly
506
+ if (traceResponse instanceof FieldSet && traceResponse.parentSegments !== undefined) {
507
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
508
+ }
509
+ // Single SetSize
510
+ if (isSetSize(traceResponse)) {
511
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
512
+ }
513
+ // Single Evaluation
514
+ if (isEvaluation(traceResponse)) {
515
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
516
+ }
517
+ if (typeof traceResponse === 'object' && traceResponse !== null) {
518
+ // Custom object form: {name: p.name, hobby: p.hobby}
519
+ const entries = [];
520
+ for (const [key, value] of Object.entries(traceResponse)) {
521
+ if (value !== null && value !== undefined) {
522
+ const entry = FieldSet.convertTraceResult(rootShape, value);
523
+ entry.customKey = key;
524
+ entries.push(entry);
525
+ }
526
+ }
527
+ return entries;
528
+ }
529
+ return [];
530
+ }
531
+ }
532
+ exports.FieldSet = FieldSet;
533
+ //# sourceMappingURL=FieldSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSet.js","sourceRoot":"","sources":["../../../src/queries/FieldSet.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,21 @@
1
- import { JSNonNullPrimitive, SelectPath, SortByPath, WhereMethods, WherePath } from './SelectQuery.js';
1
+ import { JSNonNullPrimitive, SortByPath, WhereMethods, WherePath } from './SelectQuery.js';
2
2
  import { NodeReferenceValue, ShapeReferenceValue } from './QueryFactory.js';
3
+ import type { FieldSetEntry } from './FieldSet.js';
3
4
  /**
4
- * Internal pipeline input type — captures exactly what the desugar pass
5
- * needs from a select query factory. Replaces the old LegacySelectQuery
6
- * as the pipeline entry point.
5
+ * Pipeline input type — accepts FieldSet entries directly.
7
6
  */
8
7
  export type RawSelectInput = {
9
- select: SelectPath;
8
+ entries: readonly FieldSetEntry[];
10
9
  where?: WherePath;
11
10
  sortBy?: SortByPath;
12
11
  subject?: unknown;
13
- shape?: unknown;
12
+ subjects?: unknown[];
13
+ shape?: {
14
+ shape?: {
15
+ id?: string;
16
+ };
17
+ id?: string;
18
+ };
14
19
  limit?: number;
15
20
  offset?: number;
16
21
  singleResult?: boolean;
@@ -84,6 +89,7 @@ export type DesugaredSelectQuery = {
84
89
  kind: 'desugared_select';
85
90
  shapeId?: string;
86
91
  subjectId?: string;
92
+ subjectIds?: string[];
87
93
  singleResult?: boolean;
88
94
  limit?: number;
89
95
  offset?: number;
@@ -92,7 +98,6 @@ export type DesugaredSelectQuery = {
92
98
  where?: DesugaredWhere;
93
99
  };
94
100
  /**
95
- * Converts a RawSelectInput (DSL-level query) into a flat DesugaredSelectQuery
96
- * by walking proxy-traced select/where/sortBy paths and extracting property steps.
101
+ * Converts a RawSelectInput (FieldSet entries + where/sort) into a DesugaredSelectQuery.
97
102
  */
98
103
  export declare const desugarSelectQuery: (query: RawSelectInput) => DesugaredSelectQuery;