@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,171 @@
|
|
|
1
|
+
import { ServiceProvider, } from '@nocobase/service-provider';
|
|
2
|
+
import { databaseManagerToken } from '@nocobase/db';
|
|
3
|
+
import { realpathSync } from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { refreshAppCollectionsArtifact } from './collections-artifact.js';
|
|
6
|
+
import { createAppDatabaseManager } from './manager.js';
|
|
7
|
+
import { executeAppDatabasePlan, } from './tasks.js';
|
|
8
|
+
import { defaultConnectionName, planAppDatabaseTasks, } from './plan.js';
|
|
9
|
+
import { prepareAppDatabaseStorage } from './storage.js';
|
|
10
|
+
import { createAppSeeder } from './seeder.js';
|
|
11
|
+
import { createTaskServiceResolver } from './task-container.js';
|
|
12
|
+
import { snapshotDatabaseTaskConfig } from './task-config.js';
|
|
13
|
+
import { createSampleDataService } from '../sample-data/registry.js';
|
|
14
|
+
import { sampleDataToken } from '../sample-data/token.js';
|
|
15
|
+
import { loggingToken } from '../logging/token.js';
|
|
16
|
+
/**
|
|
17
|
+
* Set by `nocobase dev` on the server process it starts, to that
|
|
18
|
+
* application's root. Naming the root rather than switching the behavior on
|
|
19
|
+
* matters for a Hub: applications it hosts in the same process see the same
|
|
20
|
+
* environment, and their directories are deployed revisions a cache must not
|
|
21
|
+
* be written into.
|
|
22
|
+
*/
|
|
23
|
+
export const COLLECTIONS_REFRESH_ENV = 'NOCOBASE_COLLECTIONS_REFRESH';
|
|
24
|
+
export class DatabaseProvider extends ServiceProvider {
|
|
25
|
+
name = '@nocobase/app-server/database';
|
|
26
|
+
register() {
|
|
27
|
+
// Registered even without a database, so a plugin can always register its samples; they then never run.
|
|
28
|
+
if (!this.app.container.has(sampleDataToken)) {
|
|
29
|
+
this.app.container.singleton(sampleDataToken, () => createSampleDataService());
|
|
30
|
+
}
|
|
31
|
+
const config = this.getDatabaseConfig();
|
|
32
|
+
if (config.default === 'none') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.app.container.singleton(databaseManagerToken, () => {
|
|
36
|
+
const database = createAppDatabaseManager(config, this.app.paths);
|
|
37
|
+
if (!database) {
|
|
38
|
+
throw new Error('Database is not configured.');
|
|
39
|
+
}
|
|
40
|
+
return database;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async boot() {
|
|
44
|
+
const { container } = this.app;
|
|
45
|
+
if (!container.has(databaseManagerToken)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const config = this.getDatabaseConfig();
|
|
49
|
+
const plan = planAppDatabaseTasks(config, ['migrations', 'seeds'], {
|
|
50
|
+
paths: this.app.paths,
|
|
51
|
+
contributions: this.app.databaseTaskContributions,
|
|
52
|
+
autoRun: true,
|
|
53
|
+
});
|
|
54
|
+
// All SQLite connections must be usable by runtime services even without automatic tasks.
|
|
55
|
+
await prepareAppDatabaseStorage(config, this.app.paths, Object.keys(config.connections));
|
|
56
|
+
const database = container.resolve(databaseManagerToken);
|
|
57
|
+
const result = await executeAppDatabasePlan(database, config, plan, {
|
|
58
|
+
runtimeConfig: this.app.config,
|
|
59
|
+
container: this.app.container,
|
|
60
|
+
paths: this.app.paths,
|
|
61
|
+
});
|
|
62
|
+
this.reportChecksumWarnings(result);
|
|
63
|
+
this.prepareSampleData(config, plan, result, database);
|
|
64
|
+
await this.refreshCollections(config, result, database);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Tells the sample data service where samples are recorded — the default connection's seed history — and whether
|
|
68
|
+
* this start installed that connection with `app.sampleData` set. Without a seeds run on the default connection,
|
|
69
|
+
* nothing is prepared and no sample is built or recorded.
|
|
70
|
+
*/
|
|
71
|
+
prepareSampleData(config, plan, result, database) {
|
|
72
|
+
const { container } = this.app;
|
|
73
|
+
if (!container.has(sampleDataToken))
|
|
74
|
+
return;
|
|
75
|
+
const connection = defaultConnectionName(config);
|
|
76
|
+
const task = plan.find((entry) => entry.kind === 'seeds' &&
|
|
77
|
+
entry.connection === connection &&
|
|
78
|
+
!entry.skipReason);
|
|
79
|
+
const seeded = result.results.find((entry) => entry.kind === 'seeds' &&
|
|
80
|
+
entry.connection === connection &&
|
|
81
|
+
entry.status === 'completed');
|
|
82
|
+
if (!task || !seeded)
|
|
83
|
+
return;
|
|
84
|
+
const seeder = createAppSeeder({
|
|
85
|
+
runtimeConfig: snapshotDatabaseTaskConfig(this.app.config),
|
|
86
|
+
container: createTaskServiceResolver(container),
|
|
87
|
+
database,
|
|
88
|
+
connection: task.connection,
|
|
89
|
+
config: task.config,
|
|
90
|
+
sources: task.config.sources,
|
|
91
|
+
});
|
|
92
|
+
container.resolve(sampleDataToken).prepare({
|
|
93
|
+
ledger: {
|
|
94
|
+
history: () => seeder.history(),
|
|
95
|
+
record: (entry) => seeder.record(entry),
|
|
96
|
+
},
|
|
97
|
+
enabled: seeded.freshInstall === true &&
|
|
98
|
+
this.app.config.get('app.sampleData') === true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Startup migrations make `database/<connection>/collections/` stale just
|
|
103
|
+
* as `db apply` does, and under `nocobase dev` they are the usual cause. So
|
|
104
|
+
* the development server refreshes the cache of every connection they
|
|
105
|
+
* changed. Nothing else does: production never sets the variable.
|
|
106
|
+
*/
|
|
107
|
+
async refreshCollections(config, result, database) {
|
|
108
|
+
const target = process.env[COLLECTIONS_REFRESH_ENV];
|
|
109
|
+
if (!target || !sameDirectory(target, this.app.paths.root()))
|
|
110
|
+
return;
|
|
111
|
+
const refreshed = await refreshAppCollectionsArtifact(config, result, {
|
|
112
|
+
paths: this.app.paths,
|
|
113
|
+
database,
|
|
114
|
+
});
|
|
115
|
+
for (const entry of refreshed ?? []) {
|
|
116
|
+
if (entry.status !== 'failed')
|
|
117
|
+
continue;
|
|
118
|
+
const message = `Could not refresh the Collection cache of "${entry.connection}": ${entry.error}. Run "nocobase collections generate --connection ${entry.connection}" to rebuild it.`;
|
|
119
|
+
if (this.app.container.has(loggingToken)) {
|
|
120
|
+
this.app.container
|
|
121
|
+
.resolve(loggingToken)
|
|
122
|
+
.getLogger('database')
|
|
123
|
+
.warn({ connection: entry.connection }, message);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
console.warn(message);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Automatic startup tasks have no console to report to, so drift tolerated by
|
|
132
|
+
* the `warn` policy is only visible if it reaches the application log.
|
|
133
|
+
*/
|
|
134
|
+
reportChecksumWarnings(result) {
|
|
135
|
+
const { container } = this.app;
|
|
136
|
+
if (!container.has(loggingToken))
|
|
137
|
+
return;
|
|
138
|
+
let logger;
|
|
139
|
+
for (const entry of result.results) {
|
|
140
|
+
for (const warning of entry.warnings ?? []) {
|
|
141
|
+
logger ??= container.resolve(loggingToken).getLogger('database');
|
|
142
|
+
logger.warn({
|
|
143
|
+
connection: entry.connection,
|
|
144
|
+
kind: entry.kind,
|
|
145
|
+
package: warning.packageName,
|
|
146
|
+
name: warning.name,
|
|
147
|
+
recordedChecksum: warning.recordedChecksum,
|
|
148
|
+
sourceChecksum: warning.sourceChecksum,
|
|
149
|
+
}, `Executed ${entry.kind === 'migrations' ? 'migration' : 'seed'} "${warning.name}" no longer matches its source. Run "nocobase db repair" when the edit left the schema identical, or "nocobase db redo" when it changed what ran.`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async shutdown() {
|
|
154
|
+
await this.app.container.resolveIfCreated(databaseManagerToken)?.destroy();
|
|
155
|
+
}
|
|
156
|
+
getDatabaseConfig() {
|
|
157
|
+
return this.app.config.get('database');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function sameDirectory(left, right) {
|
|
161
|
+
const resolve = (directory) => {
|
|
162
|
+
try {
|
|
163
|
+
return realpathSync(directory);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return path.resolve(directory);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
return resolve(left) === resolve(right);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/database/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAwB,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,sBAAsB,GAEvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAenD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAEtE,MAAM,OAAO,gBAAiB,SAAQ,eAA4C;IAChE,IAAI,GAAW,+BAA+B,CAAC;IAE/C,QAAQ;QACtB,wGAAwG;QACxG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,CACjD,uBAAuB,EAAE,CAC1B,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACtD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEe,KAAK,CAAC,IAAI;QACxB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE;YACjE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACrB,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,yBAAyB;YACjD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,0FAA0F;QAC1F,MAAM,yBAAyB,CAC7B,MAAM,EACN,IAAI,CAAC,GAAG,CAAC,KAAK,EACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAChC,CAAC;QACF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;YAClE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;YAC7B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CACvB,MAAyB,EACzB,IAAgC,EAChC,MAA8B,EAC9B,QAAyB;QAEzB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;YAAE,OAAO;QAC5C,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,OAAO;YACtB,KAAK,CAAC,UAAU,KAAK,UAAU;YAC/B,CAAC,KAAK,CAAC,UAAU,CACpB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAChC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,OAAO;YACtB,KAAK,CAAC,UAAU,KAAK,UAAU;YAC/B,KAAK,CAAC,MAAM,KAAK,WAAW,CAC/B,CAAC;QACF,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAC7B,MAAM,MAAM,GAAG,eAAe,CAAC;YAC7B,aAAa,EAAE,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAC1D,SAAS,EAAE,yBAAyB,CAAC,SAAS,CAAC;YAC/C,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE;gBACN,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;gBAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aACxC;YACD,OAAO,EACL,MAAM,CAAC,YAAY,KAAK,IAAI;gBAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,gBAAgB,CAAC,KAAK,IAAI;SAC1D,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,kBAAkB,CAC9B,MAAyB,EACzB,MAA8B,EAC9B,QAAyB;QAEzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAAE,OAAO;QACrE,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE;YACpE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACrB,QAAQ;SACT,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,OAAO,GAAG,8CAA8C,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,KAAK,qDAAqD,KAAK,CAAC,UAAU,kBAAkB,CAAC;YACvL,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,SAAS;qBACf,OAAO,CAAC,YAAY,CAAC;qBACrB,SAAS,CAAC,UAAU,CAAC;qBACrB,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,sBAAsB,CAAC,MAA8B;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO;QACzC,IAAI,MAA0B,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,KAAK,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CACT;oBACE,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,OAAO,CAAC,WAAW;oBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;oBAC1C,cAAc,EAAE,OAAO,CAAC,cAAc;iBACvC,EACD,YAAY,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,mJAAmJ,CACnO,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEe,KAAK,CAAC,QAAQ;QAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7E,CAAC;IAEO,iBAAiB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAoB,UAAU,CAAE,CAAC;IAC7D,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAU,EAAE;QAC5C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IACF,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DatabaseDriverRegistration } from '@nocobase/db';
|
|
2
|
+
import type { AppDatabaseConfig } from './types.js';
|
|
3
|
+
/** A dialect this runtime loads a driver for without the application registering one. */
|
|
4
|
+
export type OfficialDialect = 'sqlite' | 'mysql' | 'postgres' | 'mssql' | 'oracle' | 'dameng' | 'kingbase' | 'oceanbase';
|
|
5
|
+
/**
|
|
6
|
+
* The dialects above, as a list tooling can name them from.
|
|
7
|
+
*
|
|
8
|
+
* Anything that has to present the choice to a person — `nocobase config init`, the documentation it prints —
|
|
9
|
+
* reads this rather than keeping its own copy. A separate list is one that silently stops matching the loaders the
|
|
10
|
+
* day a dialect is added, and the mismatch only shows up as a dialect the CLI offers and the runtime cannot load.
|
|
11
|
+
*/
|
|
12
|
+
export declare const OFFICIAL_DIALECTS: readonly OfficialDialect[];
|
|
13
|
+
/** A connection whose official driver package is not installed. */
|
|
14
|
+
export interface MissingDatabaseDriver {
|
|
15
|
+
readonly connection: string;
|
|
16
|
+
readonly dialect: OfficialDialect;
|
|
17
|
+
readonly packageName: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Every configured connection whose driver is missing, reported at once.
|
|
21
|
+
*
|
|
22
|
+
* Stopping at the first one turned a configuration with two missing drivers — the Examples template on PostgreSQL
|
|
23
|
+
* still needs SQLite for its analytics connection — into two failed starts, each naming half the problem. The
|
|
24
|
+
* connections are listed so tooling can point at each one, and the message carries the single command that installs
|
|
25
|
+
* all of them.
|
|
26
|
+
*
|
|
27
|
+
* The remedy names the application rather than "here" on purpose: in a deployment this runs from a built `dist`, where
|
|
28
|
+
* installing a driver is undone by the next build. The driver has to reach the application's dependencies, and a
|
|
29
|
+
* deployment has to be built again afterwards.
|
|
30
|
+
*/
|
|
31
|
+
export declare class MissingDatabaseDriversError extends Error {
|
|
32
|
+
readonly missing: readonly MissingDatabaseDriver[];
|
|
33
|
+
constructor(missing: readonly MissingDatabaseDriver[]);
|
|
34
|
+
}
|
|
35
|
+
/** Configuration properties needed for driver loading; other properties are preserved. */
|
|
36
|
+
export type DatabaseConfigInput = Pick<AppDatabaseConfig, 'default' | 'drivers' | 'connections'>;
|
|
37
|
+
export type ResolvedDatabaseConfig<TConfig extends DatabaseConfigInput> = Omit<TConfig, 'drivers'> & {
|
|
38
|
+
drivers: Record<string, DatabaseDriverRegistration>;
|
|
39
|
+
};
|
|
40
|
+
/** Load only configured official dialects before constructing a synchronous manager. */
|
|
41
|
+
export declare function resolveDatabaseConfig<TConfig extends DatabaseConfigInput>(config: TConfig): Promise<ResolvedDatabaseConfig<TConfig>>;
|
|
42
|
+
//# sourceMappingURL=resolve-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config.d.ts","sourceRoot":"","sources":["../../src/database/resolve-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,yFAAyF;AACzF,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,OAAO,GACP,UAAU,GACV,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,WAAW,CAAC;AAkBhB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAEvD,CAAC;AAEF,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,SAAgB,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;gBAEvC,OAAO,EAAE,SAAS,qBAAqB,EAAE;CAc7D;AAED,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,iBAAiB,EACjB,SAAS,GAAG,SAAS,GAAG,aAAa,CACtC,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,mBAAmB,IAAI,IAAI,CAC5E,OAAO,EACP,SAAS,CACV,GAAG;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACrD,CAAC;AAEF,wFAAwF;AACxF,wBAAsB,qBAAqB,CACzC,OAAO,SAAS,mBAAmB,EACnC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CA4F3D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { resolveDatabaseDriver } from '@nocobase/db';
|
|
2
|
+
const officialDriverLoaders = {
|
|
3
|
+
sqlite: () => import('@nocobase/db-sqlite'),
|
|
4
|
+
mysql: () => import('@nocobase/db-mysql'),
|
|
5
|
+
postgres: () => import('@nocobase/db-postgres'),
|
|
6
|
+
mssql: () => import('@nocobase/db-mssql'),
|
|
7
|
+
oracle: () => import('@nocobase/db-oracle'),
|
|
8
|
+
dameng: () => import('@nocobase/db-dameng'),
|
|
9
|
+
kingbase: () => import('@nocobase/db-kingbase'),
|
|
10
|
+
oceanbase: () => import('@nocobase/db-oceanbase'),
|
|
11
|
+
// Keyed by the exported union rather than by `string`, so a dialect added to one and not the other fails to compile
|
|
12
|
+
// instead of producing a list the runtime cannot load from.
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The dialects above, as a list tooling can name them from.
|
|
16
|
+
*
|
|
17
|
+
* Anything that has to present the choice to a person — `nocobase config init`, the documentation it prints —
|
|
18
|
+
* reads this rather than keeping its own copy. A separate list is one that silently stops matching the loaders the
|
|
19
|
+
* day a dialect is added, and the mismatch only shows up as a dialect the CLI offers and the runtime cannot load.
|
|
20
|
+
*/
|
|
21
|
+
export const OFFICIAL_DIALECTS = Object.freeze(Object.keys(officialDriverLoaders));
|
|
22
|
+
/**
|
|
23
|
+
* Every configured connection whose driver is missing, reported at once.
|
|
24
|
+
*
|
|
25
|
+
* Stopping at the first one turned a configuration with two missing drivers — the Examples template on PostgreSQL
|
|
26
|
+
* still needs SQLite for its analytics connection — into two failed starts, each naming half the problem. The
|
|
27
|
+
* connections are listed so tooling can point at each one, and the message carries the single command that installs
|
|
28
|
+
* all of them.
|
|
29
|
+
*
|
|
30
|
+
* The remedy names the application rather than "here" on purpose: in a deployment this runs from a built `dist`, where
|
|
31
|
+
* installing a driver is undone by the next build. The driver has to reach the application's dependencies, and a
|
|
32
|
+
* deployment has to be built again afterwards.
|
|
33
|
+
*/
|
|
34
|
+
export class MissingDatabaseDriversError extends Error {
|
|
35
|
+
missing;
|
|
36
|
+
constructor(missing) {
|
|
37
|
+
const packages = [...new Set(missing.map((entry) => entry.packageName))];
|
|
38
|
+
const subject = missing.length === 1
|
|
39
|
+
? `Database connection "${missing[0].connection}" requires "${missing[0].packageName}".`
|
|
40
|
+
: `Database connections ${missing
|
|
41
|
+
.map((entry) => `"${entry.connection}" (${entry.packageName})`)
|
|
42
|
+
.join(', ')} require drivers that are not installed.`;
|
|
43
|
+
super(`${subject} Add ${packages.length === 1 ? 'it' : 'them'} to the application's dependencies with "pnpm add ${packages.join(' ')}"; a deployment needs to be built again afterwards.`);
|
|
44
|
+
this.name = 'MissingDatabaseDriversError';
|
|
45
|
+
this.missing = missing;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Load only configured official dialects before constructing a synchronous manager. */
|
|
49
|
+
export async function resolveDatabaseConfig(config) {
|
|
50
|
+
const drivers = { ...config.drivers };
|
|
51
|
+
const connections = { ...config.connections };
|
|
52
|
+
if (config.default === 'none')
|
|
53
|
+
return { ...config, drivers };
|
|
54
|
+
// Per-connection drivers must not conflict with an automatically registered
|
|
55
|
+
// default for another connection using the same dialect.
|
|
56
|
+
const suppliedDialects = new Set(Object.values(connections)
|
|
57
|
+
.filter((connection) => connection.databaseDriver)
|
|
58
|
+
.map((connection) => connection.dialect));
|
|
59
|
+
const loaded = new Map();
|
|
60
|
+
const missing = [];
|
|
61
|
+
for (const [name, connection] of Object.entries(connections)) {
|
|
62
|
+
if (resolveDatabaseDriver({
|
|
63
|
+
dialect: connection.dialect,
|
|
64
|
+
databaseDriver: connection.databaseDriver,
|
|
65
|
+
}, config.drivers, name))
|
|
66
|
+
continue;
|
|
67
|
+
const dialect = connection.dialect;
|
|
68
|
+
const loader = Object.hasOwn(officialDriverLoaders, dialect)
|
|
69
|
+
? officialDriverLoaders[dialect]
|
|
70
|
+
: undefined;
|
|
71
|
+
if (!loader) {
|
|
72
|
+
throw new Error(`Database connection "${name}" uses unregistered dialect "${dialect}". Register a custom driver in database.drivers.`);
|
|
73
|
+
}
|
|
74
|
+
let driver = loaded.get(dialect);
|
|
75
|
+
if (!driver) {
|
|
76
|
+
const packageName = `@nocobase/db-${dialect}`;
|
|
77
|
+
let module;
|
|
78
|
+
try {
|
|
79
|
+
module = await loader();
|
|
80
|
+
}
|
|
81
|
+
catch (cause) {
|
|
82
|
+
const error = cause;
|
|
83
|
+
if (error?.code === 'ERR_MODULE_NOT_FOUND' &&
|
|
84
|
+
error.message.startsWith(`Cannot find package '${packageName}' imported from `)) {
|
|
85
|
+
// Collected rather than thrown, so every connection missing its driver is reported in one run.
|
|
86
|
+
missing.push({
|
|
87
|
+
connection: name,
|
|
88
|
+
dialect: dialect,
|
|
89
|
+
packageName,
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
throw new Error(`Failed to load database driver "${packageName}" for connection "${name}".`, { cause });
|
|
94
|
+
}
|
|
95
|
+
if (!module.default)
|
|
96
|
+
throw new Error(`Database driver "${packageName}" must have a default export.`);
|
|
97
|
+
driver = module.default;
|
|
98
|
+
resolveDatabaseDriver({
|
|
99
|
+
dialect: connection.dialect,
|
|
100
|
+
databaseDriver: connection.databaseDriver,
|
|
101
|
+
}, { [dialect]: driver }, name);
|
|
102
|
+
loaded.set(dialect, driver);
|
|
103
|
+
}
|
|
104
|
+
if (suppliedDialects.has(dialect)) {
|
|
105
|
+
connections[name] = {
|
|
106
|
+
...connection,
|
|
107
|
+
databaseDriver: resolveDatabaseDriver({ dialect: connection.dialect }, { [dialect]: driver }, name),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
drivers[dialect] = driver;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (missing.length > 0)
|
|
115
|
+
throw new MissingDatabaseDriversError(missing);
|
|
116
|
+
return { ...config, drivers, connections };
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=resolve-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-config.js","sourceRoot":"","sources":["../../src/database/resolve-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ServiceResolver } from '@nocobase/service-provider';
|
|
2
|
+
import type { DatabaseTaskConfig } from '@nocobase/db';
|
|
3
|
+
import { type ChecksumMismatch, type DatabaseManager, type SeedHistoryEntry, type SeedHistoryRecord, type SeedRepairOptions, type SeedSource, type StaleTaskLockTakeover, type TaskLockReleaseOptions } from '@nocobase/db';
|
|
4
|
+
import type { AppDatabaseSeedConfig } from './types.js';
|
|
5
|
+
import { type AppPendingTasksOptions, type AppPendingTasksResult, type AppTaskLockReleaseResult } from './migrator.js';
|
|
6
|
+
export interface AppSeeder {
|
|
7
|
+
run(): Promise<AppSeedRunResult>;
|
|
8
|
+
/** Runs the sample seeds recorded as skipped; see `Seeder.runSamples()`. */
|
|
9
|
+
runSamples(): Promise<AppSeedRunResult>;
|
|
10
|
+
/** The seed history, without creating its table. */
|
|
11
|
+
history(): Promise<SeedHistoryRecord[]>;
|
|
12
|
+
/** Records an entry no seed file describes; see `Seeder.record()`. */
|
|
13
|
+
record(entry: SeedHistoryEntry): Promise<void>;
|
|
14
|
+
/** What `run()` would execute, after a fresh rebuild with `fresh` set. Reads only. */
|
|
15
|
+
pending(options?: AppPendingTasksOptions): Promise<AppPendingTasksResult>;
|
|
16
|
+
repair(options?: SeedRepairOptions): Promise<AppSeedRepairResult>;
|
|
17
|
+
unlock(options?: TaskLockReleaseOptions): Promise<AppTaskLockReleaseResult>;
|
|
18
|
+
}
|
|
19
|
+
export type AppSeedSkippedReason = 'missing-directory';
|
|
20
|
+
export interface AppSeedRunResult {
|
|
21
|
+
status: 'completed' | 'skipped';
|
|
22
|
+
reason?: AppSeedSkippedReason;
|
|
23
|
+
executed?: string[];
|
|
24
|
+
skipped?: string[];
|
|
25
|
+
/** Sample seeds recorded as skipped without running. */
|
|
26
|
+
skippedSamples?: string[];
|
|
27
|
+
warnings?: ChecksumMismatch[];
|
|
28
|
+
}
|
|
29
|
+
export interface AppSeedRepairResult {
|
|
30
|
+
status: 'completed' | 'skipped';
|
|
31
|
+
reason?: AppSeedSkippedReason;
|
|
32
|
+
repaired?: ChecksumMismatch[];
|
|
33
|
+
dryRun?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface CreateAppSeederOptions {
|
|
36
|
+
runtimeConfig?: DatabaseTaskConfig;
|
|
37
|
+
container?: ServiceResolver;
|
|
38
|
+
database: DatabaseManager;
|
|
39
|
+
config: AppDatabaseSeedConfig;
|
|
40
|
+
connection?: string;
|
|
41
|
+
sources?: readonly SeedSource[];
|
|
42
|
+
/** Reported when a lock whose holder stopped beating is taken over. */
|
|
43
|
+
onStaleLock?: (takeover: StaleTaskLockTakeover) => void;
|
|
44
|
+
/** Whether pending sample seeds run; recorded as skipped otherwise. */
|
|
45
|
+
sample?: {
|
|
46
|
+
readonly enabled: boolean;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export declare function createAppSeeder(options: CreateAppSeederOptions): AppSeeder;
|
|
50
|
+
//# sourceMappingURL=seeder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.d.ts","sourceRoot":"","sources":["../../src/database/seeder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAGtB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjC,4EAA4E;IAC5E,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,oDAAoD;IACpD,OAAO,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,sEAAsE;IACtE,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sFAAsF;IACtF,OAAO,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1E,MAAM,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAChC,uEAAuE;IACvE,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACxD,uEAAuE;IACvE,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACxC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CA6E1E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createTaskServiceResolver } from './task-container.js';
|
|
2
|
+
import { snapshotDatabaseTaskConfig } from './task-config.js';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { createSeeder, loadSeeds, } from '@nocobase/db';
|
|
5
|
+
import { pendingTasksResult, } from './migrator.js';
|
|
6
|
+
export function createAppSeeder(options) {
|
|
7
|
+
return {
|
|
8
|
+
async run() {
|
|
9
|
+
if (!hasSeedDirectory(options)) {
|
|
10
|
+
return {
|
|
11
|
+
status: 'skipped',
|
|
12
|
+
reason: 'missing-directory',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return completedRunResult(await createDatabaseSeeder(options).run());
|
|
16
|
+
},
|
|
17
|
+
async runSamples() {
|
|
18
|
+
if (!hasSeedDirectory(options)) {
|
|
19
|
+
return {
|
|
20
|
+
status: 'skipped',
|
|
21
|
+
reason: 'missing-directory',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const { executed } = await createDatabaseSeeder(options).runSamples();
|
|
25
|
+
return { status: 'completed', executed };
|
|
26
|
+
},
|
|
27
|
+
async history() {
|
|
28
|
+
return createDatabaseSeeder(options).history();
|
|
29
|
+
},
|
|
30
|
+
async record(entry) {
|
|
31
|
+
await createDatabaseSeeder(options).record(entry);
|
|
32
|
+
},
|
|
33
|
+
async pending(pendingOptions = {}) {
|
|
34
|
+
if (!hasSeedDirectory(options)) {
|
|
35
|
+
return {
|
|
36
|
+
status: 'skipped',
|
|
37
|
+
reason: 'missing-directory',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const seeds = await loadSeeds(createDatabaseSeederOptions(options));
|
|
41
|
+
// A fresh run drops the seed history with the rest of the schema.
|
|
42
|
+
return pendingTasksResult(seeds, pendingOptions.fresh || pendingOptions.withoutHistory
|
|
43
|
+
? []
|
|
44
|
+
: await createDatabaseSeeder(options).history());
|
|
45
|
+
},
|
|
46
|
+
// Unlocking needs no seed directory: the lock is taken by whichever run
|
|
47
|
+
// reached the connection, including one with only plugin seeds.
|
|
48
|
+
async unlock(releaseOptions) {
|
|
49
|
+
return {
|
|
50
|
+
status: 'completed',
|
|
51
|
+
...(await createDatabaseSeeder(options).unlock(releaseOptions)),
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
async repair(repairOptions) {
|
|
55
|
+
if (!hasSeedDirectory(options)) {
|
|
56
|
+
return {
|
|
57
|
+
status: 'skipped',
|
|
58
|
+
reason: 'missing-directory',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return completedRepairResult(await createDatabaseSeeder(options).repair(repairOptions));
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createDatabaseSeeder(options) {
|
|
66
|
+
return createSeeder(createDatabaseSeederOptions(options));
|
|
67
|
+
}
|
|
68
|
+
function createDatabaseSeederOptions(options) {
|
|
69
|
+
const common = {
|
|
70
|
+
config: snapshotDatabaseTaskConfig(options.runtimeConfig),
|
|
71
|
+
container: createTaskServiceResolver(options.container),
|
|
72
|
+
database: options.database,
|
|
73
|
+
connection: options.connection,
|
|
74
|
+
tableName: options.config.tableName,
|
|
75
|
+
lockTableName: options.config.lockTableName,
|
|
76
|
+
extensions: options.config.extensions,
|
|
77
|
+
onChecksumMismatch: options.config.onChecksumMismatch,
|
|
78
|
+
onStaleLock: options.onStaleLock,
|
|
79
|
+
...(options.sample ? { sample: options.sample } : {}),
|
|
80
|
+
};
|
|
81
|
+
if (options.sources) {
|
|
82
|
+
return {
|
|
83
|
+
...common,
|
|
84
|
+
sources: options.sources,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
...common,
|
|
89
|
+
directory: options.config.directory,
|
|
90
|
+
packageName: options.config.packageName,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function hasSeedDirectory(options) {
|
|
94
|
+
if (options.sources) {
|
|
95
|
+
return options.sources.some((source) => existsSync(source.directory));
|
|
96
|
+
}
|
|
97
|
+
return existsSync(options.config.directory);
|
|
98
|
+
}
|
|
99
|
+
function completedRunResult(result) {
|
|
100
|
+
return {
|
|
101
|
+
status: 'completed',
|
|
102
|
+
executed: result.executed,
|
|
103
|
+
skipped: result.skipped,
|
|
104
|
+
...(result.skippedSamples.length > 0
|
|
105
|
+
? { skippedSamples: result.skippedSamples }
|
|
106
|
+
: {}),
|
|
107
|
+
warnings: result.warnings,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function completedRepairResult(result) {
|
|
111
|
+
return {
|
|
112
|
+
status: 'completed',
|
|
113
|
+
repaired: result.repaired,
|
|
114
|
+
dryRun: result.dryRun,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=seeder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.js","sourceRoot":"","sources":["../../src/database/seeder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type DatabaseDriverRegistration } from '@nocobase/db';
|
|
2
|
+
import type { AppPaths } from '../config/index.js';
|
|
3
|
+
import type { AppDatabaseConfig } from './types.js';
|
|
4
|
+
export declare function prepareAppDatabaseStorage<TConfig extends AppDatabaseConfig>(config: TConfig, paths?: AppPaths, names?: readonly string[], drivers?: Record<string, DatabaseDriverRegistration>): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Whether the storage of connection `name` exists already. A driver that
|
|
7
|
+
* does not say, which is every driver without local storage, has it.
|
|
8
|
+
*/
|
|
9
|
+
export declare function appDatabaseStorageExists<TConfig extends AppDatabaseConfig>(config: TConfig, paths: AppPaths | undefined, name: string, drivers?: Record<string, DatabaseDriverRegistration>): Promise<boolean>;
|
|
10
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/database/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIpD,wBAAsB,yBAAyB,CAC7C,OAAO,SAAS,iBAAiB,EAEjC,MAAM,EAAE,OAAO,EACf,KAAK,CAAC,EAAE,QAAQ,EAChB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,SAAS,iBAAiB,EAEjC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GACnD,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { resolveDatabaseDriver, } from '@nocobase/db';
|
|
3
|
+
import { resolveConnections } from './manager.js';
|
|
4
|
+
import { defaultConnectionName } from './plan.js';
|
|
5
|
+
export async function prepareAppDatabaseStorage(config, paths, names, drivers) {
|
|
6
|
+
if (config.default === 'none')
|
|
7
|
+
return;
|
|
8
|
+
const primary = defaultConnectionName(config);
|
|
9
|
+
const availableDrivers = { ...config.drivers, ...drivers };
|
|
10
|
+
const connections = resolveConnections(config.connections, paths, availableDrivers);
|
|
11
|
+
for (const name of names ?? (primary ? [primary] : [])) {
|
|
12
|
+
const connection = connections[name];
|
|
13
|
+
if (!connection)
|
|
14
|
+
throw new Error(`Unknown database connection "${name}".`);
|
|
15
|
+
const driver = resolveDatabaseDriver(connection, availableDrivers, name);
|
|
16
|
+
await driver?.prepareStorage?.(connection, {
|
|
17
|
+
ensureDirectory: async (directory) => {
|
|
18
|
+
await mkdir(directory, { recursive: true });
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether the storage of connection `name` exists already. A driver that
|
|
25
|
+
* does not say, which is every driver without local storage, has it.
|
|
26
|
+
*/
|
|
27
|
+
export async function appDatabaseStorageExists(config, paths, name, drivers) {
|
|
28
|
+
if (config.default === 'none')
|
|
29
|
+
return true;
|
|
30
|
+
const availableDrivers = { ...config.drivers, ...drivers };
|
|
31
|
+
const connection = resolveConnections(config.connections, paths, availableDrivers)[name];
|
|
32
|
+
if (!connection)
|
|
33
|
+
throw new Error(`Unknown database connection "${name}".`);
|
|
34
|
+
const driver = resolveDatabaseDriver(connection, availableDrivers, name);
|
|
35
|
+
return (await driver?.hasStorage?.(connection)) ?? true;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/database/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EACL,qBAAqB,GAEtB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAG7C,MAAe,EACf,KAAgB,EAChB,KAAyB,EACzB,OAAoD;IAEpD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO;IACtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3D,MAAM,WAAW,GAAG,kBAAkB,CACpC,MAAM,CAAC,WAAW,EAClB,KAAK,EACL,gBAAgB,CACjB,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,IAAI,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,MAAM,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE;YACzC,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBACnC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAG5C,MAAe,EACf,KAA2B,EAC3B,IAAY,EACZ,OAAoD;IAEpD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,kBAAkB,CACnC,MAAM,CAAC,WAAW,EAClB,KAAK,EACL,gBAAgB,CACjB,CAAC,IAAI,CAAC,CAAC;IACR,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,IAAI,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,MAAM,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ConfigMap } from '@nocobase/config';
|
|
2
|
+
import type { DatabaseTaskConfig } from '@nocobase/db';
|
|
3
|
+
/** Capture ordinary configuration values once, using the application's path semantics. */
|
|
4
|
+
export declare function snapshotDatabaseTaskConfig(config?: DatabaseTaskConfig & {
|
|
5
|
+
raw?(): ConfigMap;
|
|
6
|
+
}): DatabaseTaskConfig;
|
|
7
|
+
//# sourceMappingURL=task-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-config.d.ts","sourceRoot":"","sources":["../../src/database/task-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,0FAA0F;AAC1F,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,kBAAkB,GAAG;IAAE,GAAG,CAAC,IAAI,SAAS,CAAA;CAAE,GAClD,kBAAkB,CAepB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ConfigView } from '@nocobase/config';
|
|
2
|
+
/** Capture ordinary configuration values once, using the application's path semantics. */
|
|
3
|
+
export function snapshotDatabaseTaskConfig(config) {
|
|
4
|
+
// A get-only reader has no enumeration contract: preserve its lookup semantics.
|
|
5
|
+
if (config && !config.raw) {
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
get(key) {
|
|
8
|
+
return config.get(key);
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
const snapshot = new ConfigView(config?.raw?.() ?? {}, '.');
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
get(key) {
|
|
15
|
+
return snapshot.get(key);
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=task-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-config.js","sourceRoot":"","sources":["../../src/database/task-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAG9D,0FAA0F;AAC1F,MAAM,UAAU,0BAA0B,CACxC,MAAmD;IAEnD,gFAAgF;IAChF,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG,CAAc,GAAW;gBAC1B,OAAO,MAAM,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,CAAc,GAAW;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;QAC5C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|