diff --git a/packages/drivers/sql/src/index.ts b/packages/drivers/sql/src/index.ts index f98f2986..3e318e25 100644 --- a/packages/drivers/sql/src/index.ts +++ b/packages/drivers/sql/src/index.ts @@ -9,6 +9,10 @@ import { Driver, IntrospectedSchema, IntrospectedTable, IntrospectedColumn, IntrospectedForeignKey } from '@objectql/types'; import knex, { Knex } from 'knex'; +/** + * SQL Driver for ObjectQL + * Implements Driver interface from @objectql/types + */ export class SqlDriver implements Driver { private knex: Knex; private config: any; @@ -277,7 +281,7 @@ export class SqlDriver implements Driver { } } - // Bulk + // Bulk Operations async createMany(objectName: string, data: any[], options?: any): Promise { const builder = this.getBuilder(objectName, options); return await builder.insert(data).returning('*'); @@ -506,6 +510,8 @@ export class SqlDriver implements Driver { return data; } + /** + /** * Introspect the database schema to discover existing tables, columns, and relationships. */ diff --git a/packages/foundation/core/src/app.ts b/packages/foundation/core/src/app.ts index e3156994..afc1f52d 100644 --- a/packages/foundation/core/src/app.ts +++ b/packages/foundation/core/src/app.ts @@ -19,7 +19,8 @@ import { HookContext, ActionHandler, ActionContext, - LoaderPlugin + LoaderPlugin, + Driver } from '@objectql/types'; import { ObjectRepository } from './repository'; @@ -28,13 +29,12 @@ import { registerHookHelper, triggerHookHelper, HookEntry } from './hook'; import { registerObjectHelper, getConfigsHelper } from './object'; import { convertIntrospectedSchemaToObjects } from './util'; -// Import ObjectStack engine and standard driver interface +// Import ObjectStack engine (without using its driver types) import { ObjectQL as ObjectStackEngine } from '@objectstack/objectql'; -import { DriverInterface } from '@objectstack/spec'; export class ObjectQL implements IObjectQL { public metadata: MetadataRegistry; - private datasources: Record = {}; + private datasources: Record = {}; private remotes: string[] = []; private hooks: Record = {}; private actions: Record = {}; @@ -55,8 +55,9 @@ export class ObjectQL implements IObjectQL { this.stackEngine = new ObjectStackEngine({}); // Register drivers with ObjectStack engine (no wrapping needed) + // Cast to any since our Driver interface is compatible with spec's DriverInterface for (const [name, driver] of Object.entries(this.datasources)) { - this.stackEngine.registerDriver(driver, name === 'default'); + this.stackEngine.registerDriver(driver as any, name === 'default'); } if (config.connection) { @@ -89,12 +90,13 @@ export class ObjectQL implements IObjectQL { /** * Register a new driver with ObjectStack engine */ - registerDriver(name: string, driver: DriverInterface, isDefault: boolean = false) { + registerDriver(name: string, driver: Driver, isDefault: boolean = false) { if (this.datasources[name]) { console.warn(`[ObjectQL] Driver '${name}' already exists. Overwriting...`); } this.datasources[name] = driver; - this.stackEngine.registerDriver(driver, isDefault); + // Cast to any since our Driver interface is compatible with spec's DriverInterface + this.stackEngine.registerDriver(driver as any, isDefault); } removePackage(name: string) { @@ -189,7 +191,7 @@ export class ObjectQL implements IObjectQL { return getConfigsHelper(this.metadata); } - datasource(name: string): DriverInterface { + datasource(name: string): Driver { const driver = this.datasources[name]; if (!driver) { throw new Error(`Datasource '${name}' not found`); diff --git a/packages/foundation/types/src/config.ts b/packages/foundation/types/src/config.ts index 3eacf401..d7750b82 100644 --- a/packages/foundation/types/src/config.ts +++ b/packages/foundation/types/src/config.ts @@ -9,12 +9,12 @@ import { MetadataRegistry } from "./registry"; import { ObjectConfig } from "./object"; import { ObjectQLPlugin } from "./plugin"; -// Import DriverInterface from @objectstack/spec -import type { DriverInterface } from "@objectstack/spec"; +// Import Driver from local types package +import type { Driver } from "./driver"; export interface ObjectQLConfig { registry?: MetadataRegistry; - datasources?: Record; + datasources?: Record; /** * Optional connection string for auto-configuration. * e.g. "sqlite://dev.db", "postgres://localhost/db", "mongodb://localhost/db" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d370a4c6..9fe393ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -243,31 +243,6 @@ importers: specifier: ^5.0.0 version: 5.9.3 - examples/plugin-driver-memory: - dependencies: - '@objectql/core': - specifier: workspace:* - version: link:../../packages/foundation/core - '@objectql/types': - specifier: workspace:* - version: link:../../packages/foundation/types - '@objectstack/objectql': - specifier: ^0.1.1 - version: 0.1.1 - '@objectstack/spec': - specifier: ^0.1.2 - version: 0.1.2 - devDependencies: - '@types/node': - specifier: ^20.0.0 - version: 20.19.29 - ts-node: - specifier: ^10.9.0 - version: 10.9.2(@types/node@20.19.29)(typescript@5.9.3) - typescript: - specifier: ^5.0.0 - version: 5.9.3 - examples/quickstart/hello-world: dependencies: '@objectql/core':