apifox-mock-generator 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/README.md +1057 -920
- package/dist/package.json +4 -17
- package/dist/src/core/apifox-client.d.ts.map +1 -1
- package/dist/src/core/apifox-client.js +10 -12
- package/dist/src/core/apifox-client.js.map +1 -1
- package/dist/src/core/config-loader.d.ts.map +1 -1
- package/dist/src/core/config-loader.js +1 -1
- package/dist/src/core/config-loader.js.map +1 -1
- package/dist/src/core/endpoint-filter.d.ts.map +1 -1
- package/dist/src/core/endpoint-filter.js +26 -27
- package/dist/src/core/endpoint-filter.js.map +1 -1
- package/dist/src/core/mock-config-loader.d.ts +19 -0
- package/dist/src/core/mock-config-loader.d.ts.map +1 -0
- package/dist/src/core/mock-config-loader.js +31 -0
- package/dist/src/core/mock-config-loader.js.map +1 -0
- package/dist/src/core/openapi-converter.d.ts.map +1 -1
- package/dist/src/core/openapi-converter.js +11 -8
- package/dist/src/core/openapi-converter.js.map +1 -1
- package/dist/src/generators/mock-generator.d.ts +1 -1
- package/dist/src/generators/mock-generator.d.ts.map +1 -1
- package/dist/src/generators/mock-generator.js +38 -17
- package/dist/src/generators/mock-generator.js.map +1 -1
- package/dist/src/generators/templates/file-architecture.d.ts +4 -0
- package/dist/src/generators/templates/file-architecture.d.ts.map +1 -1
- package/dist/src/generators/templates/file-architecture.js +42 -5
- package/dist/src/generators/templates/file-architecture.js.map +1 -1
- package/dist/src/generators/templates/mock-template.d.ts.map +1 -1
- package/dist/src/generators/templates/mock-template.js +75 -62
- package/dist/src/generators/templates/mock-template.js.map +1 -1
- package/dist/src/generators/templates/type-template.d.ts +1 -1
- package/dist/src/generators/templates/type-template.d.ts.map +1 -1
- package/dist/src/generators/templates/type-template.js +314 -63
- package/dist/src/generators/templates/type-template.js.map +1 -1
- package/dist/src/generators/type-generator.d.ts.map +1 -1
- package/dist/src/generators/type-generator.js +24 -1
- package/dist/src/generators/type-generator.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/scripts/cli.js +8 -8
- package/dist/src/scripts/cli.js.map +1 -1
- package/dist/src/scripts/generate-mock.js +3 -1
- package/dist/src/scripts/generate-mock.js.map +1 -1
- package/dist/src/scripts/serve-mock.js +11 -12
- package/dist/src/scripts/serve-mock.js.map +1 -1
- package/dist/src/server/express-server.d.ts +2 -1
- package/dist/src/server/express-server.d.ts.map +1 -1
- package/dist/src/server/express-server.js +9 -44
- package/dist/src/server/express-server.js.map +1 -1
- package/dist/src/server/hot-reload.d.ts +2 -1
- package/dist/src/server/hot-reload.d.ts.map +1 -1
- package/dist/src/server/hot-reload.js +5 -3
- package/dist/src/server/hot-reload.js.map +1 -1
- package/dist/src/server/remote-proxy.d.ts +17 -0
- package/dist/src/server/remote-proxy.d.ts.map +1 -0
- package/dist/src/server/remote-proxy.js +45 -0
- package/dist/src/server/remote-proxy.js.map +1 -0
- package/dist/src/server/route-handler.d.ts +28 -0
- package/dist/src/server/route-handler.d.ts.map +1 -0
- package/dist/src/server/route-handler.js +110 -0
- package/dist/src/server/route-handler.js.map +1 -0
- package/dist/src/server/route-loader.d.ts +3 -2
- package/dist/src/server/route-loader.d.ts.map +1 -1
- package/dist/src/server/route-loader.js +99 -23
- package/dist/src/server/route-loader.js.map +1 -1
- package/dist/src/server/route-manager.d.ts.map +1 -1
- package/dist/src/server/route-manager.js.map +1 -1
- package/dist/src/server/route-matcher.d.ts.map +1 -1
- package/dist/src/server/route-matcher.js.map +1 -1
- package/dist/src/server/validation.d.ts.map +1 -1
- package/dist/src/server/validation.js.map +1 -1
- package/dist/src/types/index.d.ts +3 -12
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/mock/v1/auth/login/username.d.ts +7 -13
- package/dist/src/types/mock/v1/auth/login/username.d.ts.map +1 -1
- package/dist/src/types/mock/v1/auth/login/username.js.map +1 -1
- package/dist/src/types/mock/v1/role/list.d.ts +12 -0
- package/dist/src/types/mock/v1/role/list.d.ts.map +1 -1
- package/dist/src/types/mock/v1/role/list.js.map +1 -1
- package/dist/src/types/mock/v1/role/permissions.d.ts +8 -0
- package/dist/src/types/mock/v1/role/permissions.d.ts.map +1 -1
- package/dist/src/types/mock/v1/role/permissions.js.map +1 -1
- package/dist/src/types/mock/v1/role.d.ts +28 -0
- package/dist/src/types/mock/v1/role.d.ts.map +1 -1
- package/dist/src/types/mock/v1/role.js.map +1 -1
- package/dist/src/types/mock/v1/tenant/permissions.d.ts +17 -2
- package/dist/src/types/mock/v1/tenant/permissions.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/permissions.js.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/list.d.ts +15 -1
- package/dist/src/types/mock/v1/tenant/user/list.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/list.js.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/unlink.d.ts +10 -0
- package/dist/src/types/mock/v1/tenant/user/unlink.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/unlink.js.map +1 -1
- package/dist/src/types/mock/v1/user/info.d.ts +1 -1
- package/dist/src/types/mock/v1/user/permissions.d.ts +2 -2
- package/dist/src/types/mock/v1/user/permissions.d.ts.map +1 -1
- package/dist/src/types/v1/tenant/permissions.d.ts +16 -0
- package/dist/src/types/v1/tenant/permissions.d.ts.map +1 -0
- package/dist/src/types/v1/tenant/permissions.js +4 -0
- package/dist/src/types/v1/tenant/permissions.js.map +1 -0
- package/dist/src/utils/block-updater.d.ts.map +1 -1
- package/dist/src/utils/block-updater.js +9 -4
- package/dist/src/utils/block-updater.js.map +1 -1
- package/dist/src/utils/code-formatter.js +1 -1
- package/dist/src/utils/code-formatter.js.map +1 -1
- package/dist/src/utils/file-helper.d.ts.map +1 -1
- package/dist/src/utils/file-helper.js.map +1 -1
- package/dist/src/utils/file-operations.js.map +1 -1
- package/dist/src/utils/file-utils.d.ts +9 -0
- package/dist/src/utils/file-utils.d.ts.map +1 -0
- package/dist/src/utils/file-utils.js +44 -0
- package/dist/src/utils/file-utils.js.map +1 -0
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/logger.js.map +1 -1
- package/dist/src/utils/path-utils.d.ts.map +1 -1
- package/dist/src/utils/path-utils.js.map +1 -1
- package/dist/src/utils/type-mapping.d.ts +2 -2
- package/dist/src/utils/type-mapping.d.ts.map +1 -1
- package/dist/src/utils/type-mapping.js +48 -6
- package/dist/src/utils/type-mapping.js.map +1 -1
- package/package.json +48 -61
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../../src/generators/type-generator.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../../src/generators/type-generator.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAoB,EACpB,OAAY,EACZ,SAAwB;IAExB,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;IAElD,4BAA4B;IAC5B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,mBAAmB;QACnB,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEnD,kCAAkC;QAClC,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5B,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,6BAA6B;YAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,qBAAqB;gBACrB,UAAU;oBACR,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC;YAC9F,CAAC;QACH,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC3C,aAAa;QACb,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,mBAAmB;IACnB,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAEzD,KAAK,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QAEnE,eAAe;QACf,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;YAC/E,MAAM,eAAe,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAE/D,qBAAqB;YACrB,MAAM,UAAU,CAAC,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;YACjF,cAAc,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,KAAK,cAAc,CAAC,MAAM,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,QAAQ,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAMlC,eAAO,MAAM,OAAO,KAAc,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAElC,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC"}
|
package/dist/src/scripts/cli.js
CHANGED
|
@@ -14,14 +14,14 @@ switch (command) {
|
|
|
14
14
|
await import('./serve-mock.js');
|
|
15
15
|
break;
|
|
16
16
|
default:
|
|
17
|
-
console.log(`
|
|
18
|
-
Apifox Mock Generator v1.0.0
|
|
19
|
-
|
|
20
|
-
用法:
|
|
21
|
-
apifox-mock generate 生成 Mock 和类型文件
|
|
22
|
-
apifox-mock serve 启动 Mock 服务器
|
|
23
|
-
apifox-mock dev 开发模式(生成 + 服务器)
|
|
24
|
-
|
|
17
|
+
console.log(`
|
|
18
|
+
Apifox Mock Generator v1.0.0
|
|
19
|
+
|
|
20
|
+
用法:
|
|
21
|
+
apifox-mock generate 生成 Mock 和类型文件
|
|
22
|
+
apifox-mock serve 启动 Mock 服务器
|
|
23
|
+
apifox-mock dev 开发模式(生成 + 服务器)
|
|
24
|
+
|
|
25
25
|
`);
|
|
26
26
|
process.exit(command ? 1 : 0);
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/scripts/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/scripts/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,UAAU;QACb,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnC,MAAM;IACR,KAAK,OAAO;QACV,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM;IACR,KAAK,KAAK;QACR,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM;IACR;QACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;CAQf,CAAC,CAAC;QACC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -38,7 +38,9 @@ async function main() {
|
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
40
|
// 避免重复显示错误信息
|
|
41
|
-
if (error instanceof Error &&
|
|
41
|
+
if (error instanceof Error &&
|
|
42
|
+
!error.message.includes('网络连接失败') &&
|
|
43
|
+
!error.message.includes('API 请求失败')) {
|
|
42
44
|
logger.error('生成失败');
|
|
43
45
|
console.error(error);
|
|
44
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-mock.js","sourceRoot":"","sources":["../../../src/scripts/generate-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"generate-mock.js","sourceRoot":"","sources":["../../../src/scripts/generate-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAElC,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAErD,UAAU;QACV,MAAM,YAAY,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,MAAM,WAAW,CAAC,CAAC;QAExD,UAAU;QACV,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC7D,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,mBAAmB,aAAa,MAAM,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,QAAQ,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,aAAa;QACb,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAExE,SAAS;QACT,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAEpD,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa;QACb,IACE,KAAK,YAAY,KAAK;YACtB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EACnC,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { logger } from '../utils/logger.js';
|
|
2
2
|
import { loadConfig } from '../core/config-loader.js';
|
|
3
|
+
import { loadMockConfig } from '../core/mock-config-loader.js';
|
|
3
4
|
import { RouteManager } from '../server/route-manager.js';
|
|
4
5
|
import { loadMockRoutes } from '../server/route-loader.js';
|
|
5
6
|
import { setupMockServer } from '../server/express-server.js';
|
|
@@ -9,32 +10,30 @@ import { setupHotReload } from '../server/hot-reload.js';
|
|
|
9
10
|
*/
|
|
10
11
|
async function main() {
|
|
11
12
|
try {
|
|
12
|
-
|
|
13
|
+
// 加载配置
|
|
14
|
+
const apifoxConfig = await loadConfig();
|
|
15
|
+
const mockConfig = await loadMockConfig();
|
|
13
16
|
const routeManager = new RouteManager();
|
|
14
17
|
logger.title('启动 Mock 服务器...');
|
|
15
18
|
// 初始加载所有 Mock 路由
|
|
16
|
-
const routes = await loadMockRoutes(
|
|
19
|
+
const routes = await loadMockRoutes(apifoxConfig, mockConfig);
|
|
17
20
|
routes.forEach(route => {
|
|
18
21
|
const key = `${route.method} ${route.path}`;
|
|
19
22
|
routeManager.setRoute(key, route);
|
|
20
23
|
});
|
|
21
24
|
logger.success(`加载了 ${routes.length} 个 Mock 路由`);
|
|
22
25
|
// 创建并启动服务器
|
|
23
|
-
const app = setupMockServer(routeManager);
|
|
24
|
-
app.listen(
|
|
26
|
+
const app = setupMockServer(routeManager, mockConfig);
|
|
27
|
+
app.listen(mockConfig.port, 'localhost', () => {
|
|
25
28
|
logger.success(`\n🚀 Mock 服务器已启动!`);
|
|
26
|
-
logger.info(` 地址: http://localhost:${
|
|
27
|
-
logger.info(`
|
|
28
|
-
logger.info(
|
|
29
|
-
routes.forEach(route => {
|
|
30
|
-
const method = route.method.padEnd(6);
|
|
31
|
-
console.log(` ${method} http://localhost:${config.mockPort}${route.path}`);
|
|
32
|
-
});
|
|
29
|
+
logger.info(` 地址: http://localhost:${mockConfig.port}`);
|
|
30
|
+
logger.info(` 工作模式: ${mockConfig.model}`);
|
|
31
|
+
logger.info(` 目标服务器: ${mockConfig.target}`);
|
|
33
32
|
logger.info('\n提示:');
|
|
34
33
|
logger.info(' - 🔥 热重载已启用,修改 Mock 文件将自动生效');
|
|
35
34
|
logger.info(' - 按 Ctrl+C 停止服务器\n');
|
|
36
35
|
// 启动文件监听(热重载)
|
|
37
|
-
setupHotReload(
|
|
36
|
+
setupHotReload(apifoxConfig, routeManager, mockConfig);
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
39
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve-mock.js","sourceRoot":"","sources":["../../../src/scripts/serve-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"serve-mock.js","sourceRoot":"","sources":["../../../src/scripts/serve-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,OAAO;QACP,MAAM,YAAY,GAAG,MAAM,UAAU,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAExC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAE/B,iBAAiB;QACjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;QAEjD,WAAW;QACX,MAAM,GAAG,GAAG,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEtD,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAEpC,cAAc;YACd,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import type { RouteManager } from './route-manager.js';
|
|
3
|
+
import type { MockConfig } from '../core/mock-config-loader.js';
|
|
3
4
|
/**
|
|
4
5
|
* 设置 Mock 服务器
|
|
5
6
|
*/
|
|
6
|
-
export declare function setupMockServer(routeManager: RouteManager): express.Application;
|
|
7
|
+
export declare function setupMockServer(routeManager: RouteManager, mockConfig: MockConfig): express.Application;
|
|
7
8
|
//# sourceMappingURL=express-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-server.d.ts","sourceRoot":"","sources":["../../../src/server/express-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"express-server.d.ts","sourceRoot":"","sources":["../../../src/server/express-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,WAAW,CAiDrB"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import cors from 'cors';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
|
-
import {
|
|
5
|
-
import { validateRequest } from './validation.js';
|
|
4
|
+
import { RouteHandler } from './route-handler.js';
|
|
6
5
|
/**
|
|
7
6
|
* 设置 Mock 服务器
|
|
8
7
|
*/
|
|
9
|
-
export function setupMockServer(routeManager) {
|
|
8
|
+
export function setupMockServer(routeManager, mockConfig) {
|
|
10
9
|
const app = express();
|
|
11
10
|
// 中间件
|
|
12
11
|
app.use(cors());
|
|
@@ -18,49 +17,15 @@ export function setupMockServer(routeManager) {
|
|
|
18
17
|
logger.info(`[${timestamp}] ${req.method} ${req.path}`);
|
|
19
18
|
next();
|
|
20
19
|
});
|
|
20
|
+
// 创建路由处理器
|
|
21
|
+
const routeHandler = new RouteHandler(mockConfig, routeManager);
|
|
21
22
|
// 动态路由处理中间件
|
|
22
23
|
app.use(async (req, res, next) => {
|
|
23
|
-
//
|
|
24
|
-
const
|
|
25
|
-
if (!
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// 提取路径参数
|
|
29
|
-
const params = extractPathParams(route.path, req.path);
|
|
30
|
-
req.params = params;
|
|
31
|
-
// 参数校验
|
|
32
|
-
if (route.validation) {
|
|
33
|
-
const validationError = validateRequest(req, route.validation);
|
|
34
|
-
if (validationError) {
|
|
35
|
-
res.status(400).json({
|
|
36
|
-
code: 400,
|
|
37
|
-
message: '参数校验失败',
|
|
38
|
-
error: validationError
|
|
39
|
-
});
|
|
40
|
-
logger.error(`${route.method} ${route.path} -> 400 (参数校验失败: ${validationError})`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
// 判断 response 是函数还是静态数据
|
|
46
|
-
let responseData = typeof route.response === 'function'
|
|
47
|
-
? route.response(req) // 动态生成数据
|
|
48
|
-
: route.response; // 静态数据
|
|
49
|
-
// 处理 Promise
|
|
50
|
-
if (responseData && typeof responseData.then === 'function') {
|
|
51
|
-
responseData = await responseData;
|
|
52
|
-
}
|
|
53
|
-
// 返回 Mock 数据
|
|
54
|
-
res.status(route.status || 200).json(responseData);
|
|
55
|
-
logger.success(`${route.method} ${route.path} -> ${route.status || 200}`);
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
logger.error(`${route.method} ${route.path} -> 500 (${error instanceof Error ? error.message : '未知错误'})`);
|
|
59
|
-
res.status(500).json({
|
|
60
|
-
code: 500,
|
|
61
|
-
message: 'Internal server error',
|
|
62
|
-
error: error instanceof Error ? error.message : '未知错误'
|
|
63
|
-
});
|
|
24
|
+
// 使用路由处理器处理请求
|
|
25
|
+
const handled = await routeHandler.handleRequest(req, res);
|
|
26
|
+
if (!handled) {
|
|
27
|
+
// 如果请求未被处理,继续到 404 处理
|
|
28
|
+
return next();
|
|
64
29
|
}
|
|
65
30
|
});
|
|
66
31
|
// 404 处理
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-server.js","sourceRoot":"","sources":["../../../src/server/express-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"express-server.js","sourceRoot":"","sources":["../../../src/server/express-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,YAA0B,EAC1B,UAAsB;IAEtB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,MAAM;IACN,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEhD,UAAU;IACV,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,UAAU;IACV,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEhE,YAAY;IACZ,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC/B,cAAc;QACd,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,sBAAsB;YACtB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS;IACT,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;IACP,GAAG,CAAC,GAAG,CAAC,CAAC,GAAU,EAAE,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QAC9F,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { RouteManager } from './route-manager.js';
|
|
2
2
|
import type { ApifoxConfig } from '../types/index.js';
|
|
3
|
+
import type { MockConfig } from '../core/mock-config-loader.js';
|
|
3
4
|
/**
|
|
4
5
|
* 设置热重载
|
|
5
6
|
*/
|
|
6
|
-
export declare function setupHotReload(config: ApifoxConfig, routeManager: RouteManager): void;
|
|
7
|
+
export declare function setupHotReload(config: ApifoxConfig, routeManager: RouteManager, mockConfig: MockConfig): void;
|
|
7
8
|
//# sourceMappingURL=hot-reload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hot-reload.d.ts","sourceRoot":"","sources":["../../../src/server/hot-reload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"hot-reload.d.ts","sourceRoot":"","sources":["../../../src/server/hot-reload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,GACrB,IAAI,CAwDN"}
|
|
@@ -5,7 +5,9 @@ import { loadRouteFromFile } from './route-loader.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* 设置热重载
|
|
7
7
|
*/
|
|
8
|
-
export function setupHotReload(config, routeManager) {
|
|
8
|
+
export function setupHotReload(config, routeManager, mockConfig) {
|
|
9
|
+
// 暂时禁用热重载功能
|
|
10
|
+
return;
|
|
9
11
|
const mockDir = path.resolve(config.mockDir);
|
|
10
12
|
logger.info('🔥 监听 Mock 文件变化...');
|
|
11
13
|
logger.info(` 监听目录: ${mockDir}`);
|
|
@@ -26,7 +28,7 @@ export function setupHotReload(config, routeManager) {
|
|
|
26
28
|
watcher
|
|
27
29
|
.on('add', async (filePath) => {
|
|
28
30
|
logger.info(`📝 检测到新文件: ${path.relative(mockDir, filePath)}`);
|
|
29
|
-
const result = await loadRouteFromFile(filePath, mockDir);
|
|
31
|
+
const result = await loadRouteFromFile(filePath, mockDir, config, mockConfig);
|
|
30
32
|
if (result) {
|
|
31
33
|
routeManager.setRoute(result.key, result.route);
|
|
32
34
|
logger.success(`✓ 已加载路由: ${result.key}`);
|
|
@@ -34,7 +36,7 @@ export function setupHotReload(config, routeManager) {
|
|
|
34
36
|
})
|
|
35
37
|
.on('change', async (filePath) => {
|
|
36
38
|
logger.info(`📝 文件已修改: ${path.relative(mockDir, filePath)}`);
|
|
37
|
-
const result = await loadRouteFromFile(filePath, mockDir);
|
|
39
|
+
const result = await loadRouteFromFile(filePath, mockDir, config, mockConfig);
|
|
38
40
|
if (result) {
|
|
39
41
|
routeManager.setRoute(result.key, result.route);
|
|
40
42
|
logger.success(`✓ 已更新路由: ${result.key}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hot-reload.js","sourceRoot":"","sources":["../../../src/server/hot-reload.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"hot-reload.js","sourceRoot":"","sources":["../../../src/server/hot-reload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MockConfig } from '../core/mock-config-loader.js';
|
|
2
|
+
/**
|
|
3
|
+
* 远程服务器代理
|
|
4
|
+
*/
|
|
5
|
+
export declare class RemoteProxy {
|
|
6
|
+
private config;
|
|
7
|
+
constructor(config: MockConfig);
|
|
8
|
+
/**
|
|
9
|
+
* 代理请求到远程服务器
|
|
10
|
+
*/
|
|
11
|
+
proxyRequest(req: any): Promise<any>;
|
|
12
|
+
/**
|
|
13
|
+
* 检查远程服务器是否已配置
|
|
14
|
+
*/
|
|
15
|
+
isRemoteServerConfigured(): boolean;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=remote-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/remote-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA8B1C;;OAEG;IACH,wBAAwB,IAAI,OAAO;CAGpC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* 远程服务器代理
|
|
4
|
+
*/
|
|
5
|
+
export class RemoteProxy {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 代理请求到远程服务器
|
|
11
|
+
*/
|
|
12
|
+
async proxyRequest(req) {
|
|
13
|
+
const target = this.config.target;
|
|
14
|
+
const remoteUrl = `${target.replace(/\/$/, '')}${req.path}`;
|
|
15
|
+
const queryString = new URLSearchParams(req.query).toString();
|
|
16
|
+
const fullUrl = queryString ? `${remoteUrl}?${queryString}` : remoteUrl;
|
|
17
|
+
logger.debug(`代理请求到: ${fullUrl}`);
|
|
18
|
+
try {
|
|
19
|
+
const response = await fetch(fullUrl, {
|
|
20
|
+
method: req.method,
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
...req.headers
|
|
24
|
+
},
|
|
25
|
+
body: req.method !== 'GET' ? JSON.stringify(req.body) : undefined
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`远程服务器响应错误: ${response.status} ${response.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
const data = await response.json();
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.error(`代理请求失败: ${error instanceof Error ? error.message : '未知错误'}`);
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 检查远程服务器是否已配置
|
|
40
|
+
*/
|
|
41
|
+
isRemoteServerConfigured() {
|
|
42
|
+
return !!this.config.target;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=remote-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-proxy.js","sourceRoot":"","sources":["../../../src/server/remote-proxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,WAAW;IAGtB,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAQ;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClC,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACpC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,GAAG,CAAC,OAAO;iBACf;gBACD,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aAClE,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { MockConfig } from '../core/mock-config-loader.js';
|
|
2
|
+
import type { RouteManager } from './route-manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* 路由处理器 - 根据工作模式处理请求
|
|
5
|
+
*/
|
|
6
|
+
export declare class RouteHandler {
|
|
7
|
+
private config;
|
|
8
|
+
private routeManager;
|
|
9
|
+
private remoteProxy;
|
|
10
|
+
constructor(config: MockConfig, routeManager: RouteManager);
|
|
11
|
+
/**
|
|
12
|
+
* 处理请求
|
|
13
|
+
*/
|
|
14
|
+
handleRequest(req: any, res: any): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* 处理代理请求(纯代理模式)
|
|
17
|
+
*/
|
|
18
|
+
private handleProxyRequest;
|
|
19
|
+
/**
|
|
20
|
+
* 处理 Mock 请求(纯 Mock 模式)
|
|
21
|
+
*/
|
|
22
|
+
private handleMockRequest;
|
|
23
|
+
/**
|
|
24
|
+
* 执行 Mock 路由
|
|
25
|
+
*/
|
|
26
|
+
private executeMockRoute;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=route-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-handler.d.ts","sourceRoot":"","sources":["../../../src/server/route-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAc;gBAErB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY;IAM1D;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBzD;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;YACW,iBAAiB;IAW/B;;OAEG;YACW,gBAAgB;CA+C/B"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { RemoteProxy } from './remote-proxy.js';
|
|
2
|
+
import { findMatchingRoute, extractPathParams } from './route-matcher.js';
|
|
3
|
+
import { validateRequest } from './validation.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* 路由处理器 - 根据工作模式处理请求
|
|
7
|
+
*/
|
|
8
|
+
export class RouteHandler {
|
|
9
|
+
constructor(config, routeManager) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.routeManager = routeManager;
|
|
12
|
+
this.remoteProxy = new RemoteProxy(config);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 处理请求
|
|
16
|
+
*/
|
|
17
|
+
async handleRequest(req, res) {
|
|
18
|
+
try {
|
|
19
|
+
// 检查 URL 参数中的模式覆盖
|
|
20
|
+
const urlMode = req.query._mock || req.query._proxy;
|
|
21
|
+
const effectiveMode = urlMode === '_mock' ? 'mock' : urlMode === '_proxy' ? 'proxy' : this.config.model;
|
|
22
|
+
// 检查 remote 参数
|
|
23
|
+
if (this.config.remoteTarget && req.query.remote === 'mock') {
|
|
24
|
+
return await this.handleMockRequest(req, res);
|
|
25
|
+
}
|
|
26
|
+
// 根据模式处理请求
|
|
27
|
+
if (effectiveMode === 'proxy') {
|
|
28
|
+
return await this.handleProxyRequest(req, res);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return await this.handleMockRequest(req, res);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
logger.error(`请求处理失败: ${error instanceof Error ? error.message : '未知错误'}`);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 处理代理请求(纯代理模式)
|
|
41
|
+
*/
|
|
42
|
+
async handleProxyRequest(req, res) {
|
|
43
|
+
try {
|
|
44
|
+
const proxyData = await this.remoteProxy.proxyRequest(req);
|
|
45
|
+
res.json(proxyData);
|
|
46
|
+
logger.info(`代理请求成功: ${req.method} ${req.path}`);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger.error(`代理请求失败: ${error instanceof Error ? error.message : '未知错误'}`);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 处理 Mock 请求(纯 Mock 模式)
|
|
56
|
+
*/
|
|
57
|
+
async handleMockRequest(req, res) {
|
|
58
|
+
const route = findMatchingRoute(this.routeManager.getAllRoutes(), req.method, req.path);
|
|
59
|
+
if (!route) {
|
|
60
|
+
logger.warn(`Mock 模式:未找到路由 ${req.method} ${req.path}`);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return await this.executeMockRoute(route, req, res);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 执行 Mock 路由
|
|
67
|
+
*/
|
|
68
|
+
async executeMockRoute(route, req, res) {
|
|
69
|
+
try {
|
|
70
|
+
// 提取路径参数
|
|
71
|
+
const params = extractPathParams(route.path, req.path);
|
|
72
|
+
req.params = params;
|
|
73
|
+
// 参数校验
|
|
74
|
+
if (route.validation) {
|
|
75
|
+
const validationError = validateRequest(req, route.validation);
|
|
76
|
+
if (validationError) {
|
|
77
|
+
res.status(400).json({
|
|
78
|
+
code: 400,
|
|
79
|
+
message: '参数校验失败',
|
|
80
|
+
error: validationError
|
|
81
|
+
});
|
|
82
|
+
logger.error(`${route.method} ${route.path} -> 400 (参数校验失败: ${validationError})`);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 判断 response 是函数还是静态数据
|
|
87
|
+
let responseData = typeof route.response === 'function'
|
|
88
|
+
? route.response(req) // 动态生成数据
|
|
89
|
+
: route.response; // 静态数据
|
|
90
|
+
// 处理 Promise
|
|
91
|
+
if (responseData && typeof responseData.then === 'function') {
|
|
92
|
+
responseData = await responseData;
|
|
93
|
+
}
|
|
94
|
+
// 返回 Mock 数据
|
|
95
|
+
res.status(route.status || 200).json(responseData);
|
|
96
|
+
logger.success(`${route.method} ${route.path} -> ${route.status || 200}`);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.error(`${route.method} ${route.path} -> 500 (${error instanceof Error ? error.message : '未知错误'})`);
|
|
101
|
+
res.status(500).json({
|
|
102
|
+
code: 500,
|
|
103
|
+
message: 'Internal server error',
|
|
104
|
+
error: error instanceof Error ? error.message : '未知错误'
|
|
105
|
+
});
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=route-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-handler.js","sourceRoot":"","sources":["../../../src/server/route-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { ApifoxConfig, MockRoute } from '../types/index.js';
|
|
2
|
+
import type { MockConfig } from '../core/mock-config-loader.js';
|
|
2
3
|
/**
|
|
3
4
|
* 动态扫描并加载所有 Mock 文件
|
|
4
5
|
*/
|
|
5
|
-
export declare function loadMockRoutes(config: ApifoxConfig): Promise<MockRoute[]>;
|
|
6
|
+
export declare function loadMockRoutes(config: ApifoxConfig, mockConfig: MockConfig): Promise<MockRoute[]>;
|
|
6
7
|
/**
|
|
7
8
|
* 加载单个 Mock 文件的路由
|
|
8
9
|
*/
|
|
9
|
-
export declare function loadRouteFromFile(filePath: string, mockDir: string): Promise<{
|
|
10
|
+
export declare function loadRouteFromFile(filePath: string, mockDir: string, config: ApifoxConfig, mockConfig: MockConfig): Promise<{
|
|
10
11
|
key: string;
|
|
11
12
|
route: MockRoute;
|
|
12
13
|
} | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-loader.d.ts","sourceRoot":"","sources":["../../../src/server/route-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"route-loader.d.ts","sourceRoot":"","sources":["../../../src/server/route-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAOhE;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CA2FtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG,IAAI,CAAC,CAmGnD"}
|