koatty 4.1.9 → 4.1.11

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.
@@ -1,28 +1,28 @@
1
1
 
2
2
  
3
- > koatty@4.1.9 build /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
3
+ > koatty@4.1.11 build /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
4
4
  > pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp
5
5
 
6
6
 
7
- > koatty@4.1.9 build:js /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
7
+ > koatty@4.1.11 build:js /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
8
8
  > tsup
9
9
 
10
10
  CLI Building entry: src/index.ts
11
11
  CLI Using tsconfig: tsconfig.json
12
12
  CLI tsup v8.5.1
13
- CLI Using tsup config: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/tsup.config.ts
13
+ CLI Using tsup config: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/tsup.config.ts
14
14
  CLI Target: node18
15
15
  CLI Cleaning output folder
16
16
  CJS Build start
17
17
  ESM Build start
18
- ESM dist/index.mjs 26.91 KB
19
- ESM dist/index.mjs.map 62.51 KB
20
- ESM ⚡️ Build success in 148ms
21
- CJS dist/index.js 30.78 KB
22
- CJS dist/index.js.map 62.66 KB
23
- CJS ⚡️ Build success in 149ms
24
-
25
- > koatty@4.1.9 build:dts /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
18
+ CJS dist/index.js 31.49 KB
19
+ CJS dist/index.js.map 65.60 KB
20
+ CJS ⚡️ Build success in 92ms
21
+ ESM dist/index.mjs 27.58 KB
22
+ ESM dist/index.mjs.map 65.46 KB
23
+ ESM ⚡️ Build success in 93ms
24
+
25
+ > koatty@4.1.11 build:dts /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
26
26
  > bash scripts/build-dts.sh
27
27
 
28
28
  🔨 Building type declarations for koatty...
@@ -50,12 +50,14 @@
50
50
  Using configuration from ./api-extractor.json
51
51
  Analysis will use the bundled TypeScript version 5.8.2
52
52
  *** The target project appears to use TypeScript 5.9.3 which is newer than the bundled compiler engine; consider upgrading API Extractor.
53
- Writing: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/temp/koatty.api.json
54
- Writing package typings: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/dist/index.d.ts
55
- Warning: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:861:4 - (tsdoc-undefined-tag) The TSDoc tag "@interface" is not defined in this configuration
56
- Warning: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:862:4 - (tsdoc-undefined-tag) The TSDoc tag "@extends" is not defined in this configuration
53
+ Writing: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/temp/koatty.api.json
54
+ Writing package typings: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/dist/index.d.ts
55
+ Warning: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:908:4 - (tsdoc-undefined-tag) The TSDoc tag "@interface" is not defined in this configuration
56
+ Warning: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:909:4 - (tsdoc-undefined-tag) The TSDoc tag "@extends" is not defined in this configuration
57
57
  Warning: src/core/Bootstrap.ts:21:4 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
58
58
  Warning: src/core/Bootstrap.ts:30:1 - (ae-missing-release-tag) "ExecBootStrap" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
59
+ Warning: src/core/Bootstrap.ts:140:64 - (tsdoc-characters-after-block-tag) The token "@Bootstrap" looks like a TSDoc tag but contains an invalid character "("; if it is not a tag, use a backslash to escape the "@"
60
+ Warning: src/core/Bootstrap.ts:165:1 - (ae-missing-release-tag) "createApplication" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
59
61
  Warning: src/core/Decorator.ts:17:4 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen
60
62
  Warning: src/core/Decorator.ts:29:1 - (ae-missing-release-tag) "Bootstrap" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
