@docstack/client 0.1.5 → 0.1.6

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 (77) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +1 -1
  3. package/lib/core/attribute.d.ts +11 -2
  4. package/lib/core/class.d.ts +29 -6
  5. package/lib/core/content-transfer.d.ts +178 -0
  6. package/lib/core/crypto-engine/index.d.ts +82 -1
  7. package/lib/core/crypto-engine/utils.d.ts +36 -1
  8. package/lib/core/datamodel/index.d.ts +16 -0
  9. package/lib/core/domain.d.ts +1 -1
  10. package/lib/core/guarded-db.d.ts +52 -0
  11. package/lib/core/index.d.ts +106 -1
  12. package/lib/core/policy-engine/index.d.ts +35 -0
  13. package/lib/core/query-engine/classes.d.ts +24 -0
  14. package/lib/core/query-engine/executor.d.ts +11 -0
  15. package/lib/core/query-engine/index.d.ts +2 -1
  16. package/lib/core/query-engine/planner.d.ts +19 -0
  17. package/lib/core/stack.d.ts +676 -7
  18. package/lib/core/sync/class-filter.d.ts +106 -0
  19. package/lib/core/sync/filter-identity.d.ts +53 -0
  20. package/lib/core/sync/index.d.ts +334 -0
  21. package/lib/core/sync/internal-docs.d.ts +159 -0
  22. package/lib/index.d.ts +27 -1
  23. package/lib/index.js +4976 -607
  24. package/lib/index.umd.js +5004 -621
  25. package/lib/plugins/pouchdb.d.ts +43 -3
  26. package/lib/utils/logger/index.d.ts +28 -4
  27. package/lib/utils/logger/transport.d.ts +52 -11
  28. package/package.json +18 -10
  29. package/lib/core/attribute.js +0 -406
  30. package/lib/core/attribute.js.map +0 -1
  31. package/lib/core/class.js +0 -774
  32. package/lib/core/class.js.map +0 -1
  33. package/lib/core/crypto-engine/index.js +0 -229
  34. package/lib/core/crypto-engine/index.js.map +0 -1
  35. package/lib/core/crypto-engine/utils.js +0 -88
  36. package/lib/core/crypto-engine/utils.js.map +0 -1
  37. package/lib/core/datamodel/index.js +0 -1308
  38. package/lib/core/datamodel/index.js.map +0 -1
  39. package/lib/core/domain.js +0 -423
  40. package/lib/core/domain.js.map +0 -1
  41. package/lib/core/index.js +0 -532
  42. package/lib/core/index.js.map +0 -1
  43. package/lib/core/job-engine/index.js +0 -220
  44. package/lib/core/job-engine/index.js.map +0 -1
  45. package/lib/core/policy-engine/index.js +0 -232
  46. package/lib/core/policy-engine/index.js.map +0 -1
  47. package/lib/core/query-engine/accumulators.js +0 -258
  48. package/lib/core/query-engine/accumulators.js.map +0 -1
  49. package/lib/core/query-engine/evaluator.js +0 -179
  50. package/lib/core/query-engine/evaluator.js.map +0 -1
  51. package/lib/core/query-engine/executor.js +0 -405
  52. package/lib/core/query-engine/executor.js.map +0 -1
  53. package/lib/core/query-engine/index.js +0 -4
  54. package/lib/core/query-engine/index.js.map +0 -1
  55. package/lib/core/query-engine/parser.js +0 -515
  56. package/lib/core/query-engine/parser.js.map +0 -1
  57. package/lib/core/query-engine/planner.js +0 -330
  58. package/lib/core/query-engine/planner.js.map +0 -1
  59. package/lib/core/stack.js +0 -1827
  60. package/lib/core/stack.js.map +0 -1
  61. package/lib/core/test-utils/docstack.js +0 -222
  62. package/lib/core/test-utils/docstack.js.map +0 -1
  63. package/lib/core/trigger/index.js +0 -81
  64. package/lib/core/trigger/index.js.map +0 -1
  65. package/lib/index.js.map +0 -1
  66. package/lib/plugins/pouchdb.js +0 -412
  67. package/lib/plugins/pouchdb.js.map +0 -1
  68. package/lib/utils/crypto/index.js +0 -34
  69. package/lib/utils/crypto/index.js.map +0 -1
  70. package/lib/utils/index.js +0 -58
  71. package/lib/utils/index.js.map +0 -1
  72. package/lib/utils/logger/index.js +0 -20
  73. package/lib/utils/logger/index.js.map +0 -1
  74. package/lib/utils/logger/transport.js +0 -28
  75. package/lib/utils/logger/transport.js.map +0 -1
  76. package/lib/workers/dataModel.js +0 -48
  77. package/lib/workers/dataModel.js.map +0 -1
