From 6e3060141b2370ffa2f96f50ae4abdc20466829a Mon Sep 17 00:00:00 2001 From: dswbx Date: Thu, 18 Sep 2025 09:58:12 +0200 Subject: [PATCH] refactor: improve type handling and config structure Updated various type definitions to improve flexibility and maintain consistency, including `MaybePromise` and `PartialRec`. Adjusted `App` class and related configurations to properly utilize these changes. --- app/src/App.ts | 12 ++++++++---- app/src/cli/commands/run/run.ts | 4 ++-- app/src/data/entities/Result.ts | 4 ++-- app/src/data/entities/index.ts | 1 + app/src/index.ts | 2 ++ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/App.ts b/app/src/App.ts index ea88f42..caf1e6a 100644 --- a/app/src/App.ts +++ b/app/src/App.ts @@ -16,7 +16,7 @@ import { DbModuleManager } from "modules/db/DbModuleManager"; import * as SystemPermissions from "modules/permissions"; import { AdminController, type AdminControllerOptions } from "modules/server/AdminController"; import { SystemController } from "modules/server/SystemController"; -import type { MaybePromise } from "core/types"; +import type { MaybePromise, PartialRec } from "core/types"; import type { ServerEnv } from "modules/Controller"; import type { IEmailDriver, ICacheDriver } from "core/drivers"; @@ -99,14 +99,18 @@ export type AppOptions = { }; export type CreateAppConfig = { connection?: Connection | { url: string }; - config?: InitialModuleConfigs; + config?: PartialRec; options?: AppOptions; }; export type AppConfig = { version: number } & ModuleConfigs; export type LocalApiOptions = Request | ApiOptions; -export class App { +export class App< + C extends Connection = Connection, + Config extends PartialRec = PartialRec, + Options extends AppOptions = AppOptions, +> { static readonly Events = AppEvents; modules: ModuleManager; @@ -121,7 +125,7 @@ export class App Promise; + onBuilt?: (app: App) => MaybePromise; }; async function makeApp(config: MakeAppConfig) { diff --git a/app/src/data/entities/Result.ts b/app/src/data/entities/Result.ts index 2816efd..b637e1a 100644 --- a/app/src/data/entities/Result.ts +++ b/app/src/data/entities/Result.ts @@ -72,12 +72,12 @@ export class Result { return this.first().parameters; } - get data() { + get data(): T { if (this.options.single) { return this.first().data?.[0]; } - return this.first().data ?? []; + return this.first().data ?? ([] as T); } async execute(qb: Compilable | Compilable[]) { diff --git a/app/src/data/entities/index.ts b/app/src/data/entities/index.ts index 5beca37..59b16b9 100644 --- a/app/src/data/entities/index.ts +++ b/app/src/data/entities/index.ts @@ -4,5 +4,6 @@ export * from "./mutation/Mutator"; export * from "./query/Repository"; export * from "./query/WhereBuilder"; export * from "./query/WithBuilder"; +export * from "./Result"; export * from "./query/RepositoryResult"; export * from "./mutation/MutatorResult"; diff --git a/app/src/index.ts b/app/src/index.ts index 46902cd..def9264 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -29,6 +29,7 @@ export { type InitialModuleConfigs, ModuleManagerEvents, } from "./modules/ModuleManager"; +export type * from "modules/ModuleApi"; export type { ServerEnv } from "modules/Controller"; export type { BkndConfig } from "bknd/adapter"; @@ -128,6 +129,7 @@ export type { EntityRelation } from "data/relations"; export type * from "data/entities/Entity"; export type { EntityManager } from "data/entities/EntityManager"; export type { SchemaManager } from "data/schema/SchemaManager"; +export type * from "data/entities"; export { BaseIntrospector, Connection,