61
63
  Warning: src/core/Decorator.ts:44:31 - (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.
@@ -74,7 +76,7 @@ Analysis will use the bundled TypeScript version 5.8.2
74
76
  API Extractor completed successfully
75
77
  ⠙✅ Type declarations built successfully
76
78
 
77
- > koatty@4.1.9 build:doc /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
79
+ > koatty@4.1.11 build:doc /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
78
80
  > api-documenter markdown --input temp --output docs/api
79
81
 
80
82
 
@@ -85,7 +87,7 @@ Reading koatty.api.json
85
87
  Deleting old output from docs/api
86
88
  Writing koatty package
87
89
 
88
- > koatty@4.1.9 build:cp /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
90
+ > koatty@4.1.11 build:cp /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
89
91
  > node scripts/copyFiles && node ../../scripts/postBuild.js
90
92
 
91
93
  Copied package.json to dist/
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.1.11
4
+
5
+ ### Patch Changes
6
+
7
+ - build
8
+
9
+ ## 4.1.10
10
+
11
+ ### Patch Changes
12
+
13
+ - build
14
+ - koatty_router@2.1.7
15
+
3
16
  ## 4.1.9
4
17
 
5
18
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @Author: richen
3
- * @Date: 2026-02-11 11:43:12
3
+ * @Date: 2026-02-14 14:04:03
4
4
  * @License: BSD (3-Clause)
5
5
  * @Copyright (c) - <richenlin(at)gmail.com>
6
6
  * @HomePage: https://koatty.org/
@@ -70,6 +70,41 @@ export { Config }
70
70
  */
71
71
  export declare function ConfigurationScan(scanPath?: string | string[]): ClassDecorator;
72
72
 
73
+ /**
74
+ * Create a fully initialized Koatty application WITHOUT starting a server.
75
+ *
76
+ * Use this for:
77
+ * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)
78
+ * - Custom server setup (attach handler to an existing HTTP server)
79
+ * - Testing (use app.getRequestHandler() with supertest)
80
+ *
81
+ * @param target - The Koatty application class decorated with @Bootstrap()
82
+ * @param bootFunc - Optional function to execute during bootstrap process
83
+ * @returns Promise<KoattyApplication> A ready application instance (not listening)
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Serverless entry point
88
+ * import { createApplication } from 'koatty';
89
+ * import { App } from './App';
90
+ *
91
+ * let cachedApp: KoattyApplication;
92
+ *
93
+ * export async function handler(req, res) {
94
+ * if (!cachedApp) {
95
+ * cachedApp = await createApplication(App);
96
+ * }
97
+ * return cachedApp.getRequestHandler()(req, res);
98
+ * }
99
+ *
100
+ * // Custom HTTP server
101
+ * import http from 'http';
102
+ * const app = await createApplication(App);
103
+ * http.createServer(app.getRequestHandler()).listen(3000);
104
+ * ```
105
+ */
106
+ export declare function createApplication(target: any, bootFunc?: (...args: any[]) => any): Promise<KoattyApplication>;
107
+
73
108
  /**
74
109
  * Decorator function for bootstrapping a Koatty application.
75
110
  *
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-02-11 03:43:07
37
+ * @Date: 2026-02-14 06:04:00
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.9",
54
+ version: "4.1.11",
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",
@@ -723,7 +723,7 @@ function ExecBootStrap(bootFunc) {
723
723
  };
724
724
  }
725
725
  __name(ExecBootStrap, "ExecBootStrap");
726
- var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
726
+ var bootstrapApplication = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
727
727
  if (process.env.NODE_DEBUG) {
728
728
  const debugModules = process.env.NODE_DEBUG.split(",").filter((m) => !m.includes("winston")).join(",");
729
729
  process.env.NODE_DEBUG = debugModules;
@@ -738,20 +738,27 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
738
738
  app.silent = true;
739
739
  koatty_logger.DefaultLogger.enable(false);
740
740
  }
741
+ if (!app.silent) console.log(LOGO);
742
+ if (!(app instanceof koatty_core.Koatty)) {
743
+ throw new Error(`class ${target.name} does not inherit from Koatty`);
744
+ }
745
+ Loader.initialize(app);
746
+ if (koatty_lib.Helper.isFunction(bootFunc)) {
747
+ koatty_logger.DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
748
+ await bootFunc(app);
749
+ }
750
+ koatty_container.IOC.setApp(app);
751
+ koatty_logger.DefaultLogger.Log("Koatty", "", "ComponentScan ...");
752
+ Loader.CheckAllComponents(app, target);
753
+ await Loader.LoadAllComponents(app, target);
754
+ app.markReady();
755
+ return app;
756
+ }, "bootstrapApplication");
757
+ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
741
758
  try {
742
- if (!app.silent) console.log(LOGO);
743
- if (!(app instanceof koatty_core.Koatty)) {
744
- throw new Error(`class ${target.name} does not inherit from Koatty`);
745
- }
746
- Loader.initialize(app);
747
- if (koatty_lib.Helper.isFunction(bootFunc)) {
748
- koatty_logger.DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
749
- await bootFunc(app);
750
- }
751
- koatty_container.IOC.setApp(app);
752
- koatty_logger.DefaultLogger.Log("Koatty", "", "ComponentScan ...");
753
- Loader.CheckAllComponents(app, target);
754
- await Loader.LoadAllComponents(app, target);
759
+ const app = await bootstrapApplication(target, bootFunc, isInitiative);
760
+ if (!app) return;
761
+ const isUTRuntime = checkUTRuntime();
755
762
  if (!isUTRuntime) {
756
763
  app.listen(listenCallback);
757
764
  }
@@ -760,6 +767,17 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
760
767
  koatty_logger.DefaultLogger.Fatal(err);
761
768
  }
762
769
  }, "executeBootstrap");
770
+ async function createApplication(target, bootFunc) {
771
+ if (!(target.prototype instanceof koatty_core.Koatty)) {
772
+ throw new Error(`class ${target.name} does not inherit from Koatty`);
773
+ }
774
+ const app = await bootstrapApplication(target, bootFunc, true);
775
+ if (!app) {
776
+ throw new Error("Failed to initialize application");
777
+ }
778
+ return app;
779
+ }
780
+ __name(createApplication, "createApplication");
763
781
  var listenCallback = /* @__PURE__ */ __name((app) => {
764
782
  koatty_logger.DefaultLogger.Log("Koatty", "", "====================================");
765
783
  koatty_logger.DefaultLogger.Log("Koatty", "", `Nodejs Version: ${process.version}`);
@@ -832,6 +850,7 @@ exports.Bootstrap = Bootstrap;
832
850
  exports.ComponentScan = ComponentScan;
833
851
  exports.ConfigurationScan = ConfigurationScan;
834
852
  exports.ExecBootStrap = ExecBootStrap;
853
+ exports.createApplication = createApplication;
835
854
  Object.keys(koatty_container).forEach(function (k) {
836
855
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
837
856
  enumerable: true,
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","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","listen","listenCallback","err","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.9\",\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.1\",\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 * Bind event hook to target class.\n * \n * @param eventName - The application event name to bind\n/**\n * Execute bootstrap process for Koatty application.\n * \n * @param target - The target class to instantiate the application\n * @param bootFunc - Function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n * \n * This function performs the following steps:\n * 1. Checks runtime environment\n * 2. Creates application instance\n * 3. Initializes environment\n * 4. Executes boot function\n * 5. Sets up IOC container\n * 6. Scans and loads components\n * 7. Triggers application events\n * 8. Starts server (except in test environment)\n */\nconst executeBootstrap = 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 try {\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 if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\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","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.11\",\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.1\",\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"]}
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-02-11 03:43:07
20
+ * @Date: 2026-02-14 06:04:00
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.9",
37
+ version: "4.1.11",
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",
@@ -706,7 +706,7 @@ function ExecBootStrap(bootFunc) {
706
706
  };
707
707
  }
708
708
  __name(ExecBootStrap, "ExecBootStrap");
709
- var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
709
+ var bootstrapApplication = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
710
710
  if (process.env.NODE_DEBUG) {
711
711
  const debugModules = process.env.NODE_DEBUG.split(",").filter((m) => !m.includes("winston")).join(",");
712
712
  process.env.NODE_DEBUG = debugModules;
@@ -721,20 +721,27 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
721
721
  app.silent = true;
722
722
  DefaultLogger.enable(false);
723
723
  }
724
+ if (!app.silent) console.log(LOGO);
725
+ if (!(app instanceof Koatty)) {
726
+ throw new Error(`class ${target.name} does not inherit from Koatty`);
727
+ }
728
+ Loader.initialize(app);
729
+ if (Helper.isFunction(bootFunc)) {
730
+ DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
731
+ await bootFunc(app);
732
+ }
733
+ IOC.setApp(app);
734
+ DefaultLogger.Log("Koatty", "", "ComponentScan ...");
735
+ Loader.CheckAllComponents(app, target);
736
+ await Loader.LoadAllComponents(app, target);
737
+ app.markReady();
738
+ return app;
739
+ }, "bootstrapApplication");
740
+ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
724
741
  try {
725
- if (!app.silent) console.log(LOGO);
726
- if (!(app instanceof Koatty)) {
727
- throw new Error(`class ${target.name} does not inherit from Koatty`);
728
- }
729
- Loader.initialize(app);
730
- if (Helper.isFunction(bootFunc)) {
731
- DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
732
- await bootFunc(app);
733
- }
734
- IOC.setApp(app);
735
- DefaultLogger.Log("Koatty", "", "ComponentScan ...");
736
- Loader.CheckAllComponents(app, target);
737
- await Loader.LoadAllComponents(app, target);
742
+ const app = await bootstrapApplication(target, bootFunc, isInitiative);
743
+ if (!app) return;
744
+ const isUTRuntime = checkUTRuntime();
738
745
  if (!isUTRuntime) {
739
746
  app.listen(listenCallback);
740
747
  }
@@ -743,6 +750,17 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
743
750
  DefaultLogger.Fatal(err);
744
751
  }
