@_linked/core 2.9.0 → 2.10.0-next.20260630061713

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 (153) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +102 -59
  3. package/lib/cjs/expressions/ExpressionNode.d.ts +2 -1
  4. package/lib/cjs/expressions/ExpressionNode.js +4 -0
  5. package/lib/cjs/expressions/ExpressionNode.js.map +1 -1
  6. package/lib/cjs/index.d.ts +12 -1
  7. package/lib/cjs/index.js +26 -1
  8. package/lib/cjs/index.js.map +1 -1
  9. package/lib/cjs/interfaces/IDataset.d.ts +5 -3
  10. package/lib/cjs/package.json +7 -1
  11. package/lib/cjs/queries/ContextRef.d.ts +21 -0
  12. package/lib/cjs/queries/ContextRef.js +58 -0
  13. package/lib/cjs/queries/ContextRef.js.map +1 -0
  14. package/lib/cjs/queries/CreateBuilder.d.ts +20 -4
  15. package/lib/cjs/queries/CreateBuilder.js +43 -11
  16. package/lib/cjs/queries/CreateBuilder.js.map +1 -1
  17. package/lib/cjs/queries/CreateQuery.d.ts +16 -13
  18. package/lib/cjs/queries/CreateQuery.js +0 -17
  19. package/lib/cjs/queries/CreateQuery.js.map +1 -1
  20. package/lib/cjs/queries/DeleteBuilder.d.ts +19 -4
  21. package/lib/cjs/queries/DeleteBuilder.js +82 -29
  22. package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
  23. package/lib/cjs/queries/DeleteQuery.d.ts +16 -13
  24. package/lib/cjs/queries/DeleteQuery.js +0 -17
  25. package/lib/cjs/queries/DeleteQuery.js.map +1 -1
  26. package/lib/cjs/queries/IRLower.js +48 -3
  27. package/lib/cjs/queries/IRLower.js.map +1 -1
  28. package/lib/cjs/queries/IntermediateRepresentation.d.ts +12 -2
  29. package/lib/cjs/queries/MutationQuery.d.ts +9 -0
  30. package/lib/cjs/queries/MutationQuery.js +27 -0
  31. package/lib/cjs/queries/MutationQuery.js.map +1 -1
  32. package/lib/cjs/queries/MutationSerialization.d.ts +103 -0
  33. package/lib/cjs/queries/MutationSerialization.js +161 -0
  34. package/lib/cjs/queries/MutationSerialization.js.map +1 -0
  35. package/lib/cjs/queries/QueryBuilder.d.ts +44 -33
  36. package/lib/cjs/queries/QueryBuilder.js +55 -43
  37. package/lib/cjs/queries/QueryBuilder.js.map +1 -1
  38. package/lib/cjs/queries/QueryBuilderSerialization.js +16 -5
  39. package/lib/cjs/queries/QueryBuilderSerialization.js.map +1 -1
  40. package/lib/cjs/queries/QueryContext.d.ts +36 -0
  41. package/lib/cjs/queries/QueryContext.js +96 -12
  42. package/lib/cjs/queries/QueryContext.js.map +1 -1
  43. package/lib/cjs/queries/SelectQuery.d.ts +16 -7
  44. package/lib/cjs/queries/SelectQuery.js +22 -13
  45. package/lib/cjs/queries/SelectQuery.js.map +1 -1
  46. package/lib/cjs/queries/UpdateBuilder.d.ts +23 -5
  47. package/lib/cjs/queries/UpdateBuilder.js +102 -43
  48. package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
  49. package/lib/cjs/queries/UpdateQuery.d.ts +14 -12
  50. package/lib/cjs/queries/UpdateQuery.js +0 -20
  51. package/lib/cjs/queries/UpdateQuery.js.map +1 -1
  52. package/lib/cjs/queries/fromJSON.d.ts +16 -0
  53. package/lib/cjs/queries/fromJSON.js +41 -0
  54. package/lib/cjs/queries/fromJSON.js.map +1 -0
  55. package/lib/cjs/queries/lower.d.ts +28 -0
  56. package/lib/cjs/queries/lower.js +115 -0
  57. package/lib/cjs/queries/lower.js.map +1 -0
  58. package/lib/cjs/queries/lowerMutationJSON.d.ts +12 -0
  59. package/lib/cjs/queries/lowerMutationJSON.js +135 -0
  60. package/lib/cjs/queries/lowerMutationJSON.js.map +1 -0
  61. package/lib/cjs/queries/mutationLowerSpec.d.ts +32 -0
  62. package/lib/cjs/queries/mutationLowerSpec.js +8 -0
  63. package/lib/cjs/queries/mutationLowerSpec.js.map +1 -0
  64. package/lib/cjs/queries/wireVersion.d.ts +7 -0
  65. package/lib/cjs/queries/wireVersion.js +25 -0
  66. package/lib/cjs/queries/wireVersion.js.map +1 -0
  67. package/lib/cjs/shapes/Shape.d.ts +4 -3
  68. package/lib/cjs/shapes/Shape.js.map +1 -1
  69. package/lib/cjs/sparql/SparqlDataset.js +22 -17
  70. package/lib/cjs/sparql/SparqlDataset.js.map +1 -1
  71. package/lib/cjs/sparql/irToAlgebra.js +20 -5
  72. package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
  73. package/lib/cjs/test-helpers/query-capture-store.js +8 -4
  74. package/lib/cjs/test-helpers/query-capture-store.js.map +1 -1
  75. package/lib/cjs/utils/LinkedStorage.d.ts +1 -1
  76. package/lib/cjs/utils/LinkedStorage.js +20 -7
  77. package/lib/cjs/utils/LinkedStorage.js.map +1 -1
  78. package/lib/esm/expressions/ExpressionNode.d.ts +2 -1
  79. package/lib/esm/expressions/ExpressionNode.js +4 -0
  80. package/lib/esm/expressions/ExpressionNode.js.map +1 -1
  81. package/lib/esm/index.d.ts +12 -1
  82. package/lib/esm/index.js +10 -1
  83. package/lib/esm/index.js.map +1 -1
  84. package/lib/esm/interfaces/IDataset.d.ts +5 -3
  85. package/lib/esm/package.json +7 -1
  86. package/lib/esm/queries/ContextRef.d.ts +21 -0
  87. package/lib/esm/queries/ContextRef.js +52 -0
  88. package/lib/esm/queries/ContextRef.js.map +1 -0
  89. package/lib/esm/queries/CreateBuilder.d.ts +20 -4
  90. package/lib/esm/queries/CreateBuilder.js +43 -11
  91. package/lib/esm/queries/CreateBuilder.js.map +1 -1
  92. package/lib/esm/queries/CreateQuery.d.ts +16 -13
  93. package/lib/esm/queries/CreateQuery.js +1 -15
  94. package/lib/esm/queries/CreateQuery.js.map +1 -1
  95. package/lib/esm/queries/DeleteBuilder.d.ts +19 -4
  96. package/lib/esm/queries/DeleteBuilder.js +82 -29
  97. package/lib/esm/queries/DeleteBuilder.js.map +1 -1
  98. package/lib/esm/queries/DeleteQuery.d.ts +16 -13
  99. package/lib/esm/queries/DeleteQuery.js +1 -15
  100. package/lib/esm/queries/DeleteQuery.js.map +1 -1
  101. package/lib/esm/queries/IRLower.js +48 -3
  102. package/lib/esm/queries/IRLower.js.map +1 -1
  103. package/lib/esm/queries/IntermediateRepresentation.d.ts +12 -2
  104. package/lib/esm/queries/MutationQuery.d.ts +9 -0
  105. package/lib/esm/queries/MutationQuery.js +27 -0
  106. package/lib/esm/queries/MutationQuery.js.map +1 -1
  107. package/lib/esm/queries/MutationSerialization.d.ts +103 -0
  108. package/lib/esm/queries/MutationSerialization.js +155 -0
  109. package/lib/esm/queries/MutationSerialization.js.map +1 -0
  110. package/lib/esm/queries/QueryBuilder.d.ts +44 -33
  111. package/lib/esm/queries/QueryBuilder.js +55 -42
  112. package/lib/esm/queries/QueryBuilder.js.map +1 -1
  113. package/lib/esm/queries/QueryBuilderSerialization.js +16 -5
  114. package/lib/esm/queries/QueryBuilderSerialization.js.map +1 -1
  115. package/lib/esm/queries/QueryContext.d.ts +36 -0
  116. package/lib/esm/queries/QueryContext.js +92 -11
  117. package/lib/esm/queries/QueryContext.js.map +1 -1
  118. package/lib/esm/queries/SelectQuery.d.ts +16 -7
  119. package/lib/esm/queries/SelectQuery.js +22 -13
  120. package/lib/esm/queries/SelectQuery.js.map +1 -1
  121. package/lib/esm/queries/UpdateBuilder.d.ts +23 -5
  122. package/lib/esm/queries/UpdateBuilder.js +102 -43
  123. package/lib/esm/queries/UpdateBuilder.js.map +1 -1
  124. package/lib/esm/queries/UpdateQuery.d.ts +14 -12
  125. package/lib/esm/queries/UpdateQuery.js +1 -18
  126. package/lib/esm/queries/UpdateQuery.js.map +1 -1
  127. package/lib/esm/queries/fromJSON.d.ts +16 -0
  128. package/lib/esm/queries/fromJSON.js +38 -0
  129. package/lib/esm/queries/fromJSON.js.map +1 -0
  130. package/lib/esm/queries/lower.d.ts +28 -0
  131. package/lib/esm/queries/lower.js +112 -0
  132. package/lib/esm/queries/lower.js.map +1 -0
  133. package/lib/esm/queries/lowerMutationJSON.d.ts +12 -0
  134. package/lib/esm/queries/lowerMutationJSON.js +131 -0
  135. package/lib/esm/queries/lowerMutationJSON.js.map +1 -0
  136. package/lib/esm/queries/mutationLowerSpec.d.ts +32 -0
  137. package/lib/esm/queries/mutationLowerSpec.js +7 -0
  138. package/lib/esm/queries/mutationLowerSpec.js.map +1 -0
  139. package/lib/esm/queries/wireVersion.d.ts +7 -0
  140. package/lib/esm/queries/wireVersion.js +21 -0
  141. package/lib/esm/queries/wireVersion.js.map +1 -0
  142. package/lib/esm/shapes/Shape.d.ts +4 -3
  143. package/lib/esm/shapes/Shape.js.map +1 -1
  144. package/lib/esm/sparql/SparqlDataset.js +22 -17
  145. package/lib/esm/sparql/SparqlDataset.js.map +1 -1
  146. package/lib/esm/sparql/irToAlgebra.js +20 -5
  147. package/lib/esm/sparql/irToAlgebra.js.map +1 -1
  148. package/lib/esm/test-helpers/query-capture-store.js +8 -4
  149. package/lib/esm/test-helpers/query-capture-store.js.map +1 -1
  150. package/lib/esm/utils/LinkedStorage.d.ts +1 -1
  151. package/lib/esm/utils/LinkedStorage.js +20 -7
  152. package/lib/esm/utils/LinkedStorage.js.map +1 -1
  153. package/package.json +7 -1
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UpdateBuilder = void 0;
4
4
  const resolveShape_js_1 = require("./resolveShape.js");
