@sunfall/arc-db 0.1.0-alpha.0

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 (150) hide show
  1. package/LICENSE +21 -0
  2. package/dist/change-feed-dispatcher.d.ts +21 -0
  3. package/dist/change-feed-dispatcher.d.ts.map +1 -0
  4. package/dist/change-feed-dispatcher.js +53 -0
  5. package/dist/change-feed-dispatcher.js.map +1 -0
  6. package/dist/collection-change-feed-runtime.d.ts +32 -0
  7. package/dist/collection-change-feed-runtime.d.ts.map +1 -0
  8. package/dist/collection-change-feed-runtime.js +50 -0
  9. package/dist/collection-change-feed-runtime.js.map +1 -0
  10. package/dist/collection-contract.d.ts +525 -0
  11. package/dist/collection-contract.d.ts.map +1 -0
  12. package/dist/collection-contract.js +4 -0
  13. package/dist/collection-contract.js.map +1 -0
  14. package/dist/collection-definition-snapshot.d.ts +64 -0
  15. package/dist/collection-definition-snapshot.d.ts.map +1 -0
  16. package/dist/collection-definition-snapshot.js +122 -0
  17. package/dist/collection-definition-snapshot.js.map +1 -0
  18. package/dist/collection-errors.d.ts +38 -0
  19. package/dist/collection-errors.d.ts.map +1 -0
  20. package/dist/collection-errors.js +17 -0
  21. package/dist/collection-errors.js.map +1 -0
  22. package/dist/collection-ids.d.ts +6 -0
  23. package/dist/collection-ids.d.ts.map +1 -0
  24. package/dist/collection-ids.js +6 -0
  25. package/dist/collection-ids.js.map +1 -0
  26. package/dist/collection-index-materialization.d.ts +29 -0
  27. package/dist/collection-index-materialization.d.ts.map +1 -0
  28. package/dist/collection-index-materialization.js +118 -0
  29. package/dist/collection-index-materialization.js.map +1 -0
  30. package/dist/collection-mutation-queue.d.ts +10 -0
  31. package/dist/collection-mutation-queue.d.ts.map +1 -0
  32. package/dist/collection-mutation-queue.js +46 -0
  33. package/dist/collection-mutation-queue.js.map +1 -0
  34. package/dist/collection-mutation-workflow.d.ts +18 -0
  35. package/dist/collection-mutation-workflow.d.ts.map +1 -0
  36. package/dist/collection-mutation-workflow.js +252 -0
  37. package/dist/collection-mutation-workflow.js.map +1 -0
  38. package/dist/collection-persistence.d.ts +48 -0
  39. package/dist/collection-persistence.d.ts.map +1 -0
  40. package/dist/collection-persistence.js +323 -0
  41. package/dist/collection-persistence.js.map +1 -0
  42. package/dist/collection-policy.d.ts +5 -0
  43. package/dist/collection-policy.d.ts.map +1 -0
  44. package/dist/collection-policy.js +7 -0
  45. package/dist/collection-policy.js.map +1 -0
  46. package/dist/collection-preload.d.ts +21 -0
  47. package/dist/collection-preload.d.ts.map +1 -0
  48. package/dist/collection-preload.js +4 -0
  49. package/dist/collection-preload.js.map +1 -0
  50. package/dist/collection-projection-callback-policy.d.ts +14 -0
  51. package/dist/collection-projection-callback-policy.d.ts.map +1 -0
  52. package/dist/collection-projection-callback-policy.js +25 -0
  53. package/dist/collection-projection-callback-policy.js.map +1 -0
  54. package/dist/collection-reactive-binding.d.ts +72 -0
  55. package/dist/collection-reactive-binding.d.ts.map +1 -0
  56. package/dist/collection-reactive-binding.js +95 -0
  57. package/dist/collection-reactive-binding.js.map +1 -0
  58. package/dist/collection-registry.d.ts +56 -0
  59. package/dist/collection-registry.d.ts.map +1 -0
  60. package/dist/collection-registry.js +123 -0
  61. package/dist/collection-registry.js.map +1 -0
  62. package/dist/collection-row-ingress.d.ts +16 -0
  63. package/dist/collection-row-ingress.d.ts.map +1 -0
  64. package/dist/collection-row-ingress.js +110 -0
  65. package/dist/collection-row-ingress.js.map +1 -0
  66. package/dist/collection-runtime.d.ts +20 -0
  67. package/dist/collection-runtime.d.ts.map +1 -0
  68. package/dist/collection-runtime.js +256 -0
  69. package/dist/collection-runtime.js.map +1 -0
  70. package/dist/collection-snapshot-codec.d.ts +62 -0
  71. package/dist/collection-snapshot-codec.d.ts.map +1 -0
  72. package/dist/collection-snapshot-codec.js +563 -0
  73. package/dist/collection-snapshot-codec.js.map +1 -0
  74. package/dist/collection-state.d.ts +72 -0
  75. package/dist/collection-state.d.ts.map +1 -0
  76. package/dist/collection-state.js +276 -0
  77. package/dist/collection-state.js.map +1 -0
  78. package/dist/collection-sync-load-policy.d.ts +17 -0
  79. package/dist/collection-sync-load-policy.d.ts.map +1 -0
  80. package/dist/collection-sync-load-policy.js +245 -0
  81. package/dist/collection-sync-load-policy.js.map +1 -0
  82. package/dist/collection-value-detachment.d.ts +34 -0
  83. package/dist/collection-value-detachment.d.ts.map +1 -0
  84. package/dist/collection-value-detachment.js +248 -0
  85. package/dist/collection-value-detachment.js.map +1 -0
  86. package/dist/collection-write-commit.d.ts +32 -0
  87. package/dist/collection-write-commit.d.ts.map +1 -0
  88. package/dist/collection-write-commit.js +51 -0
  89. package/dist/collection-write-commit.js.map +1 -0
  90. package/dist/flush-policy.d.ts +130 -0
  91. package/dist/flush-policy.d.ts.map +1 -0
  92. package/dist/flush-policy.js +96 -0
  93. package/dist/flush-policy.js.map +1 -0
  94. package/dist/index.d.ts +481 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +251 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/live-query-collection-materialization.d.ts +47 -0
  99. package/dist/live-query-collection-materialization.d.ts.map +1 -0
  100. package/dist/live-query-collection-materialization.js +231 -0
  101. package/dist/live-query-collection-materialization.js.map +1 -0
  102. package/dist/live-query-collection.d.ts +23 -0
  103. package/dist/live-query-collection.d.ts.map +1 -0
  104. package/dist/live-query-collection.js +94 -0
  105. package/dist/live-query-collection.js.map +1 -0
  106. package/dist/live-query-runtime.d.ts +8 -0
  107. package/dist/live-query-runtime.d.ts.map +1 -0
  108. package/dist/live-query-runtime.js +228 -0
  109. package/dist/live-query-runtime.js.map +1 -0
  110. package/dist/live-query-state.d.ts +11 -0
  111. package/dist/live-query-state.d.ts.map +1 -0
  112. package/dist/live-query-state.js +130 -0
  113. package/dist/live-query-state.js.map +1 -0
  114. package/dist/query-builder.d.ts +294 -0
  115. package/dist/query-builder.d.ts.map +1 -0
  116. package/dist/query-builder.js +373 -0
  117. package/dist/query-builder.js.map +1 -0
  118. package/dist/query-context-identity.d.ts +19 -0
  119. package/dist/query-context-identity.d.ts.map +1 -0
  120. package/dist/query-context-identity.js +41 -0
  121. package/dist/query-context-identity.js.map +1 -0
  122. package/dist/query-execution-plan.d.ts +27 -0
  123. package/dist/query-execution-plan.d.ts.map +1 -0
  124. package/dist/query-execution-plan.js +69 -0
  125. package/dist/query-execution-plan.js.map +1 -0
  126. package/dist/query-plan.d.ts +200 -0
  127. package/dist/query-plan.d.ts.map +1 -0
  128. package/dist/query-plan.js +524 -0
  129. package/dist/query-plan.js.map +1 -0
  130. package/dist/query-source-adapter.d.ts +25 -0
  131. package/dist/query-source-adapter.d.ts.map +1 -0
  132. package/dist/query-source-adapter.js +14 -0
  133. package/dist/query-source-adapter.js.map +1 -0
  134. package/dist/runtime-collection-store.d.ts +38 -0
  135. package/dist/runtime-collection-store.d.ts.map +1 -0
  136. package/dist/runtime-collection-store.js +149 -0
  137. package/dist/runtime-collection-store.js.map +1 -0
  138. package/dist/server-collection.d.ts +84 -0
  139. package/dist/server-collection.d.ts.map +1 -0
  140. package/dist/server-collection.js +84 -0
  141. package/dist/server-collection.js.map +1 -0
  142. package/dist/sqlite-persistence.d.ts +239 -0
  143. package/dist/sqlite-persistence.d.ts.map +1 -0
  144. package/dist/sqlite-persistence.js +345 -0
  145. package/dist/sqlite-persistence.js.map +1 -0
  146. package/dist/sync-adapter.d.ts +233 -0
  147. package/dist/sync-adapter.d.ts.map +1 -0
  148. package/dist/sync-adapter.js +226 -0
  149. package/dist/sync-adapter.js.map +1 -0
  150. package/package.json +48 -0
