diff --git a/app/__test__/App.spec.ts b/app/__test__/App.spec.ts index e611304..8b6b672 100644 --- a/app/__test__/App.spec.ts +++ b/app/__test__/App.spec.ts @@ -101,7 +101,7 @@ describe("App tests", async () => { "onFirstBoot", "onBuilt", ]); - expect(app.plugins).toHaveLength(1); - expect(app.plugins.map((p) => p.name)).toEqual(["test"]); + expect(app.plugins.size).toBe(1); + expect(Array.from(app.plugins.keys())).toEqual(["test"]); }); }); diff --git a/app/src/App.ts b/app/src/App.ts index 85c782f..b1f475f 100644 --- a/app/src/App.ts +++ b/app/src/App.ts @@ -62,8 +62,8 @@ export type AppOptions = { manager?: Omit; asyncEventsMode?: "sync" | "async" | "none"; }; -export type CreateAppConfig = { - connection?: C | { url: string }; +export type CreateAppConfig = { + connection?: Connection | { url: string }; initialConfig?: InitialModuleConfigs; options?: AppOptions; }; @@ -71,23 +71,26 @@ export type CreateAppConfig = { export type AppConfig = InitialModuleConfigs; export type LocalApiOptions = Request | ApiOptions; -export class App { +export class App { static readonly Events = AppEvents; modules: ModuleManager; adminController?: AdminController; _id: string = crypto.randomUUID(); - plugins: AppPluginConfig[]; + plugins: Map = new Map(); private trigger_first_boot = false; private _building: boolean = false; constructor( - public connection: C, + public connection: Connection, _initialConfig?: InitialModuleConfigs, private options?: AppOptions, ) { - this.plugins = (options?.plugins ?? []).map((plugin) => plugin(this)); + for (const plugin of options?.plugins ?? []) { + const config = plugin(this); + this.plugins.set(config.name, config); + } this.runPlugins("onBoot"); this.modules = new ModuleManager(connection, { ...(options?.manager ?? {}), @@ -109,22 +112,22 @@ export class App { ...args: any[] ): Promise<{ name: string; result: any }[]> { const results: { name: string; result: any }[] = []; - for (const plugin of this.plugins) { + for (const [name, config] of this.plugins) { try { - if (key in plugin && plugin[key]) { - const fn = plugin[key]; + if (key in config && config[key]) { + const fn = config[key]; if (fn && typeof fn === "function") { - $console.debug(`[Plugin:${plugin.name}] ${key}`); + $console.debug(`[Plugin:${name}] ${key}`); // @ts-expect-error const result = await fn(...args); results.push({ - name: plugin.name, + name, result, }); } } } catch (e) { - $console.warn(`[Plugin:${plugin.name}] error running "${key}"`, String(e)); + $console.warn(`[Plugin:${name}] error running "${key}"`, String(e)); } } return results as any; diff --git a/app/src/adapter/bun/connection/BunSqliteConnection.ts b/app/src/adapter/bun/connection/BunSqliteConnection.ts index 7f124d1..f884249 100644 --- a/app/src/adapter/bun/connection/BunSqliteConnection.ts +++ b/app/src/adapter/bun/connection/BunSqliteConnection.ts @@ -6,6 +6,7 @@ import { type IGenericSqlite, } from "data/connection/sqlite/GenericSqliteConnection"; +export type BunSqliteConnection = GenericSqliteConnection; export type BunSqliteConnectionConfig = { database: Database; }; diff --git a/app/src/modules/server/SystemController.ts b/app/src/modules/server/SystemController.ts index 99d5204..ec07831 100644 --- a/app/src/modules/server/SystemController.ts +++ b/app/src/modules/server/SystemController.ts @@ -322,7 +322,7 @@ export class SystemController extends Controller { local: datetimeStringLocal(), utc: datetimeStringUTC(), }, - plugins: this.app.plugins.map((p) => p.name), + plugins: Array.from(this.app.plugins.keys()), }), );