5
- const UpdateQuery_js_1 = require("./UpdateQuery.js");
5
+ const MutationQuery_js_1 = require("./MutationQuery.js");
6
6
  const queryDispatch_js_1 = require("./queryDispatch.js");
7
+ const wireVersion_js_1 = require("./wireVersion.js");
8
+ const QueryContext_js_1 = require("./QueryContext.js");
9
+ const ContextRef_js_1 = require("./ContextRef.js");
7
10
  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");
11
+ const MutationSerialization_js_1 = require("./MutationSerialization.js");
12
+ const QueryBuilderSerialization_js_1 = require("./QueryBuilderSerialization.js");
12
13
  /**
13
14
  * An immutable, fluent builder for update mutations.
14
15
  *
@@ -24,14 +25,21 @@ const IRLower_js_1 = require("./IRLower.js");
24
25
  */
25
26
  class UpdateBuilder {
26
27
  constructor(init) {
28
+ // ---------------------------------------------------------------------------
29
+ // Build & execute
30
+ // ---------------------------------------------------------------------------
31
+ /** Discriminator for the free `lower()` function and dataset routing. */
32
+ this.__queryKind = 'update';
27
33
  this._shape = init.shape;
28
34
  this._data = init.data;
29
35
  this._targetId = init.targetId;
30
36
  this._mode = init.mode;
31
37
  this._whereFn = init.whereFn;
38
+ this._where = init.where;
39
+ this._targetContextName = init.targetContextName;
32
40
  }
33
41
  clone(overrides = {}) {
34
- return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn }, overrides));
42
+ return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn, where: this._where, targetContextName: this._targetContextName }, overrides));
35
43
  }