745
752
  }, "executeBootstrap");
753
+ async function createApplication(target, bootFunc) {
754
+ if (!(target.prototype instanceof Koatty)) {
755
+ throw new Error(`class ${target.name} does not inherit from Koatty`);
756
+ }
757
+ const app = await bootstrapApplication(target, bootFunc, true);
758
+ if (!app) {
759
+ throw new Error("Failed to initialize application");
760
+ }
761
+ return app;
762
+ }
763
+ __name(createApplication, "createApplication");
746
764
  var listenCallback = /* @__PURE__ */ __name((app) => {
747
765
  DefaultLogger.Log("Koatty", "", "====================================");
748
766
  DefaultLogger.Log("Koatty", "", `Nodejs Version: ${process.version}`);
@@ -791,6 +809,6 @@ __name(ConfigurationScan, "ConfigurationScan");
791
809
  * @version 2026-02-03 10:00:00
792
810
  */
793
811
 
794
- export { Bootstrap, ComponentScan, ConfigurationScan, ExecBootStrap };
812
+ export { Bootstrap, ComponentScan, ConfigurationScan, ExecBootStrap, createApplication };
795
813
  //# sourceMappingURL=index.mjs.map
796
814
  //# sourceMappingURL=index.mjs.map
@@ -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","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","listen","listenCallback","err","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.9\",\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.1\",\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 * Bind event hook to target class.\n * \n * @param eventName - The application event name to bind\n/**\n * Execute bootstrap process for Koatty application.\n * \n * @param target - The target class to instantiate the application\n * @param bootFunc - Function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n * \n * This function performs the following steps:\n * 1. Checks runtime environment\n * 2. Creates application instance\n * 3. Initializes environment\n * 4. Executes boot function\n * 5. Sets up IOC container\n * 6. Scans and loads components\n * 7. Triggers application events\n * 8. Starts server (except in test environment)\n */\nconst executeBootstrap = 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 try {\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 if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\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","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.mjs","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.11\",\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.1\",\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"]}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koatty",
3
- "version": "4.1.9",
3
+ "version": "4.1.11",
4
4
  "description": "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
