@_linked/core 2.0.0 → 2.2.0-next.20260313111019
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 +33 -171
- package/README.md +197 -45
- package/lib/cjs/expressions/Expr.d.ts +58 -0
- package/lib/cjs/expressions/Expr.js +217 -0
- package/lib/cjs/expressions/Expr.js.map +1 -0
- package/lib/cjs/expressions/ExpressionMethods.d.ts +81 -0
- package/lib/cjs/expressions/ExpressionMethods.js +3 -0
- package/lib/cjs/expressions/ExpressionMethods.js.map +1 -0
- package/lib/cjs/expressions/ExpressionNode.d.ts +95 -0
- package/lib/cjs/expressions/ExpressionNode.js +349 -0
- package/lib/cjs/expressions/ExpressionNode.js.map +1 -0
- package/lib/cjs/index.d.ts +4 -0
- package/lib/cjs/index.js +6 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/queries/DeleteBuilder.d.ts +17 -20
- package/lib/cjs/queries/DeleteBuilder.js +46 -19
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
- package/lib/cjs/queries/DeleteQuery.d.ts +2 -2
- package/lib/cjs/queries/DeleteQuery.js.map +1 -1
- package/lib/cjs/queries/FieldSet.d.ts +3 -0
- package/lib/cjs/queries/FieldSet.js +16 -0
- package/lib/cjs/queries/FieldSet.js.map +1 -1
- package/lib/cjs/queries/IRCanonicalize.d.ts +10 -3
- package/lib/cjs/queries/IRCanonicalize.js +10 -1
- package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
- package/lib/cjs/queries/IRDesugar.d.ts +30 -2
- package/lib/cjs/queries/IRDesugar.js +29 -9
- package/lib/cjs/queries/IRDesugar.js.map +1 -1
- package/lib/cjs/queries/IRLower.d.ts +19 -2
- package/lib/cjs/queries/IRLower.js +104 -20
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IRMutation.d.ts +31 -1
- package/lib/cjs/queries/IRMutation.js +68 -15
- package/lib/cjs/queries/IRMutation.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +33 -4
- package/lib/cjs/queries/MutationQuery.js +16 -2
- package/lib/cjs/queries/MutationQuery.js.map +1 -1
- package/lib/cjs/queries/QueryBuilder.d.ts +14 -1
- package/lib/cjs/queries/QueryBuilder.js +59 -2
- package/lib/cjs/queries/QueryBuilder.js.map +1 -1
- package/lib/cjs/queries/QueryFactory.d.ts +2 -1
- package/lib/cjs/queries/QueryFactory.js.map +1 -1
- package/lib/cjs/queries/SelectQuery.d.ts +6 -2
- package/lib/cjs/queries/SelectQuery.js +51 -7
- package/lib/cjs/queries/SelectQuery.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.d.ts +22 -13
- package/lib/cjs/queries/UpdateBuilder.js +60 -11
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
- package/lib/cjs/queries/UpdateQuery.d.ts +2 -2
- package/lib/cjs/shapes/Shape.d.ts +8 -2
- package/lib/cjs/shapes/Shape.js +9 -13
- package/lib/cjs/shapes/Shape.js.map +1 -1
- package/lib/cjs/sparql/SparqlStore.js +15 -0
- package/lib/cjs/sparql/SparqlStore.js.map +1 -1
- package/lib/cjs/sparql/irToAlgebra.d.ts +34 -3
- package/lib/cjs/sparql/irToAlgebra.js +380 -31
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
- package/lib/cjs/test-helpers/query-fixtures.d.ts +96 -208
- package/lib/cjs/test-helpers/query-fixtures.js +96 -19
- package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
- package/lib/esm/expressions/Expr.d.ts +58 -0
- package/lib/esm/expressions/Expr.js +214 -0
- package/lib/esm/expressions/Expr.js.map +1 -0
- package/lib/esm/expressions/ExpressionMethods.d.ts +81 -0
- package/lib/esm/expressions/ExpressionMethods.js +2 -0
- package/lib/esm/expressions/ExpressionMethods.js.map +1 -0
- package/lib/esm/expressions/ExpressionNode.d.ts +95 -0
- package/lib/esm/expressions/ExpressionNode.js +341 -0
- package/lib/esm/expressions/ExpressionNode.js.map +1 -0
- package/lib/esm/index.d.ts +4 -0
- package/lib/esm/index.js +3 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.d.ts +17 -20
- package/lib/esm/queries/DeleteBuilder.js +46 -19
- package/lib/esm/queries/DeleteBuilder.js.map +1 -1
- package/lib/esm/queries/DeleteQuery.d.ts +2 -2
- package/lib/esm/queries/DeleteQuery.js.map +1 -1
- package/lib/esm/queries/FieldSet.d.ts +3 -0
- package/lib/esm/queries/FieldSet.js +16 -0
- package/lib/esm/queries/FieldSet.js.map +1 -1
- package/lib/esm/queries/IRCanonicalize.d.ts +10 -3
- package/lib/esm/queries/IRCanonicalize.js +10 -1
- package/lib/esm/queries/IRCanonicalize.js.map +1 -1
- package/lib/esm/queries/IRDesugar.d.ts +30 -2
- package/lib/esm/queries/IRDesugar.js +21 -2
- package/lib/esm/queries/IRDesugar.js.map +1 -1
- package/lib/esm/queries/IRLower.d.ts +19 -2
- package/lib/esm/queries/IRLower.js +101 -19
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IRMutation.d.ts +31 -1
- package/lib/esm/queries/IRMutation.js +63 -14
- package/lib/esm/queries/IRMutation.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +33 -4
- package/lib/esm/queries/MutationQuery.js +16 -2
- package/lib/esm/queries/MutationQuery.js.map +1 -1
- package/lib/esm/queries/QueryBuilder.d.ts +14 -1
- package/lib/esm/queries/QueryBuilder.js +59 -2
- package/lib/esm/queries/QueryBuilder.js.map +1 -1
- package/lib/esm/queries/QueryFactory.d.ts +2 -1
- package/lib/esm/queries/QueryFactory.js.map +1 -1
- package/lib/esm/queries/SelectQuery.d.ts +6 -2
- package/lib/esm/queries/SelectQuery.js +51 -7
- package/lib/esm/queries/SelectQuery.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +22 -13
- package/lib/esm/queries/UpdateBuilder.js +60 -11
- package/lib/esm/queries/UpdateBuilder.js.map +1 -1
- package/lib/esm/queries/UpdateQuery.d.ts +2 -2
- package/lib/esm/shapes/Shape.d.ts +8 -2
- package/lib/esm/shapes/Shape.js +9 -13
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlStore.js +16 -1
- package/lib/esm/sparql/SparqlStore.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.d.ts +34 -3
- package/lib/esm/sparql/irToAlgebra.js +374 -31
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/test-helpers/query-fixtures.d.ts +96 -208
- package/lib/esm/test-helpers/query-fixtures.js +96 -19
- package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
const VALID_REGEX_FLAGS = new Set(['i', 'm', 's']);
|
|
2
|
+
function validateRegexFlags(flags) {
|
|
3
|
+
if (!flags)
|
|
4
|
+
return;
|
|
5
|
+
for (const ch of flags) {
|
|
6
|
+
if (!VALID_REGEX_FLAGS.has(ch)) {
|
|
7
|
+
throw new Error(`Unsupported regex flag "${ch}". Only "i", "m", "s" are supported.`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function toIRExpression(input) {
|
|
12
|
+
if (input instanceof ExpressionNode)
|
|
13
|
+
return input.ir;
|
|
14
|
+
if (typeof input === 'string')
|
|
15
|
+
return { kind: 'literal_expr', value: input };
|
|
16
|
+
if (typeof input === 'number')
|
|
17
|
+
return { kind: 'literal_expr', value: input };
|
|
18
|
+
if (typeof input === 'boolean')
|
|
19
|
+
return { kind: 'literal_expr', value: input };
|
|
20
|
+
if (input instanceof Date)
|
|
21
|
+
return { kind: 'literal_expr', value: input.toISOString() };
|
|
22
|
+
throw new Error(`Invalid expression input: ${input}`);
|
|
23
|
+
}
|
|
24
|
+
/** Collect property refs from an ExpressionInput (only ExpressionNode has refs). */
|
|
25
|
+
function collectRefs(...inputs) {
|
|
26
|
+
const merged = new Map();
|
|
27
|
+
for (const input of inputs) {
|
|
28
|
+
if (input instanceof ExpressionNode) {
|
|
29
|
+
for (const [k, v] of input._refs)
|
|
30
|
+
merged.set(k, v);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return merged;
|
|
34
|
+
}
|
|
35
|
+
function binary(op, left, right) {
|
|
36
|
+
return { kind: 'binary_expr', operator: op, left, right: toIRExpression(right) };
|
|
37
|
+
}
|
|
38
|
+
function fnExpr(name, ...args) {
|
|
39
|
+
return { kind: 'function_expr', name, args };
|
|
40
|
+
}
|
|
41
|
+
export class ExpressionNode {
|
|
42
|
+
constructor(ir, refs) {
|
|
43
|
+
this.ir = ir;
|
|
44
|
+
this._refs = refs !== null && refs !== void 0 ? refs : new Map();
|
|
45
|
+
}
|
|
46
|
+
/** Create a derived node that merges refs from this and other inputs. */
|
|
47
|
+
_derive(ir, ...others) {
|
|
48
|
+
const merged = new Map(this._refs);
|
|
49
|
+
for (const other of others) {
|
|
50
|
+
if (other instanceof ExpressionNode) {
|
|
51
|
+
for (const [k, v] of other._refs)
|
|
52
|
+
merged.set(k, v);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return new ExpressionNode(ir, merged);
|
|
56
|
+
}
|
|
57
|
+
/** Create a derived node with no additional inputs. */
|
|
58
|
+
_wrap(ir) {
|
|
59
|
+
return new ExpressionNode(ir, this._refs);
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Arithmetic
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
plus(n) {
|
|
65
|
+
return this._derive(binary('+', this.ir, n), n);
|
|
66
|
+
}
|
|
67
|
+
minus(n) {
|
|
68
|
+
return this._derive(binary('-', this.ir, n), n);
|
|
69
|
+
}
|
|
70
|
+
times(n) {
|
|
71
|
+
return this._derive(binary('*', this.ir, n), n);
|
|
72
|
+
}
|
|
73
|
+
divide(n) {
|
|
74
|
+
return this._derive(binary('/', this.ir, n), n);
|
|
75
|
+
}
|
|
76
|
+
abs() {
|
|
77
|
+
return this._wrap(fnExpr('ABS', this.ir));
|
|
78
|
+
}
|
|
79
|
+
round() {
|
|
80
|
+
return this._wrap(fnExpr('ROUND', this.ir));
|
|
81
|
+
}
|
|
82
|
+
ceil() {
|
|
83
|
+
return this._wrap(fnExpr('CEIL', this.ir));
|
|
84
|
+
}
|
|
85
|
+
floor() {
|
|
86
|
+
return this._wrap(fnExpr('FLOOR', this.ir));
|
|
87
|
+
}
|
|
88
|
+
power(n) {
|
|
89
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
90
|
+
throw new Error(`power() exponent must be a positive integer, got ${n}`);
|
|
91
|
+
}
|
|
92
|
+
if (n > 20) {
|
|
93
|
+
throw new Error(`power() exponent must be ≤ 20 to avoid query bloat, got ${n}`);
|
|
94
|
+
}
|
|
95
|
+
if (n === 1)
|
|
96
|
+
return new ExpressionNode(this.ir, this._refs);
|
|
97
|
+
let result = this.ir;
|
|
98
|
+
for (let i = 1; i < n; i++) {
|
|
99
|
+
result = { kind: 'binary_expr', operator: '*', left: result, right: this.ir };
|
|
100
|
+
}
|
|
101
|
+
return new ExpressionNode(result, this._refs);
|
|
102
|
+
}
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Comparison (short + long aliases)
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
eq(v) {
|
|
107
|
+
return this._derive(binary('=', this.ir, v), v);
|
|
108
|
+
}
|
|
109
|
+
equals(v) {
|
|
110
|
+
return this.eq(v);
|
|
111
|
+
}
|
|
112
|
+
neq(v) {
|
|
113
|
+
return this._derive(binary('!=', this.ir, v), v);
|
|
114
|
+
}
|
|
115
|
+
notEquals(v) {
|
|
116
|
+
return this.neq(v);
|
|
117
|
+
}
|
|
118
|
+
gt(v) {
|
|
119
|
+
return this._derive(binary('>', this.ir, v), v);
|
|
120
|
+
}
|
|
121
|
+
greaterThan(v) {
|
|
122
|
+
return this.gt(v);
|
|
123
|
+
}
|
|
124
|
+
gte(v) {
|
|
125
|
+
return this._derive(binary('>=', this.ir, v), v);
|
|
126
|
+
}
|
|
127
|
+
greaterThanOrEqual(v) {
|
|
128
|
+
return this.gte(v);
|
|
129
|
+
}
|
|
130
|
+
lt(v) {
|
|
131
|
+
return this._derive(binary('<', this.ir, v), v);
|
|
132
|
+
}
|
|
133
|
+
lessThan(v) {
|
|
134
|
+
return this.lt(v);
|
|
135
|
+
}
|
|
136
|
+
lte(v) {
|
|
137
|
+
return this._derive(binary('<=', this.ir, v), v);
|
|
138
|
+
}
|
|
139
|
+
lessThanOrEqual(v) {
|
|
140
|
+
return this.lte(v);
|
|
141
|
+
}
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// String
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
concat(...parts) {
|
|
146
|
+
return this._derive(fnExpr('CONCAT', this.ir, ...parts.map(toIRExpression)), ...parts);
|
|
147
|
+
}
|
|
148
|
+
contains(s) {
|
|
149
|
+
return this._derive(fnExpr('CONTAINS', this.ir, toIRExpression(s)), s);
|
|
150
|
+
}
|
|
151
|
+
startsWith(s) {
|
|
152
|
+
return this._derive(fnExpr('STRSTARTS', this.ir, toIRExpression(s)), s);
|
|
153
|
+
}
|
|
154
|
+
endsWith(s) {
|
|
155
|
+
return this._derive(fnExpr('STRENDS', this.ir, toIRExpression(s)), s);
|
|
156
|
+
}
|
|
157
|
+
substr(start, len) {
|
|
158
|
+
const args = [
|
|
159
|
+
this.ir,
|
|
160
|
+
{ kind: 'literal_expr', value: start },
|
|
161
|
+
];
|
|
162
|
+
if (len !== undefined) {
|
|
163
|
+
args.push({ kind: 'literal_expr', value: len });
|
|
164
|
+
}
|
|
165
|
+
return this._wrap(fnExpr('SUBSTR', ...args));
|
|
166
|
+
}
|
|
167
|
+
before(s) {
|
|
168
|
+
return this._derive(fnExpr('STRBEFORE', this.ir, toIRExpression(s)), s);
|
|
169
|
+
}
|
|
170
|
+
after(s) {
|
|
171
|
+
return this._derive(fnExpr('STRAFTER', this.ir, toIRExpression(s)), s);
|
|
172
|
+
}
|
|
173
|
+
replace(pat, rep, flags) {
|
|
174
|
+
validateRegexFlags(flags);
|
|
175
|
+
const args = [
|
|
176
|
+
this.ir,
|
|
177
|
+
{ kind: 'literal_expr', value: pat },
|
|
178
|
+
{ kind: 'literal_expr', value: rep },
|
|
179
|
+
];
|
|
180
|
+
if (flags) {
|
|
181
|
+
args.push({ kind: 'literal_expr', value: flags });
|
|
182
|
+
}
|
|
183
|
+
return this._wrap(fnExpr('REPLACE', ...args));
|
|
184
|
+
}
|
|
185
|
+
ucase() {
|
|
186
|
+
return this._wrap(fnExpr('UCASE', this.ir));
|
|
187
|
+
}
|
|
188
|
+
lcase() {
|
|
189
|
+
return this._wrap(fnExpr('LCASE', this.ir));
|
|
190
|
+
}
|
|
191
|
+
strlen() {
|
|
192
|
+
return this._wrap(fnExpr('STRLEN', this.ir));
|
|
193
|
+
}
|
|
194
|
+
encodeForUri() {
|
|
195
|
+
return this._wrap(fnExpr('ENCODE_FOR_URI', this.ir));
|
|
196
|
+
}
|
|
197
|
+
matches(pat, flags) {
|
|
198
|
+
validateRegexFlags(flags);
|
|
199
|
+
const args = [
|
|
200
|
+
this.ir,
|
|
201
|
+
{ kind: 'literal_expr', value: pat },
|
|
202
|
+
];
|
|
203
|
+
if (flags) {
|
|
204
|
+
args.push({ kind: 'literal_expr', value: flags });
|
|
205
|
+
}
|
|
206
|
+
return this._wrap(fnExpr('REGEX', ...args));
|
|
207
|
+
}
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
209
|
+
// Date/Time
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
year() { return this._wrap(fnExpr('YEAR', this.ir)); }
|
|
212
|
+
month() { return this._wrap(fnExpr('MONTH', this.ir)); }
|
|
213
|
+
day() { return this._wrap(fnExpr('DAY', this.ir)); }
|
|
214
|
+
hours() { return this._wrap(fnExpr('HOURS', this.ir)); }
|
|
215
|
+
minutes() { return this._wrap(fnExpr('MINUTES', this.ir)); }
|
|
216
|
+
seconds() { return this._wrap(fnExpr('SECONDS', this.ir)); }
|
|
217
|
+
timezone() { return this._wrap(fnExpr('TIMEZONE', this.ir)); }
|
|
218
|
+
tz() { return this._wrap(fnExpr('TZ', this.ir)); }
|
|
219
|
+
// ---------------------------------------------------------------------------
|
|
220
|
+
// Logical
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
and(expr) {
|
|
223
|
+
return this._derive({
|
|
224
|
+
kind: 'logical_expr',
|
|
225
|
+
operator: 'and',
|
|
226
|
+
expressions: [this.ir, toIRExpression(expr)],
|
|
227
|
+
}, expr);
|
|
228
|
+
}
|
|
229
|
+
or(expr) {
|
|
230
|
+
return this._derive({
|
|
231
|
+
kind: 'logical_expr',
|
|
232
|
+
operator: 'or',
|
|
233
|
+
expressions: [this.ir, toIRExpression(expr)],
|
|
234
|
+
}, expr);
|
|
235
|
+
}
|
|
236
|
+
not() {
|
|
237
|
+
return this._wrap({ kind: 'not_expr', expression: this.ir });
|
|
238
|
+
}
|
|
239
|
+
// ---------------------------------------------------------------------------
|
|
240
|
+
// Null-handling
|
|
241
|
+
// ---------------------------------------------------------------------------
|
|
242
|
+
isDefined() {
|
|
243
|
+
return this._wrap(fnExpr('BOUND', this.ir));
|
|
244
|
+
}
|
|
245
|
+
isNotDefined() {
|
|
246
|
+
return this._wrap({
|
|
247
|
+
kind: 'not_expr',
|
|
248
|
+
expression: fnExpr('BOUND', this.ir),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
defaultTo(fallback) {
|
|
252
|
+
return this._derive(fnExpr('COALESCE', this.ir, toIRExpression(fallback)), fallback);
|
|
253
|
+
}
|
|
254
|
+
// ---------------------------------------------------------------------------
|
|
255
|
+
// RDF introspection
|
|
256
|
+
// ---------------------------------------------------------------------------
|
|
257
|
+
lang() { return this._wrap(fnExpr('LANG', this.ir)); }
|
|
258
|
+
datatype() { return this._wrap(fnExpr('DATATYPE', this.ir)); }
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
// Type casting / checking
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
str() { return this._wrap(fnExpr('STR', this.ir)); }
|
|
263
|
+
iri() { return this._wrap(fnExpr('IRI', this.ir)); }
|
|
264
|
+
isIri() { return this._wrap(fnExpr('isIRI', this.ir)); }
|
|
265
|
+
isLiteral() { return this._wrap(fnExpr('isLiteral', this.ir)); }
|
|
266
|
+
isBlank() { return this._wrap(fnExpr('isBlank', this.ir)); }
|
|
267
|
+
isNumeric() { return this._wrap(fnExpr('isNumeric', this.ir)); }
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
// Hash
|
|
270
|
+
// ---------------------------------------------------------------------------
|
|
271
|
+
md5() { return this._wrap(fnExpr('MD5', this.ir)); }
|
|
272
|
+
sha256() { return this._wrap(fnExpr('SHA256', this.ir)); }
|
|
273
|
+
sha512() { return this._wrap(fnExpr('SHA512', this.ir)); }
|
|
274
|
+
}
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// Proxy tracing helpers
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
let _refCounter = 0;
|
|
279
|
+
/**
|
|
280
|
+
* Create an ExpressionNode from a proxy-traced property access.
|
|
281
|
+
* Uses a placeholder sourceAlias that gets resolved during IR lowering.
|
|
282
|
+
*
|
|
283
|
+
* The segments array maps to a property path (e.g. ['bestFriend', 'name']).
|
|
284
|
+
* Only the last segment becomes the property_expr's .property; earlier segments
|
|
285
|
+
* are stored in the refs map and resolved as traversals during lowering.
|
|
286
|
+
*/
|
|
287
|
+
export function tracedPropertyExpression(segmentIds) {
|
|
288
|
+
const placeholder = `__ref_${_refCounter++}__`;
|
|
289
|
+
const lastSegment = segmentIds[segmentIds.length - 1];
|
|
290
|
+
const ir = {
|
|
291
|
+
kind: 'property_expr',
|
|
292
|
+
sourceAlias: placeholder,
|
|
293
|
+
property: lastSegment,
|
|
294
|
+
};
|
|
295
|
+
const refs = new Map([[placeholder, segmentIds]]);
|
|
296
|
+
return new ExpressionNode(ir, refs);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Resolve unresolved property references in an IRExpression tree.
|
|
300
|
+
* Walks the tree and replaces placeholder sourceAlias values with
|
|
301
|
+
* real aliases resolved via pathOptions.
|
|
302
|
+
*/
|
|
303
|
+
export function resolveExpressionRefs(expr, refs, rootAlias, resolveTraversal) {
|
|
304
|
+
if (refs.size === 0)
|
|
305
|
+
return expr;
|
|
306
|
+
const resolve = (e) => {
|
|
307
|
+
switch (e.kind) {
|
|
308
|
+
case 'property_expr': {
|
|
309
|
+
const segments = refs.get(e.sourceAlias);
|
|
310
|
+
if (!segments)
|
|
311
|
+
return e;
|
|
312
|
+
// Resolve: first N-1 segments are traversals, last is property
|
|
313
|
+
let currentAlias = rootAlias;
|
|
314
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
315
|
+
currentAlias = resolveTraversal(currentAlias, segments[i]);
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
kind: 'property_expr',
|
|
319
|
+
sourceAlias: currentAlias,
|
|
320
|
+
property: segments[segments.length - 1],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
case 'binary_expr':
|
|
324
|
+
return Object.assign(Object.assign({}, e), { left: resolve(e.left), right: resolve(e.right) });
|
|
325
|
+
case 'function_expr':
|
|
326
|
+
return Object.assign(Object.assign({}, e), { args: e.args.map(resolve) });
|
|
327
|
+
case 'logical_expr':
|
|
328
|
+
return Object.assign(Object.assign({}, e), { expressions: e.expressions.map(resolve) });
|
|
329
|
+
case 'not_expr':
|
|
330
|
+
return Object.assign(Object.assign({}, e), { expression: resolve(e.expression) });
|
|
331
|
+
default:
|
|
332
|
+
return e;
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
return resolve(expr);
|
|
336
|
+
}
|
|
337
|
+
/** Check if a value is an ExpressionNode. */
|
|
338
|
+
export function isExpressionNode(value) {
|
|
339
|
+
return value instanceof ExpressionNode;
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=ExpressionNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpressionNode.js","sourceRoot":"","sources":["../../../src/expressions/ExpressionNode.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -7,5 +7,9 @@ export type { QueryBuilderJSON } from './queries/QueryBuilder.js';
|
|
|
7
7
|
export { CreateBuilder } from './queries/CreateBuilder.js';
|
|
8
8
|
export { UpdateBuilder } from './queries/UpdateBuilder.js';
|
|
9
9
|
export { DeleteBuilder } from './queries/DeleteBuilder.js';
|
|
10
|
+
export { ExpressionNode } from './expressions/ExpressionNode.js';
|
|
11
|
+
export type { ExpressionInput, PropertyRefMap } from './expressions/ExpressionNode.js';
|
|
12
|
+
export { Expr } from './expressions/Expr.js';
|
|
13
|
+
export type { ExpressionUpdateProxy, ExpressionUpdateResult, BaseExpressionMethods, NumericExpressionMethods, StringExpressionMethods, DateExpressionMethods, BooleanExpressionMethods, } from './expressions/ExpressionMethods.js';
|
|
10
14
|
export type { LinkedComponentInterface, QueryComponentLike } from './queries/SelectQuery.js';
|
|
11
15
|
export declare function initModularApp(): void;
|
package/lib/esm/index.js
CHANGED
|
@@ -53,6 +53,9 @@ export { FieldSet } from './queries/FieldSet.js';
|
|
|
53
53
|
export { CreateBuilder } from './queries/CreateBuilder.js';
|
|
54
54
|
export { UpdateBuilder } from './queries/UpdateBuilder.js';
|
|
55
55
|
export { DeleteBuilder } from './queries/DeleteBuilder.js';
|
|
56
|
+
// Expressions — computed fields and functions
|
|
57
|
+
export { ExpressionNode } from './expressions/ExpressionNode.js';
|
|
58
|
+
export { Expr } from './expressions/Expr.js';
|
|
56
59
|
export function initModularApp() {
|
|
57
60
|
let publicFiles = {
|
|
58
61
|
Package,
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,kBAAkB,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,iBAAiB,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,0BAA0B,MAAM,yCAAyC,CAAC;AACtF,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,UAAU,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,2CAA2C;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAGzE,sBAAsB;AACtB,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAM/C,+BAA+B;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,36 @@
|
|
|
1
1
|
import { Shape, ShapeConstructor } from '../shapes/Shape.js';
|
|
2
2
|
import { DeleteQuery, DeleteResponse } from './DeleteQuery.js';
|
|
3
3
|
import { NodeId } from './MutationQuery.js';
|
|
4
|
+
import { WhereClause } from './SelectQuery.js';
|
|
4
5
|
/**
|
|
5
6
|
* An immutable, fluent builder for delete mutations.
|
|
6
7
|
*
|
|
7
8
|
* Implements PromiseLike so mutations execute on `await`:
|
|
8
9
|
* ```ts
|
|
9
|
-
* const result = await DeleteBuilder.from(Person
|
|
10
|
+
* const result = await DeleteBuilder.from(Person, {id: '...'});
|
|
11
|
+
* await DeleteBuilder.from(Person).all(); // returns void
|
|
10
12
|
* ```
|
|
11
13
|
*
|
|
12
|
-
*
|
|
14
|
+
* R is the resolved type: DeleteResponse for ID-based, void for bulk operations.
|
|
13
15
|
*/
|
|
14
|
-
export declare class DeleteBuilder<S extends Shape = Shape> implements PromiseLike<
|
|
16
|
+
export declare class DeleteBuilder<S extends Shape = Shape, R = DeleteResponse> implements PromiseLike<R>, Promise<R> {
|
|
15
17
|
private readonly _shape;
|
|
16
18
|
private readonly _ids?;
|
|
19
|
+
private readonly _mode?;
|
|
20
|
+
private readonly _whereFn?;
|
|
17
21
|
private constructor();
|
|
18
22
|
private clone;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* DeleteBuilder.from(Person, {id: '...'}) // also supported
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
static from<S extends Shape>(shape: ShapeConstructor<S> | string, ids?: NodeId | NodeId[]): DeleteBuilder<S>;
|
|
29
|
-
/** Specify the target IDs to delete. */
|
|
30
|
-
for(ids: NodeId | NodeId[]): DeleteBuilder<S>;
|
|
31
|
-
/** Build the IR mutation. Throws if no IDs were specified via .for(). */
|
|
23
|
+
static from<S extends Shape>(shape: ShapeConstructor<S> | string, ids?: NodeId | NodeId[]): DeleteBuilder<S, DeleteResponse>;
|
|
24
|
+
/** Delete all instances of this shape type. Returns void. */
|
|
25
|
+
all(): DeleteBuilder<S, void>;
|
|
26
|
+
/** Delete instances matching a condition. Returns void. */
|
|
27
|
+
where(fn: WhereClause<S>): DeleteBuilder<S, void>;
|
|
28
|
+
/** Build the IR mutation. */
|
|
32
29
|
build(): DeleteQuery;
|
|
33
30
|
/** Execute the mutation. */
|
|
34
|
-
exec(): Promise<
|
|
35
|
-
then<TResult1 =
|
|
36
|
-
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<
|
|
37
|
-
finally(onfinally?: (() => void) | null): Promise<
|
|
31
|
+
exec(): Promise<R>;
|
|
32
|
+
then<TResult1 = R, TResult2 = never>(onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
|
|
33
|
+
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<R | TResult>;
|
|
34
|
+
finally(onfinally?: (() => void) | null): Promise<R>;
|
|
38
35
|
get [Symbol.toStringTag](): string;
|
|
39
36
|
}
|
|
@@ -1,65 +1,92 @@
|
|
|
1
1
|
import { resolveShape } from './resolveShape.js';
|
|
2
2
|
import { DeleteQueryFactory } from './DeleteQuery.js';
|
|
3
3
|
import { getQueryDispatch } from './queryDispatch.js';
|
|
4
|
+
import { processWhereClause } from './SelectQuery.js';
|
|
5
|
+
import { buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
|
|
6
|
+
import { toWhere } from './IRDesugar.js';
|
|
7
|
+
import { canonicalizeWhere } from './IRCanonicalize.js';
|
|
8
|
+
import { lowerWhereToIR } from './IRLower.js';
|
|
4
9
|
/**
|
|
5
10
|
* An immutable, fluent builder for delete mutations.
|
|
6
11
|
*
|
|
7
12
|
* Implements PromiseLike so mutations execute on `await`:
|
|
8
13
|
* ```ts
|
|
9
|
-
* const result = await DeleteBuilder.from(Person
|
|
14
|
+
* const result = await DeleteBuilder.from(Person, {id: '...'});
|
|
15
|
+
* await DeleteBuilder.from(Person).all(); // returns void
|
|
10
16
|
* ```
|
|
11
17
|
*
|
|
12
|
-
*
|
|
18
|
+
* R is the resolved type: DeleteResponse for ID-based, void for bulk operations.
|
|
13
19
|
*/
|
|
14
20
|
export class DeleteBuilder {
|
|
15
21
|
constructor(init) {
|
|
16
22
|
this._shape = init.shape;
|
|
17
23
|
this._ids = init.ids;
|
|
24
|
+
this._mode = init.mode;
|
|
25
|
+
this._whereFn = init.whereFn;
|
|
18
26
|
}
|
|
19
27
|
clone(overrides = {}) {
|
|
20
|
-
return new DeleteBuilder(Object.assign({ shape: this._shape, ids: this._ids }, overrides));
|
|
28
|
+
return new DeleteBuilder(Object.assign({ shape: this._shape, ids: this._ids, mode: this._mode, whereFn: this._whereFn }, overrides));
|
|
21
29
|
}
|
|
22
30
|
// ---------------------------------------------------------------------------
|
|
23
31
|
// Static constructors
|
|
24
32
|
// ---------------------------------------------------------------------------
|
|
25
|
-
/**
|
|
26
|
-
* Create a DeleteBuilder for the given shape.
|
|
27
|
-
*
|
|
28
|
-
* Optionally accepts IDs inline for backwards compatibility:
|
|
29
|
-
* ```ts
|
|
30
|
-
* DeleteBuilder.from(Person).for({id: '...'}) // preferred
|
|
31
|
-
* DeleteBuilder.from(Person, {id: '...'}) // also supported
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
33
|
static from(shape, ids) {
|
|
35
34
|
const resolved = resolveShape(shape);
|
|
36
35
|
if (ids !== undefined) {
|
|
37
36
|
const idsArray = Array.isArray(ids) ? ids : [ids];
|
|
38
|
-
return new DeleteBuilder({ shape: resolved, ids: idsArray });
|
|
37
|
+
return new DeleteBuilder({ shape: resolved, ids: idsArray, mode: 'ids' });
|
|
39
38
|
}
|
|
40
39
|
return new DeleteBuilder({ shape: resolved });
|
|
41
40
|
}
|
|
42
41
|
// ---------------------------------------------------------------------------
|
|
43
42
|
// Fluent API
|
|
44
43
|
// ---------------------------------------------------------------------------
|
|
45
|
-
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
/** Delete all instances of this shape type. Returns void. */
|
|
45
|
+
all() {
|
|
46
|
+
return this.clone({ mode: 'all', ids: undefined, whereFn: undefined });
|
|
47
|
+
}
|
|
48
|
+
/** Delete instances matching a condition. Returns void. */
|
|
49
|
+
where(fn) {
|
|
50
|
+
return this.clone({ mode: 'where', whereFn: fn, ids: undefined });
|
|
49
51
|
}
|
|
50
52
|
// ---------------------------------------------------------------------------
|
|
51
53
|
// Build & execute
|
|
52
54
|
// ---------------------------------------------------------------------------
|
|
53
|
-
/** Build the IR mutation.
|
|
55
|
+
/** Build the IR mutation. */
|
|
54
56
|
build() {
|
|
57
|
+
const mode = this._mode || (this._ids ? 'ids' : undefined);
|
|
58
|
+
if (mode === 'all') {
|
|
59
|
+
return buildCanonicalDeleteAllMutationIR({
|
|
60
|
+
shape: this._shape.shape,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (mode === 'where') {
|
|
64
|
+
if (!this._whereFn) {
|
|
65
|
+
throw new Error('DeleteBuilder.where() requires a condition callback.');
|
|
66
|
+
}
|
|
67
|
+
const wherePath = processWhereClause(this._whereFn, this._shape);
|
|
68
|
+
const desugared = toWhere(wherePath);
|
|
69
|
+
const canonical = canonicalizeWhere(desugared);
|
|
70
|
+
const { where, wherePatterns } = lowerWhereToIR(canonical);
|
|
71
|
+
return buildCanonicalDeleteWhereMutationIR({
|
|
72
|
+
shape: this._shape.shape,
|
|
73
|
+
where,
|
|
74
|
+
wherePatterns,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// Default: ID-based delete
|
|
55
78
|
if (!this._ids || this._ids.length === 0) {
|
|
56
|
-
throw new Error('DeleteBuilder requires at least one ID to delete.
|
|
79
|
+
throw new Error('DeleteBuilder requires at least one ID to delete. Use DeleteBuilder.from(shape, ids), .all(), or .where().');
|
|
57
80
|
}
|
|
58
81
|
const factory = new DeleteQueryFactory(this._shape, this._ids);
|
|
59
82
|
return factory.build();
|
|
60
83
|
}
|
|
61
84
|
/** Execute the mutation. */
|
|
62
85
|
exec() {
|
|
86
|
+
const mode = this._mode || (this._ids ? 'ids' : undefined);
|
|
87
|
+
if (mode === 'all' || mode === 'where') {
|
|
88
|
+
return getQueryDispatch().deleteQuery(this.build()).then(() => undefined);
|
|
89
|
+
}
|
|
63
90
|
return getQueryDispatch().deleteQuery(this.build());
|
|
64
91
|
}
|
|
65
92
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteBuilder.js","sourceRoot":"","sources":["../../../src/queries/DeleteBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAC,kBAAkB,EAA8B,MAAM,kBAAkB,CAAC;AAEjF,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DeleteBuilder.js","sourceRoot":"","sources":["../../../src/queries/DeleteBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Shape, ShapeConstructor } from '../shapes/Shape.js';
|
|
2
2
|
import { NodeReferenceValue, UpdatePartial } from './QueryFactory.js';
|
|
3
3
|
import { MutationQueryFactory, NodeId } from './MutationQuery.js';
|
|
4
|
-
import { IRDeleteMutation } from './IntermediateRepresentation.js';
|
|
4
|
+
import { IRDeleteMutation, IRDeleteAllMutation, IRDeleteWhereMutation } from './IntermediateRepresentation.js';
|
|
5
5
|
/**
|
|
6
6
|
* The canonical DeleteQuery type — an IR AST node representing a delete mutation.
|
|
7
7
|
* This is the type received by IQuadStore.deleteQuery().
|
|
8
8
|
*/
|
|
9
|
-
export type DeleteQuery = IRDeleteMutation;
|
|
9
|
+
export type DeleteQuery = IRDeleteMutation | IRDeleteAllMutation | IRDeleteWhereMutation;
|
|
10
10
|
export type DeleteResponse = {
|
|
11
11
|
/**
|
|
12
12
|
* The IDs of the items that were successfully deleted.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeleteQuery.js","sourceRoot":"","sources":["../../../src/queries/DeleteQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,oBAAoB,EAAS,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DeleteQuery.js","sourceRoot":"","sources":["../../../src/queries/DeleteQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,oBAAoB,EAAS,MAAM,oBAAoB,CAAC;AAMhE,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AA2B/D,MAAM,OAAO,kBAGX,SAAQ,oBAAoB;IAI5B,YACS,UAAuC,EAC9C,GAAsB;QAEtB,KAAK,EAAE,CAAC;QAHD,eAAU,GAAV,UAAU,CAA6B;QAI9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK;QACH,OAAO,8BAA8B,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -2,6 +2,7 @@ import type { NodeShape, PropertyShape } from '../shapes/SHACL.js';
|
|
|
2
2
|
import type { Shape, ShapeConstructor } from '../shapes/Shape.js';
|
|
3
3
|
import { PropertyPath } from './PropertyPath.js';
|
|
4
4
|
import type { WherePath } from './SelectQuery.js';
|
|
5
|
+
import type { ExpressionNode } from '../expressions/ExpressionNode.js';
|
|
5
6
|
type QueryBuilderObjectLike = {
|
|
6
7
|
property?: PropertyShape;
|
|
7
8
|
subject?: QueryBuilderObjectLike;
|
|
@@ -26,6 +27,8 @@ export type FieldSetEntry = {
|
|
|
26
27
|
/** Component preload composition — the FieldSet comes from a linked component's own query,
|
|
27
28
|
* merged in via `preloadFor()`. Distinct from subSelect which is a user-authored nested query. */
|
|
28
29
|
preloadSubSelect?: FieldSet;
|
|
30
|
+
/** Computed expression from proxy tracing (e.g. `p.age.times(12)`) */
|
|
31
|
+
expressionNode?: ExpressionNode;
|
|
29
32
|
};
|
|
30
33
|
/**
|
|
31
34
|
* Input types accepted by FieldSet construction methods.
|