@@ -0,0 +1,373 @@
1
+ import { isEffectLike, isPromiseLikeValue, } from "@sunfall/arc-core";
2
+ import { Data, Effect } from "effect";
3
+ import { makeLiveQueryState } from "./live-query-state.js";
4
+ import { QueryEvaluationError as QueryEvaluationErrorConstructor, UnsupportedLiveQuery as UnsupportedLiveQueryConstructor, evaluateQueryOperation, toQueryEvaluationError, } from "./query-plan.js";
5
+ import { executeQueryPlan, preloadQueryExecutionPlanEffect, queryExecutionPlanDiagnostics, } from "./query-execution-plan.js";
6
+ import { makeQuerySourceAdapter } from "./query-source-adapter.js";
7
+ import { collectionStoreEffect, runWithCollectionStore } from "./runtime-collection-store.js";
8
+ const QueryBuilderTypeId = Symbol.for("@sunfall/arc-db/QueryBuilder");
9
+ export class QueryBuilder {
10
+ sources;
11
+ filters;
12
+ projector;
13
+ orders;
14
+ offsetCount;
15
+ limitCount;
16
+ joins;
17
+ grouping;
18
+ constructor(sources, filters = [], projector = undefined, orders = [], offsetCount = 0, limitCount = undefined, joins = [], grouping = undefined) {
19
+ this.sources = sources;
20
+ this.filters = filters;
21
+ this.projector = projector;
22
+ this.orders = orders;
23
+ this.offsetCount = offsetCount;
24
+ this.limitCount = limitCount;
25
+ this.joins = joins;
26
+ this.grouping = grouping;
27
+ }
28
+ filtersFor() {
29
+ return this.filters;
30
+ }
31
+ projectorFor() {
32
+ return this.projector;
33
+ }
34
+ ordersFor() {
35
+ return this.orders;
36
+ }
37
+ /** Returns a new query with an additional boolean filter. */
38
+ where(predicate) {
39
+ return new QueryBuilder(this.sources, [...this.filters, predicate], this.projector, this.orders, this.offsetCount, this.limitCount, this.joins, this.grouping);
40
+ }
41
+ /** Returns a new query that projects each matching context to a result value. */
42
+ select(projector) {
43
+ return new QueryBuilder(this.sources, this.filters, projector, this.orders, this.offsetCount, this.limitCount, this.joins, this.grouping);
44
+ }
45
+ /** Inner-joins another collection by comparing keys from the left context and right rows. */
46
+ join(alias, collection, leftKey, rightKey) {
47
+ return new QueryBuilder([...this.sources, [alias, collection]], this.filtersFor(), this.projectorFor(), this.ordersFor(), this.offsetCount, this.limitCount, [
48
+ ...this.joins,
49
+ {
50
+ alias,
51
+ collection,
52
+ leftKey: leftKey,
53
+ rightKeys: (row) => [
54
+ rightKey(row),
55
+ ],
56
+ },
57
+ ], this.grouping);
58
+ }
59
+ /** Inner-joins another collection through one of its declared secondary indexes. */
60
+ joinIndexed(alias, collection, leftKey, index) {
61
+ const source = makeQuerySourceAdapter(collection);
62
+ return new QueryBuilder([...this.sources, [alias, collection]], this.filtersFor(), this.projectorFor(), this.ordersFor(), this.offsetCount, this.limitCount, [
63
+ ...this.joins,
64
+ {
65
+ alias,
66
+ collection,
67
+ leftKey: leftKey,
68
+ rightKeys: (row) => source.indexJoinKeys(index, row),
69
+ rightIndex: index,
70
+ },
71
+ ], this.grouping);
72
+ }
73
+ /** Alias for `join`. */
74
+ innerJoin(alias, collection, leftKey, rightKey) {
75
+ return this.join(alias, collection, leftKey, rightKey);
76
+ }
77
+ /** Alias for `joinIndexed`. */
78
+ innerJoinIndexed(alias, collection, leftKey, index) {
79
+ return this.joinIndexed(alias, collection, leftKey, index);
80
+ }
81
+ /** Groups filtered source rows by a key object and evaluates aggregate selectors. */
82
+ groupBy(key, aggregates) {
83
+ return new QueryBuilder(this.sources, [], undefined, [], 0, undefined, this.joins, {
84
+ key: key,
85
+ aggregates: aggregates,
86
+ sourceFilters: this.filters,
87
+ });
88
+ }
89
+ /**
90
+ * Adds a stable sort. Multiple `orderBy` calls are evaluated in order.
91
+ *
92
+ * Selectors must return comparable scalar values. Invalid Dates and `NaN`
93
+ * fail as `QueryEvaluationError` with operation `"order"`.
94
+ */
95
+ orderBy(selector, direction = "asc") {
96
+ return new QueryBuilder(this.sources, this.filters, this.projector, [...this.orders, { selector, direction }], this.offsetCount, this.limitCount, this.joins, this.grouping);
97
+ }
98
+ /**
99
+ * Skips the first `count` results after filtering and sorting.
100
+ *
101
+ * `count` must be a finite, non-negative safe integer. Invalid windows are
102
+ * rejected when the query is executed or inspected with diagnostics.
103
+ */
104
+ offset(count) {
105
+ return new QueryBuilder(this.sources, this.filters, this.projector, this.orders, count, this.limitCount, this.joins, this.grouping);
106
+ }
107
+ /**
108
+ * Limits the number of results after filtering, sorting, and offset.
109
+ *
110
+ * `count` must be a finite, non-negative safe integer. Invalid windows are
111
+ * rejected when the query is executed or inspected with diagnostics.
112
+ */
113
+ limit(count) {
114
+ return new QueryBuilder(this.sources, this.filters, this.projector, this.orders, this.offsetCount, count, this.joins, this.grouping);
115
+ }
116
+ /**
117
+ * Synchronously evaluates the query against the current collection state.
118
+ *
119
+ * Plan-validation and callback failures are thrown as `QueryEvaluationError`.
120
+ */
121
+ execute() {
122
+ try {
123
+ return executeQueryPlan(this);
124
+ }
125
+ catch (cause) {
126
+ throw toQueryEvaluationError("evaluate", cause);
127
+ }
128
+ }
129
+ }
130
+ class QueryFactoryResultRejected extends Data.TaggedError("QueryFactoryResultRejected") {
131
+ }
132
+ const queryFactoryResultRejected = (reason) => new QueryFactoryResultRejected({
133
+ reason,
134
+ guidance: reason === "promise"
135
+ ? "Query factories must return a QueryBuilder synchronously. Move async work into collection Effects before building the query."
136
+ : reason === "effect"
137
+ ? "Query factories must return a QueryBuilder, not an Effect. Move Effect work into collection sources and keep the factory synchronous."
138
+ : "Query factories must return the QueryBuilder produced by Query.from(...).",
139
+ });
140
+ const validateQueryFactoryResult = (value) => {
141
+ if (value instanceof QueryBuilder) {
142
+ return value;
143
+ }
144
+ if (isPromiseLikeValue(value)) {
145
+ throw queryFactoryResultRejected("promise");
146
+ }
147
+ if (!(value instanceof Error) && isEffectLike(value)) {
148
+ throw queryFactoryResultRejected("effect");
149
+ }
150
+ throw queryFactoryResultRejected("builder");
151
+ };
152
+ const queryRoot = {
153
+ from: (sources) => new QueryBuilder(Object.entries(sources)),
154
+ };
155
+ const queryPredicateEq = (left, right) => Object.is(left, right);
156
+ const queryPredicateNeq = (left, right) => !Object.is(left, right);
157
+ const queryPredicateGt = (left, right) => left > right;
158
+ const queryPredicateGte = (left, right) => left >= right;
159
+ const queryPredicateLt = (left, right) => left < right;
160
+ const queryPredicateLte = (left, right) => left <= right;
161
+ const queryPredicateAnd = (...values) => values.every(Boolean);
162
+ const queryPredicateOr = (...values) => values.some(Boolean);
163
+ const queryPredicateNot = (value) => !value;
164
+ const queryPredicateIncludes = (values, value) => values.includes(value);
165
+ /** Equality predicate using `Object.is`, matching signal and collection change checks. Prefer `Query.eq(...)` in new code. */
166
+ export const eq = queryPredicateEq;
167
+ /** Negated `Object.is` equality predicate. Prefer `Query.neq(...)` in new code. */
168
+ export const neq = queryPredicateNeq;
169
+ /** Greater-than predicate for sortable scalar values. Prefer `Query.gt(...)` in new code. */
170
+ export const gt = queryPredicateGt;
171
+ /** Greater-than-or-equal predicate for sortable scalar values. Prefer `Query.gte(...)` in new code. */
172
+ export const gte = queryPredicateGte;
173
+ /** Less-than predicate for sortable scalar values. Prefer `Query.lt(...)` in new code. */
174
+ export const lt = queryPredicateLt;
175
+ /** Less-than-or-equal predicate for sortable scalar values. Prefer `Query.lte(...)` in new code. */
176
+ export const lte = queryPredicateLte;
177
+ /** Boolean conjunction helper for composing filters. Prefer `Query.and(...)` in new code. */
178
+ export const and = queryPredicateAnd;
179
+ /** Boolean disjunction helper for composing filters. Prefer `Query.or(...)` in new code. */
180
+ export const or = queryPredicateOr;
181
+ /** Boolean negation helper for composing filters. Prefer `Query.not(...)` in new code. */
182
+ export const not = queryPredicateNot;
183
+ /** Array membership predicate using JavaScript `includes` semantics. Prefer `Query.includes(...)` in new code. */
184
+ export const includes = queryPredicateIncludes;
185
+ const aggregateCount = (value = (row) => row) => ({
186
+ preMap: (row) => (evaluateQueryOperation("aggregate", () => value(row)) == null ? 0 : 1),
187
+ reduce: (values) => {
188
+ let total = 0;
189
+ for (const [present, multiplicity] of values) {
190
+ total += present * multiplicity;
191
+ }
192
+ return total;
193
+ },
194
+ });
195
+ const aggregateSum = (value) => ({
196
+ preMap: (row) => evaluateQueryOperation("aggregate", () => value(row)),
197
+ reduce: (values) => {
198
+ let total = 0;
199
+ for (const [amount, multiplicity] of values) {
200
+ total += amount * multiplicity;
201
+ }
202
+ return total;
203
+ },
204
+ });
205
+ const aggregateAvg = (value) => ({
206
+ preMap: (row) => ({
207
+ sum: evaluateQueryOperation("aggregate", () => value(row)),
208
+ count: 1,
209
+ }),
210
+ reduce: (values) => {
211
+ let sum = 0;
212
+ let count = 0;
213
+ for (const [entry, multiplicity] of values) {
214
+ sum += entry.sum * multiplicity;
215
+ count += entry.count * multiplicity;
216
+ }
217
+ return { sum, count };
218
+ },
219
+ postMap: ({ sum, count }) => (count === 0 ? 0 : sum / count),
220
+ });
221
+ const aggregateMin = (value) => ({
222
+ preMap: (row) => evaluateQueryOperation("aggregate", () => value(row)),
223
+ reduce: (values) => {
224
+ let min;
225
+ for (const [candidate, multiplicity] of values) {
226
+ if (multiplicity <= 0 || candidate === undefined) {
227
+ continue;
228
+ }
229
+ if (min === undefined || candidate < min) {
230
+ min = candidate;
231
+ }
232
+ }
233
+ return min;
234
+ },
235
+ });
236
+ const aggregateMax = (value) => ({
237
+ preMap: (row) => evaluateQueryOperation("aggregate", () => value(row)),
238
+ reduce: (values) => {
239
+ let max;
240
+ for (const [candidate, multiplicity] of values) {
241
+ if (multiplicity <= 0 || candidate === undefined) {
242
+ continue;
243
+ }
244
+ if (max === undefined || candidate > max) {
245
+ max = candidate;
246
+ }
247
+ }
248
+ return max;
249
+ },
250
+ });
251
+ /**
252
+ * Query API for composing derived views over collections.
253
+ *
254
+ * Query factories receive `Query.from`/`query.from` and return an immutable
255
+ * builder. Use `onceEffect` for one-shot reads and `live` for reactive data.
256
+ */
257
+ export var Query;
258
+ (function (Query) {
259
+ /** Error raised when query factory, callback, plan, or order comparable evaluation fails. */
260
+ Query.EvaluationError = QueryEvaluationErrorConstructor;
261
+ /** Error raised when a query builder cannot be represented as a live query. */
262
+ Query.UnsupportedLiveQuery = UnsupportedLiveQueryConstructor;
263
+ /** Start a query from one or more named collection sources. */
264
+ Query.from = queryRoot.from;
265
+ /** Equality predicate using `Object.is`, matching signal and collection change checks. */
266
+ Query.eq = queryPredicateEq;
267
+ /** Negated `Object.is` equality predicate. */
268
+ Query.neq = queryPredicateNeq;
269
+ /** Greater-than predicate for sortable scalar values. */
270
+ Query.gt = queryPredicateGt;
271
+ /** Greater-than-or-equal predicate for sortable scalar values. */
272
+ Query.gte = queryPredicateGte;
273
+ /** Less-than predicate for sortable scalar values. */
274
+ Query.lt = queryPredicateLt;
275
+ /** Less-than-or-equal predicate for sortable scalar values. */
276
+ Query.lte = queryPredicateLte;
277
+ /** Boolean conjunction helper for composing filters. */
278
+ Query.and = queryPredicateAnd;
279
+ /** Boolean disjunction helper for composing filters. */
280
+ Query.or = queryPredicateOr;
281
+ /** Boolean negation helper for composing filters. */
282
+ Query.not = queryPredicateNot;
283
+ /** Array membership predicate using JavaScript `includes` semantics. */
284
+ Query.includes = queryPredicateIncludes;
285
+ /** Count non-null aggregate values in `groupBy`. */
286
+ Query.count = aggregateCount;
287
+ /** Sum numeric aggregate values in `groupBy`. */
288
+ Query.sum = aggregateSum;
289
+ /** Average numeric aggregate values in `groupBy`. */
290
+ Query.avg = aggregateAvg;
291
+ /** Minimum aggregate value in `groupBy`. */
292
+ Query.min = aggregateMin;
293
+ /** Maximum aggregate value in `groupBy`. */
294
+ Query.max = aggregateMax;
295
+ /**
296
+ * Build a query without executing or preloading it.
297
+ *
298
+ * Synchronous factory throws, Promise-shaped factory results, Effect-shaped
299
+ * factory results, and other non-builder factory results are normalized and
300
+ * thrown as `QueryEvaluationError` with operation `"evaluate"`.
301
+ */
302
+ Query.build = (factory) => {
303
+ try {
304
+ return validateQueryFactoryResult(factory(queryRoot));
305
+ }
306
+ catch (cause) {
307
+ throw toQueryEvaluationError("evaluate", cause);
308
+ }
309
+ };
310
+ const buildOrThrowQueryEvaluationError = (factory) => {
311
+ try {
312
+ return validateQueryFactoryResult(factory(queryRoot));
313
+ }
314
+ catch (cause) {
315
+ throw toQueryEvaluationError("evaluate", cause);
316
+ }
317
+ };
318
+ /**
319
+ * Return query plan diagnostics for joins, filters, ordering, and row counts.
320
+ *
321
+ * Synchronous factory failures, Promise-shaped factory results, Effect-shaped
322
+ * factory results, other non-builder factory results, and plan-validation
323
+ * throws are normalized and thrown as `QueryEvaluationError` with operation
324
+ * `"evaluate"`.
325
+ */
326
+ Query.diagnostics = (factory) => {
327
+ const builder = buildOrThrowQueryEvaluationError(factory);
328
+ try {
329
+ return queryExecutionPlanDiagnostics(builder);
330
+ }
331
+ catch (cause) {
332
+ throw toQueryEvaluationError("evaluate", cause);
333
+ }
334
+ };
335
+ /**
336
+ * Preload source collections once, then execute the query.
337
+ *
338
+ * Source collection errors and requirements are preserved in the returned
339
+ * Effect. Synchronous factory failures, Promise-shaped factory results,
340
+ * Effect-shaped factory results, and other non-builder factory results are
341
+ * normalized as `QueryEvaluationError` with operation `"evaluate"` in the
342
+ * Effect error channel.
343
+ */
344
+ Query.onceEffect = (factory) => Effect.gen(function* () {
345
+ const builder = yield* Effect.try({
346
+ try: () => buildOrThrowQueryEvaluationError(factory),
347
+ catch: (cause) => toQueryEvaluationError("evaluate", cause),
348
+ });
349
+ yield* preloadQueryExecutionPlanEffect(builder, false);
350
+ const store = yield* collectionStoreEffect;
351
+ return yield* Effect.try({
352
+ try: () => runWithCollectionStore(store, () => builder.execute()),
353
+ catch: (cause) => toQueryEvaluationError("evaluate", cause),
354
+ });
355
+ });
356
+ /**
357
+ * Create a reactive live query over collection rows.
358
+ *
359
+ * The returned signals update when source collection versions change.
360
+ * Synchronous factory failures, Promise-shaped factory results, Effect-shaped
361
+ * factory results, and other non-builder factory results are normalized and
362
+ * thrown as `QueryEvaluationError` with operation `"evaluate"`.
363
+ *
364
+ * @example
365
+ * const openTodos = Query.live((query) =>
366
+ * query.from({ todo: todos })
367
+ * .where(({ todo }) => !todo.done)
368
+ * .select(({ todo }) => todo)
369
+ * )
370
+ */
371
+ Query.live = (factory) => makeLiveQueryState(buildOrThrowQueryEvaluationError(factory));
372
+ })(Query || (Query = {}));
373
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { CollectionKey } from "./collection-contract.js";
2
+ import type { AnyCollectionRow, AnyQueryContext } from "./query-plan.js";
3
+ declare const QueryContextIdentityBrand: unique symbol;
4
+ export type QueryContextIdentity = string & {
5
+ readonly [QueryContextIdentityBrand]: typeof QueryContextIdentityBrand;
6
+ };
7
+ export interface QueryContextIdentityRecord {
8
+ readonly [queryContextIdentitySymbol]: QueryContextIdentity;
9
+ }
10
+ export declare const queryContextIdentitySymbol: unique symbol;
11
+ export declare const querySourceContextIdentity: (alias: string, key: CollectionKey) => QueryContextIdentity;
12
+ export declare const queryCollectionRowIdentity: (key: CollectionKey) => QueryContextIdentity;
13
+ export declare const mergeQueryContextIdentities: (left: QueryContextIdentity | string, right: QueryContextIdentity | string) => QueryContextIdentity;
14
+ export declare const queryContextOrderIdentity: (aliases: ReadonlyArray<string>, context: AnyQueryContext) => QueryContextIdentity | undefined;
15
+ export declare const queryContextIdentityOf: (context: unknown) => QueryContextIdentity | undefined;
16
+ export declare const querySourceContext: (alias: string, row: AnyCollectionRow) => AnyQueryContext & QueryContextIdentityRecord;
17
+ export declare const mergeQueryContextRecords: (left: (AnyQueryContext & Partial<QueryContextIdentityRecord>) | null, right: (AnyQueryContext & Partial<QueryContextIdentityRecord>) | null) => AnyQueryContext & QueryContextIdentityRecord;
18
+ export {};
19
+ //# sourceMappingURL=query-context-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-context-identity.d.ts","sourceRoot":"","sources":["../src/query-context-identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,CAAC,MAAM,yBAAyB,EAAE,OAAO,MAAM,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG;IAC1C,QAAQ,CAAC,CAAC,yBAAyB,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACxE,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,CAAC,0BAA0B,CAAC,EAAE,oBAAoB,CAAC;CAC7D;AAED,eAAO,MAAM,0BAA0B,EAAE,OAAO,MAEV,CAAC;AAKvC,eAAO,MAAM,0BAA0B,UAC9B,MAAM,OACR,aAAa,KACjB,oBAA0E,CAAC;AAE9E,eAAO,MAAM,0BAA0B,QAAS,aAAa,KAAG,oBACnB,CAAC;AAE9C,eAAO,MAAM,2BAA2B,SAChC,oBAAoB,GAAG,MAAM,SAC5B,oBAAoB,GAAG,MAAM,KACnC,oBAA+D,CAAC;AAOnE,eAAO,MAAM,yBAAyB,YAC3B,aAAa,CAAC,MAAM,CAAC,WACrB,eAAe,KACvB,oBAAoB,GAAG,SAgBzB,CAAC;AAEF,eAAO,MAAM,sBAAsB,YAAa,OAAO,KAAG,oBAAoB,GAAG,SAGlE,CAAC;AAEhB,eAAO,MAAM,kBAAkB,UACtB,MAAM,OACR,gBAAgB,KACpB,eAAe,GAAG,0BAGnB,CAAC;AAEH,eAAO,MAAM,wBAAwB,SAC7B,CAAC,eAAe,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,IAAI,SAC7D,CAAC,eAAe,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,IAAI,KACpE,eAAe,GAAG,0BAQpB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { stableStringify } from "@sunfall/arc-core";
2
+ export const queryContextIdentitySymbol = Symbol.for("@sunfall/arc-db/QueryContextKey");
3
+ const makeQueryContextIdentity = (value) => stableStringify(value);
4
+ export const querySourceContextIdentity = (alias, key) => makeQueryContextIdentity([alias, typeof key, key]);
5
+ export const queryCollectionRowIdentity = (key) => makeQueryContextIdentity([typeof key, key]);
6
+ export const mergeQueryContextIdentities = (left, right) => makeQueryContextIdentity([left, right]);
7
+ const rowKey = (value) => typeof value === "object" && value !== null && "$key" in value
8
+ ? value.$key
9
+ : undefined;
10
+ export const queryContextOrderIdentity = (aliases, context) => {
11
+ let identity;
12
+ for (const alias of aliases) {
13
+ const key = rowKey(context[alias]);
14
+ if (key === undefined) {
15
+ continue;
16
+ }
17
+ const sourceIdentity = querySourceContextIdentity(alias, key);
18
+ identity =
19
+ identity === undefined
20
+ ? sourceIdentity
21
+ : mergeQueryContextIdentities(identity, sourceIdentity);
22
+ }
23
+ return identity;
24
+ };
25
+ export const queryContextIdentityOf = (context) => typeof context === "object" && context !== null && queryContextIdentitySymbol in context
26
+ ? context[queryContextIdentitySymbol]
27
+ : undefined;
28
+ export const querySourceContext = (alias, row) => ({
29
+ [alias]: row,
30
+ [queryContextIdentitySymbol]: querySourceContextIdentity(alias, row.$key),
31
+ });
32
+ export const mergeQueryContextRecords = (left, right) => {
33
+ const leftKey = queryContextIdentityOf(left) ?? "";
34
+ const rightKey = queryContextIdentityOf(right) ?? "";
35
+ return {
36
+ ...left,
37
+ ...right,
38
+ [queryContextIdentitySymbol]: mergeQueryContextIdentities(leftKey, rightKey),
39
+ };
40
+ };
41
+ //# sourceMappingURL=query-context-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-context-identity.js","sourceRoot":"","sources":["../src/query-context-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAcpD,MAAM,CAAC,MAAM,0BAA0B,GAAkB,MAAM,CAAC,GAAG,CACjE,iCAAiC,CACG,CAAC;AAEvC,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAwB,EAAE,CACxE,eAAe,CAAC,KAAK,CAAyB,CAAC;AAEjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAa,EACb,GAAkB,EACI,EAAE,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAkB,EAAwB,EAAE,CACrF,wBAAwB,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,IAAmC,EACnC,KAAoC,EACd,EAAE,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAEnE,MAAM,MAAM,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC3D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;IAC5D,CAAC,CAAE,KAA0C,CAAC,IAAI;IAClD,CAAC,CAAC,SAAS,CAAC;AAEhB,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,OAA8B,EAC9B,OAAwB,EACU,EAAE;IACpC,IAAI,QAA0C,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,cAAc,GAAG,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9D,QAAQ;YACN,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAoC,EAAE,CAC3F,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,0BAA0B,IAAI,OAAO;IACtF,CAAC,CAAE,OAAsC,CAAC,0BAA0B,CAAC;IACrE,CAAC,CAAC,SAAS,CAAC;AAEhB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAa,EACb,GAAqB,EACyB,EAAE,CAAC,CAAC;IAClD,CAAC,KAAK,CAAC,EAAE,GAAG;IACZ,CAAC,0BAA0B,CAAC,EAAE,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,IAAoE,EACpE,KAAqE,EACvB,EAAE;IAChD,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,KAAK;QACR,CAAC,0BAA0B,CAAC,EAAE,2BAA2B,CAAC,OAAO,EAAE,QAAQ,CAAC;KAC7E,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Effect } from "effect";
2
+ import { type AnyQueryContext, type QueryEvaluationError, type QueryPlanBuilder, type QueryPlanDiagnostics, type QueryProjectOptions, type QueryStagePlan } from "./query-plan.js";
3
+ import { type QueryContextIdentity } from "./query-context-identity.js";
4
+ export { mergeQueryContextIdentities, queryCollectionRowIdentity, queryContextIdentityOf, queryContextIdentitySymbol, queryContextOrderIdentity, querySourceContextIdentity, } from "./query-context-identity.js";
5
+ import type { QueryCollectionSourceAdapter } from "./query-source-adapter.js";
6
+ export interface QueryExecutionPlanBuilder<TContext extends AnyQueryContext, TResult> extends QueryPlanBuilder<TContext> {
7
+ readonly projector: ((row: TContext) => TResult) | undefined;
8
+ }
9
+ export interface QueryOrderedContext<TContext extends AnyQueryContext> {
10
+ readonly row: TContext;
11
+ readonly index: number;
12
+ readonly identity?: QueryContextIdentity;
13
+ }
14
+ export declare const compareQueryOrderedContexts: <TContext extends AnyQueryContext>(left: QueryOrderedContext<TContext>, right: QueryOrderedContext<TContext>, orders: ReadonlyArray<QueryPlanBuilder<TContext>["orders"][number]>) => number;
15
+ interface ProjectQueryContextsOptions<TContext extends AnyQueryContext> extends QueryProjectOptions {
16
+ readonly stagePlan?: QueryStagePlan<TContext>;
17
+ }
18
+ /** Projects already-built query contexts through the plan's remaining stages. */
19
+ export declare const projectQueryContexts: <TContext extends AnyQueryContext, TResult>(builder: QueryExecutionPlanBuilder<TContext, TResult>, contexts: ReadonlyArray<TContext>, options?: ProjectQueryContextsOptions<TContext>) => ReadonlyArray<TResult>;
20
+ /** Executes a query snapshot through the full execution plan. */
21
+ export declare const executeQueryPlan: <TContext extends AnyQueryContext, TResult>(builder: QueryExecutionPlanBuilder<TContext, TResult>) => ReadonlyArray<TResult>;
22
+ /** Builds diagnostics for the query execution plan. */
23
+ export declare const queryExecutionPlanDiagnostics: (builder: QueryPlanBuilder<any>) => QueryPlanDiagnostics;
24
+ export declare const preloadQueryExecutionPlanSourcesEffect: <E, R>(sources: ReadonlyArray<QueryCollectionSourceAdapter>, force: boolean) => Effect.Effect<void, E, R>;
25
+ /** Validates and preloads the source collections for a query execution plan. */
26
+ export declare const preloadQueryExecutionPlanEffect: <E, R>(builder: QueryPlanBuilder<any>, force: boolean) => Effect.Effect<void, E | QueryEvaluationError, R>;
27
+ //# sourceMappingURL=query-execution-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-execution-plan.d.ts","sourceRoot":"","sources":["../src/query-execution-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EASL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA6B,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAE9E,MAAM,WAAW,yBAAyB,CACxC,QAAQ,SAAS,eAAe,EAChC,OAAO,CACP,SAAQ,gBAAgB,CAAC,QAAQ,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC9D;AAED,MAAM,WAAW,mBAAmB,CAAC,QAAQ,SAAS,eAAe;IACnE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CAC1C;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,eAAe,QACpE,mBAAmB,CAAC,QAAQ,CAAC,SAC5B,mBAAmB,CAAC,QAAQ,CAAC,UAC5B,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAClE,MAcF,CAAC;AAEF,UAAU,2BAA2B,CACnC,QAAQ,SAAS,eAAe,CAChC,SAAQ,mBAAmB;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;CAC/C;AAED,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,SAAS,eAAe,EAAE,OAAO,WACnE,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,YAC3C,aAAa,CAAC,QAAQ,CAAC,YACxB,2BAA2B,CAAC,QAAQ,CAAC,KAC7C,aAAa,CAAC,OAAO,CAiCvB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,eAAe,EAAE,OAAO,WAC/D,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,KACpD,aAAa,CAAC,OAAO,CAKvB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,6BAA6B,YAC/B,gBAAgB,CAAC,GAAG,CAAC,KAC7B,oBAEF,CAAC;AAEF,eAAO,MAAM,sCAAsC,GAAI,CAAC,EAAE,CAAC,WAChD,aAAa,CAAC,4BAA4B,CAAC,SAC7C,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAKvB,CAAC;AAEL,gFAAgF;AAChF,eAAO,MAAM,+BAA+B,GAAI,CAAC,EAAE,CAAC,WACzC,gBAAgB,CAAC,GAAG,CAAC,SACvB,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,CAO9C,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { Effect } from "effect";
2
+ import { buildQueryExecutionFromStagePlan, compareRows, compareValue, compileQueryStagePlan, evaluateQueryOperation, evaluateQueryStructuredOperation, projectCurrentContext, toQueryEvaluationError, } from "./query-plan.js";
3
+ import { queryContextOrderIdentity } from "./query-context-identity.js";
4
+ export { mergeQueryContextIdentities, queryCollectionRowIdentity, queryContextIdentityOf, queryContextIdentitySymbol, queryContextOrderIdentity, querySourceContextIdentity, } from "./query-context-identity.js";
5
+ export const compareQueryOrderedContexts = (left, right, orders) => {
6
+ const ordered = compareRows(left.row, right.row, 0, 0, orders);
7
+ if (ordered !== 0) {
8
+ return ordered;
9
+ }
10
+ if (left.identity !== undefined && right.identity !== undefined) {
11
+ const identity = compareValue(left.identity, right.identity);
12
+ if (identity !== 0) {
13
+ return identity;
14
+ }
15
+ }
16
+ return left.index - right.index;
17
+ };
18
+ /** Projects already-built query contexts through the plan's remaining stages. */
19
+ export const projectQueryContexts = (builder, contexts, options = {}) => {
20
+ const stagePlan = options.stagePlan ?? compileQueryStagePlan(builder);
21
+ const shouldFilter = options.filter ?? true;
22
+ const shouldOrder = options.order ?? true;
23
+ const shouldWindow = options.window ?? true;
24
+ let filtered = shouldFilter
25
+ ? contexts.filter((row) => stagePlan.filters.every((filter) => evaluateQueryOperation("filter", () => filter(row))))
26
+ : [...contexts];
27
+ if (shouldOrder && stagePlan.orders.length > 0) {
28
+ filtered = filtered
29
+ .map((row, index) => {
30
+ const identity = queryContextOrderIdentity(stagePlan.identityAliases, row);
31
+ return identity === undefined ? { row, index } : { row, index, identity };
32
+ })
33
+ .sort((left, right) => compareQueryOrderedContexts(left, right, stagePlan.orders))
34
+ .map(({ row }) => row);
35
+ }
36
+ if (shouldWindow && stagePlan.window.offset > 0) {
37
+ filtered = filtered.slice(stagePlan.window.offset);
38
+ }
39
+ if (shouldWindow && stagePlan.window.limit !== undefined) {
40
+ filtered = filtered.slice(0, stagePlan.window.limit);
41
+ }
42
+ const projector = builder.projector ?? projectCurrentContext;
43
+ return filtered.map((row) => evaluateQueryStructuredOperation("projection", () => projector(row)));
44
+ };
45
+ /** Executes a query snapshot through the full execution plan. */
46
+ export const executeQueryPlan = (builder) => {
47
+ const stagePlan = compileQueryStagePlan(builder);
48
+ return projectQueryContexts(builder, buildQueryExecutionFromStagePlan(stagePlan).contexts, {
49
+ stagePlan,
50
+ });
51
+ };
52
+ /** Builds diagnostics for the query execution plan. */
53
+ export const queryExecutionPlanDiagnostics = (builder) => {
54
+ return buildQueryExecutionFromStagePlan(compileQueryStagePlan(builder)).diagnostics;
55
+ };
56
+ export const preloadQueryExecutionPlanSourcesEffect = (sources, force) => Effect.gen(function* () {
57
+ for (const source of sources) {
58
+ yield* source.preloadEffect(force);
59
+ }
60
+ });
61
+ /** Validates and preloads the source collections for a query execution plan. */
62
+ export const preloadQueryExecutionPlanEffect = (builder, force) => Effect.gen(function* () {
63
+ const stagePlan = yield* Effect.try({
64
+ try: () => compileQueryStagePlan(builder),
65
+ catch: (cause) => toQueryEvaluationError("evaluate", cause),
66
+ });
67
+ yield* preloadQueryExecutionPlanSourcesEffect(stagePlan.sourceAdapters, force);
68
+ });
69
+ //# sourceMappingURL=query-execution-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-execution-plan.js","sourceRoot":"","sources":["../src/query-execution-plan.ts"],"names":[],"mappings":"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"}