@_linked/core 1.2.1 → 2.0.0-next.20260310082533
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.
- package/CHANGELOG.md +117 -6
- package/README.md +209 -14
- package/lib/cjs/index.d.ts +10 -2
- package/lib/cjs/index.js +33 -8
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces/IQuadStore.d.ts +1 -1
- package/lib/cjs/package.d.ts +1 -1
- package/lib/cjs/queries/CreateBuilder.d.ts +38 -0
- package/lib/cjs/queries/CreateBuilder.js +100 -0
- package/lib/cjs/queries/CreateBuilder.js.map +1 -0
- package/lib/cjs/queries/CreateQuery.d.ts +3 -3
- package/lib/cjs/queries/CreateQuery.js.map +1 -1
- package/lib/cjs/queries/DeleteBuilder.d.ts +39 -0
- package/lib/cjs/queries/DeleteBuilder.js +85 -0
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -0
- package/lib/cjs/queries/DeleteQuery.d.ts +3 -3
- package/lib/cjs/queries/DeleteQuery.js.map +1 -1
- package/lib/cjs/queries/FieldSet.d.ts +203 -0
- package/lib/cjs/queries/FieldSet.js +533 -0
- package/lib/cjs/queries/FieldSet.js.map +1 -0
- package/lib/cjs/queries/IRDesugar.d.ts +13 -8
- package/lib/cjs/queries/IRDesugar.js +143 -132
- package/lib/cjs/queries/IRDesugar.js.map +1 -1
- package/lib/cjs/queries/IRLower.js +1 -0
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +1 -0
- package/lib/cjs/queries/MutationQuery.d.ts +1 -1
- package/lib/cjs/queries/MutationQuery.js +1 -6
- package/lib/cjs/queries/MutationQuery.js.map +1 -1
- package/lib/cjs/queries/PropertyPath.d.ts +38 -0
- package/lib/cjs/queries/PropertyPath.js +82 -0
- package/lib/cjs/queries/PropertyPath.js.map +1 -0
- package/lib/cjs/queries/ProxiedPathBuilder.d.ts +14 -0
- package/lib/cjs/queries/ProxiedPathBuilder.js +29 -0
- package/lib/cjs/queries/ProxiedPathBuilder.js.map +1 -0
- package/lib/cjs/queries/QueryBuilder.d.ts +141 -0
- package/lib/cjs/queries/QueryBuilder.js +334 -0
- package/lib/cjs/queries/QueryBuilder.js.map +1 -0
- package/lib/cjs/queries/SelectQuery.d.ts +60 -134
- package/lib/cjs/queries/SelectQuery.js +67 -526
- package/lib/cjs/queries/SelectQuery.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.d.ts +37 -0
- package/lib/cjs/queries/UpdateBuilder.js +84 -0
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -0
- package/lib/cjs/queries/UpdateQuery.d.ts +3 -3
- package/lib/cjs/queries/UpdateQuery.js.map +1 -1
- package/lib/cjs/queries/WhereCondition.d.ts +18 -0
- package/lib/cjs/queries/WhereCondition.js +3 -0
- package/lib/cjs/queries/WhereCondition.js.map +1 -0
- package/lib/cjs/queries/queryDispatch.d.ts +20 -0
- package/lib/cjs/queries/queryDispatch.js +15 -0
- package/lib/cjs/queries/queryDispatch.js.map +1 -0
- package/lib/cjs/queries/resolveShape.d.ts +10 -0
- package/lib/cjs/queries/resolveShape.js +23 -0
- package/lib/cjs/queries/resolveShape.js.map +1 -0
- package/lib/cjs/shapes/SHACL.js +7 -5
- package/lib/cjs/shapes/SHACL.js.map +1 -1
- package/lib/cjs/shapes/Shape.d.ts +33 -52
- package/lib/cjs/shapes/Shape.js +36 -50
- package/lib/cjs/shapes/Shape.js.map +1 -1
- package/lib/cjs/sparql/SparqlAlgebra.d.ts +6 -1
- package/lib/cjs/sparql/algebraToString.js +10 -0
- package/lib/cjs/sparql/algebraToString.js.map +1 -1
- package/lib/cjs/sparql/irToAlgebra.js +6 -2
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
- package/lib/cjs/test-helpers/query-capture-store.d.ts +8 -2
- package/lib/cjs/test-helpers/query-capture-store.js +80 -34
- package/lib/cjs/test-helpers/query-capture-store.js.map +1 -1
- package/lib/cjs/test-helpers/query-fixtures.d.ts +564 -3045
- package/lib/cjs/test-helpers/query-fixtures.js +59 -18
- package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
- package/lib/cjs/test-helpers/test-utils.d.ts +18 -0
- package/lib/cjs/test-helpers/test-utils.js +47 -0
- package/lib/cjs/test-helpers/test-utils.js.map +1 -0
- package/lib/cjs/utils/LinkedStorage.d.ts +3 -4
- package/lib/cjs/utils/LinkedStorage.js +12 -6
- package/lib/cjs/utils/LinkedStorage.js.map +1 -1
- package/lib/cjs/utils/Package.d.ts +8 -8
- package/lib/cjs/utils/Package.js.map +1 -1
- package/lib/cjs/utils/ShapeClass.d.ts +2 -2
- package/lib/cjs/utils/ShapeClass.js +4 -22
- package/lib/cjs/utils/ShapeClass.js.map +1 -1
- package/lib/esm/index.d.ts +10 -2
- package/lib/esm/index.js +25 -4
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/interfaces/IQuadStore.d.ts +1 -1
- package/lib/esm/package.d.ts +1 -1
- package/lib/esm/queries/CreateBuilder.d.ts +38 -0
- package/lib/esm/queries/CreateBuilder.js +96 -0
- package/lib/esm/queries/CreateBuilder.js.map +1 -0
- package/lib/esm/queries/CreateQuery.d.ts +3 -3
- package/lib/esm/queries/CreateQuery.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.d.ts +39 -0
- package/lib/esm/queries/DeleteBuilder.js +81 -0
- package/lib/esm/queries/DeleteBuilder.js.map +1 -0
- package/lib/esm/queries/DeleteQuery.d.ts +3 -3
- package/lib/esm/queries/DeleteQuery.js.map +1 -1
- package/lib/esm/queries/FieldSet.d.ts +203 -0
- package/lib/esm/queries/FieldSet.js +529 -0
- package/lib/esm/queries/FieldSet.js.map +1 -0
- package/lib/esm/queries/IRDesugar.d.ts +13 -8
- package/lib/esm/queries/IRDesugar.js +143 -132
- package/lib/esm/queries/IRDesugar.js.map +1 -1
- package/lib/esm/queries/IRLower.js +1 -0
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +1 -0
- package/lib/esm/queries/MutationQuery.d.ts +1 -1
- package/lib/esm/queries/MutationQuery.js +1 -6
- package/lib/esm/queries/MutationQuery.js.map +1 -1
- package/lib/esm/queries/PropertyPath.d.ts +38 -0
- package/lib/esm/queries/PropertyPath.js +77 -0
- package/lib/esm/queries/PropertyPath.js.map +1 -0
- package/lib/esm/queries/ProxiedPathBuilder.d.ts +14 -0
- package/lib/esm/queries/ProxiedPathBuilder.js +26 -0
- package/lib/esm/queries/ProxiedPathBuilder.js.map +1 -0
- package/lib/esm/queries/QueryBuilder.d.ts +141 -0
- package/lib/esm/queries/QueryBuilder.js +330 -0
- package/lib/esm/queries/QueryBuilder.js.map +1 -0
- package/lib/esm/queries/SelectQuery.d.ts +60 -134
- package/lib/esm/queries/SelectQuery.js +61 -515
- package/lib/esm/queries/SelectQuery.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +37 -0
- package/lib/esm/queries/UpdateBuilder.js +80 -0
- package/lib/esm/queries/UpdateBuilder.js.map +1 -0
- package/lib/esm/queries/UpdateQuery.d.ts +3 -3
- package/lib/esm/queries/UpdateQuery.js.map +1 -1
- package/lib/esm/queries/WhereCondition.d.ts +18 -0
- package/lib/esm/queries/WhereCondition.js +2 -0
- package/lib/esm/queries/WhereCondition.js.map +1 -0
- package/lib/esm/queries/queryDispatch.d.ts +20 -0
- package/lib/esm/queries/queryDispatch.js +11 -0
- package/lib/esm/queries/queryDispatch.js.map +1 -0
- package/lib/esm/queries/resolveShape.d.ts +10 -0
- package/lib/esm/queries/resolveShape.js +20 -0
- package/lib/esm/queries/resolveShape.js.map +1 -0
- package/lib/esm/shapes/SHACL.js +7 -5
- package/lib/esm/shapes/SHACL.js.map +1 -1
- package/lib/esm/shapes/Shape.d.ts +33 -52
- package/lib/esm/shapes/Shape.js +36 -47
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlAlgebra.d.ts +6 -1
- package/lib/esm/sparql/algebraToString.js +10 -0
- package/lib/esm/sparql/algebraToString.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.js +6 -2
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/test-helpers/query-capture-store.d.ts +8 -2
- package/lib/esm/test-helpers/query-capture-store.js +45 -33
- package/lib/esm/test-helpers/query-capture-store.js.map +1 -1
- package/lib/esm/test-helpers/query-fixtures.d.ts +564 -3045
- package/lib/esm/test-helpers/query-fixtures.js +59 -18
- package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
- package/lib/esm/test-helpers/test-utils.d.ts +18 -0
- package/lib/esm/test-helpers/test-utils.js +41 -0
- package/lib/esm/test-helpers/test-utils.js.map +1 -0
- package/lib/esm/utils/LinkedStorage.d.ts +3 -4
- package/lib/esm/utils/LinkedStorage.js +12 -6
- package/lib/esm/utils/LinkedStorage.js.map +1 -1
- package/lib/esm/utils/Package.d.ts +8 -8
- package/lib/esm/utils/Package.js.map +1 -1
- package/lib/esm/utils/ShapeClass.d.ts +2 -2
- package/lib/esm/utils/ShapeClass.js +4 -22
- package/lib/esm/utils/ShapeClass.js.map +1 -1
- package/package.json +1 -1
- package/lib/cjs/queries/QueryParser.d.ts +0 -17
- package/lib/cjs/queries/QueryParser.js +0 -55
- package/lib/cjs/queries/QueryParser.js.map +0 -1
- package/lib/esm/queries/QueryParser.d.ts +0 -17
- package/lib/esm/queries/QueryParser.js +0 -51
- package/lib/esm/queries/QueryParser.js.map +0 -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":"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"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
import { JSNonNullPrimitive,
|
|
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
|
-
*
|
|
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
|
-
|
|
8
|
+
entries: readonly FieldSetEntry[];
|
|
10
9
|
where?: WherePath;
|
|
11
10
|
sortBy?: SortByPath;
|
|
12
11
|
subject?: unknown;
|
|
13
|
-
|
|
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 (
|
|
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;
|