36
44
  // ---------------------------------------------------------------------------
37
45
  // Static constructors
@@ -40,13 +48,33 @@ class UpdateBuilder {
40
48
  const resolved = (0, resolveShape_js_1.resolveShape)(shape);
41
49
  return new UpdateBuilder({ shape: resolved });
42
50
  }
51
+ /** Reconstruct an UpdateBuilder from its DSL-JSON (inverse of `toJSON`). */
52
+ static fromJSON(json) {
53
+ (0, wireVersion_js_1.assertWireVersion)(json.v);
54
+ const resolved = (0, resolveShape_js_1.resolveShape)(json.shape);
55
+ const data = (0, MutationSerialization_js_1.decodeNodeDataToRaw)(json.data);
56
+ if (json.mode === 'for') {
57
+ if ((0, ContextRef_js_1.isContextRefJSON)(json.targetId)) {
58
+ return new UpdateBuilder({ shape: resolved, data, targetContextName: json.targetId.$ctx, mode: 'for' });
59
+ }
60
+ return new UpdateBuilder({ shape: resolved, data, targetId: json.targetId, mode: 'for' });
61
+ }
62
+ if (json.mode === 'forAll') {
63
+ return new UpdateBuilder({ shape: resolved, data, mode: 'forAll' });
64
+ }
65
+ const where = (0, QueryBuilderSerialization_js_1.deserializeWherePath)(resolved.shape, json.where);
66
+ return new UpdateBuilder({ shape: resolved, data, mode: 'where', where });
67
+ }
43
68
  // ---------------------------------------------------------------------------
44
69
  // Fluent API
