koatty 4.1.9 → 4.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +19 -17
- package/CHANGELOG.md +13 -0
- package/dist/index.d.ts +36 -1
- package/dist/index.js +35 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -17
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +4 -4
- package/package.json +5 -5
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> koatty@4.1.
|
|
3
|
+
> koatty@4.1.11 build /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
|
|
4
4
|
> pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
> koatty@4.1.
|
|
7
|
+
> koatty@4.1.11 build:js /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
|
|
8
8
|
> tsup
|
|
9
9
|
|
|
10
10
|
[34mCLI[39m Building entry: src/index.ts
|
|
11
11
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
12
12
|
[34mCLI[39m tsup v8.5.1
|
|
13
|
-
[34mCLI[39m Using tsup config: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/tsup.config.ts
|
|
13
|
+
[34mCLI[39m Using tsup config: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/tsup.config.ts
|
|
14
14
|
[34mCLI[39m Target: node18
|
|
15
15
|
[34mCLI[39m Cleaning output folder
|
|
16
16
|
[34mCJS[39m Build start
|
|
17
17
|
[34mESM[39m Build start
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
23
|
-
[
|
|
24
|
-
|
|
25
|
-
> koatty@4.1.
|
|
18
|
+
[32mCJS[39m [1mdist/index.js [22m[32m31.49 KB[39m
|
|
19
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m65.60 KB[39m
|
|
20
|
+
[32mCJS[39m ⚡️ Build success in 92ms
|
|
21
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m27.58 KB[39m
|
|
22
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m65.46 KB[39m
|
|
23
|
+
[32mESM[39m ⚡️ Build success in 93ms
|
|
24
|
+
|
|
25
|
+
> koatty@4.1.11 build:dts /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
|
|
26
26
|
> bash scripts/build-dts.sh
|
|
27
27
|
|
|
28
28
|
🔨 Building type declarations for koatty...
|
|
@@ -50,12 +50,14 @@
|
|
|
50
50
|
Using configuration from ./api-extractor.json
|
|
51
51
|
Analysis will use the bundled TypeScript version 5.8.2
|
|
52
52
|
*** The target project appears to use TypeScript 5.9.3 which is newer than the bundled compiler engine; consider upgrading API Extractor.
|
|
53
|
-
[36mWriting: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/temp/koatty.api.json[39m
|
|
54
|
-
[36mWriting package typings: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/dist/index.d.ts[39m
|
|
55
|
-
[33mWarning: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:
|
|
56
|
-
[33mWarning: /Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:
|
|
53
|
+
[36mWriting: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/temp/koatty.api.json[39m
|
|
54
|
+
[36mWriting package typings: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty/dist/index.d.ts[39m
|
|
55
|
+
[33mWarning: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:908:4 - (tsdoc-undefined-tag) The TSDoc tag "@interface" is not defined in this configuration[39m
|
|
56
|
+
[33mWarning: /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty-core/dist/index.d.ts:909:4 - (tsdoc-undefined-tag) The TSDoc tag "@extends" is not defined in this configuration[39m
|
|
57
57
|
[33mWarning: src/core/Bootstrap.ts:21:4 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen[39m
|
|
58
58
|
[33mWarning: src/core/Bootstrap.ts:30:1 - (ae-missing-release-tag) "ExecBootStrap" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)[39m
|
|
59
|
+
[33mWarning: src/core/Bootstrap.ts:140:64 - (tsdoc-characters-after-block-tag) The token "@Bootstrap" looks like a TSDoc tag but contains an invalid character "("; if it is not a tag, use a backslash to escape the "@"[39m
|
|
60
|
+
[33mWarning: src/core/Bootstrap.ts:165:1 - (ae-missing-release-tag) "createApplication" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)[39m
|
|
59
61
|
[33mWarning: src/core/Decorator.ts:17:4 - (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen[39m
|
|
60
62
|
[33mWarning: src/core/Decorator.ts:29:1 - (ae-missing-release-tag) "Bootstrap" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)[39m
|
|
61
63
|
[33mWarning: src/core/Decorator.ts:44:31 - (tsdoc-param-tag-with-invalid-optional-name) The @param should not include a JSDoc-style optional name; it must not be enclosed in '[ ]' brackets.[39m
|
|
@@ -74,7 +76,7 @@ Analysis will use the bundled TypeScript version 5.8.2
|
|
|
74
76
|
API Extractor completed successfully
|
|
75
77
|
[1G[0K⠙[1G[0K✅ Type declarations built successfully
|
|
76
78
|
|
|
77
|
-
> koatty@4.1.
|
|
79
|
+
> koatty@4.1.11 build:doc /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
|
|
78
80
|
> api-documenter markdown --input temp --output docs/api
|
|
79
81
|
|
|
80
82
|
|
|
@@ -85,7 +87,7 @@ Reading koatty.api.json
|
|
|
85
87
|
Deleting old output from docs/api
|
|
86
88
|
Writing koatty package
|
|
87
89
|
|
|
88
|
-
> koatty@4.1.
|
|
90
|
+
> koatty@4.1.11 build:cp /Volumes/ExternalSSD/Users/richen/Workspace/nodejs/koatty-monorepo/packages/koatty
|
|
89
91
|
> node scripts/copyFiles && node ../../scripts/postBuild.js
|
|
90
92
|
|
|
91
93
|
Copied package.json to dist/
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* @Author: richen
|
|
3
|
-
* @Date: 2026-02-
|
|
3
|
+
* @Date: 2026-02-14 14:04:03
|
|
4
4
|
* @License: BSD (3-Clause)
|
|
5
5
|
* @Copyright (c) - <richenlin(at)gmail.com>
|
|
6
6
|
* @HomePage: https://koatty.org/
|
|
@@ -70,6 +70,41 @@ export { Config }
|
|
|
70
70
|
*/
|
|
71
71
|
export declare function ConfigurationScan(scanPath?: string | string[]): ClassDecorator;
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Create a fully initialized Koatty application WITHOUT starting a server.
|
|
75
|
+
*
|
|
76
|
+
* Use this for:
|
|
77
|
+
* - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)
|
|
78
|
+
* - Custom server setup (attach handler to an existing HTTP server)
|
|
79
|
+
* - Testing (use app.getRequestHandler() with supertest)
|
|
80
|
+
*
|
|
81
|
+
* @param target - The Koatty application class decorated with @Bootstrap()
|
|
82
|
+
* @param bootFunc - Optional function to execute during bootstrap process
|
|
83
|
+
* @returns Promise<KoattyApplication> A ready application instance (not listening)
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Serverless entry point
|
|
88
|
+
* import { createApplication } from 'koatty';
|
|
89
|
+
* import { App } from './App';
|
|
90
|
+
*
|
|
91
|
+
* let cachedApp: KoattyApplication;
|
|
92
|
+
*
|
|
93
|
+
* export async function handler(req, res) {
|
|
94
|
+
* if (!cachedApp) {
|
|
95
|
+
* cachedApp = await createApplication(App);
|
|
96
|
+
* }
|
|
97
|
+
* return cachedApp.getRequestHandler()(req, res);
|
|
98
|
+
* }
|
|
99
|
+
*
|
|
100
|
+
* // Custom HTTP server
|
|
101
|
+
* import http from 'http';
|
|
102
|
+
* const app = await createApplication(App);
|
|
103
|
+
* http.createServer(app.getRequestHandler()).listen(3000);
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function createApplication(target: any, bootFunc?: (...args: any[]) => any): Promise<KoattyApplication>;
|
|
107
|
+
|
|
73
108
|
/**
|
|
74
109
|
* Decorator function for bootstrapping a Koatty application.
|
|
75
110
|
*
|
package/dist/index.js
CHANGED
|
@@ -34,7 +34,7 @@ var path__namespace = /*#__PURE__*/_interopNamespace(path);
|
|
|
34
34
|
|
|
35
35
|
/*!
|
|
36
36
|
* @Author: richen
|
|
37
|
-
* @Date: 2026-02-
|
|
37
|
+
* @Date: 2026-02-14 06:04:00
|
|
38
38
|
* @License: BSD (3-Clause)
|
|
39
39
|
* @Copyright (c) - <richenlin(at)gmail.com>
|
|
40
40
|
* @HomePage: https://koatty.org/
|
|
@@ -51,7 +51,7 @@ var require_package = __commonJS({
|
|
|
51
51
|
"package.json"(exports$1, module) {
|
|
52
52
|
module.exports = {
|
|
53
53
|
name: "koatty",
|
|
54
|
-
version: "4.1.
|
|
54
|
+
version: "4.1.11",
|
|
55
55
|
description: "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
|
|
56
56
|
scripts: {
|
|
57
57
|
build: "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
|
|
@@ -723,7 +723,7 @@ function ExecBootStrap(bootFunc) {
|
|
|
723
723
|
};
|
|
724
724
|
}
|
|
725
725
|
__name(ExecBootStrap, "ExecBootStrap");
|
|
726
|
-
var
|
|
726
|
+
var bootstrapApplication = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
|
|
727
727
|
if (process.env.NODE_DEBUG) {
|
|
728
728
|
const debugModules = process.env.NODE_DEBUG.split(",").filter((m) => !m.includes("winston")).join(",");
|
|
729
729
|
process.env.NODE_DEBUG = debugModules;
|
|
@@ -738,20 +738,27 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
|
|
|
738
738
|
app.silent = true;
|
|
739
739
|
koatty_logger.DefaultLogger.enable(false);
|
|
740
740
|
}
|
|
741
|
+
if (!app.silent) console.log(LOGO);
|
|
742
|
+
if (!(app instanceof koatty_core.Koatty)) {
|
|
743
|
+
throw new Error(`class ${target.name} does not inherit from Koatty`);
|
|
744
|
+
}
|
|
745
|
+
Loader.initialize(app);
|
|
746
|
+
if (koatty_lib.Helper.isFunction(bootFunc)) {
|
|
747
|
+
koatty_logger.DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
|
|
748
|
+
await bootFunc(app);
|
|
749
|
+
}
|
|
750
|
+
koatty_container.IOC.setApp(app);
|
|
751
|
+
koatty_logger.DefaultLogger.Log("Koatty", "", "ComponentScan ...");
|
|
752
|
+
Loader.CheckAllComponents(app, target);
|
|
753
|
+
await Loader.LoadAllComponents(app, target);
|
|
754
|
+
app.markReady();
|
|
755
|
+
return app;
|
|
756
|
+
}, "bootstrapApplication");
|
|
757
|
+
var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
|
|
741
758
|
try {
|
|
742
|
-
|
|
743
|
-
if (!
|
|
744
|
-
|
|
745
|
-
}
|
|
746
|
-
Loader.initialize(app);
|
|
747
|
-
if (koatty_lib.Helper.isFunction(bootFunc)) {
|
|
748
|
-
koatty_logger.DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
|
|
749
|
-
await bootFunc(app);
|
|
750
|
-
}
|
|
751
|
-
koatty_container.IOC.setApp(app);
|
|
752
|
-
koatty_logger.DefaultLogger.Log("Koatty", "", "ComponentScan ...");
|
|
753
|
-
Loader.CheckAllComponents(app, target);
|
|
754
|
-
await Loader.LoadAllComponents(app, target);
|
|
759
|
+
const app = await bootstrapApplication(target, bootFunc, isInitiative);
|
|
760
|
+
if (!app) return;
|
|
761
|
+
const isUTRuntime = checkUTRuntime();
|
|
755
762
|
if (!isUTRuntime) {
|
|
756
763
|
app.listen(listenCallback);
|
|
757
764
|
}
|
|
@@ -760,6 +767,17 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
|
|
|
760
767
|
koatty_logger.DefaultLogger.Fatal(err);
|
|
761
768
|
}
|
|
762
769
|
}, "executeBootstrap");
|
|
770
|
+
async function createApplication(target, bootFunc) {
|
|
771
|
+
if (!(target.prototype instanceof koatty_core.Koatty)) {
|
|
772
|
+
throw new Error(`class ${target.name} does not inherit from Koatty`);
|
|
773
|
+
}
|
|
774
|
+
const app = await bootstrapApplication(target, bootFunc, true);
|
|
775
|
+
if (!app) {
|
|
776
|
+
throw new Error("Failed to initialize application");
|
|
777
|
+
}
|
|
778
|
+
return app;
|
|
779
|
+
}
|
|
780
|
+
__name(createApplication, "createApplication");
|
|
763
781
|
var listenCallback = /* @__PURE__ */ __name((app) => {
|
|
764
782
|
koatty_logger.DefaultLogger.Log("Koatty", "", "====================================");
|
|
765
783
|
koatty_logger.DefaultLogger.Log("Koatty", "", `Nodejs Version: ${process.version}`);
|
|
@@ -832,6 +850,7 @@ exports.Bootstrap = Bootstrap;
|
|
|
832
850
|
exports.ComponentScan = ComponentScan;
|
|
833
851
|
exports.ConfigurationScan = ConfigurationScan;
|
|
834
852
|
exports.ExecBootStrap = ExecBootStrap;
|
|
853
|
+
exports.createApplication = createApplication;
|
|
835
854
|
Object.keys(koatty_container).forEach(function (k) {
|
|
836
855
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
837
856
|
enumerable: true,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","listen","listenCallback","err","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.9\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.1\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Bind event hook to target class.\n * \n * @param eventName - The application event name to bind\n/**\n * Execute bootstrap process for Koatty application.\n * \n * @param target - The target class to instantiate the application\n * @param bootFunc - Function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n * \n * This function performs the following steps:\n * 1. Checks runtime environment\n * 2. Creates application instance\n * 3. Initializes environment\n * 4. Executes boot function\n * 5. Sets up IOC container\n * 6. Scans and loads components\n * 7. Triggers application events\n * 8. Starts server (except in test environment)\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n \n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n try {\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.11\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.1\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -17,7 +17,7 @@ import * as path from 'path';
|
|
|
17
17
|
|
|
18
18
|
/*!
|
|
19
19
|
* @Author: richen
|
|
20
|
-
* @Date: 2026-02-
|
|
20
|
+
* @Date: 2026-02-14 06:04:00
|
|
21
21
|
* @License: BSD (3-Clause)
|
|
22
22
|
* @Copyright (c) - <richenlin(at)gmail.com>
|
|
23
23
|
* @HomePage: https://koatty.org/
|
|
@@ -34,7 +34,7 @@ var require_package = __commonJS({
|
|
|
34
34
|
"package.json"(exports$1, module) {
|
|
35
35
|
module.exports = {
|
|
36
36
|
name: "koatty",
|
|
37
|
-
version: "4.1.
|
|
37
|
+
version: "4.1.11",
|
|
38
38
|
description: "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
|
|
39
39
|
scripts: {
|
|
40
40
|
build: "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
|
|
@@ -706,7 +706,7 @@ function ExecBootStrap(bootFunc) {
|
|
|
706
706
|
};
|
|
707
707
|
}
|
|
708
708
|
__name(ExecBootStrap, "ExecBootStrap");
|
|
709
|
-
var
|
|
709
|
+
var bootstrapApplication = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
|
|
710
710
|
if (process.env.NODE_DEBUG) {
|
|
711
711
|
const debugModules = process.env.NODE_DEBUG.split(",").filter((m) => !m.includes("winston")).join(",");
|
|
712
712
|
process.env.NODE_DEBUG = debugModules;
|
|
@@ -721,20 +721,27 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
|
|
|
721
721
|
app.silent = true;
|
|
722
722
|
DefaultLogger.enable(false);
|
|
723
723
|
}
|
|
724
|
+
if (!app.silent) console.log(LOGO);
|
|
725
|
+
if (!(app instanceof Koatty)) {
|
|
726
|
+
throw new Error(`class ${target.name} does not inherit from Koatty`);
|
|
727
|
+
}
|
|
728
|
+
Loader.initialize(app);
|
|
729
|
+
if (Helper.isFunction(bootFunc)) {
|
|
730
|
+
DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
|
|
731
|
+
await bootFunc(app);
|
|
732
|
+
}
|
|
733
|
+
IOC.setApp(app);
|
|
734
|
+
DefaultLogger.Log("Koatty", "", "ComponentScan ...");
|
|
735
|
+
Loader.CheckAllComponents(app, target);
|
|
736
|
+
await Loader.LoadAllComponents(app, target);
|
|
737
|
+
app.markReady();
|
|
738
|
+
return app;
|
|
739
|
+
}, "bootstrapApplication");
|
|
740
|
+
var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, isInitiative = false) {
|
|
724
741
|
try {
|
|
725
|
-
|
|
726
|
-
if (!
|
|
727
|
-
|
|
728
|
-
}
|
|
729
|
-
Loader.initialize(app);
|
|
730
|
-
if (Helper.isFunction(bootFunc)) {
|
|
731
|
-
DefaultLogger.Log("Koatty", "", "Execute bootFunc ...");
|
|
732
|
-
await bootFunc(app);
|
|
733
|
-
}
|
|
734
|
-
IOC.setApp(app);
|
|
735
|
-
DefaultLogger.Log("Koatty", "", "ComponentScan ...");
|
|
736
|
-
Loader.CheckAllComponents(app, target);
|
|
737
|
-
await Loader.LoadAllComponents(app, target);
|
|
742
|
+
const app = await bootstrapApplication(target, bootFunc, isInitiative);
|
|
743
|
+
if (!app) return;
|
|
744
|
+
const isUTRuntime = checkUTRuntime();
|
|
738
745
|
if (!isUTRuntime) {
|
|
739
746
|
app.listen(listenCallback);
|
|
740
747
|
}
|
|
@@ -743,6 +750,17 @@ var executeBootstrap = /* @__PURE__ */ __name(async function(target, bootFunc, i
|
|
|
743
750
|
DefaultLogger.Fatal(err);
|
|
744
751
|
}
|
|
745
752
|
}, "executeBootstrap");
|
|
753
|
+
async function createApplication(target, bootFunc) {
|
|
754
|
+
if (!(target.prototype instanceof Koatty)) {
|
|
755
|
+
throw new Error(`class ${target.name} does not inherit from Koatty`);
|
|
756
|
+
}
|
|
757
|
+
const app = await bootstrapApplication(target, bootFunc, true);
|
|
758
|
+
if (!app) {
|
|
759
|
+
throw new Error("Failed to initialize application");
|
|
760
|
+
}
|
|
761
|
+
return app;
|
|
762
|
+
}
|
|
763
|
+
__name(createApplication, "createApplication");
|
|
746
764
|
var listenCallback = /* @__PURE__ */ __name((app) => {
|
|
747
765
|
DefaultLogger.Log("Koatty", "", "====================================");
|
|
748
766
|
DefaultLogger.Log("Koatty", "", `Nodejs Version: ${process.version}`);
|
|
@@ -791,6 +809,6 @@ __name(ConfigurationScan, "ConfigurationScan");
|
|
|
791
809
|
* @version 2026-02-03 10:00:00
|
|
792
810
|
*/
|
|
793
811
|
|
|
794
|
-
export { Bootstrap, ComponentScan, ConfigurationScan, ExecBootStrap };
|
|
812
|
+
export { Bootstrap, ComponentScan, ConfigurationScan, ExecBootStrap, createApplication };
|
|
795
813
|
//# sourceMappingURL=index.mjs.map
|
|
796
814
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","listen","listenCallback","err","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":"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","file":"index.mjs","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.9\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.1\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Bind event hook to target class.\n * \n * @param eventName - The application event name to bind\n/**\n * Execute bootstrap process for Koatty application.\n * \n * @param target - The target class to instantiate the application\n * @param bootFunc - Function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n * \n * This function performs the following steps:\n * 1. Checks runtime environment\n * 2. Creates application instance\n * 3. Initializes environment\n * 4. Executes boot function\n * 5. Sets up IOC container\n * 6. Scans and loads components\n * 7. Triggers application events\n * 8. Starts server (except in test environment)\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n \n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n try {\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/util/Helper.ts","../src/core/Constants.ts","../src/core/Loader.ts","../src/core/Bootstrap.ts","../src/core/Decorator.ts"],"names":["exports","pkg","require","engines","version","KOATTY_VERSION","ENGINES_VERSION","node","slice","checkClass","fileName","xpath","target","exSet","Helper","isClass","name","Error","undefined","keys","Object","has","add","checkRuntime","nodeEngines","lastIndexOf","nodeVersion","process","toNumber","Logger","Fatal","checkUTRuntime","isUTRuntime","argv","JSON","stringify","indexOf","COMPONENT_SCAN","CONFIGURATION_SCAN","LOGO","Loader","app","initialize","env","setLevel","rootPath","cwd","appPath","resolve","appDebug","koattyPath","__dirname","define","isEmpty","safeRequire","dirname","ROOT_PATH","APP_PATH","KOATTY_PATH","THINK_PATH","GetComponentMeta","componentMetas","componentMeta","IOC","getClassMetadata","TAGGED_CLS","isArray","push","length","GetConfigurationMeta","confMeta","configurationMetas","CheckAllComponents","Set","Load","xTarget","clear","SetLogger","data","getMetaData","configs","config","opt","logLevel","logFilePath","sensFields","logsLevel","toLowerCase","logsPath","enableBatch","setBatchConfig","maxSize","flushInterval","silent","LOGS_PATH","setLogFilePath","setSensFields","once","AppEvent","appStop","flushBatch","destroy","LoadAllComponents","isFunction","preloadMetadata","Warn","configurationMeta","loader","event","AppEventArr","appBoot","Log","LoadConfigs","asyncEvent","loadConfigure","loadComponent","componentManager","ComponentManager","discoverComponents","stats","getStats","coreComponents","userComponents","LoadComponents","registerAppEvents","registerCoreComponentHooks","loadPlugin","loadMiddleware","LoadMiddlewares","loadService","LoadServices","loadController","LoadControllers","loadRouter","loadServe","appReady","loadPath","frameConfig","path","exp","appConfig","loadConf","extend","setMetaData","middlewareConf","list","traceOptions","trace","tracer","Trace","use","Debug","error","message","appMiddleware","listClass","forEach","item","id","replace","reg","scope","type","args","ctl","getInsByClass","implementsMiddlewareInterface","middlewareList","appMList","middlewareConfig","key","Array","from","handle","get","run","middlewareOpt","middlewareClass","find","m","decoratorOptions","getPropertyData","MIDDLEWARE_OPTIONS","mergedOptions","enabled","result","middleware","protocol","protocols","join","protocolMiddleware","useExp","controllerList","controllers","implementsControllerInterface","serviceList","implementsServiceInterface","componentList","endsWith","implementsAspectInterface","loadUserComponents","pluginsConf","pluginConfList","ExecBootStrap","bootFunc","prototype","Koatty","executeBootstrap","bootstrapApplication","isInitiative","NODE_DEBUG","debugModules","split","filter","includes","Reflect","construct","enable","console","log","setApp","markReady","listen","listenCallback","err","createApplication","appStart","Bootstrap","saveClass","ComponentScan","scanPath","saveClassMetadata","ConfigurationScan"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,OAAOC,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,MAAAA,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,OAAOc,QAAAA,CAASJ,WAAAA,IAAeV,MAAAA,CAAOc,QAAAA,CAASF,WAAAA,CAAAA,EAAc;AAC/DG,IAAAA,aAAAA,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,aAAAA,CAAOe,SAAS,OAAA,CAAA;IAClB,CAAA,MAAO;AACLf,MAAAA,aAAAA,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,IAAAA,CAAAA,OAAAA,CAAQH,UAAUJ,GAAAA,CAAIQ,QAAAA,GAAW,QAAQ,MAAA,CAAA;AAC7E,IAAA,MAAMC,UAAAA,GAAkBF,IAAAA,CAAAA,OAAAA,CAAQG,SAAAA,EAAW,IAAA,CAAA;AAC3CrC,IAAAA,MAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,UAAA,EAAYI,QAAAA,CAAAA;AAC/B/B,IAAAA,MAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,SAAA,EAAWM,OAAAA,CAAAA;AAC9BjC,IAAAA,MAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,YAAA,EAAcS,UAAAA,CAAAA;AAGjC,IAAA,IAAIpC,MAAAA,CAAOuC,OAAAA,CAAQZ,GAAAA,CAAIzB,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAMf,OAAMa,MAAAA,CAAOwC,WAAAA,CAAY,GAAQC,IAAAA,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,MAAAA,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,GAAAA,CAAIC,gBAAAA,CAAiBC,UAAAA,EAAY5B,gBAAgBzB,MAAAA,CAAAA;AACvE,IAAA,IAAIkD,aAAAA,EAAe;AACjB,MAAA,IAAIhD,MAAAA,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,GAAAA,CAAIC,gBAAAA,CAAiBC,UAAAA,EAAY3B,oBAAoB1B,MAAAA,CAAAA;AACtE,IAAA,IAAI2D,qBAAqB,EAAA;AACzB,IAAA,IAAID,QAAAA,EAAU;AACZ,MAAA,IAAIxD,MAAAA,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,IAAAA,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,aAAAA,CAAO4D,YAAY,IAAA,CAAA;AACnB5D,QAAAA,cAAO6D,cAAAA,CAAe;UACpBC,OAAAA,EAAS,GAAA;UACTC,aAAAA,EAAe;SACjB,CAAA;AACF,MAAA;AACA,MAAA,IAAIT,QAAAA,EAAU;AACZtD,QAAAA,aAAAA,CAAOe,SAASuC,QAAAA,CAAAA;AAClB,MAAA;AACA,MAAA,IAAIC,WAAAA,IAAe,CAAC3C,GAAAA,CAAIoD,MAAAA,EAAQ;AAC9B/E,QAAAA,MAAAA,CAAOsC,MAAAA,CAAOX,GAAAA,EAAK,UAAA,EAAY2C,WAAAA,CAAAA;AAC/BzD,QAAAA,OAAAA,CAAQgB,IAAImD,SAAAA,GAAYV,WAAAA;AACxBvD,QAAAA,aAAAA,CAAOkE,eAAeX,WAAAA,CAAAA;AACxB,MAAA;AACA,MAAA,IAAIC,UAAAA,EAAY;AACdxD,QAAAA,aAAAA,CAAOmE,cAAcX,UAAAA,CAAAA;AACvB,MAAA;AACC5C,MAAAA,GAAAA,CAAYwD,IAAAA,CAAKC,QAAAA,CAASC,OAAAA,EAAS,YAAA;AAClC,QAAA,MAAMtE,cAAOuE,UAAAA,EAAU;AACvB,QAAA,MAAMvE,cAAOwE,OAAAA,EAAO;MACtB,CAAA,CAAA;AACF,IAAA;AACF,EAAA;;;;;;;;;;;;;;;;EAiBA,aAAoBC,iBAAAA,CAAkB7D,KAAwB7B,MAAAA,EAAa;AACzE,IAAA,IAAI;AACF,MAAA,IAAIE,MAAAA,CAAOyF,UAAAA,CAAYxC,GAAAA,CAAYyC,eAAe,CAAA,EAAG;AAClDzC,QAAAA,GAAAA,CAAYyC,eAAAA,EAAe;AAC9B,MAAA;IACF,CAAA,CAAA,MAAQ;AACN3E,MAAAA,aAAAA,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,WAAAA,EAAa;AAC/B,MAAA,QAAQD,KAAAA;AACN,QAAA,KAAKV,QAAAA,CAASY,OAAAA;AACZjF,UAAAA,aAAAA,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,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAASgB,aAAAA;AACZrF,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,wBAAA,CAAA;AACzB,UAAA,MAAME,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAASiB,aAAAA;AACZtF,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,oCAAA,CAAA;AACzB,UAAA,MAAMK,gBAAAA,GAAmB,IAAIC,gBAAAA,CAAiB5E,GAAAA,CAAAA;AAC9C3B,UAAAA,MAAAA,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,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,CAAA,WAAA,EAAcQ,MAAME,cAAc,CAAA,kBAAA,EAAqBF,KAAAA,CAAMG,cAAc,CAAA,gBAAA,CAAkB,CAAA;AAGtH7F,UAAAA,aAAAA,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,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAAS4B,UAAAA;AACZjG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,qBAAA,CAAA;AACzB,UAAA,MAAME,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAAS6B,cAAAA;AACZlG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOqB,eAAAA,EAAe;AAC5B,UAAA,MAAMf,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAAS+B,WAAAA;AACZpG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,mBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOuB,YAAAA,EAAY;AACzB,UAAA,MAAMjB,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAASiC,cAAAA;AACZtG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,UAAA,MAAMJ,OAAOyB,eAAAA,EAAe;AAC5B,UAAA,MAAMnB,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAASmC,UAAAA;AACZxG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,uCAAA,CAAA;AAEzB,UAAA,MAAME,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA,KAAKV,QAAAA,CAASoC,SAAAA;AACZzG,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,oBAAA,CAAA;AACzB,UAAA,MAAME,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAED,QAAA,KAAKV,QAAAA,CAASqC,QAAAA;AACZ1G,UAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,mBAAA,CAAA;AACzB,UAAA,MAAME,UAAAA,CAAWxE,KAAKmE,KAAAA,CAAAA;AACtB,UAAA;AAEF,QAAA;AACC,UAAA,MAAMK,UAAAA,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,IAAAA,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,MAAAA,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,WAAAA,CAASL,QAAAA,EAAU,IAAA,CAAK/F,IAAIM,OAAO,CAAA;AACnD6F,IAAAA,SAAAA,GAAY9H,MAAAA,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,MAAAA,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,KAAAA,CAAMH,YAAAA,EAAc,IAAA,CAAKzG,GAAG,CAAA;AAC3C3B,MAAAA,MAAAA,CAAOsC,MAAAA,CAAO,IAAA,CAAKX,GAAAA,EAAK,UAAU2G,MAAAA,CAAAA;AAClC,MAAA,IAAA,CAAK3G,GAAAA,CAAI6G,IAAIF,MAAAA,CAAAA;AACbvH,MAAAA,aAAAA,CAAO0H,MAAM,CAAA,2BAAA,CAA6B,CAAA;AAC5C,IAAA,CAAA,CAAA,OAASC,KAAAA,EAAY;AACnB3H,MAAAA,aAAAA,CAAO4E,IAAAA,CAAK,CAAA,iCAAA,EAAoC+C,KAAAA,CAAMC,OAAO,CAAA,CAAE,CAAA;AACjE,IAAA;AAGA,IAAA,MAAMC,aAAAA,GAAgB3F,GAAAA,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,MAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CmD,QAAAA,GAAAA,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,GAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAAC0J,6BAAAA,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,GAAAA,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,MAAAA,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,aAAAA,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,IAAIsH,eAAAA,CAAgBC,kBAAAA,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,aAAAA,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,MAAAA,CAAOyF,UAAAA,CAAWkF,MAAAA,CAAAA,EAAS;AAC7B,QAAA,IAAIC,UAAAA,GAAaD,MAAAA;AAGjB,QAAA,IAAIF,cAAcI,QAAAA,EAAU;AAC1B,UAAA,MAAMC,YAAY9K,MAAAA,CAAOoD,OAAAA,CAAQqH,cAAcI,QAAQ,CAAA,GACnDJ,cAAcI,QAAAA,GACd;YAACJ,aAAAA,CAAcI;;AAEnB9J,UAAAA,aAAAA,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,kBAAAA,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,GAAAA,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,MAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CiB,QAAAA,aAAAA,CAAO0H,KAAAA,CAAM,CAAA,iBAAA,EAAoBM,IAAAA,CAAKC,EAAE,CAAA,CAAE,CAAA;AAE1C/F,QAAAA,GAAAA,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,GAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAACsL,6BAAAA,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,GAAAA,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,MAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC1CiB,QAAAA,aAAAA,CAAO0H,KAAAA,CAAM,CAAA,cAAA,EAAiBM,IAAAA,CAAKC,EAAE,CAAA,CAAE,CAAA;AAEvC/F,QAAAA,GAAAA,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,GAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,QAAA,IAAI,CAACwL,0BAAAA,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,GAAAA,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,MAAAA,CAAOC,OAAAA,CAAQ8I,IAAAA,CAAKjJ,MAAM,CAAA,EAAG;AAC/BmD,QAAAA,GAAAA,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,GAAAA,CAAIsG,aAAAA,CAAcR,IAAAA,CAAKjJ,MAAM,CAAA;AACzC,UAAA,IAAI,CAAC2L,yBAAAA,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,aAAAA,CAAO4E,KAAK,gCAAA,CAAA;AACZ,MAAA,IAAIgG,WAAAA,GAAc,IAAA,CAAKhK,GAAAA,CAAIwC,MAAAA,CAAO/D,QAAW,QAAA,CAAA;AAC7C,MAAA,IAAIJ,MAAAA,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,GAAAA,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,MAAAA,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,aAAAA,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,MAAAA,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,aAAAA,CAAO4L,OAAO,KAAA,CAAA;AAChB,EAAA;AAEA,EAAA,IAAI,CAAChL,GAAAA,CAAIoD,MAAAA,EAAQ6H,OAAAA,CAAQC,IAAIpL,IAAAA,CAAAA;AAC7B,EAAA,IAAI,EAAEE,eAAeqK,MAAAA,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,MAAAA,CAAOyF,UAAAA,CAAWqG,QAAAA,CAAAA,EAAW;AAC/B/K,IAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sBAAA,CAAA;AACzB,IAAA,MAAM6F,SAASnK,GAAAA,CAAAA;AACjB,EAAA;AAEAsB,EAAAA,GAAAA,CAAI6J,OAAOnL,GAAAA,CAAAA;AAGXZ,EAAAA,aAAAA,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,aAAAA,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,MAAAA,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,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sCAAA,CAAA;AACzBlF,EAAAA,cAAOkF,GAAAA,CAAI,QAAA,EAAU,IAAI,CAAA,gBAAA,EAAmBpF,OAAAA,CAAQvB,OAAO,CAAA,CAAE,CAAA;AAC7DyB,EAAAA,cAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,CAAA,iBAAA,EAAoB1G,cAAAA,CAAAA,CAAgB,CAAA;AAC7DwB,EAAAA,cAAOkF,GAAAA,CAAI,QAAA,EAAU,IAAI,CAAA,iBAAA,EAAoBtE,GAAAA,CAAIE,GAAG,CAAA,CAAE,CAAA;AACtD,EAAA,IAAIF,GAAAA,CAAIQ,QAAAA,EAAUpB,aAAAA,CAAO4E,KAAK,CAAA,sBAAA,CAAwB,CAAA;AACtD5E,EAAAA,aAAAA,CAAOkF,GAAAA,CAAI,QAAA,EAAU,EAAA,EAAI,sCAAA,CAAA;AAIzBE,EAAAA,UAAAA,CAAWxE,GAAAA,EAAKyD,QAAAA,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,MAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACA8C,IAAAA,GAAAA,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,MAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACAqN,IAAAA,QAAAA,GAAWA,QAAAA,IAAY,EAAA;AACvBvK,IAAAA,GAAAA,CAAIwK,iBAAAA,CAAkBtK,UAAAA,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,MAAAA,CAAAA,EAAS;AACzC,MAAA,MAAM,IAAI7L,MAAM,CAAA,kCAAA,CAAoC,CAAA;AACtD,IAAA;AACAqN,IAAAA,QAAAA,GAAWA,QAAAA,IAAY,EAAA;AACvBvK,IAAAA,GAAAA,CAAIwK,iBAAAA,CAAkBtK,UAAAA,EAAY3B,kBAAAA,EAAoBgM,UAAU1N,MAAAA,CAAAA;AAClE,EAAA,CAAA;AACF;AARgB4N,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA","file":"index.mjs","sourcesContent":["{\n \"name\": \"koatty\",\n \"version\": \"4.1.11\",\n \"description\": \"Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.\",\n \"scripts\": {\n \"build\": \"pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp\",\n \"build:js\": \"tsup\",\n \"build:dts\": \"bash scripts/build-dts.sh\",\n \"build:doc\": \"api-documenter markdown --input temp --output docs/api\",\n \"build:cp\": \"node scripts/copyFiles && node ../../scripts/postBuild.js\",\n \"clean\": \"rimraf dist temp docs/api\",\n \"lint\": \"eslint --ext .ts,.js ./src\",\n \"test\": \"pnpm run lint && jest --passWithNoTests\",\n \"test:cov\": \"jest --collectCoverage --detectOpenHandles\"\n },\n \"main\": \"./dist/index.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"keywords\": [\n \"koatty\",\n \"koa\",\n \"typescript\",\n \"framework\",\n \"mvc\",\n \"http\",\n \"https\",\n \"websocket\",\n \"grpc\",\n \"quic\",\n \"http2\",\n \"http3\",\n \"di\",\n \"aop\",\n \"ioc\",\n \"inversion of control\",\n \"dependency injection\",\n \"aspect-oriented programming\",\n \"decorator\",\n \"decorator pattern\",\n \"decorator factory\"\n ],\n \"directories\": {\n \"doc\": \"docs\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/koatty/koatty.git\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"author\": {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n },\n \"license\": \"BSD-3-Clause\",\n \"bugs\": {\n \"url\": \"https://github.com/koatty/koatty/issues\"\n },\n \"homepage\": \"https://github.com/koatty/koatty\",\n \"maintainers\": [\n {\n \"name\": \"richenlin\",\n \"email\": \"richenlin@gmail.com\"\n }\n ],\n \"devDependencies\": {\n \"@grpc/grpc-js\": \"^1.12.2\",\n \"@microsoft/api-documenter\": \"^7.26.x\",\n \"@microsoft/api-extractor\": \"^7.52.x\",\n \"@types/formidable\": \"^3.x.x\",\n \"@types/jest\": \"^29.5.x\",\n \"@types/koa\": \"^2.x.x\",\n \"@types/koa-compose\": \"^3.x.x\",\n \"@types/lodash\": \"^4.x.x\",\n \"@types/node\": \"^22.x.x\",\n \"@types/on-finished\": \"^2.x.x\",\n \"@types/supertest\": \"^6.x.x\",\n \"@types/ws\": \"^8.x.x\",\n \"@typescript-eslint/eslint-plugin\": \"^8.x.x\",\n \"@typescript-eslint/parser\": \"^8.x.x\",\n \"eslint\": \"^8.x.x\",\n \"eslint-plugin-jest\": \"^28.x.x\",\n \"jest\": \"^29.x.x\",\n \"jest-html-reporters\": \"^3.x.x\",\n \"koatty_validation\": \"workspace:*\",\n \"reflect-metadata\": \"^0.2.2\",\n \"supertest\": \"^7.x.x\",\n \"ts-jest\": \"^29.x.x\",\n \"tslib\": \"^2.x.x\"\n },\n \"dependencies\": {\n \"koa\": \"^3.1.1\",\n \"koatty_config\": \"workspace:*\",\n \"koatty_container\": \"workspace:*\",\n \"koatty_core\": \"workspace:*\",\n \"koatty_exception\": \"workspace:*\",\n \"koatty_lib\": \"workspace:*\",\n \"koatty_loader\": \"workspace:*\",\n \"koatty_logger\": \"workspace:*\",\n \"koatty_router\": \"workspace:*\",\n \"koatty_serve\": \"workspace:*\",\n \"koatty_trace\": \"workspace:*\",\n \"ts-morph\": \"^27.0.2\"\n },\n \"types\": \"./dist/index.d.ts\"\n}\n","/*\n * @Description: framework helper\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:14:10\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { Helper } from \"koatty_lib\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\nconst pkg = require(\"../../package.json\");\nconst { engines, version } = pkg;\n\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\nconst ARGUMENT_NAMES = /([^\\s,]+)/g;\n\nexport const KOATTY_VERSION = version;\nexport const ENGINES_VERSION = engines.node.slice(1) || '12.0.0';\n\n/**\n * require default export\n *\n * @export\n * @param {string} p\n * @returns\n */\nexport function requireDefault(p: string) {\n // Dynamic require is necessary for runtime module loading\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const ex = require(p);\n return (ex && (typeof ex === \"object\") && \"default\" in ex) ? ex.default : ex;\n}\n\n/**\n * controller match\n *\n * @export\n * @param {string} name\n * @param {string} [controllerSuffix=\"\"]\n * @returns\n */\nlet controllerReg: any = null;\nexport function ControllerMatch(name: string, controllerSuffix = \"\") {\n if (!controllerReg) {\n controllerReg = new RegExp(`([a-zA-Z0-9_]+)${controllerSuffix}`);\n }\n\n const result = name.split(\".\")[0].match(controllerReg);\n return result;\n}\n\n\n/**\n * get parameter name from function\n * @param func\n */\nexport function getParamNames(func: { toString: () => { replace: (arg0: RegExp, arg1: string) => any } }) {\n const fnStr = func.toString().replace(STRIP_COMMENTS, \"\");\n let result = fnStr.slice(fnStr.indexOf(\"(\") + 1, fnStr.indexOf(\")\")).match(ARGUMENT_NAMES);\n if (result === null) {\n result = [];\n }\n return result;\n}\n\n/**\n * Check class file \n * name should be always the same as class name\n * class must be unique\n *\n * @export\n * @param {string} fileName\n * @param {string} xpath\n * @param {*} target\n * @param {Set<unknown>} [exSet]\n * @returns {*} \n */\nexport function checkClass(fileName: string, xpath: string, target: any, exSet?: Set<unknown>) {\n if (Helper.isClass(target) && target.name != fileName) { // export default class name{}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n if (target[\"__esModule\"]) {\n if (target.name === undefined) { // export class name{}\n const keys = Object.keys(target);\n if (keys[0] != fileName && Helper.isClass(target[keys[0]])) {\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n } else if (target.name != fileName) { // export default class {}\n throw Error(`The file(${xpath}) name should be always the same as class name.`);\n }\n }\n if (!exSet) {\n return;\n }\n if (exSet.has(fileName)) {\n throw new Error(`A same class already exists. at \\`${xpath}\\`.`);\n }\n exSet.add(fileName);\n\n return;\n}\n\n/**\n * check node version\n * @return {void} []\n */\nexport function checkRuntime() {\n let nodeEngines = ENGINES_VERSION;\n nodeEngines = nodeEngines.slice(0, nodeEngines.lastIndexOf('.'));\n let nodeVersion = process.version;\n if (nodeVersion[0] === 'v') {\n nodeVersion = nodeVersion.slice(1);\n }\n nodeVersion = nodeVersion.slice(0, nodeVersion.lastIndexOf('.'));\n\n if (Helper.toNumber(nodeEngines) > Helper.toNumber(nodeVersion)) {\n Logger.Fatal(`Koatty need node version > ${nodeEngines}, current version is ${nodeVersion}, please upgrade it.`);\n }\n}\n\n/**\n * unittest running environment detection\n * only support jest\n * @returns {boolean}\n */\nexport const checkUTRuntime = (): boolean => {\n let isUTRuntime = false;\n // UT runtime detection, only support jest\n const argv = JSON.stringify(process.argv[1]);\n if (argv.indexOf('jest') > -1) {\n isUTRuntime = true;\n }\n return isUTRuntime;\n};","/*\n * @Description: framework constants\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 21:56:32\n * @LastEditTime: 2023-12-09 23:00:13\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nexport const COMPONENT_SCAN = 'COMPONENT_SCAN';\nexport const CONFIGURATION_SCAN = 'CONFIGURATION_SCAN';\nexport const PRIORITY_KEY = 'PRIORITY_KEY';\n\n// tslint:disable: no-irregular-whitespace\nexport const LOGO = `\n\n┬┌─┌─┐┌─┐┌┬┐┌┬┐┬ ┬\n├┴┐│ │├─┤ │ │ └┬┘\n┴ ┴└─┘┴ ┴ ┴ ┴ ┴ \n-------------------------------------------\nhttps://github.com/koatty\n`;","/*\n * @Description: framework loader\n * @Usage: \n * @Author: richen\n * @Date: 2023-12-09 22:55:49\n * @LastEditTime: 2025-03-13 16:44:39\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\n\nimport { LoadConfigs as loadConf } from \"koatty_config\";\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport {\n AppEvent, AppEventArr, IMiddleware, IMiddlewareOptions, protocolMiddleware,\n implementsAspectInterface, implementsControllerInterface,\n implementsMiddlewareInterface,\n implementsServiceInterface, IPlugin, KoattyApplication, Koatty, MIDDLEWARE_OPTIONS,\n ComponentManager, asyncEvent\n} from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { Load } from \"koatty_loader\";\nimport { Trace } from \"koatty_trace\";\nimport * as path from \"path\";\nimport { checkClass } from \"../util/Helper\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from './Constants';\nimport { DefaultLogger as Logger, LogLevelType } from \"koatty_logger\";\n\n/**\n * Interface representing a component item.\n * @interface ComponentItem\n * @property {string} id - Unique identifier for the component\n * @property {any} target - Target object or instance of the component\n */\ninterface ComponentItem {\n id: string;\n target: any;\n}\n\n/**\n * Loader class for Koatty framework.\n * Handles initialization, loading and configuration of application components.\n * \n * Responsibilities:\n * - Initialize environment and paths\n * - Load configurations, components, middlewares, services and controllers\n * - Set up logging\n * - Handle application event hooks\n * - Load and configure router\n * \n * @export\n * @class Loader\n */\nexport class Loader {\n app: KoattyApplication;\n\n /**\n * Creates an instance of Loader.\n * @param {KoattyApplication} app\n * @memberof Loader\n */\n constructor(app: KoattyApplication) {\n this.app = app;\n }\n\n /**\n * Initialize application configuration and environment settings.\n * Sets up logging levels, defines essential paths, and loads application metadata.\n *\n * @param {KoattyApplication} app - The Koatty application instance\n * - Sets logging level based on environment\n * - Defines root, app and framework paths on app object\n * - Loads application name and version from package.json\n * - Sets environment variables for paths\n * - Maintains backward compatibility with legacy path variables\n */\n public static initialize(app: KoattyApplication) {\n if (app.env == 'development') {\n Logger.setLevel(\"debug\");\n } else {\n Logger.setLevel(\"info\");\n }\n // define path\n const rootPath = app.rootPath || process.cwd();\n const appPath = app.appPath || path.resolve(rootPath, app.appDebug ? 'src' : 'dist');\n const koattyPath = path.resolve(__dirname, '..');\n Helper.define(app, 'rootPath', rootPath);\n Helper.define(app, 'appPath', appPath);\n Helper.define(app, 'koattyPath', koattyPath);\n\n //\n if (Helper.isEmpty(app.name)) {\n const pkg = Helper.safeRequire(`${path.dirname(appPath)}/package.json`);\n if (pkg.name) {\n app.name = pkg.name;\n app.version = app.version || pkg.version;\n }\n }\n\n // Set environment variables for backward compatibility \n // Use app.rootPath, app.appPath, app.koattyPath instead\n process.env.ROOT_PATH = rootPath;\n process.env.APP_PATH = appPath;\n process.env.KOATTY_PATH = koattyPath;\n\n // Compatible with old version, will be deprecated, do not use it in new code\n process.env.THINK_PATH = koattyPath;\n Helper.define(app, 'thinkPath', koattyPath);\n }\n\n /**\n * Get component metadata from target class.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class to get metadata from\n * @returns {any[]} Array of component metadata paths\n * \n * @static\n * @public\n */\n public static GetComponentMeta(app: KoattyApplication, target: any): any[] {\n let componentMetas = [];\n const componentMeta = IOC.getClassMetadata(TAGGED_CLS, COMPONENT_SCAN, target);\n if (componentMeta) {\n if (Helper.isArray(componentMeta)) {\n componentMetas = componentMeta;\n } else {\n componentMetas.push(componentMeta);\n }\n }\n if (componentMetas.length < 1) {\n componentMetas = [app.appPath];\n }\n return componentMetas;\n }\n\n /**\n * Get configuration metadata from target class.\n * \n * @param {KoattyApplication} app Application instance\n * @param {any} target Target class\n * @returns {any[]} Array of configuration metadata\n */\n public static GetConfigurationMeta(app: KoattyApplication, target: any): any[] {\n const confMeta = IOC.getClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, target);\n let configurationMetas = [];\n if (confMeta) {\n if (Helper.isArray(confMeta)) {\n configurationMetas = confMeta;\n } else {\n configurationMetas.push(confMeta);\n }\n }\n return configurationMetas;\n }\n\n /**\n * Check and load all components(excepted config/*、App.ts) in the application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @param {any} target - The target class or object to check components from\n * @static\n * @public\n */\n public static CheckAllComponents(app: KoattyApplication, target: any) {\n // component metadata\n const componentMetas = Loader.GetComponentMeta(app, target);\n // configuration metadata\n const configurationMetas = Loader.GetConfigurationMeta(app, target);\n const exSet = new Set();\n Load(componentMetas, '', (fileName: string, xpath: string, xTarget: any) => {\n checkClass(fileName, xpath, xTarget, exSet);\n }, ['**/**.js', '**/**.ts', '!**/**.d.ts'], [...configurationMetas, `${target.name || '.no'}.ts`]);\n exSet.clear();\n }\n\n /**\n * Set logger configuration for the Koatty application.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @description Configures logging settings based on application environment and config options.\n * Handles log level, log file path, and sensitive fields configuration.\n * In production environment, default log level is 'info', otherwise 'debug'.\n */\n public static SetLogger(app: KoattyApplication) {\n const data = app.getMetaData('_configs') || [];\n const configs = data[0] || {};\n //Logger\n if (configs.config) {\n const opt = configs.config;\n let logLevel: LogLevelType = \"debug\",\n logFilePath = \"\",\n sensFields = [];\n if (app.env === \"production\") {\n logLevel = \"info\";\n }\n if (opt.logsLevel) {\n logLevel = (opt.logsLevel).toLowerCase();\n }\n if (opt.logsPath) {\n logFilePath = opt.logsPath;\n }\n if (opt.sensFields) {\n sensFields = opt.sensFields;\n }\n if (!app.appDebug) {\n Logger.enableBatch(true);\n Logger.setBatchConfig({\n maxSize: 200,\n flushInterval: 500\n });\n }\n if (logLevel) {\n Logger.setLevel(logLevel);\n }\n if (logFilePath && !app.silent) {\n Helper.define(app, \"logsPath\", logFilePath);\n process.env.LOGS_PATH = logFilePath;\n Logger.setLogFilePath(logFilePath);\n }\n if (sensFields) {\n Logger.setSensFields(sensFields);\n }\n (app as any).once(AppEvent.appStop, async () => {\n await Logger.flushBatch(); // 等待所有日志写入完成\n await Logger.destroy(); // 释放所有资源\n });\n }\n }\n\n /**\n * Load all components and initialize the application.\n * \n * @param app - The KoattyApplication instance\n * @param target - The target class or object containing configuration metadata\n * \n * This method performs the following initialization steps:\n * 1. Loads configurations\n * 2. Creates server and router instances\n * 3. Loads components, middlewares, services and controllers\n * 4. Sets up routing\n * \n * @static\n * @async\n */\n public static async LoadAllComponents(app: KoattyApplication, target: any) {\n try {\n if (Helper.isFunction((IOC as any).preloadMetadata)) {\n (IOC as any).preloadMetadata();\n }\n } catch {\n Logger.Warn('[Loader] preloadMetadata is optional, ignore if not available');\n }\n\n const configurationMeta = Loader.GetConfigurationMeta(app, target);\n const loader = new Loader(app);\n\n for (const event of AppEventArr) {\n switch (event) {\n case AppEvent.appBoot:\n Logger.Log('Koatty', '', 'Load Configurations ...');\n loader.LoadConfigs(configurationMeta);\n Loader.SetLogger(app);\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadConfigure:\n Logger.Log('Koatty', '', 'Emit loadConfigure ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadComponent:\n Logger.Log('Koatty', '', 'Initializing Component Manager ...');\n const componentManager = new ComponentManager(app);\n Helper.define(app, 'componentManager', componentManager);\n\n // Step 1: Discover components (scan metadata)\n componentManager.discoverComponents();\n \n const stats = componentManager.getStats();\n Logger.Log('Koatty', '', `Discovered ${stats.coreComponents} core components, ${stats.userComponents} user components`);\n\n // Step 2: Load components (create instances)\n Logger.Log('Koatty', '', 'Load Components ...');\n await loader.LoadComponents(componentManager);\n\n // Step 3: Register event hooks (instances now exist)\n componentManager.registerAppEvents(target);\n componentManager.registerCoreComponentHooks();\n \n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadPlugin:\n Logger.Log('Koatty', '', 'Emit loadPlugin ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadMiddleware:\n Logger.Log('Koatty', '', 'Load Middlewares ...');\n await loader.LoadMiddlewares();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadService:\n Logger.Log('Koatty', '', 'Load Services ...');\n await loader.LoadServices();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadController:\n Logger.Log('Koatty', '', 'Load Controllers ...');\n await loader.LoadControllers();\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadRouter:\n Logger.Log('Koatty', '', 'Initialize Router and Load Routes ...');\n // RouterComponent.initRouter() handles both router creation and route loading\n await asyncEvent(app, event);\n break;\n\n case AppEvent.loadServe:\n Logger.Log('Koatty', '', 'Emit loadServe ...');\n await asyncEvent(app, event);\n break;\n\n case AppEvent.appReady:\n Logger.Log('Koatty', '', 'Emit appReady ...');\n await asyncEvent(app, event);\n break;\n\n default:\n await asyncEvent(app, event);\n break;\n }\n }\n }\n\n /**\n * Load configuration files from specified paths.\n * First loads framework configurations from './config' directory,\n * then loads application configurations from custom paths.\n * Finally merges both configurations with framework configs as lower priority.\n * \n * @protected\n * @param {string[]} [loadPath] - Optional array of paths to load application configs from\n */\n protected LoadConfigs(loadPath?: string[]) {\n const frameConfig: any = {};\n // Logger.Debug(`Load configuration path: ${app.thinkPath}/config`);\n Load([\"./config\"], this.app.koattyPath, function (name: string, path: string, exp: any) {\n frameConfig[name] = exp;\n });\n\n if (Helper.isArray(loadPath)) {\n loadPath = loadPath.length > 0 ? loadPath : [\"./config\"];\n }\n let appConfig = loadConf(loadPath, this.app.appPath);\n appConfig = Helper.extend(frameConfig, appConfig, true);\n\n this.app.setMetaData(\"_configs\", appConfig);\n }\n\n /**\n * Load and register middleware components.\n * Processes middleware configuration, registers middleware classes with IOC container,\n * and mounts middleware to the application.\n * Supports protocol-specific middleware mounting via @Middleware({ protocol }) option.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When middleware doesn't implement IMiddleware interface\n * @throws {Error} When middleware loading fails\n */\n protected async LoadMiddlewares() {\n // ============================================\n // Load middleware configuration\n // ============================================\n let middlewareConf = this.app.config(undefined, \"middleware\");\n if (Helper.isEmpty(middlewareConf)) {\n middlewareConf = { config: {}, list: []};\n }\n \n // ============================================\n // Trace Middleware(请求链路追踪中间件)\n // ============================================\n // Koatty-Trace 是一个纯粹的 Middleware\n // 配置位置:config/middleware.ts 中的 config.trace\n // \n // 作为第一个加载的中间件,用于追踪整个请求链路\n try {\n const traceOptions = middlewareConf.config?.trace ?? {};\n const tracer = Trace(traceOptions, this.app as Koatty) as any;\n Helper.define(this.app, \"tracer\", tracer);\n this.app.use(tracer);\n Logger.Debug(`Trace middleware registered`);\n } catch (error: any) {\n Logger.Warn(`Trace middleware failed to load: ${error.message}`);\n }\n\n //Mount application middleware\n const appMiddleware = IOC.listClass(\"MIDDLEWARE\") ?? [];\n appMiddleware.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"MIDDLEWARE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"MIDDLEWARE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsMiddlewareInterface(ctl)) {\n throw Error(`The middleware ${item.id} must implements interface 'IMiddleware'.`);\n }\n }\n });\n\n const middlewareList = middlewareConf.list || [];\n //de-duplication\n const appMList = new Set([]);\n middlewareList.forEach((item: string) => {\n appMList.add(item);\n });\n\n //Automatically call middleware\n const middlewareConfig = middlewareConf.config || {};\n for (const key of Array.from(appMList)) {\n const handle: IMiddleware = IOC.get(key, \"MIDDLEWARE\");\n if (!handle) {\n throw Error(`Middleware ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`The middleware ${key} must implements interface 'IMiddleware'.`);\n }\n \n Logger.Debug(`Load middleware: ${key}`);\n const middlewareOpt = middlewareConfig[key] || {};\n \n // Get middleware options from decorator metadata\n const middlewareClass = appMiddleware.find(m => m.id === key)?.target;\n let decoratorOptions: IMiddlewareOptions = {};\n if (middlewareClass) {\n try {\n decoratorOptions = IOC.getPropertyData(MIDDLEWARE_OPTIONS, middlewareClass, key) || {};\n } catch {\n // If metadata not found, use empty object\n decoratorOptions = {};\n }\n }\n \n // Merge decorator options with config options (config has higher priority)\n const mergedOptions: IMiddlewareOptions = { ...decoratorOptions, ...middlewareOpt };\n \n // Check if middleware is disabled\n if (mergedOptions.enabled === false) {\n Logger.Warn(`The middleware ${key} has been loaded but is disabled.`);\n continue;\n }\n \n // Execute middleware handler\n const result = await handle.run(mergedOptions, this.app);\n if (Helper.isFunction(result)) {\n let middleware = result;\n \n // Wrap with protocol filter if protocol option is specified\n if (mergedOptions.protocol) {\n const protocols = Helper.isArray(mergedOptions.protocol) \n ? mergedOptions.protocol \n : [mergedOptions.protocol];\n \n Logger.Log(\n 'Koatty', \n '', \n `Middleware ${key} limited to protocols: ${protocols.join(', ')}`\n );\n \n middleware = protocolMiddleware(protocols, result);\n }\n \n // Mount middleware\n if (middleware.length < 3) {\n this.app.use(middleware);\n } else {\n this.app.useExp(middleware);\n }\n }\n }\n }\n\n /**\n * Load and register controller classes from IOC container.\n * Each controller must implement the IController interface.\n * \n * @returns {Promise<string[]>} A promise that resolves to an array of controller IDs.\n * @protected\n * @throws {Error} If a controller does not implement the IController interface.\n */\n protected async LoadControllers() {\n const controllerList = IOC.listClass(\"CONTROLLER\");\n\n const controllers: string[] = [];\n controllerList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"CONTROLLER:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load controller: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Prototype\", type: \"CONTROLLER\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsControllerInterface(ctl)) {\n throw Error(`The controller ${item.id} must implements interface 'IController'.`);\n }\n controllers.push(item.id);\n }\n });\n this.app.setMetaData(\"_controllers\", controllers);\n return controllers;\n }\n\n /**\n * Load and register service components into IOC container.\n * Each service must implement the IService interface.\n * Services are registered with singleton scope.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When service does not implement IService interface\n */\n protected async LoadServices() {\n const serviceList = IOC.listClass(\"SERVICE\");\n\n for (const item of serviceList) {\n item.id = (item.id ?? \"\").replace(\"SERVICE:\", \"\");\n if (item.id && Helper.isClass(item.target)) {\n Logger.Debug(`Load service: ${item.id}`);\n // registering to IOC\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"SERVICE\", args: [] });\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsServiceInterface(ctl)) {\n throw Error(`The service ${item.id} must implements interface 'IService'.`);\n }\n }\n }\n }\n\n /**\n * Load and initialize components, plugins and aspects.\n * Components with suffix 'Plugin' must implement IPlugin interface.\n * Components with suffix 'Aspect' must implement IAspect interface.\n * Plugins are loaded based on configuration and executed synchronously.\n * \n * @protected\n * @returns {Promise<void>}\n * @throws {Error} When plugin/aspect doesn't implement required interface\n * @throws {Error} When plugin loading fails\n */\n protected async LoadComponents(componentManager?: ComponentManager) {\n const componentList = IOC.listClass(\"COMPONENT\");\n\n componentList.forEach((item: ComponentItem) => {\n item.id = (item.id ?? \"\").replace(\"COMPONENT:\", \"\");\n if (Helper.isClass(item.target)) {\n IOC.reg(item.id, item.target, { scope: \"Singleton\", type: \"COMPONENT\", args: [] });\n\n if (item.id && (item.id).endsWith(\"Aspect\")) {\n const ctl = IOC.getInsByClass(item.target);\n if (!implementsAspectInterface(ctl)) {\n throw Error(`The aspect ${item.id} must implements interface 'IAspect'.`);\n }\n }\n }\n });\n\n if (componentManager) {\n await componentManager.loadUserComponents();\n } else {\n Logger.Warn('Loading plugins in legacy mode');\n let pluginsConf = this.app.config(undefined, \"plugin\");\n if (Helper.isEmpty(pluginsConf)) {\n pluginsConf = { config: {}, list: [] };\n }\n const pluginConfList = pluginsConf.list ?? [];\n for (const key of pluginConfList) {\n const handle: IPlugin = IOC.get(key, \"COMPONENT\");\n if (!handle) {\n throw Error(`Plugin ${key} load error.`);\n }\n if (!Helper.isFunction(handle.run)) {\n throw Error(`Plugin ${key} must implements interface 'IPlugin'.`);\n }\n if (pluginsConf.config[key] === false) {\n Logger.Warn(`Plugin ${key} already loaded but not effective.`);\n continue;\n }\n\n await handle.run(pluginsConf.config[key] ?? {}, this.app);\n }\n }\n }\n\n\n}\n\n\n","/*\n * @Description: framework bootstrap\n * @Usage: \n * @Author: richen\n * @Date: 2021-12-09 21:56:32\n * @LastEditTime: 2025-01-14 16:11:21\n * @License: BSD (3-Clause)\n * @Copyright (c): <richenlin(at)gmail.com>\n */\nimport { IOC } from \"koatty_container\";\nimport { AppEvent, Koatty, KoattyApplication, asyncEvent } from 'koatty_core';\nimport { Helper } from \"koatty_lib\";\nimport { checkRuntime, checkUTRuntime, KOATTY_VERSION } from \"../util/Helper\";\nimport { LOGO } from \"./Constants\";\nimport { Loader } from \"./Loader\";\nimport { DefaultLogger as Logger } from \"koatty_logger\";\n\n/**\n * Decorator function for bootstrapping a Koatty application.\n * \n * @param bootFunc Optional function to be executed during bootstrap process\n * @returns A decorator function that validates and executes the bootstrap process\n * @throws Error if the target class does not inherit from Koatty\n * \n * @example\n * ```typescript\n * app = await ExecBootStrap()(App);\n * ```\n */\nexport function ExecBootStrap(bootFunc?: (...args: any[]) => any) {\n return async (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n return await executeBootstrap(target, bootFunc, true);\n };\n}\n\n/**\n * Core bootstrap logic: initialize application, load all components, mark as ready.\n * Does NOT call app.listen() — caller decides how to start the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The fully initialized (but not listening) application instance\n *\n * @internal\n */\nconst bootstrapApplication = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n // Disable winston internal debug logs\n // Filter out winston from NODE_DEBUG to prevent internal logging\n if (process.env.NODE_DEBUG) {\n const debugModules = process.env.NODE_DEBUG.split(',')\n .filter(m => !m.includes('winston'))\n .join(',');\n process.env.NODE_DEBUG = debugModules;\n }\n\n // checked runtime\n checkRuntime();\n // unittest running environment\n const isUTRuntime = checkUTRuntime();\n if (!isInitiative && isUTRuntime) {\n return;\n }\n\n const app = <KoattyApplication>Reflect.construct(target, []);\n // unittest does not print startup logs\n if (isUTRuntime) {\n app.silent = true;\n Logger.enable(false);\n }\n\n if (!app.silent) console.log(LOGO);\n if (!(app instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n\n // Initialize env\n Loader.initialize(app);\n\n // exec bootFunc\n if (Helper.isFunction(bootFunc)) {\n Logger.Log('Koatty', '', 'Execute bootFunc ...');\n await bootFunc(app);\n }\n // Set IOC.app\n IOC.setApp(app);\n\n // Check all bean\n Logger.Log('Koatty', '', 'ComponentScan ...');\n Loader.CheckAllComponents(app, target);\n\n // Load All components\n await Loader.LoadAllComponents(app, target);\n\n // Mark application as ready (all components loaded, middleware registered)\n app.markReady();\n\n return app;\n};\n\n/**\n * Execute bootstrap process for Koatty application (traditional server mode).\n * Calls bootstrapApplication() for initialization, then starts the server.\n *\n * @param target - The target class to instantiate the application\n * @param bootFunc - Optional function to execute during bootstrap process\n * @param isInitiative - Whether the bootstrap is initiated manually\n * @returns Promise<KoattyApplication> The bootstrapped application instance\n */\nconst executeBootstrap = async function (target: any, bootFunc?: (...args: any[]) => any,\n isInitiative = false): Promise<KoattyApplication> {\n try {\n const app = await bootstrapApplication(target, bootFunc, isInitiative);\n if (!app) return; // e.g. UT runtime + not initiative\n\n // Start listening (traditional server mode)\n const isUTRuntime = checkUTRuntime();\n if (!isUTRuntime) {\n app.listen(listenCallback);\n }\n\n return app;\n } catch (err) {\n Logger.Fatal(err);\n }\n};\n\n/**\n * Create a fully initialized Koatty application WITHOUT starting a server.\n *\n * Use this for:\n * - Serverless deployment (AWS Lambda, Alibaba Cloud FC, Tencent SCF, etc.)\n * - Custom server setup (attach handler to an existing HTTP server)\n * - Testing (use app.getRequestHandler() with supertest)\n *\n * @param target - The Koatty application class decorated with @Bootstrap()\n * @param bootFunc - Optional function to execute during bootstrap process\n * @returns Promise<KoattyApplication> A ready application instance (not listening)\n *\n * @example\n * ```typescript\n * // Serverless entry point\n * import { createApplication } from 'koatty';\n * import { App } from './App';\n *\n * let cachedApp: KoattyApplication;\n *\n * export async function handler(req, res) {\n * if (!cachedApp) {\n * cachedApp = await createApplication(App);\n * }\n * return cachedApp.getRequestHandler()(req, res);\n * }\n *\n * // Custom HTTP server\n * import http from 'http';\n * const app = await createApplication(App);\n * http.createServer(app.getRequestHandler()).listen(3000);\n * ```\n */\nexport async function createApplication(\n target: any,\n bootFunc?: (...args: any[]) => any,\n): Promise<KoattyApplication> {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class ${target.name} does not inherit from Koatty`);\n }\n const app = await bootstrapApplication(target, bootFunc, true);\n if (!app) {\n throw new Error('Failed to initialize application');\n }\n return app;\n}\n\n/**\n * Server listen callback function.\n * Print server information and initialize logger settings.\n * \n * @param {KoattyApplication} app - The Koatty application instance\n * @returns {void}\n * \n * @internal\n */\nconst listenCallback = (app: KoattyApplication) => {\n Logger.Log('Koatty', '', '====================================');\n Logger.Log(\"Koatty\", \"\", `Nodejs Version: ${process.version}`);\n Logger.Log(\"Koatty\", \"\", `Koatty Version: v${KOATTY_VERSION}`);\n Logger.Log(\"Koatty\", \"\", `App Environment: ${app.env}`);\n if (app.appDebug) Logger.Warn(`Running in debug mode.`);\n Logger.Log('Koatty', '', '====================================');\n \n // Trigger appStart event after server starts listening\n // Listeners are registered via app.once in LoadAppEventHooks\n asyncEvent(app, AppEvent.appStart);\n};\n","/**\n * Decorator for Koatty framework\n * @author richen\n * @copyright Copyright (c) - <richenlin(at)gmail.com>\n * @license BSD (3-Clause)\n * @version 2026-02-03 10:00:00\n */\n\nimport { IOC, TAGGED_CLS } from \"koatty_container\";\nimport { Koatty } from \"koatty_core\";\nimport { ExecBootStrap } from \"./Bootstrap\";\nimport { COMPONENT_SCAN, CONFIGURATION_SCAN } from \"./Constants\";\n\n/**\n * Bootstrap decorator for Koatty application class.\n * \n * @param bootFunc Optional function to execute during bootstrap process\n * @returns ClassDecorator\n * @throws Error if target class does not inherit from Koatty\n * \n * @example\n * ```ts\n * @Bootstrap()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function Bootstrap(bootFunc?: (...args: any[]) => any): ClassDecorator {\n return function (target: any) {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n IOC.saveClass('COMPONENT', target, 'KOATTY_APP');\n ExecBootStrap(bootFunc)(target);\n return target;\n };\n}\n\n/**\n * Component scan decorator for Koatty application.\n * Scans the specified path(s) for components and registers them in the IOC container.\n * \n * @param {string | string[]} [scanPath] - The path or array of paths to scan for components\n * @returns {ClassDecorator} A class decorator that enables component scanning\n * @throws {Error} If the decorated class does not inherit from Koatty\n * @example\n * ```typescript\n * @ComponentScan()\n * export class App extends Koatty {\n * // ...\n * }\n * ```\n */\nexport function ComponentScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, COMPONENT_SCAN, scanPath, target);\n };\n}\n\n\n/**\n * Configuration scan decorator, used to scan and load configuration files.\n * \n * @param scanPath - The path or array of paths to scan for configuration files. If not provided, defaults to empty string.\n * @returns A class decorator function that registers configuration scan metadata.\n * @throws Error if the decorated class does not inherit from Koatty.\n * @example\n * ```typescript\n * @ConfigurationScan()\n * export class App extends Koatty {\n * // ...\n * }\n */\nexport function ConfigurationScan(scanPath?: string | string[]): ClassDecorator {\n return (target: any) => {\n if (!(target.prototype instanceof Koatty)) {\n throw new Error(`class does not inherit from Koatty`);\n }\n scanPath = scanPath ?? '';\n IOC.saveClassMetadata(TAGGED_CLS, CONFIGURATION_SCAN, scanPath, target);\n };\n}\n"]}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koatty",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.11",
|
|
4
4
|
"description": "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "pnpm run build:js && pnpm run build:dts && pnpm run build:doc && pnpm run build:cp",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"eslint-plugin-jest": "^28.x.x",
|
|
89
89
|
"jest": "^29.x.x",
|
|
90
90
|
"jest-html-reporters": "^3.x.x",
|
|
91
|
-
"koatty_validation": "^2.0.
|
|
91
|
+
"koatty_validation": "^2.0.5",
|
|
92
92
|
"reflect-metadata": "^0.2.2",
|
|
93
93
|
"supertest": "^7.x.x",
|
|
94
94
|
"ts-jest": "^29.x.x",
|
|
@@ -97,13 +97,13 @@
|
|
|
97
97
|
"dependencies": {
|
|
98
98
|
"koa": "^3.1.1",
|
|
99
99
|
"koatty_config": "^1.2.16",
|
|
100
|
-
"koatty_container": "^2.0.
|
|
100
|
+
"koatty_container": "^2.0.5",
|
|
101
101
|
"koatty_core": "^2.1.6",
|
|
102
102
|
"koatty_exception": "^2.1.6",
|
|
103
103
|
"koatty_lib": "^1.4.7",
|
|
104
104
|
"koatty_loader": "^1.1.7",
|
|
105
105
|
"koatty_logger": "^2.8.3",
|
|
106
|
-
"koatty_router": "^2.1.
|
|
106
|
+
"koatty_router": "^2.1.7",
|
|
107
107
|
"koatty_serve": "^3.1.7",
|
|
108
108
|
"koatty_trace": "^2.1.7",
|
|
109
109
|
"ts-morph": "^27.0.2"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koatty",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.11",
|
|
4
4
|
"description": "Koa + Typescript = koatty. Use Typescript's decorator implement auto injection.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -81,20 +81,20 @@
|
|
|
81
81
|
"supertest": "^7.x.x",
|
|
82
82
|
"ts-jest": "^29.x.x",
|
|
83
83
|
"tslib": "^2.x.x",
|
|
84
|
-
"koatty_validation": "2.0.
|
|
84
|
+
"koatty_validation": "2.0.5"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
87
|
"koa": "^3.1.1",
|
|
88
88
|
"ts-morph": "^27.0.2",
|
|
89
|
-
"koatty_config": "1.2.16",
|
|
90
|
-
"koatty_container": "2.0.6",
|
|
91
89
|
"koatty_core": "2.1.6",
|
|
90
|
+
"koatty_container": "2.0.5",
|
|
92
91
|
"koatty_exception": "2.1.6",
|
|
92
|
+
"koatty_config": "1.2.16",
|
|
93
93
|
"koatty_lib": "1.4.7",
|
|
94
94
|
"koatty_loader": "1.1.7",
|
|
95
95
|
"koatty_logger": "2.8.3",
|
|
96
|
-
"koatty_router": "2.1.6",
|
|
97
96
|
"koatty_serve": "3.1.7",
|
|
97
|
+
"koatty_router": "2.1.7",
|
|
98
98
|
"koatty_trace": "2.1.7"
|
|
99
99
|
},
|
|
100
100
|
"types": "./dist/index.d.ts",
|