apifox-mock-generator 1.4.6 → 2.0.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.
Files changed (339) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/README.md +1 -1
  3. package/dist/package.json +22 -4
  4. package/dist/src/application/use-cases/fetch-apifox-data.use-case.d.ts +19 -0
  5. package/dist/src/application/use-cases/fetch-apifox-data.use-case.d.ts.map +1 -0
  6. package/dist/src/application/use-cases/fetch-apifox-data.use-case.js +29 -0
  7. package/dist/src/application/use-cases/fetch-apifox-data.use-case.js.map +1 -0
  8. package/dist/src/application/use-cases/generate-mock.use-case.d.ts +22 -0
  9. package/dist/src/application/use-cases/generate-mock.use-case.d.ts.map +1 -0
  10. package/dist/src/application/use-cases/generate-mock.use-case.js +42 -0
  11. package/dist/src/application/use-cases/generate-mock.use-case.js.map +1 -0
  12. package/dist/src/application/use-cases/generate-types.use-case.d.ts +22 -0
  13. package/dist/src/application/use-cases/generate-types.use-case.d.ts.map +1 -0
  14. package/dist/src/application/use-cases/generate-types.use-case.js +42 -0
  15. package/dist/src/application/use-cases/generate-types.use-case.js.map +1 -0
  16. package/dist/src/application/use-cases/index.d.ts +8 -0
  17. package/dist/src/application/use-cases/index.d.ts.map +1 -0
  18. package/dist/src/application/use-cases/index.js +8 -0
  19. package/dist/src/application/use-cases/index.js.map +1 -0
  20. package/dist/src/application/use-cases/serve-mock.use-case.d.ts +26 -0
  21. package/dist/src/application/use-cases/serve-mock.use-case.d.ts.map +1 -0
  22. package/dist/src/application/use-cases/serve-mock.use-case.js +103 -0
  23. package/dist/src/application/use-cases/serve-mock.use-case.js.map +1 -0
  24. package/dist/src/core/apifox-client.d.ts +5 -1
  25. package/dist/src/core/apifox-client.d.ts.map +1 -1
  26. package/dist/src/core/apifox-client.js +8 -102
  27. package/dist/src/core/apifox-client.js.map +1 -1
  28. package/dist/src/core/config-loader.d.ts.map +1 -1
  29. package/dist/src/core/config-loader.js +17 -5
  30. package/dist/src/core/config-loader.js.map +1 -1
  31. package/dist/src/core/container-setup.d.ts +9 -0
  32. package/dist/src/core/container-setup.d.ts.map +1 -0
  33. package/dist/src/core/container-setup.js +64 -0
  34. package/dist/src/core/container-setup.js.map +1 -0
  35. package/dist/src/core/container.d.ts +42 -0
  36. package/dist/src/core/container.d.ts.map +1 -0
  37. package/dist/src/core/container.js +70 -0
  38. package/dist/src/core/container.js.map +1 -0
  39. package/dist/src/core/endpoint-filter.d.ts +10 -0
  40. package/dist/src/core/endpoint-filter.d.ts.map +1 -1
  41. package/dist/src/core/endpoint-filter.js +22 -95
  42. package/dist/src/core/endpoint-filter.js.map +1 -1
  43. package/dist/src/core/error-codes.d.ts +22 -0
  44. package/dist/src/core/error-codes.d.ts.map +1 -0
  45. package/dist/src/core/error-codes.js +31 -0
  46. package/dist/src/core/error-codes.js.map +1 -0
  47. package/dist/src/core/error-handler.d.ts +8 -0
  48. package/dist/src/core/error-handler.d.ts.map +1 -0
  49. package/dist/src/core/error-handler.js +45 -0
  50. package/dist/src/core/error-handler.js.map +1 -0
  51. package/dist/src/core/errors.d.ts +49 -0
  52. package/dist/src/core/errors.d.ts.map +1 -0
  53. package/dist/src/core/errors.js +70 -0
  54. package/dist/src/core/errors.js.map +1 -0
  55. package/dist/src/core/mock-config-loader.d.ts.map +1 -1
  56. package/dist/src/core/mock-config-loader.js +24 -7
  57. package/dist/src/core/mock-config-loader.js.map +1 -1
  58. package/dist/src/core/openapi-converter.d.ts +5 -1
  59. package/dist/src/core/openapi-converter.d.ts.map +1 -1
  60. package/dist/src/core/openapi-converter.js +11 -34
  61. package/dist/src/core/openapi-converter.js.map +1 -1
  62. package/dist/src/core/service-keys.d.ts +39 -0
  63. package/dist/src/core/service-keys.d.ts.map +1 -0
  64. package/dist/src/core/service-keys.js +43 -0
  65. package/dist/src/core/service-keys.js.map +1 -0
  66. package/dist/src/domain/entities/api-endpoint.entity.d.ts +57 -0
  67. package/dist/src/domain/entities/api-endpoint.entity.d.ts.map +1 -0
  68. package/dist/src/domain/entities/api-endpoint.entity.js +87 -0
  69. package/dist/src/domain/entities/api-endpoint.entity.js.map +1 -0
  70. package/dist/src/domain/entities/index.d.ts +6 -0
  71. package/dist/src/domain/entities/index.d.ts.map +1 -0
  72. package/dist/src/domain/entities/index.js +6 -0
  73. package/dist/src/domain/entities/index.js.map +1 -0
  74. package/dist/src/domain/entities/mock-route.entity.d.ts +41 -0
  75. package/dist/src/domain/entities/mock-route.entity.d.ts.map +1 -0
  76. package/dist/src/domain/entities/mock-route.entity.js +82 -0
  77. package/dist/src/domain/entities/mock-route.entity.js.map +1 -0
  78. package/dist/src/domain/interfaces/apifox-client.interface.d.ts +14 -0
  79. package/dist/src/domain/interfaces/apifox-client.interface.d.ts.map +1 -0
  80. package/dist/src/domain/interfaces/apifox-client.interface.js +2 -0
  81. package/dist/src/domain/interfaces/apifox-client.interface.js.map +1 -0
  82. package/dist/src/domain/interfaces/file-system.interface.d.ts +46 -0
  83. package/dist/src/domain/interfaces/file-system.interface.d.ts.map +1 -0
  84. package/dist/src/domain/interfaces/file-system.interface.js +2 -0
  85. package/dist/src/domain/interfaces/file-system.interface.js.map +1 -0
  86. package/dist/src/domain/interfaces/generator.interface.d.ts +24 -0
  87. package/dist/src/domain/interfaces/generator.interface.d.ts.map +1 -0
  88. package/dist/src/domain/interfaces/generator.interface.js +2 -0
  89. package/dist/src/domain/interfaces/generator.interface.js.map +1 -0
  90. package/dist/src/domain/interfaces/http-client.interface.d.ts +54 -0
  91. package/dist/src/domain/interfaces/http-client.interface.d.ts.map +1 -0
  92. package/dist/src/domain/interfaces/http-client.interface.js +2 -0
  93. package/dist/src/domain/interfaces/http-client.interface.js.map +1 -0
  94. package/dist/src/domain/interfaces/index.d.ts +11 -0
  95. package/dist/src/domain/interfaces/index.d.ts.map +1 -0
  96. package/dist/src/domain/interfaces/index.js +11 -0
  97. package/dist/src/domain/interfaces/index.js.map +1 -0
  98. package/dist/src/domain/interfaces/logger.interface.d.ts +36 -0
  99. package/dist/src/domain/interfaces/logger.interface.d.ts.map +1 -0
  100. package/dist/src/domain/interfaces/logger.interface.js +2 -0
  101. package/dist/src/domain/interfaces/logger.interface.js.map +1 -0
  102. package/dist/src/domain/interfaces/remote-proxy.interface.d.ts +26 -0
  103. package/dist/src/domain/interfaces/remote-proxy.interface.d.ts.map +1 -0
  104. package/dist/src/domain/interfaces/remote-proxy.interface.js +2 -0
  105. package/dist/src/domain/interfaces/remote-proxy.interface.js.map +1 -0
  106. package/dist/src/domain/interfaces/route-manager.interface.d.ts +34 -0
  107. package/dist/src/domain/interfaces/route-manager.interface.d.ts.map +1 -0
  108. package/dist/src/domain/interfaces/route-manager.interface.js +2 -0
  109. package/dist/src/domain/interfaces/route-manager.interface.js.map +1 -0
  110. package/dist/src/domain/interfaces.d.ts +239 -0
  111. package/dist/src/domain/interfaces.d.ts.map +1 -0
  112. package/dist/src/domain/interfaces.js +2 -0
  113. package/dist/src/domain/interfaces.js.map +1 -0
  114. package/dist/src/domain/services/endpoint-filter.service.d.ts +52 -0
  115. package/dist/src/domain/services/endpoint-filter.service.d.ts.map +1 -0
  116. package/dist/src/domain/services/endpoint-filter.service.js +150 -0
  117. package/dist/src/domain/services/endpoint-filter.service.js.map +1 -0
  118. package/dist/src/domain/services/index.d.ts +7 -0
  119. package/dist/src/domain/services/index.d.ts.map +1 -0
  120. package/dist/src/domain/services/index.js +7 -0
  121. package/dist/src/domain/services/index.js.map +1 -0
  122. package/dist/src/domain/services/openapi-converter.service.d.ts +15 -0
  123. package/dist/src/domain/services/openapi-converter.service.d.ts.map +1 -0
  124. package/dist/src/domain/services/openapi-converter.service.js +74 -0
  125. package/dist/src/domain/services/openapi-converter.service.js.map +1 -0
  126. package/dist/src/domain/services/route-matcher.service.d.ts +38 -0
  127. package/dist/src/domain/services/route-matcher.service.d.ts.map +1 -0
  128. package/dist/src/domain/services/route-matcher.service.js +61 -0
  129. package/dist/src/domain/services/route-matcher.service.js.map +1 -0
  130. package/dist/src/generators/mock-generator.d.ts +2 -1
  131. package/dist/src/generators/mock-generator.d.ts.map +1 -1
  132. package/dist/src/generators/mock-generator.js +13 -8
  133. package/dist/src/generators/mock-generator.js.map +1 -1
  134. package/dist/src/generators/templates/type-template.d.ts +2 -1
  135. package/dist/src/generators/templates/type-template.d.ts.map +1 -1
  136. package/dist/src/generators/templates/type-template.js +72 -48
  137. package/dist/src/generators/templates/type-template.js.map +1 -1
  138. package/dist/src/generators/type-generator.d.ts +2 -1
  139. package/dist/src/generators/type-generator.d.ts.map +1 -1
  140. package/dist/src/generators/type-generator.js +1 -1
  141. package/dist/src/generators/type-generator.js.map +1 -1
  142. package/dist/src/index.d.ts +1 -1
  143. package/dist/src/index.d.ts.map +1 -1
  144. package/dist/src/index.js +1 -1
  145. package/dist/src/index.js.map +1 -1
  146. package/dist/src/infrastructure/apifox/apifox-client.impl.d.ts +22 -0
  147. package/dist/src/infrastructure/apifox/apifox-client.impl.d.ts.map +1 -0
  148. package/dist/src/infrastructure/apifox/apifox-client.impl.js +135 -0
  149. package/dist/src/infrastructure/apifox/apifox-client.impl.js.map +1 -0
  150. package/dist/src/infrastructure/file-system/file-system.impl.d.ts +15 -0
  151. package/dist/src/infrastructure/file-system/file-system.impl.d.ts.map +1 -0
  152. package/dist/src/infrastructure/file-system/file-system.impl.js +45 -0
  153. package/dist/src/infrastructure/file-system/file-system.impl.js.map +1 -0
  154. package/dist/src/infrastructure/http/axios-client.impl.d.ts +19 -0
  155. package/dist/src/infrastructure/http/axios-client.impl.d.ts.map +1 -0
  156. package/dist/src/infrastructure/http/axios-client.impl.js +59 -0
  157. package/dist/src/infrastructure/http/axios-client.impl.js.map +1 -0
  158. package/dist/src/infrastructure/logger/console-logger.impl.d.ts +15 -0
  159. package/dist/src/infrastructure/logger/console-logger.impl.d.ts.map +1 -0
  160. package/dist/src/infrastructure/logger/console-logger.impl.js +30 -0
  161. package/dist/src/infrastructure/logger/console-logger.impl.js.map +1 -0
  162. package/dist/src/infrastructure/route-manager/route-manager.impl.d.ts +14 -0
  163. package/dist/src/infrastructure/route-manager/route-manager.impl.d.ts.map +1 -0
  164. package/dist/src/infrastructure/route-manager/route-manager.impl.js +25 -0
  165. package/dist/src/infrastructure/route-manager/route-manager.impl.js.map +1 -0
  166. package/dist/src/infrastructure/server/hot-reload.d.ts +8 -0
  167. package/dist/src/infrastructure/server/hot-reload.d.ts.map +1 -0
  168. package/dist/src/infrastructure/server/hot-reload.js +132 -0
  169. package/dist/src/infrastructure/server/hot-reload.js.map +1 -0
  170. package/dist/src/infrastructure/server/remote-proxy.d.ts +22 -0
  171. package/dist/src/infrastructure/server/remote-proxy.d.ts.map +1 -0
  172. package/dist/src/infrastructure/server/remote-proxy.js +82 -0
  173. package/dist/src/infrastructure/server/remote-proxy.js.map +1 -0
  174. package/dist/src/infrastructure/server/route-loader.d.ts +18 -0
  175. package/dist/src/infrastructure/server/route-loader.d.ts.map +1 -0
  176. package/dist/src/infrastructure/server/route-loader.js +256 -0
  177. package/dist/src/infrastructure/server/route-loader.js.map +1 -0
  178. package/dist/src/presentation/http/express-server.d.ts +8 -0
  179. package/dist/src/presentation/http/express-server.d.ts.map +1 -0
  180. package/dist/src/presentation/http/express-server.js +65 -0
  181. package/dist/src/presentation/http/express-server.js.map +1 -0
  182. package/dist/src/presentation/http/middleware/error-handler.middleware.d.ts +9 -0
  183. package/dist/src/presentation/http/middleware/error-handler.middleware.d.ts.map +1 -0
  184. package/dist/src/presentation/http/middleware/error-handler.middleware.js +31 -0
  185. package/dist/src/presentation/http/middleware/error-handler.middleware.js.map +1 -0
  186. package/dist/src/presentation/http/route-handler.d.ts +38 -0
  187. package/dist/src/presentation/http/route-handler.d.ts.map +1 -0
  188. package/dist/src/presentation/http/route-handler.js +237 -0
  189. package/dist/src/presentation/http/route-handler.js.map +1 -0
  190. package/dist/src/presentation/http/validation.d.ts +25 -0
  191. package/dist/src/presentation/http/validation.d.ts.map +1 -0
  192. package/dist/src/presentation/http/validation.js +131 -0
  193. package/dist/src/presentation/http/validation.js.map +1 -0
  194. package/dist/src/scripts/cli.js +1 -1
  195. package/dist/src/scripts/cli.js.map +1 -1
  196. package/dist/src/scripts/generate-mock.js +15 -35
  197. package/dist/src/scripts/generate-mock.js.map +1 -1
  198. package/dist/src/scripts/serve-mock.js +9 -87
  199. package/dist/src/scripts/serve-mock.js.map +1 -1
  200. package/dist/src/server/express-server.d.ts +2 -2
  201. package/dist/src/server/express-server.d.ts.map +1 -1
  202. package/dist/src/server/express-server.js +16 -1
  203. package/dist/src/server/express-server.js.map +1 -1
  204. package/dist/src/server/hot-reload.d.ts +2 -2
  205. package/dist/src/server/hot-reload.d.ts.map +1 -1
  206. package/dist/src/server/hot-reload.js.map +1 -1
  207. package/dist/src/server/remote-proxy.d.ts +2 -2
  208. package/dist/src/server/remote-proxy.d.ts.map +1 -1
  209. package/dist/src/server/remote-proxy.js +13 -1
  210. package/dist/src/server/remote-proxy.js.map +1 -1
  211. package/dist/src/server/route-handler.d.ts +5 -3
  212. package/dist/src/server/route-handler.d.ts.map +1 -1
  213. package/dist/src/server/route-handler.js +15 -9
  214. package/dist/src/server/route-handler.js.map +1 -1
  215. package/dist/src/server/route-matcher.d.ts.map +1 -1
  216. package/dist/src/server/route-matcher.js +3 -1
  217. package/dist/src/server/route-matcher.js.map +1 -1
  218. package/dist/src/server/validation.d.ts +20 -1
  219. package/dist/src/server/validation.d.ts.map +1 -1
  220. package/dist/src/server/validation.js +25 -13
  221. package/dist/src/server/validation.js.map +1 -1
  222. package/dist/src/types/index.d.ts +21 -6
  223. package/dist/src/types/index.d.ts.map +1 -1
  224. package/dist/src/types/mock/list.d.ts +13 -0
  225. package/dist/src/types/mock/list.d.ts.map +1 -0
  226. package/dist/src/types/mock/list.js +4 -0
  227. package/dist/src/types/mock/list.js.map +1 -0
  228. package/dist/src/types/mock/v1/auth/login/username.d.ts +1 -1
  229. package/dist/src/types/mock/v1/auth/login/username.d.ts.map +1 -1
  230. package/dist/src/types/mock/v1/dict/data/default.d.ts +25 -0
  231. package/dist/src/types/mock/v1/dict/data/default.d.ts.map +1 -0
  232. package/dist/src/types/mock/v1/dict/data/default.js +4 -0
  233. package/dist/src/types/mock/v1/dict/data/default.js.map +1 -0
  234. package/dist/src/types/mock/v1/dict/data/order.d.ts +25 -0
  235. package/dist/src/types/mock/v1/dict/data/order.d.ts.map +1 -0
  236. package/dist/src/types/mock/v1/dict/data/order.js +4 -0
  237. package/dist/src/types/mock/v1/dict/data/order.js.map +1 -0
  238. package/dist/src/types/mock/v1/dict/data/pagedList.d.ts +62 -0
  239. package/dist/src/types/mock/v1/dict/data/pagedList.d.ts.map +1 -0
  240. package/dist/src/types/mock/v1/dict/data/pagedList.js +4 -0
  241. package/dist/src/types/mock/v1/dict/data/pagedList.js.map +1 -0
  242. package/dist/src/types/mock/v1/dict/data.d.ts +82 -0
  243. package/dist/src/types/mock/v1/dict/data.d.ts.map +1 -0
  244. package/dist/src/types/mock/v1/dict/data.js +4 -0
  245. package/dist/src/types/mock/v1/dict/data.js.map +1 -0
  246. package/dist/src/types/mock/v1/dict/pagedList.d.ts +54 -0
  247. package/dist/src/types/mock/v1/dict/pagedList.d.ts.map +1 -0
  248. package/dist/src/types/mock/v1/dict/pagedList.js +4 -0
  249. package/dist/src/types/mock/v1/dict/pagedList.js.map +1 -0
  250. package/dist/src/types/mock/v1/dict.d.ts +80 -0
  251. package/dist/src/types/mock/v1/dict.d.ts.map +1 -0
  252. package/dist/src/types/mock/v1/dict.js +4 -0
  253. package/dist/src/types/mock/v1/dict.js.map +1 -0
  254. package/dist/src/types/mock/v1/file/download.d.ts +23 -0
  255. package/dist/src/types/mock/v1/file/download.d.ts.map +1 -0
  256. package/dist/src/types/mock/v1/file/download.js +4 -0
  257. package/dist/src/types/mock/v1/file/download.js.map +1 -0
  258. package/dist/src/types/mock/v1/file/pagedList.d.ts +62 -0
  259. package/dist/src/types/mock/v1/file/pagedList.d.ts.map +1 -0
  260. package/dist/src/types/mock/v1/file/pagedList.js +4 -0
  261. package/dist/src/types/mock/v1/file/pagedList.js.map +1 -0
  262. package/dist/src/types/mock/v1/file.d.ts +56 -0
  263. package/dist/src/types/mock/v1/file.d.ts.map +1 -0
  264. package/dist/src/types/mock/v1/file.js +4 -0
  265. package/dist/src/types/mock/v1/file.js.map +1 -0
  266. package/dist/src/types/mock/v1/internal/getToken.d.ts +32 -0
  267. package/dist/src/types/mock/v1/internal/getToken.d.ts.map +1 -0
  268. package/dist/src/types/mock/v1/internal/getToken.js +4 -0
  269. package/dist/src/types/mock/v1/internal/getToken.js.map +1 -0
  270. package/dist/src/types/mock/v1/internal/user/unlock.d.ts +23 -0
  271. package/dist/src/types/mock/v1/internal/user/unlock.d.ts.map +1 -0
  272. package/dist/src/types/mock/v1/internal/user/unlock.js +4 -0
  273. package/dist/src/types/mock/v1/internal/user/unlock.js.map +1 -0
  274. package/dist/src/types/mock/v1/role/disabled.d.ts +25 -0
  275. package/dist/src/types/mock/v1/role/disabled.d.ts.map +1 -0
  276. package/dist/src/types/mock/v1/role/disabled.js +4 -0
  277. package/dist/src/types/mock/v1/role/disabled.js.map +1 -0
  278. package/dist/src/types/mock/v1/role/pagedList.d.ts +2 -2
  279. package/dist/src/types/mock/v1/role/pagedList.d.ts.map +1 -1
  280. package/dist/src/types/mock/v1/role.d.ts +31 -29
  281. package/dist/src/types/mock/v1/role.d.ts.map +1 -1
  282. package/dist/src/types/mock/v1/role.js.map +1 -1
  283. package/dist/src/types/mock/v1/tenant/permission/tree.d.ts +2 -2
  284. package/dist/src/types/mock/v1/tenant/permission/tree.d.ts.map +1 -1
  285. package/dist/src/types/mock/v1/tenant/user/link.d.ts +23 -0
  286. package/dist/src/types/mock/v1/tenant/user/link.d.ts.map +1 -0
  287. package/dist/src/types/mock/v1/tenant/user/link.js +4 -0
  288. package/dist/src/types/mock/v1/tenant/user/link.js.map +1 -0
  289. package/dist/src/types/mock/v1/tenant/user/pagedList.d.ts +8 -0
  290. package/dist/src/types/mock/v1/tenant/user/pagedList.d.ts.map +1 -1
  291. package/dist/src/types/mock/v1/tenant/user/pagedList.js.map +1 -1
  292. package/dist/src/types/mock/v1/tenant/user.d.ts +19 -0
  293. package/dist/src/types/mock/v1/tenant/user.d.ts.map +1 -1
  294. package/dist/src/types/mock/v1/tenant/user.js.map +1 -1
  295. package/dist/src/types/mock/v1/user/exportData.d.ts +25 -0
  296. package/dist/src/types/mock/v1/user/exportData.d.ts.map +1 -0
  297. package/dist/src/types/mock/v1/user/exportData.js +4 -0
  298. package/dist/src/types/mock/v1/user/exportData.js.map +1 -0
  299. package/dist/src/types/mock/v1/user/importData.d.ts +13 -0
  300. package/dist/src/types/mock/v1/user/importData.d.ts.map +1 -0
  301. package/dist/src/types/mock/v1/user/importData.js +4 -0
  302. package/dist/src/types/mock/v1/user/importData.js.map +1 -0
  303. package/dist/src/types/mock/v1/user/info.d.ts +0 -30
  304. package/dist/src/types/mock/v1/user/info.d.ts.map +1 -1
  305. package/dist/src/types/mock/v1/user/info.js.map +1 -1
  306. package/dist/src/types/mock/v1/user/permission/tree.d.ts +4 -2
  307. package/dist/src/types/mock/v1/user/permission/tree.d.ts.map +1 -1
  308. package/dist/src/types/mock/v1/user/permission/tree.js.map +1 -1
  309. package/dist/src/types/mock/v1/user.d.ts +0 -106
  310. package/dist/src/types/mock/v1/user.d.ts.map +1 -1
  311. package/dist/src/types/mock/v1/user.js +1 -1
  312. package/dist/src/types/mock/v1/user.js.map +1 -1
  313. package/dist/src/types/openapi.d.ts +426 -0
  314. package/dist/src/types/openapi.d.ts.map +1 -0
  315. package/dist/src/types/openapi.js +23 -0
  316. package/dist/src/types/openapi.js.map +1 -0
  317. package/dist/src/utils/block-updater.d.ts.map +1 -1
  318. package/dist/src/utils/block-updater.js +5 -4
  319. package/dist/src/utils/block-updater.js.map +1 -1
  320. package/dist/src/utils/code-formatter.d.ts.map +1 -1
  321. package/dist/src/utils/code-formatter.js +2 -0
  322. package/dist/src/utils/code-formatter.js.map +1 -1
  323. package/dist/src/utils/file-helper.d.ts +7 -7
  324. package/dist/src/utils/file-helper.d.ts.map +1 -1
  325. package/dist/src/utils/file-helper.js +11 -8
  326. package/dist/src/utils/file-helper.js.map +1 -1
  327. package/dist/src/utils/file-operations.d.ts +1 -1
  328. package/dist/src/utils/file-operations.d.ts.map +1 -1
  329. package/dist/src/utils/file-operations.js.map +1 -1
  330. package/dist/src/utils/file-utils.d.ts +3 -2
  331. package/dist/src/utils/file-utils.d.ts.map +1 -1
  332. package/dist/src/utils/file-utils.js +1 -1
  333. package/dist/src/utils/file-utils.js.map +1 -1
  334. package/dist/src/utils/path-utils.js.map +1 -1
  335. package/dist/src/utils/type-mapping.d.ts +9 -2
  336. package/dist/src/utils/type-mapping.d.ts.map +1 -1
  337. package/dist/src/utils/type-mapping.js +42 -35
  338. package/dist/src/utils/type-mapping.js.map +1 -1
  339. package/package.json +22 -4
