koatty 4.1.13 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -309,7 +309,7 @@ export class MyComponent {
309
309
 
310
310
  | Framework | Requests/sec | Latency | Memory Usage |
311
311
  | ---------- | ------------ | ------- | ------------ |
312
- | **Koatty** | 13,321 | 1.43ms | 54MB |
312
+ | **Koatty** | 12,321 | 1.43ms | 54MB |
313
313
  | Express | 12,456 | 1.45ms | 52MB |
314
314
  | NestJS | 11,892 | 1.51ms | 63MB |
315
315
 
package/dist/README.md CHANGED
@@ -309,7 +309,7 @@ export class MyComponent {
309
309
 
310
310
  | Framework | Requests/sec | Latency | Memory Usage |
311
311
  | ---------- | ------------ | ------- | ------------ |
312
- | **Koatty** | 13,321 | 1.43ms | 54MB |
312
+ | **Koatty** | 12,321 | 1.43ms | 54MB |
313
313
  | Express | 12,456 | 1.45ms | 52MB |
314
314
  | NestJS | 11,892 | 1.51ms | 63MB |
315
315
 
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @Author: richen
3
- * @Date: 2026-03-07 23:34:54
3
+ * @Date: 2026-04-24 16:20:43
4
4
  * @License: BSD (3-Clause)
5
5
  * @Copyright (c) - <richenlin(at)gmail.com>
6
6
  * @HomePage: https://koatty.org/
@@ -34,7 +34,7 @@ import { LogLevelType } from 'koatty_logger';
34
34
  * }
35
35
  * ```
36
36
  */
37
- export declare function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator;
37
+ export declare function Bootstrap(bootFunc?: (...args: any[]) => any): (target: any, context?: any) => any;
38
38
 
39
39
  /**
40
40
  * Component scan decorator for Koatty application.
@@ -51,7 +51,7 @@ export declare function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDeco
51
51
  * }
52
52
  * ```
53
53
  */
54
- export declare function ComponentScan(scanPath?: string | string[]): ClassDecorator;
54
+ export declare function ComponentScan(scanPath?: string | string[]): (target: any, context?: any) => any;
55
55
 
56
56
  export { Config }
57
57
 
@@ -67,8 +67,9 @@ export { Config }
67
67
  * export class App extends Koatty {
68
68
  * // ...
69
69
  * }
70
+ * ```
70
71
  */
71
- export declare function ConfigurationScan(scanPath?: string | string[]): ClassDecorator;
72
+ export declare function ConfigurationScan(scanPath?: string | string[]): (target: any, context?: any) => any;
72
73
 
73
74
  /**
74
75
  * Create a fully initialized Koatty application WITHOUT starting a server.
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ var path__namespace = /*#__PURE__*/_interopNamespace(path);
34
34
 
35
35
  /*!
36
36
  * @Author: richen
37
- * @Date: 2026-03-07 15:34:52
37
+ * @Date: 2026-04-24 08:20:40
38
38
  * @License: BSD (3-Clause)
39
39
  * @Copyright (c) - <richenlin(at)gmail.com>
40
40
  * @HomePage: https://koatty.org/
@@ -51,7 +51,7 @@ var require_package = __commonJS({
51
51
  "package.json"(exports$1, module) {
52
52
  module.exports = {
53
53
  name: "koatty",
54
- version: "4.1.13",
54
+ version: "4.2.0",
55
55
  description: "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
56
56
  scripts: {
57
57
  build: "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
@@ -413,8 +413,8 @@ var Loader = class _Loader {
413
413
  if (koatty_lib.Helper.isFunction(koatty_container.IOC.preloadMetadata)) {
414
414
  koatty_container.IOC.preloadMetadata();
415
415
  }
416
- } catch {
417
- koatty_logger.DefaultLogger.Warn("[Loader] preloadMetadata is optional, ignore if not available");
416
+ } catch (error) {
417
+ koatty_logger.DefaultLogger.Error("[Loader] preloadMetadata failed:", error);
418
418
  }
419
419
  const configurationMeta = _Loader.GetConfigurationMeta(app, target);
420
420
  const loader = new _Loader(app);
@@ -788,34 +788,33 @@ var listenCallback = /* @__PURE__ */ __name((app) => {
788
788
  koatty_core.asyncEvent(app, koatty_core.AppEvent.appStart);
789
789
  }, "listenCallback");
790
790
  function Bootstrap(bootFunc) {
791
- return function(target) {
791
+ return koatty_container.IOC.createDecorator((target, _context) => {
792
792
  if (!(target.prototype instanceof koatty_core.Koatty)) {
793
793
  throw new Error(`class does not inherit from Koatty`);
794
794
  }
795
795
  koatty_container.IOC.saveClass("COMPONENT", target, "KOATTY_APP");
796
796
  ExecBootStrap(bootFunc)(target);
797
- return target;
798
- };
797
+ }, "class");
799
798
  }
800
799
  __name(Bootstrap, "Bootstrap");
801
800
  function ComponentScan(scanPath) {
802
- return (target) => {
801
+ return koatty_container.IOC.createDecorator((target, _context) => {
803
802
  if (!(target.prototype instanceof koatty_core.Koatty)) {
804
803
  throw new Error(`class does not inherit from Koatty`);
805
804
  }
806
805
  scanPath = scanPath ?? "";
807
806
  koatty_container.IOC.saveClassMetadata(koatty_container.TAGGED_CLS, COMPONENT_SCAN, scanPath, target);
808
- };
807
+ }, "class");
809
808
  }
810
809
  __name(ComponentScan, "ComponentScan");
811
810
  function ConfigurationScan(scanPath) {
812
- return (target) => {
811
+ return koatty_container.IOC.createDecorator((target, _context) => {
813
812
  if (!(target.prototype instanceof koatty_core.Koatty)) {
814
813
  throw new Error(`class does not inherit from Koatty`);
815
814
  }
816
815
  scanPath = scanPath ?? "";
817
816
  koatty_container.IOC.saveClassMetadata(koatty_container.TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);
818
- };
817
+ }, "class");
819
818
  }
820
819
  __name(ConfigurationScan, "ConfigurationScan");
821
820
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"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","Warn","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","error","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","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.13\",\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 {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\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): ClassDecorator {\n return function (target: 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 return target;\n };\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[]): ClassDecorator {\n return (target: 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 };\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 */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: 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 };\n}\n"]}
1
+ {"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.js","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"]}
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ import * as path from 'path';
17
17
 
18
18
  /*!
19
19
  * @Author: richen
20
- * @Date: 2026-03-07 15:34:52
20
+ * @Date: 2026-04-24 08:20:40
21
21
  * @License: BSD (3-Clause)
22
22
  * @Copyright (c) - <richenlin(at)gmail.com>
23
23
  * @HomePage: https://koatty.org/
@@ -34,7 +34,7 @@ var require_package = __commonJS({
34
34
  "package.json"(exports$1, module) {
35
35
  module.exports = {
36
36
  name: "koatty",
37
- version: "4.1.13",
37
+ version: "4.2.0",
38
38
  description: "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
39
39
  scripts: {
40
40
  build: "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
@@ -396,8 +396,8 @@ var Loader = class _Loader {
396
396
  if (Helper.isFunction(IOC.preloadMetadata)) {
397
397
  IOC.preloadMetadata();
398
398
  }
399
- } catch {
400
- DefaultLogger.Warn("[Loader] preloadMetadata is optional, ignore if not available");
399
+ } catch (error) {
400
+ DefaultLogger.Error("[Loader] preloadMetadata failed:", error);
401
401
  }
402
402
  const configurationMeta = _Loader.GetConfigurationMeta(app, target);
403
403
  const loader = new _Loader(app);
@@ -771,34 +771,33 @@ var listenCallback = /* @__PURE__ */ __name((app) => {
771
771
  asyncEvent(app, AppEvent.appStart);
772
772
  }, "listenCallback");
773
773
  function Bootstrap(bootFunc) {
774
- return function(target) {
774
+ return IOC.createDecorator((target, _context) => {
775
775
  if (!(target.prototype instanceof Koatty)) {
776
776
  throw new Error(`class does not inherit from Koatty`);
777
777
  }
778
778
  IOC.saveClass("COMPONENT", target, "KOATTY_APP");
779
779
  ExecBootStrap(bootFunc)(target);
780
- return target;
781
- };
780
+ }, "class");
782
781
  }
783
782
  __name(Bootstrap, "Bootstrap");
784
783
  function ComponentScan(scanPath) {
785
- return (target) => {
784
+ return IOC.createDecorator((target, _context) => {
786
785
  if (!(target.prototype instanceof Koatty)) {
787
786
  throw new Error(`class does not inherit from Koatty`);
788
787
  }
789
788
  scanPath = scanPath ?? "";
790
789
  IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);
791
- };
790
+ }, "class");
792
791
  }
793
792
  __name(ComponentScan, "ComponentScan");
794
793
  function ConfigurationScan(scanPath) {
795
- return (target) => {
794
+ return IOC.createDecorator((target, _context) => {
796
795
  if (!(target.prototype instanceof Koatty)) {
797
796
  throw new Error(`class does not inherit from Koatty`);
798
797
  }
799
798
  scanPath = scanPath ?? "";
800
799
  IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);
801
- };
800
+ }, "class");
802
801
  }
803
802
  __name(ConfigurationScan, "ConfigurationScan");
804
803
  /**