5
5
  "scripts": {
6
6
  "build": "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
@@ -88,7 +88,7 @@
88
88
  "eslint-plugin-jest": "^28.x.x",
89
89
  "jest": "^29.x.x",
90
90
  "jest-html-reporters": "^3.x.x",
91
- "koatty_validation": "^2.0.6",
91
+ "koatty_validation": "^2.0.5",
92
92
  "reflect-metadata": "^0.2.2",
93
93
  "supertest": "^7.x.x",
94
94
  "ts-jest": "^29.x.x",
@@ -97,13 +97,13 @@
97
97
  "dependencies": {
98
98
  "koa": "^3.1.1",
99
99
  "koatty_config": "^1.2.16",
100
- "koatty_container": "^2.0.6",
100
+ "koatty_container": "^2.0.5",
101
101
  "koatty_core": "^2.1.6",
102
102
  "koatty_exception": "^2.1.6",
103
103
  "koatty_lib": "^1.4.7",
104
104
  "koatty_loader": "^1.1.7",
105
105
  "koatty_logger": "^2.8.3",
106
- "koatty_router": "^2.1.6",
106
+ "koatty_router": "^2.1.7",
107
107
  "koatty_serve": "^3.1.7",
108
108
  "koatty_trace": "^2.1.7",
109
109
  "ts-morph": "^27.0.2"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koatty",
3
- "version": "4.1.9",
3
+ "version": "4.1.11",
4
4
  "description": "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
@@ -81,20 +81,20 @@
81
81
  "supertest": "^7.x.x",
82
82
  "ts-jest": "^29.x.x",
83
83
  "tslib": "^2.x.x",
84
- "koatty_validation": "2.0.6"
84
+ "koatty_validation": "2.0.5"
85
85
  },
86
86
  "dependencies": {
87
87
  "koa": "^3.1.1",
88
88
  "ts-morph": "^27.0.2",
89
- "koatty_config": "1.2.16",
90
- "koatty_container": "2.0.6",
91
89
  "koatty_core": "2.1.6",
90
+ "koatty_container": "2.0.5",
92
91
  "koatty_exception": "2.1.6",
92
+ "koatty_config": "1.2.16",
93
93
  "koatty_lib": "1.4.7",
94
94
  "koatty_loader": "1.1.7",
95
95
  "koatty_logger": "2.8.3",
96
- "koatty_router": "2.1.6",
97
96
  "koatty_serve": "3.1.7",
97
+ "koatty_router": "2.1.7",
98
98
  "koatty_trace": "2.1.7"
99
99
  },
100
100
  "types": "./dist/index.d.ts",