@@ -1,108 +1,14 @@
1
- import axios from 'axios';
2
- import * as https from 'https';
3
- import { logger } from '../utils/logger.js';
4
- import { saveOpenAPIData } from '../utils/file-utils.js';
1
+ import { setupContainer } from './container-setup.js';
2
+ import { SERVICE_KEYS } from './service-keys.js';
5
3
  /**
6
4
  * 从 Apifox 拉取 OpenAPI 数据
5
+ *
6
+ * @deprecated 此函数已废弃,请使用 IApifoxClient 接口
7
+ * 此函数现在内部调用新的 ApifoxClientImpl 实现
7
8
  */
8
9
  export async function fetchOpenAPIFromApifox(config) {
9
- logger.info('从 Apifox 拉取 API 数据...');
10
- try {
11
- const baseUrl = config.apiUrl || 'https://api.apifox.com';
12
- const apiUrl = `${baseUrl}/v1/projects/${config.projectId}/export-openapi?locale=zh-CN`;
13
- // 构建请求体
14
- const requestBody = buildRequestBody(config);
15
- const response = await axios.post(apiUrl, requestBody, {
16
- headers: {
17
- Authorization: `Bearer ${config.token}`,
18
- 'Content-Type': 'application/json',
19
- 'X-Apifox-Api-Version': '2024-03-28'
20
- },
21
- httpsAgent: new https.Agent({
22
- rejectUnauthorized: false
23
- }),
24
- timeout: 30000
25
- });
26
- logger.success(`✓ 从 Apifox 拉取成功(${Object.keys(response.data.paths || {}).length} 个接口)`);
27
- // 保存 OpenAPI 数据到日志文件(仅在开发环境)
28
- saveOpenAPIData(response.data, config.projectId);
29
- return response.data;
30
- }
31
- catch (error) {
32
- handleApifoxError(error);
33
- throw error;
34
- }
35
- }
36
- /**
37
- * 构建请求体
38
- */
39
- function buildRequestBody(config) {
40
- const requestBody = {
41
- oasVersion: '3.0',
42
- exportFormat: 'JSON'
43
- };
44
- // 添加分支配置(默认为 main)
45
- if (config.branchId) {
46
- requestBody.branchId = config.branchId;
47
- }
48
- // 应用过滤配置
49
- if (config.apiFilter) {
50
- if (config.apiFilter.scope) {
51
- const scope = {
52
- // 写死为 ALL,导出所有接口,通过其他过滤条件进行筛选
53
- type: 'ALL'
54
- };
55
- if (config.apiFilter.scope.includedByTags &&
56
- config.apiFilter.scope.includedByTags.length > 0) {
57
- scope.includedByTags = config.apiFilter.scope.includedByTags;
58
- }
59
- if (config.apiFilter.scope.folderPaths && config.apiFilter.scope.folderPaths.length > 0) {
60
- scope.folderPaths = config.apiFilter.scope.folderPaths;
61
- }
62
- requestBody.scope = scope;
63
- }
64
- // 始终启用 Apifox 扩展属性和文件夹标签
65
- requestBody.options = {
66
- includeApifoxExtensionProperties: true,
67
- addFoldersToTags: true
68
- };
69
- }
70
- return requestBody;
71
- }
72
- /**
73
- * 处理 Apifox API 错误
74
- */
75
- function handleApifoxError(error) {
76
- // 网络连接错误处理
77
- if (axios.isAxiosError(error)) {
78
- if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
79
- logger.errorSimple('网络连接失败,无法连接到 api.apifox.com');
80
- logger.info('请检查网络连接或代理设置');
81
- return;
82
- }
83
- if (error.response) {
84
- const errorData = error.response.data;
85
- if (error.response.status === 403 && errorData?.errorCode === '403012') {
86
- logger.errorSimple('权限不足: 当前 Access Token 没有「项目维护者」权限');
87
- logger.info('请在 Apifox 中更新 Token 权限');
88
- }
89
- else if (error.response.status === 401) {
90
- logger.errorSimple('认证失败: Access Token 无效或已过期');
91
- logger.info('请检查 apifox.config.json 中的 token 配置');
92
- }
93
- else {
94
- logger.errorSimple(`API 请求失败 (HTTP ${error.response.status})`);
95
- if (errorData?.message) {
96
- logger.info(`错误详情: ${errorData.message}`);
97
- }
98
- }
99
- return;
100
- }
101
- }
102
- // 其他类型的错误
103
- logger.errorSimple('从 Apifox 拉取 API 数据失败');
104
- if (error instanceof Error && !axios.isAxiosError(error)) {
105
- logger.info(error.message);
106
- }
10
+ const container = setupContainer();
11
+ const client = container.resolve(SERVICE_KEYS.APIFOX_CLIENT);
12
+ return await client.fetchOpenAPI(config);
107
13
  }
