@_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.
Files changed (119) hide show
  1. package/CHANGELOG.md +33 -171
  2. package/README.md +197 -45
  3. package/lib/cjs/expressions/Expr.d.ts +58 -0
  4. package/lib/cjs/expressions/Expr.js +217 -0
  5. package/lib/cjs/expressions/Expr.js.map +1 -0
  6. package/lib/cjs/expressions/ExpressionMethods.d.ts +81 -0
  7. package/lib/cjs/expressions/ExpressionMethods.js +3 -0
  8. package/lib/cjs/expressions/ExpressionMethods.js.map +1 -0
  9. package/lib/cjs/expressions/ExpressionNode.d.ts +95 -0
  10. package/lib/cjs/expressions/ExpressionNode.js +349 -0
  11. package/lib/cjs/expressions/ExpressionNode.js.map +1 -0
  12. package/lib/cjs/index.d.ts +4 -0
  13. package/lib/cjs/index.js +6 -1
  14. package/lib/cjs/index.js.map +1 -1
  15. package/lib/cjs/queries/DeleteBuilder.d.ts +17 -20
  16. package/lib/cjs/queries/DeleteBuilder.js +46 -19
  17. package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
  18. package/lib/cjs/queries/DeleteQuery.d.ts +2 -2
  19. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  20. package/lib/cjs/queries/FieldSet.d.ts +3 -0
  21. package/lib/cjs/queries/FieldSet.js +16 -0
  22. package/lib/cjs/queries/FieldSet.js.map +1 -1
  23. package/lib/cjs/queries/IRCanonicalize.d.ts +10 -3
  24. package/lib/cjs/queries/IRCanonicalize.js +10 -1
  25. package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
  26. package/lib/cjs/queries/IRDesugar.d.ts +30 -2
  27. package/lib/cjs/queries/IRDesugar.js +29 -9
  28. package/lib/cjs/queries/IRDesugar.js.map +1 -1
  29. package/lib/cjs/queries/IRLower.d.ts +19 -2
  30. package/lib/cjs/queries/IRLower.js +104 -20
  31. package/lib/cjs/queries/IRLower.js.map +1 -1
  32. package/lib/cjs/queries/IRMutation.d.ts +31 -1
  33. package/lib/cjs/queries/IRMutation.js +68 -15
  34. package/lib/cjs/queries/IRMutation.js.map +1 -1
  35. package/lib/cjs/queries/IntermediateRepresentation.d.ts +33 -4
  36. package/lib/cjs/queries/MutationQuery.js +16 -2
  37. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  38. package/lib/cjs/queries/QueryBuilder.d.ts +14 -1
  39. package/lib/cjs/queries/QueryBuilder.js +59 -2
  40. package/lib/cjs/queries/QueryBuilder.js.map +1 -1
  41. package/lib/cjs/queries/QueryFactory.d.ts +2 -1
  42. package/lib/cjs/queries/QueryFactory.js.map +1 -1
  43. package/lib/cjs/queries/SelectQuery.d.ts +6 -2
  44. package/lib/cjs/queries/SelectQuery.js +51 -7
  45. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  46. package/lib/cjs/queries/UpdateBuilder.d.ts +22 -13
  47. package/lib/cjs/queries/UpdateBuilder.js +60 -11
  48. package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
  49. package/lib/cjs/queries/UpdateQuery.d.ts +2 -2
  50. package/lib/cjs/shapes/Shape.d.ts +8 -2
  51. package/lib/cjs/shapes/Shape.js +9 -13
  52. package/lib/cjs/shapes/Shape.js.map +1 -1
  53. package/lib/cjs/sparql/SparqlStore.js +15 -0
  54. package/lib/cjs/sparql/SparqlStore.js.map +1 -1
  55. package/lib/cjs/sparql/irToAlgebra.d.ts +34 -3
  56. package/lib/cjs/sparql/irToAlgebra.js +380 -31
  57. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  58. package/lib/cjs/test-helpers/query-fixtures.d.ts +96 -208
  59. package/lib/cjs/test-helpers/query-fixtures.js +96 -19
  60. package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
  61. package/lib/esm/expressions/Expr.d.ts +58 -0
  62. package/lib/esm/expressions/Expr.js +214 -0
  63. package/lib/esm/expressions/Expr.js.map +1 -0
  64. package/lib/esm/expressions/ExpressionMethods.d.ts +81 -0
  65. package/lib/esm/expressions/ExpressionMethods.js +2 -0
  66. package/lib/esm/expressions/ExpressionMethods.js.map +1 -0
  67. package/lib/esm/expressions/ExpressionNode.d.ts +95 -0
  68. package/lib/esm/expressions/ExpressionNode.js +341 -0
  69. package/lib/esm/expressions/ExpressionNode.js.map +1 -0
  70. package/lib/esm/index.d.ts +4 -0
  71. package/lib/esm/index.js +3 -0
  72. package/lib/esm/index.js.map +1 -1
  73. package/lib/esm/queries/DeleteBuilder.d.ts +17 -20
  74. package/lib/esm/queries/DeleteBuilder.js +46 -19
  75. package/lib/esm/queries/DeleteBuilder.js.map +1 -1
  76. package/lib/esm/queries/DeleteQuery.d.ts +2 -2
  77. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  78. package/lib/esm/queries/FieldSet.d.ts +3 -0
  79. package/lib/esm/queries/FieldSet.js +16 -0
  80. package/lib/esm/queries/FieldSet.js.map +1 -1
  81. package/lib/esm/queries/IRCanonicalize.d.ts +10 -3
  82. package/lib/esm/queries/IRCanonicalize.js +10 -1
  83. package/lib/esm/queries/IRCanonicalize.js.map +1 -1
  84. package/lib/esm/queries/IRDesugar.d.ts +30 -2
  85. package/lib/esm/queries/IRDesugar.js +21 -2
  86. package/lib/esm/queries/IRDesugar.js.map +1 -1
  87. package/lib/esm/queries/IRLower.d.ts +19 -2
  88. package/lib/esm/queries/IRLower.js +101 -19
  89. package/lib/esm/queries/IRLower.js.map +1 -1
  90. package/lib/esm/queries/IRMutation.d.ts +31 -1
  91. package/lib/esm/queries/IRMutation.js +63 -14
  92. package/lib/esm/queries/IRMutation.js.map +1 -1
  93. package/lib/esm/queries/IntermediateRepresentation.d.ts +33 -4
  94. package/lib/esm/queries/MutationQuery.js +16 -2
  95. package/lib/esm/queries/MutationQuery.js.map +1 -1
  96. package/lib/esm/queries/QueryBuilder.d.ts +14 -1
  97. package/lib/esm/queries/QueryBuilder.js +59 -2
  98. package/lib/esm/queries/QueryBuilder.js.map +1 -1
  99. package/lib/esm/queries/QueryFactory.d.ts +2 -1
  100. package/lib/esm/queries/QueryFactory.js.map +1 -1
  101. package/lib/esm/queries/SelectQuery.d.ts +6 -2
  102. package/lib/esm/queries/SelectQuery.js +51 -7
  103. package/lib/esm/queries/SelectQuery.js.map +1 -1
  104. package/lib/esm/queries/UpdateBuilder.d.ts +22 -13
  105. package/lib/esm/queries/UpdateBuilder.js +60 -11
  106. package/lib/esm/queries/UpdateBuilder.js.map +1 -1
  107. package/lib/esm/queries/UpdateQuery.d.ts +2 -2
  108. package/lib/esm/shapes/Shape.d.ts +8 -2
  109. package/lib/esm/shapes/Shape.js +9 -13
  110. package/lib/esm/shapes/Shape.js.map +1 -1
  111. package/lib/esm/sparql/SparqlStore.js +16 -1
  112. package/lib/esm/sparql/SparqlStore.js.map +1 -1
  113. package/lib/esm/sparql/irToAlgebra.d.ts +34 -3
  114. package/lib/esm/sparql/irToAlgebra.js +374 -31
  115. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  116. package/lib/esm/test-helpers/query-fixtures.d.ts +96 -208
  117. package/lib/esm/test-helpers/query-fixtures.js +96 -19
  118. package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
  119. 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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"}
