@_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,349 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpressionNode = void 0;
4
+ exports.toIRExpression = toIRExpression;
5
+ exports.tracedPropertyExpression = tracedPropertyExpression;
6
+ exports.resolveExpressionRefs = resolveExpressionRefs;
7
+ exports.isExpressionNode = isExpressionNode;
8
+ const VALID_REGEX_FLAGS = new Set(['i', 'm', 's']);
9
+ function validateRegexFlags(flags) {
10
+ if (!flags)
11
+ return;
12
+ for (const ch of flags) {
13
+ if (!VALID_REGEX_FLAGS.has(ch)) {
14
+ throw new Error(`Unsupported regex flag "${ch}". Only "i", "m", "s" are supported.`);
15
+ }
16
+ }
17
+ }
18
+ function toIRExpression(input) {
19
+ if (input instanceof ExpressionNode)
20
+ return input.ir;
21
+ if (typeof input === 'string')
22
+ return { kind: 'literal_expr', value: input };
23
+ if (typeof input === 'number')
24
+ return { kind: 'literal_expr', value: input };
25
+ if (typeof input === 'boolean')
26
+ return { kind: 'literal_expr', value: input };
27
+ if (input instanceof Date)
28
+ return { kind: 'literal_expr', value: input.toISOString() };
29
+ throw new Error(`Invalid expression input: ${input}`);
30
+ }
31
+ /** Collect property refs from an ExpressionInput (only ExpressionNode has refs). */
32
+ function collectRefs(...inputs) {
33
+ const merged = new Map();
34
+ for (const input of inputs) {
35
+ if (input instanceof ExpressionNode) {
36
+ for (const [k, v] of input._refs)
37
+ merged.set(k, v);
38
+ }
39
+ }
40
+ return merged;
41
+ }
42
+ function binary(op, left, right) {
43
+ return { kind: 'binary_expr', operator: op, left, right: toIRExpression(right) };
44
+ }
45
+ function fnExpr(name, ...args) {
46
+ return { kind: 'function_expr', name, args };
47
+ }
48
+ class ExpressionNode {
49
+ constructor(ir, refs) {
50
+ this.ir = ir;
51
+ this._refs = refs !== null && refs !== void 0 ? refs : new Map();
52
+ }
53
+ /** Create a derived node that merges refs from this and other inputs. */
54
+ _derive(ir, ...others) {
55
+ const merged = new Map(this._refs);
56
+ for (const other of others) {
57
+ if (other instanceof ExpressionNode) {
58
+ for (const [k, v] of other._refs)
59
+ merged.set(k, v);
60
+ }
61
+ }
62
+ return new ExpressionNode(ir, merged);
63
+ }
64
+ /** Create a derived node with no additional inputs. */
65
+ _wrap(ir) {
66
+ return new ExpressionNode(ir, this._refs);
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Arithmetic
70
+ // ---------------------------------------------------------------------------
71
+ plus(n) {
72
+ return this._derive(binary('+', this.ir, n), n);
73
+ }
74
+ minus(n) {
75
+ return this._derive(binary('-', this.ir, n), n);
76
+ }
77
+ times(n) {
78
+ return this._derive(binary('*', this.ir, n), n);
79
+ }
80
+ divide(n) {
81
+ return this._derive(binary('/', this.ir, n), n);
82
+ }
83
+ abs() {
84
+ return this._wrap(fnExpr('ABS', this.ir));
85
+ }
86
+ round() {
87
+ return this._wrap(fnExpr('ROUND', this.ir));
88
+ }
89
+ ceil() {
90
+ return this._wrap(fnExpr('CEIL', this.ir));
91
+ }
92
+ floor() {
93
+ return this._wrap(fnExpr('FLOOR', this.ir));
94
+ }
95
+ power(n) {
96
+ if (!Number.isInteger(n) || n < 1) {
97
+ throw new Error(`power() exponent must be a positive integer, got ${n}`);
98
+ }
99
+ if (n > 20) {
100
+ throw new Error(`power() exponent must be ≤ 20 to avoid query bloat, got ${n}`);
101
+ }
102
+ if (n === 1)
103
+ return new ExpressionNode(this.ir, this._refs);
104
+ let result = this.ir;
105
+ for (let i = 1; i < n; i++) {
106
+ result = { kind: 'binary_expr', operator: '*', left: result, right: this.ir };
107
+ }
108
+ return new ExpressionNode(result, this._refs);
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Comparison (short + long aliases)
112
+ // ---------------------------------------------------------------------------
113
+ eq(v) {
114
+ return this._derive(binary('=', this.ir, v), v);
115
+ }
116
+ equals(v) {
117
+ return this.eq(v);
118
+ }
119
+ neq(v) {
120
+ return this._derive(binary('!=', this.ir, v), v);
121
+ }
122
+ notEquals(v) {
123
+ return this.neq(v);
124
+ }
125
+ gt(v) {
126
+ return this._derive(binary('>', this.ir, v), v);
127
+ }
128
+ greaterThan(v) {
129
+ return this.gt(v);
130
+ }
131
+ gte(v) {
132
+ return this._derive(binary('>=', this.ir, v), v);
133
+ }
134
+ greaterThanOrEqual(v) {
135
+ return this.gte(v);
136
+ }
137
+ lt(v) {
138
+ return this._derive(binary('<', this.ir, v), v);
139
+ }
140
+ lessThan(v) {
141
+ return this.lt(v);
142
+ }
143
+ lte(v) {
144
+ return this._derive(binary('<=', this.ir, v), v);
145
+ }
146
+ lessThanOrEqual(v) {
147
+ return this.lte(v);
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // String
151
+ // ---------------------------------------------------------------------------
152
+ concat(...parts) {
153
+ return this._derive(fnExpr('CONCAT', this.ir, ...parts.map(toIRExpression)), ...parts);
154
+ }
155
+ contains(s) {
156
+ return this._derive(fnExpr('CONTAINS', this.ir, toIRExpression(s)), s);
157
+ }
158
+ startsWith(s) {
159
+ return this._derive(fnExpr('STRSTARTS', this.ir, toIRExpression(s)), s);
160
+ }
161
+ endsWith(s) {
162
+ return this._derive(fnExpr('STRENDS', this.ir, toIRExpression(s)), s);
163
+ }
164
+ substr(start, len) {
165
+ const args = [
166
+ this.ir,
167
+ { kind: 'literal_expr', value: start },
168
+ ];
169
+ if (len !== undefined) {
170
+ args.push({ kind: 'literal_expr', value: len });
171
+ }
172
+ return this._wrap(fnExpr('SUBSTR', ...args));
173
+ }
174
+ before(s) {
175
+ return this._derive(fnExpr('STRBEFORE', this.ir, toIRExpression(s)), s);
176
+ }
177
+ after(s) {
178
+ return this._derive(fnExpr('STRAFTER', this.ir, toIRExpression(s)), s);
179
+ }
180
+ replace(pat, rep, flags) {
181
+ validateRegexFlags(flags);
182
+ const args = [
183
+ this.ir,
184
+ { kind: 'literal_expr', value: pat },
185
+ { kind: 'literal_expr', value: rep },
186
+ ];
187
+ if (flags) {
188
+ args.push({ kind: 'literal_expr', value: flags });
189
+ }
190
+ return this._wrap(fnExpr('REPLACE', ...args));
191
+ }
192
+ ucase() {
193
+ return this._wrap(fnExpr('UCASE', this.ir));
194
+ }
195
+ lcase() {
196
+ return this._wrap(fnExpr('LCASE', this.ir));
197
+ }
198
+ strlen() {
199
+ return this._wrap(fnExpr('STRLEN', this.ir));
200
+ }
201
+ encodeForUri() {
202
+ return this._wrap(fnExpr('ENCODE_FOR_URI', this.ir));
203
+ }
204
+ matches(pat, flags) {
205
+ validateRegexFlags(flags);
206
+ const args = [
207
+ this.ir,
208
+ { kind: 'literal_expr', value: pat },
209
+ ];
210
+ if (flags) {
211
+ args.push({ kind: 'literal_expr', value: flags });
212
+ }
213
+ return this._wrap(fnExpr('REGEX', ...args));
214
+ }
215
+ // ---------------------------------------------------------------------------
216
+ // Date/Time
217
+ // ---------------------------------------------------------------------------
218
+ year() { return this._wrap(fnExpr('YEAR', this.ir)); }
219
+ month() { return this._wrap(fnExpr('MONTH', this.ir)); }
220
+ day() { return this._wrap(fnExpr('DAY', this.ir)); }
221
+ hours() { return this._wrap(fnExpr('HOURS', this.ir)); }
222
+ minutes() { return this._wrap(fnExpr('MINUTES', this.ir)); }
223
+ seconds() { return this._wrap(fnExpr('SECONDS', this.ir)); }
224
+ timezone() { return this._wrap(fnExpr('TIMEZONE', this.ir)); }
225
+ tz() { return this._wrap(fnExpr('TZ', this.ir)); }
226
+ // ---------------------------------------------------------------------------
227
+ // Logical
228
+ // ---------------------------------------------------------------------------
229
+ and(expr) {
230
+ return this._derive({
231
+ kind: 'logical_expr',
232
+ operator: 'and',
233
+ expressions: [this.ir, toIRExpression(expr)],
234
+ }, expr);
235
+ }
236
+ or(expr) {
237
+ return this._derive({
238
+ kind: 'logical_expr',
239
+ operator: 'or',
240
+ expressions: [this.ir, toIRExpression(expr)],
241
+ }, expr);
242
+ }
243
+ not() {
244
+ return this._wrap({ kind: 'not_expr', expression: this.ir });
245
+ }
246
+ // ---------------------------------------------------------------------------
247
+ // Null-handling
248
+ // ---------------------------------------------------------------------------
249
+ isDefined() {
250
+ return this._wrap(fnExpr('BOUND', this.ir));
251
+ }
252
+ isNotDefined() {
253
+ return this._wrap({
254
+ kind: 'not_expr',
255
+ expression: fnExpr('BOUND', this.ir),
256
+ });
257
+ }
258
+ defaultTo(fallback) {
259
+ return this._derive(fnExpr('COALESCE', this.ir, toIRExpression(fallback)), fallback);
260
+ }
261
+ // ---------------------------------------------------------------------------
262
+ // RDF introspection
263
+ // ---------------------------------------------------------------------------
264
+ lang() { return this._wrap(fnExpr('LANG', this.ir)); }
265
+ datatype() { return this._wrap(fnExpr('DATATYPE', this.ir)); }
266
+ // ---------------------------------------------------------------------------
267
+ // Type casting / checking
268
+ // ---------------------------------------------------------------------------
269
+ str() { return this._wrap(fnExpr('STR', this.ir)); }
270
+ iri() { return this._wrap(fnExpr('IRI', this.ir)); }
271
+ isIri() { return this._wrap(fnExpr('isIRI', this.ir)); }
272
+ isLiteral() { return this._wrap(fnExpr('isLiteral', this.ir)); }
273
+ isBlank() { return this._wrap(fnExpr('isBlank', this.ir)); }
274
+ isNumeric() { return this._wrap(fnExpr('isNumeric', this.ir)); }
275
+ // ---------------------------------------------------------------------------
276
+ // Hash
277
+ // ---------------------------------------------------------------------------
278
+ md5() { return this._wrap(fnExpr('MD5', this.ir)); }
279
+ sha256() { return this._wrap(fnExpr('SHA256', this.ir)); }
280
+ sha512() { return this._wrap(fnExpr('SHA512', this.ir)); }
281
+ }
282
+ exports.ExpressionNode = ExpressionNode;
283
+ // ---------------------------------------------------------------------------
284
+ // Proxy tracing helpers
285
+ // ---------------------------------------------------------------------------
286
+ let _refCounter = 0;
287
+ /**
288
+ * Create an ExpressionNode from a proxy-traced property access.
289
+ * Uses a placeholder sourceAlias that gets resolved during IR lowering.
290
+ *
291
+ * The segments array maps to a property path (e.g. ['bestFriend', 'name']).
292
+ * Only the last segment becomes the property_expr's .property; earlier segments
293
+ * are stored in the refs map and resolved as traversals during lowering.
294
+ */
295
+ function tracedPropertyExpression(segmentIds) {
296
+ const placeholder = `__ref_${_refCounter++}__`;
297
+ const lastSegment = segmentIds[segmentIds.length - 1];
298
+ const ir = {
299
+ kind: 'property_expr',
300
+ sourceAlias: placeholder,
301
+ property: lastSegment,
302
+ };
303
+ const refs = new Map([[placeholder, segmentIds]]);
304
+ return new ExpressionNode(ir, refs);
305
+ }
306
+ /**
307
+ * Resolve unresolved property references in an IRExpression tree.
308
+ * Walks the tree and replaces placeholder sourceAlias values with
309
+ * real aliases resolved via pathOptions.
310
+ */
311
+ function resolveExpressionRefs(expr, refs, rootAlias, resolveTraversal) {
312
+ if (refs.size === 0)
313
+ return expr;
314
+ const resolve = (e) => {
315
+ switch (e.kind) {
316
+ case 'property_expr': {
317
+ const segments = refs.get(e.sourceAlias);
318
+ if (!segments)
319
+ return e;
320
+ // Resolve: first N-1 segments are traversals, last is property
321
+ let currentAlias = rootAlias;
322
+ for (let i = 0; i < segments.length - 1; i++) {
323
+ currentAlias = resolveTraversal(currentAlias, segments[i]);
324
+ }
325
+ return {
326
+ kind: 'property_expr',
327
+ sourceAlias: currentAlias,
328
+ property: segments[segments.length - 1],
329
+ };
330
+ }
331
+ case 'binary_expr':
332
+ return Object.assign(Object.assign({}, e), { left: resolve(e.left), right: resolve(e.right) });
333
+ case 'function_expr':
334
+ return Object.assign(Object.assign({}, e), { args: e.args.map(resolve) });
335
+ case 'logical_expr':
336
+ return Object.assign(Object.assign({}, e), { expressions: e.expressions.map(resolve) });
337
+ case 'not_expr':
338
+ return Object.assign(Object.assign({}, e), { expression: resolve(e.expression) });
339
+ default:
340
+ return e;
341
+ }
342
+ };
343
+ return resolve(expr);
344
+ }
345
+ /** Check if a value is an ExpressionNode. */
346
+ function isExpressionNode(value) {
347
+ return value instanceof ExpressionNode;
348
+ }
349
+ //# 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/cjs/index.js CHANGED
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.DeleteBuilder = exports.UpdateBuilder = exports.CreateBuilder = exports.FieldSet = exports.walkPropertyPath = exports.PropertyPath = exports.QueryBuilder = void 0;
36
+ exports.Expr = exports.ExpressionNode = exports.DeleteBuilder = exports.UpdateBuilder = exports.CreateBuilder = exports.FieldSet = exports.walkPropertyPath = exports.PropertyPath = exports.QueryBuilder = void 0;
37
37
  exports.initModularApp = initModularApp;
38
38
  /*
39
39
  * This Source Code Form is subject to the terms of the Mozilla Public
@@ -97,6 +97,11 @@ var UpdateBuilder_js_1 = require("./queries/UpdateBuilder.js");
97
97
  Object.defineProperty(exports, "UpdateBuilder", { enumerable: true, get: function () { return UpdateBuilder_js_1.UpdateBuilder; } });
98
98
  var DeleteBuilder_js_1 = require("./queries/DeleteBuilder.js");
99
99
  Object.defineProperty(exports, "DeleteBuilder", { enumerable: true, get: function () { return DeleteBuilder_js_1.DeleteBuilder; } });
100
+ // Expressions — computed fields and functions
101
+ var ExpressionNode_js_1 = require("./expressions/ExpressionNode.js");
102
+ Object.defineProperty(exports, "ExpressionNode", { enumerable: true, get: function () { return ExpressionNode_js_1.ExpressionNode; } });
103
+ var Expr_js_1 = require("./expressions/Expr.js");
104
+ Object.defineProperty(exports, "Expr", { enumerable: true, get: function () { return Expr_js_1.Expr; } });
100
105
  function initModularApp() {
101
106
  let publicFiles = {
102
107
  Package,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,wCAwDC;AA1HD;;;;GAIG;AACH,4DAA8C;AAC9C,kFAAoE;AACpE,gFAAkE;AAClE,wEAA0D;AAC1D,kEAAoD;AACpD,kEAAoD;AACpD,yDAA2C;AAC3C,+DAAiD;AACjD,oEAAsD;AACtD,0DAA4C;AAC5C,oDAAsC;AACtC,sEAAwD;AACxD,sEAAwD;AACxD,0EAA4D;AAC5D,sEAAwD;AACxD,sEAAwD;AACxD,0EAA4D;AAC5D,wEAA0D;AAC1D,oGAAsF;AACtF,gEAAkD;AAClD,kEAAoD;AACpD,0DAA4C;AAC5C,uDAAyC;AACzC,6EAA+D;AAC/D,uEAAyD;AACzD,uEAAyD;AACzD,yDAA2C;AAC3C,2DAA6C;AAC7C,yDAA2C;AAC3C,6DAA+C;AAC/C,6DAA+C;AAC/C,yDAA2C;AAC3C,yDAA2C;AAC3C,0DAA4C;AAC5C,8EAAgE;AAChE,8EAAgE;AAChE,kFAAoE;AACpE,sEAAwD;AACxD,gFAAkE;AAClE,gFAAkE;AAClE,gFAAkE;AAClE,2CAA2C;AAC3C,6DAAuD;AAA/C,+GAAA,YAAY,OAAA;AACpB,6DAAyE;AAAjE,+GAAA,YAAY,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAGtC,sBAAsB;AACtB,qDAA+C;AAAvC,uGAAA,QAAQ,OAAA;AAMhB,+BAA+B;AAC/B,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AACrB,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AACrB,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AAKrB,SAAgB,cAAc;IAC5B,IAAI,WAAW,GAAG;QAChB,OAAO;QACP,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,OAAO;QACP,OAAO;QACP,KAAK;QACL,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,GAAG;QACH,UAAU;QACV,IAAI;QACJ,aAAa;QACb,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;QACX,aAAa;QACb,WAAW;QACX,WAAW;QACX,aAAa;QACb,YAAY;QACZ,0BAA0B;QAC1B,WAAW;QACX,GAAG;QACH,IAAI;QACJ,GAAG;QACH,KAAK;QACL,KAAK;QACL,GAAG;QACH,GAAG;QACH,MAAM;QACN,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,cAAc;QACd,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IACF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC;YACtC,WAAW,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA,wCAwDC;AAxID;;;;GAIG;AACH,4DAA8C;AAC9C,kFAAoE;AACpE,gFAAkE;AAClE,wEAA0D;AAC1D,kEAAoD;AACpD,kEAAoD;AACpD,yDAA2C;AAC3C,+DAAiD;AACjD,oEAAsD;AACtD,0DAA4C;AAC5C,oDAAsC;AACtC,sEAAwD;AACxD,sEAAwD;AACxD,0EAA4D;AAC5D,sEAAwD;AACxD,sEAAwD;AACxD,0EAA4D;AAC5D,wEAA0D;AAC1D,oGAAsF;AACtF,gEAAkD;AAClD,kEAAoD;AACpD,0DAA4C;AAC5C,uDAAyC;AACzC,6EAA+D;AAC/D,uEAAyD;AACzD,uEAAyD;AACzD,yDAA2C;AAC3C,2DAA6C;AAC7C,yDAA2C;AAC3C,6DAA+C;AAC/C,6DAA+C;AAC/C,yDAA2C;AAC3C,yDAA2C;AAC3C,0DAA4C;AAC5C,8EAAgE;AAChE,8EAAgE;AAChE,kFAAoE;AACpE,sEAAwD;AACxD,gFAAkE;AAClE,gFAAkE;AAClE,gFAAkE;AAClE,2CAA2C;AAC3C,6DAAuD;AAA/C,+GAAA,YAAY,OAAA;AACpB,6DAAyE;AAAjE,+GAAA,YAAY,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAGtC,sBAAsB;AACtB,qDAA+C;AAAvC,uGAAA,QAAQ,OAAA;AAMhB,+BAA+B;AAC/B,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AACrB,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AACrB,+DAAyD;AAAjD,iHAAA,aAAa,OAAA;AAErB,8CAA8C;AAC9C,qEAA+D;AAAvD,mHAAA,cAAc,OAAA;AAEtB,iDAA2C;AAAnC,+FAAA,IAAI,OAAA;AAcZ,SAAgB,cAAc;IAC5B,IAAI,WAAW,GAAG;QAChB,OAAO;QACP,kBAAkB;QAClB,iBAAiB;QACjB,aAAa;QACb,OAAO;QACP,OAAO;QACP,KAAK;QACL,QAAQ;QACR,MAAM;QACN,SAAS;QACT,MAAM;QACN,GAAG;QACH,UAAU;QACV,IAAI;QACJ,aAAa;QACb,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;QACX,aAAa;QACb,WAAW;QACX,WAAW;QACX,aAAa;QACb,YAAY;QACZ,0BAA0B;QAC1B,WAAW;QACX,GAAG;QACH,IAAI;QACJ,GAAG;QACH,KAAK;QACL,KAAK;QACL,GAAG;QACH,GAAG;QACH,MAAM;QACN,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,cAAc;QACd,mBAAmB;QACnB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;IACF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,KAAK,IAAI,SAAS,IAAI,eAAe,EAAE,CAAC;YACtC,WAAW,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -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
  }
@@ -4,65 +4,92 @@ exports.DeleteBuilder = void 0;
4
4
  const resolveShape_js_1 = require("./resolveShape.js");
5
5
  const DeleteQuery_js_1 = require("./DeleteQuery.js");
6
6
  const queryDispatch_js_1 = require("./queryDispatch.js");
7
+ const SelectQuery_js_1 = require("./SelectQuery.js");
8
+ const IRMutation_js_1 = require("./IRMutation.js");
9
+ const IRDesugar_js_1 = require("./IRDesugar.js");
10
+ const IRCanonicalize_js_1 = require("./IRCanonicalize.js");
11
+ const IRLower_js_1 = require("./IRLower.js");
7
12
  /**
8
13
  * An immutable, fluent builder for delete mutations.
9
14
  *
10
15
  * Implements PromiseLike so mutations execute on `await`:
11
16
  * ```ts
12
- * const result = await DeleteBuilder.from(Person).for({id: '...'});
17
+ * const result = await DeleteBuilder.from(Person, {id: '...'});
18
+ * await DeleteBuilder.from(Person).all(); // returns void
13
19
  * ```
14
20
  *
15
- * Internally delegates to DeleteQueryFactory for IR generation.
21
+ * R is the resolved type: DeleteResponse for ID-based, void for bulk operations.
16
22
  */
17
23
  class DeleteBuilder {
18
24
  constructor(init) {
19
25
  this._shape = init.shape;
20
26
  this._ids = init.ids;
27
+ this._mode = init.mode;
28
+ this._whereFn = init.whereFn;
21
29
  }
22
30
  clone(overrides = {}) {
23
- return new DeleteBuilder(Object.assign({ shape: this._shape, ids: this._ids }, overrides));
31
+ return new DeleteBuilder(Object.assign({ shape: this._shape, ids: this._ids, mode: this._mode, whereFn: this._whereFn }, overrides));
24
32
  }
25
33
  // ---------------------------------------------------------------------------
26
34
  // Static constructors
27
35
  // ---------------------------------------------------------------------------
28
- /**
29
- * Create a DeleteBuilder for the given shape.
30
- *
31
- * Optionally accepts IDs inline for backwards compatibility:
32
- * ```ts
33
- * DeleteBuilder.from(Person).for({id: '...'}) // preferred
34
- * DeleteBuilder.from(Person, {id: '...'}) // also supported
35
- * ```
36
- */
37
36
  static from(shape, ids) {
38
37
  const resolved = (0, resolveShape_js_1.resolveShape)(shape);
39
38
  if (ids !== undefined) {
40
39
  const idsArray = Array.isArray(ids) ? ids : [ids];
41
- return new DeleteBuilder({ shape: resolved, ids: idsArray });
40
+ return new DeleteBuilder({ shape: resolved, ids: idsArray, mode: 'ids' });
42
41
  }
43
42
  return new DeleteBuilder({ shape: resolved });
44
43
  }
45
44
  // ---------------------------------------------------------------------------
46
45
  // Fluent API
47
46
  // ---------------------------------------------------------------------------
48
- /** Specify the target IDs to delete. */
49
- for(ids) {
50
- const idsArray = Array.isArray(ids) ? ids : [ids];
51
- return this.clone({ ids: idsArray });
47
+ /** Delete all instances of this shape type. Returns void. */
48
+ all() {
49
+ return this.clone({ mode: 'all', ids: undefined, whereFn: undefined });
50
+ }
51
+ /** Delete instances matching a condition. Returns void. */
52
+ where(fn) {
53
+ return this.clone({ mode: 'where', whereFn: fn, ids: undefined });
52
54
  }
53
55
  // ---------------------------------------------------------------------------
54
56
  // Build & execute
55
57
  // ---------------------------------------------------------------------------
56
- /** Build the IR mutation. Throws if no IDs were specified via .for(). */
58
+ /** Build the IR mutation. */
57
59
  build() {
60
+ const mode = this._mode || (this._ids ? 'ids' : undefined);
61
+ if (mode === 'all') {
62
+ return (0, IRMutation_js_1.buildCanonicalDeleteAllMutationIR)({
63
+ shape: this._shape.shape,
64
+ });
65
+ }
66
+ if (mode === 'where') {
67
+ if (!this._whereFn) {
68
+ throw new Error('DeleteBuilder.where() requires a condition callback.');
69
+ }
70
+ const wherePath = (0, SelectQuery_js_1.processWhereClause)(this._whereFn, this._shape);
71
+ const desugared = (0, IRDesugar_js_1.toWhere)(wherePath);
72
+ const canonical = (0, IRCanonicalize_js_1.canonicalizeWhere)(desugared);
73
+ const { where, wherePatterns } = (0, IRLower_js_1.lowerWhereToIR)(canonical);
74
+ return (0, IRMutation_js_1.buildCanonicalDeleteWhereMutationIR)({
75
+ shape: this._shape.shape,
76
+ where,
77
+ wherePatterns,
78
+ });
79
+ }
80
+ // Default: ID-based delete
58
81
  if (!this._ids || this._ids.length === 0) {
59
- throw new Error('DeleteBuilder requires at least one ID to delete. Specify targets with .for(ids).');
82
+ throw new Error('DeleteBuilder requires at least one ID to delete. Use DeleteBuilder.from(shape, ids), .all(), or .where().');
60
83
  }
61
84
  const factory = new DeleteQuery_js_1.DeleteQueryFactory(this._shape, this._ids);
62
85
  return factory.build();
63
86
  }
64
87
  /** Execute the mutation. */
65
88
  exec() {
89
+ const mode = this._mode || (this._ids ? 'ids' : undefined);
90
+ if (mode === 'all' || mode === 'where') {
91
+ return (0, queryDispatch_js_1.getQueryDispatch)().deleteQuery(this.build()).then(() => undefined);
92
+ }
66
93
  return (0, queryDispatch_js_1.getQueryDispatch)().deleteQuery(this.build());
67
94
  }
68
95
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteBuilder.js","sourceRoot":"","sources":["../../../src/queries/DeleteBuilder.ts"],"names":[],"mappings":";;;AACA,uDAA+C;AAC/C,qDAAiF;AAEjF,yDAAoD;AAUpD;;;;;;;;;GASG;AACH,MAAa,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,IAAA,8BAAY,EAAI,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,mCAAkB,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,IAAA,mCAAgB,GAAE,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;AArGD,sCAqGC"}
1
+ {"version":3,"file":"DeleteBuilder.js","sourceRoot":"","sources":["../../../src/queries/DeleteBuilder.ts"],"names":[],"mappings":";;;AACA,uDAA+C;AAC/C,qDAAiF;AAEjF,yDAAoD;AACpD,qDAAiE;AACjE,mDAGyB;AACzB,iDAAuC;AACvC,2DAAsD;AACtD,6CAA4C;AAc5C;;;;;;;;;;GAUG;AACH,MAAa,aAAa;IAQxB,YAAoB,IAA0B;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,YAA2C,EAAE;QACzD,OAAO,IAAI,aAAa,iBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,EAClB,GAAG,EAAE,IAAI,CAAC,IAAI,EACd,IAAI,EAAE,IAAI,CAAC,KAAK,EAChB,OAAO,EAAE,IAAI,CAAC,QAAQ,IACnB,SAAS,EACZ,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E,MAAM,CAAC,IAAI,CACT,KAAmC,EACnC,GAAuB;QAEvB,MAAM,QAAQ,GAAG,IAAA,8BAAY,EAAI,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,EAAE,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,aAAa,CAAI,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC;IACjD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,6DAA6D;IAC7D,GAAG;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAC,CAA2B,CAAC;IACjG,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,EAAkB;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAC,CAA2B,CAAC;IAC5F,CAAC;IAED,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E,6BAA6B;IAC7B,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE3D,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO,IAAA,iDAAiC,EAAC;gBACvC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;aACzB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,sDAAsD,CACvD,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,IAAA,mCAAkB,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,IAAA,sBAAO,EAAC,SAAS,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAA,qCAAiB,EAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,EAAC,KAAK,EAAE,aAAa,EAAC,GAAG,IAAA,2BAAc,EAAC,SAAS,CAAC,CAAC;YACzD,OAAO,IAAA,mDAAmC,EAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,KAAK;gBACL,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,mCAAkB,CACpC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,CACV,CAAC;QACF,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,4BAA4B;IAC5B,IAAI;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACvC,OAAO,IAAA,mCAAgB,GAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAe,CAAC;QAC1F,CAAC;QACD,OAAO,IAAA,mCAAgB,GAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAe,CAAC;IACpE,CAAC;IAED,8EAA8E;IAC9E,oBAAoB;IACpB,8EAA8E;IAE9E,IAAI,CACF,WAAqE,EACrE,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;AApID,sCAoIC"}
@@ -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,yDAAgE;AAEhE,mDAA+D;AA2B/D,MAAa,kBAGX,SAAQ,uCAAoB;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,IAAA,8CAA8B,EAAC;YACpC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;CACF;AArBD,gDAqBC"}
1
+ {"version":3,"file":"DeleteQuery.js","sourceRoot":"","sources":["../../../src/queries/DeleteQuery.ts"],"names":[],"mappings":";;;AAEA,yDAAgE;AAMhE,mDAA+D;AA2B/D,MAAa,kBAGX,SAAQ,uCAAoB;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,IAAA,8CAA8B,EAAC;YACpC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;CACF;AArBD,gDAqBC"}
@@ -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.