@objectstack/core 4.0.2 → 4.0.4
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 +10 -10
- package/CHANGELOG.md +13 -0
- package/dist/index.cjs +22 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/kernel.ts +28 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@objectstack/core",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Microkernel Core for ObjectStack",
|
|
6
6
|
"type": "module",
|
|
@@ -14,15 +14,15 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@types/node": "^25.
|
|
17
|
+
"@types/node": "^25.6.0",
|
|
18
18
|
"typescript": "^6.0.2",
|
|
19
|
-
"vitest": "^4.1.
|
|
19
|
+
"vitest": "^4.1.4"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"pino": "^10.3.1",
|
|
23
23
|
"pino-pretty": "^13.1.3",
|
|
24
24
|
"zod": "^4.3.6",
|
|
25
|
-
"@objectstack/spec": "4.0.
|
|
25
|
+
"@objectstack/spec": "4.0.4"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"pino": "^8.0.0"
|
package/src/kernel.ts
CHANGED
|
@@ -213,6 +213,28 @@ export class ObjectKernel {
|
|
|
213
213
|
return this;
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
+
/**
|
|
217
|
+
* Pre-inject in-memory fallbacks for 'core' services that were not registered
|
|
218
|
+
* by plugins during Phase 1. Called before Phase 2 so that all core services
|
|
219
|
+
* (e.g. 'metadata', 'cache', 'queue') are resolvable via ctx.getService()
|
|
220
|
+
* when plugin start() methods execute.
|
|
221
|
+
*/
|
|
222
|
+
private preInjectCoreFallbacks() {
|
|
223
|
+
if (this.config.skipSystemValidation) return;
|
|
224
|
+
for (const [serviceName, criticality] of Object.entries(ServiceRequirementDef)) {
|
|
225
|
+
if (criticality !== 'core') continue;
|
|
226
|
+
const hasService = this.services.has(serviceName) || this.pluginLoader.hasService(serviceName);
|
|
227
|
+
if (!hasService) {
|
|
228
|
+
const factory = CORE_FALLBACK_FACTORIES[serviceName];
|
|
229
|
+
if (factory) {
|
|
230
|
+
const fallback = factory();
|
|
231
|
+
this.registerService(serviceName, fallback);
|
|
232
|
+
this.logger.debug(`[Kernel] Pre-injected in-memory fallback for '${serviceName}' before Phase 2`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
216
238
|
/**
|
|
217
239
|
* Validate Critical System Requirements
|
|
218
240
|
*/
|
|
@@ -291,6 +313,12 @@ export class ObjectKernel {
|
|
|
291
313
|
await this.initPluginWithTimeout(plugin);
|
|
292
314
|
}
|
|
293
315
|
|
|
316
|
+
// Pre-inject in-memory fallbacks for 'core' services that were not
|
|
317
|
+
// registered by any plugin during Phase 1. This ensures services like
|
|
318
|
+
// 'metadata', 'cache', 'queue', etc. are always available when plugins
|
|
319
|
+
// call ctx.getService() during their start() methods.
|
|
320
|
+
this.preInjectCoreFallbacks();
|
|
321
|
+
|
|
294
322
|
// Phase 2: Start - Plugins execute business logic
|
|
295
323
|
this.logger.info('Phase 2: Start plugins');
|
|
296
324
|
this.state = 'running';
|