@@ -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,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
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).for({id: '...'});
10
+ * const result = await DeleteBuilder.from(Person, {id: '...'});
11
+ * await DeleteBuilder.from(Person).all(); // returns void
10
12
  * ```
11
13
  *
12
- * Internally delegates to DeleteQueryFactory for IR generation.
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<DeleteResponse>, Promise<DeleteResponse> {
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
- * Create a DeleteBuilder for the given shape.
21
- *
22
- * Optionally accepts IDs inline for backwards compatibility:
23
- * ```ts
24
- * DeleteBuilder.from(Person).for({id: '...'}) // preferred
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<DeleteResponse>;
35
- then<TResult1 = DeleteResponse, TResult2 = never>(onfulfilled?: ((value: DeleteResponse) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
36
- catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<DeleteResponse | TResult>;
37
- finally(onfinally?: (() => void) | null): Promise<DeleteResponse>;
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).for({id: '...'});
14
+ * const result = await DeleteBuilder.from(Person, {id: '...'});
15
+ * await DeleteBuilder.from(Person).all(); // returns void
10
16
  * ```
11
17
  *
12
- * Internally delegates to DeleteQueryFactory for IR generation.
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
- /** Specify the target IDs to delete. */
46
- for(ids) {
47
- const idsArray = Array.isArray(ids) ? ids : [ids];
48
- return this.clone({ ids: idsArray });
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. Throws if no IDs were specified via .for(). */
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. Specify targets with .for(ids).');
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;AAUpD;;;;;;;;;GASG;AACH,MAAM,OAAO,aAAa;IAMxB,YAAoB,IAA0B;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,YAA2C,EAAE;QACzD,OAAO,IAAI,aAAa,iBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,EAClB,GAAG,EAAE,IAAI,CAAC,IAAI,IACX,SAAS,EACZ,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CACT,KAAmC,EACnC,GAAuB;QAEvB,MAAM,QAAQ,GAAG,YAAY,CAAI,KAAK,CAAC,CAAC;QACxC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,IAAI,aAAa,CAAI,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,aAAa,CAAI,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC;IACjD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,wCAAwC;IACxC,GAAG,CAAC,GAAsB;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAC,CAAC,CAAC;IACrC,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E,yEAAyE;IACzE,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,kBAAkB,CACpC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,CACV,CAAC;QACF,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,4BAA4B;IAC5B,IAAI;QACF,OAAO,gBAAgB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,IAAI,CACF,WAAkF,EAClF,UAAuE;QAEvE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CACH,UAAqE;QAErE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,SAA+B;QACrC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,eAAe,CAAC;IACzB,CAAC;CACF"}
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;AAEhE,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"}
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.