koatty 4.1.12 → 4.1.13

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,10 +1,10 @@
1
1
 
2
2
  
3
- > koatty@4.1.12 build /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
3
+ > koatty@4.1.13 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.12 build:js /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
7
+ > koatty@4.1.13 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
@@ -17,12 +17,12 @@
17
17
  ESM Build start
18
18
  CJS dist/index.js 31.49 KB
19
19
  CJS dist/index.js.map 65.60 KB
20
- CJS ⚡️ Build success in 87ms
20
+ CJS ⚡️ Build success in 88ms
21
21
  ESM dist/index.mjs 27.58 KB
22
22
  ESM dist/index.mjs.map 65.46 KB
23
- ESM ⚡️ Build success in 87ms
23
+ ESM ⚡️ Build success in 88ms
24
24
 
25
- > koatty@4.1.12 build:dts /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
25
+ > koatty@4.1.13 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...
@@ -76,7 +76,7 @@ Analysis will use the bundled TypeScript version 5.8.2
76
76
  API Extractor completed successfully
77
77
  ⠙✅ Type declarations built successfully
78
78
 
79
- > koatty@4.1.12 build:doc /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
79
+ > koatty@4.1.13 build:doc /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
80
80
  > api-documenter markdown --input temp --output docs/api
81
81
 
82
82
 
@@ -87,7 +87,7 @@ Reading koatty.api.json
87
87
  Deleting old output from docs/api
88
88
  Writing koatty package
89
89
 
90
- > koatty@4.1.12 build:cp /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
90
+ > koatty@4.1.13 build:cp /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
91
91
  > node scripts/copyFiles && node ../../scripts/postBuild.js
92
92
 
93
93
  Copied package.json to dist/
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.1.13
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - koatty_container@2.0.7
9
+ - koatty_config@1.2.18
10
+ - koatty_core@2.1.8
11
+ - koatty_exception@2.1.8
12
+ - koatty_router@2.1.9
13
+ - koatty_serve@3.1.9
14
+ - koatty_trace@2.1.9
15
+
3
16
  ## 4.1.12
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-03-02 23:05:46
3
+ * @Date: 2026-03-07 23:34:54
4
4
  * @License: BSD (3-Clause)
5
5
  * @Copyright (c) - <richenlin(at)gmail.com>
6
6
  * @HomePage: https://koatty.org/
package/dist/index.js CHANGED
@@ -34,7 +34,7 @@ var path__namespace = /*#__PURE__*/_interopNamespace(path);
34
34
 
