@nocobase/app-server 0.11.1-alpha.5 → 2.0.0-beta.2
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 +96 -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,397 @@
|
|
|
1
|
+
import { resolveDatabaseConfig } from './resolve-config.js';
|
|
2
|
+
import { mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { assertCollectionArtifactDirectoryNames, COLLECTION_ARTIFACT_FILE_NAMES, COLLECTION_ARTIFACT_MANIFEST_FILE_NAME, DirectoryCollectionMetadataStore, serializeCollectionArtifact, serializeCollectionArtifactManifest, } from '@nocobase/db';
|
|
5
|
+
import { isCollectionMetadataStoreInstance, isAppCollectionsDirectory, resolveAppCollectionsDirectory, resolveAppMetadataStore, } from './collections-directory.js';
|
|
6
|
+
import { createAppDatabaseManager } from './manager.js';
|
|
7
|
+
import { selectAppDatabaseConnections } from './connection-selection.js';
|
|
8
|
+
import { planAppDatabaseTasks } from './plan.js';
|
|
9
|
+
const STAGING_PREFIX = '.staging-';
|
|
10
|
+
const FILE_KINDS = [
|
|
11
|
+
'collection',
|
|
12
|
+
'metadata',
|
|
13
|
+
'schema',
|
|
14
|
+
];
|
|
15
|
+
const FILE_NAME_KINDS = new Map(FILE_KINDS.map((kind) => [COLLECTION_ARTIFACT_FILE_NAMES[kind], kind]));
|
|
16
|
+
export async function generateAppCollectionsArtifact(config, options = {}) {
|
|
17
|
+
const check = options.check ?? false;
|
|
18
|
+
const names = selectAppDatabaseConnections(config, options);
|
|
19
|
+
if (names === undefined) {
|
|
20
|
+
return { ok: true, status: 'not-configured', check, results: [] };
|
|
21
|
+
}
|
|
22
|
+
if (!options.database) {
|
|
23
|
+
config = await resolveDatabaseConfig({
|
|
24
|
+
...config,
|
|
25
|
+
drivers: { ...config.drivers, ...options.drivers },
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const database = options.database ??
|
|
29
|
+
createAppDatabaseManager(config, options.paths, options.drivers);
|
|
30
|
+
if (!database) {
|
|
31
|
+
return { ok: true, status: 'not-configured', check, results: [] };
|
|
32
|
+
}
|
|
33
|
+
const results = [];
|
|
34
|
+
try {
|
|
35
|
+
for (const name of names) {
|
|
36
|
+
const directory = resolveAppCollectionsDirectory(name, options.paths);
|
|
37
|
+
try {
|
|
38
|
+
results.push(await generateForConnection(database.connection(name), directory, {
|
|
39
|
+
check,
|
|
40
|
+
metadataDirectory: metadataDirectoryOf(config, name, options.paths),
|
|
41
|
+
migrationHead: () => readMigrationHead(database, config, name, options),
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
results.push({
|
|
46
|
+
connection: name,
|
|
47
|
+
directory,
|
|
48
|
+
status: 'failed',
|
|
49
|
+
error: error instanceof Error ? error.message : String(error),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
if (!options.database)
|
|
56
|
+
await database.destroy();
|
|
57
|
+
}
|
|
58
|
+
const status = results.some((entry) => entry.status === 'failed')
|
|
59
|
+
? 'failed'
|
|
60
|
+
: results.some((entry) => entry.status === 'stale')
|
|
61
|
+
? 'stale'
|
|
62
|
+
: 'completed';
|
|
63
|
+
return { ok: status === 'completed', status, check, results };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Mirrors the selection rules of `planAppDatabaseTasks` so the two commands
|
|
67
|
+
* read the same flags the same way — except that external connections take
|
|
68
|
+
* part: their schema is owned elsewhere, but a snapshot of what it resolves to
|
|
69
|
+
* is exactly what a reader without database access needs from them.
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* The history table name is part of a connection's migration configuration,
|
|
73
|
+
* which planning already resolves — including the legacy top-level form. Ask
|
|
74
|
+
* the planner rather than duplicating that resolution here, but ask it about
|
|
75
|
+
* this one connection: planning validates what it plans, and a misconfigured
|
|
76
|
+
* connection nobody selected must not fail a run that never touches it. An
|
|
77
|
+
* external connection has no history table at all, so it is not planned.
|
|
78
|
+
*/
|
|
79
|
+
async function readMigrationHead(database, config, name, options) {
|
|
80
|
+
if (config.connections[name].schemaManagement === 'external')
|
|
81
|
+
return null;
|
|
82
|
+
const [task] = planAppDatabaseTasks(config, ['migrations'], {
|
|
83
|
+
contributions: { appPackageName: 'app', migrations: [], seeds: [] },
|
|
84
|
+
paths: options.paths,
|
|
85
|
+
drivers: options.drivers,
|
|
86
|
+
connection: name,
|
|
87
|
+
});
|
|
88
|
+
const history = await database
|
|
89
|
+
.createMigrator({
|
|
90
|
+
connection: name,
|
|
91
|
+
tableName: task?.config.tableName,
|
|
92
|
+
sources: [],
|
|
93
|
+
})
|
|
94
|
+
.history();
|
|
95
|
+
return history.at(-1)?.name ?? null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The directory a connection's metadata store reads hand-written documents
|
|
99
|
+
* from, if it is a directory store. Such a directory must never be a generated
|
|
100
|
+
* collections directory — the generator rewrites and deletes files there — so
|
|
101
|
+
* a store configured onto one is refused before anything is written.
|
|
102
|
+
*/
|
|
103
|
+
function metadataDirectoryOf(config, name, paths) {
|
|
104
|
+
const connection = config.connections[name];
|
|
105
|
+
const store = resolveAppMetadataStore(connection.metadataStore, {
|
|
106
|
+
name,
|
|
107
|
+
external: connection.schemaManagement === 'external',
|
|
108
|
+
shared: config.metadataStore,
|
|
109
|
+
paths,
|
|
110
|
+
});
|
|
111
|
+
if (store === undefined ||
|
|
112
|
+
isCollectionMetadataStoreInstance(store) ||
|
|
113
|
+
store.type !== 'directory') {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
if (isAppCollectionsDirectory(store.directory, paths)) {
|
|
117
|
+
throw new Error(`Connection "${name}" reads metadata from ${store.directory}, which is a generated collections directory. Keep hand-written metadata in database/<connection>/metadata/ as one <name>.json per Collection and point metadataStore there.`);
|
|
118
|
+
}
|
|
119
|
+
return path.resolve(store.directory);
|
|
120
|
+
}
|
|
121
|
+
async function generateForConnection(connection, directory, options) {
|
|
122
|
+
const names = [];
|
|
123
|
+
for await (const collection of connection.collections.scan()) {
|
|
124
|
+
if (collection.name)
|
|
125
|
+
names.push(collection.name);
|
|
126
|
+
}
|
|
127
|
+
names.sort();
|
|
128
|
+
assertCollectionArtifactDirectoryNames(names);
|
|
129
|
+
const expected = new Map();
|
|
130
|
+
const perCollection = new Map();
|
|
131
|
+
for (const name of names) {
|
|
132
|
+
const [resolution, physical, stored] = await Promise.all([
|
|
133
|
+
connection.collections.getResolution(name),
|
|
134
|
+
connection.collections.getPhysical(name),
|
|
135
|
+
connection.collectionMetadata.get(name),
|
|
136
|
+
]);
|
|
137
|
+
if (!resolution || !physical) {
|
|
138
|
+
throw new Error(`Collection "${name}" disappeared while its artifact was being generated.`);
|
|
139
|
+
}
|
|
140
|
+
const files = serializeCollectionArtifact({
|
|
141
|
+
name,
|
|
142
|
+
resolution,
|
|
143
|
+
physical,
|
|
144
|
+
metadata: stored?.document,
|
|
145
|
+
});
|
|
146
|
+
const own = new Map();
|
|
147
|
+
for (const kind of FILE_KINDS) {
|
|
148
|
+
const relative = path.posix.join(name, COLLECTION_ARTIFACT_FILE_NAMES[kind]);
|
|
149
|
+
own.set(relative, files[kind]);
|
|
150
|
+
expected.set(relative, files[kind]);
|
|
151
|
+
}
|
|
152
|
+
perCollection.set(name, own);
|
|
153
|
+
}
|
|
154
|
+
const manifest = {
|
|
155
|
+
dialect: connection.dialect,
|
|
156
|
+
schemaManagement: connection.schemaManagement,
|
|
157
|
+
migrationHead: await options.migrationHead(),
|
|
158
|
+
collections: names,
|
|
159
|
+
};
|
|
160
|
+
expected.set(COLLECTION_ARTIFACT_MANIFEST_FILE_NAME, serializeCollectionArtifactManifest({
|
|
161
|
+
connection: connection.name,
|
|
162
|
+
...manifest,
|
|
163
|
+
}));
|
|
164
|
+
const disk = readDirectory(directory);
|
|
165
|
+
const differences = diff(expected, disk);
|
|
166
|
+
const unusedMetadata = options.metadataDirectory === undefined
|
|
167
|
+
? undefined
|
|
168
|
+
: await unusedMetadataIn(options.metadataDirectory, names);
|
|
169
|
+
const base = {
|
|
170
|
+
connection: connection.name,
|
|
171
|
+
directory,
|
|
172
|
+
manifest,
|
|
173
|
+
...(unusedMetadata?.length ? { unusedMetadata } : {}),
|
|
174
|
+
};
|
|
175
|
+
if (options.check) {
|
|
176
|
+
return {
|
|
177
|
+
...base,
|
|
178
|
+
status: differences.length === 0 ? 'completed' : 'stale',
|
|
179
|
+
directoryExists: disk.exists,
|
|
180
|
+
differences,
|
|
181
|
+
unchanged: countUnchanged(perCollection, differences),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
if (disk.unexpected.length > 0) {
|
|
185
|
+
throw new Error(`Unexpected entries in ${directory}; remove them or move them out of the collections directory: ${disk.unexpected.join(', ')}.`);
|
|
186
|
+
}
|
|
187
|
+
const changed = new Set(differences
|
|
188
|
+
.filter((entry) => entry.kind !== 'unexpected')
|
|
189
|
+
.map((entry) => entry.path.split('/')[0]));
|
|
190
|
+
const written = [];
|
|
191
|
+
const deleted = [];
|
|
192
|
+
mkdirSync(directory, { recursive: true });
|
|
193
|
+
removeStaleStaging(directory);
|
|
194
|
+
const staging = mkdtempSync(path.join(directory, STAGING_PREFIX));
|
|
195
|
+
try {
|
|
196
|
+
for (const [name, files] of perCollection) {
|
|
197
|
+
if (!changed.has(name))
|
|
198
|
+
continue;
|
|
199
|
+
const stagingDirectory = path.join(staging, name);
|
|
200
|
+
mkdirSync(stagingDirectory);
|
|
201
|
+
for (const [relative, content] of files) {
|
|
202
|
+
writeFileSync(path.join(staging, relative), content);
|
|
203
|
+
written.push(relative);
|
|
204
|
+
}
|
|
205
|
+
const target = path.join(directory, name);
|
|
206
|
+
rmSync(target, { recursive: true, force: true });
|
|
207
|
+
renameSync(stagingDirectory, target);
|
|
208
|
+
}
|
|
209
|
+
for (const name of disk.collections) {
|
|
210
|
+
if (perCollection.has(name))
|
|
211
|
+
continue;
|
|
212
|
+
for (const relative of disk.files.keys()) {
|
|
213
|
+
if (relative.startsWith(`${name}/`))
|
|
214
|
+
deleted.push(relative);
|
|
215
|
+
}
|
|
216
|
+
rmSync(path.join(directory, name), { recursive: true, force: true });
|
|
217
|
+
}
|
|
218
|
+
if (changed.has(COLLECTION_ARTIFACT_MANIFEST_FILE_NAME)) {
|
|
219
|
+
const stagingManifest = path.join(staging, COLLECTION_ARTIFACT_MANIFEST_FILE_NAME);
|
|
220
|
+
writeFileSync(stagingManifest, expected.get(COLLECTION_ARTIFACT_MANIFEST_FILE_NAME));
|
|
221
|
+
renameSync(stagingManifest, path.join(directory, COLLECTION_ARTIFACT_MANIFEST_FILE_NAME));
|
|
222
|
+
written.push(COLLECTION_ARTIFACT_MANIFEST_FILE_NAME);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
rmSync(staging, { recursive: true, force: true });
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
...base,
|
|
230
|
+
status: 'completed',
|
|
231
|
+
written: written.sort(),
|
|
232
|
+
deleted: deleted.sort(),
|
|
233
|
+
unchanged: countUnchanged(perCollection, differences),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
async function unusedMetadataIn(directory, collections) {
|
|
237
|
+
const present = new Set(collections);
|
|
238
|
+
const store = new DirectoryCollectionMetadataStore({ directory });
|
|
239
|
+
const unused = [];
|
|
240
|
+
let cursor;
|
|
241
|
+
do {
|
|
242
|
+
const page = await store.list(cursor === undefined ? {} : { cursor });
|
|
243
|
+
for (const item of page.items) {
|
|
244
|
+
if (!present.has(item.name))
|
|
245
|
+
unused.push(item.name);
|
|
246
|
+
}
|
|
247
|
+
cursor = page.nextCursor;
|
|
248
|
+
} while (cursor !== undefined);
|
|
249
|
+
return unused.sort();
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Dot-prefixed entries are ignored rather than reported: editors and operating
|
|
253
|
+
* systems drop them everywhere, and the generator's own staging directories
|
|
254
|
+
* use the prefix too.
|
|
255
|
+
*/
|
|
256
|
+
function readDirectory(directory) {
|
|
257
|
+
const files = new Map();
|
|
258
|
+
const collections = [];
|
|
259
|
+
const unexpected = [];
|
|
260
|
+
let entries;
|
|
261
|
+
try {
|
|
262
|
+
entries = readdirSync(directory, { withFileTypes: true });
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if (error.code === 'ENOENT') {
|
|
266
|
+
return { exists: false, files, collections, unexpected };
|
|
267
|
+
}
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
for (const entry of entries) {
|
|
271
|
+
if (entry.name.startsWith('.'))
|
|
272
|
+
continue;
|
|
273
|
+
if (entry.isFile() &&
|
|
274
|
+
entry.name === COLLECTION_ARTIFACT_MANIFEST_FILE_NAME) {
|
|
275
|
+
files.set(entry.name, readFileSync(path.join(directory, entry.name), 'utf8'));
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
if (!entry.isDirectory() || entry.name.startsWith('_')) {
|
|
279
|
+
unexpected.push(entry.name);
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
collections.push(entry.name);
|
|
283
|
+
const collectionDirectory = path.join(directory, entry.name);
|
|
284
|
+
for (const child of readdirSync(collectionDirectory, {
|
|
285
|
+
withFileTypes: true,
|
|
286
|
+
})) {
|
|
287
|
+
if (child.name.startsWith('.'))
|
|
288
|
+
continue;
|
|
289
|
+
const relative = path.posix.join(entry.name, child.name);
|
|
290
|
+
if (child.isFile() && FILE_NAME_KINDS.has(child.name)) {
|
|
291
|
+
files.set(relative, readFileSync(path.join(collectionDirectory, child.name), 'utf8'));
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
unexpected.push(relative);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
exists: true,
|
|
300
|
+
files,
|
|
301
|
+
collections: collections.sort(),
|
|
302
|
+
unexpected: unexpected.sort(),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function diff(expected, disk) {
|
|
306
|
+
const differences = [];
|
|
307
|
+
for (const [relative, content] of expected) {
|
|
308
|
+
const current = disk.files.get(relative);
|
|
309
|
+
if (current === undefined)
|
|
310
|
+
differences.push({ path: relative, kind: 'missing' });
|
|
311
|
+
else if (current !== content)
|
|
312
|
+
differences.push({ path: relative, kind: 'stale' });
|
|
313
|
+
}
|
|
314
|
+
for (const relative of disk.files.keys()) {
|
|
315
|
+
if (!expected.has(relative))
|
|
316
|
+
differences.push({ path: relative, kind: 'unexpected' });
|
|
317
|
+
}
|
|
318
|
+
for (const relative of disk.unexpected) {
|
|
319
|
+
differences.push({ path: relative, kind: 'unexpected' });
|
|
320
|
+
}
|
|
321
|
+
return differences.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
|
|
322
|
+
}
|
|
323
|
+
function countUnchanged(perCollection, differences) {
|
|
324
|
+
const touched = new Set(differences.map((entry) => entry.path.split('/')[0]));
|
|
325
|
+
let unchanged = 0;
|
|
326
|
+
for (const name of perCollection.keys())
|
|
327
|
+
if (!touched.has(name))
|
|
328
|
+
unchanged += 1;
|
|
329
|
+
return unchanged;
|
|
330
|
+
}
|
|
331
|
+
function removeStaleStaging(directory) {
|
|
332
|
+
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
333
|
+
if (entry.isDirectory() && entry.name.startsWith(STAGING_PREFIX)) {
|
|
334
|
+
rmSync(path.join(directory, entry.name), {
|
|
335
|
+
recursive: true,
|
|
336
|
+
force: true,
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Regenerates the Collection cache of every connection whose schema a
|
|
343
|
+
* database run changed: migrations executed, rolled back, or rebuilt from
|
|
344
|
+
* empty. Seeds write rows, never structure, and a preview changes nothing, so
|
|
345
|
+
* neither triggers a refresh. Returns `undefined` when nothing changed.
|
|
346
|
+
*
|
|
347
|
+
* A failure is reported in the result, never raised: the migrations it
|
|
348
|
+
* follows are already committed, and the cache can always be rebuilt with
|
|
349
|
+
* `collections generate`.
|
|
350
|
+
*/
|
|
351
|
+
export async function refreshAppCollectionsArtifact(config, result, options) {
|
|
352
|
+
const names = new Set();
|
|
353
|
+
for (const entry of result.results) {
|
|
354
|
+
if (entry.kind === 'migrations' &&
|
|
355
|
+
entry.status === 'completed' &&
|
|
356
|
+
!entry.dryRun &&
|
|
357
|
+
(entry.fresh ||
|
|
358
|
+
(entry.executed?.length ?? 0) > 0 ||
|
|
359
|
+
(entry.rolledBack?.length ?? 0) > 0)) {
|
|
360
|
+
names.add(entry.connection);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (names.size === 0)
|
|
364
|
+
return undefined;
|
|
365
|
+
const refreshed = [];
|
|
366
|
+
for (const connection of names) {
|
|
367
|
+
try {
|
|
368
|
+
const outcome = await generateAppCollectionsArtifact(config, {
|
|
369
|
+
paths: options.paths,
|
|
370
|
+
database: options.database,
|
|
371
|
+
connection,
|
|
372
|
+
});
|
|
373
|
+
const entry = outcome.results[0];
|
|
374
|
+
refreshed.push(entry?.status === 'completed'
|
|
375
|
+
? {
|
|
376
|
+
connection,
|
|
377
|
+
status: 'completed',
|
|
378
|
+
written: entry.written ?? [],
|
|
379
|
+
deleted: entry.deleted ?? [],
|
|
380
|
+
}
|
|
381
|
+
: {
|
|
382
|
+
connection,
|
|
383
|
+
status: 'failed',
|
|
384
|
+
error: entry?.error ?? 'No Collection cache was generated.',
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
refreshed.push({
|
|
389
|
+
connection,
|
|
390
|
+
status: 'failed',
|
|
391
|
+
error: error instanceof Error ? error.message : String(error),
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
return refreshed;
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=collections-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-artifact.js","sourceRoot":"","sources":["../../src/database/collections-artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CollectionMetadataStore, CollectionMetadataStoreConfig } from '@nocobase/db';
|
|
2
|
+
import type { AppPaths } from '../config/index.js';
|
|
3
|
+
import type { AppMetadataStoreConfig } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Where a connection's generated Collection artifacts live:
|
|
6
|
+
* `database/<connection>/collections`, next to its `migrations` and `seeds`.
|
|
7
|
+
* Everything under it is a cache the generator owns, for every connection.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveAppCollectionsDirectory(name: string, paths?: AppPaths): string;
|
|
10
|
+
/**
|
|
11
|
+
* Where a connection's hand-written Collection metadata lives by default:
|
|
12
|
+
* `database/<connection>/metadata`, one `<name>.json` per Collection. It is
|
|
13
|
+
* the source an external connection's metadata store reads, and is committed.
|
|
14
|
+
* Kept apart from `collections/` so a directory is either written by people
|
|
15
|
+
* or generated, never both.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveAppMetadataDirectory(name: string, paths?: AppPaths): string;
|
|
18
|
+
/** Whether `directory` is, or lies inside, a connection's generated collections directory. */
|
|
19
|
+
export declare function isAppCollectionsDirectory(directory: string, paths?: AppPaths): boolean;
|
|
20
|
+
export interface ResolveAppMetadataStoreOptions {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly external: boolean;
|
|
23
|
+
/** The top-level `database.metadataStore`, which a connection without its own falls back to. */
|
|
24
|
+
readonly shared?: AppMetadataStoreConfig;
|
|
25
|
+
readonly paths?: AppPaths;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Turns the application-level forms into what `createDatabaseManager` takes:
|
|
29
|
+
* a string becomes a directory store on that path, a relative directory is
|
|
30
|
+
* resolved against the application root, and an external connection with no
|
|
31
|
+
* store at either level gets one on its own metadata directory. A store
|
|
32
|
+
* instance and a managed connection without configuration pass through.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveAppMetadataStore(value: AppMetadataStoreConfig | undefined, options: ResolveAppMetadataStoreOptions): CollectionMetadataStore | CollectionMetadataStoreConfig | undefined;
|
|
35
|
+
export declare function isCollectionMetadataStoreInstance(value: unknown): value is CollectionMetadataStore;
|
|
36
|
+
//# sourceMappingURL=collections-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-directory.d.ts","sourceRoot":"","sources":["../../src/database/collections-directory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC9B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,QAAQ,GACf,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,QAAQ,GACf,MAAM,CAER;AAED,8FAA8F;AAC9F,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,QAAQ,GACf,OAAO,CAIT;AAMD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,sBAAsB,GAAG,SAAS,EACzC,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,GAAG,6BAA6B,GAAG,SAAS,CAgBrE;AA0DD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAElC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Where a connection's generated Collection artifacts live:
|
|
5
|
+
* `database/<connection>/collections`, next to its `migrations` and `seeds`.
|
|
6
|
+
* Everything under it is a cache the generator owns, for every connection.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveAppCollectionsDirectory(name, paths) {
|
|
9
|
+
return path.join(databaseRoot(paths), name, 'collections');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Where a connection's hand-written Collection metadata lives by default:
|
|
13
|
+
* `database/<connection>/metadata`, one `<name>.json` per Collection. It is
|
|
14
|
+
* the source an external connection's metadata store reads, and is committed.
|
|
15
|
+
* Kept apart from `collections/` so a directory is either written by people
|
|
16
|
+
* or generated, never both.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveAppMetadataDirectory(name, paths) {
|
|
19
|
+
return path.join(databaseRoot(paths), name, 'metadata');
|
|
20
|
+
}
|
|
21
|
+
/** Whether `directory` is, or lies inside, a connection's generated collections directory. */
|
|
22
|
+
export function isAppCollectionsDirectory(directory, paths) {
|
|
23
|
+
const relative = path.relative(databaseRoot(paths), path.resolve(directory));
|
|
24
|
+
if (relative.startsWith('..') || path.isAbsolute(relative))
|
|
25
|
+
return false;
|
|
26
|
+
return relative.split(path.sep)[1] === 'collections';
|
|
27
|
+
}
|
|
28
|
+
function databaseRoot(paths) {
|
|
29
|
+
return paths?.database() ?? path.resolve('database');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Turns the application-level forms into what `createDatabaseManager` takes:
|
|
33
|
+
* a string becomes a directory store on that path, a relative directory is
|
|
34
|
+
* resolved against the application root, and an external connection with no
|
|
35
|
+
* store at either level gets one on its own metadata directory. A store
|
|
36
|
+
* instance and a managed connection without configuration pass through.
|
|
37
|
+
*/
|
|
38
|
+
export function resolveAppMetadataStore(value, options) {
|
|
39
|
+
if (value === undefined) {
|
|
40
|
+
if (options.external && options.shared === undefined) {
|
|
41
|
+
assertNoLegacyCollectionMetadata(options.name, options.paths);
|
|
42
|
+
return {
|
|
43
|
+
type: 'directory',
|
|
44
|
+
directory: resolveAppMetadataDirectory(options.name, options.paths),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
if (typeof value === 'string') {
|
|
50
|
+
return { type: 'directory', directory: resolveRoot(value, options.paths) };
|
|
51
|
+
}
|
|
52
|
+
if (isStoreInstance(value))
|
|
53
|
+
return value;
|
|
54
|
+
return { ...value, directory: resolveRoot(value.directory, options.paths) };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Earlier releases kept an external connection's hand-written metadata inside
|
|
58
|
+
* its collections directory, as `collections/<name>/metadata.json`. Reading
|
|
59
|
+
* the new default directory instead would find nothing and resolve every
|
|
60
|
+
* Collection without its titles and relations, so the old layout is refused
|
|
61
|
+
* with the move spelled out. It is recognised by what the generator never
|
|
62
|
+
* writes: a collections directory whose manifest is missing or does not say
|
|
63
|
+
* `generated`, holding a `metadata.json` with a document in it.
|
|
64
|
+
*/
|
|
65
|
+
function assertNoLegacyCollectionMetadata(name, paths) {
|
|
66
|
+
if (existsSync(resolveAppMetadataDirectory(name, paths)))
|
|
67
|
+
return;
|
|
68
|
+
const collections = resolveAppCollectionsDirectory(name, paths);
|
|
69
|
+
if (!existsSync(collections) || isGeneratedDirectory(collections))
|
|
70
|
+
return;
|
|
71
|
+
const legacy = readdirSync(collections, { withFileTypes: true }).filter((entry) => entry.isDirectory() &&
|
|
72
|
+
!entry.name.startsWith('.') &&
|
|
73
|
+
!entry.name.startsWith('_') &&
|
|
74
|
+
holdsMetadataDocument(path.join(collections, entry.name, 'metadata.json')));
|
|
75
|
+
if (legacy.length === 0)
|
|
76
|
+
return;
|
|
77
|
+
throw new Error(`Connection "${name}" keeps hand-written metadata in the old location, ${path.join(collections, legacy[0].name, 'metadata.json')}. Move each file's "document" to database/${name}/metadata/<name>.json, delete ${collections}, and run "nocobase collections generate --connection ${name}" to rebuild the cache.`);
|
|
78
|
+
}
|
|
79
|
+
function isGeneratedDirectory(directory) {
|
|
80
|
+
const manifest = path.join(directory, '_manifest.json');
|
|
81
|
+
if (!existsSync(manifest))
|
|
82
|
+
return false;
|
|
83
|
+
try {
|
|
84
|
+
return (JSON.parse(readFileSync(manifest, 'utf8'))
|
|
85
|
+
.generated === true);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function holdsMetadataDocument(file) {
|
|
92
|
+
if (!existsSync(file))
|
|
93
|
+
return false;
|
|
94
|
+
try {
|
|
95
|
+
const parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
96
|
+
return parsed.document !== null && parsed.document !== undefined;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function isCollectionMetadataStoreInstance(value) {
|
|
103
|
+
return isStoreInstance(value);
|
|
104
|
+
}
|
|
105
|
+
function isStoreInstance(value) {
|
|
106
|
+
return (typeof value === 'object' &&
|
|
107
|
+
value !== null &&
|
|
108
|
+
typeof value.initialize === 'function');
|
|
109
|
+
}
|
|
110
|
+
function resolveRoot(directory, paths) {
|
|
111
|
+
return path.isAbsolute(directory)
|
|
112
|
+
? directory
|
|
113
|
+
: path.resolve(paths?.root() ?? process.cwd(), directory);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=collections-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-directory.js","sourceRoot":"","sources":["../../src/database/collections-directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CollectionDiagnosisIssue, DatabaseDriverRegistration, DatabaseManager } from '@nocobase/db';
|
|
2
|
+
import type { AppPaths } from '../config/index.js';
|
|
3
|
+
import type { AppDatabaseConfig } from './types.js';
|
|
4
|
+
export interface AppCollectionsDoctorOptions {
|
|
5
|
+
readonly paths?: AppPaths;
|
|
6
|
+
readonly drivers?: Record<string, DatabaseDriverRegistration>;
|
|
7
|
+
/** One connection; defaults to the default connection. Exclusive with `all`. */
|
|
8
|
+
readonly connection?: string;
|
|
9
|
+
/** Every configured connection, external ones included. */
|
|
10
|
+
readonly all?: boolean;
|
|
11
|
+
/** Delete the metadata records whose tables are missing. */
|
|
12
|
+
readonly fix?: boolean;
|
|
13
|
+
/** Reuse an open manager instead of creating and destroying one. */
|
|
14
|
+
readonly database?: DatabaseManager;
|
|
15
|
+
}
|
|
16
|
+
export interface AppCollectionsDoctorConnectionResult {
|
|
17
|
+
readonly connection: string;
|
|
18
|
+
readonly status: 'completed' | 'failed';
|
|
19
|
+
/** Metadata records examined. */
|
|
20
|
+
readonly checked?: number;
|
|
21
|
+
readonly issues?: readonly CollectionDiagnosisIssue[];
|
|
22
|
+
/** Records deleted, which `fix` does for orphaned ones alone. */
|
|
23
|
+
readonly repaired?: readonly string[];
|
|
24
|
+
readonly error?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AppCollectionsDoctorResult {
|
|
27
|
+
readonly ok: boolean;
|
|
28
|
+
readonly status: 'completed' | 'failed' | 'not-configured';
|
|
29
|
+
readonly fix: boolean;
|
|
30
|
+
readonly results: readonly AppCollectionsDoctorConnectionResult[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compares each connection's stored Collection metadata with the physical
|
|
34
|
+
* schema behind it, and optionally deletes the records whose tables are gone.
|
|
35
|
+
*
|
|
36
|
+
* The two are separate records of what exists. A table dropped outside a
|
|
37
|
+
* migration leaves its metadata record behind, and from then on resolving that
|
|
38
|
+
* Collection fails — including inside the migration that would recreate it.
|
|
39
|
+
* That state is reachable by hand, so there has to be a way out of it that is
|
|
40
|
+
* not "edit the internal table yourself".
|
|
41
|
+
*/
|
|
42
|
+
export declare function runAppCollectionsDoctor(config: AppDatabaseConfig, options?: AppCollectionsDoctorOptions): Promise<AppCollectionsDoctorResult>;
|
|
43
|
+
//# sourceMappingURL=collections-doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections-doctor.d.ts","sourceRoot":"","sources":["../../src/database/collections-doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAC9D,gFAAgF;IAChF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;CACrC;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IACxC,iCAAiC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACtD,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,oCAAoC,EAAE,CAAC;CACnE;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,0BAA0B,CAAC,CA2CrC"}
|