45
70
  // ---------------------------------------------------------------------------
46
71
  /** Target a specific entity by ID. */
47
72
  for(id) {
73
+ if (id instanceof QueryContext_js_1.PendingQueryContext) {
74
+ return this.clone({ targetContextName: id.contextName, targetId: undefined, mode: 'for' });
75
+ }
48
76
  const resolvedId = typeof id === 'string' ? id : id.id;
49
- return this.clone({ targetId: resolvedId, mode: 'for' });
77
+ return this.clone({ targetId: resolvedId, targetContextName: undefined, mode: 'for' });
50
78
  }
51
79
  /** Update all instances of this shape type. Returns void. */
52
80
  forAll() {
@@ -59,59 +87,90 @@ class UpdateBuilder {
59
87
  set(data) {
60
88
  return this.clone({ data });
61
89
  }
62
- // ---------------------------------------------------------------------------
63
- // Build & execute
64
- // ---------------------------------------------------------------------------
65
- /** Build the IR mutation. */
66
- build() {
90
+ /** The shape this query targets — the routing key datasets/`LinkedStorage` use. */
91
+ get shape() {
92
+ return this._shape.shape;
93
+ }
94
+ /** @internal The IR-free lowering spec consumed by `lower()`. Validates inputs. */
95
+ _lowerSpec() {
96
+ var _a;
67
97
  if (!this._data) {
68
- throw new Error('UpdateBuilder requires .set(data) before .build(). Specify what to update.');
98
+ throw new Error('UpdateBuilder requires .set(data) before it can be lowered. Specify what to update.');
69
99
  }
70
100
  const mode = this._mode || (this._targetId ? 'for' : undefined);
71
101
  if (mode === 'forAll') {
72
- return this.buildUpdateWhere();
102
+ return { shapeClass: this._shape, data: this._data, mode: 'forAll' };
73
103
  }
74
104
  if (mode === 'where') {
75
- if (!this._whereFn) {
105
+ if (!this._whereFn && !this._where) {
76
106
  throw new Error('UpdateBuilder.where() requires a condition callback.');
77
107
  }
78
- return this.buildUpdateWhere();
108
+ const wherePath = (_a = this._where) !== null && _a !== void 0 ? _a : (0, SelectQuery_js_1.processWhereClause)(this._whereFn, this._shape);
109
+ return { shapeClass: this._shape, data: this._data, mode: 'where', wherePath };
79
110
  }
80
- // Default: ID-based update
81
- if (!this._targetId) {
82
- throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .build().');
111
+ // Default: ID-based update (target id may come from a query context)
112
+ const targetId = this._resolveTargetId();
113
+ if (!targetId) {
114
+ if (this._targetContextName) {
115
+ throw new QueryContext_js_1.UnresolvedContextError(this._targetContextName);
116
+ }
117
+ throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before it can be lowered.');
83
118
  }
84
- const factory = new UpdateQuery_js_1.UpdateQueryFactory(this._shape, this._targetId, this._data);
85
- return factory.build();
86
- }
87
- buildUpdateWhere() {
88
- const factory = new UpdateQuery_js_1.UpdateQueryFactory(this._shape, '__placeholder__', // not used for where/forAll
89
- this._data);
90
- const description = factory.fields;
91
- let where;
92
- let wherePatterns;
93
- if (this._whereFn) {
94
- const wherePath = (0, SelectQuery_js_1.processWhereClause)(this._whereFn, this._shape);
95
- const desugared = (0, IRDesugar_js_1.toWhere)(wherePath);
96
- const canonical = (0, IRCanonicalize_js_1.canonicalizeWhere)(desugared);
97
- const lowered = (0, IRLower_js_1.lowerWhereToIR)(canonical);
98
- where = lowered.where;
99
- wherePatterns = lowered.wherePatterns;
119
+ return { shapeClass: this._shape, data: this._data, mode: 'for', targetId };
120
+ }
121
+ /** Resolve the target id from an explicit id or a query-context reference. */
122
+ _resolveTargetId() {
123
+ var _a;
124
+ if (this._targetId)
125
+ return this._targetId;
126
+ if (this._targetContextName)
127
+ return (_a = (0, QueryContext_js_1.getQueryContext)(this._targetContextName)) === null || _a === void 0 ? void 0 : _a.id;
128
+ return undefined;
129
+ }
130
+ /**
131
+ * Serialize this update mutation to lightweight DSL-JSON. Normalizes the update
132
+ * data through the IR-free factory base (handles the expression-callback form
133
+ * of `.set()`), and serializes the where clause for `where`-mode updates.
134
+ */
135
+ toJSON() {
136
+ var _a;
137
+ if (!this._data) {
138
+ throw new Error('UpdateBuilder requires .set(data) before .toJSON().');
139
+ }
140
+ const mode = this._mode || (this._targetId ? 'for' : undefined);
141
+ if (!mode) {
142
+ throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .toJSON().');
143
+ }
144
+ const fields = new MutationQuery_js_1.MutationQueryFactory().describe(this._shape.shape, this._data);
145
+ const json = {
146
+ v: wireVersion_js_1.WIRE_VERSION,
147
+ op: 'update',
148
+ shape: this._shape.shape.id,
149
+ mode,
150
+ data: (0, MutationSerialization_js_1.encodeNodeData)(fields),
151
+ };
152
+ if (mode === 'for') {
153
+ if (this._targetContextName)
154
+ json.targetId = (0, ContextRef_js_1.encodeContextRef)(this._targetContextName);
155
+ else
156
+ json.targetId = this._targetId;
157
+ }
158
+ if (mode === 'where') {
159
+ const wherePath = (_a = this._where) !== null && _a !== void 0 ? _a : (this._whereFn ? (0, SelectQuery_js_1.processWhereClause)(this._whereFn, this._shape) : undefined);
160
+ if (!wherePath) {
161
+ throw new Error('UpdateBuilder.where() requires a condition callback.');
162
+ }
163
+ json.where = (0, QueryBuilderSerialization_js_1.serializeWherePath)(wherePath);
100
164
  }
101
- return (0, IRMutation_js_1.buildCanonicalUpdateWhereMutationIR)({
102
- shape: this._shape.shape,
103
- updates: description,
104
- where,
105
- wherePatterns,
106
- });
165
+ return json;
107
166
  }
108
167
  /** Execute the mutation. */
109
168
  exec() {
110
169
  const mode = this._mode || (this._targetId ? 'for' : undefined);
111
170
  if (mode === 'forAll' || mode === 'where') {
112
- return (0, queryDispatch_js_1.getQueryDispatch)().updateQuery(this.build()).then(() => undefined);
171
+ return (0, queryDispatch_js_1.getQueryDispatch)().updateQuery(this).then(() => undefined);
113
172
  }
114
- return (0, queryDispatch_js_1.getQueryDispatch)().updateQuery(this.build());
173
+ return (0, queryDispatch_js_1.getQueryDispatch)().updateQuery(this);
115
174
  }
116
175
  // ---------------------------------------------------------------------------
117
176
  // Promise interface
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateBuilder.js","sourceRoot":"","sources":["../../../src/queries/UpdateBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UpdateBuilder.js","sourceRoot":"","sources":["../../../src/queries/UpdateBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,18 @@
1
- import { Shape, type ShapeConstructor } from '../shapes/Shape.js';
2
- import { type NodeDescriptionValue, NodeReferenceValue, type UpdatePartial } from './QueryFactory.js';
3
- import { MutationQueryFactory } from './MutationQuery.js';
4
1
  import type { IRUpdateMutation, IRUpdateWhereMutation } from './IntermediateRepresentation.js';
2
+ import type { NodeShape } from '../shapes/SHACL.js';
3
+ import type { UpdateMutationJSON } from './MutationSerialization.js';
4
+ import type { UpdateLowerSpec } from './mutationLowerSpec.js';
5
5
  /**
6
- * The canonical UpdateQuery type an IR AST node representing an update mutation.
7
- * This is the type received by IDataset.updateQuery().
6
+ * The closed, read-only update query a dataset receives (implemented by
7
+ * `UpdateBuilder`). The IR is `IRUpdateQuery`, produced by `lower(query)` — the
8
+ * IR construction lives in the IR tier, not here, so this module stays IR-free.
8
9
  */
9
- export type UpdateQuery = IRUpdateMutation | IRUpdateWhereMutation;
10
- export declare class UpdateQueryFactory<ShapeType extends Shape, U extends UpdatePartial<ShapeType>> extends MutationQueryFactory {
11
- shapeClass: ShapeConstructor<ShapeType>;
12
- readonly id: string;
13
- readonly fields: NodeDescriptionValue;
14
- constructor(shapeClass: ShapeConstructor<ShapeType>, id: string | NodeReferenceValue, updateObjectOrFn: U);
15
- build(): UpdateQuery;
10
+ export interface UpdateQuery {
11
+ readonly __queryKind: 'update';
12
+ readonly shape: NodeShape;
13
+ toJSON(): UpdateMutationJSON;
14
+ /** @internal IR-free lowering spec consumed by `lower()`. */
15
+ _lowerSpec(): UpdateLowerSpec;
16
16
  }
17
+ /** The lowered IR for an update mutation (what `lower()` produces). */
18
+ export type IRUpdateQuery = IRUpdateMutation | IRUpdateWhereMutation;
@@ -1,23 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdateQueryFactory = void 0;
4
- const QueryFactory_js_1 = require("./QueryFactory.js");
5
- const MutationQuery_js_1 = require("./MutationQuery.js");
6
- const IRMutation_js_1 = require("./IRMutation.js");
7
- class UpdateQueryFactory extends MutationQuery_js_1.MutationQueryFactory {
8
- constructor(shapeClass, id, updateObjectOrFn) {
9
- super();
10
- this.shapeClass = shapeClass;
11
- this.id = (0, QueryFactory_js_1.toNodeReference)(id).id;
12
- this.fields = this.convertUpdateObject(updateObjectOrFn, this.shapeClass.shape);
13
- }
14
- build() {
15
- return (0, IRMutation_js_1.buildCanonicalUpdateMutationIR)({
16
- id: this.id,
17
- shape: this.shapeClass.shape,
18
- updates: this.fields,
19
- });
20
- }
21
- }
22
- exports.UpdateQueryFactory = UpdateQueryFactory;
23
3
  //# sourceMappingURL=UpdateQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateQuery.js","sourceRoot":"","sources":["../../../src/queries/UpdateQuery.ts"],"names":[],"mappings":";;;AACA,uDAM2B;AAC3B,yDAAwD;AAExD,mDAA+D;AAQ/D,MAAa,kBAGX,SAAQ,uCAAoB;IAI5B,YACS,UAAuC,EAC9C,EAA+B,EAC/B,gBAAmB;QAEnB,KAAK,EAAE,CAAC;QAJD,eAAU,GAAV,UAAU,CAA6B;QAK9C,IAAI,CAAC,EAAE,GAAG,IAAA,iCAAe,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CACpC,gBAAgB,EAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CACtB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,OAAO,IAAA,8CAA8B,EAAC;YACpC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,OAAO,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF;AA3BD,gDA2BC"}
1
+ {"version":3,"file":"UpdateQuery.js","sourceRoot":"","sources":["../../../src/queries/UpdateQuery.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Kind-detecting `fromJSON` — rehydrate any query DSL-JSON back into its builder.
3
+ *
4
+ * Mutation envelopes carry an `op` discriminator; select envelopes
5
+ * (`QueryBuilderJSON`) do not. This is the inbound boundary helper: a receiving
6
+ * process turns wire JSON into a live query with `fromJSON(json).exec()` (the
7
+ * existing generic dispatch), no per-op routing needed.
8
+ */
9
+ import { SelectBuilder, type QueryBuilderJSON } from './QueryBuilder.js';
10
+ import { CreateBuilder } from './CreateBuilder.js';
11
+ import { UpdateBuilder } from './UpdateBuilder.js';
12
+ import { DeleteBuilder } from './DeleteBuilder.js';
13
+ import type { MutationJSON } from './MutationSerialization.js';
14
+ /** Any query in its wire (DSL-JSON) form. */
15
+ export type QueryJSON = QueryBuilderJSON | MutationJSON;
16
+ export declare function fromJSON(json: QueryJSON): SelectBuilder | CreateBuilder | UpdateBuilder | DeleteBuilder;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /*
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.fromJSON = fromJSON;
9
+ /**
10
+ * Kind-detecting `fromJSON` — rehydrate any query DSL-JSON back into its builder.
11
+ *
12
+ * Mutation envelopes carry an `op` discriminator; select envelopes
13
+ * (`QueryBuilderJSON`) do not. This is the inbound boundary helper: a receiving
14
+ * process turns wire JSON into a live query with `fromJSON(json).exec()` (the
15
+ * existing generic dispatch), no per-op routing needed.
16
+ */
17
+ const QueryBuilder_js_1 = require("./QueryBuilder.js");
18
+ const CreateBuilder_js_1 = require("./CreateBuilder.js");
19
+ const UpdateBuilder_js_1 = require("./UpdateBuilder.js");
20
+ const DeleteBuilder_js_1 = require("./DeleteBuilder.js");
21
+ const wireVersion_js_1 = require("./wireVersion.js");
22
+ function fromJSON(json) {
23
+ (0, wireVersion_js_1.assertWireVersion)(json === null || json === void 0 ? void 0 : json.v);
24
+ if (json && typeof json === 'object' && 'op' in json) {
25
+ switch (json.op) {
26
+ case 'create':
27
+ return CreateBuilder_js_1.CreateBuilder.fromJSON(json);
28
+ case 'update':
29
+ return UpdateBuilder_js_1.UpdateBuilder.fromJSON(json);
30
+ case 'delete':
31
+ return DeleteBuilder_js_1.DeleteBuilder.fromJSON(json);
32
+ default:
33
+ // An `op` is present but not one we know — a malformed/corrupted or
34
+ // future-versioned mutation envelope. Fail loud rather than silently
35
+ // reinterpreting it as a select query.
36
+ throw new Error(`Unknown query op "${String(json.op)}" in DSL-JSON envelope.`);
37
+ }
38
+ }
39
+ return QueryBuilder_js_1.SelectBuilder.fromJSON(json);
40
+ }
41
+ //# sourceMappingURL=fromJSON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromJSON.js","sourceRoot":"","sources":["../../../src/queries/fromJSON.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAoBH,4BAsBC;AAxCD;;;;;;;GAOG;AACH,uDAAuE;AACvE,yDAAiD;AACjD,yDAAiD;AACjD,yDAAiD;AAEjD,qDAAmD;AAKnD,SAAgB,QAAQ,CACtB,IAAe;IAEf,IAAA,kCAAiB,EAAE,IAAsB,aAAtB,IAAI,uBAAJ,IAAI,CAAoB,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACrD,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;YAChB,KAAK,QAAQ;gBACX,OAAO,gCAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,gCAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,gCAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC;gBACE,oEAAoE;gBACpE,qEAAqE;gBACrE,uCAAuC;gBACvC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAE,IAAsB,CAAC,EAAE,CAAC,yBAAyB,CACjF,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,+BAAa,CAAC,QAAQ,CAAC,IAAwB,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IRSelectQuery } from './IntermediateRepresentation.js';
2
+ import type { IRCreateQuery } from './CreateQuery.js';
3
+ import type { IRUpdateQuery } from './UpdateQuery.js';
4
+ import type { IRDeleteQuery } from './DeleteQuery.js';
5
+ import type { CreateLowerSpec, UpdateLowerSpec, DeleteLowerSpec } from './mutationLowerSpec.js';
6
+ /** A select query that can be lowered (the select builder). */
7
+ export type LowerableSelect = {
8
+ readonly __queryKind: 'select';
9
+ toRawInput(): any;
10
+ };
11
+ /** A mutation query that can be lowered (the mutation builders). */
12
+ export type LowerableCreate = {
13
+ readonly __queryKind: 'create';
14
+ _lowerSpec(): CreateLowerSpec;
15
+ };
16
+ export type LowerableUpdate = {
17
+ readonly __queryKind: 'update';
18
+ _lowerSpec(): UpdateLowerSpec;
19
+ };
20
+ export type LowerableDelete = {
21
+ readonly __queryKind: 'delete';
22
+ _lowerSpec(): DeleteLowerSpec;
23
+ };
24
+ export type LowerableQuery = LowerableSelect | LowerableCreate | LowerableUpdate | LowerableDelete;
25
+ export declare function lower(query: LowerableSelect): IRSelectQuery;
26
+ export declare function lower(query: LowerableCreate): IRCreateQuery;
27
+ export declare function lower(query: LowerableUpdate): IRUpdateQuery;
28
+ export declare function lower(query: LowerableDelete): IRDeleteQuery;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ /*
3
+ * This Source Code Form is subject to the terms of the Mozilla Public
4
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.lower = lower;
9
+ /**
10
+ * `lower(query)` — turn a live query (builder) into its canonical IR algebra.
11
+ *
12
+ * This is the single, **free** lowering entry point, and the *only* place the
13
+ * canonical-IR pipeline (`IRPipeline` / `IRMutation` / `IRLower` / …) is reached
14
+ * from. The builders are deliberately IR-free: they hand `lower()` a plain
15
+ * "lowering spec" (`mutationLowerSpec`) or raw select input, and all IR
16
+ * construction happens here. A client that authors/serializes/forwards queries
17
+ * but never calls `lower()` therefore tree-shakes the entire IR pipeline away.
18
+ * The IR is an implementation detail of stores that want it (e.g. SPARQL) — not
19
+ * the contract.
20
+ */
21
+ const IRPipeline_js_1 = require("./IRPipeline.js");
22
+ const MutationQuery_js_1 = require("./MutationQuery.js");
23
+ const QueryFactory_js_1 = require("./QueryFactory.js");
24
+ const QueryContext_js_1 = require("./QueryContext.js");
25
+ const ContextRef_js_1 = require("./ContextRef.js");
26
+ const IRMutation_js_1 = require("./IRMutation.js");
27
+ const IRDesugar_js_1 = require("./IRDesugar.js");
28
+ const IRCanonicalize_js_1 = require("./IRCanonicalize.js");
29
+ const IRLower_js_1 = require("./IRLower.js");
30
+ /** Lower a pre-evaluated where path to its canonical IR fragment. */
31
+ function lowerWherePath(where) {
32
+ return (0, IRLower_js_1.lowerWhereToIR)((0, IRCanonicalize_js_1.canonicalizeWhere)((0, IRDesugar_js_1.toWhere)(where)));
33
+ }
34
+ /**
35
+ * Resolve any query-context reference carried as a mutation field value. The
36
+ * builder preserves a live `PendingQueryContext` through normalization (so it can
37
+ * serialize as `{$ctx}`); at lowering a mutation must hit a concrete node, so the
38
+ * context is resolved here and an unset one throws `UnresolvedContextError`.
39
+ */
40
+ function resolveValueContexts(val) {
41
+ if (val instanceof QueryContext_js_1.PendingQueryContext) {
42
+ return { id: (0, ContextRef_js_1.resolveContextId)(val.contextName, true) };
43
+ }
44
+ if (Array.isArray(val)) {
45
+ return val.map(resolveValueContexts);
46
+ }
47
+ if (val && typeof val === 'object') {
48
+ if ((0, QueryFactory_js_1.isSetModificationValue)(val)) {
49
+ const mod = val;
50
+ const out = {};
51
+ if (mod.$add)
52
+ out.$add = mod.$add.map(resolveValueContexts);
53
+ if (mod.$remove)
54
+ out.$remove = mod.$remove.map(resolveValueContexts);
55
+ return out;
56
+ }
57
+ if ('fields' in val) {
58
+ return resolveDescriptionContexts(val);
59
+ }
60
+ }
61
+ return val;
62
+ }
63
+ /** Deep-resolve context references in a normalized node description (returns a new copy). */
64
+ function resolveDescriptionContexts(desc) {
65
+ return Object.assign(Object.assign({}, desc), { fields: desc.fields.map((f) => (Object.assign(Object.assign({}, f), { val: resolveValueContexts(f.val) }))) });
66
+ }
67
+ function lowerCreate(spec) {
68
+ const description = resolveDescriptionContexts(new MutationQuery_js_1.MutationQueryFactory().describe(spec.shapeClass.shape, spec.data, true));
69
+ return (0, IRMutation_js_1.buildCanonicalCreateMutationIR)({ shape: spec.shapeClass.shape, description });
70
+ }
71
+ function lowerUpdate(spec) {
72
+ const shape = spec.shapeClass.shape;
73
+ const updates = resolveDescriptionContexts(new MutationQuery_js_1.MutationQueryFactory().describe(shape, spec.data));
74
+ if (spec.mode === 'for') {
75
+ return (0, IRMutation_js_1.buildCanonicalUpdateMutationIR)({ id: spec.targetId, shape, updates });
76
+ }
77
+ // forAll / where
78
+ const lowered = spec.wherePath ? lowerWherePath(spec.wherePath) : undefined;
79
+ return (0, IRMutation_js_1.buildCanonicalUpdateWhereMutationIR)({
80
+ shape,
81
+ updates,
82
+ where: lowered === null || lowered === void 0 ? void 0 : lowered.where,
83
+ wherePatterns: lowered === null || lowered === void 0 ? void 0 : lowered.wherePatterns,
84
+ });
85
+ }
86
+ function lowerDelete(spec) {
87
+ const shape = spec.shapeClass.shape;
88
+ if (spec.mode === 'all') {
89
+ return (0, IRMutation_js_1.buildCanonicalDeleteAllMutationIR)({ shape });
90
+ }
91
+ if (spec.mode === 'where') {
92
+ const { where, wherePatterns } = lowerWherePath(spec.wherePath);
93
+ return (0, IRMutation_js_1.buildCanonicalDeleteWhereMutationIR)({ shape, where, wherePatterns });
94
+ }
95
+ // Resolve any context-ref ids ({$ctx}) against the live map — a delete must hit
96
+ // a concrete node, so an unresolved one throws (never a silent `{id: undefined}`).
97
+ const resolvedIds = spec.ids.map((id) => id instanceof QueryContext_js_1.PendingQueryContext
98
+ ? { id: (0, ContextRef_js_1.resolveContextId)(id.contextName, true) }
99
+ : id);
100
+ const ids = new MutationQuery_js_1.MutationQueryFactory().normalizeNodeRefs(resolvedIds);
101
+ return (0, IRMutation_js_1.buildCanonicalDeleteMutationIR)({ shape, ids });
102
+ }
103
+ function lower(query) {
104
+ switch (query.__queryKind) {
105
+ case 'select':
106
+ return (0, IRPipeline_js_1.buildSelectQuery)(query.toRawInput());
107
+ case 'create':
108
+ return lowerCreate(query._lowerSpec());
109
+ case 'update':
110
+ return lowerUpdate(query._lowerSpec());
111
+ case 'delete':
112
+ return lowerDelete(query._lowerSpec());
113
+ }
114
+ }
115
+ //# sourceMappingURL=lower.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.js","sourceRoot":"","sources":["../../../src/queries/lower.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type NodeDescriptionValue } from './QueryFactory.js';
2
+ import type { IRCreateQuery } from './CreateQuery.js';
3
+ import type { IRUpdateQuery } from './UpdateQuery.js';
4
+ import type { IRDeleteQuery } from './DeleteQuery.js';
5
+ import { type MutationJSON, type MutationNodeDataJSON } from './MutationSerialization.js';
6
+ /** Rebuild a normalized node description from JSON, resolving labels via the shape. */
7
+ export declare function decodeNodeData(json: MutationNodeDataJSON): NodeDescriptionValue;
8
+ /**
9
+ * Lower a mutation DSL-JSON envelope to the canonical IR mutation the dataset
10
+ * expects. Mirrors the IR that `lower()` produces from the live builder.
11
+ */
12
+ export declare function lowerMutationJSON(json: MutationJSON): IRCreateQuery | IRUpdateQuery | IRDeleteQuery;