@@ -24,12 +24,6 @@ import {
2424import { ObjectStackKernel , type RuntimePlugin } from '@objectstack/runtime' ;
2525import { ObjectRepository } from './repository' ;
2626import { ObjectQLPlugin } from './plugin' ;
27- // import { createDriverFromConnection } from './driver'; // REMOVE THIS
28-
29- // import { loadRemoteFromUrl } from './remote';
30- import { executeActionHelper , registerActionHelper , ActionEntry } from './action' ;
31- import { registerHookHelper , triggerHookHelper , HookEntry } from './hook' ;
32- import { registerObjectHelper , getConfigsHelper } from './object' ;
3327import { convertIntrospectedSchemaToObjects } from './util' ;
3428
3529/**
@@ -39,11 +33,13 @@ import { convertIntrospectedSchemaToObjects } from './util';
3933 * to provide the plugin architecture.
4034 */
4135export class ObjectQL implements IObjectQL {
42- public metadata : MetadataRegistry ;
36+ // Delegate to kernel for metadata, hooks, and actions
37+ public get metadata ( ) : MetadataRegistry {
38+ return this . kernel . metadata ;
39+ }
40+
4341 private datasources : Record < string , Driver > = { } ;
4442 private remotes : string [ ] = [ ] ;
45- private hooks : Record < string , HookEntry [ ] > = { } ;
46- private actions : Record < string , ActionEntry > = { } ;
4743
4844 // ObjectStack Kernel Integration
4945 private kernel ! : ObjectStackKernel ;
@@ -54,9 +50,7 @@ export class ObjectQL implements IObjectQL {
5450
5551 constructor ( config : ObjectQLConfig ) {
5652 this . config = config ;
57- this . metadata = config . registry || new MetadataRegistry ( ) ;
5853 this . datasources = config . datasources || { } ;
59- // this.remotes = config.remotes || [];
6054
6155 if ( config . connection ) {
6256 throw new Error ( "Connection strings are not supported in core directly. Use @objectql/platform-node's createDriverFromConnection or pass a driver instance to 'datasources'." ) ;
@@ -75,42 +69,54 @@ export class ObjectQL implements IObjectQL {
7569 }
7670 }
7771 }
72+
73+ // Create the kernel
74+ this . kernel = new ObjectStackKernel ( this . kernelPlugins ) ;
75+
76+ // Register initial metadata if provided
77+ if ( config . registry ) {
78+ // Copy metadata from provided registry to kernel's registry
79+ for ( const type of config . registry . getTypes ( ) ) {
80+ for ( const item of config . registry . list ( type ) ) {
81+ this . kernel . metadata . register ( type , {
82+ type,
83+ id : ( item as any ) . name || ( item as any ) . id ,
84+ content : item
85+ } ) ;
86+ }
87+ }
88+ }
7889 }
7990
8091 use ( plugin : RuntimePlugin ) {
8192 this . kernelPlugins . push ( plugin ) ;
8293 }
8394
8495 removePackage ( name : string ) {
85- this . metadata . unregisterPackage ( name ) ;
86-
87- // Remove hooks
88- for ( const event of Object . keys ( this . hooks ) ) {
89- this . hooks [ event ] = this . hooks [ event ] . filter ( h => h . packageName !== name ) ;
90- }
91-
92- // Remove actions
93- for ( const key of Object . keys ( this . actions ) ) {
94- if ( this . actions [ key ] . packageName === name ) {
95- delete this . actions [ key ] ;
96- }
97- }
96+ // Delegate to kernel managers
97+ this . kernel . metadata . unregisterPackage ( name ) ;
98+ this . kernel . hooks . removePackage ( name ) ;
99+ this . kernel . actions . removePackage ( name ) ;
98100 }
99101
100102 on ( event : HookName , objectName : string , handler : HookHandler , packageName ?: string ) {
101- registerHookHelper ( this . hooks , event , objectName , handler , packageName ) ;
103+ // Delegate to kernel hook manager
104+ this . kernel . hooks . register ( event , objectName , handler , packageName ) ;
102105 }
103106
104107 async triggerHook ( event : HookName , objectName : string , ctx : HookContext ) {
105- await triggerHookHelper ( this . metadata , this . hooks , event , objectName , ctx ) ;
108+ // Delegate to kernel hook manager
109+ await this . kernel . hooks . trigger ( event , objectName , ctx ) ;
106110 }
107111
108112 registerAction ( objectName : string , actionName : string , handler : ActionHandler , packageName ?: string ) {
109- registerActionHelper ( this . actions , objectName , actionName , handler , packageName ) ;
113+ // Delegate to kernel action manager
114+ this . kernel . actions . register ( objectName , actionName , handler , packageName ) ;
110115 }
111116
112117 async executeAction ( objectName : string , actionName : string , ctx : ActionContext ) {
113- return await executeActionHelper ( this . metadata , this . actions , objectName , actionName , ctx ) ;
118+ // Delegate to kernel action manager
119+ return await this . kernel . actions . execute ( objectName , actionName , ctx ) ;
114120 }
115121
116122 createContext ( options : ObjectQLContextOptions ) : ObjectQLContext {
@@ -174,19 +180,36 @@ export class ObjectQL implements IObjectQL {
174180 }
175181
176182 registerObject ( object : ObjectConfig ) {
177- registerObjectHelper ( this . metadata , object ) ;
183+ // Normalize fields
184+ if ( object . fields ) {
185+ for ( const [ key , field ] of Object . entries ( object . fields ) ) {
186+ if ( ! field . name ) {
187+ field . name = key ;
188+ }
189+ }
190+ }
191+ this . kernel . metadata . register ( 'object' , {
192+ type : 'object' ,
193+ id : object . name ,
194+ content : object
195+ } ) ;
178196 }
179197
180198 unregisterObject ( name : string ) {
181- this . metadata . unregister ( 'object' , name ) ;
199+ this . kernel . metadata . unregister ( 'object' , name ) ;
182200 }
183201
184202 getObject ( name : string ) : ObjectConfig | undefined {
185- return this . metadata . get < ObjectConfig > ( 'object' , name ) ;
203+ return this . kernel . metadata . get < ObjectConfig > ( 'object' , name ) ;
186204 }
187205
188206 getConfigs ( ) : Record < string , ObjectConfig > {
189- return getConfigsHelper ( this . metadata ) ;
207+ const result : Record < string , ObjectConfig > = { } ;
208+ const objects = this . kernel . metadata . list < ObjectConfig > ( 'object' ) ;
209+ for ( const obj of objects ) {
210+ result [ obj . name ] = obj ;
211+ }
212+ return result ;
190213 }
191214
192215 datasource ( name : string ) : Driver {
@@ -247,8 +270,8 @@ export class ObjectQL implements IObjectQL {
247270 async init ( ) {
248271 console . log ( '[ObjectQL] Initializing with ObjectStackKernel...' ) ;
249272
250- // Create the kernel instance with all collected plugins
251- this . kernel = new ObjectStackKernel ( this . kernelPlugins ) ;
273+ // Start the kernel - this will install and start all plugins
274+ await this . kernel . start ( ) ;
252275
253276 // TEMPORARY: Set driver for backward compatibility during migration
254277 // This allows the kernel mock to delegate to the driver
@@ -258,9 +281,6 @@ export class ObjectQL implements IObjectQL {
258281 ( this . kernel as any ) . setDriver ( defaultDriver ) ;
259282 }
260283 }
261-
262- // Start the kernel - this will install and start all plugins
263- await this . kernel . start ( ) ;
264284
265285 // Load In-Memory Objects (Dynamic Layer)
266286 if ( this . config . objects ) {
@@ -269,7 +289,7 @@ export class ObjectQL implements IObjectQL {
269289 }
270290 }
271291
272- const objects = this . metadata . list < ObjectConfig > ( 'object' ) ;
292+ const objects = this . kernel . metadata . list < ObjectConfig > ( 'object' ) ;
273293
274294 // Init Datasources
275295 // Let's pass all objects to all configured drivers.
@@ -287,7 +307,7 @@ export class ObjectQL implements IObjectQL {
287307 }
288308
289309 private async processInitialData ( ) {
290- const dataEntries = this . metadata . list < any > ( 'data' ) ;
310+ const dataEntries = this . kernel . metadata . list < any > ( 'data' ) ;
291311 if ( dataEntries . length === 0 ) return ;
292312
293313 console . log ( `Processing ${ dataEntries . length } initial data files...` ) ;
0 commit comments