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.
- package/CHANGELOG.md +103 -0
- package/README.md +1 -1
- package/dist/package.json +22 -4
- package/dist/src/application/use-cases/fetch-apifox-data.use-case.d.ts +19 -0
- package/dist/src/application/use-cases/fetch-apifox-data.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/fetch-apifox-data.use-case.js +29 -0
- package/dist/src/application/use-cases/fetch-apifox-data.use-case.js.map +1 -0
- package/dist/src/application/use-cases/generate-mock.use-case.d.ts +22 -0
- package/dist/src/application/use-cases/generate-mock.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/generate-mock.use-case.js +42 -0
- package/dist/src/application/use-cases/generate-mock.use-case.js.map +1 -0
- package/dist/src/application/use-cases/generate-types.use-case.d.ts +22 -0
- package/dist/src/application/use-cases/generate-types.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/generate-types.use-case.js +42 -0
- package/dist/src/application/use-cases/generate-types.use-case.js.map +1 -0
- package/dist/src/application/use-cases/index.d.ts +8 -0
- package/dist/src/application/use-cases/index.d.ts.map +1 -0
- package/dist/src/application/use-cases/index.js +8 -0
- package/dist/src/application/use-cases/index.js.map +1 -0
- package/dist/src/application/use-cases/serve-mock.use-case.d.ts +26 -0
- package/dist/src/application/use-cases/serve-mock.use-case.d.ts.map +1 -0
- package/dist/src/application/use-cases/serve-mock.use-case.js +103 -0
- package/dist/src/application/use-cases/serve-mock.use-case.js.map +1 -0
- package/dist/src/core/apifox-client.d.ts +5 -1
- package/dist/src/core/apifox-client.d.ts.map +1 -1
- package/dist/src/core/apifox-client.js +8 -102
- 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 +17 -5
- package/dist/src/core/config-loader.js.map +1 -1
- package/dist/src/core/container-setup.d.ts +9 -0
- package/dist/src/core/container-setup.d.ts.map +1 -0
- package/dist/src/core/container-setup.js +64 -0
- package/dist/src/core/container-setup.js.map +1 -0
- package/dist/src/core/container.d.ts +42 -0
- package/dist/src/core/container.d.ts.map +1 -0
- package/dist/src/core/container.js +70 -0
- package/dist/src/core/container.js.map +1 -0
- package/dist/src/core/endpoint-filter.d.ts +10 -0
- package/dist/src/core/endpoint-filter.d.ts.map +1 -1
- package/dist/src/core/endpoint-filter.js +22 -95
- package/dist/src/core/endpoint-filter.js.map +1 -1
- package/dist/src/core/error-codes.d.ts +22 -0
- package/dist/src/core/error-codes.d.ts.map +1 -0
- package/dist/src/core/error-codes.js +31 -0
- package/dist/src/core/error-codes.js.map +1 -0
- package/dist/src/core/error-handler.d.ts +8 -0
- package/dist/src/core/error-handler.d.ts.map +1 -0
- package/dist/src/core/error-handler.js +45 -0
- package/dist/src/core/error-handler.js.map +1 -0
- package/dist/src/core/errors.d.ts +49 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/errors.js +70 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/mock-config-loader.d.ts.map +1 -1
- package/dist/src/core/mock-config-loader.js +24 -7
- package/dist/src/core/mock-config-loader.js.map +1 -1
- package/dist/src/core/openapi-converter.d.ts +5 -1
- package/dist/src/core/openapi-converter.d.ts.map +1 -1
- package/dist/src/core/openapi-converter.js +11 -34
- package/dist/src/core/openapi-converter.js.map +1 -1
- package/dist/src/core/service-keys.d.ts +39 -0
- package/dist/src/core/service-keys.d.ts.map +1 -0
- package/dist/src/core/service-keys.js +43 -0
- package/dist/src/core/service-keys.js.map +1 -0
- package/dist/src/domain/entities/api-endpoint.entity.d.ts +57 -0
- package/dist/src/domain/entities/api-endpoint.entity.d.ts.map +1 -0
- package/dist/src/domain/entities/api-endpoint.entity.js +87 -0
- package/dist/src/domain/entities/api-endpoint.entity.js.map +1 -0
- package/dist/src/domain/entities/index.d.ts +6 -0
- package/dist/src/domain/entities/index.d.ts.map +1 -0
- package/dist/src/domain/entities/index.js +6 -0
- package/dist/src/domain/entities/index.js.map +1 -0
- package/dist/src/domain/entities/mock-route.entity.d.ts +41 -0
- package/dist/src/domain/entities/mock-route.entity.d.ts.map +1 -0
- package/dist/src/domain/entities/mock-route.entity.js +82 -0
- package/dist/src/domain/entities/mock-route.entity.js.map +1 -0
- package/dist/src/domain/interfaces/apifox-client.interface.d.ts +14 -0
- package/dist/src/domain/interfaces/apifox-client.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/apifox-client.interface.js +2 -0
- package/dist/src/domain/interfaces/apifox-client.interface.js.map +1 -0
- package/dist/src/domain/interfaces/file-system.interface.d.ts +46 -0
- package/dist/src/domain/interfaces/file-system.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/file-system.interface.js +2 -0
- package/dist/src/domain/interfaces/file-system.interface.js.map +1 -0
- package/dist/src/domain/interfaces/generator.interface.d.ts +24 -0
- package/dist/src/domain/interfaces/generator.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/generator.interface.js +2 -0
- package/dist/src/domain/interfaces/generator.interface.js.map +1 -0
- package/dist/src/domain/interfaces/http-client.interface.d.ts +54 -0
- package/dist/src/domain/interfaces/http-client.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/http-client.interface.js +2 -0
- package/dist/src/domain/interfaces/http-client.interface.js.map +1 -0
- package/dist/src/domain/interfaces/index.d.ts +11 -0
- package/dist/src/domain/interfaces/index.d.ts.map +1 -0
- package/dist/src/domain/interfaces/index.js +11 -0
- package/dist/src/domain/interfaces/index.js.map +1 -0
- package/dist/src/domain/interfaces/logger.interface.d.ts +36 -0
- package/dist/src/domain/interfaces/logger.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/logger.interface.js +2 -0
- package/dist/src/domain/interfaces/logger.interface.js.map +1 -0
- package/dist/src/domain/interfaces/remote-proxy.interface.d.ts +26 -0
- package/dist/src/domain/interfaces/remote-proxy.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/remote-proxy.interface.js +2 -0
- package/dist/src/domain/interfaces/remote-proxy.interface.js.map +1 -0
- package/dist/src/domain/interfaces/route-manager.interface.d.ts +34 -0
- package/dist/src/domain/interfaces/route-manager.interface.d.ts.map +1 -0
- package/dist/src/domain/interfaces/route-manager.interface.js +2 -0
- package/dist/src/domain/interfaces/route-manager.interface.js.map +1 -0
- package/dist/src/domain/interfaces.d.ts +239 -0
- package/dist/src/domain/interfaces.d.ts.map +1 -0
- package/dist/src/domain/interfaces.js +2 -0
- package/dist/src/domain/interfaces.js.map +1 -0
- package/dist/src/domain/services/endpoint-filter.service.d.ts +52 -0
- package/dist/src/domain/services/endpoint-filter.service.d.ts.map +1 -0
- package/dist/src/domain/services/endpoint-filter.service.js +150 -0
- package/dist/src/domain/services/endpoint-filter.service.js.map +1 -0
- package/dist/src/domain/services/index.d.ts +7 -0
- package/dist/src/domain/services/index.d.ts.map +1 -0
- package/dist/src/domain/services/index.js +7 -0
- package/dist/src/domain/services/index.js.map +1 -0
- package/dist/src/domain/services/openapi-converter.service.d.ts +15 -0
- package/dist/src/domain/services/openapi-converter.service.d.ts.map +1 -0
- package/dist/src/domain/services/openapi-converter.service.js +74 -0
- package/dist/src/domain/services/openapi-converter.service.js.map +1 -0
- package/dist/src/domain/services/route-matcher.service.d.ts +38 -0
- package/dist/src/domain/services/route-matcher.service.d.ts.map +1 -0
- package/dist/src/domain/services/route-matcher.service.js +61 -0
- package/dist/src/domain/services/route-matcher.service.js.map +1 -0
- package/dist/src/generators/mock-generator.d.ts +2 -1
- package/dist/src/generators/mock-generator.d.ts.map +1 -1
- package/dist/src/generators/mock-generator.js +13 -8
- package/dist/src/generators/mock-generator.js.map +1 -1
- package/dist/src/generators/templates/type-template.d.ts +2 -1
- package/dist/src/generators/templates/type-template.d.ts.map +1 -1
- package/dist/src/generators/templates/type-template.js +72 -48
- package/dist/src/generators/templates/type-template.js.map +1 -1
- package/dist/src/generators/type-generator.d.ts +2 -1
- package/dist/src/generators/type-generator.d.ts.map +1 -1
- package/dist/src/generators/type-generator.js +1 -1
- package/dist/src/generators/type-generator.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/apifox/apifox-client.impl.d.ts +22 -0
- package/dist/src/infrastructure/apifox/apifox-client.impl.d.ts.map +1 -0
- package/dist/src/infrastructure/apifox/apifox-client.impl.js +135 -0
- package/dist/src/infrastructure/apifox/apifox-client.impl.js.map +1 -0
- package/dist/src/infrastructure/file-system/file-system.impl.d.ts +15 -0
- package/dist/src/infrastructure/file-system/file-system.impl.d.ts.map +1 -0
- package/dist/src/infrastructure/file-system/file-system.impl.js +45 -0
- package/dist/src/infrastructure/file-system/file-system.impl.js.map +1 -0
- package/dist/src/infrastructure/http/axios-client.impl.d.ts +19 -0
- package/dist/src/infrastructure/http/axios-client.impl.d.ts.map +1 -0
- package/dist/src/infrastructure/http/axios-client.impl.js +59 -0
- package/dist/src/infrastructure/http/axios-client.impl.js.map +1 -0
- package/dist/src/infrastructure/logger/console-logger.impl.d.ts +15 -0
- package/dist/src/infrastructure/logger/console-logger.impl.d.ts.map +1 -0
- package/dist/src/infrastructure/logger/console-logger.impl.js +30 -0
- package/dist/src/infrastructure/logger/console-logger.impl.js.map +1 -0
- package/dist/src/infrastructure/route-manager/route-manager.impl.d.ts +14 -0
- package/dist/src/infrastructure/route-manager/route-manager.impl.d.ts.map +1 -0
- package/dist/src/infrastructure/route-manager/route-manager.impl.js +25 -0
- package/dist/src/infrastructure/route-manager/route-manager.impl.js.map +1 -0
- package/dist/src/infrastructure/server/hot-reload.d.ts +8 -0
- package/dist/src/infrastructure/server/hot-reload.d.ts.map +1 -0
- package/dist/src/infrastructure/server/hot-reload.js +132 -0
- package/dist/src/infrastructure/server/hot-reload.js.map +1 -0
- package/dist/src/infrastructure/server/remote-proxy.d.ts +22 -0
- package/dist/src/infrastructure/server/remote-proxy.d.ts.map +1 -0
- package/dist/src/infrastructure/server/remote-proxy.js +82 -0
- package/dist/src/infrastructure/server/remote-proxy.js.map +1 -0
- package/dist/src/infrastructure/server/route-loader.d.ts +18 -0
- package/dist/src/infrastructure/server/route-loader.d.ts.map +1 -0
- package/dist/src/infrastructure/server/route-loader.js +256 -0
- package/dist/src/infrastructure/server/route-loader.js.map +1 -0
- package/dist/src/presentation/http/express-server.d.ts +8 -0
- package/dist/src/presentation/http/express-server.d.ts.map +1 -0
- package/dist/src/presentation/http/express-server.js +65 -0
- package/dist/src/presentation/http/express-server.js.map +1 -0
- package/dist/src/presentation/http/middleware/error-handler.middleware.d.ts +9 -0
- package/dist/src/presentation/http/middleware/error-handler.middleware.d.ts.map +1 -0
- package/dist/src/presentation/http/middleware/error-handler.middleware.js +31 -0
- package/dist/src/presentation/http/middleware/error-handler.middleware.js.map +1 -0
- package/dist/src/presentation/http/route-handler.d.ts +38 -0
- package/dist/src/presentation/http/route-handler.d.ts.map +1 -0
- package/dist/src/presentation/http/route-handler.js +237 -0
- package/dist/src/presentation/http/route-handler.js.map +1 -0
- package/dist/src/presentation/http/validation.d.ts +25 -0
- package/dist/src/presentation/http/validation.d.ts.map +1 -0
- package/dist/src/presentation/http/validation.js +131 -0
- package/dist/src/presentation/http/validation.js.map +1 -0
- package/dist/src/scripts/cli.js +1 -1
- package/dist/src/scripts/cli.js.map +1 -1
- package/dist/src/scripts/generate-mock.js +15 -35
- package/dist/src/scripts/generate-mock.js.map +1 -1
- package/dist/src/scripts/serve-mock.js +9 -87
- package/dist/src/scripts/serve-mock.js.map +1 -1
- package/dist/src/server/express-server.d.ts +2 -2
- package/dist/src/server/express-server.d.ts.map +1 -1
- package/dist/src/server/express-server.js +16 -1
- package/dist/src/server/express-server.js.map +1 -1
- package/dist/src/server/hot-reload.d.ts +2 -2
- package/dist/src/server/hot-reload.d.ts.map +1 -1
- package/dist/src/server/hot-reload.js.map +1 -1
- package/dist/src/server/remote-proxy.d.ts +2 -2
- package/dist/src/server/remote-proxy.d.ts.map +1 -1
- package/dist/src/server/remote-proxy.js +13 -1
- package/dist/src/server/remote-proxy.js.map +1 -1
- package/dist/src/server/route-handler.d.ts +5 -3
- package/dist/src/server/route-handler.d.ts.map +1 -1
- package/dist/src/server/route-handler.js +15 -9
- package/dist/src/server/route-handler.js.map +1 -1
- package/dist/src/server/route-matcher.d.ts.map +1 -1
- package/dist/src/server/route-matcher.js +3 -1
- package/dist/src/server/route-matcher.js.map +1 -1
- package/dist/src/server/validation.d.ts +20 -1
- package/dist/src/server/validation.d.ts.map +1 -1
- package/dist/src/server/validation.js +25 -13
- package/dist/src/server/validation.js.map +1 -1
- package/dist/src/types/index.d.ts +21 -6
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/mock/list.d.ts +13 -0
- package/dist/src/types/mock/list.d.ts.map +1 -0
- package/dist/src/types/mock/list.js +4 -0
- package/dist/src/types/mock/list.js.map +1 -0
- package/dist/src/types/mock/v1/auth/login/username.d.ts +1 -1
- package/dist/src/types/mock/v1/auth/login/username.d.ts.map +1 -1
- package/dist/src/types/mock/v1/dict/data/default.d.ts +25 -0
- package/dist/src/types/mock/v1/dict/data/default.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict/data/default.js +4 -0
- package/dist/src/types/mock/v1/dict/data/default.js.map +1 -0
- package/dist/src/types/mock/v1/dict/data/order.d.ts +25 -0
- package/dist/src/types/mock/v1/dict/data/order.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict/data/order.js +4 -0
- package/dist/src/types/mock/v1/dict/data/order.js.map +1 -0
- package/dist/src/types/mock/v1/dict/data/pagedList.d.ts +62 -0
- package/dist/src/types/mock/v1/dict/data/pagedList.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict/data/pagedList.js +4 -0
- package/dist/src/types/mock/v1/dict/data/pagedList.js.map +1 -0
- package/dist/src/types/mock/v1/dict/data.d.ts +82 -0
- package/dist/src/types/mock/v1/dict/data.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict/data.js +4 -0
- package/dist/src/types/mock/v1/dict/data.js.map +1 -0
- package/dist/src/types/mock/v1/dict/pagedList.d.ts +54 -0
- package/dist/src/types/mock/v1/dict/pagedList.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict/pagedList.js +4 -0
- package/dist/src/types/mock/v1/dict/pagedList.js.map +1 -0
- package/dist/src/types/mock/v1/dict.d.ts +80 -0
- package/dist/src/types/mock/v1/dict.d.ts.map +1 -0
- package/dist/src/types/mock/v1/dict.js +4 -0
- package/dist/src/types/mock/v1/dict.js.map +1 -0
- package/dist/src/types/mock/v1/file/download.d.ts +23 -0
- package/dist/src/types/mock/v1/file/download.d.ts.map +1 -0
- package/dist/src/types/mock/v1/file/download.js +4 -0
- package/dist/src/types/mock/v1/file/download.js.map +1 -0
- package/dist/src/types/mock/v1/file/pagedList.d.ts +62 -0
- package/dist/src/types/mock/v1/file/pagedList.d.ts.map +1 -0
- package/dist/src/types/mock/v1/file/pagedList.js +4 -0
- package/dist/src/types/mock/v1/file/pagedList.js.map +1 -0
- package/dist/src/types/mock/v1/file.d.ts +56 -0
- package/dist/src/types/mock/v1/file.d.ts.map +1 -0
- package/dist/src/types/mock/v1/file.js +4 -0
- package/dist/src/types/mock/v1/file.js.map +1 -0
- package/dist/src/types/mock/v1/internal/getToken.d.ts +32 -0
- package/dist/src/types/mock/v1/internal/getToken.d.ts.map +1 -0
- package/dist/src/types/mock/v1/internal/getToken.js +4 -0
- package/dist/src/types/mock/v1/internal/getToken.js.map +1 -0
- package/dist/src/types/mock/v1/internal/user/unlock.d.ts +23 -0
- package/dist/src/types/mock/v1/internal/user/unlock.d.ts.map +1 -0
- package/dist/src/types/mock/v1/internal/user/unlock.js +4 -0
- package/dist/src/types/mock/v1/internal/user/unlock.js.map +1 -0
- package/dist/src/types/mock/v1/role/disabled.d.ts +25 -0
- package/dist/src/types/mock/v1/role/disabled.d.ts.map +1 -0
- package/dist/src/types/mock/v1/role/disabled.js +4 -0
- package/dist/src/types/mock/v1/role/disabled.js.map +1 -0
- package/dist/src/types/mock/v1/role/pagedList.d.ts +2 -2
- package/dist/src/types/mock/v1/role/pagedList.d.ts.map +1 -1
- package/dist/src/types/mock/v1/role.d.ts +31 -29
- 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/permission/tree.d.ts +2 -2
- package/dist/src/types/mock/v1/tenant/permission/tree.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/link.d.ts +23 -0
- package/dist/src/types/mock/v1/tenant/user/link.d.ts.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/link.js +4 -0
- package/dist/src/types/mock/v1/tenant/user/link.js.map +1 -0
- package/dist/src/types/mock/v1/tenant/user/pagedList.d.ts +8 -0
- package/dist/src/types/mock/v1/tenant/user/pagedList.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/user/pagedList.js.map +1 -1
- package/dist/src/types/mock/v1/tenant/user.d.ts +19 -0
- package/dist/src/types/mock/v1/tenant/user.d.ts.map +1 -1
- package/dist/src/types/mock/v1/tenant/user.js.map +1 -1
- package/dist/src/types/mock/v1/user/exportData.d.ts +25 -0
- package/dist/src/types/mock/v1/user/exportData.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/exportData.js +4 -0
- package/dist/src/types/mock/v1/user/exportData.js.map +1 -0
- package/dist/src/types/mock/v1/user/importData.d.ts +13 -0
- package/dist/src/types/mock/v1/user/importData.d.ts.map +1 -0
- package/dist/src/types/mock/v1/user/importData.js +4 -0
- package/dist/src/types/mock/v1/user/importData.js.map +1 -0
- package/dist/src/types/mock/v1/user/info.d.ts +0 -30
- package/dist/src/types/mock/v1/user/info.d.ts.map +1 -1
- package/dist/src/types/mock/v1/user/info.js.map +1 -1
- package/dist/src/types/mock/v1/user/permission/tree.d.ts +4 -2
- package/dist/src/types/mock/v1/user/permission/tree.d.ts.map +1 -1
- package/dist/src/types/mock/v1/user/permission/tree.js.map +1 -1
- package/dist/src/types/mock/v1/user.d.ts +0 -106
- package/dist/src/types/mock/v1/user.d.ts.map +1 -1
- package/dist/src/types/mock/v1/user.js +1 -1
- package/dist/src/types/mock/v1/user.js.map +1 -1
- package/dist/src/types/openapi.d.ts +426 -0
- package/dist/src/types/openapi.d.ts.map +1 -0
- package/dist/src/types/openapi.js +23 -0
- package/dist/src/types/openapi.js.map +1 -0
- package/dist/src/utils/block-updater.d.ts.map +1 -1
- package/dist/src/utils/block-updater.js +5 -4
- package/dist/src/utils/block-updater.js.map +1 -1
- package/dist/src/utils/code-formatter.d.ts.map +1 -1
- package/dist/src/utils/code-formatter.js +2 -0
- package/dist/src/utils/code-formatter.js.map +1 -1
- package/dist/src/utils/file-helper.d.ts +7 -7
- package/dist/src/utils/file-helper.d.ts.map +1 -1
- package/dist/src/utils/file-helper.js +11 -8
- package/dist/src/utils/file-helper.js.map +1 -1
- package/dist/src/utils/file-operations.d.ts +1 -1
- package/dist/src/utils/file-operations.d.ts.map +1 -1
- package/dist/src/utils/file-operations.js.map +1 -1
- package/dist/src/utils/file-utils.d.ts +3 -2
- package/dist/src/utils/file-utils.d.ts.map +1 -1
- package/dist/src/utils/file-utils.js +1 -1
- package/dist/src/utils/file-utils.js.map +1 -1
- package/dist/src/utils/path-utils.js.map +1 -1
- package/dist/src/utils/type-mapping.d.ts +9 -2
- package/dist/src/utils/type-mapping.d.ts.map +1 -1
- package/dist/src/utils/type-mapping.js +42 -35
- package/dist/src/utils/type-mapping.js.map +1 -1
- package/package.json +22 -4
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import type express from 'express';
|
|
2
|
+
import type { ApifoxConfig, ApiEndpoint, MockRoute } from '../types/index.js';
|
|
3
|
+
import type { OpenAPIDocument, OpenAPISchema, OpenAPISchemaReference } from '../types/openapi.js';
|
|
4
|
+
/**
|
|
5
|
+
* Apifox 客户端接口
|
|
6
|
+
*/
|
|
7
|
+
export interface IApifoxClient {
|
|
8
|
+
/**
|
|
9
|
+
* 从 Apifox 获取 OpenAPI 文档
|
|
10
|
+
* @param config Apifox 配置
|
|
11
|
+
* @returns OpenAPI 文档
|
|
12
|
+
*/
|
|
13
|
+
fetchOpenAPI(config: ApifoxConfig): Promise<OpenAPIDocument>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 路由管理器接口
|
|
17
|
+
*/
|
|
18
|
+
export interface IRouteManager {
|
|
19
|
+
/**
|
|
20
|
+
* 设置路由
|
|
21
|
+
* @param key 路由键(格式:METHOD path)
|
|
22
|
+
* @param route Mock 路由
|
|
23
|
+
*/
|
|
24
|
+
setRoute(key: string, route: MockRoute): void;
|
|
25
|
+
/**
|
|
26
|
+
* 获取路由
|
|
27
|
+
* @param method HTTP 方法
|
|
28
|
+
* @param path 路径
|
|
29
|
+
* @returns Mock 路由,如果不存在则返回 undefined
|
|
30
|
+
*/
|
|
31
|
+
getRoute(method: string, path: string): MockRoute | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* 获取所有路由
|
|
34
|
+
* @returns 所有 Mock 路由数组
|
|
35
|
+
*/
|
|
36
|
+
getAllRoutes(): MockRoute[];
|
|
37
|
+
/**
|
|
38
|
+
* 移除路由
|
|
39
|
+
* @param key 路由键
|
|
40
|
+
*/
|
|
41
|
+
removeRoute(key: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* 清空所有路由
|
|
44
|
+
*/
|
|
45
|
+
clear(): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 文件系统接口
|
|
49
|
+
*/
|
|
50
|
+
export interface IFileSystem {
|
|
51
|
+
/**
|
|
52
|
+
* 读取文件内容
|
|
53
|
+
* @param path 文件路径
|
|
54
|
+
* @returns 文件内容
|
|
55
|
+
*/
|
|
56
|
+
readFile(path: string): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* 写入文件内容
|
|
59
|
+
* @param path 文件路径
|
|
60
|
+
* @param content 文件内容
|
|
61
|
+
*/
|
|
62
|
+
writeFile(path: string, content: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* 检查文件或目录是否存在
|
|
65
|
+
* @param path 路径
|
|
66
|
+
* @returns 是否存在
|
|
67
|
+
*/
|
|
68
|
+
exists(path: string): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* 确保目录存在(如果不存在则创建)
|
|
71
|
+
* @param path 目录路径
|
|
72
|
+
*/
|
|
73
|
+
ensureDir(path: string): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* 读取 JSON 文件
|
|
76
|
+
* @param path 文件路径
|
|
77
|
+
* @returns 解析后的 JSON 对象
|
|
78
|
+
*/
|
|
79
|
+
readJson<T>(path: string): Promise<T>;
|
|
80
|
+
/**
|
|
81
|
+
* 写入 JSON 文件
|
|
82
|
+
* @param path 文件路径
|
|
83
|
+
* @param data 要写入的数据
|
|
84
|
+
*/
|
|
85
|
+
writeJson(path: string, data: unknown): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* 获取项目根目录
|
|
88
|
+
* @returns 项目根目录路径
|
|
89
|
+
*/
|
|
90
|
+
getProjectRoot(): string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 日志接口
|
|
94
|
+
*/
|
|
95
|
+
export interface ILogger {
|
|
96
|
+
/**
|
|
97
|
+
* 输出信息日志
|
|
98
|
+
* @param message 日志消息
|
|
99
|
+
*/
|
|
100
|
+
info(message: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* 输出成功日志
|
|
103
|
+
* @param message 日志消息
|
|
104
|
+
*/
|
|
105
|
+
success(message: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* 输出警告日志
|
|
108
|
+
* @param message 日志消息
|
|
109
|
+
*/
|
|
110
|
+
warn(message: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* 输出错误日志
|
|
113
|
+
* @param message 日志消息
|
|
114
|
+
*/
|
|
115
|
+
error(message: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* 输出调试日志
|
|
118
|
+
* @param message 日志消息
|
|
119
|
+
*/
|
|
120
|
+
debug(message: string): void;
|
|
121
|
+
/**
|
|
122
|
+
* 输出标题日志
|
|
123
|
+
* @param message 日志消息
|
|
124
|
+
*/
|
|
125
|
+
title(message: string): void;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* HTTP 请求配置
|
|
129
|
+
*/
|
|
130
|
+
export interface HttpRequestConfig {
|
|
131
|
+
headers?: Record<string, string>;
|
|
132
|
+
timeout?: number;
|
|
133
|
+
validateStatus?: (status: number) => boolean;
|
|
134
|
+
[key: string]: unknown;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* HTTP 响应
|
|
138
|
+
*/
|
|
139
|
+
export interface HttpResponse<T = unknown> {
|
|
140
|
+
data: T;
|
|
141
|
+
status: number;
|
|
142
|
+
statusText: string;
|
|
143
|
+
headers: Record<string, string>;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* HTTP 客户端接口
|
|
147
|
+
*/
|
|
148
|
+
export interface IHttpClient {
|
|
149
|
+
/**
|
|
150
|
+
* 发送 GET 请求
|
|
151
|
+
* @param url 请求 URL
|
|
152
|
+
* @param config 请求配置
|
|
153
|
+
* @returns HTTP 响应
|
|
154
|
+
*/
|
|
155
|
+
get<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
156
|
+
/**
|
|
157
|
+
* 发送 POST 请求
|
|
158
|
+
* @param url 请求 URL
|
|
159
|
+
* @param data 请求体数据
|
|
160
|
+
* @param config 请求配置
|
|
161
|
+
* @returns HTTP 响应
|
|
162
|
+
*/
|
|
163
|
+
post<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
164
|
+
/**
|
|
165
|
+
* 发送 PUT 请求
|
|
166
|
+
* @param url 请求 URL
|
|
167
|
+
* @param data 请求体数据
|
|
168
|
+
* @param config 请求配置
|
|
169
|
+
* @returns HTTP 响应
|
|
170
|
+
*/
|
|
171
|
+
put<T = unknown>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
172
|
+
/**
|
|
173
|
+
* 发送 DELETE 请求
|
|
174
|
+
* @param url 请求 URL
|
|
175
|
+
* @param config 请求配置
|
|
176
|
+
* @returns HTTP 响应
|
|
177
|
+
*/
|
|
178
|
+
delete<T = unknown>(url: string, config?: HttpRequestConfig): Promise<HttpResponse<T>>;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 代理响应
|
|
182
|
+
*/
|
|
183
|
+
export interface ProxyResponse {
|
|
184
|
+
status: number;
|
|
185
|
+
headers: Record<string, string>;
|
|
186
|
+
data: unknown;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 远程代理接口
|
|
190
|
+
*/
|
|
191
|
+
export interface IRemoteProxy {
|
|
192
|
+
/**
|
|
193
|
+
* 代理请求到远程服务器
|
|
194
|
+
* @param req Express 请求对象
|
|
195
|
+
* @returns 代理响应
|
|
196
|
+
*/
|
|
197
|
+
proxyRequest(req: express.Request): Promise<ProxyResponse>;
|
|
198
|
+
/**
|
|
199
|
+
* 检查远程服务器是否已配置
|
|
200
|
+
* @returns 是否已配置
|
|
201
|
+
*/
|
|
202
|
+
isRemoteServerConfigured(): boolean;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 生成器配置
|
|
206
|
+
*/
|
|
207
|
+
export interface GeneratorConfig {
|
|
208
|
+
/** Apifox 配置 */
|
|
209
|
+
config: ApifoxConfig;
|
|
210
|
+
/** API 端点列表 */
|
|
211
|
+
endpoints: ApiEndpoint[];
|
|
212
|
+
/** OpenAPI Schema 定义 */
|
|
213
|
+
schemas?: Record<string, OpenAPISchema | OpenAPISchemaReference>;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Mock 生成器接口
|
|
217
|
+
*/
|
|
218
|
+
export interface IMockGenerator {
|
|
219
|
+
/**
|
|
220
|
+
* 生成 Mock 文件
|
|
221
|
+
* @param config Apifox 配置
|
|
222
|
+
* @param endpoints API 端点列表
|
|
223
|
+
* @param definitions OpenAPI Schema 定义(可选)
|
|
224
|
+
*/
|
|
225
|
+
generateMockFiles(config: ApifoxConfig, endpoints: ApiEndpoint[], definitions?: Record<string, OpenAPISchema | OpenAPISchemaReference>): Promise<void>;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* 类型生成器接口
|
|
229
|
+
*/
|
|
230
|
+
export interface ITypeGenerator {
|
|
231
|
+
/**
|
|
232
|
+
* 生成 TypeScript 类型文件
|
|
233
|
+
* @param config Apifox 配置
|
|
234
|
+
* @param openapi OpenAPI 文档
|
|
235
|
+
* @param endpoints API 端点列表
|
|
236
|
+
*/
|
|
237
|
+
generateTypeFiles(config: ApifoxConfig, openapi: OpenAPIDocument, endpoints: ApiEndpoint[]): Promise<void>;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAMlG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC9D;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAE9C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAE9D;;;OAGG;IACH,YAAY,IAAI,SAAS,EAAE,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEtC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;CAC1B;AAMD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpF;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAErG;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpG;;;;;OAKG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CACxF;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3D;;;OAGG;IACH,wBAAwB,IAAI,OAAO,CAAC;CACrC;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe;IACf,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,sBAAsB,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,iBAAiB,CACf,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,sBAAsB,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,iBAAiB,CACf,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,WAAW,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ILogger } from '../interfaces.js';
|
|
2
|
+
import type { ApiFilter } from '../../types/index.js';
|
|
3
|
+
import { ApiEndpoint } from '../entities/api-endpoint.entity.js';
|
|
4
|
+
/**
|
|
5
|
+
* 中文状态到英文状态的映射
|
|
6
|
+
*/
|
|
7
|
+
export declare const STATUS_MAPPING: Record<string, string>;
|
|
8
|
+
/**
|
|
9
|
+
* 端点过滤器服务
|
|
10
|
+
* 负责根据筛选配置过滤 API 端点
|
|
11
|
+
*/
|
|
12
|
+
export declare class EndpointFilterService {
|
|
13
|
+
private readonly logger;
|
|
14
|
+
constructor(logger: ILogger);
|
|
15
|
+
/**
|
|
16
|
+
* 根据筛选配置过滤端点
|
|
17
|
+
* @param endpoints 端点列表
|
|
18
|
+
* @param filter 筛选配置
|
|
19
|
+
* @returns 过滤后的端点列表
|
|
20
|
+
*/
|
|
21
|
+
filter(endpoints: ApiEndpoint[], filter?: ApiFilter): ApiEndpoint[];
|
|
22
|
+
/**
|
|
23
|
+
* 检查端点是否应该包含
|
|
24
|
+
* @param endpoint 端点
|
|
25
|
+
* @param filter 筛选配置
|
|
26
|
+
* @returns 是否应该包含
|
|
27
|
+
*/
|
|
28
|
+
private shouldInclude;
|
|
29
|
+
/**
|
|
30
|
+
* 路径模式匹配(支持通配符 * 和 **)
|
|
31
|
+
* * 匹配单层路径
|
|
32
|
+
* ** 匹配多层路径
|
|
33
|
+
* @param path 路径
|
|
34
|
+
* @param pattern 模式
|
|
35
|
+
* @returns 是否匹配
|
|
36
|
+
*/
|
|
37
|
+
private matchPath;
|
|
38
|
+
/**
|
|
39
|
+
* 转换状态值(支持中文到英文的映射)
|
|
40
|
+
* @param status 状态值
|
|
41
|
+
* @returns 转换后的状态值
|
|
42
|
+
*/
|
|
43
|
+
private translateStatus;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 路径模式匹配函数(向后兼容导出)
|
|
47
|
+
* @param path 路径
|
|
48
|
+
* @param pattern 模式
|
|
49
|
+
* @returns 是否匹配
|
|
50
|
+
*/
|
|
51
|
+
export declare function matchPath(path: string, pattern: string): boolean;
|
|
52
|
+
//# sourceMappingURL=endpoint-filter.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-filter.service.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/endpoint-filter.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQjD,CAAC;AAEF;;;GAGG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,OAAO;IAE5C;;;;;OAKG;IACH,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,WAAW,EAAE;IAUnE;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA2FrB;;;;;;;OAOG;IACH,OAAO,CAAC,SAAS;IAWjB;;;;OAIG;IACH,OAAO,CAAC,eAAe;CAGxB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAShE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 中文状态到英文状态的映射
|
|
3
|
+
*/
|
|
4
|
+
export const STATUS_MAPPING = {
|
|
5
|
+
设计中: 'designing',
|
|
6
|
+
开发中: 'developing',
|
|
7
|
+
已完成: 'completed',
|
|
8
|
+
已废弃: 'deprecated',
|
|
9
|
+
待确定: 'pending',
|
|
10
|
+
测试中: 'testing',
|
|
11
|
+
已发布: 'published'
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 端点过滤器服务
|
|
15
|
+
* 负责根据筛选配置过滤 API 端点
|
|
16
|
+
*/
|
|
17
|
+
export class EndpointFilterService {
|
|
18
|
+
constructor(logger) {
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 根据筛选配置过滤端点
|
|
23
|
+
* @param endpoints 端点列表
|
|
24
|
+
* @param filter 筛选配置
|
|
25
|
+
* @returns 过滤后的端点列表
|
|
26
|
+
*/
|
|
27
|
+
filter(endpoints, filter) {
|
|
28
|
+
if (!filter) {
|
|
29
|
+
return endpoints;
|
|
30
|
+
}
|
|
31
|
+
return endpoints.filter(endpoint => {
|
|
32
|
+
return this.shouldInclude(endpoint, filter);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 检查端点是否应该包含
|
|
37
|
+
* @param endpoint 端点
|
|
38
|
+
* @param filter 筛选配置
|
|
39
|
+
* @returns 是否应该包含
|
|
40
|
+
*/
|
|
41
|
+
shouldInclude(endpoint, filter) {
|
|
42
|
+
// 1. 检查 includePaths(如果配置了,必须匹配其中之一)
|
|
43
|
+
if (filter.includePaths && filter.includePaths.length > 0) {
|
|
44
|
+
const matched = filter.includePaths.some(pattern => this.matchPath(endpoint.path, pattern));
|
|
45
|
+
if (!matched) {
|
|
46
|
+
this.logger.debug(`[Filter] 路径不匹配 includePaths: ${endpoint.path}`);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 2. 检查 excludePaths(如果匹配,则排除)
|
|
51
|
+
if (filter.excludePaths && filter.excludePaths.length > 0) {
|
|
52
|
+
const matched = filter.excludePaths.some(pattern => this.matchPath(endpoint.path, pattern));
|
|
53
|
+
if (matched) {
|
|
54
|
+
this.logger.debug(`[Filter] 路径匹配 excludePaths,已排除: ${endpoint.path}`);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 3. 检查 excludeDeprecated(排除废弃接口)
|
|
59
|
+
if (endpoint.isDeprecated()) {
|
|
60
|
+
this.logger.debug(`[Filter] 废弃接口已排除: ${endpoint.path}`);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// 4. 检查 includeMethods(如果配置了,必须匹配)
|
|
64
|
+
if (filter.includeMethods && filter.includeMethods.length > 0) {
|
|
65
|
+
const includeMethodsUpper = filter.includeMethods.map(m => m.toUpperCase());
|
|
66
|
+
if (!includeMethodsUpper.includes(endpoint.method.toUpperCase())) {
|
|
67
|
+
this.logger.debug(`[Filter] 方法不匹配 includeMethods: ${endpoint.method}`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 5. 检查 excludeMethods(如果匹配,则排除)
|
|
72
|
+
if (filter.excludeMethods && filter.excludeMethods.length > 0) {
|
|
73
|
+
const excludeMethodsUpper = filter.excludeMethods.map(m => m.toUpperCase());
|
|
74
|
+
if (excludeMethodsUpper.includes(endpoint.method.toUpperCase())) {
|
|
75
|
+
this.logger.debug(`[Filter] 方法匹配 excludeMethods,已排除: ${endpoint.method}`);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 6. 检查 includedByTags(基于接口状态过滤)
|
|
80
|
+
if (filter.scope?.includedByTags && filter.scope.includedByTags.length > 0) {
|
|
81
|
+
const includedStatuses = filter.scope.includedByTags.map(this.translateStatus);
|
|
82
|
+
if (!endpoint.status || !includedStatuses.includes(endpoint.status)) {
|
|
83
|
+
this.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
|
+
const excludedStatuses = filter.scope.excludedByTags.map(this.translateStatus);
|
|
90
|
+
if (endpoint.status && excludedStatuses.includes(endpoint.status)) {
|
|
91
|
+
this.logger.debug(`[Filter] 接口状态匹配 excludedByTags,已排除: ${endpoint.status}`);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 8. 检查 folderPaths(基于文件夹路径过滤,支持前缀匹配)
|
|
96
|
+
if (filter.scope?.folderPaths && filter.scope.folderPaths.length > 0) {
|
|
97
|
+
if (!endpoint.folderPath) {
|
|
98
|
+
this.logger.debug(`[Filter] 接口缺少文件夹路径,已排除: ${endpoint.path}`);
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
const matched = filter.scope.folderPaths.some(folderPath => endpoint.isInFolder(folderPath));
|
|
102
|
+
if (!matched) {
|
|
103
|
+
this.logger.debug(`[Filter] 文件夹路径不匹配,已排除: ${endpoint.folderPath} (期望: ${filter.scope.folderPaths.join(', ')})`);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 路径模式匹配(支持通配符 * 和 **)
|
|
111
|
+
* * 匹配单层路径
|
|
112
|
+
* ** 匹配多层路径
|
|
113
|
+
* @param path 路径
|
|
114
|
+
* @param pattern 模式
|
|
115
|
+
* @returns 是否匹配
|
|
116
|
+
*/
|
|
117
|
+
matchPath(path, pattern) {
|
|
118
|
+
const regexPattern = pattern
|
|
119
|
+
.replace(/\*\*/g, '<<<DOUBLE_STAR>>>') // 临时替换 **
|
|
120
|
+
.replace(/\*/g, '[^/]+') // * 匹配单层路径(不包含 /)
|
|
121
|
+
.replace(/<<<DOUBLE_STAR>>>/g, '.*') // ** 匹配多层路径(包含 /)
|
|
122
|
+
.replace(/\//g, '\\/'); // 转义斜杠
|
|
123
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
124
|
+
return regex.test(path);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 转换状态值(支持中文到英文的映射)
|
|
128
|
+
* @param status 状态值
|
|
129
|
+
* @returns 转换后的状态值
|
|
130
|
+
*/
|
|
131
|
+
translateStatus(status) {
|
|
132
|
+
return STATUS_MAPPING[status] || status;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 路径模式匹配函数(向后兼容导出)
|
|
137
|
+
* @param path 路径
|
|
138
|
+
* @param pattern 模式
|
|
139
|
+
* @returns 是否匹配
|
|
140
|
+
*/
|
|
141
|
+
export function matchPath(path, pattern) {
|
|
142
|
+
const regexPattern = pattern
|
|
143
|
+
.replace(/\*\*/g, '<<<DOUBLE_STAR>>>')
|
|
144
|
+
.replace(/\*/g, '[^/]+')
|
|
145
|
+
.replace(/<<<DOUBLE_STAR>>>/g, '.*')
|
|
146
|
+
.replace(/\//g, '\\/');
|
|
147
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
148
|
+
return regex.test(path);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=endpoint-filter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-filter.service.js","sourceRoot":"","sources":["../../../../src/domain/services/endpoint-filter.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/domain/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OpenAPIDocument } from '../../types/openapi.js';
|
|
2
|
+
import { ApiEndpoint } from '../entities/api-endpoint.entity.js';
|
|
3
|
+
/**
|
|
4
|
+
* OpenAPI 转换器服务
|
|
5
|
+
* 负责将 OpenAPI 文档转换为 ApiEndpoint 实体
|
|
6
|
+
*/
|
|
7
|
+
export declare class OpenAPIConverterService {
|
|
8
|
+
/**
|
|
9
|
+
* 将 OpenAPI 格式转换为端点数组
|
|
10
|
+
* @param openapi OpenAPI 文档
|
|
11
|
+
* @returns 端点实体数组
|
|
12
|
+
*/
|
|
13
|
+
convert(openapi: OpenAPIDocument): ApiEndpoint[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=openapi-converter.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-converter.service.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/openapi-converter.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAGjE;;;GAGG;AACH,qBAAa,uBAAuB;IAClC;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,EAAE;CAuEjD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isParameterReference } from '../../types/openapi.js';
|
|
2
|
+
import { ApiEndpoint } from '../entities/api-endpoint.entity.js';
|
|
3
|
+
/**
|
|
4
|
+
* OpenAPI 转换器服务
|
|
5
|
+
* 负责将 OpenAPI 文档转换为 ApiEndpoint 实体
|
|
6
|
+
*/
|
|
7
|
+
export class OpenAPIConverterService {
|
|
8
|
+
/**
|
|
9
|
+
* 将 OpenAPI 格式转换为端点数组
|
|
10
|
+
* @param openapi OpenAPI 文档
|
|
11
|
+
* @returns 端点实体数组
|
|
12
|
+
*/
|
|
13
|
+
convert(openapi) {
|
|
14
|
+
const endpoints = [];
|
|
15
|
+
const paths = openapi.paths || {};
|
|
16
|
+
for (const [path, pathItem] of Object.entries(paths)) {
|
|
17
|
+
const typedPathItem = pathItem;
|
|
18
|
+
// 遍历所有可能的 HTTP 方法
|
|
19
|
+
const methods = ['get', 'post', 'put', 'delete', 'patch'];
|
|
20
|
+
for (const method of methods) {
|
|
21
|
+
const operation = typedPathItem[method];
|
|
22
|
+
if (operation) {
|
|
23
|
+
const op = operation;
|
|
24
|
+
const endpointData = {
|
|
25
|
+
path,
|
|
26
|
+
method: method.toUpperCase(),
|
|
27
|
+
name: op.summary || op.operationId || `${method} ${path}`,
|
|
28
|
+
description: op.description,
|
|
29
|
+
operationId: op.operationId,
|
|
30
|
+
tags: op.tags || [],
|
|
31
|
+
deprecated: op.deprecated || false,
|
|
32
|
+
status: op['x-apifox-status'] || '',
|
|
33
|
+
folderPath: op['x-apifox-folder'] || '',
|
|
34
|
+
parameters: op.parameters?.map(p => {
|
|
35
|
+
// 处理参数引用
|
|
36
|
+
if (isParameterReference(p)) {
|
|
37
|
+
// 如果是引用,返回基本信息(实际应该解析引用)
|
|
38
|
+
return {
|
|
39
|
+
name: '',
|
|
40
|
+
in: 'query',
|
|
41
|
+
required: false,
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: undefined,
|
|
44
|
+
schema: undefined
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const param = p;
|
|
48
|
+
const schema = param.schema && !('$ref' in param.schema)
|
|
49
|
+
? param.schema
|
|
50
|
+
: undefined;
|
|
51
|
+
return {
|
|
52
|
+
name: param.name,
|
|
53
|
+
in: param.in,
|
|
54
|
+
required: param.required || false,
|
|
55
|
+
type: schema?.type || 'string',
|
|
56
|
+
description: param.description,
|
|
57
|
+
schema: schema
|
|
58
|
+
};
|
|
59
|
+
}),
|
|
60
|
+
requestBody: op.requestBody && !('$ref' in op.requestBody)
|
|
61
|
+
? op.requestBody.content?.['application/json']?.schema
|
|
62
|
+
: undefined,
|
|
63
|
+
responseBody: op.responses?.['200'] && !('$ref' in op.responses['200'])
|
|
64
|
+
? op.responses['200'].content?.['application/json']?.schema
|
|
65
|
+
: undefined
|
|
66
|
+
};
|
|
67
|
+
endpoints.push(new ApiEndpoint(endpointData));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return endpoints;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=openapi-converter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-converter.service.js","sourceRoot":"","sources":["../../../../src/domain/services/openapi-converter.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { MockRoute } from '../entities/mock-route.entity.js';
|
|
2
|
+
/**
|
|
3
|
+
* 路由匹配器服务
|
|
4
|
+
* 负责路由匹配和参数提取
|
|
5
|
+
*/
|
|
6
|
+
export declare class RouteMatcherService {
|
|
7
|
+
/**
|
|
8
|
+
* 查找匹配的路由
|
|
9
|
+
* @param routes 路由列表
|
|
10
|
+
* @param method HTTP 方法
|
|
11
|
+
* @param path 路径
|
|
12
|
+
* @returns 匹配的路由,如果不存在则返回 undefined
|
|
13
|
+
*/
|
|
14
|
+
findMatchingRoute(routes: MockRoute[], method: string, path: string): MockRoute | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* 提取路径参数
|
|
17
|
+
* @param routePath 路由路径(带参数占位符)
|
|
18
|
+
* @param actualPath 实际路径
|
|
19
|
+
* @returns 路径参数对象
|
|
20
|
+
*/
|
|
21
|
+
extractPathParams(routePath: string, actualPath: string): Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 查找匹配的路由(向后兼容导出)
|
|
25
|
+
* @param routes 路由列表
|
|
26
|
+
* @param method HTTP 方法
|
|
27
|
+
* @param path 路径
|
|
28
|
+
* @returns 匹配的路由
|
|
29
|
+
*/
|
|
30
|
+
export declare function findMatchingRoute(routes: MockRoute[], method: string, path: string): MockRoute | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* 提取路径参数(向后兼容导出)
|
|
33
|
+
* @param routePath 路由路径
|
|
34
|
+
* @param actualPath 实际路径
|
|
35
|
+
* @returns 路径参数对象
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractPathParams(routePath: string, actualPath: string): Record<string, string>;
|
|
38
|
+
//# sourceMappingURL=route-matcher.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-matcher.service.d.ts","sourceRoot":"","sources":["../../../../src/domain/services/route-matcher.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,iBAAiB,CACf,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS;IAIxB;;;;;OAKG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAqBjF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,CAGvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGxB"}
|