35
35
  /*!
36
36
  * @Author: richen
37
- * @Date: 2026-03-02 15:05:43
37
+ * @Date: 2026-03-07 15:34:52
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.12",
54
+ version: "4.1.13",
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",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA,UAAA,CAAA;AAAA,EAAA,cAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAAA,IAAA,MAAA,CAAA,OAAA,GAAA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,QAAA;AAAA,MACX,WAAA,EAAe,iFAAA;AAAA,MACf,OAAA,EAAW;AAAA,QACT,KAAA,EAAS,oFAAA;AAAA,QACT,UAAA,EAAY,MAAA;AAAA,QACZ,WAAA,EAAa,2BAAA;AAAA,QACb,WAAA,EAAa,wDAAA;AAAA,QACb,UAAA,EAAY,2DAAA;AAAA,QACZ,KAAA,EAAS,2BAAA;AAAA,QACT,IAAA,EAAQ,4BAAA;AAAA,QACR,IAAA,EAAQ,yCAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACd;AAAA,MACA,IAAA,EAAQ,iBAAA;AAAA,MACR,OAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,KAAA,EAAS,mBAAA;AAAA,UACT,MAAA,EAAU,kBAAA;AAAA,UACV,OAAA,EAAW;AAAA;AACb,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,QAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,sBAAA;AAAA,QACA,sBAAA;AAAA,QACA,6BAAA;AAAA,QACA,WAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,WAAA,EAAe;AAAA,QACb,GAAA,EAAO;AAAA,OACT;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO;AAAA,OACT;AAAA,MACA,OAAA,EAAW;AAAA,QACT,IAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA,EAAU;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,KAAA,EAAS;AAAA,OACX;AAAA,MACA,OAAA,EAAW,cAAA;AAAA,MACX,IAAA,EAAQ;AAAA,QACN,GAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAY,kCAAA;AAAA,MACZ,WAAA,EAAe;AAAA,QACb;AAAA,UACE,IAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA,eAAA,EAAmB;AAAA,QACjB,eAAA,EAAiB,SAAA;AAAA,QACjB,2BAAA,EAA6B,SAAA;AAAA,QAC7B,0BAAA,EAA4B,SAAA;AAAA,QAC5B,mBAAA,EAAqB,QAAA;AAAA,QACrB,aAAA,EAAe,SAAA;AAAA,QACf,YAAA,EAAc,QAAA;AAAA,QACd,oBAAA,EAAsB,QAAA;AAAA,QACtB,eAAA,EAAiB,QAAA;AAAA,QACjB,aAAA,EAAe,SAAA;AAAA,QACf,oBAAA,EAAsB,QAAA;AAAA,QACtB,kBAAA,EAAoB,QAAA;AAAA,QACpB,WAAA,EAAa,QAAA;AAAA,QACb,kCAAA,EAAoC,QAAA;AAAA,QACpC,2BAAA,EAA6B,QAAA;AAAA,QAC7B,MAAA,EAAU,QAAA;AAAA,QACV,oBAAA,EAAsB,SAAA;AAAA,QACtB,IAAA,EAAQ,SAAA;AAAA,QACR,qBAAA,EAAuB,QAAA;AAAA,QACvB,iBAAA,EAAqB,aAAA;AAAA,QACrB,kBAAA,EAAoB,QAAA;AAAA,QACpB,SAAA,EAAa,QAAA;AAAA,QACb,SAAA,EAAW,SAAA;AAAA,QACX,KAAA,EAAS;AAAA,OACX;AAAA,MACA,YAAA,EAAgB;AAAA,QACd,GAAA,EAAO,QAAA;AAAA,QACP,aAAA,EAAiB,aAAA;AAAA,QACjB,gBAAA,EAAoB,aAAA;AAAA,QACpB,WAAA,EAAe,aAAA;AAAA,QACf,gBAAA,EAAoB,aAAA;AAAA,QACpB,UAAA,EAAc,aAAA;AAAA,QACd,aAAA,EAAiB,aAAA;AAAA,QACjB,aAAA,EAAiB,aAAA;AAAA,QACjB,aAAA,EAAiB,aAAA;AAAA,QACjB,YAAA,EAAgB,aAAA;AAAA,QAChB,YAAA,EAAgB,aAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MACA,KAAA,EAAS;AAAA,KACX;AAAA,EAAA;AAAA,CAAA,CAAA;AClGA,IAAMC,GAAAA,GAAMC,eAAAA,EAAAA;AACZ,IAAM,EAAEC,OAAAA,EAASC,OAAAA,EAAO,GAAKH,GAAAA;AAKtB,IAAMI,cAAAA,GAAiBD,OAAAA;AACvB,IAAME,eAAAA,GAAkBH,OAAAA,CAAQI,IAAAA,CAAKC,KAAAA,CAAM,CAAA,CAAA,IAAM,QAAA;AA4DjD,SAASC,UAAAA,CAAWC,QAAAA,EAAkBC,KAAAA,EAAeC,MAAAA,EAAaC,KAAAA,EAAoB;AAC3F,EAAA,IAAIC,kBAAOC,OAAAA,CAAQH,MAAAA,CAAAA,IAAWA,MAAAA,CAAOI,QAAQN,QAAAA,EAAU;AACrD,IAAA,MAAMO,KAAAA,CAAM,CAAA,SAAA,EAAYN,KAAAA,CAAAA,+CAAAA,CAAsD,CAAA;AAChF,EAAA;AACA,EAAA,IAAIC,MAAAA,CAAO,YAAA,CAAA,EAAe;AACxB,IAAA,IAAIA,MAAAA,CAAOI,SAASE,MAAAA,EAAW;AAC7B,MAAA,MAAMC,IAAAA,GAAOC,MAAAA,CAAOD,IAAAA,CAAKP,MAAAA,CAAAA;AACzB,MAAA,IAAIO,IAAAA,CAAK,CAAA,CAAA,IAAMT,QAAAA,IAAYI,iBAAAA,CAAOC,OAAAA,CAAQH,MAAAA,CAAOO,IAAAA,CAAK,CAAA,CAAE,CAAC,CAAA,EAAG;AAC1D,QAAA,MAAMF,KAAAA,CAAM,CAAA,SAAA,EAAYN,KAAAA,CAAAA,+CAAAA,CAAsD,CAAA;AAChF,MAAA;IACF,CAAA,MAAA,IAAWC,MAAAA,CAAOI,QAAQN,QAAAA,EAAU;AAClC,MAAA,MAAMO,KAAAA,CAAM,CAAA,SAAA,EAAYN,KAAAA,CAAAA,+CAAAA,CAAsD,CAAA;AAChF,IAAA;AACF,EAAA;AACA,EAAA,IAAI,CAACE,KAAAA,EAAO;AACV,IAAA;AACF,EAAA;AACA,EAAA,IAAIA,KAAAA,CAAMQ,GAAAA,CAAIX,QAAAA,CAAAA,EAAW;AACvB,IAAA,MAAM,IAAIO,KAAAA,CAAM,CAAA,kCAAA,EAAqCN,KAAAA,CAAAA,GAAAA,CAAU,CAAA;AACjE,EAAA;AACAE,EAAAA,KAAAA,CAAMS,IAAIZ,QAAAA,CAAAA;AAEV,EAAA;AACF;AAvBgBD,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AA6BT,SAASc,YAAAA,GAAAA;AACd,EAAA,IAAIC,WAAAA,GAAclB,eAAAA;AAClBkB,EAAAA,WAAAA,GAAcA,YAAYhB,KAAAA,CAAM,CAAA,EAAGgB,WAAAA,CAAYC,WAAAA,CAAY,GAAA,CAAA,CAAA;AAC3D,EAAA,IAAIC,cAAcC,OAAAA,CAAQvB,OAAAA;AAC1B,EAAA,IAAIsB,WAAAA,CAAY,CAAA,CAAA,KAAO,GAAA,EAAK;AAC1BA,IAAAA,WAAAA,GAAcA,WAAAA,CAAYlB,MAAM,CAAA,CAAA;AAClC,EAAA;AACAkB,EAAAA,WAAAA,GAAcA,YAAYlB,KAAAA,CAAM,CAAA,EAAGkB,WAAAA,CAAYD,WAAAA,CAAY,GAAA,CAAA,CAAA;AAE3D,EAAA,IAAIX,kBAAOc,QAAAA,CAASJ,WAAAA,IAAeV,iBAAAA,CAAOc,QAAAA,CAASF,WAAAA,CAAAA,EAAc;AAC/DG,IAAAA,2BAAAA,CAAOC,KAAAA,CAAM,CAAA,2BAAA,EAA8BN,WAAAA,CAAAA,qBAAAA,EAAmCE,WAAAA,CAAAA,oBAAAA,CAAiC,CAAA;AACjH,EAAA;AACF;AAZgBH,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAmBT,IAAMQ,iCAAiB,MAAA,CAAA,MAAA;AAC5B,EAAA,IAAIC,WAAAA,GAAc,KAAA;AAElB,EAAA,MAAMC,OAAOC,IAAAA,CAAKC,SAAAA,CAAUR,OAAAA,CAAQM,IAAAA,CAAK,CAAA,CAAE,CAAA;AAC3C,EAAA,IAAIA,IAAAA,CAAKG,OAAAA,CAAQ,MAAA,CAAA,GAAU,EAAA,EAAI;AAC7BJ,IAAAA,WAAAA,GAAc,IAAA;AAChB,EAAA;AACA,EAAA,OAAOA,WAAAA;AACT,CAAA,EAR8B,gBAAA,CAAA;;;ACtHvB,IAAMK,cAAAA,GAAiB,gBAAA;AACvB,IAAMC,kBAAAA,GAAqB,oBAAA;AAI3B,IAAMC,IAAAA,GAAO;;;;;;;;ACqCb,IAAMC,MAAAA,GAAN,MAAMA,OAAAA,CAAAA;EApDb;;;AAqDEC,EAAAA,GAAAA;;;;;;AAOA,EAAA,WAAA,CAAYA,GAAAA,EAAwB;AAClC,IAAA,IAAA,CAAKA,GAAAA,GAAMA,GAAAA;AACb,EAAA;;;;;;;;;;;;AAaA,EAAA,OAAcC,WAAWD,GAAAA,EAAwB;AAC/C,IAAA,IAAIA,GAAAA,CAAIE,OAAO,aAAA,EAAe;AAC5Bd,MAAAA,2BAAAA,CAAOe,SAAS,OAAA,CAAA;IAClB,CAAA,MAAO;AACLf,MAAAA,2BAAAA,CAAOe,SAAS,MAAA,CAAA;AAClB,IAAA;AAEA,IAAA,MAAMC,QAAAA,GAAWJ,GAAAA,CAAII,QAAAA,IAAYlB,OAAAA,CAAQmB,GAAAA,EAAG;AAC5C,IAAA,MAAMC,OAAAA,GAAUN,IAAIM,OAAAA,IAAgBC,eAAAA,CAAAA,OAAAA,CAAQH,UAAUJ,GAAAA,CAAIQ,QAAAA,GAAW,QAAQ,MAAA,CAAA;AAC7E,IAAA,MAAMC,UAAAA,GAAkBF,eAAAA,CAAAA,OAAAA,CAAQG,SAAAA,EAAW,IAAA,CAAA;AAC3CrC,IAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,UAAA,EAAYI,QAAAA,CAAAA;AAC/B/B,IAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,SAAA,EAAWM,OAAAA,CAAAA;AAC9BjC,IAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,YAAA,EAAcS,UAAAA,CAAAA;AAGjC,IAAA,IAAIpC,iBAAAA,CAAOuC,OAAAA,CAAQZ,GAAAA,CAAIzB,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAMf,OAAMa,iBAAAA,CAAOwC,WAAAA,CAAY,GAAQC,eAAAA,CAAAA,OAAAA,CAAQR,OAAAA,CAAAA,CAAAA,aAAAA,CAAuB,CAAA;AACtE,MAAA,IAAI9C,KAAIe,IAAAA,EAAM;AACZyB,QAAAA,GAAAA,CAAIzB,OAAOf,IAAAA,CAAIe,IAAAA;AACfyB,QAAAA,GAAAA,CAAIrC,OAAAA,GAAUqC,GAAAA,CAAIrC,OAAAA,IAAWH,IAAAA,CAAIG,OAAAA;AACnC,MAAA;AACF,IAAA;AAIAuB,IAAAA,OAAAA,CAAQgB,IAAIa,SAAAA,GAAYX,QAAAA;AACxBlB,IAAAA,OAAAA,CAAQgB,IAAIc,QAAAA,GAAWV,OAAAA;AACvBpB,IAAAA,OAAAA,CAAQgB,IAAIe,WAAAA,GAAcR,UAAAA;AAG1BvB,IAAAA,OAAAA,CAAQgB,IAAIgB,UAAAA,GAAaT,UAAAA;AACzBpC,IAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,WAAA,EAAaS,UAAAA,CAAAA;AAClC,EAAA;;;;;;;;;;;EAYA,OAAcU,gBAAAA,CAAiBnB,KAAwB7B,MAAAA,EAAoB;AACzE,IAAA,IAAIiD,iBAAiB,EAAA;AACrB,IAAA,MAAMC,aAAAA,GAAgBC,oBAAAA,CAAIC,gBAAAA,CAAiBC,2BAAAA,EAAY5B,gBAAgBzB,MAAAA,CAAAA;AACvE,IAAA,IAAIkD,aAAAA,EAAe;AACjB,MAAA,IAAIhD,iBAAAA,CAAOoD,OAAAA,CAAQJ,aAAAA,CAAAA,EAAgB;AACjCD,QAAAA,cAAAA,GAAiBC,aAAAA;MACnB,CAAA,MAAO;AACLD,QAAAA,cAAAA,CAAeM,KAAKL,aAAAA,CAAAA;AACtB,MAAA;AACF,IAAA;AACA,IAAA,IAAID,cAAAA,CAAeO,SAAS,CAAA,EAAG;AAC7BP,MAAAA,cAAAA,GAAiB;QAACpB,GAAAA,CAAIM;;AACxB,IAAA;AACA,IAAA,OAAOc,cAAAA;AACT,EAAA;;;;;;;;EASA,OAAcQ,oBAAAA,CAAqB5B,KAAwB7B,MAAAA,EAAoB;AAC7E,IAAA,MAAM0D,QAAAA,GAAWP,oBAAAA,CAAIC,gBAAAA,CAAiBC,2BAAAA,EAAY3B,oBAAoB1B,MAAAA,CAAAA;AACtE,IAAA,IAAI2D,qBAAqB,EAAA;AACzB,IAAA,IAAID,QAAAA,EAAU;AACZ,MAAA,IAAIxD,iBAAAA,CAAOoD,OAAAA,CAAQI,QAAAA,CAAAA,EAAW;AAC5BC,QAAAA,kBAAAA,GAAqBD,QAAAA;MACvB,CAAA,MAAO;AACLC,QAAAA,kBAAAA,CAAmBJ,KAAKG,QAAAA,CAAAA;AAC1B,MAAA;AACF,IAAA;AACA,IAAA,OAAOC,kBAAAA;AACT,EAAA;;;;;;;;;EAUA,OAAcC,kBAAAA,CAAmB/B,KAAwB7B,MAAAA,EAAa;AAEpE,IAAA,MAAMiD,cAAAA,GAAiBrB,OAAAA,CAAOoB,gBAAAA,CAAiBnB,GAAAA,EAAK7B,MAAAA,CAAAA;AAEpD,IAAA,MAAM2D,kBAAAA,GAAqB/B,OAAAA,CAAO6B,oBAAAA,CAAqB5B,GAAAA,EAAK7B,MAAAA,CAAAA;AAC5D,IAAA,MAAMC,KAAAA,uBAAY4D,GAAAA,EAAAA;AAClBC,IAAAA,kBAAAA,CAAKb,cAAAA,EAAgB,EAAA,EAAI,CAACnD,QAAAA,EAAkBC,OAAegE,OAAAA,KAAAA;AACzDlE,MAAAA,UAAAA,CAAWC,QAAAA,EAAUC,KAAAA,EAAOgE,OAAAA,EAAS9D,KAAAA,CAAAA;IACvC,CAAA,EAAG;AAAC,MAAA,UAAA;AAAY,MAAA,UAAA;AAAY,MAAA;AAAgB,KAAA,EAAA;AAAI0D,MAAAA,GAAAA,kBAAAA;MAAoB,CAAA,EAAG3D,MAAAA,CAAOI,QAAQ,KAAA,CAAA,GAAA;AAAW,KAAA,CAAA;AACjGH,IAAAA,KAAAA,CAAM+D,KAAAA,EAAK;AACb,EAAA;;;;;;;;;AAUA,EAAA,OAAcC,UAAUpC,GAAAA,EAAwB;AAC9C,IAAA,MAAMqC,IAAAA,GAAOrC,GAAAA,CAAIsC,WAAAA,CAAY,UAAA,KAAe,EAAA;AAC5C,IAAA,MAAMC,OAAAA,GAAUF,IAAAA,CAAK,CAAA,CAAA,IAAM,EAAC;AAE5B,IAAA,IAAIE,QAAQC,MAAAA,EAAQ;AAClB,MAAA,MAAMC,MAAMF,OAAAA,CAAQC,MAAAA;AACpB,MAAA,IAAIE,QAAAA,GAAyB,OAAA,EAC3BC,WAAAA,GAAc,EAAA,EACdC,aAAa,EAAA;AACf,MAAA,IAAI5C,GAAAA,CAAIE,QAAQ,YAAA,EAAc;AAC5BwC,QAAAA,QAAAA,GAAW,MAAA;AACb,MAAA;AACA,MAAA,IAAID,IAAII,SAAAA,EAAW;AACjBH,QAAAA,QAAAA,GAAYD,GAAAA,CAAII,UAAWC,WAAAA,EAAW;AACxC,MAAA;AACA,MAAA,IAAIL,IAAIM,QAAAA,EAAU;AAChBJ,QAAAA,WAAAA,GAAcF,GAAAA,CAAIM,QAAAA;AACpB,MAAA;AACA,MAAA,IAAIN,IAAIG,UAAAA,EAAY;AAClBA,QAAAA,UAAAA,GAAaH,GAAAA,CAAIG,UAAAA;AACnB,MAAA;AACA,MAAA,IAAI,CAAC5C,IAAIQ,QAAAA,EAAU;AACjBpB,QAAAA,2BAAAA,CAAO4D,YAAY,IAAA,CAAA;AACnB5D,QAAAA,4BAAO6D,cAAAA,CAAe;UACpBC,OAAAA,EAAS,GAAA;UACTC,aAAAA,EAAe;SACjB,CAAA;AACF,MAAA;AACA,MAAA,IAAIT,QAAAA,EAAU;AACZtD,QAAAA,2BAAAA,CAAOe,SAASuC,QAAAA,CAAAA;AAClB,MAAA;AACA,MAAA,IAAIC,WAAAA,IAAe,CAAC3C,GAAAA,CAAIoD,MAAAA,EAAQ;AAC9B/E,QAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,UAAA,EAAY2C,WAAAA,CAAAA;AAC/BzD,QAAAA,OAAAA,CAAQgB,IAAImD,SAAAA,GAAYV,WAAAA;AACxBvD,QAAAA,2BAAAA,CAAOkE,eAAeX,WAAAA,CAAAA;AACxB,MAAA;AACA,MAAA,IAAIC,UAAAA,EAAY;AACdxD,QAAAA,2BAAAA,CAAOmE,cAAcX,UAAAA,CAAAA;AACvB,MAAA;AACC5C,MAAAA,GAAAA,CAAYwD,IAAAA,CAAKC,oBAAAA,CAASC,OAAAA,EAAS,YAAA;AAClC,QAAA,MAAMtE,4BAAOuE,UAAAA,EAAU;AACvB,QAAA,MAAMvE,4BAAOwE,OAAAA,EAAO;MACtB,CAAA,CAAA;AACF,IAAA;AACF,EAAA;;;;;;;;;;;;;;;;EAiBA,aAAoBC,iBAAAA,CAAkB7D,KAAwB7B,MAAAA,EAAa;AACzE,IAAA,IAAI;AACF,MAAA,IAAIE,iBAAAA,CAAOyF,UAAAA,CAAYxC,oBAAAA,CAAYyC,eAAe,CAAA,EAAG;AAClDzC,QAAAA,oBAAAA,CAAYyC,eAAAA,EAAe;AAC9B,MAAA;IACF,CAAA,CAAA,MAAQ;AACN3E,MAAAA,2BAAAA,CAAO4E,KAAK,+DAAA,CAAA;AACd,IAAA;AAEA,IAAA,MAAMC,iBAAAA,GAAoBlE,OAAAA,CAAO6B,oBAAAA,CAAqB5B,GAAAA,EAAK7B,MAAAA,CAAAA;AAC3D,IAAA,MAAM+F,MAAAA,GAAS,IAAInE,OAAAA,CAAOC,GAAAA,CAAAA;AAE1B,IAAA,KAAA,MAAWmE,SAASC,uBAAAA,EAAa;AAC/B,MAAA,QAAQD,KAAAA;AACN,QAAA,KAAKV,oBAAAA,CAASY,OAAAA;AACZjF,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,yBAAA,CAAA;AACzBJ,UAAAA,MAAAA,CAAOK,YAAYN,iBAAAA,CAAAA;AACnBlE,UAAAA,OAAAA,CAAOqC,UAAUpC,GAAAA,CAAAA;AACjB,UAAA,MAAMwE,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAASgB,aAAAA;AACZrF,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,wBAAA,CAAA;AACzB,UAAA,MAAME,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAASiB,aAAAA;AACZtF,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,oCAAA,CAAA;AACzB,UAAA,MAAMK,gBAAAA,GAAmB,IAAIC,4BAAAA,CAAiB5E,GAAAA,CAAAA;AAC9C3B,UAAAA,iBAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,kBAAA,EAAoB2E,gBAAAA,CAAAA;AAGvCA,UAAAA,gBAAAA,CAAiBE,kBAAAA,EAAkB;AAEnC,UAAA,MAAMC,KAAAA,GAAQH,iBAAiBI,QAAAA,EAAQ;AACvC3F,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,CAAA,WAAA,EAAcQ,MAAME,cAAc,CAAA,kBAAA,EAAqBF,KAAAA,CAAMG,cAAc,CAAA,gBAAA,CAAkB,CAAA;AAGtH7F,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,qBAAA,CAAA;AACzB,UAAA,MAAMJ,MAAAA,CAAOgB,eAAeP,gBAAAA,CAAAA;AAG5BA,UAAAA,gBAAAA,CAAiBQ,kBAAkBhH,MAAAA,CAAAA;AACnCwG,UAAAA,gBAAAA,CAAiBS,0BAAAA,EAA0B;AAE3C,UAAA,MAAMZ,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAAS4B,UAAAA;AACZjG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,qBAAA,CAAA;AACzB,UAAA,MAAME,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAAS6B,cAAAA;AACZlG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOqB,eAAAA,EAAe;AAC5B,UAAA,MAAMf,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAAS+B,WAAAA;AACZpG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,mBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOuB,YAAAA,EAAY;AACzB,UAAA,MAAMjB,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAASiC,cAAAA;AACZtG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOyB,eAAAA,EAAe;AAC5B,UAAA,MAAMnB,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAASmC,UAAAA;AACZxG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,uCAAA,CAAA;AAEzB,UAAA,MAAME,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,oBAAAA,CAASoC,SAAAA;AACZzG,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,oBAAA,CAAA;AACzB,UAAA,MAAME,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAED,QAAA,KAAKV,oBAAAA,CAASqC,QAAAA;AACZ1G,UAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,mBAAA,CAAA;AACzB,UAAA,MAAME,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA;AACC,UAAA,MAAMK,sBAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AACJ;AACF,IAAA;AACF,EAAA;;;;;;;;;;AAWUI,EAAAA,WAAAA,CAAYwB,QAAAA,EAAqB;AACzC,IAAA,MAAMC,cAAmB,EAAC;AAE1B/D,IAAAA,kBAAAA,CAAK;AAAC,MAAA;AAAa,KAAA,EAAA,IAAA,CAAKjC,GAAAA,CAAIS,UAAAA,EAAY,SAAUlC,IAAAA,EAAc0H,OAAcC,GAAAA,EAAQ;AACpFF,MAAAA,WAAAA,CAAYzH,IAAAA,CAAAA,GAAQ2H,GAAAA;IACtB,CAAA,CAAA;AAEA,IAAA,IAAI7H,iBAAAA,CAAOoD,OAAAA,CAAQsE,QAAAA,CAAAA,EAAW;AAC5BA,MAAAA,QAAAA,GAAWA,QAAAA,CAASpE,MAAAA,GAAS,CAAA,GAAIoE,QAAAA,GAAW;AAAC,QAAA;;AAC/C,IAAA;AACA,IAAA,IAAII,SAAAA,GAAYC,yBAAAA,CAASL,QAAAA,EAAU,IAAA,CAAK/F,IAAIM,OAAO,CAAA;AACnD6F,IAAAA,SAAAA,GAAY9H,iBAAAA,CAAOgI,MAAAA,CAAOL,WAAAA,EAAaG,SAAAA,EAAW,IAAA,CAAA;AAElD,IAAA,IAAA,CAAKnG,GAAAA,CAAIsG,WAAAA,CAAY,UAAA,EAAYH,SAAAA,CAAAA;AACnC,EAAA;;;;;;;;;;;;AAaA,EAAA,MAAgBZ,eAAAA,GAAkB;AAIhC,IAAA,IAAIgB,cAAAA,GAAiB,IAAA,CAAKvG,GAAAA,CAAIwC,MAAAA,CAAO/D,QAAW,YAAA,CAAA;AAChD,IAAA,IAAIJ,iBAAAA,CAAOuC,OAAAA,CAAQ2F,cAAAA,CAAAA,EAAiB;AAClCA,MAAAA,cAAAA,GAAiB;AAAE/D,QAAAA,MAAAA,EAAQ,EAAC;AAAGgE,QAAAA,IAAAA,EAAM;AAAE,OAAA;AACzC,IAAA;AASA,IAAA,IAAI;AACF,MAAA,MAAMC,YAAAA,GAAeF,cAAAA,CAAe/D,MAAAA,EAAQkE,KAAAA,IAAS,EAAC;AACtD,MAAA,MAAMC,MAAAA,GAASC,kBAAAA,CAAMH,YAAAA,EAAc,IAAA,CAAKzG,GAAG,CAAA;AAC3C3B,MAAAA,iBAAAA,CAAOsC,MAAAA,CAAO,IAAA,CAAKX,GAAAA,EAAK,UAAU2G,MAAAA,CAAAA;AAClC,MAAA,IAAA,CAAK3G,GAAAA,CAAI6G,IAAIF,MAAAA,CAAAA;AACbvH,MAAAA,2BAAAA,CAAO0H,MAAM,CAAA,2BAAA,CAA6B,CAAA;AAC5C,IAAA,CAAA,CAAA,OAASC,KAAAA,EAAY;AACnB3H,MAAAA,2BAAAA,CAAO4E,IAAAA,CAAK,CAAA,iCAAA,EAAoC+C,KAAAA,CAAMC,OAAO,CAAA,CAAE,CAAA;AACjE,IAAA;AAGA,IAAA,MAAMC,aAAAA,GAAgB3F,oBAAAA,CAAI4F,SAAAA,CAAU,YAAA,KAAiB,EAAA;AACrDD,IAAAA,aAAAA,CAAcE,OAAAA,CAAQ,CAACC,IAAAA,KAAAA;AACrBA,MAAAA,IAAAA,CAAKC,MAAMD,IAAAA,CAAKC,EAAAA,IAAM,EAAA,EAAIC,OAAAA,CAAQ,eAAe,EAAA,CAAA;AACjD,MAAA,IAAIF,KAAKC,EAAAA,IAAMhJ,iBAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CmD,QAAAA,oBAAAA,CAAIiG,GAAAA,CAAIH,IAAAA,CAAKC,EAAAA,EAAID,IAAAA,CAAKjJ,MAAAA,EAAQ;UAAEqJ,KAAAA,EAAO,WAAA;UAAaC,IAAAA,EAAM,YAAA;AAAcC,UAAAA,IAAAA,EAAM;SAAG,CAAA;AACjF,QAAA,MAAMC,GAAAA,GAAMrG,oBAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAAC0J,yCAAAA,CAA8BF,GAAAA,CAAAA,EAAM;AACvC,UAAA,MAAMnJ,KAAAA,CAAM,CAAA,eAAA,EAAkB4I,IAAAA,CAAKC,EAAE,CAAA,yCAAA,CAA2C,CAAA;AAClF,QAAA;AACF,MAAA;IACF,CAAA,CAAA;AAEA,IAAA,MAAMS,cAAAA,GAAiBvB,cAAAA,CAAeC,IAAAA,IAAQ,EAAA;AAE9C,IAAA,MAAMuB,QAAAA,mBAAW,IAAI/F,GAAAA,CAAI,EAAE,CAAA;AAC3B8F,IAAAA,cAAAA,CAAeX,OAAAA,CAAQ,CAACC,IAAAA,KAAAA;AACtBW,MAAAA,QAAAA,CAASlJ,IAAIuI,IAAAA,CAAAA;IACf,CAAA,CAAA;AAGA,IAAA,MAAMY,gBAAAA,GAAmBzB,cAAAA,CAAe/D,MAAAA,IAAU,EAAC;AACnD,IAAA,KAAA,MAAWyF,GAAAA,IAAOC,KAAAA,CAAMC,IAAAA,CAAKJ,QAAAA,CAAAA,EAAW;AACtC,MAAA,MAAMK,MAAAA,GAAsB9G,oBAAAA,CAAI+G,GAAAA,CAAIJ,GAAAA,EAAK,YAAA,CAAA;AACzC,MAAA,IAAI,CAACG,MAAAA,EAAQ;AACX,QAAA,MAAM5J,KAAAA,CAAM,CAAA,WAAA,EAAcyJ,GAAAA,CAAAA,YAAAA,CAAiB,CAAA;AAC7C,MAAA;AACA,MAAA,IAAI,CAAC5J,iBAAAA,CAAOyF,UAAAA,CAAWsE,MAAAA,CAAOE,GAAG,CAAA,EAAG;AAClC,QAAA,MAAM9J,KAAAA,CAAM,CAAA,eAAA,EAAkByJ,GAAAA,CAAAA,yCAAAA,CAA8C,CAAA;AAC9E,MAAA;AAEA7I,MAAAA,2BAAAA,CAAO0H,KAAAA,CAAM,CAAA,iBAAA,EAAoBmB,GAAAA,CAAAA,CAAK,CAAA;AACtC,MAAA,MAAMM,aAAAA,GAAgBP,gBAAAA,CAAiBC,GAAAA,CAAAA,IAAQ,EAAC;AAGhD,MAAA,MAAMO,eAAAA,GAAkBvB,cAAcwB,IAAAA,CAAKC,CAAAA,MAAKA,CAAAA,CAAErB,EAAAA,KAAOY,GAAAA,CAAAA,EAAM9J,MAAAA;AAC/D,MAAA,IAAIwK,mBAAuC,EAAC;AAC5C,MAAA,IAAIH,eAAAA,EAAiB;AACnB,QAAA,IAAI;AACFG,UAAAA,gBAAAA,GAAmBrH,qBAAIsH,eAAAA,CAAgBC,8BAAAA,EAAoBL,eAAAA,EAAiBP,GAAAA,KAAQ,EAAC;QACvF,CAAA,CAAA,MAAQ;AAENU,UAAAA,gBAAAA,GAAmB,EAAC;AACtB,QAAA;AACF,MAAA;AAGA,MAAA,MAAMG,aAAAA,GAAoC;QAAE,GAAGH,gBAAAA;QAAkB,GAAGJ;AAAc,OAAA;AAGlF,MAAA,IAAIO,aAAAA,CAAcC,YAAY,KAAA,EAAO;AACnC3J,QAAAA,2BAAAA,CAAO4E,IAAAA,CAAK,CAAA,eAAA,EAAkBiE,GAAAA,CAAAA,iCAAAA,CAAsC,CAAA;AACpE,QAAA;AACF,MAAA;AAGA,MAAA,MAAMe,SAAS,MAAMZ,MAAAA,CAAOE,GAAAA,CAAIQ,aAAAA,EAAe,KAAK9I,GAAG,CAAA;AACvD,MAAA,IAAI3B,iBAAAA,CAAOyF,UAAAA,CAAWkF,MAAAA,CAAAA,EAAS;AAC7B,QAAA,IAAIC,UAAAA,GAAaD,MAAAA;AAGjB,QAAA,IAAIF,cAAcI,QAAAA,EAAU;AAC1B,UAAA,MAAMC,YAAY9K,iBAAAA,CAAOoD,OAAAA,CAAQqH,cAAcI,QAAQ,CAAA,GACnDJ,cAAcI,QAAAA,GACd;YAACJ,aAAAA,CAAcI;;AAEnB9J,UAAAA,2BAAAA,CAAOkF,GAAAA,CACL,QAAA,EACA,EAAA,EACA,CAAA,WAAA,EAAc2D,GAAAA,CAAAA,uBAAAA,EAA6BkB,SAAAA,CAAUC,IAAAA,CAAK,IAAA,CAAA,CAAA,CAAO,CAAA;AAGnEH,UAAAA,UAAAA,GAAaI,8BAAAA,CAAmBF,WAAWH,MAAAA,CAAAA;AAC7C,QAAA;AAGA,QAAA,IAAIC,UAAAA,CAAWtH,SAAS,CAAA,EAAG;AACzB,UAAA,IAAA,CAAK3B,GAAAA,CAAI6G,IAAIoC,UAAAA,CAAAA;QACf,CAAA,MAAO;AACL,UAAA,IAAA,CAAKjJ,GAAAA,CAAIsJ,OAAOL,UAAAA,CAAAA;AAClB,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;;;;;;;;;AAUA,EAAA,MAAgBtD,eAAAA,GAAkB;AAChC,IAAA,MAAM4D,cAAAA,GAAiBjI,oBAAAA,CAAI4F,SAAAA,CAAU,YAAA,CAAA;AAErC,IAAA,MAAMsC,cAAwB,EAAA;AAC9BD,IAAAA,cAAAA,CAAepC,OAAAA,CAAQ,CAACC,IAAAA,KAAAA;AACtBA,MAAAA,IAAAA,CAAKC,MAAMD,IAAAA,CAAKC,EAAAA,IAAM,EAAA,EAAIC,OAAAA,CAAQ,eAAe,EAAA,CAAA;AACjD,MAAA,IAAIF,KAAKC,EAAAA,IAAMhJ,iBAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CiB,QAAAA,2BAAAA,CAAO0H,KAAAA,CAAM,CAAA,iBAAA,EAAoBM,IAAAA,CAAKC,EAAE,CAAA,CAAE,CAAA;AAE1C/F,QAAAA,oBAAAA,CAAIiG,GAAAA,CAAIH,IAAAA,CAAKC,EAAAA,EAAID,IAAAA,CAAKjJ,MAAAA,EAAQ;UAAEqJ,KAAAA,EAAO,WAAA;UAAaC,IAAAA,EAAM,YAAA;AAAcC,UAAAA,IAAAA,EAAM;SAAG,CAAA;AACjF,QAAA,MAAMC,GAAAA,GAAMrG,oBAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAACsL,yCAAAA,CAA8B9B,GAAAA,CAAAA,EAAM;AACvC,UAAA,MAAMnJ,KAAAA,CAAM,CAAA,eAAA,EAAkB4I,IAAAA,CAAKC,EAAE,CAAA,yCAAA,CAA2C,CAAA;AAClF,QAAA;AACAmC,QAAAA,WAAAA,CAAY9H,IAAAA,CAAK0F,KAAKC,EAAE,CAAA;AAC1B,MAAA;IACF,CAAA,CAAA;AACA,IAAA,IAAA,CAAKrH,GAAAA,CAAIsG,WAAAA,CAAY,cAAA,EAAgBkD,WAAAA,CAAAA;AACrC,IAAA,OAAOA,WAAAA;AACT,EAAA;;;;;;;;;;AAWA,EAAA,MAAgB/D,YAAAA,GAAe;AAC7B,IAAA,MAAMiE,WAAAA,GAAcpI,oBAAAA,CAAI4F,SAAAA,CAAU,SAAA,CAAA;AAElC,IAAA,KAAA,MAAWE,QAAQsC,WAAAA,EAAa;AAC9BtC,MAAAA,IAAAA,CAAKC,MAAMD,IAAAA,CAAKC,EAAAA,IAAM,EAAA,EAAIC,OAAAA,CAAQ,YAAY,EAAA,CAAA;AAC9C,MAAA,IAAIF,KAAKC,EAAAA,IAAMhJ,iBAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CiB,QAAAA,2BAAAA,CAAO0H,KAAAA,CAAM,CAAA,cAAA,EAAiBM,IAAAA,CAAKC,EAAE,CAAA,CAAE,CAAA;AAEvC/F,QAAAA,oBAAAA,CAAIiG,GAAAA,CAAIH,IAAAA,CAAKC,EAAAA,EAAID,IAAAA,CAAKjJ,MAAAA,EAAQ;UAAEqJ,KAAAA,EAAO,WAAA;UAAaC,IAAAA,EAAM,SAAA;AAAWC,UAAAA,IAAAA,EAAM;SAAG,CAAA;AAC9E,QAAA,MAAMC,GAAAA,GAAMrG,oBAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAACwL,sCAAAA,CAA2BhC,GAAAA,CAAAA,EAAM;AACpC,UAAA,MAAMnJ,KAAAA,CAAM,CAAA,YAAA,EAAe4I,IAAAA,CAAKC,EAAE,CAAA,sCAAA,CAAwC,CAAA;AAC5E,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;;;;;;;;;;;;AAaA,EAAA,MAAgBnC,eAAeP,gBAAAA,EAAqC;AAClE,IAAA,MAAMiF,aAAAA,GAAgBtI,oBAAAA,CAAI4F,SAAAA,CAAU,WAAA,CAAA;AAEpC0C,IAAAA,aAAAA,CAAczC,OAAAA,CAAQ,CAACC,IAAAA,KAAAA;AACrBA,MAAAA,IAAAA,CAAKC,MAAMD,IAAAA,CAAKC,EAAAA,IAAM,EAAA,EAAIC,OAAAA,CAAQ,cAAc,EAAA,CAAA;AAChD,MAAA,IAAIjJ,iBAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC/BmD,QAAAA,oBAAAA,CAAIiG,GAAAA,CAAIH,IAAAA,CAAKC,EAAAA,EAAID,IAAAA,CAAKjJ,MAAAA,EAAQ;UAAEqJ,KAAAA,EAAO,WAAA;UAAaC,IAAAA,EAAM,WAAA;AAAaC,UAAAA,IAAAA,EAAM;SAAG,CAAA;AAEhF,QAAA,IAAIN,KAAKC,EAAAA,IAAOD,IAAAA,CAAKC,EAAAA,CAAIwC,QAAAA,CAAS,QAAA,CAAA,EAAW;AAC3C,UAAA,MAAMlC,GAAAA,GAAMrG,oBAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,UAAA,IAAI,CAAC2L,qCAAAA,CAA0BnC,GAAAA,CAAAA,EAAM;AACnC,YAAA,MAAMnJ,KAAAA,CAAM,CAAA,WAAA,EAAc4I,IAAAA,CAAKC,EAAE,CAAA,qCAAA,CAAuC,CAAA;AAC1E,UAAA;AACF,QAAA;AACF,MAAA;IACF,CAAA,CAAA;AAEA,IAAA,IAAI1C,gBAAAA,EAAkB;AACpB,MAAA,MAAMA,iBAAiBoF,kBAAAA,EAAkB;IAC3C,CAAA,MAAO;AACL3K,MAAAA,2BAAAA,CAAO4E,KAAK,gCAAA,CAAA;AACZ,MAAA,IAAIgG,WAAAA,GAAc,IAAA,CAAKhK,GAAAA,CAAIwC,MAAAA,CAAO/D,QAAW,QAAA,CAAA;AAC7C,MAAA,IAAIJ,iBAAAA,CAAOuC,OAAAA,CAAQoJ,WAAAA,CAAAA,EAAc;AAC/BA,QAAAA,WAAAA,GAAc;AAAExH,UAAAA,MAAAA,EAAQ,EAAC;AAAGgE,UAAAA,IAAAA,EAAM;AAAG,SAAA;AACvC,MAAA;AACA,MAAA,MAAMyD,cAAAA,GAAiBD,WAAAA,CAAYxD,IAAAA,IAAQ,EAAA;AAC3C,MAAA,KAAA,MAAWyB,OAAOgC,cAAAA,EAAgB;AAChC,QAAA,MAAM7B,MAAAA,GAAkB9G,oBAAAA,CAAI+G,GAAAA,CAAIJ,GAAAA,EAAK,WAAA,CAAA;AACrC,QAAA,IAAI,CAACG,MAAAA,EAAQ;AACX,UAAA,MAAM5J,KAAAA,CAAM,CAAA,OAAA,EAAUyJ,GAAAA,CAAAA,YAAAA,CAAiB,CAAA;AACzC,QAAA;AACA,QAAA,IAAI,CAAC5J,iBAAAA,CAAOyF,UAAAA,CAAWsE,MAAAA,CAAOE,GAAG,CAAA,EAAG;AAClC,UAAA,MAAM9J,KAAAA,CAAM,CAAA,OAAA,EAAUyJ,GAAAA,CAAAA,qCAAAA,CAA0C,CAAA;AAClE,QAAA;AACA,QAAA,IAAI+B,WAAAA,CAAYxH,MAAAA,CAAOyF,GAAAA,CAAAA,KAAS,KAAA,EAAO;AACrC7I,UAAAA,2BAAAA,CAAO4E,IAAAA,CAAK,CAAA,OAAA,EAAUiE,GAAAA,CAAAA,kCAAAA,CAAuC,CAAA;AAC7D,UAAA;AACF,QAAA;AAEA,QAAA,MAAMG,MAAAA,CAAOE,IAAI0B,WAAAA,CAAYxH,MAAAA,CAAOyF,GAAAA,CAAAA,IAAQ,EAAC,EAAG,IAAA,CAAKjI,GAAG,CAAA;AAC1D,MAAA;AACF,IAAA;AACF,EAAA;AAGF,CAAA;ACvjBO,SAASkK,cAAcC,QAAAA,EAAkC;AAC9D,EAAA,OAAO,OAAOhM,MAAAA,KAAAA;AACZ,IAAA,IAAI,EAAEA,MAAAA,CAAOiM,SAAAA,YAAqBC,kBAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,KAAAA,CAAM,CAAA,MAAA,EAASL,MAAAA,CAAOI,IAAI,CAAA,6BAAA,CAA+B,CAAA;AACrE,IAAA;AACA,IAAA,OAAO,MAAM+L,gBAAAA,CAAiBnM,MAAAA,EAAQgM,QAAAA,EAAU,IAAA,CAAA;AAClD,EAAA,CAAA;AACF;AAPgBD,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAoBhB,IAAMK,oBAAAA,mBAAuB,MAAA,CAAA,eAAgBpM,MAAAA,EAAagM,QAAAA,EACxDK,eAAe,KAAA,EAAK;AAGpB,EAAA,IAAItL,OAAAA,CAAQgB,IAAIuK,UAAAA,EAAY;AAC1B,IAAA,MAAMC,eAAexL,OAAAA,CAAQgB,GAAAA,CAAIuK,UAAAA,CAAWE,KAAAA,CAAM,GAAA,CAAA,CAC/CC,MAAAA,CAAOlC,CAAAA,CAAAA,KAAK,CAACA,CAAAA,CAAEmC,QAAAA,CAAS,SAAA,CAAA,CAAA,CACxBzB,KAAK,GAAA,CAAA;AACRlK,IAAAA,OAAAA,CAAQgB,IAAIuK,UAAAA,GAAaC,YAAAA;AAC3B,EAAA;AAGA5L,EAAAA,YAAAA,EAAAA;AAEA,EAAA,MAAMS,cAAcD,cAAAA,EAAAA;AACpB,EAAA,IAAI,CAACkL,gBAAgBjL,WAAAA,EAAa;AAChC,IAAA;AACF,EAAA;AAEA,EAAA,MAAMS,GAAAA,GAAyB8K,OAAAA,CAAQC,SAAAA,CAAU5M,MAAAA,EAAQ,EAAE,CAAA;AAE3D,EAAA,IAAIoB,WAAAA,EAAa;AACfS,IAAAA,GAAAA,CAAIoD,MAAAA,GAAS,IAAA;AACbhE,IAAAA,2BAAAA,CAAO4L,OAAO,KAAA,CAAA;AAChB,EAAA;AAEA,EAAA,IAAI,CAAChL,GAAAA,CAAIoD,MAAAA,EAAQ6H,OAAAA,CAAQC,IAAIpL,IAAAA,CAAAA;AAC7B,EAAA,IAAI,EAAEE,eAAeqK,kBAAAA,CAAAA,EAAS;AAC5B,IAAA,MAAM,IAAI7L,KAAAA,CAAM,CAAA,MAAA,EAASL,MAAAA,CAAOI,IAAI,CAAA,6BAAA,CAA+B,CAAA;AACrE,EAAA;AAGAwB,EAAAA,MAAAA,CAAOE,WAAWD,GAAAA,CAAAA;AAGlB,EAAA,IAAI3B,iBAAAA,CAAOyF,UAAAA,CAAWqG,QAAAA,CAAAA,EAAW;AAC/B/K,IAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,IAAA,MAAM6F,SAASnK,GAAAA,CAAAA;AACjB,EAAA;AAEAsB,EAAAA,oBAAAA,CAAI6J,OAAOnL,GAAAA,CAAAA;AAGXZ,EAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,mBAAA,CAAA;AACzBvE,EAAAA,MAAAA,CAAOgC,kBAAAA,CAAmB/B,KAAK7B,MAAAA,CAAAA;AAG/B,EAAA,MAAM4B,MAAAA,CAAO8D,iBAAAA,CAAkB7D,GAAAA,EAAK7B,MAAAA,CAAAA;AAGpC6B,EAAAA,GAAAA,CAAIoL,SAAAA,EAAS;AAEb,EAAA,OAAOpL,GAAAA;AACT,CAAA,EArD6B,sBAAA,CAAA;AAgE7B,IAAMsK,gBAAAA,mBAAmB,MAAA,CAAA,eAAgBnM,MAAAA,EAAagM,QAAAA,EACpDK,eAAe,KAAA,EAAK;AACpB,EAAA,IAAI;AACF,IAAA,MAAMxK,GAAAA,GAAM,MAAMuK,oBAAAA,CAAqBpM,MAAAA,EAAQgM,UAAUK,YAAAA,CAAAA;AACzD,IAAA,IAAI,CAACxK,GAAAA,EAAK;AAGV,IAAA,MAAMT,cAAcD,cAAAA,EAAAA;AACpB,IAAA,IAAI,CAACC,WAAAA,EAAa;AAChBS,MAAAA,GAAAA,CAAIqL,OAAOC,cAAAA,CAAAA;AACb,IAAA;AAEA,IAAA,OAAOtL,GAAAA;AACT,EAAA,CAAA,CAAA,OAASuL,GAAAA,EAAK;AACZnM,IAAAA,2BAAAA,CAAOC,MAAMkM,GAAAA,CAAAA;AACf,EAAA;AACF,CAAA,EAhByB,kBAAA,CAAA;AAmDzB,eAAsBC,iBAAAA,CACpBrN,QACAgM,QAAAA,EAAkC;AAElC,EAAA,IAAI,EAAEhM,MAAAA,CAAOiM,SAAAA,YAAqBC,kBAAAA,CAAAA,EAAS;AACzC,IAAA,MAAM,IAAI7L,KAAAA,CAAM,CAAA,MAAA,EAASL,MAAAA,CAAOI,IAAI,CAAA,6BAAA,CAA+B,CAAA;AACrE,EAAA;AACA,EAAA,MAAMyB,GAAAA,GAAM,MAAMuK,oBAAAA,CAAqBpM,MAAAA,EAAQgM,UAAU,IAAA,CAAA;AACzD,EAAA,IAAI,CAACnK,GAAAA,EAAK;AACR,IAAA,MAAM,IAAIxB,MAAM,kCAAA,CAAA;AAClB,EAAA;AACA,EAAA,OAAOwB,GAAAA;AACT;AAZsBwL,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA;AAuBtB,IAAMF,cAAAA,2BAAkBtL,GAAAA,KAAAA;AACtBZ,EAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sCAAA,CAAA;AACzBlF,EAAAA,4BAAOkF,GAAAA,CAAI,QAAA,EAAU,IAAI,CAAA,gBAAA,EAAmBpF,OAAAA,CAAQvB,OAAO,CAAA,CAAE,CAAA;AAC7DyB,EAAAA,4BAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,CAAA,iBAAA,EAAoB1G,cAAAA,CAAAA,CAAgB,CAAA;AAC7DwB,EAAAA,4BAAOkF,GAAAA,CAAI,QAAA,EAAU,IAAI,CAAA,iBAAA,EAAoBtE,GAAAA,CAAIE,GAAG,CAAA,CAAE,CAAA;AACtD,EAAA,IAAIF,GAAAA,CAAIQ,QAAAA,EAAUpB,2BAAAA,CAAO4E,KAAK,CAAA,sBAAA,CAAwB,CAAA;AACtD5E,EAAAA,2BAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sCAAA,CAAA;AAIzBE,EAAAA,sBAAAA,CAAWxE,GAAAA,EAAKyD,oBAAAA,CAASgI,QAAQ,CAAA;AACnC,CAAA,EAXuB,gBAAA,CAAA;AC/JhB,SAASC,UAAUvB,QAAAA,EAAkC;AAC1D,EAAA,OAAO,SAAUhM,MAAAA,EAAW;AAC1B,IAAA,IAAI,EAAEA,MAAAA,CAAOiM,SAAAA,YAAqBC,kBAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACA8C,IAAAA,oBAAAA,CAAIqK,SAAAA,CAAU,WAAA,EAAaxN,MAAAA,EAAQ,YAAA,CAAA;AACnC+L,IAAAA,aAAAA,CAAcC,QAAAA,EAAUhM,MAAAA,CAAAA;AACxB,IAAA,OAAOA,MAAAA;AACT,EAAA,CAAA;AACF;AATgBuN,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA;AA0BT,SAASE,cAAcC,QAAAA,EAA4B;AACxD,EAAA,OAAO,CAAC1N,MAAAA,KAAAA;AACN,IAAA,IAAI,EAAEA,MAAAA,CAAOiM,SAAAA,YAAqBC,kBAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACAqN,IAAAA,QAAAA,GAAWA,QAAAA,IAAY,EAAA;AACvBvK,IAAAA,oBAAAA,CAAIwK,iBAAAA,CAAkBtK,2BAAAA,EAAY5B,cAAAA,EAAgBiM,UAAU1N,MAAAA,CAAAA;AAC9D,EAAA,CAAA;AACF;AARgByN,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAwBT,SAASG,kBAAkBF,QAAAA,EAA4B;AAC5D,EAAA,OAAO,CAAC1N,MAAAA,KAAAA;AACN,IAAA,IAAI,EAAEA,MAAAA,CAAOiM,SAAAA,YAAqBC,kBAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACAqN,IAAAA,QAAAA,GAAWA,QAAAA,IAAY,EAAA;AACvBvK,IAAAA,oBAAAA,CAAIwK,iBAAAA,CAAkBtK,2BAAAA,EAAY3B,kBAAAA,EAAoBgM,UAAU1N,MAAAA,CAAAA;AAClE,EAAA,CAAA;AACF;AARgB4N,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.12\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.2\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
1
+ {"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.13\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.2\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
package/dist/index.mjs CHANGED
@@ -17,7 +17,7 @@ import * as path from 'path';
17
17
 
18
18
  /*!
19
19
  * @Author: richen
20
- * @Date: 2026-03-02 15:05:43
20
+ * @Date: 2026-03-07 15:34:52
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.12",
37
+ version: "4.1.13",
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",
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.12\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.2\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
1
+ {"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","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.13\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.2\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koatty",
3
- "version": "4.1.12",
3
+ "version": "4.1.13",
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.7",
92
92
  "reflect-metadata": "^0.2.2",
93
93
  "supertest": "^7.x.x",
94
94
  "ts-jest": "^29.x.x",
@@ -96,16 +96,16 @@
96
96
  },
97
97
  "dependencies": {
98
98
  "koa": "^3.1.2",
99
- "koatty_config": "^1.2.17",
100
- "koatty_container": "^2.0.6",
101
- "koatty_core": "^2.1.7",
102
- "koatty_exception": "^2.1.7",
99
+ "koatty_config": "^1.2.18",
100
+ "koatty_container": "^2.0.7",
101
+ "koatty_core": "^2.1.8",
102
+ "koatty_exception": "^2.1.8",
103
103
  "koatty_lib": "^1.4.8",
104
104
  "koatty_loader": "^1.1.8",
105
105
  "koatty_logger": "^2.8.4",
106
- "koatty_router": "^2.1.8",
107
- "koatty_serve": "^3.1.8",
108
- "koatty_trace": "^2.1.8",
106
+ "koatty_router": "^2.1.9",
107
+ "koatty_serve": "^3.1.9",
108
+ "koatty_trace": "^2.1.9",
109
109
  "ts-morph": "^27.0.2"
110
110
  },
111
111
  "types": "./index.d.ts"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koatty",
3
- "version": "4.1.12",
3
+ "version": "4.1.13",
4
4
  "description": "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
5
5
  "main": "./dist/index.js",
6
6
  "exports": {
@@ -81,21 +81,21 @@
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.7"
85
85
  },
86
86
  "dependencies": {
87
87
  "koa": "^3.1.2",
88
88
  "ts-morph": "^27.0.2",
89
- "koatty_config": "1.2.17",
90
- "koatty_core": "2.1.7",
91
- "koatty_exception": "2.1.7",
92
- "koatty_container": "2.0.6",
89
+ "koatty_config": "1.2.18",
90
+ "koatty_core": "2.1.8",
91
+ "koatty_container": "2.0.7",
92
+ "koatty_exception": "2.1.8",
93
93
  "koatty_lib": "1.4.8",
94
- "koatty_logger": "2.8.4",
95
- "koatty_router": "2.1.8",
96
- "koatty_serve": "3.1.8",
97
94
  "koatty_loader": "1.1.8",
98
- "koatty_trace": "2.1.8"
95
+ "koatty_logger": "2.8.4",
96
+ "koatty_router": "2.1.9",
97
+ "koatty_serve": "3.1.9",
98
+ "koatty_trace": "2.1.9"
99
99
  },
100
100
  "types": "./dist/index.d.ts",
101
101
  "scripts": {