@_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
@@ -1,11 +1,12 @@
1
1
  import { resolveShape } from './resolveShape.js';
2
- import { UpdateQueryFactory } from './UpdateQuery.js';
2
+ import { MutationQueryFactory } from './MutationQuery.js';
3
3
  import { getQueryDispatch } from './queryDispatch.js';
4
+ import { WIRE_VERSION, assertWireVersion } from './wireVersion.js';
5
+ import { PendingQueryContext, getQueryContext, UnresolvedContextError } from './QueryContext.js';
6
+ import { encodeContextRef, isContextRefJSON } from './ContextRef.js';
4
7
  import { processWhereClause } from './SelectQuery.js';
5
- import { buildCanonicalUpdateWhereMutationIR } from './IRMutation.js';
6
- import { toWhere } from './IRDesugar.js';
7
- import { canonicalizeWhere } from './IRCanonicalize.js';
8
- import { lowerWhereToIR } from './IRLower.js';
8
+ import { encodeNodeData, decodeNodeDataToRaw } from './MutationSerialization.js';
9
+ import { serializeWherePath, deserializeWherePath } from './QueryBuilderSerialization.js';
9
10
  /**
10
11
  * An immutable, fluent builder for update mutations.
11
12
  *
@@ -21,14 +22,21 @@ import { lowerWhereToIR } from './IRLower.js';
21
22
  */
22
23
  export class UpdateBuilder {
23
24
  constructor(init) {
25
+ // ---------------------------------------------------------------------------
26
+ // Build & execute
27
+ // ---------------------------------------------------------------------------
28
+ /** Discriminator for the free `lower()` function and dataset routing. */
29
+ this.__queryKind = 'update';
24
30
  this._shape = init.shape;
25
31
  this._data = init.data;
26
32
  this._targetId = init.targetId;
27
33
  this._mode = init.mode;
28
34
  this._whereFn = init.whereFn;
35
+ this._where = init.where;
36
+ this._targetContextName = init.targetContextName;
29
37
  }
30
38
  clone(overrides = {}) {
31
- return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn }, overrides));
39
+ 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));
32
40
  }
33
41
  // ---------------------------------------------------------------------------
34
42
  // Static constructors
@@ -37,13 +45,33 @@ export class UpdateBuilder {
37
45
  const resolved = resolveShape(shape);
38
46
  return new UpdateBuilder({ shape: resolved });
39
47
  }
48
+ /** Reconstruct an UpdateBuilder from its DSL-JSON (inverse of `toJSON`). */
49
+ static fromJSON(json) {
50
+ assertWireVersion(json.v);
51
+ const resolved = resolveShape(json.shape);
52
+ const data = decodeNodeDataToRaw(json.data);
53
+ if (json.mode === 'for') {
54
+ if (isContextRefJSON(json.targetId)) {
55
+ return new UpdateBuilder({ shape: resolved, data, targetContextName: json.targetId.$ctx, mode: 'for' });
56
+ }
57
+ return new UpdateBuilder({ shape: resolved, data, targetId: json.targetId, mode: 'for' });
58
+ }
59
+ if (json.mode === 'forAll') {
60
+ return new UpdateBuilder({ shape: resolved, data, mode: 'forAll' });
61
+ }
62
+ const where = deserializeWherePath(resolved.shape, json.where);
63
+ return new UpdateBuilder({ shape: resolved, data, mode: 'where', where });
64
+ }
40
65
  // ---------------------------------------------------------------------------
41
66
  // Fluent API
42
67
  // ---------------------------------------------------------------------------
43
68
  /** Target a specific entity by ID. */
44
69
  for(id) {
70
+ if (id instanceof PendingQueryContext) {
71
+ return this.clone({ targetContextName: id.contextName, targetId: undefined, mode: 'for' });
72
+ }
45
73
  const resolvedId = typeof id === 'string' ? id : id.id;
46
- return this.clone({ targetId: resolvedId, mode: 'for' });
74
+ return this.clone({ targetId: resolvedId, targetContextName: undefined, mode: 'for' });
47
75
  }
48
76
  /** Update all instances of this shape type. Returns void. */
