@docstack/client 0.0.4 → 0.0.5

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 (54) hide show
  1. package/lib/core/attribute.js +406 -0
  2. package/lib/core/attribute.js.map +1 -0
  3. package/lib/core/class.d.ts +14 -15
  4. package/lib/core/class.js +761 -0
  5. package/lib/core/class.js.map +1 -0
  6. package/lib/core/crypto-engine/index.js +229 -0
  7. package/lib/core/crypto-engine/index.js.map +1 -0
  8. package/lib/core/crypto-engine/utils.js +88 -0
  9. package/lib/core/crypto-engine/utils.js.map +1 -0
  10. package/lib/core/datamodel/index.js +1308 -0
  11. package/lib/core/datamodel/index.js.map +1 -0
  12. package/lib/core/domain.d.ts +7 -8
  13. package/lib/core/domain.js +423 -0
  14. package/lib/core/domain.js.map +1 -0
  15. package/lib/core/index.js +520 -0
  16. package/lib/core/index.js.map +1 -0
  17. package/lib/core/job-engine/index.js +220 -0
  18. package/lib/core/job-engine/index.js.map +1 -0
  19. package/lib/core/policy-engine/index.js +232 -0
  20. package/lib/core/policy-engine/index.js.map +1 -0
  21. package/lib/core/query-engine/accumulators.js +258 -0
  22. package/lib/core/query-engine/accumulators.js.map +1 -0
  23. package/lib/core/query-engine/evaluator.js +179 -0
  24. package/lib/core/query-engine/evaluator.js.map +1 -0
  25. package/lib/core/query-engine/executor.js +405 -0
  26. package/lib/core/query-engine/executor.js.map +1 -0
  27. package/lib/core/query-engine/index.js +4 -0
  28. package/lib/core/query-engine/index.js.map +1 -0
  29. package/lib/core/query-engine/parser.js +515 -0
  30. package/lib/core/query-engine/parser.js.map +1 -0
  31. package/lib/core/query-engine/planner.js +330 -0
  32. package/lib/core/query-engine/planner.js.map +1 -0
  33. package/lib/core/stack.js +1817 -0
  34. package/lib/core/stack.js.map +1 -0
  35. package/lib/core/test-utils/docstack.js +222 -0
  36. package/lib/core/test-utils/docstack.js.map +1 -0
  37. package/lib/core/trigger/index.js +81 -0
  38. package/lib/core/trigger/index.js.map +1 -0
  39. package/lib/index.js +10 -4
  40. package/lib/index.js.map +1 -1
  41. package/lib/index.umd.js +10 -4
  42. package/lib/plugins/pouchdb.js +368 -0
  43. package/lib/plugins/pouchdb.js.map +1 -0
  44. package/lib/utils/crypto/index.js +34 -0
  45. package/lib/utils/crypto/index.js.map +1 -0
  46. package/lib/utils/index.js +58 -0
  47. package/lib/utils/index.js.map +1 -0
  48. package/lib/utils/logger/index.js +20 -0
  49. package/lib/utils/logger/index.js.map +1 -0
  50. package/lib/utils/logger/transport.js +28 -0
  51. package/lib/utils/logger/transport.js.map +1 -0
  52. package/lib/workers/dataModel.js +48 -0
  53. package/lib/workers/dataModel.js.map +1 -0
  54. package/package.json +2 -2
