create-windy 0.2.6 → 0.2.8
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 +14 -3
- package/dist/cli.js +191 -87
- package/package.json +1 -1
- package/template/.windy-template.json +2 -2
- package/template/README.md +8 -0
- package/template/apps/server/Dockerfile +2 -0
- package/template/apps/server/package.json +10 -8
- package/template/apps/server/src/access-guards.ts +1 -1
- package/template/apps/server/src/admin/routes.test.ts +10 -0
- package/template/apps/server/src/admin/routes.ts +4 -2
- package/template/apps/server/src/agent/routes.test.ts +1 -1
- package/template/apps/server/src/agent/routes.ts +2 -2
- package/template/apps/server/src/application-services.ts +3 -0
- package/template/apps/server/src/audit/drizzle-log-store.ts +2 -2
- package/template/apps/server/src/audit/policy.ts +1 -1
- package/template/apps/server/src/audit/recovery-queue.test.ts +1 -1
- package/template/apps/server/src/audit/recovery-queue.ts +1 -1
- package/template/apps/server/src/audit/redaction.ts +1 -1
- package/template/apps/server/src/audit/reliable-writer.test.ts +1 -1
- package/template/apps/server/src/audit/reliable-writer.ts +1 -1
- package/template/apps/server/src/audit/search-summary.ts +1 -1
- package/template/apps/server/src/auth/authentication-provider.test.ts +1 -1
- package/template/apps/server/src/auth/credential-service.ts +1 -1
- package/template/apps/server/src/auth/drizzle-repository.ts +2 -2
- package/template/apps/server/src/auth/drizzle-session-operations.ts +1 -1
- package/template/apps/server/src/auth/own-session-routes.test.ts +1 -1
- package/template/apps/server/src/auth/password.ts +2 -4
- package/template/apps/server/src/auth/repository.ts +1 -1
- package/template/apps/server/src/auth/routes.test.ts +1 -1
- package/template/apps/server/src/auth/service.ts +1 -1
- package/template/apps/server/src/bulk-data/artifact-store.ts +1 -1
- package/template/apps/server/src/bulk-data/dictionary-handler.ts +1 -1
- package/template/apps/server/src/bulk-data/drizzle-repository.ts +3 -3
- package/template/apps/server/src/bulk-data/repository.ts +1 -1
- package/template/apps/server/src/bulk-data/routes.test.ts +1 -1
- package/template/apps/server/src/bulk-data/routes.ts +1 -1
- package/template/apps/server/src/bulk-data/service.test.ts +1 -1
- package/template/apps/server/src/bulk-data/service.ts +1 -1
- package/template/apps/server/src/bulk-data/types.ts +1 -1
- package/template/apps/server/src/configuration/bootstrap.ts +2 -2
- package/template/apps/server/src/configuration/definition.ts +2 -2
- package/template/apps/server/src/configuration/drizzle-repository.ts +2 -2
- package/template/apps/server/src/configuration/repository.ts +1 -1
- package/template/apps/server/src/configuration/routes.ts +1 -1
- package/template/apps/server/src/configuration/service.ts +1 -1
- package/template/apps/server/src/data-access/context.ts +2 -2
- package/template/apps/server/src/data-access/query-specification.test.ts +1 -1
- package/template/apps/server/src/data-access/scoped-repository.integration.test.ts +1 -1
- package/template/apps/server/src/data-access/scoped-repository.ts +1 -1
- package/template/apps/server/src/data-access/scoped-resource.test.ts +1 -1
- package/template/apps/server/src/data-access/scoped-resource.ts +1 -1
- package/template/apps/server/src/data-governance/export/approval-port.ts +1 -1
- package/template/apps/server/src/data-governance/export/drizzle-repository.ts +1 -1
- package/template/apps/server/src/data-governance/export/job-runtime.test.ts +2 -2
- package/template/apps/server/src/data-governance/export/job-runtime.ts +2 -3
- package/template/apps/server/src/data-governance/export/postgres-api-fixture.ts +2 -2
- package/template/apps/server/src/data-governance/export/postgres-api.integration.test.ts +1 -1
- package/template/apps/server/src/data-governance/export/routes-test-fixture.ts +3 -3
- package/template/apps/server/src/data-governance/export/routes.ts +1 -1
- package/template/apps/server/src/data-governance/export/scope-snapshot.ts +1 -1
- package/template/apps/server/src/data-governance/export/service.ts +2 -2
- package/template/apps/server/src/data-governance/export/source.ts +1 -1
- package/template/apps/server/src/data-governance/export/types.ts +1 -1
- package/template/apps/server/src/data-governance/plaintext-access.test.ts +1 -1
- package/template/apps/server/src/data-governance/plaintext-access.ts +1 -1
- package/template/apps/server/src/data-governance/plaintext-postgres.integration.test.ts +1 -1
- package/template/apps/server/src/data-governance/user-plaintext-routes.ts +1 -1
- package/template/apps/server/src/data-governance/user-projection.ts +2 -2
- package/template/apps/server/src/example-modules.ts +25 -1
- package/template/apps/server/src/feature/manifest-feature-repository.test.ts +1 -1
- package/template/apps/server/src/feature/manifest-feature-repository.ts +1 -1
- package/template/apps/server/src/feature/routes.ts +3 -6
- package/template/apps/server/src/foundation-access.test.ts +1 -1
- package/template/apps/server/src/foundation-access.ts +1 -1
- package/template/apps/server/src/foundation.ts +21 -7
- package/template/apps/server/src/guards.test.ts +1 -1
- package/template/apps/server/src/guards.ts +3 -3
- package/template/apps/server/src/index.ts +27 -3
- package/template/{packages/modules → apps/server}/src/installed-business-modules.ts +2 -2
- package/template/apps/server/src/jobs/artifact-service.test.ts +1 -1
- package/template/apps/server/src/jobs/artifact-service.ts +2 -2
- package/template/apps/server/src/jobs/drizzle-artifact.ts +2 -2
- package/template/apps/server/src/jobs/drizzle-claim.ts +1 -1
- package/template/apps/server/src/jobs/drizzle-execution-repository.ts +2 -2
- package/template/apps/server/src/jobs/drizzle-execution.integration.test.ts +1 -1
- package/template/apps/server/src/jobs/drizzle-lease.ts +2 -2
- package/template/apps/server/src/jobs/drizzle-mappers.ts +3 -3
- package/template/apps/server/src/jobs/drizzle-recovery-repository.ts +1 -1
- package/template/apps/server/src/jobs/drizzle-repository.integration.test.ts +1 -1
- package/template/apps/server/src/jobs/drizzle-repository.ts +3 -3
- package/template/apps/server/src/jobs/execution-repository.ts +1 -1
- package/template/apps/server/src/jobs/execution.test.ts +2 -2
- package/template/apps/server/src/jobs/in-memory-claim.ts +1 -1
- package/template/apps/server/src/jobs/in-memory-execution.ts +1 -1
- package/template/apps/server/src/jobs/in-memory-lease.ts +1 -1
- package/template/apps/server/src/jobs/legacy-adapter.integration.test.ts +1 -1
- package/template/apps/server/src/jobs/legacy-adapter.test.ts +1 -1
- package/template/apps/server/src/jobs/legacy-adapter.ts +1 -1
- package/template/apps/server/src/jobs/legacy-service-runtime.ts +4 -2
- package/template/apps/server/src/jobs/repository.ts +2 -2
- package/template/apps/server/src/jobs/service.ts +2 -2
- package/template/apps/server/src/jobs/worker.ts +3 -2
- package/template/apps/server/src/license/legacy-license-resolver.ts +1 -1
- package/template/apps/server/src/license/license-resolver.test.ts +1 -1
- package/template/apps/server/src/license/license-resolver.ts +3 -3
- package/template/apps/server/src/license/routes-offline-code.test.ts +2 -2
- package/template/apps/server/src/license/routes.ts +1 -1
- package/template/apps/server/src/license/runtime-audit-reliability.test.ts +2 -2
- package/template/apps/server/src/license/runtime-reminder.test.ts +2 -2
- package/template/apps/server/src/license/runtime-service.test.ts +2 -2
- package/template/apps/server/src/license/runtime-service.ts +2 -2
- package/template/apps/server/src/module-composition.test.ts +1 -1
- package/template/apps/server/src/module-composition.ts +1 -1
- package/template/apps/server/src/module-host.test.ts +145 -0
- package/template/apps/server/src/module-host.ts +110 -0
- package/template/apps/server/src/notification/drizzle-repository.ts +2 -2
- package/template/apps/server/src/notification/repository.ts +1 -1
- package/template/apps/server/src/notification/routes.ts +1 -1
- package/template/apps/server/src/pagination.ts +1 -1
- package/template/apps/server/src/persistence.integration.test.ts +1 -1
- package/template/apps/server/src/persistence.ts +1 -1
- package/template/apps/server/src/profile/routes.ts +1 -1
- package/template/apps/server/src/route-guards.test.ts +1 -1
- package/template/apps/server/src/route-guards.ts +1 -1
- package/template/apps/server/src/runtime-feature.ts +125 -0
- package/template/apps/server/src/runtime-license.ts +1 -1
- package/template/apps/server/src/runtime.test.ts +48 -1
- package/template/apps/server/src/runtime.ts +17 -64
- package/template/apps/server/src/scheduler/audit.ts +1 -1
- package/template/apps/server/src/scheduler/definitions.test.ts +1 -1
- package/template/apps/server/src/scheduler/definitions.ts +2 -2
- package/template/apps/server/src/scheduler/drizzle-durable-links.ts +1 -1
- package/template/apps/server/src/scheduler/drizzle-mappers.ts +1 -1
- package/template/apps/server/src/scheduler/drizzle-repository.ts +1 -1
- package/template/apps/server/src/scheduler/execution-recorder.ts +1 -1
- package/template/apps/server/src/scheduler/history.ts +1 -1
- package/template/apps/server/src/scheduler/overview.ts +1 -1
- package/template/apps/server/src/scheduler/recovery-service.test.ts +1 -1
- package/template/apps/server/src/scheduler/recovery-service.ts +1 -1
- package/template/apps/server/src/scheduler/repository.ts +1 -1
- package/template/apps/server/src/scheduler/routes.ts +1 -1
- package/template/apps/server/src/scheduler/service-idle.test.ts +1 -1
- package/template/apps/server/src/scheduler/service.test.ts +1 -1
- package/template/apps/server/src/scheduler/service.ts +1 -1
- package/template/apps/server/src/scheduler/types.ts +1 -1
- package/template/apps/server/src/search/contracts.ts +2 -2
- package/template/apps/server/src/search/host.ts +1 -1
- package/template/apps/server/src/search/registry.ts +1 -1
- package/template/apps/server/src/search/routes.test.ts +1 -1
- package/template/apps/server/src/search/routes.ts +1 -1
- package/template/apps/server/src/search/service.ts +2 -2
- package/template/apps/server/src/search/test-support.ts +2 -2
- package/template/apps/server/src/session/routes.ts +1 -1
- package/template/apps/server/src/settings/drizzle-repository.ts +2 -2
- package/template/apps/server/src/settings/repository.ts +1 -1
- package/template/apps/server/src/settings/routes.test.ts +1 -1
- package/template/apps/server/src/settings/routes.ts +1 -1
- package/template/apps/server/src/settings/runtime.ts +1 -1
- package/template/apps/server/src/storage/blob-reference-registry.test.ts +1 -1
- package/template/apps/server/src/storage/blob-reference-registry.ts +1 -1
- package/template/apps/server/src/storage/drizzle-upload-repository.integration.test.ts +1 -1
- package/template/apps/server/src/storage/drizzle-upload-repository.ts +2 -2
- package/template/apps/server/src/storage/route-support.ts +1 -1
- package/template/apps/server/src/storage/routes.test.ts +1 -1
- package/template/apps/server/src/storage/routes.ts +2 -2
- package/template/apps/server/src/storage/runtime.ts +6 -4
- package/template/apps/server/src/system/audit-routes.ts +1 -1
- package/template/apps/server/src/system/department-routes.ts +1 -1
- package/template/apps/server/src/system/drizzle-repository.ts +1 -1
- package/template/apps/server/src/system/drizzle-scoped-repository.ts +1 -1
- package/template/apps/server/src/system/drizzle-system.ts +1 -1
- package/template/apps/server/src/system/entities.ts +1 -1
- package/template/apps/server/src/system/identity-route-config.ts +1 -1
- package/template/apps/server/src/system/interface-catalog.test.ts +3 -3
- package/template/apps/server/src/system/interface-catalog.ts +2 -2
- package/template/apps/server/src/system/menu-registry.ts +1 -1
- package/template/apps/server/src/system/menu-routes.ts +1 -1
- package/template/apps/server/src/system/operations.test.ts +1 -1
- package/template/apps/server/src/system/operations.ts +1 -1
- package/template/apps/server/src/system/redis-health.ts +1 -1
- package/template/apps/server/src/system/repository.ts +1 -1
- package/template/apps/server/src/system/resource-route-support.ts +1 -1
- package/template/apps/server/src/system/route-helpers.ts +1 -1
- package/template/apps/server/src/system/route-types.ts +1 -1
- package/template/apps/server/src/system/routes.test.ts +1 -1
- package/template/apps/server/src/system/routes.ts +1 -1
- package/template/apps/server/src/system/user-projection.ts +1 -1
- package/template/apps/server/src/work-order/data-scope.integration.test.ts +1 -1
- package/template/apps/server/src/work-order/drizzle-repository.integration.test.ts +1 -1
- package/template/apps/server/src/work-order/drizzle-repository.ts +2 -2
- package/template/apps/server/src/work-order/foundation-modules.test.ts +15 -5
- package/template/apps/server/src/work-order/repository.ts +1 -1
- package/template/apps/server/src/work-order/routes.test.ts +2 -2
- package/template/apps/server/src/work-order/routes.ts +2 -2
- package/template/apps/server/src/work-order/search-api.test.ts +3 -3
- package/template/apps/server/src/work-order/search-provider.test.ts +3 -3
- package/template/apps/server/src/work-order/service.ts +1 -1
- package/template/apps/server/src/work-order/task.test.ts +1 -1
- package/template/apps/server/src/work-order/task.ts +2 -2
- package/template/apps/server/src/workflow/drizzle-repository.integration.test.ts +2 -2
- package/template/apps/server/src/workflow/drizzle-repository.ts +3 -3
- package/template/apps/server/src/workflow/effects.test.ts +1 -1
- package/template/apps/server/src/workflow/effects.ts +1 -1
- package/template/apps/server/src/workflow/repository.ts +2 -2
- package/template/apps/server/src/workflow/routes.ts +3 -3
- package/template/apps/server/src/workflow/service.ts +1 -1
- package/template/apps/server/src/workflow/timeout-runtime.test.ts +1 -1
- package/template/apps/server/src/workflow/timeout-runtime.ts +2 -2
- package/template/apps/web/Dockerfile +2 -0
- package/template/apps/web/package.json +4 -4
- package/template/apps/web/runtime-server.ts +1 -1
- package/template/apps/web/src/app/layouts/AppLayout.vue +6 -0
- package/template/apps/web/src/components/auth/PasswordChangeForm.vue +52 -7
- package/template/apps/web/src/components/auth/PasswordChangeForm.webtest.ts +43 -0
- package/template/apps/web/src/components/common/DataPagination.vue +1 -1
- package/template/apps/web/src/components/license/LicenseActivationCodeForm.vue +1 -1
- package/template/apps/web/src/components/license/LicenseFlow.webtest.ts +2 -2
- package/template/apps/web/src/composables/useModuleConfigurations.ts +1 -1
- package/template/apps/web/src/composables/useWatermarkSettings.ts +1 -0
- package/template/apps/web/src/composables/watermark-settings.ts +6 -0
- package/template/apps/web/src/composables/watermark-settings.webtest.ts +27 -1
- package/template/apps/web/src/layout/AppSidebar.vue +12 -3
- package/template/apps/web/src/layout/AppSidebar.webtest.ts +11 -0
- package/template/apps/web/src/layout/GlobalWatermark.vue +25 -8
- package/template/apps/web/src/layout/GlobalWatermark.webtest.ts +109 -0
- package/template/apps/web/src/layout/NavigationSearchDialog.vue +1 -1
- package/template/apps/web/src/layout/NotificationMenu.vue +1 -1
- package/template/apps/web/src/layout/navigation.ts +5 -1
- package/template/apps/web/src/layout/navigation.webtest.ts +1 -1
- package/template/apps/web/src/pages/configuration/components/ModuleConfigRollbackDialog.vue +1 -1
- package/template/apps/web/src/pages/configuration/components/ModuleConfigVersionList.vue +1 -1
- package/template/apps/web/src/pages/configuration/components/ModuleConfigurationEditor.vue +1 -1
- package/template/apps/web/src/pages/configuration/components/ModuleConfigurationEditor.webtest.ts +1 -1
- package/template/apps/web/src/pages/configuration/components/ModuleConfigurationWorkbench.vue +1 -1
- package/template/apps/web/src/pages/dashboard/dashboard-presenter.webtest.ts +1 -1
- package/template/apps/web/src/pages/settings/WatermarkSettingsSection.vue +21 -0
- package/template/apps/web/src/pages/system/SystemNotificationsPage.vue +2 -2
- package/template/apps/web/src/pages/system/components/AuditActionCell.vue +7 -2
- package/template/apps/web/src/pages/system/components/AuditLogFilters.vue +7 -2
- package/template/apps/web/src/pages/system/components/NotificationPublishForm.vue +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerOperationsPanel.vue +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerOperationsPanel.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerRunTable.vue +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerRunTable.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerStaleRecoveryForm.vue +1 -1
- package/template/apps/web/src/pages/system/components/SchedulerStaleRecoveryForm.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/components/SystemResourcePage.vue +1 -1
- package/template/apps/web/src/pages/system/components/SystemResourceTable.vue +10 -3
- package/template/apps/web/src/pages/system/components/role-policy/RolePermissionTree.vue +1 -1
- package/template/apps/web/src/pages/system/components/role-policy/RolePermissionTree.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/components/role-policy/RolePolicyForm.vue +1 -1
- package/template/apps/web/src/pages/system/components/role-policy/permission-tree.ts +1 -1
- package/template/apps/web/src/pages/system/components/role-policy/permission-tree.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/composables/useSchedulerOperations.ts +2 -2
- package/template/apps/web/src/pages/system/composables/useSchedulerOperations.webtest.ts +1 -1
- package/template/apps/web/src/pages/system/composables/useSystemResource.ts +1 -1
- package/template/apps/web/src/router/manifest-routes.ts +1 -1
- package/template/apps/web/src/router/manifest-routes.webtest.ts +1 -1
- package/template/apps/web/src/services/access-api.ts +10 -1
- package/template/apps/web/src/services/configuration-api.ts +1 -1
- package/template/apps/web/src/services/license-api.ts +1 -1
- package/template/apps/web/src/services/notification-api.ts +2 -2
- package/template/apps/web/src/services/operations-api.ts +1 -1
- package/template/apps/web/src/services/platform-settings-api.ts +2 -2
- package/template/apps/web/src/services/profile-api.ts +2 -2
- package/template/docs/architecture/durable-jobs.md +5 -0
- package/template/docs/architecture/module-manifest-composition.md +14 -7
- package/template/docs/architecture/object-storage.md +1 -1
- package/template/docs/development/crud-generator.md +4 -1
- package/template/docs/platform/audit-reliability.md +1 -1
- package/template/package.json +2 -1
- package/template/packages/config/package.json +15 -4
- package/template/packages/config/src/platform.ts +1 -1
- package/template/packages/crud-generator/package.json +1 -1
- package/template/packages/crud-generator/src/generator.test.ts +16 -0
- package/template/packages/crud-generator/src/templates/domain.ts +1 -1
- package/template/packages/crud-generator/src/templates/manifest.ts +2 -2
- package/template/packages/crud-generator/src/templates/project.ts +3 -3
- package/template/packages/crud-generator/src/templates/repository.ts +1 -1
- package/template/packages/crud-generator/src/templates/routes.ts +2 -2
- package/template/packages/crud-generator/src/validation.ts +22 -1
- package/template/packages/database/package.json +15 -5
- package/template/packages/database/src/bundle-validation.ts +218 -0
- package/template/packages/database/src/dialects.ts +1 -1
- package/template/packages/database/src/runner.test.ts +160 -13
- package/template/packages/database/src/runner.ts +95 -77
- package/template/packages/database/src/schema/governed-exports.ts +1 -1
- package/template/packages/database/src/schema/identity.ts +1 -1
- package/template/packages/database/src/schema/license-v1.ts +1 -1
- package/template/packages/database/src/schema/notifications.ts +1 -1
- package/template/packages/database/src/schema/platform-settings.ts +1 -1
- package/template/packages/database/src/schema/workflow.ts +1 -1
- package/template/packages/database/src/sql-store.ts +1 -1
- package/template/packages/database/src/store.ts +1 -1
- package/template/packages/example-work-order/index.ts +1 -0
- package/template/packages/example-work-order/package.json +4 -3
- package/template/packages/example-work-order/src/contract.ts +1 -1
- package/template/packages/example-work-order/src/manifest.ts +8 -3
- package/template/packages/example-work-order/src/migration-bundle.test.ts +43 -0
- package/template/packages/example-work-order/src/migration-bundle.ts +64 -0
- package/template/packages/jobs/index.ts +2 -0
- package/template/packages/jobs/package.json +29 -0
- package/template/packages/jobs/src/handlers.test.ts +72 -0
- package/template/{apps/server/src/jobs/handler-registry.ts → packages/jobs/src/handlers.ts} +4 -4
- package/template/{apps/server/src/jobs → packages/jobs/src}/types.ts +7 -1
- package/template/packages/{license-sdk → jobs}/tsconfig.json +0 -1
- package/template/packages/modules/index.ts +1 -1
- package/template/packages/modules/package.json +15 -5
- package/template/packages/modules/src/catalog-validation.ts +123 -0
- package/template/packages/modules/src/composition.test.ts +75 -2
- package/template/packages/modules/src/composition.ts +4 -2
- package/template/packages/modules/src/manifest.ts +7 -12
- package/template/packages/modules/src/menu-composition.ts +1 -1
- package/template/packages/modules/src/system-api-binding.ts +1 -1
- package/template/packages/modules/src/system-api-data-governance.ts +1 -1
- package/template/packages/modules/src/system-api-permissions.ts +1 -1
- package/template/packages/modules/src/system-data-governance.ts +1 -1
- package/template/packages/modules/src/system-features.ts +1 -1
- package/template/packages/modules/src/system-governed-export-bindings.ts +1 -1
- package/template/packages/modules/src/system-module-catalog.ts +1 -1
- package/template/packages/server-sdk/index.ts +5 -0
- package/template/packages/server-sdk/package.json +25 -0
- package/template/packages/server-sdk/src/module-host.ts +29 -0
- package/template/packages/server-sdk/tsconfig.json +16 -0
- package/template/packages/shared/index.ts +3 -0
- package/template/packages/shared/package.json +14 -3
- package/template/packages/shared/src/audit.ts +22 -1
- package/template/packages/shared/src/license-catalog.test.ts +17 -0
- package/template/packages/shared/src/license-catalog.ts +33 -0
- package/template/packages/shared/src/migration.ts +39 -0
- package/template/packages/shared/src/password.ts +4 -0
- package/template/packages/storage/package.json +14 -3
- package/template/packages/license-sdk/index.ts +0 -13
- package/template/packages/license-sdk/package.json +0 -18
- package/template/packages/license-sdk/src/bounded-json-body.test.ts +0 -65
- package/template/packages/license-sdk/src/bounded-json-body.ts +0 -135
- package/template/packages/license-sdk/src/canonical-json.test.ts +0 -28
- package/template/packages/license-sdk/src/canonical-json.ts +0 -104
- package/template/packages/license-sdk/src/client.test.ts +0 -82
- package/template/packages/license-sdk/src/client.ts +0 -86
- package/template/packages/license-sdk/src/device.ts +0 -46
- package/template/packages/license-sdk/src/file-storage.test.ts +0 -80
- package/template/packages/license-sdk/src/file-storage.ts +0 -77
- package/template/packages/license-sdk/src/installation.test.ts +0 -241
- package/template/packages/license-sdk/src/installation.ts +0 -150
- package/template/packages/license-sdk/src/license-parser.ts +0 -56
- package/template/packages/license-sdk/src/offline-code-base32.ts +0 -57
- package/template/packages/license-sdk/src/offline-code-decompression.ts +0 -55
- package/template/packages/license-sdk/src/offline-code-limits.ts +0 -10
- package/template/packages/license-sdk/src/offline-code-wire.ts +0 -72
- package/template/packages/license-sdk/src/offline-code.test.ts +0 -172
- package/template/packages/license-sdk/src/offline-code.ts +0 -319
- package/template/packages/license-sdk/src/payload.test.ts +0 -72
- package/template/packages/license-sdk/src/payload.ts +0 -201
- package/template/packages/license-sdk/src/storage.ts +0 -64
- package/template/packages/license-sdk/src/test-fixtures.ts +0 -59
- package/template/packages/license-sdk/src/v1-test-vector.ts +0 -49
- package/template/packages/license-sdk/src/validation.test.ts +0 -62
- package/template/packages/license-sdk/src/validation.ts +0 -143
- package/template/packages/license-sdk/src/verification.test.ts +0 -97
- package/template/packages/license-sdk/src/verification.ts +0 -199
|
@@ -3,8 +3,8 @@ import type {
|
|
|
3
3
|
PageResult,
|
|
4
4
|
SchedulerOperationsSnapshot,
|
|
5
5
|
SchedulerRunHistoryItem,
|
|
6
|
-
} from "@
|
|
7
|
-
import { DEFAULT_PAGE_SIZE } from "@
|
|
6
|
+
} from "@southwind-ai/shared";
|
|
7
|
+
import { DEFAULT_PAGE_SIZE } from "@southwind-ai/shared";
|
|
8
8
|
import {
|
|
9
9
|
getSchedulerOperations,
|
|
10
10
|
getScheduledTaskRuns,
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
AuditActionDefinition,
|
|
3
|
+
LicenseCatalogDefinition,
|
|
4
|
+
MenuNode,
|
|
5
|
+
PermissionDefinition,
|
|
6
|
+
} from "@southwind-ai/shared";
|
|
2
7
|
import type {
|
|
3
8
|
WebAccessActor,
|
|
4
9
|
WebAccessSnapshot,
|
|
@@ -9,6 +14,8 @@ import { apiRequest } from "./http";
|
|
|
9
14
|
interface FoundationResponse {
|
|
10
15
|
menus: MenuNode[];
|
|
11
16
|
permissions: PermissionDefinition[];
|
|
17
|
+
auditActionCatalog: AuditActionDefinition[];
|
|
18
|
+
licenseCatalog: LicenseCatalogDefinition[];
|
|
12
19
|
access: {
|
|
13
20
|
actor: WebAccessActor;
|
|
14
21
|
features: WebFeatureAccess[];
|
|
@@ -22,5 +29,7 @@ export async function loadAccessSnapshot(): Promise<WebAccessSnapshot> {
|
|
|
22
29
|
menus: foundation.menus,
|
|
23
30
|
features: foundation.access.features,
|
|
24
31
|
permissions: foundation.permissions,
|
|
32
|
+
auditActionCatalog: foundation.auditActionCatalog,
|
|
33
|
+
licenseCatalog: foundation.licenseCatalog,
|
|
25
34
|
};
|
|
26
35
|
}
|
|
@@ -4,8 +4,8 @@ import type {
|
|
|
4
4
|
PageResult,
|
|
5
5
|
PlatformNotification,
|
|
6
6
|
PublishNotificationInput,
|
|
7
|
-
} from "@
|
|
8
|
-
import { DEFAULT_PAGE_SIZE } from "@
|
|
7
|
+
} from "@southwind-ai/shared";
|
|
8
|
+
import { DEFAULT_PAGE_SIZE } from "@southwind-ai/shared";
|
|
9
9
|
import { apiRequest } from "./http";
|
|
10
10
|
|
|
11
11
|
export function listNotifications(page = 1, pageSize = DEFAULT_PAGE_SIZE) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { apiRequest } from "./http";
|
|
2
|
-
import type { PlatformBrandingSettings } from "@
|
|
2
|
+
import type { PlatformBrandingSettings } from "@southwind-ai/shared";
|
|
3
3
|
|
|
4
|
-
export type { PlatformBrandingSettings } from "@
|
|
4
|
+
export type { PlatformBrandingSettings } from "@southwind-ai/shared";
|
|
5
5
|
|
|
6
6
|
export function loadPublicBranding(): Promise<PlatformBrandingSettings> {
|
|
7
7
|
return apiRequest<PlatformBrandingSettings>("/platform/branding");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { UserProfile, UserProfileUpdate } from "@
|
|
1
|
+
import type { UserProfile, UserProfileUpdate } from "@southwind-ai/shared";
|
|
2
2
|
import { apiRequest } from "./http";
|
|
3
3
|
|
|
4
|
-
export type { UserProfile, UserProfileUpdate } from "@
|
|
4
|
+
export type { UserProfile, UserProfileUpdate } from "@southwind-ai/shared";
|
|
5
5
|
|
|
6
6
|
export function loadUserProfile(): Promise<UserProfile> {
|
|
7
7
|
return apiRequest<UserProfile>("/system/profile");
|
|
@@ -35,6 +35,11 @@ Durable Job 是 Scheduler、批量导入导出和后续后台任务共享的持
|
|
|
35
35
|
|
|
36
36
|
业务模块用稳定 `handlerKey` 注册 payload parser 和 executor。重复 key 会阻止 composition;未知 key 被领取后形成不可重试的 `HANDLER_NOT_REGISTERED` failure,不会把任务永久留在 running。parser 必须先把 `Record<string, unknown>` 收窄为业务 DTO,Durable Job 核心不引入业务类型。
|
|
37
37
|
|
|
38
|
+
业务可依赖的 Handler、提交和任务快照 Interface 已收口到版本化
|
|
39
|
+
`@southwind-ai/jobs` package;Repository、Drizzle、租约领取和 Worker Implementation
|
|
40
|
+
继续留在 Server 内。业务模块通过 `@southwind-ai/server-sdk` 的 Module Host 注册 Handler,
|
|
41
|
+
不导入 `apps/server/src/jobs` 私有路径。
|
|
42
|
+
|
|
38
43
|
Worker 为 handler 提供 `AbortSignal`、heartbeat 和追加 progress。Worker 自动按 lease 时长的三分之一续租,同时允许长步骤主动 heartbeat。进程内 timeout 会触发 abort 和结构化失败;进程直接退出时,PostgreSQL 中的 `expiresAt` / `timeoutAt` 由下一实例 sweep,不依赖旧进程执行 finally。
|
|
39
44
|
|
|
40
45
|
Handler 必须满足:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Module Manifest 组合契约
|
|
2
2
|
|
|
3
|
-
更新时间:2026-07-
|
|
3
|
+
更新时间:2026-07-23。
|
|
4
4
|
|
|
5
5
|
## 目标与边界
|
|
6
6
|
|
|
@@ -11,6 +11,7 @@ Manifest 当前覆盖:
|
|
|
11
11
|
- Feature、Permission、API Route、Admin Route 与菜单 Surface;
|
|
12
12
|
- Migration 与 Schema Export 证据;
|
|
13
13
|
- Scheduled Task、Agent Tool、Provider 与 Audit Action;
|
|
14
|
+
- Feature 依赖与可用 License 版本;
|
|
14
15
|
- 模块依赖及版本元数据。
|
|
15
16
|
|
|
16
17
|
## 不变量
|
|
@@ -19,22 +20,28 @@ Manifest 当前覆盖:
|
|
|
19
20
|
|
|
20
21
|
1. 缺失依赖、依赖循环及同类能力重复 Key;
|
|
21
22
|
2. Menu、Admin Route、API、Task、Tool、Provider 对未知 Permission 或 Feature 的引用;
|
|
22
|
-
3. Tool 对未知 Audit Action 的引用;
|
|
23
|
-
4.
|
|
24
|
-
5.
|
|
25
|
-
6.
|
|
23
|
+
3. 未定义或重复的业务 Audit Action,以及 Tool 对未知 Audit Action 的引用;
|
|
24
|
+
4. Feature 的未知依赖、自依赖、循环依赖和未知 License 版本;
|
|
25
|
+
5. Menu 与 Admin Route 路径或 Guard 漂移;
|
|
26
|
+
6. 已声明 Route、Task、Tool、Provider 缺少宿主 Handler,或宿主注册未声明 Handler;
|
|
27
|
+
7. Schema Export 没有对应 Migration ID 证据,或可执行 Migration 归属错误。
|
|
26
28
|
|
|
27
29
|
同一个稳定能力基础 Key 仍可分别出现在 Feature、Permission 前缀、菜单和页面入口中;“重复”按能力类别判断,避免破坏项目既定 Key 语义。
|
|
28
30
|
|
|
29
31
|
## 模块与 Adapter
|
|
30
32
|
|
|
31
|
-
- `@
|
|
33
|
+
- `@southwind-ai/modules` 是深 Module:拥有声明类型、依赖排序、引用规则和组合验证,不依赖 Elysia 或 Vue。
|
|
32
34
|
- `systemModuleFactories` 是 15 个平台模块的运行时目录;`systemFoundationModule()` 仅保留为兼容聚合视图,不再作为 Composition Root 中唯一的巨型平台模块。
|
|
33
35
|
- 多个模块可以向同一菜单目录贡献入口;`composeModuleMenus()` 合并一致的目录壳,并在标题、类型、顺序或 Guard 漂移时 fail fast。
|
|
34
36
|
- Server Adapter 提供 API Route、Task、Tool、Provider Handler Key;启动监听前验证。
|
|
37
|
+
- 业务模块可在 `auditActions` 中直接注册包含 Key、名称和说明的动作定义;组合后的
|
|
38
|
+
Audit Action Catalog 与 License Catalog 会通过 Foundation / Admin Bootstrap 契约开放,
|
|
39
|
+
管理端筛选与展示不维护第二份静态业务 Key。
|
|
40
|
+
- Feature 依赖不仅在组合时检查,Server 请求期也会递归解析依赖状态;任一依赖停用、
|
|
41
|
+
隐藏、缺失或解析失败时,依赖方 fail-closed。
|
|
35
42
|
- Web Adapter 提供实际 Admin Route Key;构建测试验证页面、Guard 与 Manifest 一致。
|
|
36
43
|
- 普通业务 Module 可以只声明 API、Task 等 Server 能力;`menus` 与 `adminRoutes` 为空时,Windy Web 不导入业务 package 或 Vue 页面。
|
|
37
|
-
- Drizzle schema 的具体表定义仍在 `@
|
|
44
|
+
- Drizzle schema 的具体表定义仍在 `@southwind-ai/database`,Manifest 只公开模块 Schema Export 和历史 migration 证据,不复制数据库实现。
|
|
38
45
|
|
|
39
46
|
这种边界允许宿主替换实现,同时保持 Manifest 的能力语义稳定。
|
|
40
47
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 模块与 seam
|
|
4
4
|
|
|
5
|
-
`@
|
|
5
|
+
`@southwind-ai/storage` 是平台文件能力的唯一底层模块。业务模块只学习 `BlobStore` 接口:流式写入、流式打开和删除;文件名、MIME、上传会话、Owner、权限与审计不进入这个底层接口,由上层上传模块统一处理。
|
|
6
6
|
|
|
7
7
|
`ArtifactRef` 使用 `blob_` 加 128 位随机值,不包含目录、租户或内容摘要,不能由业务主键推算。`ContentHash` 当前固定为 SHA-256。调用方可以声明大小和摘要,本地 Adapter 会在写入过程中验证;任何不一致都不会发布 Blob。
|
|
8
8
|
|
|
@@ -17,6 +17,7 @@ bun run --cwd packages/inventory test
|
|
|
17
17
|
|
|
18
18
|
生成包包含:
|
|
19
19
|
|
|
20
|
+
- 与 Module Key 对齐的 `@southwind-ai/<module-name>` workspace 包名;
|
|
20
21
|
- domain 类型和严格 Zod create/update DTO;
|
|
21
22
|
- PostgreSQL canonical Drizzle schema;
|
|
22
23
|
- 模块私有 Repository 端口和 Drizzle 实现;
|
|
@@ -31,7 +32,7 @@ bun run --cwd packages/inventory test
|
|
|
31
32
|
|
|
32
33
|
生成完成后必须人工完成以下显式接线并接受代码评审:
|
|
33
34
|
|
|
34
|
-
1. 把生成 schema 从业务模块公开出口接入 `@
|
|
35
|
+
1. 把生成 schema 从业务模块公开出口接入 `@southwind-ai/database` canonical schema,再执行 `bun run db:generate` 并审阅 migration diff。
|
|
35
36
|
2. 在 Server composition root 创建模块自己的 Drizzle Repository,注入 service;业务模块不得读取其它模块 Repository。
|
|
36
37
|
3. 为生成的 `CrudAccessPort` 提供平台 Adapter。Adapter 必须调用现有 `evaluateAccessGuards`,按 `license → license-version → dynamic feature → permission` 顺序执行策略;没有商业版本限制的基础功能省略 `license-version`;不能在生成模块中复制 Guard 逻辑。
|
|
37
38
|
4. 把 `CrudAuditPort` 接到平台可靠审计 writer,并保留生成器为 create/update/delete 指定的 `critical` 策略;随后注册生成的 Module Manifest 和 routes。
|
|
@@ -43,6 +44,8 @@ bun run --cwd packages/inventory test
|
|
|
43
44
|
|
|
44
45
|
当前 `schemaVersion` 固定为 `1`,支持 `string`、`integer`、`boolean`、`datetime` 和 `json` 字段。字符串必须声明 `maxLength`;`id/status/created*/updated*/deleted*` 是平台保留字段。权限固定拆为:
|
|
45
46
|
|
|
47
|
+
`module.name` 同时用于生成 npm 包名。生成器会拒绝 `shared`、`modules`、`database` 等已由平台占用的 `@southwind-ai/*` 包名,防止业务模块覆盖平台 Interface;新增平台 package 时必须同步扩充该保留目录。目标目录已存在时仍会在写入前失败,生成器不会通过改名掩盖 workspace 冲突。
|
|
48
|
+
|
|
46
49
|
- `<module>.<resource>.read`
|
|
47
50
|
- `<module>.<resource>.create`
|
|
48
51
|
- `<module>.<resource>.update`
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
批量任务派发器每 5 秒轮询一次。定时执行返回 `claimed: false` 代表没有业务任务可领取,Scheduler 完成并立即丢弃这条 idle run,也不写 `task.execute` 审计;人工触发即使没有领取任务仍保留执行历史和 `task.trigger` / `task.execute`,真实领取、失败、重试和 Guard 拒绝同样完整留痕。idle 判定由任务定义显式声明,普通任务不会自动套用。
|
|
19
19
|
|
|
20
|
-
审计页面使用操作者、动作和时间三个选择控件。操作者候选来自最近 100 条审计记录,动作候选来自 `@
|
|
20
|
+
审计页面使用操作者、动作和时间三个选择控件。操作者候选来自最近 100 条审计记录,动作候选来自 `@southwind-ai/shared` 的稳定动作目录,并以中文名称和说明展示;筛选请求继续传递稳定 action key。时间选择按最近 24 小时、7 天或 30 天换算为 ISO `occurredAfter`,内存与 PostgreSQL Reader 使用同一时间边界,非法时间值返回 `400 INVALID_AUDIT_TIME_RANGE`。
|
|
21
21
|
|
|
22
22
|
常规审计列表在服务端固定排除 `system_scheduler` 执行身份产生的日志,客户端不能构造参数绕过;调度执行结果统一到定时任务的执行历史查看。审计导出提供“包含定时器日志”选项,默认关闭,只影响本次导出,不改变页面列表状态。
|
|
23
23
|
|
package/template/package.json
CHANGED
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"ops:db": "bun run scripts/production-database.ts",
|
|
38
38
|
"ops:release": "bun run scripts/production-release.ts",
|
|
39
39
|
"test:release:evidence": "bun run scripts/release-evidence.ts",
|
|
40
|
-
"
|
|
40
|
+
"test:packages:pack": "bun run scripts/platform-package-release.ts",
|
|
41
|
+
"typecheck": "bun run --cwd apps/web typecheck && bun run --cwd apps/server typecheck && bun run --cwd apps/license typecheck && bun run --cwd apps/signing-service typecheck && bun run --cwd packages/license-sdk typecheck && bun run --cwd packages/jobs typecheck && bun run --cwd packages/server-sdk typecheck && bun run --cwd packages/storage typecheck && bun run --cwd packages/database typecheck && bun run --cwd packages/crud-generator typecheck && bun run --cwd packages/create-windy typecheck",
|
|
41
42
|
"lint": "oxlint .",
|
|
42
43
|
"format": "oxfmt",
|
|
43
44
|
"format:staged": "lint-staged",
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"
|
|
2
|
+
"name": "@southwind-ai/config",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"license": "UNLICENSED",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.3.0"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.ts",
|
|
11
|
+
"src/**/*.ts",
|
|
12
|
+
"!src/**/*.test.ts"
|
|
13
|
+
],
|
|
6
14
|
"dependencies": {
|
|
7
|
-
"@
|
|
15
|
+
"@southwind-ai/shared": "workspace:*",
|
|
8
16
|
"zod": "^4.4.3"
|
|
9
17
|
},
|
|
10
18
|
"exports": {
|
|
11
19
|
".": "./index.ts"
|
|
20
|
+
},
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
12
23
|
}
|
|
13
24
|
}
|
|
@@ -103,6 +103,10 @@ describe("CRUD generator", () => {
|
|
|
103
103
|
);
|
|
104
104
|
expect(result.files).toContain("src/drizzle-repository.ts");
|
|
105
105
|
expect(result.files).toContain("src/manifest.ts");
|
|
106
|
+
const packageManifest = JSON.parse(
|
|
107
|
+
await readFile(resolve(output, "package.json"), "utf8"),
|
|
108
|
+
) as { name?: string };
|
|
109
|
+
expect(packageManifest.name).toBe("@southwind-ai/inventory");
|
|
106
110
|
const manifestSource = await readFile(
|
|
107
111
|
resolve(output, "src/manifest.ts"),
|
|
108
112
|
"utf8",
|
|
@@ -157,6 +161,18 @@ describe("CRUD generator", () => {
|
|
|
157
161
|
);
|
|
158
162
|
});
|
|
159
163
|
|
|
164
|
+
test("拒绝占用 southwind-ai 平台包名", async () => {
|
|
165
|
+
const reserved = structuredClone(fixture);
|
|
166
|
+
reserved.module.name = "shared";
|
|
167
|
+
const reservedOutput = resolve(fixtureRoot, "reserved-package");
|
|
168
|
+
await expect(
|
|
169
|
+
generateCrudModule(reserved, { outputDirectory: reservedOutput }),
|
|
170
|
+
).rejects.toThrow("@southwind-ai/shared 是平台保留包名");
|
|
171
|
+
expect(
|
|
172
|
+
await Bun.file(resolve(reservedOutput, "package.json")).exists(),
|
|
173
|
+
).toBe(false);
|
|
174
|
+
});
|
|
175
|
+
|
|
160
176
|
test("未知 canonical 字段和路径逃逸在创建临时目录前 fail-fast", async () => {
|
|
161
177
|
const unknown = structuredClone(fixture) as typeof fixture & {
|
|
162
178
|
compatibility?: string;
|
|
@@ -9,7 +9,7 @@ export function domainTemplate(definition: CrudModuleDefinition): string {
|
|
|
9
9
|
` ${field.name}${field.required ? "" : "?"}: ${domainType(field)};`,
|
|
10
10
|
)
|
|
11
11
|
.join("\n");
|
|
12
|
-
return `import type { EntityAuditFields, LifecycleStatus } from "@
|
|
12
|
+
return `import type { EntityAuditFields, LifecycleStatus } from "@southwind-ai/shared";
|
|
13
13
|
|
|
14
14
|
export interface ${entity.name} extends EntityAuditFields {
|
|
15
15
|
id: string;
|
|
@@ -7,8 +7,8 @@ export function manifestTemplate(definition: CrudModuleDefinition): string {
|
|
|
7
7
|
const licenseVersions = entity.allowedLicenseVersions?.length
|
|
8
8
|
? `allowedLicenseVersions: [${entity.allowedLicenseVersions.map((key) => `licenseVersionKey(${quote(key)})`).join(", ")}],`
|
|
9
9
|
: "";
|
|
10
|
-
return `import type { ModuleManifest } from "@
|
|
11
|
-
import { featureKey, licenseVersionKey } from "@
|
|
10
|
+
return `import type { ModuleManifest } from "@southwind-ai/modules";
|
|
11
|
+
import { featureKey, licenseVersionKey } from "@southwind-ai/shared";
|
|
12
12
|
|
|
13
13
|
export function ${module.name.replace(/[-.]/g, "_")}Module(): ModuleManifest {
|
|
14
14
|
return {
|
|
@@ -4,7 +4,7 @@ import { camel, quote } from "../template-helpers.js";
|
|
|
4
4
|
export function packageTemplate(definition: CrudModuleDefinition): string {
|
|
5
5
|
return `${JSON.stringify(
|
|
6
6
|
{
|
|
7
|
-
name: `@
|
|
7
|
+
name: `@southwind-ai/${definition.module.name}`,
|
|
8
8
|
version: definition.module.version,
|
|
9
9
|
private: true,
|
|
10
10
|
type: "module",
|
|
@@ -13,8 +13,8 @@ export function packageTemplate(definition: CrudModuleDefinition): string {
|
|
|
13
13
|
test: "bun test src",
|
|
14
14
|
},
|
|
15
15
|
dependencies: {
|
|
16
|
-
"@
|
|
17
|
-
"@
|
|
16
|
+
"@southwind-ai/modules": "workspace:*",
|
|
17
|
+
"@southwind-ai/shared": "workspace:*",
|
|
18
18
|
"drizzle-orm": "^0.45.2",
|
|
19
19
|
zod: "^4.4.3",
|
|
20
20
|
},
|
|
@@ -2,7 +2,7 @@ import type { CrudModuleDefinition } from "../definition.js";
|
|
|
2
2
|
|
|
3
3
|
export function repositoryTemplate(definition: CrudModuleDefinition): string {
|
|
4
4
|
const { entity } = definition;
|
|
5
|
-
return `import type { PageResult } from "@
|
|
5
|
+
return `import type { PageResult } from "@southwind-ai/shared";
|
|
6
6
|
import type { ${entity.name}, ${entity.name}CreateInput, ${entity.name}UpdateInput } from "./domain.js";
|
|
7
7
|
|
|
8
8
|
export interface ${entity.name}ListQuery {
|
|
@@ -24,8 +24,8 @@ export function routesTemplate(definition: CrudModuleDefinition): string {
|
|
|
24
24
|
)
|
|
25
25
|
.join("\n");
|
|
26
26
|
return `import { randomUUIDv7 } from "bun";
|
|
27
|
-
import { featureKey, licenseVersionKey } from "@
|
|
28
|
-
import type { ApiPermissionBinding, AuditEvent, FeatureFlagDefinition } from "@
|
|
27
|
+
import { featureKey, licenseVersionKey } from "@southwind-ai/shared";
|
|
28
|
+
import type { ApiPermissionBinding, AuditEvent, FeatureFlagDefinition } from "@southwind-ai/shared";
|
|
29
29
|
import { ZodError } from "zod";
|
|
30
30
|
import type { ${entity.name}Service } from "./service.js";
|
|
31
31
|
|
|
@@ -8,6 +8,22 @@ const safeKey = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/;
|
|
|
8
8
|
const safeIdentifier = /^[A-Za-z][A-Za-z0-9]*$/;
|
|
9
9
|
const safeSnakeCase = /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/;
|
|
10
10
|
const semver = /^\d+\.\d+\.\d+$/;
|
|
11
|
+
const reservedSouthwindPackageNames = new Set([
|
|
12
|
+
"config",
|
|
13
|
+
"crud-generator",
|
|
14
|
+
"database",
|
|
15
|
+
"example-work-order",
|
|
16
|
+
"jobs",
|
|
17
|
+
"license",
|
|
18
|
+
"license-service",
|
|
19
|
+
"modules",
|
|
20
|
+
"server",
|
|
21
|
+
"server-sdk",
|
|
22
|
+
"shared",
|
|
23
|
+
"signing-service",
|
|
24
|
+
"storage",
|
|
25
|
+
"web",
|
|
26
|
+
]);
|
|
11
27
|
const fieldTypes = new Set<CrudFieldType>([
|
|
12
28
|
"string",
|
|
13
29
|
"integer",
|
|
@@ -54,11 +70,16 @@ export function parseCrudModuleDefinition(
|
|
|
54
70
|
parseField(field, index),
|
|
55
71
|
);
|
|
56
72
|
|
|
73
|
+
const moduleName = key(module.name, "module.name");
|
|
74
|
+
if (reservedSouthwindPackageNames.has(moduleName)) {
|
|
75
|
+
fail(`@southwind-ai/${moduleName} 是平台保留包名`);
|
|
76
|
+
}
|
|
77
|
+
|
|
57
78
|
const parsed: CrudModuleDefinition = {
|
|
58
79
|
schemaVersion:
|
|
59
80
|
root.schemaVersion === 1 ? 1 : fail("schemaVersion 必须为 1"),
|
|
60
81
|
module: {
|
|
61
|
-
name:
|
|
82
|
+
name: moduleName,
|
|
62
83
|
label: text(module.label, "module.label"),
|
|
63
84
|
description: text(module.description, "module.description"),
|
|
64
85
|
version: match(module.version, semver, "module.version"),
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "@
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"
|
|
2
|
+
"name": "@southwind-ai/database",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"license": "UNLICENSED",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.3.0"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.ts",
|
|
11
|
+
"src/**/*.ts",
|
|
12
|
+
"!src/**/*.test.ts"
|
|
13
|
+
],
|
|
6
14
|
"scripts": {
|
|
7
15
|
"typecheck": "tsc --noEmit --project tsconfig.json"
|
|
8
16
|
},
|
|
9
17
|
"dependencies": {
|
|
10
|
-
"@
|
|
11
|
-
"@windy/shared": "workspace:*",
|
|
18
|
+
"@southwind-ai/shared": "workspace:*",
|
|
12
19
|
"drizzle-orm": "^0.45.2"
|
|
13
20
|
},
|
|
14
21
|
"exports": {
|
|
15
22
|
".": "./index.ts"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
16
26
|
}
|
|
17
27
|
}
|