{"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","error","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","Warn","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","createDecorator","_context","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n  \"name\": \"koatty\",\n  \"version\": \"4.2.0\",\n  \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n  \"scripts\": {\n    \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n    \"build:js\": \"tsup\",\n    \"build:dts\": \"bash scripts/build-dts.sh\",\n    \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n    \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n    \"clean\": \"rimraf dist temp docs/api\",\n    \"lint\": \"eslint --ext .ts,.js ./src\",\n    \"test\": \"pnpm run lint && jest --passWithNoTests\",\n    \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n  },\n  \"main\": \"./dist/index.js\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.js\"\n    }\n  },\n  \"keywords\": [\n    \"koatty\",\n    \"koa\",\n    \"typescript\",\n    \"framework\",\n    \"mvc\",\n    \"http\",\n    \"https\",\n    \"websocket\",\n    \"grpc\",\n    \"quic\",\n    \"http2\",\n    \"http3\",\n    \"di\",\n    \"aop\",\n    \"ioc\",\n    \"inversion of control\",\n    \"dependency injection\",\n    \"aspect-oriented programming\",\n    \"decorator\",\n    \"decorator pattern\",\n    \"decorator factory\"\n  ],\n  \"directories\": {\n    \"doc\": \"docs\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/koatty/koatty.git\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"author\": {\n    \"name\": \"richenlin\",\n    \"email\": \"richenlin@gmail.com\"\n  },\n  \"license\": \"BSD-3-Clause\",\n  \"bugs\": {\n    \"url\": \"https://github.com/koatty/koatty/issues\"\n  },\n  \"homepage\": \"https://github.com/koatty/koatty\",\n  \"maintainers\": [\n    {\n      \"name\": \"richenlin\",\n      \"email\": \"richenlin@gmail.com\"\n    }\n  ],\n  \"devDependencies\": {\n    \"@grpc/grpc-js\": \"^1.12.2\",\n    \"@microsoft/api-documenter\": \"^7.26.x\",\n    \"@microsoft/api-extractor\": \"^7.52.x\",\n    \"@types/formidable\": \"^3.x.x\",\n    \"@types/jest\": \"^29.5.x\",\n    \"@types/koa\": \"^2.x.x\",\n    \"@types/koa-compose\": \"^3.x.x\",\n    \"@types/lodash\": \"^4.x.x\",\n    \"@types/node\": \"^22.x.x\",\n    \"@types/on-finished\": \"^2.x.x\",\n    \"@types/supertest\": \"^6.x.x\",\n    \"@types/ws\": \"^8.x.x\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n    \"@typescript-eslint/parser\": \"^8.x.x\",\n    \"eslint\": \"^8.x.x\",\n    \"eslint-plugin-jest\": \"^28.x.x\",\n    \"jest\": \"^29.x.x\",\n    \"jest-html-reporters\": \"^3.x.x\",\n    \"koatty_validation\": \"workspace:*\",\n    \"reflect-metadata\": \"^0.2.2\",\n    \"supertest\": \"^7.x.x\",\n    \"ts-jest\": \"^29.x.x\",\n    \"tslib\": \"^2.x.x\"\n  },\n  \"dependencies\": {\n    \"koa\": \"^3.1.2\",\n    \"koatty_config\": \"workspace:*\",\n    \"koatty_container\": \"workspace:*\",\n    \"koatty_core\": \"workspace:*\",\n    \"koatty_exception\": \"workspace:*\",\n    \"koatty_lib\": \"workspace:*\",\n    \"koatty_loader\": \"workspace:*\",\n    \"koatty_logger\": \"workspace:*\",\n    \"koatty_router\": \"workspace:*\",\n    \"koatty_serve\": \"workspace:*\",\n    \"koatty_trace\": \"workspace:*\",\n    \"ts-morph\": \"^27.0.2\"\n  },\n  \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n  // Dynamic require is necessary for runtime module loading\n  // eslint-disable-next-line @typescript-eslint/no-require-imports\n  const ex = require(p);\n  return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n  if (!controllerReg) {\n    controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n  }\n\n  const result = name.split(\".\")[0].match(controllerReg);\n  return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n  const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n  let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n  if (result === null) {\n    result = [];\n  }\n  return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*}  \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n  if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n    throw Error(`The file(${xpath}) name should be always the same as class name.`);\n  }\n  if (target[\"__esModule\"]) {\n    if (target.name === undefined) { // export class name{}\n      const keys = Object.keys(target);\n      if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n        throw Error(`The file(${xpath}) name should be always the same as class name.`);\n      }\n    } else if (target.name != fileName) { // export default class {}\n      throw Error(`The file(${xpath}) name should be always the same as class name.`);\n    }\n  }\n  if (!exSet) {\n    return;\n  }\n  if (exSet.has(fileName)) {\n    throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n  }\n  exSet.add(fileName);\n\n  return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n  let nodeEngines = ENGINES_VERSION;\n  nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n  let nodeVersion = process.version;\n  if (nodeVersion[0] === 'v') {\n    nodeVersion = nodeVersion.slice(1);\n  }\n  nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n  if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n    Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n  }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n  let isUTRuntime = false;\n  // UT runtime detection, only support jest\n  const argv = JSON.stringify(process.argv[1]);\n  if (argv.indexOf('jest') > -1) {\n    isUTRuntime = true;\n  }\n  return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │  │ └┬┘\n┴ ┴└─┘┴ ┴ ┴  ┴  ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n  AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n  implementsAspectInterface, implementsControllerInterface,\n  implementsMiddlewareInterface,\n  implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n  ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n  id: string;\n  target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n  app: KoattyApplication;\n\n  /**\n   * Creates an instance of Loader.\n   * @param {KoattyApplication} app\n   * @memberof Loader\n   */\n  constructor(app: KoattyApplication) {\n    this.app = app;\n  }\n\n   /**\n    * Initialize application configuration and environment settings.\n    * Sets up logging levels, defines essential paths, and loads application metadata.\n    *\n    * @param {KoattyApplication} app - The Koatty application instance\n    * - Sets logging level based on environment\n    * - Defines root, app and framework paths on app object\n    * - Loads application name and version from package.json\n    * - Sets environment variables for paths\n    * - Maintains backward compatibility with legacy path variables\n    */\n  public static initialize(app: KoattyApplication) {\n    if (app.env == 'development') {\n      Logger.setLevel(\"debug\");\n    } else {\n      Logger.setLevel(\"info\");\n    }\n    // define path\n    const rootPath = app.rootPath || process.cwd();\n    const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n    const koattyPath = path.resolve(__dirname, '..');\n    Helper.define(app, 'rootPath', rootPath);\n    Helper.define(app, 'appPath', appPath);\n    Helper.define(app, 'koattyPath', koattyPath);\n\n    //\n    if (Helper.isEmpty(app.name)) {\n      const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n      if (pkg.name) {\n        app.name = pkg.name;\n        app.version = app.version || pkg.version;\n      }\n    }\n\n    // Set environment variables for backward compatibility \n    // Use app.rootPath, app.appPath, app.koattyPath instead\n    process.env.ROOT_PATH = rootPath;\n    process.env.APP_PATH = appPath;\n    process.env.KOATTY_PATH = koattyPath;\n\n    // Compatible with old version, will be deprecated, do not use it in new code\n    process.env.THINK_PATH = koattyPath;\n    Helper.define(app, 'thinkPath', koattyPath);\n  }\n\n  /**\n   * Get component metadata from target class.\n   * \n   * @param {KoattyApplication} app - The Koatty application instance\n   * @param {any} target - The target class to get metadata from\n   * @returns {any[]} Array of component metadata paths\n   * \n   * @static\n   * @public\n   */\n  public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n    let componentMetas = [];\n    const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n    if (componentMeta) {\n      if (Helper.isArray(componentMeta)) {\n        componentMetas = componentMeta;\n      } else {\n        componentMetas.push(componentMeta);\n      }\n    }\n    if (componentMetas.length < 1) {\n      componentMetas = [app.appPath];\n    }\n    return componentMetas;\n  }\n\n  /**\n   * Get configuration metadata from target class.\n   * \n   * @param {KoattyApplication} app Application instance\n   * @param {any} target Target class\n   * @returns {any[]} Array of configuration metadata\n   */\n  public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n    const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n    let configurationMetas = [];\n    if (confMeta) {\n      if (Helper.isArray(confMeta)) {\n        configurationMetas = confMeta;\n      } else {\n        configurationMetas.push(confMeta);\n      }\n    }\n    return configurationMetas;\n  }\n\n  /**\n   * Check and load all components(excepted config/*、App.ts) in the application.\n   * \n   * @param {KoattyApplication} app - The Koatty application instance\n   * @param {any} target - The target class or object to check components from\n   * @static\n   * @public\n   */\n  public static CheckAllComponents(app: KoattyApplication, target: any) {\n    // component metadata\n    const componentMetas = Loader.GetComponentMeta(app, target);\n    // configuration metadata\n    const configurationMetas = Loader.GetConfigurationMeta(app, target);\n    const exSet = new Set();\n    Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n      checkClass(fileName, xpath, xTarget, exSet);\n    }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n    exSet.clear();\n  }\n\n  /**\n   * Set logger configuration for the Koatty application.\n   * \n   * @param {KoattyApplication} app - The Koatty application instance\n   * @description Configures logging settings based on application environment and config options.\n   * Handles log level, log file path, and sensitive fields configuration.\n   * In production environment, default log level is 'info', otherwise 'debug'.\n   */\n  public static SetLogger(app: KoattyApplication) {\n    const data = app.getMetaData('_configs') || [];\n    const configs = data[0] || {};\n    //Logger\n    if (configs.config) {\n      const opt = configs.config;\n      let logLevel: LogLevelType = \"debug\",\n        logFilePath = \"\",\n        sensFields = [];\n      if (app.env === \"production\") {\n        logLevel = \"info\";\n      }\n      if (opt.logsLevel) {\n        logLevel = (opt.logsLevel).toLowerCase();\n      }\n      if (opt.logsPath) {\n        logFilePath = opt.logsPath;\n      }\n      if (opt.sensFields) {\n        sensFields = opt.sensFields;\n      }\n      if (!app.appDebug) {\n        Logger.enableBatch(true);\n        Logger.setBatchConfig({\n          maxSize: 200,\n          flushInterval: 500\n        });\n      }\n      if (logLevel) {\n        Logger.setLevel(logLevel);\n      }\n      if (logFilePath && !app.silent) {\n        Helper.define(app, \"logsPath\", logFilePath);\n        process.env.LOGS_PATH = logFilePath;\n        Logger.setLogFilePath(logFilePath);\n      }\n      if (sensFields) {\n        Logger.setSensFields(sensFields);\n      }\n      (app as any).once(AppEvent.appStop, async () => {\n        await Logger.flushBatch(); // 等待所有日志写入完成\n        await Logger.destroy(); // 释放所有资源\n      });\n    }\n  }\n\n  /**\n   * Load all components and initialize the application.\n   * \n   * @param app - The KoattyApplication instance\n   * @param target - The target class or object containing configuration metadata\n   * \n   * This method performs the following initialization steps:\n   * 1. Loads configurations\n   * 2. Creates server and router instances\n   * 3. Loads components, middlewares, services and controllers\n   * 4. Sets up routing\n   * \n   * @static\n   * @async\n   */\n  public static async LoadAllComponents(app: KoattyApplication, target: any) {\n    try {\n      if (Helper.isFunction((IOC as any).preloadMetadata)) {\n        (IOC as any).preloadMetadata();\n      }\n    } catch (error) {\n      Logger.Error('[Loader] preloadMetadata failed:', error);\n    }\n\n    const configurationMeta = Loader.GetConfigurationMeta(app, target);\n    const loader = new Loader(app);\n\n    for (const event of AppEventArr) {\n      switch (event) {\n        case AppEvent.appBoot:\n          Logger.Log('Koatty', '', 'Load Configurations ...');\n          loader.LoadConfigs(configurationMeta);\n          Loader.SetLogger(app);\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadConfigure:\n          Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadComponent:\n          Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n          const componentManager = new ComponentManager(app);\n          Helper.define(app, 'componentManager', componentManager);\n\n          // Step 1: Discover components (scan metadata)\n          componentManager.discoverComponents();\n          \n          const stats = componentManager.getStats();\n          Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n          // Step 2: Load components (create instances)\n          Logger.Log('Koatty', '', 'Load Components ...');\n          await loader.LoadComponents(componentManager);\n\n          // Step 3: Register event hooks (instances now exist)\n          componentManager.registerAppEvents(target);\n          componentManager.registerCoreComponentHooks();\n          \n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadPlugin:\n          Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadMiddleware:\n          Logger.Log('Koatty', '', 'Load Middlewares ...');\n          await loader.LoadMiddlewares();\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadService:\n          Logger.Log('Koatty', '', 'Load Services ...');\n          await loader.LoadServices();\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadController:\n          Logger.Log('Koatty', '', 'Load Controllers ...');\n          await loader.LoadControllers();\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadRouter:\n          Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n          // RouterComponent.initRouter() handles both router creation and route loading\n          await asyncEvent(app, event);\n          break;\n\n        case AppEvent.loadServe:\n          Logger.Log('Koatty', '', 'Emit loadServe ...');\n          await asyncEvent(app, event);\n          break;\n\n         case AppEvent.appReady:\n           Logger.Log('Koatty', '', 'Emit appReady ...');\n           await asyncEvent(app, event);\n           break;\n\n         default:\n          await asyncEvent(app, event);\n          break;\n      }\n    }\n  }\n\n  /**\n   * Load configuration files from specified paths.\n   * First loads framework configurations from './config' directory,\n   * then loads application configurations from custom paths.\n   * Finally merges both configurations with framework configs as lower priority.\n   * \n   * @protected\n   * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n   */\n  protected LoadConfigs(loadPath?: string[]) {\n    const frameConfig: any = {};\n    // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n    Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n      frameConfig[name] = exp;\n    });\n\n    if (Helper.isArray(loadPath)) {\n      loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n    }\n    let appConfig = loadConf(loadPath, this.app.appPath);\n    appConfig = Helper.extend(frameConfig, appConfig, true);\n\n    this.app.setMetaData(\"_configs\", appConfig);\n  }\n\n  /**\n   * Load and register middleware components.\n   * Processes middleware configuration, registers middleware classes with IOC container,\n   * and mounts middleware to the application.\n   * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n   * \n   * @protected\n   * @returns {Promise<void>}\n   * @throws {Error} When middleware doesn't implement IMiddleware interface\n   * @throws {Error} When middleware loading fails\n   */\n  protected async LoadMiddlewares() {\n    // ============================================\n    // Load middleware configuration\n    // ============================================\n    let middlewareConf = this.app.config(undefined, \"middleware\");\n    if (Helper.isEmpty(middlewareConf)) {\n      middlewareConf = { config: {}, list: []};\n    }\n    \n    // ============================================\n    // Trace Middleware（请求链路追踪中间件）\n    // ============================================\n    // Koatty-Trace 是一个纯粹的 Middleware\n    // 配置位置：config/middleware.ts 中的 config.trace\n    // \n    // 作为第一个加载的中间件，用于追踪整个请求链路\n    try {\n      const traceOptions = middlewareConf.config?.trace ?? {};\n      const tracer = Trace(traceOptions, this.app as Koatty) as any;\n      Helper.define(this.app, \"tracer\", tracer);\n      this.app.use(tracer);\n      Logger.Debug(`Trace middleware registered`);\n    } catch (error: any) {\n      Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n    }\n\n    //Mount application middleware\n    const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n    appMiddleware.forEach((item: ComponentItem) => {\n      item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n      if (item.id && Helper.isClass(item.target)) {\n        IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n        const ctl = IOC.getInsByClass(item.target);\n        if (!implementsMiddlewareInterface(ctl)) {\n          throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n        }\n      }\n    });\n\n    const middlewareList = middlewareConf.list || [];\n    //de-duplication\n    const appMList = new Set([]);\n    middlewareList.forEach((item: string) => {\n      appMList.add(item);\n    });\n\n    //Automatically call middleware\n    const middlewareConfig = middlewareConf.config || {};\n    for (const key of Array.from(appMList)) {\n      const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n      if (!handle) {\n        throw Error(`Middleware ${key} load error.`);\n      }\n      if (!Helper.isFunction(handle.run)) {\n        throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n      }\n      \n      Logger.Debug(`Load middleware: ${key}`);\n      const middlewareOpt = middlewareConfig[key] || {};\n      \n      // Get middleware options from decorator metadata\n      const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n      let decoratorOptions: IMiddlewareOptions = {};\n      if (middlewareClass) {\n        try {\n          decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n        } catch {\n          // If metadata not found, use empty object\n          decoratorOptions = {};\n        }\n      }\n      \n      // Merge decorator options with config options (config has higher priority)\n      const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n      \n      // Check if middleware is disabled\n      if (mergedOptions.enabled === false) {\n        Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n        continue;\n      }\n      \n      // Execute middleware handler\n      const result = await handle.run(mergedOptions, this.app);\n      if (Helper.isFunction(result)) {\n        let middleware = result;\n        \n        // Wrap with protocol filter if protocol option is specified\n        if (mergedOptions.protocol) {\n          const protocols = Helper.isArray(mergedOptions.protocol) \n            ? mergedOptions.protocol \n            : [mergedOptions.protocol];\n          \n          Logger.Log(\n            'Koatty', \n            '', \n            `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n          );\n          \n          middleware = protocolMiddleware(protocols, result);\n        }\n        \n        // Mount middleware\n        if (middleware.length < 3) {\n          this.app.use(middleware);\n        } else {\n          this.app.useExp(middleware);\n        }\n      }\n    }\n  }\n\n  /**\n   * Load and register controller classes from IOC container.\n   * Each controller must implement the IController interface.\n   * \n   * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n   * @protected\n   * @throws {Error} If a controller does not implement the IController interface.\n   */\n  protected async LoadControllers() {\n    const controllerList = IOC.listClass(\"CONTROLLER\");\n\n    const controllers: string[] = [];\n    controllerList.forEach((item: ComponentItem) => {\n      item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n      if (item.id && Helper.isClass(item.target)) {\n        Logger.Debug(`Load controller: ${item.id}`);\n        // registering to IOC\n        IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n        const ctl = IOC.getInsByClass(item.target);\n        if (!implementsControllerInterface(ctl)) {\n          throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n        }\n        controllers.push(item.id);\n      }\n    });\n    this.app.setMetaData(\"_controllers\", controllers);\n    return controllers;\n  }\n\n  /**\n   * Load and register service components into IOC container.\n   * Each service must implement the IService interface.\n   * Services are registered with singleton scope.\n   * \n   * @protected\n   * @returns {Promise<void>}\n   * @throws {Error} When service does not implement IService interface\n   */\n  protected async LoadServices() {\n    const serviceList = IOC.listClass(\"SERVICE\");\n\n    for (const item of serviceList) {\n      item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n      if (item.id && Helper.isClass(item.target)) {\n        Logger.Debug(`Load service: ${item.id}`);\n        // registering to IOC\n        IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n        const ctl = IOC.getInsByClass(item.target);\n        if (!implementsServiceInterface(ctl)) {\n          throw Error(`The service ${item.id} must implements interface 'IService'.`);\n        }\n      }\n    }\n  }\n\n  /**\n   * Load and initialize components, plugins and aspects.\n   * Components with suffix 'Plugin' must implement IPlugin interface.\n   * Components with suffix 'Aspect' must implement IAspect interface.\n   * Plugins are loaded based on configuration and executed synchronously.\n   * \n   * @protected\n   * @returns {Promise<void>}\n   * @throws {Error} When plugin/aspect doesn't implement required interface\n   * @throws {Error} When plugin loading fails\n   */\n  protected async LoadComponents(componentManager?: ComponentManager) {\n    const componentList = IOC.listClass(\"COMPONENT\");\n\n    componentList.forEach((item: ComponentItem) => {\n      item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n      if (Helper.isClass(item.target)) {\n        IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n        if (item.id && (item.id).endsWith(\"Aspect\")) {\n          const ctl = IOC.getInsByClass(item.target);\n          if (!implementsAspectInterface(ctl)) {\n            throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n          }\n        }\n      }\n    });\n\n    if (componentManager) {\n      await componentManager.loadUserComponents();\n    } else {\n      Logger.Warn('Loading plugins in legacy mode');\n      let pluginsConf = this.app.config(undefined, \"plugin\");\n      if (Helper.isEmpty(pluginsConf)) {\n        pluginsConf = { config: {}, list: [] };\n      }\n      const pluginConfList = pluginsConf.list ?? [];\n      for (const key of pluginConfList) {\n        const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n        if (!handle) {\n          throw Error(`Plugin ${key} load error.`);\n        }\n        if (!Helper.isFunction(handle.run)) {\n          throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n        }\n        if (pluginsConf.config[key] === false) {\n          Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n          continue;\n        }\n\n        await handle.run(pluginsConf.config[key] ?? {}, this.app);\n      }\n    }\n  }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n  return async (target: any) => {\n    if (!(target.prototype instanceof Koatty)) {\n      throw new Error(`class ${target.name} does not inherit from Koatty`);\n    }\n    return await executeBootstrap(target, bootFunc, true);\n  };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n  isInitiative = false): Promise<KoattyApplication> {\n  // Disable winston internal debug logs\n  // Filter out winston from NODE_DEBUG to prevent internal logging\n  if (process.env.NODE_DEBUG) {\n    const debugModules = process.env.NODE_DEBUG.split(',')\n      .filter(m => !m.includes('winston'))\n      .join(',');\n    process.env.NODE_DEBUG = debugModules;\n  }\n\n  // checked runtime\n  checkRuntime();\n  // unittest running environment\n  const isUTRuntime = checkUTRuntime();\n  if (!isInitiative && isUTRuntime) {\n    return;\n  }\n\n  const app = <KoattyApplication>Reflect.construct(target, []);\n  // unittest does not print startup logs\n  if (isUTRuntime) {\n    app.silent = true;\n    Logger.enable(false);\n  }\n\n  if (!app.silent) console.log(LOGO);\n  if (!(app instanceof Koatty)) {\n    throw new Error(`class ${target.name} does not inherit from Koatty`);\n  }\n\n  // Initialize env\n  Loader.initialize(app);\n\n  // exec bootFunc\n  if (Helper.isFunction(bootFunc)) {\n    Logger.Log('Koatty', '', 'Execute bootFunc ...');\n    await bootFunc(app);\n  }\n  // Set IOC.app\n  IOC.setApp(app);\n\n  // Check all bean\n  Logger.Log('Koatty', '', 'ComponentScan ...');\n  Loader.CheckAllComponents(app, target);\n\n  // Load All components\n  await Loader.LoadAllComponents(app, target);\n\n  // Mark application as ready (all components loaded, middleware registered)\n  app.markReady();\n\n  return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n  isInitiative = false): Promise<KoattyApplication> {\n  try {\n    const app = await bootstrapApplication(target, bootFunc, isInitiative);\n    if (!app) return; // e.g. UT runtime + not initiative\n\n    // Start listening (traditional server mode)\n    const isUTRuntime = checkUTRuntime();\n    if (!isUTRuntime) {\n      app.listen(listenCallback);\n    }\n\n    return app;\n  } catch (err) {\n    Logger.Fatal(err);\n  }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n *   if (!cachedApp) {\n *     cachedApp = await createApplication(App);\n *   }\n *   return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n  target: any,\n  bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n  if (!(target.prototype instanceof Koatty)) {\n    throw new Error(`class ${target.name} does not inherit from Koatty`);\n  }\n  const app = await bootstrapApplication(target, bootFunc, true);\n  if (!app) {\n    throw new Error('Failed to initialize application');\n  }\n  return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n  Logger.Log('Koatty', '', '====================================');\n  Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n  Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n  Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n  if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n  Logger.Log('Koatty', '', '====================================');\n  \n  // Trigger appStart event after server starts listening\n  // Listeners are registered via app.once in LoadAppEventHooks\n  asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n *   // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any) {\n  return IOC.createDecorator((target: Function, _context?: any) => {\n    if (!(target.prototype instanceof Koatty)) {\n      throw new Error(`class does not inherit from Koatty`);\n    }\n    IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n    ExecBootStrap(bootFunc)(target);\n  }, 'class');\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n *   // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]) {\n  return IOC.createDecorator((target: Function, _context?: any) => {\n    if (!(target.prototype instanceof Koatty)) {\n      throw new Error(`class does not inherit from Koatty`);\n    }\n    scanPath = scanPath ?? '';\n    IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n  }, 'class');\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n *   // ...\n * }\n * ```\n */\nexport function ConfigurationScan(scanPath?: string | string[]) {\n  return IOC.createDecorator((target: Function, _context?: any) => {\n    if (!(target.prototype instanceof Koatty)) {\n      throw new Error(`class does not inherit from Koatty`);\n    }\n    scanPath = scanPath ?? '';\n    IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n  }, 'class');\n}\n"]}