@@ -0,0 +1,405 @@
1
+ // @ts-nocheck
2
+ import { evalExpression, createRowEvaluator, evalAggregatedRowExpression } from './evaluator';
3
+ import { createAccumulators } from './accumulators';
4
+ /**
5
+ * An async version of Array.prototype.filter.
6
+ * @param {Array<any>} arr The array to filter.
7
+ * @param {function(any): Promise<boolean>} predicate An async function that returns a boolean.
8
+ * @returns {Promise<Array<any>>} The filtered array.
9
+ */
10
+ async function asyncFilter(arr, predicate) {
11
+ const results = await Promise.all(arr.map(predicate));
12
+ return arr.filter((_v, index) => results[index]);
13
+ }
14
+ /**
15
+ * Converts an array of AST predicate nodes into a PouchDB/Mango selector object.
16
+ * This is a simplified implementation for basic equality and comparison operators.
17
+ * @param {Array<object>} predicates An array of predicate nodes from the query plan.
18
+ * @returns {object} A Mango selector object for filtering documents.
19
+ */
20
+ function buildSelector(predicates) {
21
+ if (!predicates || predicates.length === 0)
22
+ return {};
23
+ const selector = {};
24
+ for (const pred of predicates) {
25
+ // This is a simplified conversion from AST to Mango selector
26
+ if (pred.type === 'binary_expr' && pred.left.type === 'column_ref') {
27
+ const key = pred.left.column;
28
+ const op = {
29
+ '=': '$eq',
30
+ '>': '$gt',
31
+ '<': '$lt',
32
+ '>=': '$gte',
33
+ '<=': '$lte',
34
+ }[pred.operator];
35
+ if (op && pred.right.type === 'param') {
36
+ // For demo, we are assuming numeric/string literals.
37
+ let value = pred.right.value;
38
+ if (!isNaN(parseFloat(value)))
39
+ value = parseFloat(value);
40
+ selector[key] = { [op]: value };
41
+ }
42
+ }
43
+ }
44
+ return selector;
45
+ }
46
+ /**
47
+ * Transforms a set of rows by applying the projections from the SELECT clause.
48
+ * Each row is reshaped to include only the specified columns, with aliasing.
49
+ * @param {Array<object>} rows The input rows to process.
50
+ * @param {Array<object>} projections The projection definitions from the query plan.
51
+ * @param {string} fromAlias The alias for the FROM table.
52
+ * @param {object} joinAliases A map of join table aliases.
53
+ * @returns {Promise<Array<object>>} The transformed rows.
54
+ */
55
+ async function applyProjections(rows, projections, fromAlias, joinAliases, stack, executePlan) {
56
+ return Promise.all(rows.map(async (row) => {
57
+ const newRow = {};
58
+ for (const p of projections) {
59
+ const alias = p.as || (p.expr.type === 'column_ref' ? p.expr.column : (p.expr.name || 'expr'));
60
+ newRow[alias] = await evalExpression(row, p.expr, fromAlias, joinAliases, stack, executePlan, row);
61
+ }
62
+ return newRow;
63
+ }));
64
+ }
65
+ /**
66
+ * Removes duplicate rows from a result set, implementing SELECT DISTINCT.
67
+ * @param {Array<object>} rows The rows to de-duplicate.
68
+ * @returns {Array<object>} The de-duplicated rows.
69
+ */
70
+ function applyDistinct(rows, columns = null) {
71
+ if (!rows || rows.length === 0)
72
+ return [];
73
+ const seen = new Set();
74
+ const result = [];
75
+ for (const row of rows) {
76
+ // Create a stable key based on the row's values.
77
+ // Sorting keys ensures that {a:1, b:2} and {b:2, a:1} are treated as the same.
78
+ const key = JSON.stringify(columns && columns.length > 0
79
+ ? columns.map(col => row[col])
80
+ : Object.keys(row).sort().map(k => row[k]));
81
+ if (!seen.has(key)) {
82
+ seen.add(key);
83
+ result.push(row);
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ /**
89
+ * Sorts a set of rows based on the ORDER BY clause.
90
+ * @param {Array<object>} rows The rows to sort.
91
+ * @param {Array<object>} orderBy The sorting criteria from the query plan.
92
+ * @returns {Array<object>} The sorted rows.
93
+ */
94
+ function applyOrderBy(rows, orderBy) {
95
+ if (!orderBy)
96
+ return rows;
97
+ return [...rows].sort((a, b) => {
98
+ for (const order of orderBy) {
99
+ // We assume aliases from projection are now keys in the row object.
100
+ const key = order.expr.column;
101
+ const valA = a[key];
102
+ const valB = b[key];
103
+ let comparison = 0;
104
+ if (valA < valB)
105
+ comparison = -1;
106
+ if (valA > valB)
107
+ comparison = 1;
108
+ if (comparison !== 0) {
109
+ return order.order === 'DESC' ? -comparison : comparison;
110
+ }
111
+ }
112
+ return 0;
113
+ });
114
+ }
115
+ /**
116
+ * Performs grouping and aggregation on a set of rows.
117
+ * Implements GROUP BY, aggregate functions (COUNT, SUM, etc.), and HAVING.
118
+ * @param {Array<object>} rows The input rows.
119
+ * @param {object} aggregation The aggregation plan, including group by keys and aggregates.
120
+ * @param {string} fromAlias Alias of the FROM table.
121
+ * @param {object} joinAliases Map of join table aliases.
122
+ * @returns {Promise<Array<object>>} The aggregated result rows.
123
+ */
124
+ async function applyAggregation(rows, aggregation, fromAlias, joinAliases, stack, executePlan) {
125
+ const { groupBy, aggregates, having } = aggregation;
126
+ // Handle scalar aggregation on an empty result set (e.g., SELECT COUNT(*) FROM empty_table).
127
+ // SQL expects one row with initial values (COUNT=0, SUM=NULL, etc.).
128
+ if (rows.length === 0 && groupBy.length === 0) {
129
+ const accumulators = createAccumulators(aggregates, fromAlias, joinAliases);
130
+ const initialRow = {};
131
+ await Promise.all(accumulators.map(async (acc) => {
132
+ initialRow[acc.alias] = await acc.result();
133
+ }));
134
+ // If there's a HAVING clause, it must be evaluated against this initial row.
135
+ if (having) {
136
+ const aggregateAliasMap = new Map();
137
+ (aggregates || []).forEach(agg => {
138
+ const key = JSON.stringify(agg.expr);
139
+ const alias = agg.as || agg.expr.name;
140
+ aggregateAliasMap.set(key, alias);
141
+ });
142
+ if (evalAggregatedRowExpression(initialRow, having, aggregateAliasMap)) {
143
+ return [initialRow];
144
+ }
145
+ return []; // The initial row did not satisfy the HAVING condition.
146
+ }
147
+ return [initialRow];
148
+ }
149
+ const groups = new Map();
150
+ for (const row of rows) {
151
+ const keyParts = await Promise.all(groupBy.map(gb => evalExpression(row, gb, fromAlias, joinAliases, stack, executePlan, row)));
152
+ const key = JSON.stringify(keyParts);
153
+ if (!groups.has(key)) {
154
+ groups.set(key, {
155
+ accumulators: createAccumulators(aggregates, fromAlias, joinAliases),
156
+ keyValues: keyParts,
157
+ });
158
+ }
159
+ const group = groups.get(key);
160
+ for (const acc of group.accumulators) {
161
+ await acc.add(row);
162
+ }
163
+ }
164
+ let resultRows = [];
165
+ // Create a map from aggregate function AST to its final alias for HAVING clause evaluation.
166
+ const aggregateAliasMap = new Map();
167
+ (aggregates || []).forEach(agg => {
168
+ const key = JSON.stringify(agg.expr);
169
+ const alias = agg.as || agg.expr.name;
170
+ aggregateAliasMap.set(key, alias);
171
+ });
172
+ for (const group of groups.values()) {
173
+ const resultRow = {};
174
+ // Add group by keys to result
175
+ groupBy.forEach((gb, i) => {
176
+ const alias = gb.as || gb.column;
177
+ resultRow[alias] = group.keyValues[i];
178
+ });
179
+ // Add aggregate results
180
+ await Promise.all(group.accumulators.map(async (acc) => {
181
+ resultRow[acc.alias] = await acc.result();
182
+ }));
183
+ resultRows.push(resultRow);
184
+ }
185
+ // Apply HAVING clause filter
186
+ if (having) {
187
+ resultRows = resultRows.filter(row => {
188
+ // Use the new, specialized evaluator for aggregated rows.
189
+ return evalAggregatedRowExpression(row, having, aggregateAliasMap);
190
+ });
191
+ }
192
+ return resultRows;
193
+ }
194
+ async function executeSingleSelectPlan(stack, plan, params, outerRow, outerAliases) {
195
+ // 1. Fetch from table
196
+ const fromClass = await stack.getClass(plan.fromTable.table);
197
+ if (!fromClass)
198
+ throw new Error(`Table not found: ${plan.fromTable.table}`);
199
+ const leftSelector = buildSelector(plan.filters.left);
200
+ let leftRows = (await fromClass.getCards(leftSelector)).map(row => ({ [plan.fromTable.as || plan.fromTable.table]: row }));
201
+ // 2. Execute Joins
202
+ let currentResultRows = leftRows;
203
+ for (const join of plan.joins) {
204
+ const rightClass = await stack.getClass(join.table);
205
+ if (!rightClass)
206
+ throw new Error(`Table not found: ${join.table}`);
207
+ const joinAlias = join.as || join.table;
208
+ const fromAlias = plan.fromTable.as || plan.fromTable.table;
209
+ // Combine base table filters with filters from the subquery's WHERE clause
210
+ const rightBaseSelector = buildSelector(plan.filters.right[join.table] || []);
211
+ const subqueryFilterSelector = buildSelector(join.filters || []);
212
+ const finalRightSelector = Object.assign(Object.assign({}, rightBaseSelector), subqueryFilterSelector);
213
+ const allRightRows = await rightClass.getCards(finalRightSelector);
214
+ if (join.type === 'SEMI' || join.type === 'ANTI') {
215
+ let resultRows;
216
+ if (join.on.operator === 'IN') {
217
+ // This logic handles correlated `IN` where an inner table column
218
+ // is checked against an outer table column that is an array.
219
+ // e.g., WHERE EXISTS (SELECT 1 FROM Actor a WHERE a._id IN m.actors AND ...)
220
+ const rightRowIds = new Set(allRightRows.map(r => r._id));
221
+ resultRows = await asyncFilter(currentResultRows, async (leftRow) => {
222
+ // right side of IN is the outer table array, e.g., m.actors
223
+ const outerArray = await evalExpression(leftRow, join.on.right, fromAlias, {}, stack, executePlan, leftRow);
224
+ if (!Array.isArray(outerArray)) {
225
+ return join.type === 'ANTI'; // No match if not an array
226
+ }
227
+ const matchFound = outerArray.some(id => rightRowIds.has(id));
228
+ return (join.type === 'SEMI') ? matchFound : !matchFound;
229
+ });
230
+ }
231
+ else { // Handle standard equi-join correlations like `a.name = m.title`
232
+ const rightRowMap = new Map();
233
+ const rightJoinKeyExpr = join.on.right;
234
+ // 1. Build a map from the right-side rows, keyed by their join attribute.
235
+ await Promise.all(allRightRows.map(async (rightRow) => {
236
+ const key = await evalExpression({ [joinAlias]: rightRow }, rightJoinKeyExpr, fromAlias, { [joinAlias]: join.table }, stack, executePlan, { [joinAlias]: rightRow });
237
+ rightRowMap.set(key, true);
238
+ }));
239
+ // 2. Filter the left-side rows by probing the map.
240
+ resultRows = await asyncFilter(currentResultRows, async (leftRow) => {
241
+ // Evaluate the join key expression (e.g., a.name) on the left row.
242
+ const key = await evalExpression(leftRow, join.on.left, fromAlias, {}, stack, executePlan, leftRow);
243
+ const matchFound = rightRowMap.has(key);
244
+ return (join.type === 'SEMI') ? matchFound : !matchFound;
245
+ });
246
+ }
247
+ currentResultRows = resultRows;
248
+ continue; // Skip to next join
249
+ }
250
+ const rightRowMap = new Map(allRightRows.map(r => [r._id, r]));
251
+ let newResultRows = [];
252
+ const matchedRightIds = new Set();
253
+ for (const leftRow of currentResultRows) {
254
+ let matchFoundForLeftRow = false;
255
+ // This logic is specific to the `ON a._id IN m.actors` pattern
256
+ const fk_list = await evalExpression(leftRow, join.on.right, fromAlias, {}, stack, executePlan, leftRow);
257
+ if (join.on.operator === 'IN' && Array.isArray(fk_list)) {
258
+ for (const fk of fk_list) {
259
+ if (rightRowMap.has(fk)) {
260
+ newResultRows.push(Object.assign(Object.assign({}, leftRow), { [joinAlias]: rightRowMap.get(fk) }));
261
+ matchFoundForLeftRow = true;
262
+ if (join.type === 'RIGHT') {
263
+ matchedRightIds.add(fk);
264
+ }
265
+ }
266
+ }
267
+ }
268
+ if (!matchFoundForLeftRow && join.type === 'LEFT') {
269
+ const nullRightRow = { [joinAlias]: null };
270
+ newResultRows.push(Object.assign(Object.assign({}, leftRow), nullRightRow));
271
+ }
272
+ }
273
+ if (join.type === 'RIGHT') {
274
+ for (const rightRow of allRightRows) {
275
+ if (!matchedRightIds.has(rightRow._id)) {
276
+ // Create a row with nulls for all fields that have been accumulated so far.
277
+ const nullLeftRow = {};
278
+ const leftSchemaAliases = [plan.fromTable.as || plan.fromTable.table];
279
+ const previousJoins = plan.joins.slice(0, plan.joins.indexOf(join));
280
+ previousJoins.forEach(pj => leftSchemaAliases.push(pj.as || pj.table));
281
+ leftSchemaAliases.forEach(alias => {
282
+ nullLeftRow[alias] = null;
283
+ });
284
+ newResultRows.push(Object.assign(Object.assign({}, nullLeftRow), { [joinAlias]: rightRow }));
285
+ }
286
+ }
287
+ }
288
+ currentResultRows = newResultRows;
289
+ }
290
+ let joinedRows = currentResultRows;
291
+ // 3. Apply residual filters
292
+ let filteredRows = joinedRows;
293
+ if (plan.filters.residual.length > 0) {
294
+ const evaluators = plan.filters.residual.map(predicate => createRowEvaluator(predicate, stack, executePlan, outerRow, null));
295
+ filteredRows = await asyncFilter(joinedRows, async (row) => {
296
+ for (const evaluator of evaluators) {
297
+ if (!(await evaluator(row))) {
298
+ return false;
299
+ }
300
+ }
301
+ return true;
302
+ });
303
+ }
304
+ let finalRows = filteredRows;
305
+ // 4. Aggregation
306
+ if (plan.aggregation) {
307
+ const fromAlias = plan.fromTable.as || plan.fromTable.table;
308
+ const joinAliases = plan.joins.reduce((acc, j) => (Object.assign(Object.assign({}, acc), { [j.as || j.table]: j.table })), {});
309
+ finalRows = await applyAggregation(filteredRows, plan.aggregation, fromAlias, joinAliases, stack, executePlan);
310
+ }
311
+ // 5. Projections
312
+ let projectedRows;
313
+ if (plan.aggregation) {
314
+ // Projection is handled inside aggregation for aliasing group keys and agg results.
315
+ // Here we just re-alias if needed.
316
+ projectedRows = await Promise.all(finalRows.map(async (row) => {
317
+ const newRow = {};
318
+ for (const p of plan.projections) {
319
+ const colName = p.expr.column || p.expr.name;
320
+ const alias = p.as || colName;
321
+ if (row.hasOwnProperty(colName)) {
322
+ newRow[alias] = row[colName];
323
+ }
324
+ else if (row.hasOwnProperty(alias)) {
325
+ newRow[alias] = row[alias];
326
+ }
327
+ }
328
+ return newRow;
329
+ }));
330
+ }
331
+ else {
332
+ const fromAlias = plan.fromTable.as || plan.fromTable.table;
333
+ const joinAliases = plan.joins.reduce((acc, j) => (Object.assign(Object.assign({}, acc), { [j.as || j.table]: j.table })), {});
334
+ projectedRows = await applyProjections(finalRows, plan.projections, fromAlias, joinAliases, stack, executePlan);
335
+ }
336
+ // 5.5 Apply DISTINCT/DISTINCT ON to final result set if specified
337
+ let orderedRows = projectedRows;
338
+ if (plan.distinct && plan.distinctOn) {
339
+ const distinctColumns = plan.distinctOn.map(expr => expr.column);
340
+ orderedRows = applyOrderBy(orderedRows, plan.orderBy);
341
+ orderedRows = applyDistinct(orderedRows, distinctColumns);
342
+ }
343
+ else {
344
+ let distinctRows = projectedRows;
345
+ if (plan.distinct) {
346
+ distinctRows = applyDistinct(projectedRows);
347
+ }
348
+ orderedRows = applyOrderBy(distinctRows, plan.orderBy);
349
+ }
350
+ // 7. Limit
351
+ if (plan.limit !== null && plan.limit !== undefined) {
352
+ return orderedRows.slice(0, plan.limit);
353
+ }
354
+ return orderedRows;
355
+ }
356
+ async function executeUnionPlan(stack, plan, params) {
357
+ if (plan.selectPlans.length === 0)
358
+ return [];
359
+ // Step 1: Execute all SELECT sub-queries to get their result sets.
360
+ // This can be done in parallel for efficiency.
361
+ const allSelectResults = await Promise.all(plan.selectPlans.map(p => executeSingleSelectPlan(stack, p, params)));
362
+ // Step 2: Combine the results sequentially based on the UNION operations.
363
+ // UNION is left-associative, e.g., (A UNION B) UNION C.
364
+ // We start with the results of the very first SELECT statement, which corresponds to the
365
+ // first `top` plan in the chain.
366
+ let combinedRows = allSelectResults[plan.unionOps[0].topPlanIndex];
367
+ // The unionOps are ordered. Each one connects the result of the previous operation
368
+ // with the next SELECT statement's results.
369
+ for (const unionOp of plan.unionOps) {
370
+ // The `bottomPlanIndex` tells us which result set to merge next.
371
+ const nextRows = allSelectResults[unionOp.bottomPlanIndex];
372
+ combinedRows.push(...nextRows);
373
+ if (unionOp.distinct) {
374
+ combinedRows = applyDistinct(combinedRows);
375
+ }
376
+ }
377
+ // Step 3: Apply final ORDER BY and LIMIT to the fully combined result set.
378
+ let orderedRows = applyOrderBy(combinedRows, plan.orderBy);
379
+ if (plan.limit !== null && plan.limit !== undefined) {
380
+ return orderedRows.slice(0, plan.limit);
381
+ }
382
+ return orderedRows;
383
+ }
384
+ /**
385
+ * Executes a query plan against the in-memory database.
386
+ * This function orchestrates fetching data, joining, filtering, aggregating,
387
+ * projecting, sorting, and limiting the results.
388
+ * @param {object} stack The ClientStack instance providing data access.
389
+ * @param {object} plan The query plan generated by the planner.
390
+ * @param {Array<any>} params A list of parameters for prepared statements (not used in this version).
391
+ * @param {object | null} outerRow The data row from an outer query for correlated subqueries.
392
+ * @param {object | null} outerAliases The aliases from an outer query.
393
+ * @returns {Promise<Array<object>>} A promise that resolves to the final query results.
394
+ * @throws {Error} If a table specified in the query is not found.
395
+ */
396
+ export async function executePlan(stack, plan, params, outerRow = null, outerAliases = null) {
397
+ if (!plan)
398
+ return [];
399
+ if (plan.type === 'union') {
400
+ return executeUnionPlan(stack, plan, params);
401
+ }
402
+ // Default to existing logic for single select plan
403
+ return executeSingleSelectPlan(stack, plan, params, outerRow, outerAliases);
404
+ }
405
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/core/query-engine/executor.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD;;;;;GAKG;AACH,KAAK,UAAU,WAAW,CAAC,GAAG,EAAE,SAAS;IACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC;AAGD;;;;;GAKG;AACH,SAAS,aAAa,CAAC,UAAU;IAC7B,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,6DAA6D;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACjE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,GAAG;gBACP,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACf,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnC,qDAAqD;gBACrD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC7B,IAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBACxD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YACrC,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW;IACzF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;YAC/F,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IACvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,iDAAiD;QACjD,+EAA+E;QAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CACtB,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAI,EAAE,OAAO;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,oEAAoE;YACpE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEpB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,IAAI,GAAG,IAAI;gBAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,GAAG,IAAI;gBAAE,UAAU,GAAG,CAAC,CAAC;YAEhC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7D,CAAC;QACL,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW;IACzF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IAEpD,6FAA6F;IAC7F,qEAAqE;IACrE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YAC1C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC,CAAC;QAEJ,6EAA6E;QAC7E,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;YACpC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACrE,OAAO,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,OAAO,EAAE,CAAC,CAAC,wDAAwD;QACvE,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAChI,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;gBACZ,YAAY,EAAE,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC;gBACpE,SAAS,EAAE,QAAQ;aACtB,CAAC,CAAC;QACP,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,KAAI,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,4FAA4F;IAC5F,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;IACpC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,8BAA8B;QAC9B,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC;YACjC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,wBAAwB;QACxB,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACjD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC,CAAC;QACJ,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,EAAE,CAAC;QACT,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACjC,0DAA0D;YAC1D,OAAO,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAGD,KAAK,UAAU,uBAAuB,CAAC,KAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY;IAC3F,sBAAsB;IACtB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAE5E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE3H,mBAAmB;IACnB,IAAI,iBAAiB,GAAG,QAAQ,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAE5D,2EAA2E;QAC3E,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,sBAAsB,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,kBAAkB,mCAAO,iBAAiB,GAAK,sBAAsB,CAAC,CAAC;QAE7E,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/C,IAAI,UAAU,CAAC;YAEf,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3B,iEAAiE;gBAClE,6DAA6D;gBAC7D,6EAA6E;gBAC7E,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE1D,UAAU,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAChE,4DAA4D;oBAC5D,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBAC5G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7B,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,2BAA2B;oBAC5D,CAAC;oBAED,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAE9D,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC,CAAC,iEAAiE;gBACtE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBAEvC,0EAA0E;gBAC1E,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;oBAChD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACrK,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC,CAAC;gBAEJ,mDAAmD;gBACnD,UAAU,GAAG,MAAM,WAAW,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAChE,mEAAmE;oBACnE,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBACpG,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAExC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACP,CAAC;YAED,iBAAiB,GAAG,UAAU,CAAC;YAC/B,SAAS,CAAC,oBAAoB;QAClC,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAElC,KAAI,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACrC,IAAI,oBAAoB,GAAG,KAAK,CAAC;YAEjC,+DAA+D;YAC/D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACzG,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,KAAI,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;oBACtB,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBACtB,aAAa,CAAC,IAAI,iCAAK,OAAO,KAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAE,CAAC;wBACnE,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BACxB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC5B,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChD,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,iCAAM,OAAO,GAAK,YAAY,EAAG,CAAC;YACxD,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACxB,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;gBAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,4EAA4E;oBAC5E,MAAM,WAAW,GAAG,EAAE,CAAC;oBACvB,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACtE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;oBACpE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBAEvE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBAC9B,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBAC9B,CAAC,CAAC,CAAC;oBAEH,aAAa,CAAC,IAAI,iCAAM,WAAW,KAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAG,CAAC;gBAClE,CAAC;YACL,CAAC;QACL,CAAC;QAED,iBAAiB,GAAG,aAAa,CAAC;IACtC,CAAC;IACD,IAAI,UAAU,GAAG,iBAAiB,CAAC;IAEnC,4BAA4B;IAC5B,IAAI,YAAY,GAAG,UAAU,CAAC;IAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7H,YAAY,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACvD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,SAAS,GAAG,YAAY,CAAC;IAE7B,iBAAiB;IACjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAG,EAAE,EAAE,CAAC,CAAC;QAChG,SAAS,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACnH,CAAC;IAED,iBAAiB;IACjB,IAAI,aAAa,CAAC;IAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,oFAAoF;QACpF,mCAAmC;QACnC,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACxD,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,KAAI,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC;gBAC9B,IAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAG,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC,CAAC;IAER,CAAC;SAAM,CAAC;QACJ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iCAAM,GAAG,KAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAG,EAAE,EAAE,CAAC,CAAC;QAChG,aAAa,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACpH,CAAC;IAED,kEAAkE;IAClE,IAAI,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjE,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,WAAW,GAAG,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACJ,IAAI,YAAY,GAAG,aAAa,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAChD,CAAC;QACD,WAAW,GAAG,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW;IACX,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM;IAC/C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7C,mEAAmE;IACnE,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CACvE,CAAC;IAEF,0EAA0E;IAC1E,wDAAwD;IACxD,yFAAyF;IACzF,iCAAiC;IACjC,IAAI,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEnE,mFAAmF;IACnF,4CAA4C;IAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,iEAAiE;QACjE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE3D,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAE/B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,IAAI,WAAW,GAAG,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC;AAGD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI;IACpG,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,mDAAmD;IACnD,OAAO,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { parse } from "./parser";
2
+ export { createPlan } from "./planner";
3
+ export { executePlan } from "./executor";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/query-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}