108
14
  //# sourceMappingURL=apifox-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAoB;IAC/D,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAgB,YAAY,CAAC,aAAa,CAAC,CAAC;IAC5E,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAUxD"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAoBxD"}
@@ -1,16 +1,28 @@
1
1
  import path from 'path';
2
2
  import { fileHelper } from '../utils/file-helper.js';
3
- import { logger } from '../utils/logger.js';
3
+ import { ConfigError } from './errors.js';
4
+ import { ERROR_CODES } from './error-codes.js';
4
5
  /**
5
6
  * 加载配置文件
6
7
  */
7
8
  export async function loadConfig() {
8
9
  const configPath = path.join(fileHelper.getProjectRoot(), 'apifox.config.json');
9
10
  if (!(await fileHelper.exists(configPath))) {
10
- logger.error('未找到 apifox.config.json 配置文件');
11
- logger.info('请在项目根目录创建配置文件');
12
- process.exit(1);
11
+ throw new ConfigError('未找到 apifox.config.json 配置文件', {
12
+ code: ERROR_CODES.CONFIG_FILE_NOT_FOUND,
13
+ path: configPath,
14
+ suggestion: '请在项目根目录创建配置文件'
15
+ });
16
+ }
17
+ try {
18
+ return await fileHelper.readJson(configPath);
19
+ }
20
+ catch (error) {
21
+ throw new ConfigError('配置文件格式错误', {
22
+ code: ERROR_CODES.CONFIG_INVALID_FORMAT,
23
+ path: configPath,
24
+ originalError: error instanceof Error ? error.message : '未知错误'
25
+ }, error instanceof Error ? error : undefined);
13
26
  }
14
- return await fileHelper.readJson(configPath);
15
27
  }
