@objectql/core 4.0.1 → 4.0.3

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 (103) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +32 -0
  3. package/README.md +14 -12
  4. package/dist/app.d.ts +9 -6
  5. package/dist/app.js +151 -29
  6. package/dist/app.js.map +1 -1
  7. package/dist/index.d.ts +6 -9
  8. package/dist/index.js +2 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/optimizations/CompiledHookManager.d.ts +55 -0
  11. package/dist/optimizations/CompiledHookManager.js +164 -0
  12. package/dist/optimizations/CompiledHookManager.js.map +1 -0
  13. package/dist/optimizations/DependencyGraph.d.ts +82 -0
  14. package/dist/optimizations/DependencyGraph.js +211 -0
  15. package/dist/optimizations/DependencyGraph.js.map +1 -0
  16. package/dist/optimizations/GlobalConnectionPool.d.ts +89 -0
  17. package/dist/optimizations/GlobalConnectionPool.js +193 -0
  18. package/dist/optimizations/GlobalConnectionPool.js.map +1 -0
  19. package/dist/optimizations/LazyMetadataLoader.d.ts +75 -0
  20. package/dist/optimizations/LazyMetadataLoader.js +149 -0
  21. package/dist/optimizations/LazyMetadataLoader.js.map +1 -0
  22. package/dist/optimizations/OptimizedMetadataRegistry.d.ts +26 -0
  23. package/dist/optimizations/OptimizedMetadataRegistry.js +117 -0
  24. package/dist/optimizations/OptimizedMetadataRegistry.js.map +1 -0
  25. package/dist/optimizations/OptimizedValidationEngine.d.ts +73 -0
  26. package/dist/optimizations/OptimizedValidationEngine.js +141 -0
  27. package/dist/optimizations/OptimizedValidationEngine.js.map +1 -0
  28. package/dist/optimizations/QueryCompiler.d.ts +51 -0
  29. package/dist/optimizations/QueryCompiler.js +216 -0
  30. package/dist/optimizations/QueryCompiler.js.map +1 -0
  31. package/dist/optimizations/SQLQueryOptimizer.d.ts +96 -0
  32. package/dist/optimizations/SQLQueryOptimizer.js +265 -0
  33. package/dist/optimizations/SQLQueryOptimizer.js.map +1 -0
  34. package/dist/optimizations/index.d.ts +32 -0
  35. package/dist/optimizations/index.js +44 -0
  36. package/dist/optimizations/index.js.map +1 -0
  37. package/dist/plugin.d.ts +6 -7
  38. package/dist/plugin.js +39 -22
  39. package/dist/plugin.js.map +1 -1
  40. package/dist/query/filter-translator.d.ts +6 -18
  41. package/dist/query/filter-translator.js +6 -103
  42. package/dist/query/filter-translator.js.map +1 -1
  43. package/dist/query/query-analyzer.js +24 -25
  44. package/dist/query/query-analyzer.js.map +1 -1
  45. package/dist/query/query-builder.d.ts +9 -3
  46. package/dist/query/query-builder.js +25 -35
  47. package/dist/query/query-builder.js.map +1 -1
  48. package/dist/query/query-service.d.ts +2 -2
  49. package/dist/query/query-service.js +5 -5
  50. package/dist/query/query-service.js.map +1 -1
  51. package/dist/repository.d.ts +2 -0
  52. package/dist/repository.js +24 -17
  53. package/dist/repository.js.map +1 -1
  54. package/jest.config.js +3 -3
  55. package/package.json +8 -5
  56. package/src/app.ts +173 -47
  57. package/src/index.ts +7 -8
  58. package/src/optimizations/CompiledHookManager.ts +185 -0
  59. package/src/optimizations/DependencyGraph.ts +255 -0
  60. package/src/optimizations/GlobalConnectionPool.ts +251 -0
  61. package/src/optimizations/LazyMetadataLoader.ts +180 -0
  62. package/src/optimizations/OptimizedMetadataRegistry.ts +132 -0
  63. package/src/optimizations/OptimizedValidationEngine.ts +172 -0
  64. package/src/optimizations/QueryCompiler.ts +242 -0
  65. package/src/optimizations/SQLQueryOptimizer.ts +329 -0
  66. package/src/optimizations/index.ts +34 -0
  67. package/src/plugin.ts +51 -28
  68. package/src/query/filter-translator.ts +8 -115
  69. package/src/query/query-analyzer.ts +25 -29
  70. package/src/query/query-builder.ts +26 -43
  71. package/src/query/query-service.ts +6 -6
  72. package/src/repository.ts +35 -22
  73. package/test/__mocks__/@objectstack/runtime.ts +8 -8
  74. package/test/app.test.ts +11 -8
  75. package/test/optimizations.test.ts +440 -0
  76. package/test/plugin-integration.test.ts +30 -19
  77. package/tsconfig.json +4 -6
  78. package/tsconfig.tsbuildinfo +1 -1
  79. package/dist/ai-agent.d.ts +0 -176
  80. package/dist/ai-agent.js +0 -722
  81. package/dist/ai-agent.js.map +0 -1
  82. package/dist/formula-engine.d.ts +0 -102
  83. package/dist/formula-engine.js +0 -433
  84. package/dist/formula-engine.js.map +0 -1
  85. package/dist/formula-plugin.d.ts +0 -52
  86. package/dist/formula-plugin.js +0 -107
  87. package/dist/formula-plugin.js.map +0 -1
  88. package/dist/validator-plugin.d.ts +0 -56
  89. package/dist/validator-plugin.js +0 -106
  90. package/dist/validator-plugin.js.map +0 -1
  91. package/dist/validator.d.ts +0 -80
  92. package/dist/validator.js +0 -625
  93. package/dist/validator.js.map +0 -1
  94. package/src/ai-agent.ts +0 -868
  95. package/src/formula-engine.ts +0 -572
  96. package/src/formula-plugin.ts +0 -141
  97. package/src/validator-plugin.ts +0 -140
  98. package/src/validator.ts +0 -743
  99. package/test/formula-engine.test.ts +0 -725
  100. package/test/formula-integration.test.ts +0 -286
  101. package/test/formula-plugin.test.ts +0 -197
  102. package/test/validator-plugin.test.ts +0 -126
  103. package/test/validator.test.ts +0 -440
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ /**
3
+ * ObjectQL
4
+ * Copyright (c) 2026-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SQLQueryOptimizer = void 0;
11
+ /**
12
+ * SQL Query Optimizer
13
+ *
14
+ * Improvement: SQL-aware optimization with index hints and join reordering.
15
+ * Analyzes query patterns and schema to generate optimal SQL.
16
+ *
17
+ * Expected: 2-5x faster queries on large datasets
18
+ */
19
+ class SQLQueryOptimizer {
20
+ constructor() {
21
+ this.schemas = new Map();
22
+ }
23
+ /**
24
+ * Register a schema with index information
25
+ */
26
+ registerSchema(schema) {
27
+ this.schemas.set(schema.name, schema);
28
+ }
29
+ /**
30
+ * Check if a field has an index
31
+ */
32
+ hasIndex(objectName, fieldName) {
33
+ const schema = this.schemas.get(objectName);
34
+ if (!schema || !schema.indexes)
35
+ return false;
36
+ return schema.indexes.some(index => index.fields.includes(fieldName));
37
+ }
38
+ /**
39
+ * Get the best index for given filter fields
40
+ */
41
+ getBestIndex(objectName, filterFields) {
42
+ const schema = this.schemas.get(objectName);
43
+ if (!schema || !schema.indexes)
44
+ return null;
45
+ // Find indexes that cover the filter fields
46
+ const candidateIndexes = schema.indexes.filter(index => {
47
+ // Check if index covers any of the filter fields
48
+ return filterFields.some(field => index.fields.includes(field));
49
+ });
50
+ if (candidateIndexes.length === 0)
51
+ return null;
52
+ // Prefer indexes that match more filter fields
53
+ candidateIndexes.sort((a, b) => {
54
+ const aMatches = a.fields.filter(f => filterFields.includes(f)).length;
55
+ const bMatches = b.fields.filter(f => filterFields.includes(f)).length;
56
+ return bMatches - aMatches;
57
+ });
58
+ return candidateIndexes[0];
59
+ }
60
+ /**
61
+ * Extract filter fields from filter conditions
62
+ */
63
+ extractFilterFields(filters) {
64
+ const fields = [];
65
+ const extract = (obj) => {
66
+ if (!obj || typeof obj !== 'object')
67
+ return;
68
+ for (const key of Object.keys(obj)) {
69
+ if (!key.startsWith('$')) {
70
+ fields.push(key);
71
+ }
72
+ if (typeof obj[key] === 'object') {
73
+ extract(obj[key]);
74
+ }
75
+ }
76
+ };
77
+ extract(filters);
78
+ return [...new Set(fields)]; // Remove duplicates
79
+ }
80
+ /**
81
+ * Optimize join type based on query characteristics
82
+ *
83
+ * Note: This method expects filter fields in one of two formats:
84
+ * 1. Table-prefixed: "tableName.fieldName" (e.g., "accounts.type")
85
+ * 2. Simple field name: "fieldName" (checked against joined table schema)
86
+ *
87
+ * Multi-level qualification (e.g., "schema.table.field") is not currently supported.
88
+ */
89
+ optimizeJoinType(join, ast) {
90
+ // If we're filtering on the joined table, we can use INNER JOIN
91
+ if (ast.filters) {
92
+ const filterFields = this.extractFilterFields(ast.filters);
93
+ // Check if any filter field references the joined table
94
+ const hasFilterOnJoinTable = filterFields.some(field => {
95
+ // Handle table-prefixed fields like "accounts.type"
96
+ if (field.includes('.')) {
97
+ const parts = field.split('.');
98
+ // Only consider the first part as table name for simplicity
99
+ // This assumes format: "table.field" not "schema.table.field"
100
+ if (parts.length === 2 && parts[0] === join.table) {
101
+ return true;
102
+ }
103
+ // If more than 2 parts or table doesn't match, skip this field
104
+ return false;
105
+ }
106
+ // Also check if the field exists in the joined table schema (non-prefixed)
107
+ const schema = this.schemas.get(join.table);
108
+ if (schema) {
109
+ return schema.fields[field] !== undefined;
110
+ }
111
+ return false;
112
+ });
113
+ if (hasFilterOnJoinTable) {
114
+ return 'inner'; // Convert LEFT to INNER for better performance
115
+ }
116
+ }
117
+ return join.type;
118
+ }
119
+ /**
120
+ * Optimize a query AST to SQL
121
+ */
122
+ optimize(ast) {
123
+ const schema = this.schemas.get(ast.object);
124
+ if (!schema) {
125
+ // Fallback to basic SQL generation
126
+ return this.generateBasicSQL(ast);
127
+ }
128
+ let sql = 'SELECT ';
129
+ // Fields
130
+ if (ast.fields && ast.fields.length > 0) {
131
+ sql += ast.fields.join(', ');
132
+ }
133
+ else {
134
+ sql += '*';
135
+ }
136
+ sql += ` FROM ${ast.object}`;
137
+ // Index hints
138
+ if (ast.filters) {
139
+ const filterFields = this.extractFilterFields(ast.filters);
140
+ const bestIndex = this.getBestIndex(ast.object, filterFields);
141
+ if (bestIndex) {
142
+ // Add index hint for MySQL/MariaDB
143
+ sql += ` USE INDEX (${bestIndex.name})`;
144
+ }
145
+ }
146
+ // Optimized joins
147
+ if (ast.joins && ast.joins.length > 0) {
148
+ for (const join of ast.joins) {
149
+ const optimizedType = this.optimizeJoinType(join, ast);
150
+ sql += ` ${optimizedType.toUpperCase()} JOIN ${join.table}`;
151
+ // Simplified join condition
152
+ if (typeof join.on === 'string') {
153
+ sql += ` ON ${join.on}`;
154
+ }
155
+ }
156
+ }
157
+ // WHERE clause
158
+ if (ast.filters) {
159
+ sql += ' WHERE ' + this.filtersToSQL(ast.filters);
160
+ }
161
+ // ORDER BY
162
+ if (ast.sort && ast.sort.length > 0) {
163
+ sql += ' ORDER BY ';
164
+ sql += ast.sort.map(s => `${s.field} ${s.order.toUpperCase()}`).join(', ');
165
+ }
166
+ // LIMIT and OFFSET
167
+ if (ast.limit !== undefined) {
168
+ sql += ` LIMIT ${ast.limit}`;
169
+ }
170
+ if (ast.offset !== undefined) {
171
+ sql += ` OFFSET ${ast.offset}`;
172
+ }
173
+ return sql;
174
+ }
175
+ /**
176
+ * Convert filter object to SQL WHERE clause
177
+ */
178
+ filtersToSQL(filters) {
179
+ if (typeof filters === 'string') {
180
+ return filters;
181
+ }
182
+ // Simplified filter conversion
183
+ const conditions = [];
184
+ for (const [key, value] of Object.entries(filters)) {
185
+ if (key === '$and') {
186
+ const subconditions = value.map(f => this.filtersToSQL(f));
187
+ conditions.push(`(${subconditions.join(' AND ')})`);
188
+ }
189
+ else if (key === '$or') {
190
+ const subconditions = value.map(f => this.filtersToSQL(f));
191
+ conditions.push(`(${subconditions.join(' OR ')})`);
192
+ }
193
+ else if (!key.startsWith('$')) {
194
+ // Field condition
195
+ if (typeof value === 'object' && value !== null) {
196
+ for (const [op, val] of Object.entries(value)) {
197
+ switch (op) {
198
+ case '$eq':
199
+ conditions.push(`${key} = '${val}'`);
200
+ break;
201
+ case '$ne':
202
+ conditions.push(`${key} != '${val}'`);
203
+ break;
204
+ case '$gt':
205
+ conditions.push(`${key} > '${val}'`);
206
+ break;
207
+ case '$gte':
208
+ conditions.push(`${key} >= '${val}'`);
209
+ break;
210
+ case '$lt':
211
+ conditions.push(`${key} < '${val}'`);
212
+ break;
213
+ case '$lte':
214
+ conditions.push(`${key} <= '${val}'`);
215
+ break;
216
+ case '$in':
217
+ const inValues = val.map(v => `'${v}'`).join(', ');
218
+ conditions.push(`${key} IN (${inValues})`);
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ else {
224
+ conditions.push(`${key} = '${value}'`);
225
+ }
226
+ }
227
+ }
228
+ return conditions.join(' AND ');
229
+ }
230
+ /**
231
+ * Fallback: generate basic SQL without optimizations
232
+ */
233
+ generateBasicSQL(ast) {
234
+ let sql = 'SELECT ';
235
+ if (ast.fields && ast.fields.length > 0) {
236
+ sql += ast.fields.join(', ');
237
+ }
238
+ else {
239
+ sql += '*';
240
+ }
241
+ sql += ` FROM ${ast.object}`;
242
+ if (ast.filters) {
243
+ sql += ' WHERE ' + this.filtersToSQL(ast.filters);
244
+ }
245
+ if (ast.sort && ast.sort.length > 0) {
246
+ sql += ' ORDER BY ';
247
+ sql += ast.sort.map(s => `${s.field} ${s.order.toUpperCase()}`).join(', ');
248
+ }
249
+ if (ast.limit !== undefined) {
250
+ sql += ` LIMIT ${ast.limit}`;
251
+ }
252
+ if (ast.offset !== undefined) {
253
+ sql += ` OFFSET ${ast.offset}`;
254
+ }
255
+ return sql;
256
+ }
257
+ /**
258
+ * Clear all registered schemas
259
+ */
260
+ clearSchemas() {
261
+ this.schemas.clear();
262
+ }
263
+ }
264
+ exports.SQLQueryOptimizer = SQLQueryOptimizer;
265
+ //# sourceMappingURL=SQLQueryOptimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLQueryOptimizer.js","sourceRoot":"","sources":["../../src/optimizations/SQLQueryOptimizer.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAkCH;;;;;;;GAOG;AACH,MAAa,iBAAiB;IAA9B;QACY,YAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAuR3D,CAAC;IArRG;;OAEG;IACH,cAAc,CAAC,MAAyB;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,UAAkB,EAAE,SAAiB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC/B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CACnC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,UAAkB,EAAE,YAAsB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE5C,4CAA4C;QAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACnD,iDAAiD;YACjD,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/C,+CAA+C;QAC/C,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvE,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvE,OAAO,QAAQ,GAAG,QAAQ,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAY;QACpC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,EAAE;YACzB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO;YAE5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;gBACD,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB;IACrD,CAAC;IAED;;;;;;;;OAQG;IACK,gBAAgB,CACpB,IAAwD,EACxD,GAAwB;QAExB,gEAAgE;QAChE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE3D,wDAAwD;YACxD,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACnD,oDAAoD;gBACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC/B,4DAA4D;oBAC5D,8DAA8D;oBAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChD,OAAO,IAAI,CAAC;oBAChB,CAAC;oBACD,+DAA+D;oBAC/D,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,2EAA2E;gBAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,MAAM,EAAE,CAAC;oBACT,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;gBAC9C,CAAC;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,IAAI,oBAAoB,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,CAAC,+CAA+C;YACnE,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,GAAwB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,mCAAmC;YACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,GAAG,GAAG,SAAS,CAAC;QAEpB,SAAS;QACT,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,GAAG,IAAI,GAAG,CAAC;QACf,CAAC;QAED,GAAG,IAAI,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC;QAE7B,cAAc;QACd,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAE9D,IAAI,SAAS,EAAE,CAAC;gBACZ,mCAAmC;gBACnC,GAAG,IAAI,eAAe,SAAS,CAAC,IAAI,GAAG,CAAC;YAC5C,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACvD,GAAG,IAAI,IAAI,aAAa,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;gBAE5D,4BAA4B;gBAC5B,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAC9B,GAAG,IAAI,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QAED,eAAe;QACf,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,WAAW;QACX,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,GAAG,IAAI,YAAY,CAAC;YACpB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,IAAI,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAY;QAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC;QACnB,CAAC;QAED,+BAA+B;QAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACjB,MAAM,aAAa,GAAI,KAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAI,KAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,kBAAkB;gBAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5C,QAAQ,EAAE,EAAE,CAAC;4BACT,KAAK,KAAK;gCACN,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;gCACrC,MAAM;4BACV,KAAK,KAAK;gCACN,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;gCACtC,MAAM;4BACV,KAAK,KAAK;gCACN,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;gCACrC,MAAM;4BACV,KAAK,MAAM;gCACP,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;gCACtC,MAAM;4BACV,KAAK,KAAK;gCACN,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,CAAC;gCACrC,MAAM;4BACV,KAAK,MAAM;gCACP,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;gCACtC,MAAM;4BACV,KAAK,KAAK;gCACN,MAAM,QAAQ,GAAI,GAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAC9D,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,QAAQ,GAAG,CAAC,CAAC;gCAC3C,MAAM;wBACd,CAAC;oBACL,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,GAAwB;QAC7C,IAAI,GAAG,GAAG,SAAS,CAAC;QAEpB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,GAAG,IAAI,GAAG,CAAC;QACf,CAAC;QAED,GAAG,IAAI,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC;QAE7B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,GAAG,IAAI,YAAY,CAAC;YACpB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1B,GAAG,IAAI,UAAU,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,IAAI,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACH,YAAY;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ;AAxRD,8CAwRC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ObjectQL
3
+ * Copyright (c) 2026-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * Kernel Optimizations Module
10
+ *
11
+ * This module contains 10 key optimizations for the ObjectQL kernel:
12
+ *
13
+ * 1. OptimizedMetadataRegistry - O(k) package uninstall with secondary indexes
14
+ * 2. QueryCompiler - LRU cache for compiled query plans
15
+ * 3. CompiledHookManager - Pre-compiled hook pipelines
16
+ * 4. GlobalConnectionPool - Kernel-level connection pooling
17
+ * 5. OptimizedValidationEngine - Compiled validation rules
18
+ * 6. LazyMetadataLoader - On-demand metadata loading with predictive preload
19
+ * 7. DependencyGraph - DAG-based dependency resolution
20
+ * 8. SQLQueryOptimizer - SQL-aware query optimization with index hints
21
+ *
22
+ * Note: TypeScript type generation optimization (#7) and memory-mapped storage (#10)
23
+ * are not included in this release for compatibility and complexity reasons.
24
+ */
25
+ export { OptimizedMetadataRegistry } from './OptimizedMetadataRegistry';
26
+ export { QueryCompiler, type CompiledQuery } from './QueryCompiler';
27
+ export { CompiledHookManager, type Hook } from './CompiledHookManager';
28
+ export { GlobalConnectionPool, type Connection, type PoolLimits } from './GlobalConnectionPool';
29
+ export { OptimizedValidationEngine, type ValidatorFunction, type ValidationSchema } from './OptimizedValidationEngine';
30
+ export { LazyMetadataLoader, type ObjectMetadata, type MetadataLoader } from './LazyMetadataLoader';
31
+ export { DependencyGraph, type DependencyEdge, type DependencyType } from './DependencyGraph';
32
+ export { SQLQueryOptimizer, type IndexMetadata, type SchemaWithIndexes, type OptimizableQueryAST } from './SQLQueryOptimizer';
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * ObjectQL
4
+ * Copyright (c) 2026-present ObjectStack Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SQLQueryOptimizer = exports.DependencyGraph = exports.LazyMetadataLoader = exports.OptimizedValidationEngine = exports.GlobalConnectionPool = exports.CompiledHookManager = exports.QueryCompiler = exports.OptimizedMetadataRegistry = void 0;
11
+ /**
12
+ * Kernel Optimizations Module
13
+ *
14
+ * This module contains 10 key optimizations for the ObjectQL kernel:
15
+ *
16
+ * 1. OptimizedMetadataRegistry - O(k) package uninstall with secondary indexes
17
+ * 2. QueryCompiler - LRU cache for compiled query plans
18
+ * 3. CompiledHookManager - Pre-compiled hook pipelines
19
+ * 4. GlobalConnectionPool - Kernel-level connection pooling
20
+ * 5. OptimizedValidationEngine - Compiled validation rules
21
+ * 6. LazyMetadataLoader - On-demand metadata loading with predictive preload
22
+ * 7. DependencyGraph - DAG-based dependency resolution
23
+ * 8. SQLQueryOptimizer - SQL-aware query optimization with index hints
24
+ *
25
+ * Note: TypeScript type generation optimization (#7) and memory-mapped storage (#10)
26
+ * are not included in this release for compatibility and complexity reasons.
27
+ */
28
+ var OptimizedMetadataRegistry_1 = require("./OptimizedMetadataRegistry");
29
+ Object.defineProperty(exports, "OptimizedMetadataRegistry", { enumerable: true, get: function () { return OptimizedMetadataRegistry_1.OptimizedMetadataRegistry; } });
30
+ var QueryCompiler_1 = require("./QueryCompiler");
31
+ Object.defineProperty(exports, "QueryCompiler", { enumerable: true, get: function () { return QueryCompiler_1.QueryCompiler; } });
32
+ var CompiledHookManager_1 = require("./CompiledHookManager");
33
+ Object.defineProperty(exports, "CompiledHookManager", { enumerable: true, get: function () { return CompiledHookManager_1.CompiledHookManager; } });
34
+ var GlobalConnectionPool_1 = require("./GlobalConnectionPool");
35
+ Object.defineProperty(exports, "GlobalConnectionPool", { enumerable: true, get: function () { return GlobalConnectionPool_1.GlobalConnectionPool; } });
36
+ var OptimizedValidationEngine_1 = require("./OptimizedValidationEngine");
37
+ Object.defineProperty(exports, "OptimizedValidationEngine", { enumerable: true, get: function () { return OptimizedValidationEngine_1.OptimizedValidationEngine; } });
38
+ var LazyMetadataLoader_1 = require("./LazyMetadataLoader");
39
+ Object.defineProperty(exports, "LazyMetadataLoader", { enumerable: true, get: function () { return LazyMetadataLoader_1.LazyMetadataLoader; } });
40
+ var DependencyGraph_1 = require("./DependencyGraph");
41
+ Object.defineProperty(exports, "DependencyGraph", { enumerable: true, get: function () { return DependencyGraph_1.DependencyGraph; } });
42
+ var SQLQueryOptimizer_1 = require("./SQLQueryOptimizer");
43
+ Object.defineProperty(exports, "SQLQueryOptimizer", { enumerable: true, get: function () { return SQLQueryOptimizer_1.SQLQueryOptimizer; } });
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/optimizations/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH;;;;;;;;;;;;;;;;GAgBG;AAEH,yEAAwE;AAA/D,sIAAA,yBAAyB,OAAA;AAClC,iDAAoE;AAA3D,8GAAA,aAAa,OAAA;AACtB,6DAAuE;AAA9D,0HAAA,mBAAmB,OAAA;AAC5B,+DAAgG;AAAvF,4HAAA,oBAAoB,OAAA;AAC7B,yEAAuH;AAA9G,sIAAA,yBAAyB,OAAA;AAClC,2DAAoG;AAA3F,wHAAA,kBAAkB,OAAA;AAC3B,qDAA8F;AAArF,kHAAA,eAAe,OAAA;AACxB,yDAA8H;AAArH,sHAAA,iBAAiB,OAAA"}
package/dist/plugin.d.ts CHANGED
@@ -5,9 +5,9 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
- import type { RuntimePlugin, RuntimeContext } from '@objectql/runtime';
9
- import { ValidatorPluginConfig } from './validator-plugin';
10
- import { FormulaPluginConfig } from './formula-plugin';
8
+ import type { RuntimePlugin, RuntimeContext } from '@objectql/types';
9
+ import { ValidatorPluginConfig } from '@objectql/plugin-validator';
10
+ import { FormulaPluginConfig } from '@objectql/plugin-formula';
11
11
  import type { Driver } from '@objectql/types';
12
12
  /**
13
13
  * Configuration for the ObjectQL Plugin
@@ -57,15 +57,14 @@ export interface ObjectQLPluginConfig {
57
57
  /**
58
58
  * ObjectQL Plugin
59
59
  *
60
- * Implements the RuntimePlugin interface from @objectql/runtime
61
- * to provide ObjectQL's enhanced features (Repository, Validator, Formula, AI)
62
- * on top of the ObjectStack kernel.
60
+ * Implements the RuntimePlugin interface to provide ObjectQL's enhanced features
61
+ * (Repository, Validator, Formula, AI) on top of the microkernel.
63
62
  */
64
63
  export declare class ObjectQLPlugin implements RuntimePlugin {
65
64
  private config;
66
65
  name: string;
67
66
  version: string;
68
- constructor(config?: ObjectQLPluginConfig);
67
+ constructor(config?: ObjectQLPluginConfig, ql?: any);
69
68
  /**
70
69
  * Install the plugin into the kernel
71
70
  * This is called during kernel initialization
package/dist/plugin.js CHANGED
@@ -8,22 +8,21 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ObjectQLPlugin = void 0;
11
- const validator_plugin_1 = require("./validator-plugin");
12
- const formula_plugin_1 = require("./formula-plugin");
11
+ const plugin_validator_1 = require("@objectql/plugin-validator");
12
+ const plugin_formula_1 = require("@objectql/plugin-formula");
13
13
  const query_service_1 = require("./query/query-service");
14
14
  const query_analyzer_1 = require("./query/query-analyzer");
15
15
  /**
16
16
  * ObjectQL Plugin
17
17
  *
18
- * Implements the RuntimePlugin interface from @objectql/runtime
19
- * to provide ObjectQL's enhanced features (Repository, Validator, Formula, AI)
20
- * on top of the ObjectStack kernel.
18
+ * Implements the RuntimePlugin interface to provide ObjectQL's enhanced features
19
+ * (Repository, Validator, Formula, AI) on top of the microkernel.
21
20
  */
22
21
  class ObjectQLPlugin {
23
- constructor(config = {}) {
22
+ constructor(config = {}, ql) {
24
23
  this.config = config;
25
24
  this.name = '@objectql/core';
26
- this.version = '4.0.0';
25
+ this.version = '4.0.2';
27
26
  // Set defaults
28
27
  this.config = {
29
28
  enableRepository: true,
@@ -39,32 +38,51 @@ class ObjectQLPlugin {
39
38
  * This is called during kernel initialization
40
39
  */
41
40
  async install(ctx) {
41
+ var _a, _b, _c;
42
42
  console.log(`[${this.name}] Installing plugin...`);
43
43
  const kernel = ctx.engine;
44
+ // Get datasources - either from config or from kernel drivers
45
+ let datasources = this.config.datasources;
46
+ if (!datasources) {
47
+ // Try to get drivers from kernel (micro-kernel pattern)
48
+ const drivers = (_a = kernel.getAllDrivers) === null || _a === void 0 ? void 0 : _a.call(kernel);
49
+ if (drivers && drivers.length > 0) {
50
+ datasources = {};
51
+ drivers.forEach((driver, index) => {
52
+ // Use driver name if available, otherwise use 'default' for first driver
53
+ const driverName = driver.name || (index === 0 ? 'default' : `driver_${index + 1}`);
54
+ datasources[driverName] = driver;
55
+ });
56
+ console.log(`[${this.name}] Using drivers from kernel:`, Object.keys(datasources));
57
+ }
58
+ else {
59
+ console.warn(`[${this.name}] No datasources configured and no drivers found in kernel. Repository and QueryService will not be available.`);
60
+ }
61
+ }
44
62
  // Register QueryService and QueryAnalyzer if enabled
45
- if (this.config.enableQueryService !== false && this.config.datasources) {
46
- const queryService = new query_service_1.QueryService(this.config.datasources, kernel.metadata);
63
+ if (this.config.enableQueryService !== false && datasources) {
64
+ const queryService = new query_service_1.QueryService(datasources, kernel.metadata);
47
65
  kernel.queryService = queryService;
48
66
  const queryAnalyzer = new query_analyzer_1.QueryAnalyzer(queryService, kernel.metadata);
49
67
  kernel.queryAnalyzer = queryAnalyzer;
50
68
  console.log(`[${this.name}] QueryService and QueryAnalyzer registered`);
51
69
  }
52
70
  // Register components based on configuration
53
- if (this.config.enableRepository !== false) {
54
- await this.registerRepository(ctx.engine);
71
+ if (this.config.enableRepository !== false && datasources) {
72
+ await this.registerRepository(kernel, datasources);
55
73
  }
56
74
  // Install validator plugin if enabled
57
75
  if (this.config.enableValidator !== false) {
58
- const validatorPlugin = new validator_plugin_1.ValidatorPlugin(this.config.validatorConfig || {});
59
- await validatorPlugin.install(ctx);
76
+ const validatorPlugin = new plugin_validator_1.ValidatorPlugin(this.config.validatorConfig || {});
77
+ await ((_b = validatorPlugin.install) === null || _b === void 0 ? void 0 : _b.call(validatorPlugin, ctx));
60
78
  }
61
79
  // Install formula plugin if enabled
62
80
  if (this.config.enableFormulas !== false) {
63
- const formulaPlugin = new formula_plugin_1.FormulaPlugin(this.config.formulaConfig || {});
64
- await formulaPlugin.install(ctx);
81
+ const formulaPlugin = new plugin_formula_1.FormulaPlugin(this.config.formulaConfig || {});
82
+ await ((_c = formulaPlugin.install) === null || _c === void 0 ? void 0 : _c.call(formulaPlugin, ctx));
65
83
  }
66
84
  if (this.config.enableAI !== false) {
67
- await this.registerAI(ctx.engine);
85
+ await this.registerAI(kernel);
68
86
  }
69
87
  console.log(`[${this.name}] Plugin installed successfully`);
70
88
  }
@@ -80,12 +98,7 @@ class ObjectQLPlugin {
80
98
  * Register the Repository pattern
81
99
  * @private
82
100
  */
83
- async registerRepository(kernel) {
84
- if (!this.config.datasources) {
85
- console.log(`[${this.name}] No datasources configured, skipping repository registration`);
86
- return;
87
- }
88
- const datasources = this.config.datasources;
101
+ async registerRepository(kernel, datasources) {
89
102
  // Helper function to get the driver for an object
90
103
  const getDriver = (objectName) => {
91
104
  const objectConfig = kernel.metadata.get('object', objectName);
@@ -120,6 +133,10 @@ class ObjectQLPlugin {
120
133
  const driver = getDriver(objectName);
121
134
  return await driver.findOne(objectName, id);
122
135
  };
136
+ kernel.count = async (objectName, filters) => {
137
+ const driver = getDriver(objectName);
138
+ return await driver.count(objectName, filters || {}, {});
139
+ };
123
140
  console.log(`[${this.name}] Repository pattern registered`);
124
141
  }
125
142
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,yDAA4E;AAC5E,qDAAsE;AACtE,yDAAqD;AACrD,2DAAuD;AAgEvD;;;;;;GAMG;AACH,MAAa,cAAc;IAIzB,YAAoB,SAA+B,EAAE;QAAjC,WAAM,GAAN,MAAM,CAA2B;QAHrD,SAAI,GAAG,gBAAgB,CAAC;QACxB,YAAO,GAAG,OAAO,CAAC;QAGhB,eAAe;QACf,IAAI,CAAC,MAAM,GAAG;YACZ,gBAAgB,EAAE,IAAI;YACtB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,IAAI;YACd,kBAAkB,EAAE,IAAI;YACxB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,GAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAwB,CAAC;QAE5C,qDAAqD;QACrD,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM,YAAY,GAAG,IAAI,4BAAY,CACnC,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB,MAAM,CAAC,QAAQ,CAChB,CAAC;YACF,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;YAEnC,MAAM,aAAa,GAAG,IAAI,8BAAa,CACrC,YAAY,EACZ,MAAM,CAAC,QAAQ,CAChB,CAAC;YACF,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;YAErC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,6CAA6C,CAAC,CAAC;QAC1E,CAAC;QAED,6CAA6C;QAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YAC/E,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YACzE,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,GAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACjD,6CAA6C;IAC/C,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB,CAAC,MAAyB;QACxD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,+DAA+D,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAE5C,kDAAkD;QAClD,MAAM,SAAS,GAAG,CAAC,UAAkB,EAAU,EAAE;YAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAM,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,cAAc,GAAG,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,KAAI,SAAS,CAAC;YAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,eAAe,cAAc,2BAA2B,UAAU,GAAG,CAAC,CAAC;YACzF,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,8CAA8C;QAC9C,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,UAAkB,EAAE,IAAS,EAAgB,EAAE;YACpE,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAU,EAAE,IAAS,EAAgB,EAAE;YAChF,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAU,EAAoB,EAAE;YACzE,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC,MAAM,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,GAAG,KAAK,EAAE,UAAkB,EAAE,KAAU,EAA4C,EAAE;YAC/F,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC;QAEF,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAU,EAAgB,EAAE;YAClE,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YACrC,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,UAAU,CAAC,MAAyB;QAChD,kCAAkC;QAClC,4DAA4D;QAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;IAC1D,CAAC;CACF;AA3ID,wCA2IC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -7,33 +7,21 @@
7
7
  */
8
8
  import type { Filter } from '@objectql/types';
9
9
  import { Data } from '@objectstack/spec';
10
- type FilterNode = Data.FilterNode;
10
+ type FilterCondition = Data.FilterCondition;
11
11
  /**
12
12
  * Filter Translator
13
13
  *
14
- * Translates ObjectQL Filter (FilterCondition) to ObjectStack FilterNode format.
15
- * Converts modern object-based syntax to legacy array-based syntax for backward compatibility.
14
+ * Translates ObjectQL Filter to ObjectStack FilterCondition format.
15
+ * Since both now use the same format, this is mostly a pass-through.
16
16
  *
17
17
  * @example
18
18
  * Input: { age: { $gte: 18 }, $or: [{ status: "active" }, { role: "admin" }] }
19
- * Output: [["age", ">=", 18], "or", [["status", "=", "active"], "or", ["role", "=", "admin"]]]
19
+ * Output: { age: { $gte: 18 }, $or: [{ status: "active" }, { role: "admin" }] }
20
20
  */
21
21
  export declare class FilterTranslator {
22
22
  /**
23
- * Translate filters from ObjectQL format to ObjectStack FilterNode format
23
+ * Translate filters from ObjectQL format to ObjectStack FilterCondition format
24
24
  */
25
- translate(filters?: Filter): FilterNode | undefined;
26
- /**
27
- * Recursively converts FilterCondition to FilterNode array format
28
- */
29
- private convertToNode;
30
- /**
31
- * Interleaves filter nodes with a logical operator
32
- */
33
- private interleaveWithOperator;
34
- /**
35
- * Maps modern $-prefixed operators to legacy format
36
- */
37
- private mapOperatorToLegacy;
25
+ translate(filters?: Filter): FilterCondition | undefined;
38
26
  }
39
27
  export {};