49
77
  forAll() {
@@ -56,59 +84,90 @@ export class UpdateBuilder {
56
84
  set(data) {
57
85
  return this.clone({ data });
58
86
  }
59
- // ---------------------------------------------------------------------------
60
- // Build & execute
61
- // ---------------------------------------------------------------------------
62
- /** Build the IR mutation. */
63
- build() {
87
+ /** The shape this query targets — the routing key datasets/`LinkedStorage` use. */
88
+ get shape() {
89
+ return this._shape.shape;
90
+ }
91
+ /** @internal The IR-free lowering spec consumed by `lower()`. Validates inputs. */
92
+ _lowerSpec() {
93
+ var _a;
64
94
  if (!this._data) {
65
- throw new Error('UpdateBuilder requires .set(data) before .build(). Specify what to update.');
95
+ throw new Error('UpdateBuilder requires .set(data) before it can be lowered. Specify what to update.');
66
96
  }
67
97
  const mode = this._mode || (this._targetId ? 'for' : undefined);
68
98
  if (mode === 'forAll') {
69
- return this.buildUpdateWhere();
99
+ return { shapeClass: this._shape, data: this._data, mode: 'forAll' };
70
100
  }
71
101
  if (mode === 'where') {
72
- if (!this._whereFn) {
102
+ if (!this._whereFn && !this._where) {
73
103
  throw new Error('UpdateBuilder.where() requires a condition callback.');
74
104
  }
75
- return this.buildUpdateWhere();
105
+ const wherePath = (_a = this._where) !== null && _a !== void 0 ? _a : processWhereClause(this._whereFn, this._shape);
106
+ return { shapeClass: this._shape, data: this._data, mode: 'where', wherePath };
76
107
  }
77
- // Default: ID-based update
78
- if (!this._targetId) {
79
- throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .build().');
108
+ // Default: ID-based update (target id may come from a query context)
109
+ const targetId = this._resolveTargetId();
110
+ if (!targetId) {
111
+ if (this._targetContextName) {
112
+ throw new UnresolvedContextError(this._targetContextName);
113
+ }
114
+ throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before it can be lowered.');
80
115
  }
81
- const factory = new UpdateQueryFactory(this._shape, this._targetId, this._data);
82
- return factory.build();
83
- }
84
- buildUpdateWhere() {
85
- const factory = new UpdateQueryFactory(this._shape, '__placeholder__', // not used for where/forAll
86
- this._data);
87
- const description = factory.fields;
88
- let where;
89
- let wherePatterns;
90
- if (this._whereFn) {
91
- const wherePath = processWhereClause(this._whereFn, this._shape);
92
- const desugared = toWhere(wherePath);
93
- const canonical = canonicalizeWhere(desugared);
94
- const lowered = lowerWhereToIR(canonical);
95
- where = lowered.where;
96
- wherePatterns = lowered.wherePatterns;
116
+ return { shapeClass: this._shape, data: this._data, mode: 'for', targetId };
117
+ }
118
+ /** Resolve the target id from an explicit id or a query-context reference. */
119
+ _resolveTargetId() {
120
+ var _a;
121
+ if (this._targetId)
122
+ return this._targetId;
123
+ if (this._targetContextName)
124
+ return (_a = getQueryContext(this._targetContextName)) === null || _a === void 0 ? void 0 : _a.id;
125
+ return undefined;
126
+ }
127
+ /**
128
+ * Serialize this update mutation to lightweight DSL-JSON. Normalizes the update
129
+ * data through the IR-free factory base (handles the expression-callback form
130
+ * of `.set()`), and serializes the where clause for `where`-mode updates.
131
+ */
132
+ toJSON() {
133
+ var _a;
134
+ if (!this._data) {
135
+ throw new Error('UpdateBuilder requires .set(data) before .toJSON().');
136
+ }
137
+ const mode = this._mode || (this._targetId ? 'for' : undefined);
138
+ if (!mode) {
139
+ throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .toJSON().');
140
+ }
141
+ const fields = new MutationQueryFactory().describe(this._shape.shape, this._data);
142
+ const json = {
143
+ v: WIRE_VERSION,
144
+ op: 'update',
145
+ shape: this._shape.shape.id,
146
+ mode,
147
+ data: encodeNodeData(fields),
148
+ };
149
+ if (mode === 'for') {
150
+ if (this._targetContextName)
151
+ json.targetId = encodeContextRef(this._targetContextName);
152
+ else
153
+ json.targetId = this._targetId;
154
+ }
155
+ if (mode === 'where') {
156
+ const wherePath = (_a = this._where) !== null && _a !== void 0 ? _a : (this._whereFn ? processWhereClause(this._whereFn, this._shape) : undefined);
157
+ if (!wherePath) {
158
+ throw new Error('UpdateBuilder.where() requires a condition callback.');
159
+ }
160
+ json.where = serializeWherePath(wherePath);
97
161
  }
98
- return buildCanonicalUpdateWhereMutationIR({
99
- shape: this._shape.shape,
100
- updates: description,
101
- where,
102
- wherePatterns,
103
- });
162
+ return json;
104
163
  }
105
164
  /** Execute the mutation. */
106
165
  exec() {
107
166
  const mode = this._mode || (this._targetId ? 'for' : undefined);
108
167
  if (mode === 'forAll' || mode === 'where') {
109
- return getQueryDispatch().updateQuery(this.build()).then(() => undefined);
168
+ return getQueryDispatch().updateQuery(this).then(() => undefined);
110
169
  }
111
- return getQueryDispatch().updateQuery(this.build());
170
+ return getQueryDispatch().updateQuery(this);
112
171
  }
113
172
  // ---------------------------------------------------------------------------
114
173
  // 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,19 +1,2 @@
1
- import { toNodeReference, } from './QueryFactory.js';
2
- import { MutationQueryFactory } from './MutationQuery.js';
3
- import { buildCanonicalUpdateMutationIR } from './IRMutation.js';
4
- export class UpdateQueryFactory extends MutationQueryFactory {
5
- constructor(shapeClass, id, updateObjectOrFn) {
6
- super();
7
- this.shapeClass = shapeClass;
8
- this.id = toNodeReference(id).id;
9
- this.fields = this.convertUpdateObject(updateObjectOrFn, this.shapeClass.shape);
10
- }
11
- build() {
12
- return buildCanonicalUpdateMutationIR({
13
- id: this.id,
14
- shape: this.shapeClass.shape,
15
- updates: this.fields,
16
- });
17
- }
18
- }
1
+ export {};
19
2
  //# sourceMappingURL=UpdateQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateQuery.js","sourceRoot":"","sources":["../../../src/queries/UpdateQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAC,8BAA8B,EAAC,MAAM,iBAAiB,CAAC;AAQ/D,MAAM,OAAO,kBAGX,SAAQ,oBAAoB;IAI5B,YACS,UAAuC,EAC9C,EAA+B,EAC/B,gBAAmB;QAEnB,KAAK,EAAE,CAAC;QAJD,eAAU,GAAV,UAAU,CAA6B;QAK9C,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,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,8BAA8B,CAAC;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"}
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,38 @@
1
+ /*
2
+ * This Source Code Form is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+ */
6
+ /**
7
+ * Kind-detecting `fromJSON` — rehydrate any query DSL-JSON back into its builder.
8
+ *
9
+ * Mutation envelopes carry an `op` discriminator; select envelopes
10
+ * (`QueryBuilderJSON`) do not. This is the inbound boundary helper: a receiving
11
+ * process turns wire JSON into a live query with `fromJSON(json).exec()` (the
12
+ * existing generic dispatch), no per-op routing needed.
13
+ */
14
+ import { SelectBuilder } from './QueryBuilder.js';
15
+ import { CreateBuilder } from './CreateBuilder.js';
16
+ import { UpdateBuilder } from './UpdateBuilder.js';
17
+ import { DeleteBuilder } from './DeleteBuilder.js';
18
+ import { assertWireVersion } from './wireVersion.js';
19
+ export function fromJSON(json) {
20
+ assertWireVersion(json === null || json === void 0 ? void 0 : json.v);
21
+ if (json && typeof json === 'object' && 'op' in json) {
22
+ switch (json.op) {
23
+ case 'create':
24
+ return CreateBuilder.fromJSON(json);
25
+ case 'update':
26
+ return UpdateBuilder.fromJSON(json);
27
+ case 'delete':
28
+ return DeleteBuilder.fromJSON(json);
29
+ default:
30
+ // An `op` is present but not one we know — a malformed/corrupted or
31
+ // future-versioned mutation envelope. Fail loud rather than silently
32
+ // reinterpreting it as a select query.
33
+ throw new Error(`Unknown query op "${String(json.op)}" in DSL-JSON envelope.`);
34
+ }
35
+ }
36
+ return SelectBuilder.fromJSON(json);
37
+ }
38
+ //# sourceMappingURL=fromJSON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromJSON.js","sourceRoot":"","sources":["../../../src/queries/fromJSON.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,OAAO,EAAC,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAKnD,MAAM,UAAU,QAAQ,CACtB,IAAe;IAEf,iBAAiB,CAAE,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,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,aAAa,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,aAAa,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,112 @@
1
+ /*
2
+ * This Source Code Form is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+ */
6
+ /**
7
+ * `lower(query)` — turn a live query (builder) into its canonical IR algebra.
8
+ *
9
+ * This is the single, **free** lowering entry point, and the *only* place the
10
+ * canonical-IR pipeline (`IRPipeline` / `IRMutation` / `IRLower` / …) is reached
11
+ * from. The builders are deliberately IR-free: they hand `lower()` a plain
12
+ * "lowering spec" (`mutationLowerSpec`) or raw select input, and all IR
13
+ * construction happens here. A client that authors/serializes/forwards queries
14
+ * but never calls `lower()` therefore tree-shakes the entire IR pipeline away.
15
+ * The IR is an implementation detail of stores that want it (e.g. SPARQL) — not
16
+ * the contract.
17
+ */
18
+ import { buildSelectQuery } from './IRPipeline.js';
19
+ import { MutationQueryFactory } from './MutationQuery.js';
20
+ import { isSetModificationValue } from './QueryFactory.js';
21
+ import { PendingQueryContext } from './QueryContext.js';
22
+ import { resolveContextId } from './ContextRef.js';
23
+ import { buildCanonicalCreateMutationIR, buildCanonicalUpdateMutationIR, buildCanonicalUpdateWhereMutationIR, buildCanonicalDeleteMutationIR, buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
24
+ import { toWhere } from './IRDesugar.js';
25
+ import { canonicalizeWhere } from './IRCanonicalize.js';
26
+ import { lowerWhereToIR } from './IRLower.js';
27
+ /** Lower a pre-evaluated where path to its canonical IR fragment. */
28
+ function lowerWherePath(where) {
29
+ return lowerWhereToIR(canonicalizeWhere(toWhere(where)));
30
+ }
31
+ /**
32
+ * Resolve any query-context reference carried as a mutation field value. The
33
+ * builder preserves a live `PendingQueryContext` through normalization (so it can
34
+ * serialize as `{$ctx}`); at lowering a mutation must hit a concrete node, so the
35
+ * context is resolved here and an unset one throws `UnresolvedContextError`.
36
+ */
37
+ function resolveValueContexts(val) {
38
+ if (val instanceof PendingQueryContext) {
39
+ return { id: resolveContextId(val.contextName, true) };
40
+ }
41
+ if (Array.isArray(val)) {
42
+ return val.map(resolveValueContexts);
43
+ }
44
+ if (val && typeof val === 'object') {
45
+ if (isSetModificationValue(val)) {
46
+ const mod = val;
47
+ const out = {};
48
+ if (mod.$add)
49
+ out.$add = mod.$add.map(resolveValueContexts);
50
+ if (mod.$remove)
51
+ out.$remove = mod.$remove.map(resolveValueContexts);
52
+ return out;
53
+ }
54
+ if ('fields' in val) {
55
+ return resolveDescriptionContexts(val);
56
+ }
57
+ }
58
+ return val;
59
+ }
60
+ /** Deep-resolve context references in a normalized node description (returns a new copy). */
61
+ function resolveDescriptionContexts(desc) {
62
+ return Object.assign(Object.assign({}, desc), { fields: desc.fields.map((f) => (Object.assign(Object.assign({}, f), { val: resolveValueContexts(f.val) }))) });
63
+ }
64
+ function lowerCreate(spec) {
65
+ const description = resolveDescriptionContexts(new MutationQueryFactory().describe(spec.shapeClass.shape, spec.data, true));
66
+ return buildCanonicalCreateMutationIR({ shape: spec.shapeClass.shape, description });
67
+ }
68
+ function lowerUpdate(spec) {
69
+ const shape = spec.shapeClass.shape;
70
+ const updates = resolveDescriptionContexts(new MutationQueryFactory().describe(shape, spec.data));
71
+ if (spec.mode === 'for') {
72
+ return buildCanonicalUpdateMutationIR({ id: spec.targetId, shape, updates });
73
+ }
74
+ // forAll / where
75
+ const lowered = spec.wherePath ? lowerWherePath(spec.wherePath) : undefined;
76
+ return buildCanonicalUpdateWhereMutationIR({
77
+ shape,
78
+ updates,
79
+ where: lowered === null || lowered === void 0 ? void 0 : lowered.where,
80
+ wherePatterns: lowered === null || lowered === void 0 ? void 0 : lowered.wherePatterns,
81
+ });
82
+ }
83
+ function lowerDelete(spec) {
84
+ const shape = spec.shapeClass.shape;
85
+ if (spec.mode === 'all') {
86
+ return buildCanonicalDeleteAllMutationIR({ shape });
87
+ }
88
+ if (spec.mode === 'where') {
89
+ const { where, wherePatterns } = lowerWherePath(spec.wherePath);
90
+ return buildCanonicalDeleteWhereMutationIR({ shape, where, wherePatterns });
91
+ }
92
+ // Resolve any context-ref ids ({$ctx}) against the live map — a delete must hit
93
+ // a concrete node, so an unresolved one throws (never a silent `{id: undefined}`).
94
+ const resolvedIds = spec.ids.map((id) => id instanceof PendingQueryContext
95
+ ? { id: resolveContextId(id.contextName, true) }
96
+ : id);
97
+ const ids = new MutationQueryFactory().normalizeNodeRefs(resolvedIds);
98
+ return buildCanonicalDeleteMutationIR({ shape, ids });
99
+ }
100
+ export function lower(query) {
101
+ switch (query.__queryKind) {
102
+ case 'select':
103
+ return buildSelectQuery(query.toRawInput());
104
+ case 'create':
105
+ return lowerCreate(query._lowerSpec());
106
+ case 'update':
107
+ return lowerUpdate(query._lowerSpec());
108
+ case 'delete':
109
+ return lowerDelete(query._lowerSpec());
110
+ }
111
+ }
112
+ //# 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;