@nocobase/app-server 0.11.1-alpha.5 → 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 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-secret.js","sourceRoot":"","sources":["../../src/config/placeholder-secret.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,KAAyB;IAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,kBAAkB,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAyB,EACzB,GAAW;IAEX,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,IAAI,KAAK,CACb,GAAG,GAAG,gJAAgJ,CACvJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RuntimeEnvironmentVariable {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly description: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Environment variables the runtime reads itself rather than through a section's `env`. With the sections'
|
|
7
|
+
* declarations they are everything an application can be configured with from its environment, which is what
|
|
8
|
+
* `pnpm nocobase config env` lists and what `.env.example` may name.
|
|
9
|
+
*/
|
|
10
|
+
export declare const RUNTIME_ENVIRONMENT_VARIABLES: readonly RuntimeEnvironmentVariable[];
|
|
11
|
+
//# sourceMappingURL=runtime-environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-environment.d.ts","sourceRoot":"","sources":["../../src/config/runtime-environment.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,SAAS,0BAA0B,EAgB5E,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variables the runtime reads itself rather than through a section's `env`. With the sections'
|
|
3
|
+
* declarations they are everything an application can be configured with from its environment, which is what
|
|
4
|
+
* `pnpm nocobase config env` lists and what `.env.example` may name.
|
|
5
|
+
*/
|
|
6
|
+
export const RUNTIME_ENVIRONMENT_VARIABLES = [
|
|
7
|
+
{
|
|
8
|
+
name: 'APP_BASE_PATH',
|
|
9
|
+
description: 'The path the application is served under; its name follows from it.',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'APP_CONFIG_FILE',
|
|
13
|
+
description: 'The configuration file to read instead of config.yml in the deployment root.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'NOCOBASE_STRICT_STARTUP',
|
|
17
|
+
description: 'Set to true to exit the process as soon as startup fails.',
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
//# sourceMappingURL=runtime-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-environment.js","sourceRoot":"","sources":["../../src/config/runtime-environment.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GACxC;IACE;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,qEAAqE;KACxE;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EACT,8EAA8E;KACjF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,2DAA2D;KACzE;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type EnvMap = Record<string, string | undefined>;
|
|
2
|
+
export type { AppPaths } from './paths.js';
|
|
3
|
+
import type { AppPaths } from './paths.js';
|
|
4
|
+
export interface ConfigContext {
|
|
5
|
+
readonly environment: EnvMap;
|
|
6
|
+
readonly paths: AppPaths;
|
|
7
|
+
}
|
|
8
|
+
export interface CreateConfigContextOptions {
|
|
9
|
+
readonly env: EnvMap;
|
|
10
|
+
readonly paths: AppPaths;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAExD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ConfigMap } from '@nocobase/config';
|
|
2
|
+
import type { AppConfigRules } from './define-app-config.js';
|
|
3
|
+
export interface ConfigIssue {
|
|
4
|
+
readonly level: 'error' | 'warning';
|
|
5
|
+
/** The full path, such as `auth.emailAndPassword.disableSignUp`. */
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
readonly fix?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The configuration breaks a rule its sections declare.
|
|
12
|
+
*
|
|
13
|
+
* Carries every issue found, warnings included, so a caller can report all of them at once rather than one per start.
|
|
14
|
+
* Recognised by `name` as well as by class, so a second copy of this package in the process is still recognised.
|
|
15
|
+
*/
|
|
16
|
+
export declare class AppConfigInvalidError extends Error {
|
|
17
|
+
readonly issues: readonly ConfigIssue[];
|
|
18
|
+
constructor(issues: readonly ConfigIssue[]);
|
|
19
|
+
}
|
|
20
|
+
/** Whether `error`, or anything in its cause chain, is an {@link AppConfigInvalidError}. */
|
|
21
|
+
export declare function findAppConfigInvalid(error: unknown): AppConfigInvalidError | undefined;
|
|
22
|
+
export declare function formatConfigIssues(issues: readonly ConfigIssue[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Runs every section's validators against the merged configuration, and checks each section's public paths.
|
|
25
|
+
*
|
|
26
|
+
* Issues are collected rather than thrown, so one run reports everything that is wrong.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateConfigSections(current: ConfigMap, overrides: ConfigMap, sections: ReadonlyMap<string, AppConfigRules>): Promise<ConfigIssue[]>;
|
|
29
|
+
/**
|
|
30
|
+
* The values sections publish, nested under their section name. A path with no value is left out, so the browser
|
|
31
|
+
* sees `undefined` and falls back to its own default.
|
|
32
|
+
*/
|
|
33
|
+
export declare function collectPublicConfig(current: ConfigMap, sections: ReadonlyMap<string, AppConfigRules>): ConfigMap;
|
|
34
|
+
/** Every published path, in full, such as `auth.emailAndPassword.disableSignUp`. */
|
|
35
|
+
export declare function listPublicPaths(sections: ReadonlyMap<string, AppConfigRules>): string[];
|
|
36
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;gBAE5B,MAAM,EAAE,SAAS,WAAW,EAAE;CAKlD;AAED,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,qBAAqB,GAAG,SAAS,CAWnC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAOzE;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAC5C,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAC5C,SAAS,CAYX;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAC5C,MAAM,EAAE,CAIV"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The configuration breaks a rule its sections declare.
|
|
3
|
+
*
|
|
4
|
+
* Carries every issue found, warnings included, so a caller can report all of them at once rather than one per start.
|
|
5
|
+
* Recognised by `name` as well as by class, so a second copy of this package in the process is still recognised.
|
|
6
|
+
*/
|
|
7
|
+
export class AppConfigInvalidError extends Error {
|
|
8
|
+
issues;
|
|
9
|
+
constructor(issues) {
|
|
10
|
+
super(formatConfigIssues(issues));
|
|
11
|
+
this.name = 'AppConfigInvalidError';
|
|
12
|
+
this.issues = issues;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Whether `error`, or anything in its cause chain, is an {@link AppConfigInvalidError}. */
|
|
16
|
+
export function findAppConfigInvalid(error) {
|
|
17
|
+
let current = error;
|
|
18
|
+
for (let depth = 0; depth < 5 && current instanceof Error; depth += 1) {
|
|
19
|
+
if (current instanceof AppConfigInvalidError ||
|
|
20
|
+
current.name === 'AppConfigInvalidError')
|
|
21
|
+
return current;
|
|
22
|
+
current = current.cause;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
export function formatConfigIssues(issues) {
|
|
27
|
+
const errors = issues.filter((issue) => issue.level === 'error');
|
|
28
|
+
const lines = errors.map((issue) => ` ✖ ${issue.path} ${issue.message}${issue.fix ? `\n ${issue.fix}` : ''}`);
|
|
29
|
+
return ['Application configuration is invalid:', ...lines].join('\n');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Runs every section's validators against the merged configuration, and checks each section's public paths.
|
|
33
|
+
*
|
|
34
|
+
* Issues are collected rather than thrown, so one run reports everything that is wrong.
|
|
35
|
+
*/
|
|
36
|
+
export async function validateConfigSections(current, overrides, sections) {
|
|
37
|
+
const issues = [];
|
|
38
|
+
for (const [section, rules] of sections) {
|
|
39
|
+
issues.push(...publicPathIssues(current, section, rules.public));
|
|
40
|
+
const value = readPath(current, [section]);
|
|
41
|
+
const context = createValidationContext(section, overrides, issues);
|
|
42
|
+
for (const validator of rules.validators) {
|
|
43
|
+
try {
|
|
44
|
+
await validator(value ?? {}, context);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
issues.push({
|
|
48
|
+
level: 'error',
|
|
49
|
+
path: section,
|
|
50
|
+
message: `validation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return issues;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The values sections publish, nested under their section name. A path with no value is left out, so the browser
|
|
59
|
+
* sees `undefined` and falls back to its own default.
|
|
60
|
+
*/
|
|
61
|
+
export function collectPublicConfig(current, sections) {
|
|
62
|
+
const output = {};
|
|
63
|
+
for (const [section, rules] of sections) {
|
|
64
|
+
for (const relative of rules.public) {
|
|
65
|
+
if (!relative || !isValidPublicPath(relative))
|
|
66
|
+
continue;
|
|
67
|
+
const segments = [section, ...splitPath(relative)];
|
|
68
|
+
const value = readPath(current, segments);
|
|
69
|
+
if (value === undefined || !isPublishableLeaf(value))
|
|
70
|
+
continue;
|
|
71
|
+
writePath(output, segments, value);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return output;
|
|
75
|
+
}
|
|
76
|
+
/** Every published path, in full, such as `auth.emailAndPassword.disableSignUp`. */
|
|
77
|
+
export function listPublicPaths(sections) {
|
|
78
|
+
return [...sections].flatMap(([section, rules]) => rules.public.map((relative) => `${section}.${relative}`));
|
|
79
|
+
}
|
|
80
|
+
function createValidationContext(section, overrides, issues) {
|
|
81
|
+
const push = (level, path, message, options = {}) => {
|
|
82
|
+
issues.push({
|
|
83
|
+
level,
|
|
84
|
+
path: path ? `${section}.${path}` : section,
|
|
85
|
+
message,
|
|
86
|
+
...(options.fix ? { fix: options.fix } : {}),
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
error: (path, message, options) => push('error', path, message, options),
|
|
91
|
+
warning: (path, message, options) => push('warning', path, message, options),
|
|
92
|
+
isUserProvided: (path) => readPath(overrides, [section, ...splitPath(path)]) !== undefined,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function publicPathIssues(current, section, paths) {
|
|
96
|
+
const issues = [];
|
|
97
|
+
for (const relative of paths) {
|
|
98
|
+
const full = relative ? `${section}.${relative}` : section;
|
|
99
|
+
if (!relative) {
|
|
100
|
+
issues.push({
|
|
101
|
+
level: 'error',
|
|
102
|
+
path: section,
|
|
103
|
+
message: 'cannot be published as a whole: name each field to expose instead.',
|
|
104
|
+
});
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (!isValidPublicPath(relative)) {
|
|
108
|
+
issues.push({
|
|
109
|
+
level: 'error',
|
|
110
|
+
path: full,
|
|
111
|
+
message: 'is not a valid public path.',
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const value = readPath(current, [section, ...splitPath(relative)]);
|
|
116
|
+
if (value === undefined)
|
|
117
|
+
continue;
|
|
118
|
+
if (typeof value === 'function' || !isPublishableLeaf(value)) {
|
|
119
|
+
issues.push({
|
|
120
|
+
level: 'error',
|
|
121
|
+
path: full,
|
|
122
|
+
message: isPlainObject(value)
|
|
123
|
+
? 'cannot be published: name each field to expose instead of the whole object.'
|
|
124
|
+
: 'cannot be published: only plain values can reach the browser.',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return issues;
|
|
129
|
+
}
|
|
130
|
+
function isPublishableLeaf(value) {
|
|
131
|
+
if (value === null ||
|
|
132
|
+
typeof value === 'string' ||
|
|
133
|
+
typeof value === 'boolean' ||
|
|
134
|
+
(typeof value === 'number' && Number.isFinite(value))) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
return (Array.isArray(value) &&
|
|
138
|
+
value.every((item) => item === null ||
|
|
139
|
+
typeof item === 'string' ||
|
|
140
|
+
typeof item === 'boolean' ||
|
|
141
|
+
(typeof item === 'number' && Number.isFinite(item))));
|
|
142
|
+
}
|
|
143
|
+
function isPlainObject(value) {
|
|
144
|
+
return (typeof value === 'object' &&
|
|
145
|
+
value !== null &&
|
|
146
|
+
!Array.isArray(value) &&
|
|
147
|
+
(Object.getPrototypeOf(value) === Object.prototype ||
|
|
148
|
+
Object.getPrototypeOf(value) === null));
|
|
149
|
+
}
|
|
150
|
+
const FORBIDDEN_SEGMENTS = new Set([
|
|
151
|
+
'__proto__',
|
|
152
|
+
'prototype',
|
|
153
|
+
'constructor',
|
|
154
|
+
]);
|
|
155
|
+
function splitPath(path) {
|
|
156
|
+
return path ? path.split('.') : [];
|
|
157
|
+
}
|
|
158
|
+
function isValidPublicPath(path) {
|
|
159
|
+
return splitPath(path).every((segment) => segment !== '' && !FORBIDDEN_SEGMENTS.has(segment));
|
|
160
|
+
}
|
|
161
|
+
function readPath(root, segments) {
|
|
162
|
+
let value = root;
|
|
163
|
+
for (const segment of segments) {
|
|
164
|
+
if (!isPlainObject(value) || !Object.hasOwn(value, segment)) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
value = value[segment];
|
|
168
|
+
}
|
|
169
|
+
return value;
|
|
170
|
+
}
|
|
171
|
+
function writePath(root, segments, value) {
|
|
172
|
+
let target = root;
|
|
173
|
+
for (const segment of segments.slice(0, -1)) {
|
|
174
|
+
const existing = target[segment];
|
|
175
|
+
if (isPlainObject(existing)) {
|
|
176
|
+
target = existing;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const child = {};
|
|
180
|
+
target[segment] = child;
|
|
181
|
+
target = child;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
target[segments[segments.length - 1]] = value;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ConfigMap } from '@nocobase/config';
|
|
2
|
+
import { type EnvironmentMapping, type EnvironmentValueGenerator } from '@nocobase/config/providers/env';
|
|
3
|
+
/**
|
|
4
|
+
* Values the templates' `config.example.yml` ship that only stand in for a real one. A path holding one of them in the
|
|
5
|
+
* example counts as having no value there, so a deployment is still asked for it. The application itself is not told:
|
|
6
|
+
* an example copied by hand keeps working exactly as before.
|
|
7
|
+
*/
|
|
8
|
+
export declare const KNOWN_EXAMPLE_PLACEHOLDERS: readonly string[];
|
|
9
|
+
/** One variable in the manifest. `runtime` marks one the runtime reads itself rather than through a section. */
|
|
10
|
+
export interface VariablesManifestEntry {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly path?: string;
|
|
13
|
+
readonly type: string;
|
|
14
|
+
readonly description?: string;
|
|
15
|
+
readonly secret: boolean;
|
|
16
|
+
readonly required: boolean;
|
|
17
|
+
/** The code defaults hold a value at the path. */
|
|
18
|
+
readonly hasDefault: boolean;
|
|
19
|
+
/** `config.example.yml` holds a value at the path that is not a known placeholder. */
|
|
20
|
+
readonly exampleProvided: boolean;
|
|
21
|
+
readonly firstStartOnly: boolean;
|
|
22
|
+
readonly generate: EnvironmentValueGenerator | null;
|
|
23
|
+
readonly runtime?: true;
|
|
24
|
+
}
|
|
25
|
+
/** `dist/variables.json`: every environment variable an application reads, as a deployment needs to know them. */
|
|
26
|
+
export interface VariablesManifest {
|
|
27
|
+
readonly schemaVersion: 1;
|
|
28
|
+
readonly app: {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly version?: string;
|
|
31
|
+
};
|
|
32
|
+
readonly generatedAt: string;
|
|
33
|
+
readonly variables: readonly VariablesManifestEntry[];
|
|
34
|
+
}
|
|
35
|
+
export interface BuildVariablesManifestOptions {
|
|
36
|
+
readonly app: {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly version?: string;
|
|
39
|
+
};
|
|
40
|
+
/** What `AppConfig.environmentVariableMappings()` returns: absolute paths. */
|
|
41
|
+
readonly variables: Readonly<Record<string, EnvironmentMapping>>;
|
|
42
|
+
/** The code defaults, `AppConfig.layers().defaults`. */
|
|
43
|
+
readonly defaults: ConfigMap;
|
|
44
|
+
/** `config.example.yml`, parsed; left out when the application ships none. */
|
|
45
|
+
readonly example?: ConfigMap;
|
|
46
|
+
readonly generatedAt?: Date;
|
|
47
|
+
}
|
|
48
|
+
/** Whether a value, or any string inside it, is one of {@link KNOWN_EXAMPLE_PLACEHOLDERS}. */
|
|
49
|
+
export declare function isExamplePlaceholder(value: unknown): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Whether a deployment must supply a variable: the mapping says so, or else nothing else would give the path a value —
|
|
52
|
+
* no code default, no real value in `config.example.yml`, and no way for the deployment to generate one.
|
|
53
|
+
*/
|
|
54
|
+
export declare function requiredOf(mapping: EnvironmentMapping, defaults: ConfigMap, example: ConfigMap | undefined): boolean;
|
|
55
|
+
/** Builds the manifest `pnpm nocobase config variables` prints and `pnpm build` writes to `dist/variables.json`. */
|
|
56
|
+
export declare function buildVariablesManifest(options: BuildVariablesManifestOptions): VariablesManifest;
|
|
57
|
+
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/config/variables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AAKxC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAGvD,CAAC;AAEF,gHAAgH;AAChH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;CACzB;AAED,kHAAkH;AAClH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACvD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACjE,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;CAC7B;AAED,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAC7B,OAAO,CAOT;AAED,oHAAoH;AACpH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,iBAAiB,CAqCnB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isSecretPath, } from '@nocobase/config/providers/env';
|
|
2
|
+
import { PLACEHOLDER_SECRET } from './placeholder-secret.js';
|
|
3
|
+
import { RUNTIME_ENVIRONMENT_VARIABLES } from './runtime-environment.js';
|
|
4
|
+
/**
|
|
5
|
+
* Values the templates' `config.example.yml` ship that only stand in for a real one. A path holding one of them in the
|
|
6
|
+
* example counts as having no value there, so a deployment is still asked for it. The application itself is not told:
|
|
7
|
+
* an example copied by hand keeps working exactly as before.
|
|
8
|
+
*/
|
|
9
|
+
export const KNOWN_EXAMPLE_PLACEHOLDERS = [
|
|
10
|
+
PLACEHOLDER_SECRET,
|
|
11
|
+
'admin123',
|
|
12
|
+
];
|
|
13
|
+
/** Whether a value, or any string inside it, is one of {@link KNOWN_EXAMPLE_PLACEHOLDERS}. */
|
|
14
|
+
export function isExamplePlaceholder(value) {
|
|
15
|
+
if (typeof value === 'string')
|
|
16
|
+
return KNOWN_EXAMPLE_PLACEHOLDERS.includes(value.trim());
|
|
17
|
+
if (Array.isArray(value))
|
|
18
|
+
return value.some(isExamplePlaceholder);
|
|
19
|
+
if (typeof value === 'object' && value !== null)
|
|
20
|
+
return Object.values(value).some(isExamplePlaceholder);
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether a deployment must supply a variable: the mapping says so, or else nothing else would give the path a value —
|
|
25
|
+
* no code default, no real value in `config.example.yml`, and no way for the deployment to generate one.
|
|
26
|
+
*/
|
|
27
|
+
export function requiredOf(mapping, defaults, example) {
|
|
28
|
+
if (mapping.required !== undefined)
|
|
29
|
+
return mapping.required;
|
|
30
|
+
return (!hasValue(defaults, mapping.path) &&
|
|
31
|
+
!hasRealValue(example, mapping.path) &&
|
|
32
|
+
mapping.generate === undefined);
|
|
33
|
+
}
|
|
34
|
+
/** Builds the manifest `pnpm nocobase config variables` prints and `pnpm build` writes to `dist/variables.json`. */
|
|
35
|
+
export function buildVariablesManifest(options) {
|
|
36
|
+
const declared = Object.entries(options.variables)
|
|
37
|
+
.map(([name, mapping]) => ({
|
|
38
|
+
name,
|
|
39
|
+
path: mapping.path,
|
|
40
|
+
type: mapping.type ?? 'string',
|
|
41
|
+
...(mapping.description === undefined
|
|
42
|
+
? {}
|
|
43
|
+
: { description: mapping.description }),
|
|
44
|
+
secret: mapping.secret ?? isSecretPath(mapping.path),
|
|
45
|
+
required: requiredOf(mapping, options.defaults, options.example),
|
|
46
|
+
hasDefault: hasValue(options.defaults, mapping.path),
|
|
47
|
+
exampleProvided: hasRealValue(options.example, mapping.path),
|
|
48
|
+
firstStartOnly: mapping.firstStartOnly ?? false,
|
|
49
|
+
generate: mapping.generate ?? null,
|
|
50
|
+
}))
|
|
51
|
+
.sort((a, b) => a.path.localeCompare(b.path));
|
|
52
|
+
const runtime = RUNTIME_ENVIRONMENT_VARIABLES.map((variable) => ({
|
|
53
|
+
name: variable.name,
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: variable.description,
|
|
56
|
+
secret: false,
|
|
57
|
+
required: false,
|
|
58
|
+
hasDefault: false,
|
|
59
|
+
exampleProvided: false,
|
|
60
|
+
firstStartOnly: false,
|
|
61
|
+
generate: null,
|
|
62
|
+
runtime: true,
|
|
63
|
+
}));
|
|
64
|
+
return {
|
|
65
|
+
schemaVersion: 1,
|
|
66
|
+
app: options.app,
|
|
67
|
+
generatedAt: (options.generatedAt ?? new Date()).toISOString(),
|
|
68
|
+
variables: [...declared, ...runtime],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function valueAt(map, path) {
|
|
72
|
+
let value = map;
|
|
73
|
+
for (const segment of path.split('.')) {
|
|
74
|
+
if (typeof value !== 'object' || value === null)
|
|
75
|
+
return undefined;
|
|
76
|
+
value = value[segment];
|
|
77
|
+
}
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
function hasValue(map, path) {
|
|
81
|
+
const value = valueAt(map, path);
|
|
82
|
+
if (Array.isArray(value))
|
|
83
|
+
return value.length > 0;
|
|
84
|
+
return value !== undefined && value !== null && value !== '';
|
|
85
|
+
}
|
|
86
|
+
function hasRealValue(map, path) {
|
|
87
|
+
return hasValue(map, path) && !isExamplePlaceholder(valueAt(map, path));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/config/variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { type DatabaseDriverRegistration, type DatabaseManager } from '@nocobase/db';
|
|
2
|
+
import type { AppPaths } from '../config/index.js';
|
|
3
|
+
import type { AppDatabaseTasksResult } from './tasks.js';
|
|
4
|
+
import type { AppDatabaseConfig } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Reads every Collection a connection resolves and writes it under
|
|
7
|
+
* `database/<connection>/collections/<name>/` as three files, plus a
|
|
8
|
+
* connection-level manifest. The directory is a cache for every connection,
|
|
9
|
+
* external ones included: nothing here is read back at runtime, the generator
|
|
10
|
+
* may rewrite or delete any of it, and migrations — or, for an external
|
|
11
|
+
* connection, the database it points at and its hand-written
|
|
12
|
+
* `database/<connection>/metadata/` — remain the authority.
|
|
13
|
+
*/
|
|
14
|
+
export interface AppCollectionsArtifactOptions {
|
|
15
|
+
readonly paths?: AppPaths;
|
|
16
|
+
readonly drivers?: Record<string, DatabaseDriverRegistration>;
|
|
17
|
+
/** One connection; defaults to the default connection. Exclusive with `all`. */
|
|
18
|
+
readonly connection?: string;
|
|
19
|
+
/** Every configured connection, external ones included. */
|
|
20
|
+
readonly all?: boolean;
|
|
21
|
+
/** Compare the generated result with the files on disk and write nothing. */
|
|
22
|
+
readonly check?: boolean;
|
|
23
|
+
/** Reuse an open manager instead of creating and destroying one. */
|
|
24
|
+
readonly database?: DatabaseManager;
|
|
25
|
+
}
|
|
26
|
+
export type AppCollectionsArtifactDifferenceKind = 'missing' | 'stale' | 'unexpected';
|
|
27
|
+
/** One file that differs between the database and the directory; `path` is relative to the collections directory. */
|
|
28
|
+
export interface AppCollectionsArtifactDifference {
|
|
29
|
+
path: string;
|
|
30
|
+
kind: AppCollectionsArtifactDifferenceKind;
|
|
31
|
+
}
|
|
32
|
+
export interface AppCollectionsArtifactManifestSummary {
|
|
33
|
+
dialect: string;
|
|
34
|
+
/** An `external` connection has no migration history, so `migrationHead` is always `null` there. */
|
|
35
|
+
schemaManagement: 'managed' | 'external';
|
|
36
|
+
migrationHead: string | null;
|
|
37
|
+
collections: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface AppCollectionsArtifactConnectionResult {
|
|
40
|
+
connection: string;
|
|
41
|
+
/** Absolute path of `database/<connection>/collections`. */
|
|
42
|
+
directory: string;
|
|
43
|
+
status: 'completed' | 'stale' | 'failed';
|
|
44
|
+
manifest?: AppCollectionsArtifactManifestSummary;
|
|
45
|
+
/** Files created or rewritten, relative to `directory`. Empty in check mode. */
|
|
46
|
+
written?: string[];
|
|
47
|
+
/** Files removed because their Collection no longer exists. Empty in check mode. */
|
|
48
|
+
deleted?: string[];
|
|
49
|
+
/** Collections whose three files already matched. */
|
|
50
|
+
unchanged?: number;
|
|
51
|
+
/** Check mode only. */
|
|
52
|
+
differences?: AppCollectionsArtifactDifference[];
|
|
53
|
+
/**
|
|
54
|
+
* Check mode only. False when `directory` does not exist: nothing has been
|
|
55
|
+
* generated for this connection yet, which a reader has to tell apart from
|
|
56
|
+
* artifacts that have drifted, because every expected file is then reported
|
|
57
|
+
* `missing` and the two look alike.
|
|
58
|
+
*/
|
|
59
|
+
directoryExists?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Hand-written metadata documents, in this connection's metadata directory,
|
|
62
|
+
* that name a Collection the database does not have. Reported for a person
|
|
63
|
+
* to fix or remove; the generator never touches that directory.
|
|
64
|
+
*/
|
|
65
|
+
unusedMetadata?: string[];
|
|
66
|
+
error?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface AppCollectionsArtifactResult {
|
|
69
|
+
ok: boolean;
|
|
70
|
+
status: 'completed' | 'stale' | 'failed' | 'not-configured';
|
|
71
|
+
check: boolean;
|
|
72
|
+
results: AppCollectionsArtifactConnectionResult[];
|
|
73
|
+
}
|
|
74
|
+
export declare function generateAppCollectionsArtifact(config: AppDatabaseConfig, options?: AppCollectionsArtifactOptions): Promise<AppCollectionsArtifactResult>;
|
|
75
|
+
/** How one connection's Collection cache refresh went, after the migrations that made it stale. */
|
|
76
|
+
export interface AppCollectionsRefreshResult {
|
|
77
|
+
connection: string;
|
|
78
|
+
status: 'completed' | 'failed';
|
|
79
|
+
written?: string[];
|
|
80
|
+
deleted?: string[];
|
|
81
|
+
error?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface RefreshAppCollectionsArtifactOptions {
|
|
84
|
+
readonly paths?: AppPaths;
|
|
85
|
+
/** The manager the migrations ran on, so the cache reads the state they left behind. */
|
|
86
|
+
readonly database: DatabaseManager;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Regenerates the Collection cache of every connection whose schema a
|
|
90
|
+
* database run changed: migrations executed, rolled back, or rebuilt from
|
|
91
|
+
* empty. Seeds write rows, never structure, and a preview changes nothing, so
|
|
92
|
+
* neither triggers a refresh. Returns `undefined` when nothing changed.
|
|
93
|
+
*
|
|
94
|
+
* A failure is reported in the result, never raised: the migrations it
|
|
95
|
+
* follows are already committed, and the cache can always be rebuilt with
|
|
96
|
+
* `collections generate`.
|
|
97
|
+
*/
|
|
98
|
+
export declare function refreshAppCollectionsArtifact(config: AppDatabaseConfig, result: AppDatabaseTasksResult, options: RefreshAppCollectionsArtifactOptions): Promise<AppCollectionsRefreshResult[] | undefined>;
|
|
99
|
+
//# sourceMappingURL=collections-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-artifact.d.ts","sourceRoot":"","sources":["../../src/database/collections-artifact.ts"],"names":[],"mappings":"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"}
|