@objectql/core 4.0.5 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +9 -0
- package/dist/app.d.ts +1 -1
- package/dist/app.js +48 -9
- package/dist/app.js.map +1 -1
- package/dist/gateway.d.ts +36 -0
- package/dist/gateway.js +89 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.js +21 -0
- package/dist/plugin.js.map +1 -1
- package/dist/protocol.d.ts +31 -0
- package/dist/protocol.js +36 -0
- package/dist/protocol.js.map +1 -1
- package/dist/query/query-service.d.ts +1 -0
- package/dist/query/query-service.js +5 -1
- package/dist/query/query-service.js.map +1 -1
- package/dist/repository.d.ts +0 -28
- package/dist/repository.js +10 -173
- package/dist/repository.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +8 -8
- package/src/app.ts +49 -9
- package/src/gateway.ts +101 -0
- package/src/index.ts +2 -0
- package/src/plugin.ts +24 -0
- package/src/protocol.ts +42 -0
- package/src/query/query-service.ts +6 -1
- package/src/repository.ts +10 -220
- package/test/__mocks__/@objectstack/core.ts +27 -0
- package/test/__mocks__/@objectstack/objectql.ts +45 -0
- package/test/app.test.ts +6 -6
- package/test/gateway.test.ts +88 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/repository.d.ts
CHANGED
|
@@ -10,41 +10,13 @@ export declare class ObjectRepository {
|
|
|
10
10
|
private objectName;
|
|
11
11
|
private context;
|
|
12
12
|
private app;
|
|
13
|
-
private queryBuilder;
|
|
14
|
-
private static queryCompiler;
|
|
15
13
|
constructor(objectName: string, context: ObjectQLContext, app: IObjectQL);
|
|
16
|
-
/**
|
|
17
|
-
* Get validator instance from kernel (via plugin)
|
|
18
|
-
* Falls back to creating a new instance if not available
|
|
19
|
-
*/
|
|
20
|
-
private getValidator;
|
|
21
|
-
/**
|
|
22
|
-
* Get formula engine instance from kernel (via plugin)
|
|
23
|
-
* Falls back to creating a new instance if not available
|
|
24
|
-
*/
|
|
25
|
-
private getFormulaEngine;
|
|
26
14
|
private getDriver;
|
|
27
15
|
private getKernel;
|
|
28
16
|
private getOptions;
|
|
29
|
-
/**
|
|
30
|
-
* Translates ObjectQL UnifiedQuery to ObjectStack QueryAST format
|
|
31
|
-
* Uses query compiler for caching and optimization
|
|
32
|
-
*/
|
|
33
|
-
private buildQueryAST;
|
|
34
17
|
getSchema(): ObjectConfig;
|
|
35
18
|
private getHookAPI;
|
|
36
19
|
private getUserFromContext;
|
|
37
|
-
/**
|
|
38
|
-
* Validates a record against field-level and object-level validation rules.
|
|
39
|
-
* For updates, only fields present in the update payload are validated at the field level,
|
|
40
|
-
* while object-level rules use the merged record (previousRecord + updates).
|
|
41
|
-
*/
|
|
42
|
-
private validateRecord;
|
|
43
|
-
/**
|
|
44
|
-
* Evaluate formula fields for a record
|
|
45
|
-
* Adds computed formula field values to the record
|
|
46
|
-
*/
|
|
47
|
-
private evaluateFormulas;
|
|
48
20
|
find(query?: UnifiedQuery): Promise<any[]>;
|
|
49
21
|
findOne(idOrQuery: string | number | UnifiedQuery): Promise<any>;
|
|
50
22
|
count(filters: any): Promise<number>;
|
package/dist/repository.js
CHANGED
|
@@ -8,41 +8,11 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.ObjectRepository = void 0;
|
|
11
|
-
const types_1 = require("@objectql/types");
|
|
12
|
-
const plugin_validator_1 = require("@objectql/plugin-validator");
|
|
13
|
-
const plugin_formula_1 = require("@objectql/plugin-formula");
|
|
14
|
-
const query_1 = require("./query");
|
|
15
|
-
const QueryCompiler_1 = require("./optimizations/QueryCompiler");
|
|
16
11
|
class ObjectRepository {
|
|
17
12
|
constructor(objectName, context, app) {
|
|
18
13
|
this.objectName = objectName;
|
|
19
14
|
this.context = context;
|
|
20
15
|
this.app = app;
|
|
21
|
-
this.queryBuilder = new query_1.QueryBuilder();
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get validator instance from kernel (via plugin)
|
|
25
|
-
* Falls back to creating a new instance if not available
|
|
26
|
-
*/
|
|
27
|
-
getValidator() {
|
|
28
|
-
const kernel = this.getKernel();
|
|
29
|
-
if (kernel.validator) {
|
|
30
|
-
return kernel.validator;
|
|
31
|
-
}
|
|
32
|
-
// Fallback for backward compatibility
|
|
33
|
-
return new plugin_validator_1.Validator();
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Get formula engine instance from kernel (via plugin)
|
|
37
|
-
* Falls back to creating a new instance if not available
|
|
38
|
-
*/
|
|
39
|
-
getFormulaEngine() {
|
|
40
|
-
const kernel = this.getKernel();
|
|
41
|
-
if (kernel.formulaEngine) {
|
|
42
|
-
return kernel.formulaEngine;
|
|
43
|
-
}
|
|
44
|
-
// Fallback for backward compatibility
|
|
45
|
-
return new plugin_formula_1.FormulaEngine();
|
|
46
16
|
}
|
|
47
17
|
getDriver() {
|
|
48
18
|
const obj = this.getSchema();
|
|
@@ -58,16 +28,6 @@ class ObjectRepository {
|
|
|
58
28
|
...extra
|
|
59
29
|
};
|
|
60
30
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Translates ObjectQL UnifiedQuery to ObjectStack QueryAST format
|
|
63
|
-
* Uses query compiler for caching and optimization
|
|
64
|
-
*/
|
|
65
|
-
buildQueryAST(query) {
|
|
66
|
-
const ast = this.queryBuilder.build(this.objectName, query);
|
|
67
|
-
// Use query compiler to cache and optimize the AST
|
|
68
|
-
const compiled = ObjectRepository.queryCompiler.compile(this.objectName, ast);
|
|
69
|
-
return compiled.ast;
|
|
70
|
-
}
|
|
71
31
|
getSchema() {
|
|
72
32
|
const obj = this.app.getObject(this.objectName);
|
|
73
33
|
if (!obj) {
|
|
@@ -97,120 +57,6 @@ class ObjectRepository {
|
|
|
97
57
|
isSystem: this.context.isSystem
|
|
98
58
|
};
|
|
99
59
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Validates a record against field-level and object-level validation rules.
|
|
102
|
-
* For updates, only fields present in the update payload are validated at the field level,
|
|
103
|
-
* while object-level rules use the merged record (previousRecord + updates).
|
|
104
|
-
*/
|
|
105
|
-
async validateRecord(operation, record, previousRecord) {
|
|
106
|
-
var _a;
|
|
107
|
-
const schema = this.getSchema();
|
|
108
|
-
const allResults = [];
|
|
109
|
-
// 1. Validate field-level rules
|
|
110
|
-
// For updates, only validate fields that are present in the update payload
|
|
111
|
-
for (const [fieldName, fieldConfig] of Object.entries(schema.fields)) {
|
|
112
|
-
// Skip field validation for updates if the field is not in the update payload
|
|
113
|
-
if (operation === 'update' && !(fieldName in record)) {
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
const value = record[fieldName];
|
|
117
|
-
const fieldResults = await this.getValidator().validateField(fieldName, fieldConfig, value, {
|
|
118
|
-
record,
|
|
119
|
-
previousRecord,
|
|
120
|
-
operation,
|
|
121
|
-
user: this.getUserFromContext(),
|
|
122
|
-
api: this.getHookAPI(),
|
|
123
|
-
});
|
|
124
|
-
allResults.push(...fieldResults);
|
|
125
|
-
}
|
|
126
|
-
// 2. Validate object-level validation rules
|
|
127
|
-
if (((_a = schema.validation) === null || _a === void 0 ? void 0 : _a.rules) && schema.validation.rules.length > 0) {
|
|
128
|
-
// For updates, merge the update data with previous record to get the complete final state
|
|
129
|
-
const mergedRecord = operation === 'update' && previousRecord
|
|
130
|
-
? { ...previousRecord, ...record }
|
|
131
|
-
: record;
|
|
132
|
-
// Track which fields changed (using shallow comparison for performance)
|
|
133
|
-
// IMPORTANT: Shallow comparison does not detect changes in nested objects/arrays.
|
|
134
|
-
// If your validation rules rely on detecting changes in complex nested structures,
|
|
135
|
-
// you may need to implement custom change tracking in hooks.
|
|
136
|
-
const changedFields = previousRecord
|
|
137
|
-
? Object.keys(record).filter(key => record[key] !== previousRecord[key])
|
|
138
|
-
: undefined;
|
|
139
|
-
const validationContext = {
|
|
140
|
-
record: mergedRecord,
|
|
141
|
-
previousRecord,
|
|
142
|
-
operation,
|
|
143
|
-
user: this.getUserFromContext(),
|
|
144
|
-
api: this.getHookAPI(),
|
|
145
|
-
changedFields,
|
|
146
|
-
};
|
|
147
|
-
const result = await this.getValidator().validate(schema.validation.rules, validationContext);
|
|
148
|
-
allResults.push(...result.results);
|
|
149
|
-
}
|
|
150
|
-
// 3. Collect errors and throw if any
|
|
151
|
-
const errors = allResults.filter(r => !r.valid && r.severity === 'error');
|
|
152
|
-
if (errors.length > 0) {
|
|
153
|
-
const errorMessage = errors.map(e => e.message).join('; ');
|
|
154
|
-
throw new types_1.ValidationError(errorMessage, errors);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Evaluate formula fields for a record
|
|
159
|
-
* Adds computed formula field values to the record
|
|
160
|
-
*/
|
|
161
|
-
evaluateFormulas(record) {
|
|
162
|
-
var _a;
|
|
163
|
-
const schema = this.getSchema();
|
|
164
|
-
const now = new Date();
|
|
165
|
-
// Build formula context
|
|
166
|
-
const formulaContext = {
|
|
167
|
-
record,
|
|
168
|
-
system: {
|
|
169
|
-
today: new Date(now.getFullYear(), now.getMonth(), now.getDate()),
|
|
170
|
-
now: now,
|
|
171
|
-
year: now.getFullYear(),
|
|
172
|
-
month: now.getMonth() + 1,
|
|
173
|
-
day: now.getDate(),
|
|
174
|
-
hour: now.getHours(),
|
|
175
|
-
minute: now.getMinutes(),
|
|
176
|
-
second: now.getSeconds(),
|
|
177
|
-
},
|
|
178
|
-
current_user: {
|
|
179
|
-
id: this.context.userId || '',
|
|
180
|
-
// TODO: Retrieve actual user name from user object if available
|
|
181
|
-
name: undefined,
|
|
182
|
-
email: undefined,
|
|
183
|
-
role: (_a = this.context.roles) === null || _a === void 0 ? void 0 : _a[0],
|
|
184
|
-
},
|
|
185
|
-
is_new: false,
|
|
186
|
-
record_id: record._id || record.id,
|
|
187
|
-
};
|
|
188
|
-
// Evaluate each formula field
|
|
189
|
-
for (const [fieldName, fieldConfig] of Object.entries(schema.fields)) {
|
|
190
|
-
const formulaExpression = fieldConfig.expression;
|
|
191
|
-
if (fieldConfig.type === 'formula' && formulaExpression) {
|
|
192
|
-
const result = this.getFormulaEngine().evaluate(formulaExpression, formulaContext, fieldConfig.data_type || 'text', { strict: true });
|
|
193
|
-
if (result.success) {
|
|
194
|
-
record[fieldName] = result.value;
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
// In case of error, set to null and log for diagnostics
|
|
198
|
-
record[fieldName] = null;
|
|
199
|
-
// Formula evaluation should not throw here, but we need observability
|
|
200
|
-
// This logging is intentionally minimal and side-effect free
|
|
201
|
-
console.error('[ObjectQL][FormulaEngine] Formula evaluation failed', {
|
|
202
|
-
objectName: this.objectName,
|
|
203
|
-
fieldName,
|
|
204
|
-
recordId: formulaContext.record_id,
|
|
205
|
-
expression: formulaExpression,
|
|
206
|
-
error: result.error,
|
|
207
|
-
stack: result.stack,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return record;
|
|
213
|
-
}
|
|
214
60
|
async find(query = {}) {
|
|
215
61
|
const hookCtx = {
|
|
216
62
|
...this.context,
|
|
@@ -222,13 +68,11 @@ class ObjectRepository {
|
|
|
222
68
|
query
|
|
223
69
|
};
|
|
224
70
|
await this.app.triggerHook('beforeFind', this.objectName, hookCtx);
|
|
225
|
-
//
|
|
226
|
-
const
|
|
227
|
-
const kernelResult = await this.getKernel().find(this.objectName, ast);
|
|
71
|
+
// Execute via kernel (delegates to QueryService)
|
|
72
|
+
const kernelResult = await this.getKernel().find(this.objectName, hookCtx.query || {});
|
|
228
73
|
const results = kernelResult.value;
|
|
229
|
-
//
|
|
230
|
-
|
|
231
|
-
hookCtx.result = resultsWithFormulas;
|
|
74
|
+
// Formula evaluation moved to FormulaPlugin hook
|
|
75
|
+
hookCtx.result = results;
|
|
232
76
|
await this.app.triggerHook('afterFind', this.objectName, hookCtx);
|
|
233
77
|
return hookCtx.result;
|
|
234
78
|
}
|
|
@@ -246,9 +90,8 @@ class ObjectRepository {
|
|
|
246
90
|
await this.app.triggerHook('beforeFind', this.objectName, hookCtx);
|
|
247
91
|
// Use kernel.get() for direct ID lookup
|
|
248
92
|
const result = await this.getKernel().get(this.objectName, String(idOrQuery));
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
hookCtx.result = resultWithFormulas;
|
|
93
|
+
// Formula evaluation moved to FormulaPlugin hook
|
|
94
|
+
hookCtx.result = result;
|
|
252
95
|
await this.app.triggerHook('afterFind', this.objectName, hookCtx);
|
|
253
96
|
return hookCtx.result;
|
|
254
97
|
}
|
|
@@ -286,10 +129,8 @@ class ObjectRepository {
|
|
|
286
129
|
query
|
|
287
130
|
};
|
|
288
131
|
await this.app.triggerHook('beforeCount', this.objectName, hookCtx);
|
|
289
|
-
//
|
|
290
|
-
const
|
|
291
|
-
const kernelResult = await this.getKernel().find(this.objectName, ast);
|
|
292
|
-
const result = kernelResult.count;
|
|
132
|
+
// Execute via kernel (delegates to QueryService)
|
|
133
|
+
const result = await this.getKernel().count(this.objectName, hookCtx.query || {});
|
|
293
134
|
hookCtx.result = result;
|
|
294
135
|
await this.app.triggerHook('afterCount', this.objectName, hookCtx);
|
|
295
136
|
return hookCtx.result;
|
|
@@ -310,8 +151,7 @@ class ObjectRepository {
|
|
|
310
151
|
finalDoc.created_by = this.context.userId;
|
|
311
152
|
if (this.context.spaceId)
|
|
312
153
|
finalDoc.space_id = this.context.spaceId;
|
|
313
|
-
//
|
|
314
|
-
await this.validateRecord('create', finalDoc);
|
|
154
|
+
// Validation moved to ValidatorPlugin hook
|
|
315
155
|
// Execute via kernel
|
|
316
156
|
const result = await this.getKernel().create(this.objectName, finalDoc, this.getOptions());
|
|
317
157
|
hookCtx.result = result;
|
|
@@ -333,8 +173,7 @@ class ObjectRepository {
|
|
|
333
173
|
isModified: (field) => hookCtx.data ? Object.prototype.hasOwnProperty.call(hookCtx.data, field) : false
|
|
334
174
|
};
|
|
335
175
|
await this.app.triggerHook('beforeUpdate', this.objectName, hookCtx);
|
|
336
|
-
//
|
|
337
|
-
await this.validateRecord('update', hookCtx.data, previousData);
|
|
176
|
+
// Validation moved to ValidatorPlugin hook
|
|
338
177
|
// Execute via kernel
|
|
339
178
|
const result = await this.getKernel().update(this.objectName, String(id), hookCtx.data, this.getOptions());
|
|
340
179
|
hookCtx.result = result;
|
|
@@ -437,6 +276,4 @@ class ObjectRepository {
|
|
|
437
276
|
}
|
|
438
277
|
}
|
|
439
278
|
exports.ObjectRepository = ObjectRepository;
|
|
440
|
-
// Shared query compiler for caching compiled queries
|
|
441
|
-
ObjectRepository.queryCompiler = new QueryCompiler_1.QueryCompiler(1000);
|
|
442
279
|
//# sourceMappingURL=repository.js.map
|
package/dist/repository.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
CHANGED
|
@@ -12,6 +12,9 @@ module.exports = {
|
|
|
12
12
|
testMatch: ['**/test/**/*.test.ts'],
|
|
13
13
|
moduleNameMapper: {
|
|
14
14
|
'^@objectql/(.*)$': '<rootDir>/../$1/src',
|
|
15
|
+
'^@objectstack/core$': '<rootDir>/test/__mocks__/@objectstack/core.ts',
|
|
16
|
+
'^@objectstack/objectql$': '<rootDir>/test/__mocks__/@objectstack/objectql.ts',
|
|
17
|
+
'^@objectstack/runtime$': '<rootDir>/test/__mocks__/@objectstack/runtime.ts',
|
|
15
18
|
},
|
|
16
19
|
transform: {
|
|
17
20
|
'^.+\\.(t|j)sx?$': ['ts-jest', {
|
|
@@ -23,7 +26,4 @@ module.exports = {
|
|
|
23
26
|
}
|
|
24
27
|
}],
|
|
25
28
|
},
|
|
26
|
-
transformIgnorePatterns: [
|
|
27
|
-
"/node_modules/(?!(@objectstack|.pnpm))"
|
|
28
|
-
],
|
|
29
29
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@objectql/core",
|
|
3
|
-
"version": "4.0
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "Universal runtime engine for ObjectQL - AI-native metadata-driven ORM with validation, repository pattern, and driver orchestration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"objectql",
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
"main": "dist/index.js",
|
|
19
19
|
"types": "dist/index.d.ts",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@objectstack/core": "^0.
|
|
22
|
-
"@objectstack/objectql": "^0.
|
|
23
|
-
"@objectstack/runtime": "^0.
|
|
24
|
-
"@objectstack/spec": "^0.
|
|
21
|
+
"@objectstack/core": "^1.0.0",
|
|
22
|
+
"@objectstack/objectql": "^1.0.0",
|
|
23
|
+
"@objectstack/runtime": "^1.0.0",
|
|
24
|
+
"@objectstack/spec": "^1.0.0",
|
|
25
25
|
"js-yaml": "^4.1.0",
|
|
26
|
-
"@objectql/plugin-formula": "4.0
|
|
27
|
-
"@objectql/plugin-validator": "4.0
|
|
28
|
-
"@objectql/types": "4.0
|
|
26
|
+
"@objectql/plugin-formula": "4.1.0",
|
|
27
|
+
"@objectql/plugin-validator": "4.1.0",
|
|
28
|
+
"@objectql/types": "4.1.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/js-yaml": "^4.0.5",
|
package/src/app.ts
CHANGED
|
@@ -22,8 +22,10 @@ import {
|
|
|
22
22
|
ActionContext,
|
|
23
23
|
LoaderPlugin
|
|
24
24
|
} from '@objectql/types';
|
|
25
|
-
import { ObjectKernel, type Plugin } from '@objectstack/
|
|
25
|
+
import { ObjectKernel, type Plugin } from '@objectstack/runtime';
|
|
26
26
|
import { ObjectQL as RuntimeObjectQL, SchemaRegistry } from '@objectstack/objectql';
|
|
27
|
+
import { ValidatorPlugin } from '@objectql/plugin-validator';
|
|
28
|
+
import { FormulaPlugin } from '@objectql/plugin-formula';
|
|
27
29
|
import { ObjectRepository } from './repository';
|
|
28
30
|
import { convertIntrospectedSchemaToObjects } from './util';
|
|
29
31
|
import { CompiledHookManager } from './optimizations/CompiledHookManager';
|
|
@@ -81,10 +83,27 @@ export class ObjectQL implements IObjectQL {
|
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
|
|
86
|
+
// Ensure default plugins are present
|
|
87
|
+
if (!this.kernelPlugins.some(p => p.name === 'validator')) {
|
|
88
|
+
this.use(new ValidatorPlugin());
|
|
89
|
+
}
|
|
90
|
+
if (!this.kernelPlugins.some(p => p.name === 'formula')) {
|
|
91
|
+
this.use(new FormulaPlugin());
|
|
92
|
+
}
|
|
93
|
+
|
|
84
94
|
// Create the kernel with registered plugins
|
|
85
|
-
this.kernel = new (ObjectKernel as any)();
|
|
95
|
+
this.kernel = new (ObjectKernel as any)(this.kernelPlugins);
|
|
86
96
|
for (const plugin of this.kernelPlugins) {
|
|
97
|
+
// Fallback for kernels that support .use() but maybe didn't take them in constructor or if we need to support both
|
|
98
|
+
// NOTE: Modern ObjectKernel takes plugins in constructor.
|
|
87
99
|
if ((this.kernel as any).use) {
|
|
100
|
+
// Try to avoid double registration if the kernel is smart, but since we don't know the kernel logic perfectly:
|
|
101
|
+
// Ideally check if already added. But for now, we leave this for backward compat
|
|
102
|
+
// if ObjectKernel DOESN't take constructor args but HAS use().
|
|
103
|
+
|
|
104
|
+
// However, we just instantiated it.
|
|
105
|
+
// Let's assume constructor is the way if available.
|
|
106
|
+
// But we keep this check for .use() just in case the constructor signature is different (e.g. empty)
|
|
88
107
|
(this.kernel as any).use(plugin);
|
|
89
108
|
}
|
|
90
109
|
}
|
|
@@ -110,18 +129,24 @@ export class ObjectQL implements IObjectQL {
|
|
|
110
129
|
return items.map(unwrapContent);
|
|
111
130
|
},
|
|
112
131
|
unregister: (type: string, name: string) => {
|
|
113
|
-
//
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
// Use the official unregisterItem API when available (added in @objectstack/objectql v0.9.2)
|
|
133
|
+
// Fallback to direct metadata access for older versions or test mocks
|
|
134
|
+
if (typeof SchemaRegistry.unregisterItem === 'function') {
|
|
135
|
+
SchemaRegistry.unregisterItem(type, name);
|
|
136
|
+
} else {
|
|
137
|
+
// Fallback: try to access metadata Map directly
|
|
138
|
+
const metadata = (SchemaRegistry as any).metadata;
|
|
139
|
+
if (metadata && metadata instanceof Map) {
|
|
140
|
+
const collection = metadata.get(type);
|
|
141
|
+
if (collection && collection instanceof Map) {
|
|
142
|
+
collection.delete(name);
|
|
143
|
+
}
|
|
119
144
|
}
|
|
120
145
|
}
|
|
121
146
|
},
|
|
122
147
|
unregisterPackage: (packageName: string) => {
|
|
123
148
|
const metadata = (SchemaRegistry as any).metadata;
|
|
124
|
-
if (metadata instanceof Map) {
|
|
149
|
+
if (metadata && metadata instanceof Map) {
|
|
125
150
|
for (const [type, collection] of metadata.entries()) {
|
|
126
151
|
if (collection instanceof Map) {
|
|
127
152
|
for (const [key, item] of collection.entries()) {
|
|
@@ -395,6 +420,21 @@ export class ObjectQL implements IObjectQL {
|
|
|
395
420
|
await (this.kernel as any).bootstrap();
|
|
396
421
|
} else {
|
|
397
422
|
console.warn('ObjectKernel does not have start() or bootstrap() method');
|
|
423
|
+
|
|
424
|
+
// Manually initialize plugins if kernel doesn't support lifecycle
|
|
425
|
+
for (const plugin of this.kernelPlugins) {
|
|
426
|
+
try {
|
|
427
|
+
if (typeof (plugin as any).init === 'function') {
|
|
428
|
+
await (plugin as any).init(this.kernel);
|
|
429
|
+
}
|
|
430
|
+
if (typeof (plugin as any).start === 'function') {
|
|
431
|
+
await (plugin as any).start(this.kernel);
|
|
432
|
+
}
|
|
433
|
+
} catch (error) {
|
|
434
|
+
console.error(`Failed to initialize plugin ${(plugin as any).name || 'unknown'}:`, error);
|
|
435
|
+
// Continue with other plugins even if one fails
|
|
436
|
+
}
|
|
437
|
+
}
|
|
398
438
|
}
|
|
399
439
|
|
|
400
440
|
// TEMPORARY: Set driver for backward compatibility during migration
|
package/src/gateway.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
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
|
+
import { ApiRequest, ApiResponse, GatewayProtocol } from '@objectql/types';
|
|
10
|
+
|
|
11
|
+
export type RequestTransformer = (request: ApiRequest) => Promise<ApiRequest>;
|
|
12
|
+
export type ResponseTransformer = (response: ApiResponse) => Promise<ApiResponse>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Unified API Gateway
|
|
16
|
+
* Routtes generic API requests to specific protocol implementations
|
|
17
|
+
*/
|
|
18
|
+
export class ObjectGateway {
|
|
19
|
+
private protocols: GatewayProtocol[] = [];
|
|
20
|
+
private requestTransforms: RequestTransformer[] = [];
|
|
21
|
+
private responseTransforms: ResponseTransformer[] = [];
|
|
22
|
+
|
|
23
|
+
constructor(protocols: GatewayProtocol[] = []) {
|
|
24
|
+
this.protocols = protocols;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Register a new protocol handler
|
|
29
|
+
*/
|
|
30
|
+
registerProtocol(protocol: GatewayProtocol) {
|
|
31
|
+
this.protocols.push(protocol);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Add a request transformer (middleware)
|
|
36
|
+
*/
|
|
37
|
+
addRequestTransform(transformer: RequestTransformer) {
|
|
38
|
+
this.requestTransforms.push(transformer);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Add a response transformer (middleware)
|
|
43
|
+
*/
|
|
44
|
+
addResponseTransform(transformer: ResponseTransformer) {
|
|
45
|
+
this.responseTransforms.push(transformer);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Handle an incoming API request
|
|
50
|
+
*/
|
|
51
|
+
async handle(request: ApiRequest): Promise<ApiResponse> {
|
|
52
|
+
let req = request;
|
|
53
|
+
|
|
54
|
+
// 1. Apply Request Transforms
|
|
55
|
+
for (const transform of this.requestTransforms) {
|
|
56
|
+
req = await transform(req);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 2. Find matching protocol
|
|
60
|
+
const protocol = this.protocols.find(p => p.route(req));
|
|
61
|
+
|
|
62
|
+
if (!protocol) {
|
|
63
|
+
return {
|
|
64
|
+
status: 404,
|
|
65
|
+
headers: { 'Content-Type': 'application/json' },
|
|
66
|
+
body: {
|
|
67
|
+
error: {
|
|
68
|
+
code: 'PROTOCOL_NOT_FOUND',
|
|
69
|
+
message: `No protocol found to handle path: ${req.path}`
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let response: ApiResponse;
|
|
76
|
+
|
|
77
|
+
// 3. Delegate to protocol
|
|
78
|
+
try {
|
|
79
|
+
response = await protocol.handle(req);
|
|
80
|
+
} catch (error: any) {
|
|
81
|
+
console.error(`[ObjectGateway] Error in ${protocol.name}:`, error);
|
|
82
|
+
response = {
|
|
83
|
+
status: 500,
|
|
84
|
+
headers: { 'Content-Type': 'application/json' },
|
|
85
|
+
body: {
|
|
86
|
+
error: {
|
|
87
|
+
code: 'INTERNAL_ERROR',
|
|
88
|
+
message: error.message || 'Internal Gateway Error'
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 4. Apply Response Transforms
|
|
95
|
+
for (const transform of this.responseTransforms) {
|
|
96
|
+
response = await transform(response);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return response;
|
|
100
|
+
}
|
|
101
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -19,6 +19,8 @@ export type QueryAST = Data.QueryAST;
|
|
|
19
19
|
export type DriverInterface = Data.DriverInterface;
|
|
20
20
|
export type DriverOptions = Data.DriverOptions;
|
|
21
21
|
|
|
22
|
+
export * from './gateway';
|
|
23
|
+
|
|
22
24
|
// Export our enhanced runtime components (actual implementations)
|
|
23
25
|
export * from './repository';
|
|
24
26
|
export * from './app';
|
package/src/plugin.ts
CHANGED
|
@@ -246,6 +246,16 @@ export class ObjectQLPlugin implements RuntimePlugin {
|
|
|
246
246
|
};
|
|
247
247
|
|
|
248
248
|
kernel.find = async (objectName: string, query: any): Promise<{ value: any[]; count: number }> => {
|
|
249
|
+
// Use QueryService if available for advanced query processing (AST, optimizations)
|
|
250
|
+
if ((kernel as any).queryService) {
|
|
251
|
+
const result = await (kernel as any).queryService.find(objectName, query);
|
|
252
|
+
return {
|
|
253
|
+
value: result.value,
|
|
254
|
+
count: result.count !== undefined ? result.count : result.value.length
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Fallback to direct driver call
|
|
249
259
|
const driver = getDriver(objectName);
|
|
250
260
|
const value = await driver.find(objectName, query);
|
|
251
261
|
const count = value.length;
|
|
@@ -253,11 +263,25 @@ export class ObjectQLPlugin implements RuntimePlugin {
|
|
|
253
263
|
};
|
|
254
264
|
|
|
255
265
|
kernel.get = async (objectName: string, id: string): Promise<any> => {
|
|
266
|
+
// Use QueryService if available
|
|
267
|
+
if ((kernel as any).queryService) {
|
|
268
|
+
const result = await (kernel as any).queryService.findOne(objectName, id);
|
|
269
|
+
return result.value;
|
|
270
|
+
}
|
|
271
|
+
|
|
256
272
|
const driver = getDriver(objectName);
|
|
257
273
|
return await driver.findOne(objectName, id);
|
|
258
274
|
};
|
|
259
275
|
|
|
260
276
|
kernel.count = async (objectName: string, filters?: any): Promise<number> => {
|
|
277
|
+
// Use QueryService if available
|
|
278
|
+
if ((kernel as any).queryService) {
|
|
279
|
+
// QueryService.count expects a UnifiedQuery filter or just filter object?
|
|
280
|
+
// Looking at QueryService.count signature: count(objectName: string, where?: Filter, options?: QueryOptions)
|
|
281
|
+
const result = await (kernel as any).queryService.count(objectName, filters);
|
|
282
|
+
return result.value;
|
|
283
|
+
}
|
|
284
|
+
|
|
261
285
|
const driver = getDriver(objectName);
|
|
262
286
|
return await driver.count(objectName, filters || {}, {});
|
|
263
287
|
};
|