16
28
  //# sourceMappingURL=config-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/core/config-loader.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;AAG5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEhF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,UAAU,CAAC,QAAQ,CAAe,UAAU,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/core/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAEhF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE;YACnD,IAAI,EAAE,WAAW,CAAC,qBAAqB;YACvC,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,eAAe;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,QAAQ,CAAe,UAAU,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE;YAChC,IAAI,EAAE,WAAW,CAAC,qBAAqB;YACvC,IAAI,EAAE,UAAU;YAChB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;SAC/D,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Container } from './container.js';
2
+ /**
3
+ * 设置依赖注入容器
4
+ * 注册所有服务和用例
5
+ *
6
+ * 所有服务通过接口定义,实现位于 infrastructure 层
7
+ */
8
+ export declare function setupContainer(): Container;
9
+ //# sourceMappingURL=container-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-setup.d.ts","sourceRoot":"","sources":["../../../src/core/container-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgB3C;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,SAAS,CA2G1C"}
@@ -0,0 +1,64 @@
1
+ import { Container } from './container.js';
2
+ import { SERVICE_KEYS } from './service-keys.js';
3
+ import { EndpointFilterService } from '../domain/services/endpoint-filter.service.js';
4
+ import { RouteMatcherService } from '../domain/services/route-matcher.service.js';
5
+ import { OpenAPIConverterService } from '../domain/services/openapi-converter.service.js';
6
+ import { FetchApifoxDataUseCase } from '../application/use-cases/fetch-apifox-data.use-case.js';
7
+ import { GenerateMockUseCase } from '../application/use-cases/generate-mock.use-case.js';
8
+ import { GenerateTypesUseCase } from '../application/use-cases/generate-types.use-case.js';
9
+ import { ServeMockUseCase } from '../application/use-cases/serve-mock.use-case.js';
10
+ import { ConsoleLoggerImpl } from '../infrastructure/logger/console-logger.impl.js';
11
+ import { FileSystemImpl } from '../infrastructure/file-system/file-system.impl.js';
12
+ import { AxiosHttpClientImpl } from '../infrastructure/http/axios-client.impl.js';
13
+ import { ApifoxClientImpl } from '../infrastructure/apifox/apifox-client.impl.js';
14
+ import { RouteManagerImpl } from '../infrastructure/route-manager/route-manager.impl.js';
15
+ /**
16
+ * 设置依赖注入容器
17
+ * 注册所有服务和用例
18
+ *
19
+ * 所有服务通过接口定义,实现位于 infrastructure 层
20
+ */
21
+ export function setupContainer() {
22
+ const container = new Container();
23
+ // 注册基础设施实现
24
+ container.register(SERVICE_KEYS.LOGGER, () => new ConsoleLoggerImpl(), true);
25
+ container.register(SERVICE_KEYS.FILE_SYSTEM, () => new FileSystemImpl(), true);
26
+ container.register(SERVICE_KEYS.HTTP_CLIENT, () => new AxiosHttpClientImpl(), true);
27
+ container.register(SERVICE_KEYS.APIFOX_CLIENT, (c) => {
28
+ const httpClient = c.resolve(SERVICE_KEYS.HTTP_CLIENT);
29
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
30
+ return new ApifoxClientImpl(httpClient, logger);
31
+ }, true);
32
+ container.register(SERVICE_KEYS.ROUTE_MANAGER, () => new RouteManagerImpl(), true);
33
+ // 注册业务服务
34
+ container.register(SERVICE_KEYS.ENDPOINT_FILTER, (c) => {
35
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
36
+ return new EndpointFilterService(logger);
37
+ }, true);
38
+ container.register(SERVICE_KEYS.ROUTE_MATCHER, () => new RouteMatcherService(), true);
39
+ container.register(SERVICE_KEYS.OPENAPI_CONVERTER, () => new OpenAPIConverterService(), true);
40
+ // 注册用例
41
+ container.register(SERVICE_KEYS.FETCH_APIFOX_DATA_USE_CASE, (c) => {
42
+ const apifoxClient = c.resolve(SERVICE_KEYS.APIFOX_CLIENT);
43
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
44
+ return new FetchApifoxDataUseCase(apifoxClient, logger);
45
+ });
46
+ container.register(SERVICE_KEYS.GENERATE_MOCK_USE_CASE, (c) => {
47
+ const endpointFilter = c.resolve(SERVICE_KEYS.ENDPOINT_FILTER);
48
+ const openapiConverter = c.resolve(SERVICE_KEYS.OPENAPI_CONVERTER);
49
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
50
+ return new GenerateMockUseCase(endpointFilter, openapiConverter, logger);
51
+ });
52
+ container.register(SERVICE_KEYS.GENERATE_TYPES_USE_CASE, (c) => {
53
+ const endpointFilter = c.resolve(SERVICE_KEYS.ENDPOINT_FILTER);
54
+ const openapiConverter = c.resolve(SERVICE_KEYS.OPENAPI_CONVERTER);
55
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
56
+ return new GenerateTypesUseCase(endpointFilter, openapiConverter, logger);
57
+ });
58
+ container.register(SERVICE_KEYS.SERVE_MOCK_USE_CASE, (c) => {
59
+ const logger = c.resolve(SERVICE_KEYS.LOGGER);
60
+ return new ServeMockUseCase(logger);
61
+ });
62
+ return container;
63
+ }
64
+ //# sourceMappingURL=container-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-setup.js","sourceRoot":"","sources":["../../../src/core/container-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uDAAuD,CAAC;AAEzF;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAElC,WAAW;IACX,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,MAAM,EACnB,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE,EAC7B,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,WAAW,EACxB,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE,EAC1B,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,WAAW,EACxB,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,EAC/B,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,aAAa,EAC1B,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAc,YAAY,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC,EACD,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,aAAa,EAC1B,GAAG,EAAE,CAAC,IAAI,gBAAgB,EAAE,EAC5B,IAAI,CACL,CAAC;IAEF,SAAS;IACT,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,eAAe,EAC5B,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC,EACD,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,aAAa,EAC1B,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,EAC/B,IAAI,CACL,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,iBAAiB,EAC9B,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE,EACnC,IAAI,CACL,CAAC;IAEF,OAAO;IACP,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,0BAA0B,EACvC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAgB,YAAY,CAAC,aAAa,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,sBAAsB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC,CACF,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,sBAAsB,EACnC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAC9B,YAAY,CAAC,eAAe,CAC7B,CAAC;QACF,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAChC,YAAY,CAAC,iBAAiB,CAC/B,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,mBAAmB,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,uBAAuB,EACpC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,cAAc,GAAG,CAAC,CAAC,OAAO,CAC9B,YAAY,CAAC,eAAe,CAC7B,CAAC;QACF,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAChC,YAAY,CAAC,iBAAiB,CAC/B,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,oBAAoB,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC,CACF,CAAC;IAEF,SAAS,CAAC,QAAQ,CAChB,YAAY,CAAC,mBAAmB,EAChC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAU,YAAY,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * 依赖注入容器
3
+ * 支持服务注册、解析和单例模式
4
+ */
5
+ type FactoryFunction<T = any> = (container: Container) => T;
6
+ /**
7
+ * 依赖注入容器
8
+ */
9
+ export declare class Container {
10
+ private services;
11
+ private singletons;
12
+ /**
13
+ * 注册服务
14
+ * @param key 服务标识符
15
+ * @param factory 工厂函数
16
+ * @param singleton 是否为单例,默认为 false
17
+ */
18
+ register<T>(key: string, factory: FactoryFunction<T>, singleton?: boolean): void;
19
+ /**
20
+ * 解析服务
21
+ * @param key 服务标识符
22
+ * @returns 服务实例
23
+ */
24
+ resolve<T>(key: string): T;
25
+ /**
26
+ * 检查服务是否已注册
27
+ * @param key 服务标识符
28
+ * @returns 是否已注册
29
+ */
30
+ has(key: string): boolean;
31
+ /**
32
+ * 清除所有服务(主要用于测试)
33
+ */
34
+ clear(): void;
35
+ /**
36
+ * 移除服务
37
+ * @param key 服务标识符
38
+ */
39
+ remove(key: string): void;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/core/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAE5D;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,UAAU,CAA0B;IAE5C;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,EACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAC3B,SAAS,GAAE,OAAe,GACzB,IAAI;IAOP;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAqB1B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAI1B"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * 依赖注入容器
3
+ * 支持服务注册、解析和单例模式
4
+ */
5
+ /**
6
+ * 依赖注入容器
7
+ */
8
+ export class Container {
9
+ constructor() {
10
+ this.services = new Map();
11
+ this.singletons = new Map();
12
+ }
13
+ /**
14
+ * 注册服务
15
+ * @param key 服务标识符
16
+ * @param factory 工厂函数
17
+ * @param singleton 是否为单例,默认为 false
18
+ */
19
+ register(key, factory, singleton = false) {
20
+ if (singleton) {
21
+ this.singletons.set(key, null);
22
+ }
23
+ this.services.set(key, factory);
24
+ }
25
+ /**
26
+ * 解析服务
27
+ * @param key 服务标识符
28
+ * @returns 服务实例
29
+ */
30
+ resolve(key) {
31
+ // 如果是单例且已创建,直接返回
32
+ if (this.singletons.has(key) && this.singletons.get(key) !== null) {
33
+ return this.singletons.get(key);
34
+ }
35
+ const factory = this.services.get(key);
36
+ if (!factory) {
37
+ throw new Error(`Service '${key}' not found. Make sure it's registered.`);
38
+ }
39
+ const instance = factory(this);
40
+ // 如果是单例,缓存实例
41
+ if (this.singletons.has(key)) {
42
+ this.singletons.set(key, instance);
43
+ }
44
+ return instance;
45
+ }
46
+ /**
47
+ * 检查服务是否已注册
48
+ * @param key 服务标识符
49
+ * @returns 是否已注册
50
+ */
51
+ has(key) {
52
+ return this.services.has(key);
53
+ }
54
+ /**
55
+ * 清除所有服务(主要用于测试)
56
+ */
57
+ clear() {
58
+ this.services.clear();
59
+ this.singletons.clear();
60
+ }
61
+ /**
62
+ * 移除服务
63
+ * @param key 服务标识符
64
+ */
65
+ remove(key) {
66
+ this.services.delete(key);
67
+ this.singletons.delete(key);
68
+ }
69
+ }
70
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/core/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,OAAO,SAAS;IAAtB;QACU,aAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC9C,eAAU,GAAG,IAAI,GAAG,EAAe,CAAC;IAsE9C,CAAC;IApEC;;;;;OAKG;IACH,QAAQ,CACN,GAAW,EACX,OAA2B,EAC3B,YAAqB,KAAK;QAE1B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAI,GAAW;QACpB,iBAAiB;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QACvC,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,yCAAyC,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAM,CAAC;QAEpC,aAAa;QACb,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -1,12 +1,22 @@
1
1
  import type { ApiEndpoint, ApiFilter } from '../types/index.js';
2
+ /**
3
+ * 中文状态到英文状态的映射
4
+ */
5
+ export declare const STATUS_MAPPING: Record<string, string>;
2
6
  /**
3
7
  * 路径模式匹配(支持通配符 * 和 **)
4
8
  * * 匹配单层路径
5
9
  * ** 匹配多层路径
10
+ *
11
+ * 注意:这是一个简单的工具函数,保留实现以保持兼容性
12
+ * 新代码中可以直接使用此函数,或使用 EndpointFilterService 中的实现
6
13
  */
7
14
  export declare function matchPath(path: string, pattern: string): boolean;
8
15
  /**
9
16
  * 根据筛选配置过滤 API 端点
17
+ *
18
+ * @deprecated 此函数已废弃,请使用 EndpointFilterService
19
+ * 此函数现在内部调用新的 EndpointFilterService 实现
10
20
  */
11
21
  export declare function filterEndpoints(endpoints: ApiEndpoint[], filter?: ApiFilter): ApiEndpoint[];
12
22
  //# sourceMappingURL=endpoint-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint-filter.d.ts","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAsBhE;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAUhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,EAAE,CAoG3F"}
1
+ {"version":3,"file":"endpoint-filter.d.ts","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQjD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQhE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,EAAE,CAY3F"}
@@ -1,8 +1,10 @@
1
- import { logger } from '../utils/logger.js';
1
+ import { setupContainer } from './container-setup.js';
2
+ import { SERVICE_KEYS } from './service-keys.js';
3
+ import { ApiEndpoint as ApiEndpointEntity } from '../domain/entities/api-endpoint.entity.js';
2
4
  /**
3
5
  * 中文状态到英文状态的映射
4
6
  */
5
- const STATUS_MAPPING = {
7
+ export const STATUS_MAPPING = {
6
8
  设计中: 'designing',
7
9
  开发中: 'developing',
8
10
  已完成: 'completed',
@@ -11,112 +13,37 @@ const STATUS_MAPPING = {
11
13
  测试中: 'testing',
12
14
  已发布: 'published'
13
15
  };
14
- /**
15
- * 转换状态值(支持中文到英文的映射)
16
- */
17
- function translateStatus(status) {
18
- return STATUS_MAPPING[status] || status;
19
- }
20
16
  /**
21
17
  * 路径模式匹配(支持通配符 * 和 **)
22
18
  * * 匹配单层路径
23
19
  * ** 匹配多层路径
20
+ *
21
+ * 注意:这是一个简单的工具函数,保留实现以保持兼容性
22
+ * 新代码中可以直接使用此函数,或使用 EndpointFilterService 中的实现
24
23
  */
25
24
  export function matchPath(path, pattern) {
26
- // 将模式转换为正则表达式
27
25
  const regexPattern = pattern
28
- .replace(/\*\*/g, '<<<DOUBLE_STAR>>>') // 临时替换 **
29
- .replace(/\*/g, '[^/]+') // * 匹配单层路径(不包含 /)
30
- .replace(/<<<DOUBLE_STAR>>>/g, '.*') // ** 匹配多层路径(包含 /)
31
- .replace(/\//g, '\\/'); // 转义斜杠
26
+ .replace(/\*\*/g, '<<<DOUBLE_STAR>>>')
27
+ .replace(/\*/g, '[^/]+')
28
+ .replace(/<<<DOUBLE_STAR>>>/g, '.*')
29
+ .replace(/\//g, '\\/');
32
30
  const regex = new RegExp(`^${regexPattern}$`);
33
31
  return regex.test(path);
34
32
  }
35
33
  /**
36
34
  * 根据筛选配置过滤 API 端点
35
+ *
36
+ * @deprecated 此函数已废弃,请使用 EndpointFilterService
37
+ * 此函数现在内部调用新的 EndpointFilterService 实现
37
38
  */
38
39
  export function filterEndpoints(endpoints, filter) {
39
- if (!filter) {
40
- return endpoints;
41
- }
42
- return endpoints.filter(endpoint => {
43
- // 1. 检查 includePaths(如果配置了,必须匹配其中之一)
44
- if (filter.includePaths && filter.includePaths.length > 0) {
45
- const matched = filter.includePaths.some(pattern => matchPath(endpoint.path, pattern));
46
- if (!matched) {
47
- logger.debug(`[Filter] 路径不匹配 includePaths: ${endpoint.path}`);
48
- return false;
49
- }
50
- }
51
- // 2. 检查 excludePaths(如果匹配,则排除)
52
- if (filter.excludePaths && filter.excludePaths.length > 0) {
53
- const matched = filter.excludePaths.some(pattern => matchPath(endpoint.path, pattern));
54
- if (matched) {
55
- logger.debug(`[Filter] 路径匹配 excludePaths,已排除: ${endpoint.path}`);
56
- return false;
57
- }
58
- }
59
- // 3. 检查 excludeDeprecated(排除废弃接口,写死为 true)
60
- if (endpoint.deprecated) {
61
- logger.debug(`[Filter] 废弃接口已排除: ${endpoint.path}`);
62
- return false;
63
- }
64
- // 4. 检查 includeMethods(如果配置了,必须匹配)
65
- if (filter.includeMethods && filter.includeMethods.length > 0) {
66
- if (!filter.includeMethods.includes(endpoint.method.toUpperCase())) {
67
- logger.debug(`[Filter] 方法不匹配 includeMethods: ${endpoint.method}`);
68
- return false;
69
- }
70
- }
71
- // 5. 检查 excludeMethods(如果匹配,则排除)
72
- if (filter.excludeMethods && filter.excludeMethods.length > 0) {
73
- if (filter.excludeMethods.includes(endpoint.method.toUpperCase())) {
74
- logger.debug(`[Filter] 方法匹配 excludeMethods,已排除: ${endpoint.method}`);
75
- return false;
76
- }
77
- }
78
- // 6. 检查 includedByTags(基于接口状态过滤)
79
- if (filter.scope?.includedByTags && filter.scope.includedByTags.length > 0) {
80
- // 转换配置中的状态值(支持中文)
81
- const includedStatuses = filter.scope.includedByTags.map(translateStatus);
82
- if (!endpoint.status || !includedStatuses.includes(endpoint.status)) {
83
- logger.debug(`[Filter] 接口状态不匹配 includedByTags,已排除: ${endpoint.status} (期望: ${includedStatuses.join(', ')})`);
84
- return false;
85
- }
86
- }
87
- // 7. 检查 excludedByTags(基于接口状态过滤)
88
- if (filter.scope?.excludedByTags && filter.scope.excludedByTags.length > 0) {
89
- // 转换配置中的状态值(支持中文)
90
- const excludedStatuses = filter.scope.excludedByTags.map(translateStatus);
91
- if (endpoint.status && excludedStatuses.includes(endpoint.status)) {
92
- logger.debug(`[Filter] 接口状态匹配 excludedByTags,已排除: ${endpoint.status}`);
93
- return false;
94
- }
95
- }
96
- // 8. 检查 folderPaths(基于文件夹路径过滤,支持前缀匹配)
97
- if (filter.scope?.folderPaths && filter.scope.folderPaths.length > 0) {
98
- if (!endpoint.folderPath) {
99
- logger.debug(`[Filter] 接口缺少文件夹路径,已排除: ${endpoint.path}`);
100
- return false;
101
- }
102
- // 检查是否匹配任何一个文件夹路径(支持前缀匹配)
103
- const matched = filter.scope.folderPaths.some(folderPath => {
104
- // 精确匹配
105
- if (endpoint.folderPath === folderPath) {
106
- return true;
107
- }
108
- // 前缀匹配(子目录)
109
- if (endpoint.folderPath && endpoint.folderPath.startsWith(folderPath + '/')) {
110
- return true;
111
- }
112
- return false;
113
- });
114
- if (!matched) {
115
- logger.debug(`[Filter] 文件夹路径不匹配,已排除: ${endpoint.folderPath} (期望: ${filter.scope.folderPaths.join(', ')})`);
116
- return false;
117
- }
118
- }
119
- return true;
120
- });
40
+ const container = setupContainer();
41
+ const service = container.resolve(SERVICE_KEYS.ENDPOINT_FILTER);
42
+ // 转换为实体
43
+ const endpointEntities = endpoints.map(e => new ApiEndpointEntity(e));
44
+ // 使用服务过滤
45
+ const filteredEntities = service.filter(endpointEntities, filter);
46
+ // 转换回普通对象
47
+ return filteredEntities.map(e => e.toJSON());
121
48
  }
122
49
  //# sourceMappingURL=endpoint-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint-filter.js","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"endpoint-filter.js","sourceRoot":"","sources":["../../../src/core/endpoint-filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE7F;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IACrD,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACrC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;SACnC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB,EAAE,MAAkB;IAC1E,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAwB,YAAY,CAAC,eAAe,CAAC,CAAC;IAEvF,QAAQ;IACR,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,SAAS;IACT,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAElE,UAAU;IACV,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 错误码常量定义
3
+ */
4
+ export declare const ERROR_CODES: {
5
+ readonly CONFIG_FILE_NOT_FOUND: "CONFIG_FILE_NOT_FOUND";
6
+ readonly CONFIG_INVALID_FORMAT: "CONFIG_INVALID_FORMAT";
7
+ readonly CONFIG_MISSING_FIELD: "CONFIG_MISSING_FIELD";
8
+ readonly NETWORK_CONNECTION_FAILED: "NETWORK_CONNECTION_FAILED";
9
+ readonly NETWORK_TIMEOUT: "NETWORK_TIMEOUT";
10
+ readonly NETWORK_UNREACHABLE: "NETWORK_UNREACHABLE";
11
+ readonly APIFOX_API_AUTH_FAILED: "APIFOX_API_AUTH_FAILED";
12
+ readonly APIFOX_API_PERMISSION_DENIED: "APIFOX_API_PERMISSION_DENIED";
13
+ readonly APIFOX_API_REQUEST_FAILED: "APIFOX_API_REQUEST_FAILED";
14
+ readonly VALIDATION_PARAM_MISSING: "VALIDATION_PARAM_MISSING";
15
+ readonly VALIDATION_PARAM_TYPE_ERROR: "VALIDATION_PARAM_TYPE_ERROR";
16
+ readonly VALIDATION_SCHEMA_ERROR: "VALIDATION_SCHEMA_ERROR";
17
+ };
18
+ /**
19
+ * 错误码到 HTTP 状态码的映射
20
+ */
21
+ export declare const ERROR_TO_HTTP_STATUS: Record<string, number>;
22
+ //# sourceMappingURL=error-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../../src/core/error-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAoBd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKvD,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 错误码常量定义
3
+ */
4
+ export const ERROR_CODES = {
5
+ // 配置错误
6
+ CONFIG_FILE_NOT_FOUND: 'CONFIG_FILE_NOT_FOUND',
7
+ CONFIG_INVALID_FORMAT: 'CONFIG_INVALID_FORMAT',
8
+ CONFIG_MISSING_FIELD: 'CONFIG_MISSING_FIELD',
9
+ // 网络错误
10
+ NETWORK_CONNECTION_FAILED: 'NETWORK_CONNECTION_FAILED',
11
+ NETWORK_TIMEOUT: 'NETWORK_TIMEOUT',
12
+ NETWORK_UNREACHABLE: 'NETWORK_UNREACHABLE',
13
+ // Apifox API 错误
14
+ APIFOX_API_AUTH_FAILED: 'APIFOX_API_AUTH_FAILED',
15
+ APIFOX_API_PERMISSION_DENIED: 'APIFOX_API_PERMISSION_DENIED',
16
+ APIFOX_API_REQUEST_FAILED: 'APIFOX_API_REQUEST_FAILED',
17
+ // 验证错误
18
+ VALIDATION_PARAM_MISSING: 'VALIDATION_PARAM_MISSING',
19
+ VALIDATION_PARAM_TYPE_ERROR: 'VALIDATION_PARAM_TYPE_ERROR',
20
+ VALIDATION_SCHEMA_ERROR: 'VALIDATION_SCHEMA_ERROR',
21
+ };
22
+ /**
23
+ * 错误码到 HTTP 状态码的映射
24
+ */
25
+ export const ERROR_TO_HTTP_STATUS = {
26
+ CONFIG_ERROR: 500,
27
+ NETWORK_ERROR: 502,
28
+ APIFOX_API_ERROR: 502,
29
+ VALIDATION_ERROR: 400,
30
+ };
31
+ //# sourceMappingURL=error-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../../src/core/error-codes.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,qBAAqB,EAAE,uBAAuB;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,oBAAoB,EAAE,sBAAsB;IAE5C,OAAO;IACP,yBAAyB,EAAE,2BAA2B;IACtD,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAE1C,gBAAgB;IAChB,sBAAsB,EAAE,wBAAwB;IAChD,4BAA4B,EAAE,8BAA8B;IAC5D,yBAAyB,EAAE,2BAA2B;IAEtD,OAAO;IACP,wBAAwB,EAAE,0BAA0B;IACpD,2BAA2B,EAAE,6BAA6B;IAC1D,uBAAuB,EAAE,yBAAyB;CAC1C,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,GAAG;IAClB,gBAAgB,EAAE,GAAG;IACrB,gBAAgB,EAAE,GAAG;CACtB,CAAC"}