@nocobase/app-server 0.11.1-alpha.4 → 2.0.0-beta.1
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/README.md +295 -0
- package/dist/application/index.d.ts +128 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +386 -0
- package/dist/application/index.js.map +1 -0
- package/dist/caching/config.d.ts +2 -0
- package/dist/caching/config.d.ts.map +1 -0
- package/dist/caching/config.js +2 -0
- package/dist/caching/config.js.map +1 -0
- package/dist/caching/index.d.ts +5 -0
- package/dist/caching/index.d.ts.map +1 -0
- package/dist/caching/index.js +4 -0
- package/dist/caching/index.js.map +1 -0
- package/dist/caching/provider.d.ts +8 -0
- package/dist/caching/provider.d.ts.map +1 -0
- package/dist/caching/provider.js +14 -0
- package/dist/caching/provider.js.map +1 -0
- package/dist/caching/token.d.ts +4 -0
- package/dist/caching/token.d.ts.map +1 -0
- package/dist/caching/token.js +3 -0
- package/dist/caching/token.js.map +1 -0
- package/dist/config/app-config-types.d.ts +44 -0
- package/dist/config/app-config-types.d.ts.map +1 -0
- package/dist/config/app-config-types.js +2 -0
- package/dist/config/app-config-types.js.map +1 -0
- package/dist/config/app-config.d.ts +60 -0
- package/dist/config/app-config.d.ts.map +1 -0
- package/dist/config/app-config.js +247 -0
- package/dist/config/app-config.js.map +1 -0
- package/dist/config/context.d.ts +3 -0
- package/dist/config/context.d.ts.map +1 -0
- package/dist/config/context.js +7 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/define-app-config.d.ts +71 -0
- package/dist/config/define-app-config.d.ts.map +1 -0
- package/dist/config/define-app-config.js +48 -0
- package/dist/config/define-app-config.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/not-configured.d.ts +23 -0
- package/dist/config/not-configured.d.ts.map +1 -0
- package/dist/config/not-configured.js +31 -0
- package/dist/config/not-configured.js.map +1 -0
- package/dist/config/paths.d.ts +27 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +27 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/placeholder-secret.d.ts +19 -0
- package/dist/config/placeholder-secret.d.ts.map +1 -0
- package/dist/config/placeholder-secret.js +26 -0
- package/dist/config/placeholder-secret.js.map +1 -0
- package/dist/config/runtime-environment.d.ts +11 -0
- package/dist/config/runtime-environment.d.ts.map +1 -0
- package/dist/config/runtime-environment.js +20 -0
- package/dist/config/runtime-environment.js.map +1 -0
- package/dist/config/types.d.ts +12 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +36 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +186 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/config/variables.d.ts +57 -0
- package/dist/config/variables.d.ts.map +1 -0
- package/dist/config/variables.js +89 -0
- package/dist/config/variables.js.map +1 -0
- package/dist/database/collections-artifact.d.ts +99 -0
- package/dist/database/collections-artifact.d.ts.map +1 -0
- package/dist/database/collections-artifact.js +397 -0
- package/dist/database/collections-artifact.js.map +1 -0
- package/dist/database/collections-directory.d.ts +36 -0
- package/dist/database/collections-directory.d.ts.map +1 -0
- package/dist/database/collections-directory.js +115 -0
- package/dist/database/collections-directory.js.map +1 -0
- package/dist/database/collections-doctor.d.ts +43 -0
- package/dist/database/collections-doctor.d.ts.map +1 -0
- package/dist/database/collections-doctor.js +88 -0
- package/dist/database/collections-doctor.js.map +1 -0
- package/dist/database/connection-check.d.ts +25 -0
- package/dist/database/connection-check.d.ts.map +1 -0
- package/dist/database/connection-check.js +65 -0
- package/dist/database/connection-check.js.map +1 -0
- package/dist/database/connection-selection.d.ts +16 -0
- package/dist/database/connection-selection.d.ts.map +1 -0
- package/dist/database/connection-selection.js +30 -0
- package/dist/database/connection-selection.js.map +1 -0
- package/dist/database/define-app-database-config.d.ts +49 -0
- package/dist/database/define-app-database-config.d.ts.map +1 -0
- package/dist/database/define-app-database-config.js +73 -0
- package/dist/database/define-app-database-config.js.map +1 -0
- package/dist/database/environment.d.ts +11 -0
- package/dist/database/environment.d.ts.map +1 -0
- package/dist/database/environment.js +49 -0
- package/dist/database/environment.js.map +1 -0
- package/dist/database/index.d.ts +17 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +16 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/manager.d.ts +16 -0
- package/dist/database/manager.d.ts.map +1 -0
- package/dist/database/manager.js +83 -0
- package/dist/database/manager.js.map +1 -0
- package/dist/database/migrator.d.ts +88 -0
- package/dist/database/migrator.d.ts.map +1 -0
- package/dist/database/migrator.js +143 -0
- package/dist/database/migrator.js.map +1 -0
- package/dist/database/ownership.d.ts +6 -0
- package/dist/database/ownership.d.ts.map +1 -0
- package/dist/database/ownership.js +50 -0
- package/dist/database/ownership.js.map +1 -0
- package/dist/database/plan.d.ts +36 -0
- package/dist/database/plan.d.ts.map +1 -0
- package/dist/database/plan.js +136 -0
- package/dist/database/plan.js.map +1 -0
- package/dist/database/provider.d.ts +43 -0
- package/dist/database/provider.d.ts.map +1 -0
- package/dist/database/provider.js +171 -0
- package/dist/database/provider.js.map +1 -0
- package/dist/database/resolve-config.d.ts +42 -0
- package/dist/database/resolve-config.d.ts.map +1 -0
- package/dist/database/resolve-config.js +118 -0
- package/dist/database/resolve-config.js.map +1 -0
- package/dist/database/seeder.d.ts +50 -0
- package/dist/database/seeder.d.ts.map +1 -0
- package/dist/database/seeder.js +117 -0
- package/dist/database/seeder.js.map +1 -0
- package/dist/database/storage.d.ts +10 -0
- package/dist/database/storage.d.ts.map +1 -0
- package/dist/database/storage.js +37 -0
- package/dist/database/storage.js.map +1 -0
- package/dist/database/task-config.d.ts +7 -0
- package/dist/database/task-config.d.ts.map +1 -0
- package/dist/database/task-config.js +19 -0
- package/dist/database/task-config.js.map +1 -0
- package/dist/database/task-container.d.ts +3 -0
- package/dist/database/task-container.d.ts.map +1 -0
- package/dist/database/task-container.js +34 -0
- package/dist/database/task-container.js.map +1 -0
- package/dist/database/tasks.d.ts +104 -0
- package/dist/database/tasks.d.ts.map +1 -0
- package/dist/database/tasks.js +350 -0
- package/dist/database/tasks.js.map +1 -0
- package/dist/database/types.d.ts +92 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/drive/config.d.ts +2 -0
- package/dist/drive/config.d.ts.map +1 -0
- package/dist/drive/config.js +2 -0
- package/dist/drive/config.js.map +1 -0
- package/dist/drive/index.d.ts +5 -0
- package/dist/drive/index.d.ts.map +1 -0
- package/dist/drive/index.js +4 -0
- package/dist/drive/index.js.map +1 -0
- package/dist/drive/provider.d.ts +9 -0
- package/dist/drive/provider.d.ts.map +1 -0
- package/dist/drive/provider.js +22 -0
- package/dist/drive/provider.js.map +1 -0
- package/dist/drive/token.d.ts +4 -0
- package/dist/drive/token.d.ts.map +1 -0
- package/dist/drive/token.js +3 -0
- package/dist/drive/token.js.map +1 -0
- package/dist/i18n/index.d.ts +37 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +44 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/id-generator/config.d.ts +2 -0
- package/dist/id-generator/config.d.ts.map +1 -0
- package/dist/id-generator/config.js +2 -0
- package/dist/id-generator/config.js.map +1 -0
- package/dist/id-generator/index.d.ts +5 -0
- package/dist/id-generator/index.d.ts.map +1 -0
- package/dist/id-generator/index.js +4 -0
- package/dist/id-generator/index.js.map +1 -0
- package/dist/id-generator/provider.d.ts +7 -0
- package/dist/id-generator/provider.d.ts.map +1 -0
- package/dist/id-generator/provider.js +11 -0
- package/dist/id-generator/provider.js.map +1 -0
- package/dist/id-generator/token.d.ts +4 -0
- package/dist/id-generator/token.d.ts.map +1 -0
- package/dist/id-generator/token.js +3 -0
- package/dist/id-generator/token.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/config.d.ts +2 -0
- package/dist/jobs/config.d.ts.map +1 -0
- package/dist/jobs/config.js +2 -0
- package/dist/jobs/config.js.map +1 -0
- package/dist/jobs/index.d.ts +4 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +4 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/provider.d.ts +23 -0
- package/dist/jobs/provider.d.ts.map +1 -0
- package/dist/jobs/provider.js +55 -0
- package/dist/jobs/provider.js.map +1 -0
- package/dist/jobs/token.d.ts +8 -0
- package/dist/jobs/token.d.ts.map +1 -0
- package/dist/jobs/token.js +7 -0
- package/dist/jobs/token.js.map +1 -0
- package/dist/logging/config.d.ts +16 -0
- package/dist/logging/config.d.ts.map +1 -0
- package/dist/logging/config.js +26 -0
- package/dist/logging/config.js.map +1 -0
- package/dist/logging/index.d.ts +5 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +5 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/middleware.d.ts +13 -0
- package/dist/logging/middleware.d.ts.map +1 -0
- package/dist/logging/middleware.js +128 -0
- package/dist/logging/middleware.js.map +1 -0
- package/dist/logging/provider.d.ts +9 -0
- package/dist/logging/provider.d.ts.map +1 -0
- package/dist/logging/provider.js +95 -0
- package/dist/logging/provider.js.map +1 -0
- package/dist/logging/token.d.ts +4 -0
- package/dist/logging/token.d.ts.map +1 -0
- package/dist/logging/token.js +3 -0
- package/dist/logging/token.js.map +1 -0
- package/dist/node/config.d.ts +6 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +2 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/index.d.ts +6 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +6 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/not-configured-message.d.ts +10 -0
- package/dist/node/not-configured-message.d.ts.map +1 -0
- package/dist/node/not-configured-message.js +24 -0
- package/dist/node/not-configured-message.js.map +1 -0
- package/dist/node/proxy.d.ts +25 -0
- package/dist/node/proxy.d.ts.map +1 -0
- package/dist/node/proxy.js +229 -0
- package/dist/node/proxy.js.map +1 -0
- package/dist/node/runtime.d.ts +45 -0
- package/dist/node/runtime.d.ts.map +1 -0
- package/dist/node/runtime.js +176 -0
- package/dist/node/runtime.js.map +1 -0
- package/dist/node/scope.d.ts +55 -0
- package/dist/node/scope.d.ts.map +1 -0
- package/dist/node/scope.js +115 -0
- package/dist/node/scope.js.map +1 -0
- package/dist/node/server.d.ts +80 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +283 -0
- package/dist/node/server.js.map +1 -0
- package/dist/plugins/define.d.ts +4 -0
- package/dist/plugins/define.d.ts.map +1 -0
- package/dist/plugins/define.js +45 -0
- package/dist/plugins/define.js.map +1 -0
- package/dist/plugins/index.d.ts +27 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/inspect.d.ts +79 -0
- package/dist/plugins/inspect.d.ts.map +1 -0
- package/dist/plugins/inspect.js +142 -0
- package/dist/plugins/inspect.js.map +1 -0
- package/dist/plugins/resolve.d.ts +14 -0
- package/dist/plugins/resolve.d.ts.map +1 -0
- package/dist/plugins/resolve.js +101 -0
- package/dist/plugins/resolve.js.map +1 -0
- package/dist/plugins/types.d.ts +91 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +8 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +59 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/index.d.ts +3 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +3 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/origin.d.ts +12 -0
- package/dist/proxy/origin.d.ts.map +1 -0
- package/dist/proxy/origin.js +61 -0
- package/dist/proxy/origin.js.map +1 -0
- package/dist/queue/config.d.ts +4 -0
- package/dist/queue/config.d.ts.map +1 -0
- package/dist/queue/config.js +2 -0
- package/dist/queue/config.js.map +1 -0
- package/dist/queue/index.d.ts +4 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +4 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/provider.d.ts +24 -0
- package/dist/queue/provider.d.ts.map +1 -0
- package/dist/queue/provider.js +57 -0
- package/dist/queue/provider.js.map +1 -0
- package/dist/queue/token.d.ts +9 -0
- package/dist/queue/token.d.ts.map +1 -0
- package/dist/queue/token.js +8 -0
- package/dist/queue/token.js.map +1 -0
- package/dist/realtime/index.d.ts +6 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +6 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/provider.d.ts +10 -0
- package/dist/realtime/provider.d.ts.map +1 -0
- package/dist/realtime/provider.js +19 -0
- package/dist/realtime/provider.js.map +1 -0
- package/dist/realtime/service.d.ts +9 -0
- package/dist/realtime/service.d.ts.map +1 -0
- package/dist/realtime/service.js +347 -0
- package/dist/realtime/service.js.map +1 -0
- package/dist/realtime/types.d.ts +74 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +4 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/realtime/websocket.d.ts +7 -0
- package/dist/realtime/websocket.d.ts.map +1 -0
- package/dist/realtime/websocket.js +57 -0
- package/dist/realtime/websocket.js.map +1 -0
- package/dist/router/api-error.d.ts +171 -0
- package/dist/router/api-error.d.ts.map +1 -0
- package/dist/router/api-error.js +291 -0
- package/dist/router/api-error.js.map +1 -0
- package/dist/router/api-limits.d.ts +80 -0
- package/dist/router/api-limits.d.ts.map +1 -0
- package/dist/router/api-limits.js +281 -0
- package/dist/router/api-limits.js.map +1 -0
- package/dist/router/cli/derive.d.ts +32 -0
- package/dist/router/cli/derive.d.ts.map +1 -0
- package/dist/router/cli/derive.js +548 -0
- package/dist/router/cli/derive.js.map +1 -0
- package/dist/router/cli/index.d.ts +6 -0
- package/dist/router/cli/index.d.ts.map +1 -0
- package/dist/router/cli/index.js +6 -0
- package/dist/router/cli/index.js.map +1 -0
- package/dist/router/cli/reference.d.ts +9 -0
- package/dist/router/cli/reference.d.ts.map +1 -0
- package/dist/router/cli/reference.js +64 -0
- package/dist/router/cli/reference.js.map +1 -0
- package/dist/router/cli/routes.d.ts +9 -0
- package/dist/router/cli/routes.d.ts.map +1 -0
- package/dist/router/cli/routes.js +228 -0
- package/dist/router/cli/routes.js.map +1 -0
- package/dist/router/cli/service.d.ts +50 -0
- package/dist/router/cli/service.d.ts.map +1 -0
- package/dist/router/cli/service.js +104 -0
- package/dist/router/cli/service.js.map +1 -0
- package/dist/router/cli/types.d.ts +278 -0
- package/dist/router/cli/types.d.ts.map +1 -0
- package/dist/router/cli/types.js +18 -0
- package/dist/router/cli/types.js.map +1 -0
- package/dist/router/duplicate-routes.d.ts +25 -0
- package/dist/router/duplicate-routes.d.ts.map +1 -0
- package/dist/router/duplicate-routes.js +51 -0
- package/dist/router/duplicate-routes.js.map +1 -0
- package/dist/router/health.d.ts +7 -0
- package/dist/router/health.d.ts.map +1 -0
- package/dist/router/health.js +48 -0
- package/dist/router/health.js.map +1 -0
- package/dist/router/index.d.ts +26 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +29 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/openapi/components.d.ts +24 -0
- package/dist/router/openapi/components.d.ts.map +1 -0
- package/dist/router/openapi/components.js +128 -0
- package/dist/router/openapi/components.js.map +1 -0
- package/dist/router/openapi/declared.d.ts +19 -0
- package/dist/router/openapi/declared.d.ts.map +1 -0
- package/dist/router/openapi/declared.js +46 -0
- package/dist/router/openapi/declared.js.map +1 -0
- package/dist/router/openapi/describe.d.ts +82 -0
- package/dist/router/openapi/describe.d.ts.map +1 -0
- package/dist/router/openapi/describe.js +207 -0
- package/dist/router/openapi/describe.js.map +1 -0
- package/dist/router/openapi/docs-routes.d.ts +10 -0
- package/dist/router/openapi/docs-routes.d.ts.map +1 -0
- package/dist/router/openapi/docs-routes.js +157 -0
- package/dist/router/openapi/docs-routes.js.map +1 -0
- package/dist/router/openapi/document.d.ts +151 -0
- package/dist/router/openapi/document.d.ts.map +1 -0
- package/dist/router/openapi/document.js +471 -0
- package/dist/router/openapi/document.js.map +1 -0
- package/dist/router/openapi/index.d.ts +7 -0
- package/dist/router/openapi/index.d.ts.map +1 -0
- package/dist/router/openapi/index.js +7 -0
- package/dist/router/openapi/index.js.map +1 -0
- package/dist/router/openapi/repository-document.d.ts +30 -0
- package/dist/router/openapi/repository-document.d.ts.map +1 -0
- package/dist/router/openapi/repository-document.js +812 -0
- package/dist/router/openapi/repository-document.js.map +1 -0
- package/dist/router/openapi/schema.d.ts +30 -0
- package/dist/router/openapi/schema.d.ts.map +1 -0
- package/dist/router/openapi/schema.js +301 -0
- package/dist/router/openapi/schema.js.map +1 -0
- package/dist/router/openapi/service.d.ts +101 -0
- package/dist/router/openapi/service.d.ts.map +1 -0
- package/dist/router/openapi/service.js +162 -0
- package/dist/router/openapi/service.js.map +1 -0
- package/dist/router/repository-constraints.d.ts +15 -0
- package/dist/router/repository-constraints.d.ts.map +1 -0
- package/dist/router/repository-constraints.js +14 -0
- package/dist/router/repository-constraints.js.map +1 -0
- package/dist/router/repository-routes.d.ts +90 -0
- package/dist/router/repository-routes.d.ts.map +1 -0
- package/dist/router/repository-routes.js +452 -0
- package/dist/router/repository-routes.js.map +1 -0
- package/dist/router/routes.d.ts +24 -0
- package/dist/router/routes.d.ts.map +1 -0
- package/dist/router/routes.js +19 -0
- package/dist/router/routes.js.map +1 -0
- package/dist/runtime/application.d.ts +8 -0
- package/dist/runtime/application.d.ts.map +1 -0
- package/dist/runtime/application.js +22 -0
- package/dist/runtime/application.js.map +1 -0
- package/dist/runtime/definition.d.ts +50 -0
- package/dist/runtime/definition.d.ts.map +1 -0
- package/dist/runtime/definition.js +82 -0
- package/dist/runtime/definition.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lifecycle.d.ts +29 -0
- package/dist/runtime/lifecycle.d.ts.map +1 -0
- package/dist/runtime/lifecycle.js +104 -0
- package/dist/runtime/lifecycle.js.map +1 -0
- package/dist/runtime/mount.d.ts +4 -0
- package/dist/runtime/mount.d.ts.map +1 -0
- package/dist/runtime/mount.js +47 -0
- package/dist/runtime/mount.js.map +1 -0
- package/dist/runtime/scope.d.ts +29 -0
- package/dist/runtime/scope.d.ts.map +1 -0
- package/dist/runtime/scope.js +48 -0
- package/dist/runtime/scope.js.map +1 -0
- package/dist/runtime/types.d.ts +55 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/sample-data/index.d.ts +3 -0
- package/dist/sample-data/index.d.ts.map +1 -0
- package/dist/sample-data/index.js +3 -0
- package/dist/sample-data/index.js.map +1 -0
- package/dist/sample-data/registry.d.ts +4 -0
- package/dist/sample-data/registry.d.ts.map +1 -0
- package/dist/sample-data/registry.js +74 -0
- package/dist/sample-data/registry.js.map +1 -0
- package/dist/sample-data/token.d.ts +64 -0
- package/dist/sample-data/token.d.ts.map +1 -0
- package/dist/sample-data/token.js +7 -0
- package/dist/sample-data/token.js.map +1 -0
- package/dist/secrets/config.d.ts +15 -0
- package/dist/secrets/config.d.ts.map +1 -0
- package/dist/secrets/config.js +43 -0
- package/dist/secrets/config.js.map +1 -0
- package/dist/secrets/index.d.ts +6 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +6 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/provider.d.ts +7 -0
- package/dist/secrets/provider.d.ts.map +1 -0
- package/dist/secrets/provider.js +10 -0
- package/dist/secrets/provider.js.map +1 -0
- package/dist/secrets/service.d.ts +64 -0
- package/dist/secrets/service.d.ts.map +1 -0
- package/dist/secrets/service.js +47 -0
- package/dist/secrets/service.js.map +1 -0
- package/dist/secrets/table-store.d.ts +34 -0
- package/dist/secrets/table-store.d.ts.map +1 -0
- package/dist/secrets/table-store.js +118 -0
- package/dist/secrets/table-store.js.map +1 -0
- package/dist/secrets/token.d.ts +4 -0
- package/dist/secrets/token.d.ts.map +1 -0
- package/dist/secrets/token.js +3 -0
- package/dist/secrets/token.js.map +1 -0
- package/dist/session/config.d.ts +10 -0
- package/dist/session/config.d.ts.map +1 -0
- package/dist/session/config.js +2 -0
- package/dist/session/config.js.map +1 -0
- package/dist/session/index.d.ts +4 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +4 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/provider.d.ts +26 -0
- package/dist/session/provider.d.ts.map +1 -0
- package/dist/session/provider.js +69 -0
- package/dist/session/provider.js.map +1 -0
- package/dist/session/token.d.ts +4 -0
- package/dist/session/token.d.ts.map +1 -0
- package/dist/session/token.js +3 -0
- package/dist/session/token.js.map +1 -0
- package/dist/spa/config.d.ts +5 -0
- package/dist/spa/config.d.ts.map +1 -0
- package/dist/spa/config.js +2 -0
- package/dist/spa/config.js.map +1 -0
- package/dist/spa/content-types.d.ts +2 -0
- package/dist/spa/content-types.d.ts.map +1 -0
- package/dist/spa/content-types.js +25 -0
- package/dist/spa/content-types.js.map +1 -0
- package/dist/spa/index.d.ts +9 -0
- package/dist/spa/index.d.ts.map +1 -0
- package/dist/spa/index.js +9 -0
- package/dist/spa/index.js.map +1 -0
- package/dist/spa/provider.d.ts +13 -0
- package/dist/spa/provider.d.ts.map +1 -0
- package/dist/spa/provider.js +90 -0
- package/dist/spa/provider.js.map +1 -0
- package/dist/spa/routes.d.ts +4 -0
- package/dist/spa/routes.d.ts.map +1 -0
- package/dist/spa/routes.js +58 -0
- package/dist/spa/routes.js.map +1 -0
- package/dist/spa/runtime-html.d.ts +14 -0
- package/dist/spa/runtime-html.d.ts.map +1 -0
- package/dist/spa/runtime-html.js +85 -0
- package/dist/spa/runtime-html.js.map +1 -0
- package/dist/spa/serve-index.d.ts +9 -0
- package/dist/spa/serve-index.d.ts.map +1 -0
- package/dist/spa/serve-index.js +12 -0
- package/dist/spa/serve-index.js.map +1 -0
- package/dist/spa/static-assets.d.ts +7 -0
- package/dist/spa/static-assets.d.ts.map +1 -0
- package/dist/spa/static-assets.js +90 -0
- package/dist/spa/static-assets.js.map +1 -0
- package/dist/spa/types.d.ts +23 -0
- package/dist/spa/types.d.ts.map +1 -0
- package/dist/spa/types.js +2 -0
- package/dist/spa/types.js.map +1 -0
- package/dist/support/index.d.ts +4 -0
- package/dist/support/index.d.ts.map +1 -0
- package/dist/support/index.js +4 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/paths.d.ts +10 -0
- package/dist/support/paths.d.ts.map +1 -0
- package/dist/support/paths.js +25 -0
- package/dist/support/paths.js.map +1 -0
- package/dist/support/redirects.d.ts +3 -0
- package/dist/support/redirects.d.ts.map +1 -0
- package/dist/support/redirects.js +48 -0
- package/dist/support/redirects.js.map +1 -0
- package/dist/support/requests.d.ts +2 -0
- package/dist/support/requests.d.ts.map +1 -0
- package/dist/support/requests.js +13 -0
- package/dist/support/requests.js.map +1 -0
- package/dist/swagger-ui/LICENSE +202 -0
- package/dist/swagger-ui/NOTICE +2 -0
- package/dist/swagger-ui/favicon-16x16.png +0 -0
- package/dist/swagger-ui/favicon-32x32.png +0 -0
- package/dist/swagger-ui/swagger-ui-bundle.js +2 -0
- package/dist/swagger-ui/swagger-ui-bundle.js.LICENSE.txt +129 -0
- package/dist/swagger-ui/swagger-ui.css +3 -0
- package/dist/websocket.d.ts +61 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +371 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +193 -12
- package/LICENSE +0 -661
- package/lib/config/cache.d.ts +0 -2
- package/lib/config/cache.js +0 -16
- package/lib/config/database.d.ts +0 -3
- package/lib/config/database.js +0 -25
- package/lib/config/index.d.ts +0 -10
- package/lib/config/index.js +0 -20
- package/lib/config/logger.d.ts +0 -3
- package/lib/config/logger.js +0 -11
- package/lib/config/plugins.d.ts +0 -3
- package/lib/config/plugins.js +0 -8
- package/lib/config/resourcer.d.ts +0 -4
- package/lib/config/resourcer.js +0 -10
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -21
- package/src/config/cache.ts +0 -5
- package/src/config/database.ts +0 -21
- package/src/config/index.ts +0 -13
- package/src/config/logger.ts +0 -6
- package/src/config/plugins.ts +0 -3
- package/src/config/resourcer.ts +0 -3
- package/src/index.ts +0 -10
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { apiErrorStatusCodes } from '../api-error.js';
|
|
2
|
+
const schemaRef = (name) => ({
|
|
3
|
+
$ref: `#/components/schemas/${name}`,
|
|
4
|
+
});
|
|
5
|
+
/** The HTTP statuses that have a shared error response component, with the component's name. */
|
|
6
|
+
export const apiErrorResponseNames = Object.freeze({
|
|
7
|
+
400: 'BadRequest',
|
|
8
|
+
401: 'Unauthenticated',
|
|
9
|
+
403: 'PermissionDenied',
|
|
10
|
+
404: 'NotFound',
|
|
11
|
+
409: 'Conflict',
|
|
12
|
+
413: 'PayloadTooLarge',
|
|
13
|
+
415: 'UnsupportedMediaType',
|
|
14
|
+
429: 'TooManyRequests',
|
|
15
|
+
500: 'InternalError',
|
|
16
|
+
501: 'NotImplemented',
|
|
17
|
+
503: 'Unavailable',
|
|
18
|
+
504: 'DeadlineExceeded',
|
|
19
|
+
});
|
|
20
|
+
const errorDescriptions = {
|
|
21
|
+
400: 'The request is invalid (`INVALID_ARGUMENT`, with `fieldViolations` naming each invalid field) or the resource state forbids it (`FAILED_PRECONDITION`).',
|
|
22
|
+
401: 'No valid session or API key (`UNAUTHENTICATED`).',
|
|
23
|
+
403: 'The caller may not do this (`PERMISSION_DENIED`).',
|
|
24
|
+
404: 'The resource the URL names does not exist (`NOT_FOUND`).',
|
|
25
|
+
409: 'The resource already exists (`ALREADY_EXISTS`) or a concurrent change won (`ABORTED`).',
|
|
26
|
+
413: 'The request body exceeds a size limit (`INVALID_ARGUMENT`, reason `BODY_TOO_LARGE`).',
|
|
27
|
+
415: 'The request content type is not supported (`INVALID_ARGUMENT`).',
|
|
28
|
+
429: 'A rate limit or quota was exceeded (`RESOURCE_EXHAUSTED`); wait for `Retry-After`.',
|
|
29
|
+
500: 'An unexpected failure (`INTERNAL`); the body reveals nothing about its cause.',
|
|
30
|
+
501: 'The operation is not implemented (`UNIMPLEMENTED`).',
|
|
31
|
+
503: 'A dependency is unavailable (`UNAVAILABLE`); retrying later may succeed.',
|
|
32
|
+
504: 'The operation did not finish in time (`DEADLINE_EXCEEDED`).',
|
|
33
|
+
};
|
|
34
|
+
/** The schemas and responses every API document carries: the standard error body and list metadata. */
|
|
35
|
+
export function apiDocumentBaseComponents() {
|
|
36
|
+
const responses = {};
|
|
37
|
+
for (const [code, name] of Object.entries(apiErrorResponseNames)) {
|
|
38
|
+
responses[name] = {
|
|
39
|
+
description: errorDescriptions[Number(code)],
|
|
40
|
+
content: { 'application/json': { schema: schemaRef('ApiErrorBody') } },
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
responses[invalidInputResponseName] = {
|
|
44
|
+
description: invalidInputDescription,
|
|
45
|
+
content: { 'application/json': { schema: schemaRef('ApiErrorBody') } },
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
schemas: {
|
|
49
|
+
ApiFieldViolation: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
description: 'One invalid field in a request.',
|
|
52
|
+
required: ['field', 'description'],
|
|
53
|
+
properties: {
|
|
54
|
+
field: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'Path to the field, such as `releaseId` or `items.2.name`.',
|
|
57
|
+
},
|
|
58
|
+
description: { type: 'string' },
|
|
59
|
+
reason: { type: 'string' },
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
ApiErrorPayload: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
required: ['code', 'status', 'reason', 'domain', 'message'],
|
|
65
|
+
properties: {
|
|
66
|
+
code: { type: 'integer', description: 'The HTTP status.' },
|
|
67
|
+
status: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
enum: Object.keys(apiErrorStatusCodes),
|
|
70
|
+
description: 'The canonical error category; it decides the HTTP status.',
|
|
71
|
+
},
|
|
72
|
+
reason: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'What went wrong, in UPPER_SNAKE_CASE, unique within `domain`. Clients branch on this.',
|
|
75
|
+
},
|
|
76
|
+
domain: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
description: 'Who defined `reason`: a plugin namespace, or `app` for the framework.',
|
|
79
|
+
},
|
|
80
|
+
message: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
description: 'Developer-facing English text. Never shown to users or parsed by clients.',
|
|
83
|
+
},
|
|
84
|
+
localizedMessage: {
|
|
85
|
+
type: 'object',
|
|
86
|
+
required: ['locale', 'message'],
|
|
87
|
+
properties: {
|
|
88
|
+
locale: { type: 'string' },
|
|
89
|
+
message: { type: 'string' },
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
fieldViolations: {
|
|
93
|
+
type: 'array',
|
|
94
|
+
items: schemaRef('ApiFieldViolation'),
|
|
95
|
+
},
|
|
96
|
+
metadata: { type: 'object', additionalProperties: true },
|
|
97
|
+
requestId: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
description: 'The id also sent in the `x-request-id` response header.',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
ApiErrorBody: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
description: 'The body of every failed `/api` response.',
|
|
106
|
+
required: ['error'],
|
|
107
|
+
properties: { error: schemaRef('ApiErrorPayload') },
|
|
108
|
+
},
|
|
109
|
+
ApiListMeta: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
description: 'List metadata. A list pages by `pageToken` (answering `nextPageToken`, absent on the last page) or by `page` (answering `page`, `pageSize` and `total`); an unpaged configuration list answers `total`. A list may add fields of its own.',
|
|
112
|
+
properties: {
|
|
113
|
+
total: { type: 'integer', minimum: 0 },
|
|
114
|
+
page: { type: 'integer', minimum: 1 },
|
|
115
|
+
pageSize: { type: 'integer', minimum: 1 },
|
|
116
|
+
nextPageToken: { type: 'string' },
|
|
117
|
+
},
|
|
118
|
+
additionalProperties: true,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
responses,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** The description of the 400 a route answers when `apiValidator()` rejects its input. */
|
|
125
|
+
export const invalidInputDescription = 'The request does not match the parameters or body this operation accepts (`INVALID_ARGUMENT`, reason `INVALID_INPUT`, with `fieldViolations` naming each invalid field).';
|
|
126
|
+
/** The shared response `apiValidator()` failures are documented with: the 400 every route with a validator can answer. */
|
|
127
|
+
export const invalidInputResponseName = 'InvalidInput';
|
|
128
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/router/openapi/components.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import type { DescribeRouteOptions } from 'hono-openapi';
|
|
3
|
+
/**
|
|
4
|
+
* What `describeRoute()` declares for the route answering `context`, merged over the handlers registered with it (its
|
|
5
|
+
* method and path); undefined when it declares nothing. A middleware reads it before the route runs, such as
|
|
6
|
+
* authentication deciding whether the route accepts a credential. The route is the first one at or after the running
|
|
7
|
+
* handler that is not a middleware for every method, so a sibling path that also matches (`/agents/{agentId}` beside
|
|
8
|
+
* `/agents/available`) never lends it its declaration.
|
|
9
|
+
*/
|
|
10
|
+
export declare function declaredRouteOf(context: Context): DescribeRouteOptions | undefined;
|
|
11
|
+
/** Whether the route answering `context` lists `scheme` among its own security requirements. */
|
|
12
|
+
export declare function routeAcceptsScheme(context: Context, scheme: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The business action the route answering `context` declares in its `x-cli` extension (`cliRoute({ action })`);
|
|
15
|
+
* undefined when it declares none. A route that accepts an agent's run names the action it performs, and the
|
|
16
|
+
* application checks the run holds it before the route runs.
|
|
17
|
+
*/
|
|
18
|
+
export declare function declaredRouteActionOf(context: Context): string | undefined;
|
|
19
|
+
//# sourceMappingURL=declared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared.d.ts","sourceRoot":"","sources":["../../../src/router/openapi/declared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAMzD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,GACf,oBAAoB,GAAG,SAAS,CAalC;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO1E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { matchedRoutes } from 'hono/route';
|
|
2
|
+
import { describeSpecOf } from './document.js';
|
|
3
|
+
/**
|
|
4
|
+
* What `describeRoute()` declares for the route answering `context`, merged over the handlers registered with it (its
|
|
5
|
+
* method and path); undefined when it declares nothing. A middleware reads it before the route runs, such as
|
|
6
|
+
* authentication deciding whether the route accepts a credential. The route is the first one at or after the running
|
|
7
|
+
* handler that is not a middleware for every method, so a sibling path that also matches (`/agents/{agentId}` beside
|
|
8
|
+
* `/agents/available`) never lends it its declaration.
|
|
9
|
+
*/
|
|
10
|
+
export function declaredRouteOf(context) {
|
|
11
|
+
const routes = matchedRoutes(context);
|
|
12
|
+
let index = context.req.routeIndex;
|
|
13
|
+
while (index < routes.length && routes[index]?.method === 'ALL')
|
|
14
|
+
index += 1;
|
|
15
|
+
const target = routes[index];
|
|
16
|
+
if (!target)
|
|
17
|
+
return undefined;
|
|
18
|
+
let declared;
|
|
19
|
+
for (const route of routes) {
|
|
20
|
+
if (route.method !== target.method || route.path !== target.path)
|
|
21
|
+
continue;
|
|
22
|
+
const spec = describeSpecOf(route.handler);
|
|
23
|
+
if (spec)
|
|
24
|
+
declared = { ...declared, ...spec };
|
|
25
|
+
}
|
|
26
|
+
return declared;
|
|
27
|
+
}
|
|
28
|
+
/** Whether the route answering `context` lists `scheme` among its own security requirements. */
|
|
29
|
+
export function routeAcceptsScheme(context, scheme) {
|
|
30
|
+
const security = declaredRouteOf(context)?.security ?? [];
|
|
31
|
+
return security.some((requirement) => scheme in requirement);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The business action the route answering `context` declares in its `x-cli` extension (`cliRoute({ action })`);
|
|
35
|
+
* undefined when it declares none. A route that accepts an agent's run names the action it performs, and the
|
|
36
|
+
* application checks the run holds it before the route runs.
|
|
37
|
+
*/
|
|
38
|
+
export function declaredRouteActionOf(context) {
|
|
39
|
+
const declared = declaredRouteOf(context);
|
|
40
|
+
const cli = declared?.['x-cli'];
|
|
41
|
+
if (!cli || typeof cli !== 'object')
|
|
42
|
+
return undefined;
|
|
43
|
+
const { action } = cli;
|
|
44
|
+
return typeof action === 'string' ? action : undefined;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=declared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared.js","sourceRoot":"","sources":["../../../src/router/openapi/declared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAgB;IAEhB,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC,OAAO,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,KAAK;QAAE,KAAK,IAAI,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,QAA0C,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;YAAE,SAAS;QAC3E,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,MAAc;IACjE,MAAM,QAAQ,GACZ,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC3C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,QAAQ,GACZ,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAY,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAoC,CAAC;IACxD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import type { Env, MiddlewareHandler, ValidationTargets } from 'hono';
|
|
3
|
+
import { type ResolverReturnType, type ResponsesWithResolver } from 'hono-openapi';
|
|
4
|
+
import type { InferInput } from 'hono/validator';
|
|
5
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
6
|
+
import { type ApiErrorResponseCode } from './components.js';
|
|
7
|
+
import { type ApiSchemaDirection } from './schema.js';
|
|
8
|
+
/**
|
|
9
|
+
* Route metadata for the API document. Plugins take these from `@nocobase/app-server/router` and never import
|
|
10
|
+
* `hono-openapi` themselves: the metadata is attached to middleware under a symbol that module owns, so a second copy
|
|
11
|
+
* of it would attach metadata the document generator cannot see.
|
|
12
|
+
*/
|
|
13
|
+
export { describeRoute, type DescribeRouteOptions, type ResolverReturnType, } from 'hono-openapi';
|
|
14
|
+
export type { OpenAPIV3_1 } from 'openapi-types';
|
|
15
|
+
/** One entry of `describeRoute({ responses })`: a response object whose schemas may be `resolver()` results. */
|
|
16
|
+
export type ApiResponseObject = ResponsesWithResolver[string];
|
|
17
|
+
/** A schema a response helper accepts: a Standard Schema such as a zod schema, or an OpenAPI schema or reference. */
|
|
18
|
+
export type ApiSchema = StandardSchemaV1 | OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject;
|
|
19
|
+
type HasUndefined<T> = undefined extends T ? true : false;
|
|
20
|
+
/** The input `apiValidator(target, schema)` adds to a route, so `context.req.valid(target)` is typed by the schema. */
|
|
21
|
+
export interface ApiValidatorInput<Schema extends StandardSchemaV1, Target extends keyof ValidationTargets> {
|
|
22
|
+
in: HasUndefined<StandardSchemaV1.InferInput<Schema>> extends true ? {
|
|
23
|
+
[K in Target]?: [StandardSchemaV1.InferInput<Schema>] extends [
|
|
24
|
+
ValidationTargets[K]
|
|
25
|
+
] ? StandardSchemaV1.InferInput<Schema> : InferInput<StandardSchemaV1.InferInput<Schema>, K>;
|
|
26
|
+
} : {
|
|
27
|
+
[K in Target]: [StandardSchemaV1.InferInput<Schema>] extends [
|
|
28
|
+
ValidationTargets[K]
|
|
29
|
+
] ? StandardSchemaV1.InferInput<Schema> : InferInput<StandardSchemaV1.InferInput<Schema>, K>;
|
|
30
|
+
};
|
|
31
|
+
out: {
|
|
32
|
+
[K in Target]: StandardSchemaV1.InferOutput<Schema>;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface ApiValidatorOptions {
|
|
36
|
+
/** The request media type to document for a `json` or `form` body, when it is not the default. */
|
|
37
|
+
readonly media?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A Standard Schema prepared for `describeRoute({ responses })` or `requestBody`, converted under the document's
|
|
41
|
+
* conventions: definitions become components under stable names, a property keeps its own description next to the
|
|
42
|
+
* `$ref` of a shared schema, and a response object is open unless the schema is strict. The response helpers use it
|
|
43
|
+
* already; reach for it only for content they do not cover, such as a streaming media type.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolver(schema: StandardSchemaV1, direction?: ApiSchemaDirection): ResolverReturnType;
|
|
46
|
+
/**
|
|
47
|
+
* Validate one part of the request — `param`, `query`, `json`, `header`, `form` or `cookie` — against a Standard Schema
|
|
48
|
+
* such as a zod schema, and declare that schema in the API document. An invalid request is answered `400
|
|
49
|
+
* INVALID_ARGUMENT` with reason `INVALID_INPUT`, domain `app`, and a field violation per issue before the handler
|
|
50
|
+
* runs, exactly as `parseApiInput()` answers; the handler reads the parsed value from `context.req.valid(target)`.
|
|
51
|
+
* Because of that, the document lists the 400 for invalid input on every route with a validator, without the route
|
|
52
|
+
* declaring it.
|
|
53
|
+
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* router.post('/orders/:orderId/cancel', describeRoute({ ... }), apiValidator('param', OrderParams), apiValidator('json', CancelOrderInput), handler);
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function apiValidator<Schema extends StandardSchemaV1, Target extends keyof ValidationTargets, E extends Env = Env, P extends string = string>(target: Target, schema: Schema, options?: ApiValidatorOptions): MiddlewareHandler<E, P, ApiValidatorInput<Schema, Target>>;
|
|
59
|
+
/** A `200`-style JSON response whose body is `{ data }`, `data` being described by `schema`. */
|
|
60
|
+
export declare function dataResponse(schema: ApiSchema, description?: string): ApiResponseObject;
|
|
61
|
+
/**
|
|
62
|
+
* A JSON list response, `{ data: [...], meta }`. `itemSchema` describes one element; `metaSchema` defaults to the
|
|
63
|
+
* shared `ApiListMeta` (`total`, `page`, `pageSize`, `nextPageToken`).
|
|
64
|
+
*/
|
|
65
|
+
export declare function listResponse(itemSchema: ApiSchema, metaSchema?: ApiSchema, description?: string): ApiResponseObject;
|
|
66
|
+
/** A response without a body, such as a `204`. */
|
|
67
|
+
export declare function emptyResponse(description?: string): ApiResponseObject;
|
|
68
|
+
/**
|
|
69
|
+
* The shared error response for one HTTP status, in the standard error body. Without `description` it refers to the
|
|
70
|
+
* shared component; with one it describes when this route answers that status.
|
|
71
|
+
*/
|
|
72
|
+
export declare function apiErrorResponse(code: ApiErrorResponseCode, description?: string): ApiResponseObject;
|
|
73
|
+
/**
|
|
74
|
+
* The error responses of an authenticated route that checks a permission: no session or API key, refused permission
|
|
75
|
+
* and an unexpected failure. Spread them into `responses` and add the route's own, such as `apiErrorResponse(404)`. A
|
|
76
|
+
* route without a permission check lists `apiErrorResponse(401)` and `apiErrorResponse(500)` instead, and a public one
|
|
77
|
+
* only `apiErrorResponse(500)`. There is no 400 here: a route with an `apiValidator()` gets the 400 for invalid input
|
|
78
|
+
* in the document automatically, and lists `apiErrorResponse(400, description)` itself only for another reason, such
|
|
79
|
+
* as a failed precondition.
|
|
80
|
+
*/
|
|
81
|
+
export declare const apiErrorResponses: Readonly<Record<'401' | '403' | '500', ApiResponseObject>>;
|
|
82
|
+
//# sourceMappingURL=describe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../../src/router/openapi/describe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,gHAAgH;AAChH,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAE9D,qHAAqH;AACrH,MAAM,MAAM,SAAS,GACnB,gBAAgB,GAAG,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,eAAe,CAAC;AAI5E,KAAK,YAAY,CAAC,CAAC,IAAI,SAAS,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,uHAAuH;AACvH,MAAM,WAAW,iBAAiB,CAChC,MAAM,SAAS,gBAAgB,EAC/B,MAAM,SAAS,MAAM,iBAAiB;IAEtC,EAAE,EAAE,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAC9D;SACG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS;YAC5D,iBAAiB,CAAC,CAAC,CAAC;SACrB,GACG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,GACnC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACvD,GACD;SACG,CAAC,IAAI,MAAM,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS;YAC3D,iBAAiB,CAAC,CAAC,CAAC;SACrB,GACG,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,GACnC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACvD,CAAC;IACN,GAAG,EAAE;SAAG,CAAC,IAAI,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC;KAAE,CAAC;CAC9D;AAED,MAAM,WAAW,mBAAmB;IAClC,kGAAkG;IAClG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,kBAA6B,GACvC,kBAAkB,CAcpB;AAgDD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,SAAS,gBAAgB,EAC/B,MAAM,SAAS,MAAM,iBAAiB,EACtC,CAAC,SAAS,GAAG,GAAG,GAAG,EACnB,CAAC,SAAS,MAAM,GAAG,MAAM,EAEzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,mBAAmB,GAC5B,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwB5D;AA0DD,gGAAgG;AAChG,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,WAAW,GAAE,MAAmB,GAC/B,iBAAiB,CAanB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,SAAS,EACtB,WAAW,GAAE,MAAmB,GAC/B,iBAAiB,CAsBnB;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAC3B,WAAW,GAAE,MAAsB,GAClC,iBAAiB,CAEnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,iBAAiB,CAYnB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CACtC,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,iBAAiB,CAAC,CAKhD,CAAC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { uniqueSymbol, validator, } from 'hono-openapi';
|
|
2
|
+
import { invalidApiInputError } from '../api-error.js';
|
|
3
|
+
import { apiErrorResponseNames, } from './components.js';
|
|
4
|
+
import { convertApiSchema, } from './schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Route metadata for the API document. Plugins take these from `@nocobase/app-server/router` and never import
|
|
7
|
+
* `hono-openapi` themselves: the metadata is attached to middleware under a symbol that module owns, so a second copy
|
|
8
|
+
* of it would attach metadata the document generator cannot see.
|
|
9
|
+
*/
|
|
10
|
+
export { describeRoute, } from 'hono-openapi';
|
|
11
|
+
/**
|
|
12
|
+
* A Standard Schema prepared for `describeRoute({ responses })` or `requestBody`, converted under the document's
|
|
13
|
+
* conventions: definitions become components under stable names, a property keeps its own description next to the
|
|
14
|
+
* `$ref` of a shared schema, and a response object is open unless the schema is strict. The response helpers use it
|
|
15
|
+
* already; reach for it only for content they do not cover, such as a streaming media type.
|
|
16
|
+
*/
|
|
17
|
+
export function resolver(schema, direction = 'output') {
|
|
18
|
+
return {
|
|
19
|
+
vendor: schema['~standard'].vendor,
|
|
20
|
+
validate: schema['~standard'].validate,
|
|
21
|
+
toJSONSchema: async () => (await convertApiSchema(schema, direction)).schema,
|
|
22
|
+
toOpenAPISchema: async () => {
|
|
23
|
+
const converted = await convertApiSchema(schema, direction);
|
|
24
|
+
return {
|
|
25
|
+
schema: converted.schema,
|
|
26
|
+
components: converted.components,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// OpenAPI ignores a header parameter with one of these names: the request body's media type and the accepted ones
|
|
32
|
+
// are described by the operation, and credentials by its security requirements.
|
|
33
|
+
const ignoredHeaderParameters = new Set([
|
|
34
|
+
'accept',
|
|
35
|
+
'authorization',
|
|
36
|
+
'content-type',
|
|
37
|
+
]);
|
|
38
|
+
function withoutIgnoredHeaders(converted) {
|
|
39
|
+
let schema = converted.schema;
|
|
40
|
+
const schemas = { ...converted.components?.schemas };
|
|
41
|
+
const ref = schema.$ref?.startsWith('#/components/schemas/')
|
|
42
|
+
? schema.$ref.slice('#/components/schemas/'.length)
|
|
43
|
+
: undefined;
|
|
44
|
+
if (ref !== undefined && schemas[ref]) {
|
|
45
|
+
schema = { ...schemas[ref] };
|
|
46
|
+
delete schemas[ref];
|
|
47
|
+
}
|
|
48
|
+
const properties = Object.entries(schema.properties ?? {}).filter(([name]) => !ignoredHeaderParameters.has(name.toLowerCase()));
|
|
49
|
+
if (ref === undefined &&
|
|
50
|
+
properties.length === Object.keys(schema.properties ?? {}).length) {
|
|
51
|
+
return converted;
|
|
52
|
+
}
|
|
53
|
+
const required = schema.required?.filter((name) => !ignoredHeaderParameters.has(name.toLowerCase()));
|
|
54
|
+
return {
|
|
55
|
+
schema: {
|
|
56
|
+
...schema,
|
|
57
|
+
properties: Object.fromEntries(properties),
|
|
58
|
+
...(required ? { required } : {}),
|
|
59
|
+
},
|
|
60
|
+
components: Object.keys(schemas).length > 0
|
|
61
|
+
? { ...converted.components, schemas }
|
|
62
|
+
: undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validate one part of the request — `param`, `query`, `json`, `header`, `form` or `cookie` — against a Standard Schema
|
|
67
|
+
* such as a zod schema, and declare that schema in the API document. An invalid request is answered `400
|
|
68
|
+
* INVALID_ARGUMENT` with reason `INVALID_INPUT`, domain `app`, and a field violation per issue before the handler
|
|
69
|
+
* runs, exactly as `parseApiInput()` answers; the handler reads the parsed value from `context.req.valid(target)`.
|
|
70
|
+
* Because of that, the document lists the 400 for invalid input on every route with a validator, without the route
|
|
71
|
+
* declaring it.
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* router.post('/orders/:orderId/cancel', describeRoute({ ... }), apiValidator('param', OrderParams), apiValidator('json', CancelOrderInput), handler);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export function apiValidator(target, schema, options) {
|
|
78
|
+
const middleware = validator(target, schema, (result) => {
|
|
79
|
+
if (!result.success)
|
|
80
|
+
throw invalidApiInputError(result.error);
|
|
81
|
+
}, options);
|
|
82
|
+
// Document the schema the way the response helpers do, rather than with hono-openapi's own conversion.
|
|
83
|
+
const metadata = middleware[uniqueSymbol];
|
|
84
|
+
const input = resolver(schema, 'input');
|
|
85
|
+
metadata.toJSONSchema = input.toJSONSchema;
|
|
86
|
+
metadata.toOpenAPISchema = async () => {
|
|
87
|
+
const converted = await convertApiSchema(schema, 'input');
|
|
88
|
+
return target === 'header' ? withoutIgnoredHeaders(converted) : converted;
|
|
89
|
+
};
|
|
90
|
+
return middleware;
|
|
91
|
+
}
|
|
92
|
+
function isStandardSchema(schema) {
|
|
93
|
+
return typeof schema === 'object' && schema !== null && '~standard' in schema;
|
|
94
|
+
}
|
|
95
|
+
async function resolveParts(parts) {
|
|
96
|
+
const schemas = {};
|
|
97
|
+
let components;
|
|
98
|
+
for (const [key, part] of Object.entries(parts)) {
|
|
99
|
+
if (!isStandardSchema(part)) {
|
|
100
|
+
schemas[key] = part;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
// Responses describe what the server sends, so a schema with a transform documents its output.
|
|
104
|
+
const result = await convertApiSchema(part, 'output');
|
|
105
|
+
schemas[key] = result.schema;
|
|
106
|
+
const collected = { ...result.components?.schemas };
|
|
107
|
+
if (Object.keys(collected).length > 0) {
|
|
108
|
+
components = {
|
|
109
|
+
...components,
|
|
110
|
+
schemas: { ...components?.schemas, ...collected },
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { schemas, components };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* A `resolver()`-shaped value whose OpenAPI schema is built from several schemas, each a Standard Schema or a plain
|
|
118
|
+
* OpenAPI schema, resolved when the document is generated.
|
|
119
|
+
*/
|
|
120
|
+
function composeSchema(parts, build) {
|
|
121
|
+
return {
|
|
122
|
+
vendor: 'nocobase',
|
|
123
|
+
validate: (value) => ({ value }),
|
|
124
|
+
toJSONSchema: async () => build((await resolveParts(parts)).schemas),
|
|
125
|
+
toOpenAPISchema: async () => {
|
|
126
|
+
const resolved = await resolveParts(parts);
|
|
127
|
+
return {
|
|
128
|
+
schema: build(resolved.schemas),
|
|
129
|
+
components: resolved.components,
|
|
130
|
+
};
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** A `200`-style JSON response whose body is `{ data }`, `data` being described by `schema`. */
|
|
135
|
+
export function dataResponse(schema, description = 'Success.') {
|
|
136
|
+
return {
|
|
137
|
+
description,
|
|
138
|
+
content: {
|
|
139
|
+
'application/json': {
|
|
140
|
+
schema: composeSchema({ data: schema }, ({ data }) => ({
|
|
141
|
+
type: 'object',
|
|
142
|
+
required: ['data'],
|
|
143
|
+
properties: { data: data },
|
|
144
|
+
})),
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* A JSON list response, `{ data: [...], meta }`. `itemSchema` describes one element; `metaSchema` defaults to the
|
|
151
|
+
* shared `ApiListMeta` (`total`, `page`, `pageSize`, `nextPageToken`).
|
|
152
|
+
*/
|
|
153
|
+
export function listResponse(itemSchema, metaSchema, description = 'Success.') {
|
|
154
|
+
return {
|
|
155
|
+
description,
|
|
156
|
+
content: {
|
|
157
|
+
'application/json': {
|
|
158
|
+
schema: composeSchema({
|
|
159
|
+
item: itemSchema,
|
|
160
|
+
meta: metaSchema ?? { $ref: '#/components/schemas/ApiListMeta' },
|
|
161
|
+
}, ({ item, meta }) => ({
|
|
162
|
+
type: 'object',
|
|
163
|
+
required: ['data', 'meta'],
|
|
164
|
+
properties: {
|
|
165
|
+
data: { type: 'array', items: item },
|
|
166
|
+
meta: meta,
|
|
167
|
+
},
|
|
168
|
+
})),
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/** A response without a body, such as a `204`. */
|
|
174
|
+
export function emptyResponse(description = 'No content.') {
|
|
175
|
+
return { description };
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The shared error response for one HTTP status, in the standard error body. Without `description` it refers to the
|
|
179
|
+
* shared component; with one it describes when this route answers that status.
|
|
180
|
+
*/
|
|
181
|
+
export function apiErrorResponse(code, description) {
|
|
182
|
+
if (description === undefined) {
|
|
183
|
+
return { $ref: `#/components/responses/${apiErrorResponseNames[code]}` };
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
description,
|
|
187
|
+
content: {
|
|
188
|
+
'application/json': {
|
|
189
|
+
schema: { $ref: '#/components/schemas/ApiErrorBody' },
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The error responses of an authenticated route that checks a permission: no session or API key, refused permission
|
|
196
|
+
* and an unexpected failure. Spread them into `responses` and add the route's own, such as `apiErrorResponse(404)`. A
|
|
197
|
+
* route without a permission check lists `apiErrorResponse(401)` and `apiErrorResponse(500)` instead, and a public one
|
|
198
|
+
* only `apiErrorResponse(500)`. There is no 400 here: a route with an `apiValidator()` gets the 400 for invalid input
|
|
199
|
+
* in the document automatically, and lists `apiErrorResponse(400, description)` itself only for another reason, such
|
|
200
|
+
* as a failed precondition.
|
|
201
|
+
*/
|
|
202
|
+
export const apiErrorResponses = Object.freeze({
|
|
203
|
+
'401': apiErrorResponse(401),
|
|
204
|
+
'403': apiErrorResponse(403),
|
|
205
|
+
'500': apiErrorResponse(500),
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../src/router/openapi/describe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import type { ApiDocsService } from './service.js';
|
|
3
|
+
/** The Swagger UI files the page loads, with their content types. The build copies exactly these into `dist/swagger-ui`. */
|
|
4
|
+
export declare const swaggerUiAssets: Readonly<Record<string, string>>;
|
|
5
|
+
/**
|
|
6
|
+
* `GET /swagger` (the OpenAPI document), `GET /swagger/docs` (Swagger UI) and the page's files, mounted under `/api`.
|
|
7
|
+
* Every one is hidden from the document it serves and guarded by the service's access checks.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createApiDocsRouter(service: ApiDocsService): Hono;
|
|
10
|
+
//# sourceMappingURL=docs-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-routes.d.ts","sourceRoot":"","sources":["../../../src/router/openapi/docs-routes.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAA0B,MAAM,MAAM,CAAC;AAUpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,4HAA4H;AAC5H,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK3D,CAAC;AAkGH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA8DjE"}
|