@@ -1,330 +0,0 @@
1
- // @ts-nocheck
2
- /**
3
- * Traverses an expression AST to find all referenced table aliases.
4
- * @param {object} expr The expression AST node.
5
- * @param {Set<string>} refs A set to accumulate the found table aliases.
6
- */
7
- function findExpressionRefs(expr, refs) {
8
- if (!expr)
9
- return;
10
- if (expr.type === 'column_ref' && expr.table) {
11
- refs.add(expr.table);
12
- }
13
- if (expr.left)
14
- findExpressionRefs(expr.left, refs);
15
- if (expr.right)
16
- findExpressionRefs(expr.right, refs);
17
- if (expr.expr)
18
- findExpressionRefs(expr.expr, refs);
19
- if (expr.args && expr.args.expr)
20
- findExpressionRefs(expr.args.expr, refs);
21
- if (Array.isArray(expr.exprs))
22
- expr.exprs.forEach(e => findExpressionRefs(e, refs));
23
- }
24
- /**
25
- * Analyzes a subquery to find its correlation with the outer query.
26
- * @param {object} subqueryAst The AST of the subquery.
27
- * @param {Set<string>} outerTableAliases A set of table aliases available in the outer query scope.
28
- * @returns {object|null} Correlation details if found, otherwise null.
29
- */
30
- function findCorrelation(subqueryAst, outerTableAliases) {
31
- const correlations = [];
32
- const subqueryTableAliases = new Set([
33
- ...subqueryAst.from.map(f => f.as),
34
- ...subqueryAst.joins.map(j => j.as)
35
- ]);
36
- // Traverse the subquery's WHERE clause to find predicates linking inner and outer tables.
37
- function traverse(predicate) {
38
- if (!predicate)
39
- return;
40
- if (predicate.type === 'binary_expr') {
41
- const leftRefs = new Set();
42
- findExpressionRefs(predicate.left, leftRefs);
43
- const rightRefs = new Set();
44
- findExpressionRefs(predicate.right, rightRefs);
45
- const leftIsOuter = [...leftRefs].some(r => outerTableAliases.has(r));
46
- const leftIsInner = [...leftRefs].some(r => subqueryTableAliases.has(r));
47
- const rightIsOuter = [...rightRefs].some(r => outerTableAliases.has(r));
48
- const rightIsInner = [...rightRefs].some(r => subqueryTableAliases.has(r));
49
- // A correlation predicate connects one inner and one outer table.
50
- if ((leftIsInner && rightIsOuter) || (leftIsOuter && rightIsInner)) {
51
- correlations.push(predicate);
52
- return; // This predicate is a correlation, don't look deeper
53
- }
54
- }
55
- if (predicate.left)
56
- traverse(predicate.left);
57
- if (predicate.right)
58
- traverse(predicate.right);
59
- }
60
- traverse(subqueryAst.where);
61
- if (correlations.length > 0) {
62
- // Remove correlation predicates from the subquery's own WHERE clause.
63
- const originalWhere = subqueryAst.where;
64
- const correlationSet = new Set(correlations);
65
- function filterWhere(predicate) {
66
- if (!predicate || correlationSet.has(predicate))
67
- return null;
68
- if (predicate.type === 'and') {
69
- const newLeft = filterWhere(predicate.left);
70
- const newRight = filterWhere(predicate.right);
71
- if (newLeft && newRight)
72
- return Object.assign(Object.assign({}, predicate), { left: newLeft, right: newRight });
73
- return newLeft || newRight;
74
- }
75
- return predicate;
76
- }
77
- subqueryAst.where = filterWhere(originalWhere);
78
- return { predicates: correlations };
79
- }
80
- return null;
81
- }
82
- /**
83
- * Pre-processes an AST to find and rewrite correlated subqueries into joins.
84
- * @param {object} ast The main query AST.
85
- * @returns {object} The transformed AST.
86
- */
87
- function decorrelateSubqueries(ast) {
88
- if (!ast.where)
89
- return ast;
90
- const outerTableAliases = new Set([
91
- ...ast.from.map(f => f.as),
92
- ...ast.joins.map(j => j.as)
93
- ]);
94
- // This function will be called recursively to traverse the WHERE clause tree.
95
- function transformPredicate(predicate) {
96
- if (!predicate)
97
- return null;
98
- if (predicate.type === 'exists_expr') {
99
- const correlation = findCorrelation(predicate.subquery, outerTableAliases);
100
- if (correlation) {
101
- // De-correlate! Rewrite the EXISTS subquery into a SEMI or ANTI join.
102
- if (correlation.predicates.length === 0) {
103
- throw new Error('Found correlated subquery but could not extract correlation predicate.');
104
- }
105
- // For simplicity, we assume the first correlation predicate is the join condition.
106
- // A real engine would handle multiple predicates.
107
- const joinCondition = correlation.predicates[0];
108
- ast.joins.push({
109
- type: predicate.not ? 'ANTI' : 'SEMI',
110
- // The "table" is the subquery itself. We'll flatten its FROM/JOINs.
111
- // This is a simplification; a real planner would create a sub-plan.
112
- table: predicate.subquery.from[0].table,
113
- as: predicate.subquery.from[0].as,
114
- on: joinCondition,
115
- // The subquery's own filters become part of the join operation.
116
- filters: predicate.subquery.where ? [predicate.subquery.where] : [],
117
- });
118
- // Since we've transformed this predicate into a join, we remove it from the WHERE clause.
119
- return null;
120
- }
121
- // If not correlated, it can be executed once. For now, we leave it as is.
122
- return predicate;
123
- }
124
- // Recurse for AND/OR conditions
125
- if (predicate.left)
126
- predicate.left = transformPredicate(predicate.left);
127
- if (predicate.right)
128
- predicate.right = transformPredicate(predicate.right);
129
- // Filter out parts that were transformed (returned null)
130
- if (predicate.type === 'and') {
131
- if (!predicate.left)
132
- return predicate.right;
133
- if (!predicate.right)
134
- return predicate.left;
135
- }
136
- return predicate;
137
- }
138
- ast.where = transformPredicate(ast.where);
139
- return ast;
140
- }
141
- /**
142
- * Analyzes an expression from the AST to determine which tables it references.
143
- * @param {object} expr The AST expression node.
144
- * @param {Array<object>} from The list of tables in the FROM clause.
145
- * @param {Array<object>} joins The list of tables in JOIN clauses.
146
- * @returns {Array<string>} A list of table names referenced in the expression.
147
- */
148
- function getReferencedTables(expr, from, joins) {
149
- const tables = new Set();
150
- if (!expr)
151
- return [];
152
- const allTables = [...from, ...joins.map(j => ({ table: j.table, as: j.as }))];
153
- function traverse(node) {
154
- if (!node)
155
- return;
156
- if (node.type === 'column_ref' && node.table) {
157
- const tableInfo = allTables.find(t => t.as === node.table);
158
- if (tableInfo) {
159
- tables.add(tableInfo.table);
160
- }
161
- }
162
- if (node.left)
163
- traverse(node.left);
164
- if (node.right)
165
- traverse(node.right);
166
- if (node.expr)
167
- traverse(node.expr);
168
- }
169
- traverse(expr);
170
- return Array.from(tables);
171
- }
172
- /**
173
- * Checks if a predicate is a simple binary expression that can be converted
174
- * directly into a Mango selector by `buildSelector`.
175
- * @param {object} predicate The predicate AST node.
176
- * @returns {boolean} True if the predicate is simple enough for pushdown.
177
- */
178
- function isSimplePredicate(predicate) {
179
- if (predicate && predicate.type === 'binary_expr' &&
180
- predicate.left && predicate.left.type === 'column_ref' &&
181
- predicate.right && predicate.right.type === 'param') {
182
- // Check for operators supported by buildSelector
183
- const supportedOps = ['=', '>', '<', '>=', '<='];
184
- return supportedOps.includes(predicate.operator);
185
- }
186
- return false;
187
- }
188
- function createSingleSelectPlan(ast) {
189
- // Before creating the plan, run the de-correlation pass.
190
- ast = decorrelateSubqueries(ast);
191
- const plan = {
192
- type: 'select',
193
- distinct: ast.distinct,
194
- distinctOn: ast.distinctOn,
195
- fromTable: ast.from[0],
196
- joins: [],
197
- filters: {
198
- left: [],
199
- right: {},
200
- residual: []
201
- },
202
- projections: ast.columns,
203
- aggregation: null,
204
- orderBy: ast.orderBy,
205
- limit: ast.limit,
206
- };
207
- const fromTableName = ast.from[0].table;
208
- // Classify join predicates
209
- for (const join of ast.joins) {
210
- plan.joins.push(Object.assign(Object.assign({}, join), { filters: join.filters || [] }));
211
- }
212
- // Unpack AND clauses into a flat list of predicates.
213
- const wherePredicates = [];
214
- function collectPredicates(p) {
215
- if (!p)
216
- return;
217
- if (p.type === 'and') {
218
- collectPredicates(p.left);
219
- collectPredicates(p.right);
220
- }
221
- else {
222
- wherePredicates.push(p);
223
- }
224
- }
225
- collectPredicates(ast.where);
226
- // Classify WHERE predicates
227
- for (const predicate of wherePredicates) {
228
- // Only simple predicates (e.g., col > literal) can be pushed down.
229
- // Complex predicates involving subqueries or functions become residual.
230
- const isSimple = isSimplePredicate(predicate);
231
- const referenced = getReferencedTables(predicate, ast.from, ast.joins);
232
- if (isSimple && referenced.length === 1 && referenced[0] === fromTableName) {
233
- plan.filters.left.push(predicate);
234
- }
235
- else if (isSimple && referenced.length === 1 && plan.joins.some(j => j.table === referenced[0])) {
236
- const join = plan.joins.find(j => j.table === referenced[0]);
237
- if (!plan.filters.right[join.table])
238
- plan.filters.right[join.table] = [];
239
- plan.filters.right[join.table].push(predicate);
240
- }
241
- else {
242
- plan.filters.residual.push(predicate);
243
- }
244
- }
245
- // Setup aggregation
246
- const hasAggregates = ast.columns.some(c => c.expr.type === 'aggr_func');
247
- if (hasAggregates || ast.groupBy || ast.having) {
248
- // Semantic Validation for GROUP BY and aggregate functions
249
- if (ast.groupBy || hasAggregates) {
250
- const groupByCols = new Set(ast.groupBy ? ast.groupBy.columns.map(c => c.column) : []);
251
- for (const p of ast.columns) {
252
- if (p.expr.type !== 'aggr_func') {
253
- // This is a regular column projection
254
- const colName = p.as || p.expr.column;
255
- if (!ast.groupBy) {
256
- throw new Error(`Column '${colName}' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.`);
257
- }
258
- if (!groupByCols.has(p.expr.column)) {
259
- throw new Error(`Column '${colName}' must appear in the GROUP BY clause or be used in an aggregate function.`);
260
- }
261
- }
262
- }
263
- }
264
- plan.aggregation = {
265
- groupBy: ast.groupBy ? ast.groupBy.columns : [], // Empty array for scalar aggregation
266
- aggregates: ast.columns.filter(c => c.expr.type === 'aggr_func'),
267
- having: ast.having
268
- };
269
- }
270
- return plan;
271
- }
272
- /**
273
- * Creates a logical query plan from a list of Abstract Syntax Trees (ASTs) for a UNION query.
274
- * @param {Array<object>} astList The list of ASTs generated by the parser.
275
- * @returns {object} A query plan object for the executor.
276
- */
277
- export function createPlan(astList) {
278
- if (!astList || astList.length === 0)
279
- return null;
280
- // Handle a single SELECT query (backwards compatibility)
281
- if (astList.length === 1 && astList[0].type === 'select') {
282
- const ast = astList[0];
283
- return createSingleSelectPlan(ast);
284
- }
285
- // It's a UNION query
286
- const plan = {
287
- type: 'union',
288
- selectPlans: [],
289
- unionOps: [],
290
- orderBy: null,
291
- limit: null,
292
- };
293
- // Create a map from the SelectAST object to its future index in selectPlans
294
- const selectAsts = astList.filter(ast => ast.type === 'select');
295
- const selectAstIndexMap = new Map();
296
- selectAsts.forEach((ast, index) => {
297
- selectAstIndexMap.set(ast, index);
298
- });
299
- plan.selectPlans = selectAsts.map(ast => createSingleSelectPlan(ast));
300
- const unionAsts = astList.filter(ast => ast.type === 'union');
301
- plan.unionOps = unionAsts.map(ast => {
302
- const topSelectAst = astList[ast.top];
303
- const bottomSelectAst = astList[ast.bottom];
304
- const topPlanIndex = selectAstIndexMap.get(topSelectAst);
305
- const bottomPlanIndex = selectAstIndexMap.get(bottomSelectAst);
306
- if (topPlanIndex === undefined || bottomPlanIndex === undefined) {
307
- throw new Error('Internal Planner Error: Could not map UNION AST to SELECT plans.');
308
- }
309
- return {
310
- distinct: ast.distinct,
311
- topPlanIndex,
312
- bottomPlanIndex,
313
- };
314
- });
315
- // According to SQL standard, ORDER BY and LIMIT in a UNION query apply to the entire result set
316
- // and can only appear at the very end.
317
- const lastSelectAst = astList[astList.length - 1];
318
- if (lastSelectAst.type === 'select') {
319
- plan.orderBy = lastSelectAst.orderBy;
320
- plan.limit = lastSelectAst.limit;
321
- // Remove from individual plan to avoid applying it early
322
- const lastSelectPlan = plan.selectPlans[plan.selectPlans.length - 1];
323
- if (lastSelectPlan) {
324
- lastSelectPlan.orderBy = null;
325
- lastSelectPlan.limit = null;
326
- }
327
- }
328
- return plan;
329
- }
330
- //# sourceMappingURL=planner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/core/query-engine/planner.ts"],"names":[],"mappings":"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"}