@_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,529 @@
1
+ import { PropertyPath, walkPropertyPath } from './PropertyPath.js';
2
+ import { getShapeClass } from '../utils/ShapeClass.js';
3
+ import { createProxiedPathBuilder } from './ProxiedPathBuilder.js';
4
+ const isQueryBuilderObject = (obj) => obj !== null &&
5
+ typeof obj === 'object' &&
6
+ 'property' in obj &&
7
+ 'subject' in obj &&
8
+ typeof obj.getPropertyPath === 'function';
9
+ const isSetSize = (obj) => obj !== null &&
10
+ typeof obj === 'object' &&
11
+ 'subject' in obj &&
12
+ typeof obj.as === 'function' &&
13
+ typeof obj.getPropertyPath === 'function' &&
14
+ // SetSize has a 'countable' field (may be undefined) and 'label' field
15
+ 'label' in obj;
16
+ // Evaluation: has .method (WhereMethods), .value (QueryBuilderObject), .getWherePath()
17
+ const isEvaluation = (obj) => obj !== null &&
18
+ typeof obj === 'object' &&
19
+ 'method' in obj &&
20
+ 'value' in obj &&
21
+ typeof obj.getWherePath === 'function';
22
+ // BoundComponent: has .source (QueryBuilderObject) and .originalValue (component-like)
23
+ const isBoundComponent = (obj) => obj !== null &&
24
+ typeof obj === 'object' &&
25
+ 'source' in obj &&
26
+ 'originalValue' in obj;
27
+ /**
28
+ * An immutable, composable collection of property paths for a shape.
29
+ *
30
+ * FieldSet describes which properties to select, independent of
31
+ * how the query is built. It integrates with QueryBuilder via
32
+ * `.select(fieldSet)`.
33
+ *
34
+ * Every mutation method returns a new FieldSet — the original is never modified.
35
+ */
36
+ export class FieldSet {
37
+ constructor(shape, entries) {
38
+ this.shape = shape;
39
+ this.entries = entries;
40
+ }
41
+ static for(shape, fieldsOrFn) {
42
+ const resolved = FieldSet.resolveShapeInput(shape);
43
+ const resolvedShape = resolved.nodeShape;
44
+ if (typeof fieldsOrFn === 'function') {
45
+ if (!resolved.shapeClass) {
46
+ throw new Error(`Cannot use callback form for shape '${resolved.nodeShape.id}': no ShapeConstructor registered. ` +
47
+ `Use string field names instead, or pass the Shape class directly.`);
48
+ }
49
+ const fields = FieldSet.traceFieldsWithProxy(resolved.nodeShape, resolved.shapeClass, fieldsOrFn);
50
+ return new FieldSet(resolved.nodeShape, fields);
51
+ }
52
+ const entries = FieldSet.resolveInputs(resolvedShape, fieldsOrFn);
53
+ return new FieldSet(resolvedShape, entries);
54
+ }
55
+ /**
56
+ * Create a typed FieldSet for a sub-select. Traces the callback through the proxy,
57
+ * stores parentSegments and traceResponse for runtime compatibility, and preserves
58
+ * R and Source generics for conditional type inference.
59
+ */
60
+ static forSubSelect(shapeClass, fn, parentSegments) {
61
+ const nodeShape = shapeClass.shape || shapeClass;
62
+ // Trace once: get both the raw response (for type carriers) and the entries
63
+ const proxy = createProxiedPathBuilder(shapeClass);
64
+ const traceResponse = fn(proxy);
65
+ const entries = FieldSet.extractSubSelectEntries(nodeShape, traceResponse);
66
+ const fs = new FieldSet(nodeShape, entries);
67
+ // Writable cast — these readonly fields are initialised once here at construction time
68
+ const w = fs;
69
+ w.traceResponse = traceResponse;
70
+ w.parentSegments = parentSegments;
71
+ w.shapeType = shapeClass;
72
+ return fs;
73
+ }
74
+ static all(shape, opts) {
75
+ var _a;
76
+ const depth = (_a = opts === null || opts === void 0 ? void 0 : opts.depth) !== null && _a !== void 0 ? _a : 1;
77
+ if (depth < 1) {
78
+ throw new Error('FieldSet.all() requires depth >= 1. Use a node reference ({id}) for depth 0.');
79
+ }
80
+ const resolved = FieldSet.resolveShapeInput(shape);
81
+ // Seed visited with the root shape to prevent self-referencing cycles
82
+ const visited = new Set([resolved.nodeShape.id]);
83
+ return FieldSet.allForShape(resolved.nodeShape, depth, visited);
84
+ }
85
+ /**
86
+ * Recursive helper for all(). Tracks visited shape IDs to prevent infinite loops
87
+ * from circular shape references.
88
+ */
89
+ static allForShape(nodeShape, depth, visited) {
90
+ const propertyShapes = nodeShape.getUniquePropertyShapes();
91
+ const entries = [];
92
+ for (const ps of propertyShapes) {
93
+ const entry = { path: new PropertyPath(nodeShape, [ps]) };
94
+ // If depth > 1, recurse into nested shapes
95
+ if (depth > 1 && ps.valueShape) {
96
+ const nestedShapeClass = getShapeClass(ps.valueShape);
97
+ if ((nestedShapeClass === null || nestedShapeClass === void 0 ? void 0 : nestedShapeClass.shape) && !visited.has(nestedShapeClass.shape.id)) {
98
+ visited.add(nestedShapeClass.shape.id);
99
+ const nestedFs = FieldSet.allForShape(nestedShapeClass.shape, depth - 1, visited);
100
+ if (nestedFs.entries.length > 0) {
101
+ entry.subSelect = nestedFs;
102
+ }
103
+ }
104
+ }
105
+ entries.push(entry);
106
+ }
107
+ return new FieldSet(nodeShape, entries);
108
+ }
109
+ /**
110
+ * Merge multiple FieldSets into one, deduplicating by path equality.
111
+ * All FieldSets must share the same root shape.
112
+ */
113
+ static merge(sets) {
114
+ if (sets.length === 0) {
115
+ throw new Error('Cannot merge empty array of FieldSets');
116
+ }
117
+ const shape = sets[0].shape;
118
+ for (const set of sets) {
119
+ if (set.shape.id !== shape.id) {
120
+ throw new Error(`Cannot merge FieldSets with different shapes: '${shape.label || shape.id}' and '${set.shape.label || set.shape.id}'`);
121
+ }
122
+ }
123
+ const merged = [];
124
+ const seen = new Set();
125
+ for (const set of sets) {
126
+ for (const entry of set.entries) {
127
+ // Include aggregation in the dedup key so that 'friends' and 'friends(count)' are distinct
128
+ const key = entry.aggregation
129
+ ? `${entry.path.toString()}:${entry.aggregation}`
130
+ : entry.path.toString();
131
+ if (!seen.has(key)) {
132
+ seen.add(key);
133
+ merged.push(entry);
134
+ }
135
+ }
136
+ }
137
+ return new FieldSet(shape, merged);
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Composition methods — each returns a new FieldSet
141
+ // ---------------------------------------------------------------------------
142
+ /** Returns a new FieldSet with only the given fields. */
143
+ select(fields) {
144
+ const entries = FieldSet.resolveInputs(this.shape, fields);
145
+ return new FieldSet(this.shape, entries);
146
+ }
147
+ /** Returns a new FieldSet with additional entries. */
148
+ add(fields) {
149
+ const newEntries = FieldSet.resolveInputs(this.shape, fields);
150
+ // Deduplicate
151
+ const existing = new Set(this.entries.map((e) => e.path.toString()));
152
+ const combined = [...this.entries];
153
+ for (const entry of newEntries) {
154
+ if (!existing.has(entry.path.toString())) {
155
+ combined.push(entry);
156
+ }
157
+ }
158
+ return new FieldSet(this.shape, combined);
159
+ }
160
+ /** Returns a new FieldSet without entries matching the given labels. */
161
+ remove(labels) {
162
+ const labelSet = new Set(labels);
163
+ const filtered = this.entries.filter((e) => { var _a; return !labelSet.has((_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label); });
164
+ return new FieldSet(this.shape, filtered);
165
+ }
166
+ /** Synonym for replacing all entries — returns a new FieldSet with only the given fields. */
167
+ set(fields) {
168
+ const entries = FieldSet.resolveInputs(this.shape, fields);
169
+ return new FieldSet(this.shape, entries);
170
+ }
171
+ /** Returns a new FieldSet keeping only entries matching the given labels. */
172
+ pick(labels) {
173
+ const labelSet = new Set(labels);
174
+ const filtered = this.entries.filter((e) => { var _a; return labelSet.has((_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label); });
175
+ return new FieldSet(this.shape, filtered);
176
+ }
177
+ /** Returns all PropertyPaths in this FieldSet. */
178
+ paths() {
179
+ return this.entries.map((e) => e.path);
180
+ }
181
+ /** Returns terminal property labels of all entries. */
182
+ labels() {
183
+ return this.entries.map((e) => { var _a; return (_a = e.path.terminal) === null || _a === void 0 ? void 0 : _a.label; }).filter(Boolean);
184
+ }
185
+ // ---------------------------------------------------------------------------
186
+ // Serialization
187
+ // ---------------------------------------------------------------------------
188
+ /**
189
+ * Serialize this FieldSet to a plain JSON object.
190
+ * Shape is identified by its IRI, paths by dot-separated labels.
191
+ */
192
+ toJSON() {
193
+ return {
194
+ shape: this.shape.id,
195
+ fields: this.entries.map((entry) => {
196
+ const field = { path: entry.path.toString() };
197
+ if (entry.alias) {
198
+ field.as = entry.alias;
199
+ }
200
+ if (entry.subSelect) {
201
+ field.subSelect = entry.subSelect.toJSON();
202
+ }
203
+ if (entry.aggregation) {
204
+ field.aggregation = entry.aggregation;
205
+ }
206
+ if (entry.customKey) {
207
+ field.customKey = entry.customKey;
208
+ }
209
+ if (entry.evaluation) {
210
+ field.evaluation = entry.evaluation;
211
+ }
212
+ return field;
213
+ }),
214
+ };
215
+ }
216
+ /**
217
+ * Reconstruct a FieldSet from a JSON object.
218
+ * Resolves shape IRI via getShapeClass() and paths via walkPropertyPath().
219
+ */
220
+ static fromJSON(json) {
221
+ const resolvedShape = FieldSet.resolveShape(json.shape);
222
+ const entries = json.fields.map((field) => {
223
+ const entry = {
224
+ path: walkPropertyPath(resolvedShape, field.path),
225
+ alias: field.as,
226
+ };
227
+ if (field.subSelect) {
228
+ entry.subSelect = FieldSet.fromJSON(field.subSelect);
229
+ }
230
+ if (field.aggregation) {
231
+ entry.aggregation = field.aggregation;
232
+ }
233
+ if (field.customKey) {
234
+ entry.customKey = field.customKey;
235
+ }
236
+ if (field.evaluation) {
237
+ entry.evaluation = field.evaluation;
238
+ }
239
+ return entry;
240
+ });
241
+ return new FieldSet(resolvedShape, entries);
242
+ }
243
+ // ---------------------------------------------------------------------------
244
+ // Private helpers
245
+ // ---------------------------------------------------------------------------
246
+ /**
247
+ * Resolves any of the accepted shape input types to a NodeShape and optional ShapeClass.
248
+ * Accepts: ShapeConstructor (class with .shape), NodeShape, or IRI string.
249
+ */
250
+ static resolveShapeInput(shape) {
251
+ if (typeof shape === 'string') {
252
+ const shapeClass = getShapeClass(shape);
253
+ if (!shapeClass || !shapeClass.shape) {
254
+ throw new Error(`Cannot resolve shape for '${shape}'`);
255
+ }
256
+ return { nodeShape: shapeClass.shape, shapeClass };
257
+ }
258
+ // ShapeConstructor: has a static .shape property that is a NodeShape
259
+ if ('shape' in shape && typeof shape.shape === 'object' && shape.shape !== null && 'id' in shape.shape) {
260
+ return { nodeShape: shape.shape, shapeClass: shape };
261
+ }
262
+ // NodeShape: has .id directly — try to look up its ShapeConstructor for full proxy support
263
+ const nodeShape = shape;
264
+ const shapeClass = nodeShape.id ? getShapeClass(nodeShape.id) : undefined;
265
+ return shapeClass
266
+ ? { nodeShape, shapeClass }
267
+ : { nodeShape };
268
+ }
269
+ /** @deprecated Use resolveShapeInput instead. Kept for fromJSON which only passes NodeShape|string. */
270
+ static resolveShape(shape) {
271
+ return FieldSet.resolveShapeInput(shape).nodeShape;
272
+ }
273
+ static resolveInputs(shape, inputs) {
274
+ const entries = [];
275
+ for (const input of inputs) {
276
+ if (typeof input === 'string') {
277
+ entries.push({ path: walkPropertyPath(shape, input) });
278
+ }
279
+ else if (input instanceof PropertyPath) {
280
+ entries.push({ path: input });
281
+ }
282
+ else if (input instanceof FieldSet) {
283
+ entries.push(...input.entries);
284
+ }
285
+ else if (typeof input === 'object') {
286
+ // Nested object form: { friends: ['name', 'hobby'] }
287
+ for (const [key, value] of Object.entries(input)) {
288
+ const basePath = walkPropertyPath(shape, key);
289
+ if (value instanceof FieldSet) {
290
+ // Merge nested FieldSet entries under this path
291
+ for (const entry of value.entries) {
292
+ const combined = new PropertyPath(shape, [
293
+ ...basePath.segments,
294
+ ...entry.path.segments,
295
+ ]);
296
+ entries.push({ path: combined, alias: entry.alias, scopedFilter: entry.scopedFilter });
297
+ }
298
+ }
299
+ else if (Array.isArray(value)) {
300
+ // Resolve nested string fields
301
+ const basePropertyShape = basePath.terminal;
302
+ if (!(basePropertyShape === null || basePropertyShape === void 0 ? void 0 : basePropertyShape.valueShape)) {
303
+ throw new Error(`Property '${key}' has no valueShape; cannot resolve nested fields`);
304
+ }
305
+ const nestedShapeClass = getShapeClass(basePropertyShape.valueShape);
306
+ if (!nestedShapeClass || !nestedShapeClass.shape) {
307
+ throw new Error(`Cannot resolve valueShape for property '${key}'`);
308
+ }
309
+ for (const nestedField of value) {
310
+ const nestedPath = walkPropertyPath(nestedShapeClass.shape, nestedField);
311
+ const combined = new PropertyPath(shape, [
312
+ ...basePath.segments,
313
+ ...nestedPath.segments,
314
+ ]);
315
+ entries.push({ path: combined });
316
+ }
317
+ }
318
+ }
319
+ }
320
+ }
321
+ return entries;
322
+ }
323
+ /**
324
+ * Trace fields using the full ProxiedPathBuilder proxy (createProxiedPathBuilder).
325
+ * Handles nested paths, where conditions, aggregations, and sub-selects.
326
+ */
327
+ static traceFieldsWithProxy(nodeShape, shapeClass, fn) {
328
+ const proxy = createProxiedPathBuilder(shapeClass);
329
+ const result = fn(proxy);
330
+ // Normalize result: could be a single value, array, or custom object
331
+ if (Array.isArray(result)) {
332
+ return result.map((item) => FieldSet.convertTraceResult(nodeShape, item));
333
+ }
334
+ if (isQueryBuilderObject(result)) {
335
+ return [FieldSet.convertTraceResult(nodeShape, result)];
336
+ }
337
+ // Single FieldSet sub-select (e.g. p.friends.select(f => [f.name]))
338
+ if (result instanceof FieldSet && result.parentSegments !== undefined) {
339
+ return [FieldSet.convertTraceResult(nodeShape, result)];
340
+ }
341
+ // Single SetSize (e.g. p.friends.size())
342
+ if (isSetSize(result)) {
343
+ return [FieldSet.convertTraceResult(nodeShape, result)];
344
+ }
345
+ // Single Evaluation (e.g. p.bestFriend.equals(...))
346
+ if (isEvaluation(result)) {
347
+ return [FieldSet.convertTraceResult(nodeShape, result)];
348
+ }
349
+ // Single BoundComponent (e.g. p.bestFriend.preloadFor(comp))
350
+ if (isBoundComponent(result)) {
351
+ return [FieldSet.convertTraceResult(nodeShape, result)];
352
+ }
353
+ if (typeof result === 'object' && result !== null) {
354
+ // Custom object form: {name: p.name, hobby: p.hobby}
355
+ const entries = [];
356
+ for (const [key, value] of Object.entries(result)) {
357
+ const entry = FieldSet.convertTraceResult(nodeShape, value);
358
+ entry.customKey = key;
359
+ entries.push(entry);
360
+ }
361
+ return entries;
362
+ }
363
+ return [];
364
+ }
365
+ /**
366
+ * Convert a single proxy trace result (QueryBuilderObject, SetSize, or FieldSet sub-select)
367
+ * into a FieldSetEntry.
368
+ */
369
+ static convertTraceResult(rootShape, obj) {
370
+ // SetSize → aggregation: 'count'
371
+ if (isSetSize(obj)) {
372
+ const segments = FieldSet.collectPropertySegments(obj.subject);
373
+ return {
374
+ path: new PropertyPath(rootShape, segments),
375
+ aggregation: 'count',
376
+ };
377
+ }
378
+ // FieldSet sub-select — use its entries directly (created by forSubSelect)
379
+ if (obj instanceof FieldSet && obj.parentSegments !== undefined) {
380
+ const subSelect = obj.entries.length > 0 ? obj : undefined;
381
+ return {
382
+ path: new PropertyPath(rootShape, obj.parentSegments),
383
+ subSelect: subSelect,
384
+ };
385
+ }
386
+ // Evaluation → where-as-selection (e.g. p.bestFriend.equals(...) used as select)
387
+ // The Evaluation's .value is the QueryBuilderObject chain leading to the comparison.
388
+ if (isEvaluation(obj)) {
389
+ const segments = FieldSet.collectPropertySegments(obj.value);
390
+ return {
391
+ path: new PropertyPath(rootShape, segments),
392
+ evaluation: { method: obj.method, wherePath: obj.getWherePath() },
393
+ };
394
+ }
395
+ // BoundComponent → preload composition (e.g. p.bestFriend.preloadFor(component))
396
+ // Extract the component's FieldSet and store it as preloadSubSelect.
397
+ if (isBoundComponent(obj)) {
398
+ const segments = FieldSet.collectPropertySegments(obj.source);
399
+ const componentFieldSet = FieldSet.extractComponentFieldSet(obj.originalValue);
400
+ return {
401
+ path: new PropertyPath(rootShape, segments),
402
+ preloadSubSelect: componentFieldSet,
403
+ };
404
+ }
405
+ // QueryBuilderObject → walk the chain to collect PropertyPath segments
406
+ if (isQueryBuilderObject(obj)) {
407
+ const segments = FieldSet.collectPropertySegments(obj);
408
+ const entry = {
409
+ path: new PropertyPath(rootShape, segments),
410
+ };
411
+ if (obj.wherePath) {
412
+ entry.scopedFilter = obj.wherePath;
413
+ }
414
+ return entry;
415
+ }
416
+ // Fallback: string label
417
+ if (typeof obj === 'string') {
418
+ return { path: walkPropertyPath(rootShape, obj) };
419
+ }
420
+ throw new Error(`Unknown trace result type: ${obj}`);
421
+ }
422
+ /**
423
+ * Walk a QueryBuilderObject-like chain (via .subject) collecting PropertyShape segments
424
+ * from leaf to root, then reverse to get root-to-leaf order.
425
+ */
426
+ static collectPropertySegments(obj) {
427
+ const segments = [];
428
+ let current = obj;
429
+ while (current) {
430
+ if (current.property) {
431
+ segments.unshift(current.property);
432
+ }
433
+ current = current.subject;
434
+ }
435
+ return segments;
436
+ }
437
+ /**
438
+ * Extract a FieldSet from a component-like object for preload composition.
439
+ *
440
+ * Supports multiple component interfaces:
441
+ * - `.fields` as a FieldSet directly
442
+ * - `.query` as a FieldSet, QueryBuilder (duck-typed via .fields()), or
443
+ * Record<string, QueryBuilder> (e.g. `{person: PersonQuery}`)
444
+ */
445
+ static extractComponentFieldSet(component) {
446
+ // Prefer .fields if it's a FieldSet
447
+ if (component.fields instanceof FieldSet) {
448
+ return component.fields;
449
+ }
450
+ const query = component.query;
451
+ if (query instanceof FieldSet) {
452
+ return query;
453
+ }
454
+ // QueryBuilder duck-type — has .fields() method
455
+ if (query && typeof query.fields === 'function') {
456
+ return query.fields();
457
+ }
458
+ // Record form: { propName: QueryBuilder }
459
+ if (typeof query === 'object') {
460
+ for (const key in query) {
461
+ const value = query[key];
462
+ if (value && typeof value.fields === 'function') {
463
+ return value.fields();
464
+ }
465
+ }
466
+ }
467
+ return undefined;
468
+ }
469
+ /**
470
+ * Internal factory that bypasses the private constructor for use by static methods.
471
+ */
472
+ static createInternal(shape, entries) {
473
+ return new FieldSet(shape, entries);
474
+ }
475
+ /**
476
+ * Create a FieldSet from raw entries. Used by QueryBuilder to merge preload entries.
477
+ */
478
+ static createFromEntries(shape, entries) {
479
+ return new FieldSet(shape, entries);
480
+ }
481
+ /**
482
+ * Extract FieldSetEntry[] from a sub-query's traceResponse.
483
+ * Public alias for use by lightweight sub-select wrappers.
484
+ */
485
+ static extractSubSelectEntriesPublic(rootShape, traceResponse) {
486
+ return FieldSet.extractSubSelectEntries(rootShape, traceResponse);
487
+ }
488
+ /**
489
+ * Extract FieldSetEntry[] from a sub-select's traceResponse.
490
+ * The traceResponse is the result of calling the sub-query callback with a proxy,
491
+ * containing QueryBuilderObjects, arrays, custom objects, etc.
492
+ */
493
+ static extractSubSelectEntries(rootShape, traceResponse) {
494
+ if (Array.isArray(traceResponse)) {
495
+ return traceResponse
496
+ .filter((item) => item !== null && item !== undefined)
497
+ .map((item) => FieldSet.convertTraceResult(rootShape, item));
498
+ }
499
+ if (isQueryBuilderObject(traceResponse)) {
500
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
501
+ }
502
+ // Single FieldSet sub-select — convert directly
503
+ if (traceResponse instanceof FieldSet && traceResponse.parentSegments !== undefined) {
504
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
505
+ }
506
+ // Single SetSize
507
+ if (isSetSize(traceResponse)) {
508
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
509
+ }
510
+ // Single Evaluation
511
+ if (isEvaluation(traceResponse)) {
512
+ return [FieldSet.convertTraceResult(rootShape, traceResponse)];
513
+ }
514
+ if (typeof traceResponse === 'object' && traceResponse !== null) {
515
+ // Custom object form: {name: p.name, hobby: p.hobby}
516
+ const entries = [];
517
+ for (const [key, value] of Object.entries(traceResponse)) {
518
+ if (value !== null && value !== undefined) {
519
+ const entry = FieldSet.convertTraceResult(rootShape, value);
520
+ entry.customKey = key;
521
+ entries.push(entry);
522
+ }
523
+ }
524
+ return entries;
525
+ }
526
+ return [];
527
+ }
528
+ }
529
+ //# sourceMappingURL=FieldSet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldSet.js","sourceRoot":"","sources":["../../../src/queries/FieldSet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AAWjE,MAAM,oBAAoB,GAAG,CAAC,GAAQ,EAAiC,EAAE,CACvE,GAAG,KAAK,IAAI;IACZ,OAAO,GAAG,KAAK,QAAQ;IACvB,UAAU,IAAI,GAAG;IACjB,SAAS,IAAI,GAAG;IAChB,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,CAAC;AAE5C,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAW,EAAE,CACtC,GAAG,KAAK,IAAI;IACZ,OAAO,GAAG,KAAK,QAAQ;IACvB,SAAS,IAAI,GAAG;IAChB,OAAO,GAAG,CAAC,EAAE,KAAK,UAAU;IAC5B,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU;IACzC,uEAAuE;IACvE,OAAO,IAAI,GAAG,CAAC;AAEjB,uFAAuF;AACvF,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAW,EAAE,CACzC,GAAG,KAAK,IAAI;IACZ,OAAO,GAAG,KAAK,QAAQ;IACvB,QAAQ,IAAI,GAAG;IACf,OAAO,IAAI,GAAG;IACd,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,CAAC;AAEzC,uFAAuF;AACvF,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAW,EAAE,CAC7C,GAAG,KAAK,IAAI;IACZ,OAAO,GAAG,KAAK,QAAQ;IACvB,QAAQ,IAAI,GAAG;IACf,eAAe,IAAI,GAAG,CAAC;AAkDzB;;;;;;;;GAQG;AACH,MAAM,OAAO,QAAQ;IAwBnB,YAAoB,KAAgB,EAAE,OAAwB;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAiBD,MAAM,CAAC,GAAG,CACR,KAAiD,EACjD,UAA+C;QAE/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;QAEzC,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,SAAS,CAAC,EAAE,qCAAqC;oBACjG,mEAAmE,CACpE,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAClG,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAClE,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CACjB,UAAe,EACf,EAAiB,EACjB,cAA+B;QAE/B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC;QACjD,4EAA4E;QAC5E,MAAM,KAAK,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3E,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAwB,CAAC;QACnE,uFAAuF;QACvF,MAAM,CAAC,GAAG,EAAiG,CAAC;QAC5G,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC;QAChC,CAAC,CAAC,cAAc,GAAG,cAAc,CAAC;QAClC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAaD,MAAM,CAAC,GAAG,CAAC,KAAiD,EAAE,IAAuB;;QACnF,MAAM,KAAK,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,mCAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnD,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,WAAW,CACxB,SAAoB,EACpB,KAAa,EACb,OAAoB;QAEpB,MAAM,cAAc,GAAG,SAAS,CAAC,uBAAuB,EAAE,CAAC;QAC3D,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,KAAK,GAAkB,EAAC,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;YAEvE,2CAA2C;YAC3C,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,gBAAgB,GAAG,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBACtD,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;oBAClF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,IAAgB;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,kDAAkD,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CACtH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChC,2FAA2F;gBAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW;oBAC3B,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE;oBACjD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,8EAA8E;IAC9E,oDAAoD;IACpD,8EAA8E;IAE9E,yDAAyD;IACzD,MAAM,CAAC,MAAuB;QAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,sDAAsD;IACtD,GAAG,CAAC,MAAuB;QACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,MAAgB;QACrB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAI,IAAI,CAAC,OAA2B,CAAC,MAAM,CACvD,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAC,CAAA,EAAA,CAC7C,CAAC;QACF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,6FAA6F;IAC7F,GAAG,CAAC,MAAuB;QACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,MAAgB;QACnB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAI,IAAI,CAAC,OAA2B,CAAC,MAAM,CACvD,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,QAAQ,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAC,CAAA,EAAA,CAC5C,CAAC;QACF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,kDAAkD;IAClD,KAAK;QACH,OAAQ,IAAI,CAAC,OAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,uDAAuD;IACvD,MAAM;QACJ,OAAQ,IAAI,CAAC,OAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAC1G,CAAC;IAED,8EAA8E;IAC9E,gBAAgB;IAChB,8EAA8E;IAE9E;;;OAGG;IACH,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;YACpB,MAAM,EAAG,IAAI,CAAC,OAA2B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtD,MAAM,KAAK,GAAsB,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,CAAC;gBAC/D,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;gBACzB,CAAC;gBACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC7C,CAAC;gBACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBACxC,CAAC;gBACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBACpC,CAAC;gBACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;gBACtC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAkB;QAChC,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,OAAO,GAAoB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzD,MAAM,KAAK,GAAkB;gBAC3B,IAAI,EAAE,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjD,KAAK,EAAE,KAAK,CAAC,EAAE;aAChB,CAAC;YACF,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAsB,CAAC;YACnD,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YACpC,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E;;;OAGG;IACK,MAAM,CAAC,iBAAiB,CAAC,KAAiD;QAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,EAAC,SAAS,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,EAAC,CAAC;QACnD,CAAC;QACD,qEAAqE;QACrE,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACvG,OAAO,EAAC,SAAS,EAAG,KAA+B,CAAC,KAAK,EAAE,UAAU,EAAE,KAA8B,EAAC,CAAC;QACzG,CAAC;QACD,2FAA2F;QAC3F,MAAM,SAAS,GAAG,KAAkB,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,UAAU;YACf,CAAC,CAAC,EAAC,SAAS,EAAE,UAAU,EAAC;YACzB,CAAC,CAAC,EAAC,SAAS,EAAC,CAAC;IAClB,CAAC;IAED,uGAAuG;IAC/F,MAAM,CAAC,YAAY,CAAC,KAAyB;QACnD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,KAAgB,EAChB,MAAuB;QAEvB,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,GAAI,KAAK,CAAC,OAA2B,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,qDAAqD;gBACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;wBAC9B,gDAAgD;wBAChD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAA0B,EAAE,CAAC;4BACrD,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE;gCACvC,GAAG,QAAQ,CAAC,QAAQ;gCACpB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ;6BACvB,CAAC,CAAC;4BACH,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAC,CAAC,CAAC;wBACvF,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,+BAA+B;wBAC/B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC;wBAC5C,IAAI,CAAC,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,UAAU,CAAA,EAAE,CAAC;4BACnC,MAAM,IAAI,KAAK,CACb,aAAa,GAAG,mDAAmD,CACpE,CAAC;wBACJ,CAAC;wBACD,MAAM,gBAAgB,GAAG,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;wBACrE,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;4BACjD,MAAM,IAAI,KAAK,CACb,2CAA2C,GAAG,GAAG,CAClD,CAAC;wBACJ,CAAC;wBACD,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE,CAAC;4BAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;4BACzE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE;gCACvC,GAAG,QAAQ,CAAC,QAAQ;gCACpB,GAAG,UAAU,CAAC,QAAQ;6BACvB,CAAC,CAAC;4BACH,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;wBACjC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,oBAAoB,CACjC,SAAoB,EACpB,UAAiC,EACjC,EAAmB;QAEnB,MAAM,KAAK,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAEzB,qEAAqE;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,oEAAoE;QACpE,IAAI,MAAM,YAAY,QAAQ,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,yCAAyC;QACzC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,oDAAoD;QACpD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,6DAA6D;QAC7D,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,qDAAqD;YACrD,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC5D,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,kBAAkB,CAAC,SAAoB,EAAE,GAAQ;QAC9D,iCAAiC;QACjC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/D,OAAO;gBACL,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC3C,WAAW,EAAE,OAAO;aACrB,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3D,OAAO;gBACL,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC;gBACrD,SAAS,EAAE,SAAiC;aAC7C,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,qFAAqF;QACrF,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO;gBACL,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC3C,UAAU,EAAE,EAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,EAAC;aAChE,CAAC;QACJ,CAAC;QAED,iFAAiF;QACjF,qEAAqE;QACrE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,wBAAwB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC/E,OAAO;gBACL,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC3C,gBAAgB,EAAE,iBAAiB;aACpC,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,IAAI,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;YACvD,MAAM,KAAK,GAAkB;gBAC3B,IAAI,EAAE,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;aAC5C,CAAC;YACF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,SAAsB,CAAC;YAClD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,EAAC,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,GAA2B;QACxD,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,IAAI,OAAO,GAAuC,GAAG,CAAC;QACtD,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,wBAAwB,CAAC,SAAc;QAC5C,oCAAoC;QACpC,IAAI,SAAS,CAAC,MAAM,YAAY,QAAQ,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,gDAAgD;QAChD,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;QACD,0CAA0C;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAI,KAA6B,CAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAChD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,cAAc,CAAC,KAAgB,EAAE,OAAwB;QACtE,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAgB,EAAE,OAAwB;QACjE,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,6BAA6B,CAAC,SAAoB,EAAE,aAAkB;QAC3E,OAAO,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,uBAAuB,CAAC,SAAoB,EAAE,aAAkB;QAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,OAAO,aAAa;iBACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;iBACrD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,oBAAoB,CAAC,aAAa,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,gDAAgD;QAChD,IAAI,aAAa,YAAY,QAAQ,IAAI,aAAa,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACpF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,iBAAiB;QACjB,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,oBAAoB;QACpB,IAAI,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAChE,qDAAqD;YACrD,MAAM,OAAO,GAAoB,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBAC5D,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CAEF"}
@@ -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;