diff --git a/app/build.ts b/app/build.ts index 49bdf95..824f006 100644 --- a/app/build.ts +++ b/app/build.ts @@ -60,7 +60,14 @@ function banner(title: string) { } // collection of always-external packages -const external = ["bun:test", "node:test", "node:assert/strict", "@libsql/client"] as const; +const external = [ + "bun:test", + "node:test", + "node:assert/strict", + "@libsql/client", + "bknd", + /^bknd\/.*/, +] as const; /** * Building backend and general API diff --git a/app/src/App.ts b/app/src/App.ts index 223711a..f1a495b 100644 --- a/app/src/App.ts +++ b/app/src/App.ts @@ -1,5 +1,5 @@ import type { CreateUserPayload } from "auth/AppAuth"; -import { $console } from "core"; +import { $console } from "core/utils"; import { Event } from "core/events"; import type { em as prototypeEm } from "data/prototype"; import { Connection } from "data/connection/Connection"; @@ -34,7 +34,10 @@ export type AppPluginConfig = { export type AppPlugin = (app: App) => AppPluginConfig; abstract class AppEvent extends Event<{ app: App } & A> {} -export class AppConfigUpdatedEvent extends AppEvent { +export class AppConfigUpdatedEvent extends AppEvent<{ + module: string; + config: ModuleConfigs[keyof ModuleConfigs]; +}> { static override slug = "app-config-updated"; } export class AppBuiltEvent extends AppEvent { @@ -265,7 +268,7 @@ export class App( config: CloudflareBkndConfig, diff --git a/app/src/adapter/index.ts b/app/src/adapter/index.ts index 7554040..9e74dd0 100644 --- a/app/src/adapter/index.ts +++ b/app/src/adapter/index.ts @@ -1,5 +1,6 @@ import { App, type CreateAppConfig } from "bknd"; -import { config as $config, $console } from "bknd/core"; +import { config as $config } from "bknd/core"; +import { $console } from "bknd/utils"; import type { MiddlewareHandler } from "hono"; import type { AdminControllerOptions } from "modules/server/AdminController"; import { Connection } from "bknd/data"; diff --git a/app/src/adapter/node/node.adapter.ts b/app/src/adapter/node/node.adapter.ts index 9d9d5d5..88b7d62 100644 --- a/app/src/adapter/node/node.adapter.ts +++ b/app/src/adapter/node/node.adapter.ts @@ -4,7 +4,7 @@ import { serveStatic } from "@hono/node-server/serve-static"; import { registerLocalMediaAdapter } from "adapter/node/storage"; import { type RuntimeBkndConfig, createRuntimeApp, type RuntimeOptions } from "bknd/adapter"; import { config as $config } from "bknd/core"; -import { $console } from "core"; +import { $console } from "core/utils"; import type { App } from "App"; type NodeEnv = NodeJS.ProcessEnv; diff --git a/app/src/auth/AppAuth.ts b/app/src/auth/AppAuth.ts index 973332e..ac78b9f 100644 --- a/app/src/auth/AppAuth.ts +++ b/app/src/auth/AppAuth.ts @@ -1,7 +1,7 @@ import { Authenticator, AuthPermissions, Role, type Strategy } from "auth"; import type { PasswordStrategy } from "auth/authenticate/strategies"; -import { $console, type DB } from "core"; -import { secureRandomString, transformObject } from "core/utils"; +import type { DB } from "core"; +import { $console, secureRandomString, transformObject } from "core/utils"; import type { Entity, EntityManager } from "data"; import { em, entity, enumm, type FieldSchema, text } from "data/prototype"; import { Module } from "modules/Module"; diff --git a/app/src/auth/AppUserPool.ts b/app/src/auth/AppUserPool.ts index 23f24d0..128de6c 100644 --- a/app/src/auth/AppUserPool.ts +++ b/app/src/auth/AppUserPool.ts @@ -1,6 +1,6 @@ import { AppAuth } from "auth/AppAuth"; import type { CreateUser, SafeUser, User, UserPool } from "auth/authenticate/Authenticator"; -import { $console } from "core"; +import { $console } from "core/utils"; import { pick } from "lodash-es"; import { InvalidConditionsException, diff --git a/app/src/auth/authenticate/Authenticator.ts b/app/src/auth/authenticate/Authenticator.ts index 4357da0..29b6597 100644 --- a/app/src/auth/authenticate/Authenticator.ts +++ b/app/src/auth/authenticate/Authenticator.ts @@ -1,6 +1,7 @@ -import { $console, type DB, Exception } from "core"; +import { type DB, Exception } from "core"; import { addFlashMessage } from "core/server/flash"; import { + $console, type Static, StringEnum, type TObject, diff --git a/app/src/auth/authenticate/strategies/PasswordStrategy.ts b/app/src/auth/authenticate/strategies/PasswordStrategy.ts index 706e14b..6bf059e 100644 --- a/app/src/auth/authenticate/strategies/PasswordStrategy.ts +++ b/app/src/auth/authenticate/strategies/PasswordStrategy.ts @@ -1,6 +1,6 @@ import { type Authenticator, InvalidCredentialsException, type User } from "auth"; -import { $console, tbValidator as tb } from "core"; -import { hash, parse, type Static, StrictObject, StringEnum } from "core/utils"; +import { tbValidator as tb } from "core"; +import { $console, hash, parse, type Static, StrictObject, StringEnum } from "core/utils"; import { Hono } from "hono"; import { compare as bcryptCompare, genSalt as bcryptGenSalt, hash as bcryptHash } from "bcryptjs"; import * as tbbox from "@sinclair/typebox"; diff --git a/app/src/auth/authorize/Guard.ts b/app/src/auth/authorize/Guard.ts index a45c160..81280db 100644 --- a/app/src/auth/authorize/Guard.ts +++ b/app/src/auth/authorize/Guard.ts @@ -1,5 +1,5 @@ -import { $console, Exception, Permission } from "core"; -import { objectTransform } from "core/utils"; +import { Exception, Permission } from "core"; +import { $console, objectTransform } from "core/utils"; import type { Context } from "hono"; import type { ServerEnv } from "modules/Controller"; import { Role } from "./Role"; diff --git a/app/src/auth/middlewares.ts b/app/src/auth/middlewares.ts index d6f28c0..b58b540 100644 --- a/app/src/auth/middlewares.ts +++ b/app/src/auth/middlewares.ts @@ -1,5 +1,5 @@ -import { $console, type Permission } from "core"; -import { patternMatch } from "core/utils"; +import type { Permission } from "core"; +import { $console, patternMatch } from "core/utils"; import type { Context } from "hono"; import { createMiddleware } from "hono/factory"; import type { ServerEnv } from "modules/Controller"; diff --git a/app/src/cli/commands/run/platform.ts b/app/src/cli/commands/run/platform.ts index c3a4110..bc3379b 100644 --- a/app/src/cli/commands/run/platform.ts +++ b/app/src/cli/commands/run/platform.ts @@ -1,5 +1,5 @@ import path from "node:path"; -import { $console } from "core"; +import { $console } from "core/utils"; import type { MiddlewareHandler } from "hono"; import open from "open"; import { fileExists, getRelativeDistPath } from "../../utils/sys"; diff --git a/app/src/cli/commands/run/run.ts b/app/src/cli/commands/run/run.ts index 7ed5bed..0830bc6 100644 --- a/app/src/cli/commands/run/run.ts +++ b/app/src/cli/commands/run/run.ts @@ -3,7 +3,7 @@ import type { App, CreateAppConfig } from "App"; import { StorageLocalAdapter } from "adapter/node/storage"; import type { CliBkndConfig, CliCommand } from "cli/types"; import { Option } from "commander"; -import { colorizeConsole, config } from "core"; +import { config } from "core"; import dotenv from "dotenv"; import { registries } from "modules/registries"; import c from "picocolors"; @@ -17,7 +17,7 @@ import { startServer, } from "./platform"; import { createRuntimeApp, makeConfig } from "adapter"; -import { isBun } from "core/utils"; +import { colorizeConsole, isBun } from "core/utils"; const env_files = [".env", ".dev.vars"]; dotenv.config({ diff --git a/app/src/cli/commands/user.ts b/app/src/cli/commands/user.ts index 0a85d9b..4f4db7c 100644 --- a/app/src/cli/commands/user.ts +++ b/app/src/cli/commands/user.ts @@ -9,7 +9,7 @@ import type { PasswordStrategy } from "auth/authenticate/strategies"; import { makeAppFromEnv } from "cli/commands/run"; import type { CliCommand } from "cli/types"; import { Argument } from "commander"; -import { $console } from "core"; +import { $console } from "core/utils"; import c from "picocolors"; import { isBun } from "core/utils"; diff --git a/app/src/cli/utils/sys.ts b/app/src/cli/utils/sys.ts index b4536a5..56ae32e 100644 --- a/app/src/cli/utils/sys.ts +++ b/app/src/cli/utils/sys.ts @@ -1,4 +1,4 @@ -import { $console } from "core"; +import { $console } from "core/utils"; import { execSync, exec as nodeExec } from "node:child_process"; import { readFile, writeFile as nodeWriteFile } from "node:fs/promises"; import path from "node:path"; diff --git a/app/src/cli/utils/telemetry.ts b/app/src/cli/utils/telemetry.ts index 9fddb42..6673e0e 100644 --- a/app/src/cli/utils/telemetry.ts +++ b/app/src/cli/utils/telemetry.ts @@ -1,6 +1,7 @@ import { PostHog } from "posthog-js-lite"; import { getVersion } from "cli/utils/sys"; -import { $console, env, isDebug } from "core"; +import { env, isDebug } from "core"; +import { $console } from "core/utils"; type Properties = { [p: string]: any }; diff --git a/app/src/core/events/EventManager.ts b/app/src/core/events/EventManager.ts index 59efc8f..78db931 100644 --- a/app/src/core/events/EventManager.ts +++ b/app/src/core/events/EventManager.ts @@ -1,6 +1,6 @@ import { type Event, type EventClass, InvalidEventReturn } from "./Event"; import { EventListener, type ListenerHandler, type ListenerMode } from "./EventListener"; -import { $console } from "core"; +import { $console } from "core/utils"; export type RegisterListenerConfig = | ListenerMode diff --git a/app/src/core/index.ts b/app/src/core/index.ts index a0e96e6..ad4b1a8 100644 --- a/app/src/core/index.ts +++ b/app/src/core/index.ts @@ -38,7 +38,6 @@ export { } from "./object/schema"; export * from "./drivers"; -export * from "./console"; export * from "./events"; // compatibility diff --git a/app/src/core/console.ts b/app/src/core/utils/console.ts similarity index 100% rename from app/src/core/console.ts rename to app/src/core/utils/console.ts diff --git a/app/src/core/utils/file.ts b/app/src/core/utils/file.ts index 152c71d..ea5eb2b 100644 --- a/app/src/core/utils/file.ts +++ b/app/src/core/utils/file.ts @@ -2,7 +2,7 @@ import { extension, guess, isMimeType } from "media/storage/mime-types-tiny"; import { randomString } from "core/utils/strings"; import type { Context } from "hono"; import { invariant } from "core/utils/runtime"; -import { $console } from "../console"; +import { $console } from "./console"; export function getContentName(request: Request): string | undefined; export function getContentName(contentDisposition: string): string | undefined; diff --git a/app/src/core/utils/index.ts b/app/src/core/utils/index.ts index c94c4bb..19bcef6 100644 --- a/app/src/core/utils/index.ts +++ b/app/src/core/utils/index.ts @@ -1,3 +1,4 @@ +export * from "./console"; export * from "./browser"; export * from "./objects"; export * from "./strings"; diff --git a/app/src/core/utils/test.ts b/app/src/core/utils/test.ts index 91ae2d3..44d38d9 100644 --- a/app/src/core/utils/test.ts +++ b/app/src/core/utils/test.ts @@ -1,4 +1,4 @@ -import { $console } from "core"; +import { $console } from "./console"; type ConsoleSeverity = "log" | "warn" | "error"; const _oldConsoles = { @@ -36,14 +36,14 @@ export function disableConsoleLog(severities: ConsoleSeverity[] = ["log", "warn" severities.forEach((severity) => { console[severity] = () => null; }); - $console.setLevel("critical"); + $console?.setLevel("critical"); } export function enableConsoleLog() { Object.entries(_oldConsoles).forEach(([severity, fn]) => { console[severity as ConsoleSeverity] = fn; }); - $console.resetLevel(); + $console?.resetLevel(); } export function formatMemoryUsage() { diff --git a/app/src/data/api/DataController.ts b/app/src/data/api/DataController.ts index f7db2b9..6d6acf4 100644 --- a/app/src/data/api/DataController.ts +++ b/app/src/data/api/DataController.ts @@ -1,4 +1,3 @@ -import { $console, isDebug } from "core"; import { DataPermissions, type EntityData, diff --git a/app/src/data/entities/Entity.ts b/app/src/data/entities/Entity.ts index 48f23b9..e0eb12c 100644 --- a/app/src/data/entities/Entity.ts +++ b/app/src/data/entities/Entity.ts @@ -1,5 +1,6 @@ -import { $console, config } from "core"; +import { config } from "core"; import { + $console, type Static, StringEnum, parse, diff --git a/app/src/data/entities/EntityManager.ts b/app/src/data/entities/EntityManager.ts index 6757170..654c77d 100644 --- a/app/src/data/entities/EntityManager.ts +++ b/app/src/data/entities/EntityManager.ts @@ -1,4 +1,5 @@ -import { $console, type DB as DefaultDB } from "core"; +import type { DB as DefaultDB } from "core"; +import { $console } from "core/utils"; import { EventManager } from "core/events"; import { sql } from "kysely"; import { Connection } from "../connection/Connection"; diff --git a/app/src/data/entities/mutation/MutatorResult.ts b/app/src/data/entities/mutation/MutatorResult.ts index 05da017..a0fe307 100644 --- a/app/src/data/entities/mutation/MutatorResult.ts +++ b/app/src/data/entities/mutation/MutatorResult.ts @@ -1,4 +1,4 @@ -import { $console } from "core/console"; +import { $console } from "core/utils"; import type { Entity, EntityData } from "../Entity"; import type { EntityManager } from "../EntityManager"; import { Result, type ResultJSON, type ResultOptions } from "../Result"; @@ -32,6 +32,7 @@ export class MutatorResult extends Result { onError: (error) => { if (!options?.silent) { $console.error("[ERROR] Mutator:", error.message); + throw error; } }, ...options, diff --git a/app/src/data/entities/query/Repository.ts b/app/src/data/entities/query/Repository.ts index bd0e647..9fdbe99 100644 --- a/app/src/data/entities/query/Repository.ts +++ b/app/src/data/entities/query/Repository.ts @@ -1,5 +1,5 @@ import type { DB as DefaultDB, PrimaryFieldType } from "core"; -import { $console } from "core"; +import { $console } from "core/utils"; import { type EmitsEvents, EventManager } from "core/events"; import { type SelectQueryBuilder, sql } from "kysely"; import { InvalidSearchParamsException } from "../../errors"; diff --git a/app/src/data/entities/query/RepositoryResult.ts b/app/src/data/entities/query/RepositoryResult.ts index fee0dff..7631f8f 100644 --- a/app/src/data/entities/query/RepositoryResult.ts +++ b/app/src/data/entities/query/RepositoryResult.ts @@ -1,9 +1,8 @@ -import { $console } from "core/console"; import type { Entity, EntityData } from "../Entity"; import type { EntityManager } from "../EntityManager"; import { Result, type ResultJSON, type ResultOptions } from "../Result"; import type { Compilable, SelectQueryBuilder } from "kysely"; -import { ensureInt } from "core/utils"; +import { $console, ensureInt } from "core/utils"; export type RepositoryResultOptions = ResultOptions & { silent?: boolean; diff --git a/app/src/data/events/index.ts b/app/src/data/events/index.ts index b10f3b6..246a39d 100644 --- a/app/src/data/events/index.ts +++ b/app/src/data/events/index.ts @@ -1,4 +1,5 @@ -import { $console, type PrimaryFieldType } from "core"; +import type { PrimaryFieldType } from "core"; +import { $console } from "core/utils"; import { Event, InvalidEventReturn } from "core/events"; import type { Entity, EntityData } from "../entities"; import type { RepoQuery } from "data/server/query"; diff --git a/app/src/data/fields/DateField.ts b/app/src/data/fields/DateField.ts index 0fdf91e..504273c 100644 --- a/app/src/data/fields/DateField.ts +++ b/app/src/data/fields/DateField.ts @@ -1,7 +1,6 @@ -import { type Static, StringEnum, dayjs } from "core/utils"; +import { $console, type Static, StringEnum, dayjs } from "core/utils"; import type { EntityManager } from "../entities"; import { Field, type TActionContext, type TRenderContext, baseFieldConfigSchema } from "./Field"; -import { $console } from "core"; import * as tbbox from "@sinclair/typebox"; import type { TFieldTSType } from "data/entities/EntityTypescript"; const { Type } = tbbox; diff --git a/app/src/data/schema/SchemaManager.ts b/app/src/data/schema/SchemaManager.ts index ab5fbda..dafd616 100644 --- a/app/src/data/schema/SchemaManager.ts +++ b/app/src/data/schema/SchemaManager.ts @@ -2,7 +2,7 @@ import type { CompiledQuery, TableMetadata } from "kysely"; import type { IndexMetadata, SchemaResponse } from "../connection/Connection"; import type { Entity, EntityManager } from "../entities"; import { PrimaryField } from "../fields"; -import { $console } from "core"; +import { $console } from "core/utils"; type IntrospectedTable = TableMetadata & { indices: IndexMetadata[]; diff --git a/app/src/data/server/query.ts b/app/src/data/server/query.ts index f070339..0512296 100644 --- a/app/src/data/server/query.ts +++ b/app/src/data/server/query.ts @@ -1,7 +1,6 @@ import { s } from "core/object/schema"; import { WhereBuilder, type WhereQuery } from "data/entities/query/WhereBuilder"; -import { $console } from "core"; -import { isObject } from "core/utils"; +import { isObject, $console } from "core/utils"; import type { CoercionOptions, TAnyOf } from "jsonv-ts"; // ------- diff --git a/app/src/flows/flows/Execution.ts b/app/src/flows/flows/Execution.ts index 61bf05e..41d2166 100644 --- a/app/src/flows/flows/Execution.ts +++ b/app/src/flows/flows/Execution.ts @@ -2,7 +2,7 @@ import { Event, EventManager, type ListenerHandler } from "core/events"; import type { EmitsEvents } from "core/events"; import type { Task, TaskResult } from "../tasks/Task"; import type { Flow } from "./Flow"; -import { $console } from "core"; +import { $console } from "core/utils"; export type TaskLog = TaskResult & { task: Task; diff --git a/app/src/flows/flows/Flow.ts b/app/src/flows/flows/Flow.ts index c924756..cf6a00b 100644 --- a/app/src/flows/flows/Flow.ts +++ b/app/src/flows/flows/Flow.ts @@ -1,11 +1,10 @@ -import { objectTransform, transformObject } from "core/utils"; +import { $console, transformObject } from "core/utils"; import { type TaskMapType, TriggerMap } from "../index"; import type { Task } from "../tasks/Task"; import { Condition, TaskConnection } from "../tasks/TaskConnection"; import { Execution } from "./Execution"; import { FlowTaskConnector } from "./FlowTaskConnector"; import { Trigger } from "./triggers/Trigger"; -import { $console } from "core"; type Jsoned object }> = ReturnType; diff --git a/app/src/flows/flows/executors/RuntimeExecutor.ts b/app/src/flows/flows/executors/RuntimeExecutor.ts index 46ea105..55bf890 100644 --- a/app/src/flows/flows/executors/RuntimeExecutor.ts +++ b/app/src/flows/flows/executors/RuntimeExecutor.ts @@ -1,5 +1,5 @@ import type { Task } from "../../tasks/Task"; -import { $console } from "core"; +import { $console } from "core/utils"; export class RuntimeExecutor { async run( diff --git a/app/src/flows/flows/triggers/EventTrigger.ts b/app/src/flows/flows/triggers/EventTrigger.ts index 3924840..e79b3a0 100644 --- a/app/src/flows/flows/triggers/EventTrigger.ts +++ b/app/src/flows/flows/triggers/EventTrigger.ts @@ -1,7 +1,7 @@ import type { EventManager } from "core/events"; import type { Flow } from "../Flow"; import { Trigger } from "./Trigger"; -import { $console } from "core"; +import { $console } from "core/utils"; import * as tbbox from "@sinclair/typebox"; const { Type } = tbbox; diff --git a/app/src/flows/tasks/presets/LogTask.ts b/app/src/flows/tasks/presets/LogTask.ts index fda6d12..8023daf 100644 --- a/app/src/flows/tasks/presets/LogTask.ts +++ b/app/src/flows/tasks/presets/LogTask.ts @@ -1,5 +1,5 @@ import { Task } from "../Task"; -import { $console } from "core"; +import { $console } from "core/utils"; import * as tbbox from "@sinclair/typebox"; const { Type } = tbbox; diff --git a/app/src/index.ts b/app/src/index.ts index f9c1e63..afac83d 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -16,6 +16,7 @@ export { type ModuleManagerOptions, type ModuleBuildContext, type InitialModuleConfigs, + ModuleManagerEvents, } from "./modules/ModuleManager"; export type { ServerEnv } from "modules/Controller"; diff --git a/app/src/media/AppMedia.ts b/app/src/media/AppMedia.ts index 18b536e..36fce41 100644 --- a/app/src/media/AppMedia.ts +++ b/app/src/media/AppMedia.ts @@ -1,4 +1,5 @@ -import { $console, type AppEntity } from "core"; +import type { AppEntity } from "core"; +import { $console } from "core/utils"; import type { Entity, EntityManager } from "data"; import { type FileUploadedEventData, Storage, type StorageAdapter, MediaPermissions } from "media"; import { Module } from "modules/Module"; diff --git a/app/src/media/storage/Storage.ts b/app/src/media/storage/Storage.ts index ae66070..f8e73cb 100644 --- a/app/src/media/storage/Storage.ts +++ b/app/src/media/storage/Storage.ts @@ -1,9 +1,8 @@ import { type EmitsEvents, EventManager } from "core/events"; -import { isFile, detectImageDimensions } from "core/utils"; +import { $console, isFile, detectImageDimensions } from "core/utils"; import { isMimeType } from "media/storage/mime-types-tiny"; import * as StorageEvents from "./events"; import type { FileUploadedEventData } from "./events"; -import { $console } from "core"; import type { StorageAdapter } from "./StorageAdapter"; export type FileListObject = { diff --git a/app/src/modules/ModuleApi.ts b/app/src/modules/ModuleApi.ts index ebb6403..f8a295c 100644 --- a/app/src/modules/ModuleApi.ts +++ b/app/src/modules/ModuleApi.ts @@ -1,4 +1,5 @@ -import { $console, type PrimaryFieldType } from "core"; +import type { PrimaryFieldType } from "core"; +import { $console } from "core/utils"; import { isDebug } from "core/env"; import { encodeSearch } from "core/utils/reqres"; import type { ApiFetcher } from "Api"; diff --git a/app/src/modules/ModuleManager.ts b/app/src/modules/ModuleManager.ts index 825a220..c79aeb6 100644 --- a/app/src/modules/ModuleManager.ts +++ b/app/src/modules/ModuleManager.ts @@ -1,6 +1,7 @@ import { Guard } from "auth"; -import { $console, BkndError, DebugLogger, env } from "core"; -import { EventManager } from "core/events"; +import { BkndError, DebugLogger, env } from "core"; +import { $console } from "core/utils"; +import { EventManager, Event } from "core/events"; import * as $diff from "core/object/diff"; import { Default, @@ -126,9 +127,24 @@ interface T_INTERNAL_EM { const debug_modules = env("modules_debug"); +abstract class ModuleManagerEvent extends Event<{ ctx: ModuleBuildContext } & A> {} +export class ModuleManagerConfigUpdateEvent< + Module extends keyof ModuleConfigs, +> extends ModuleManagerEvent<{ + module: Module; + config: ModuleConfigs[Module]; +}> { + static override slug = "mm-config-update"; +} +export const ModuleManagerEvents = { + ModuleManagerConfigUpdateEvent, +}; + // @todo: cleanup old diffs on upgrade // @todo: cleanup multiple backups on upgrade export class ModuleManager { + static Events = ModuleManagerEvents; + protected modules: Modules; // internal em for __bknd config table __em!: EntityManager; @@ -151,7 +167,7 @@ export class ModuleManager { ) { this.__em = new EntityManager([__bknd], this.connection); this.modules = {} as Modules; - this.emgr = new EventManager(); + this.emgr = new EventManager({ ...ModuleManagerEvents }); this.logger = new DebugLogger(debug_modules); let initial = {} as Partial; @@ -628,6 +644,13 @@ export class ModuleManager { try { // overwrite listener to run build inside this try/catch module.setListener(async () => { + await this.emgr.emit( + new ModuleManagerConfigUpdateEvent({ + ctx: this.ctx(), + module: name, + config: module.config as any, + }), + ); await this.buildModules(); }); diff --git a/app/src/modules/server/AdminController.tsx b/app/src/modules/server/AdminController.tsx index aa109ee..35ebc81 100644 --- a/app/src/modules/server/AdminController.tsx +++ b/app/src/modules/server/AdminController.tsx @@ -1,7 +1,8 @@ /** @jsxImportSource hono/jsx */ import type { App } from "App"; -import { $console, config, isDebug } from "core"; +import { config, isDebug } from "core"; +import { $console } from "core/utils"; import { addFlashMessage } from "core/server/flash"; import { html } from "hono/html"; import { Fragment } from "hono/jsx"; diff --git a/app/src/modules/server/AppServer.ts b/app/src/modules/server/AppServer.ts index ba1c566..2c4cb76 100644 --- a/app/src/modules/server/AppServer.ts +++ b/app/src/modules/server/AppServer.ts @@ -1,5 +1,5 @@ -import { Exception, isDebug, $console } from "core"; -import { type Static, StringEnum } from "core/utils"; +import { Exception, isDebug } from "core"; +import { type Static, StringEnum, $console } from "core/utils"; import { cors } from "hono/cors"; import { Module } from "modules/Module"; import * as tbbox from "@sinclair/typebox"; diff --git a/app/src/modules/server/SystemController.ts b/app/src/modules/server/SystemController.ts index ec07831..9e65315 100644 --- a/app/src/modules/server/SystemController.ts +++ b/app/src/modules/server/SystemController.ts @@ -1,9 +1,8 @@ /// import type { App } from "App"; -import { $console, tbValidator as tb } from "core"; import { - StringEnum, + $console, TypeInvalidError, datetimeStringLocal, datetimeStringUTC, diff --git a/app/vite.dev.ts b/app/vite.dev.ts index c1c91bc..1274d21 100644 --- a/app/vite.dev.ts +++ b/app/vite.dev.ts @@ -7,7 +7,7 @@ import type { Connection } from "./src/data/connection/Connection"; import { __bknd } from "modules/ModuleManager"; import { nodeSqlite } from "./src/adapter/node/connection/NodeSqliteConnection"; import { libsql } from "./src/data/connection/sqlite/libsql/LibsqlConnection"; -import { $console } from "core"; +import { $console } from "core/utils"; import { createClient } from "@libsql/client"; registries.media.register("local", StorageLocalAdapter);