zudojs-cli 0.1.1 → 1.0.0
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/LICENSE +21 -0
- package/README.md +14 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -14
- package/dist/src/adapters/databases/postgres.adapter.js +0 -30
- package/dist/src/adapters/frontend/angular.adapter.js +6 -0
- package/dist/src/adapters/frontend/astro.adapter.js +2 -2
- package/dist/src/adapters/frontend/react.adapter.js +26 -17
- package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
- package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
- package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
- package/dist/src/adapters/frontend/vue.adapter.js +1 -0
- package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
- package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
- package/dist/src/bin/zudojs.js +42 -6
- package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
- package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
- package/dist/src/cliApplication/cliApplication.core.js +20 -5
- package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
- package/dist/src/cliConstant/cliConstant.value.js +2 -1
- package/dist/src/cliConstant/cliVersion.d.ts +16 -0
- package/dist/src/cliConstant/cliVersion.js +57 -0
- package/dist/src/cliParser/cliParser.core.js +7 -0
- package/dist/src/cliParser/cliParser.shortOption.js +1 -1
- package/dist/src/commands/add.command.js +27 -24
- package/dist/src/commands/build.command.js +13 -7
- package/dist/src/commands/create.command.js +177 -84
- package/dist/src/commands/dev.command.js +62 -27
- package/dist/src/commands/doctor.command.js +45 -23
- package/dist/src/commands/generate.command.js +103 -34
- package/dist/src/constants/index.d.ts +3 -1
- package/dist/src/constants/index.js +3 -1
- package/dist/src/generators/command/command.generator.d.ts +1 -0
- package/dist/src/generators/command/command.generator.js +10 -4
- package/dist/src/generators/controller/controller.generator.d.ts +1 -0
- package/dist/src/generators/controller/controller.generator.js +12 -9
- package/dist/src/generators/dto/dto.generator.d.ts +1 -0
- package/dist/src/generators/dto/dto.generator.js +9 -3
- package/dist/src/generators/event/event.generator.d.ts +1 -0
- package/dist/src/generators/event/event.generator.js +10 -4
- package/dist/src/generators/frontend/frontendGenerator.core.js +4 -28
- package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
- package/dist/src/generators/frontend/frontendPipeline.js +93 -0
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +1 -2
- package/dist/src/generators/fullstack/fullstackComposer.core.js +68 -62
- package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +11 -0
- package/dist/src/generators/infrastructure/infrastructure.generator.js +101 -61
- package/dist/src/generators/integration/integrationGenerator.core.d.ts +6 -0
- package/dist/src/generators/integration/integrationGenerator.core.js +35 -6
- package/dist/src/generators/job/job.generator.d.ts +1 -0
- package/dist/src/generators/job/job.generator.js +9 -3
- package/dist/src/generators/middleware/middleware.generator.d.ts +1 -0
- package/dist/src/generators/middleware/middleware.generator.js +10 -4
- package/dist/src/generators/model/model.generator.d.ts +1 -0
- package/dist/src/generators/model/model.generator.js +9 -3
- package/dist/src/generators/module/module.generator.d.ts +1 -0
- package/dist/src/generators/module/module.generator.js +11 -24
- package/dist/src/generators/project/project.generator.js +2 -23
- package/dist/src/generators/query/query.generator.d.ts +1 -0
- package/dist/src/generators/query/query.generator.js +10 -4
- package/dist/src/generators/repository/repository.generator.d.ts +1 -0
- package/dist/src/generators/repository/repository.generator.js +12 -9
- package/dist/src/generators/route/route.generator.d.ts +1 -0
- package/dist/src/generators/route/route.generator.js +11 -5
- package/dist/src/generators/service/service.generator.d.ts +1 -0
- package/dist/src/generators/service/service.generator.js +12 -9
- package/dist/src/generators/validator/validator.generator.d.ts +1 -0
- package/dist/src/generators/validator/validator.generator.js +9 -3
- package/dist/src/installers/dependency.installer.js +6 -2
- package/dist/src/manifest/manifestManager.core.d.ts +3 -0
- package/dist/src/prompts/backend/index.d.ts +1 -0
- package/dist/src/prompts/backend/index.js +1 -0
- package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
- package/dist/src/prompts/backend/services.prompt.js +39 -0
- package/dist/src/prompts/index.d.ts +0 -1
- package/dist/src/prompts/index.js +0 -1
- package/dist/src/rollback/rollbackManager.core.js +0 -1
- package/dist/src/runners/process/processRunner.core.d.ts +4 -0
- package/dist/src/runners/process/processRunner.core.js +17 -3
- package/dist/src/scaffolders/framework.scaffolder.js +9 -6
- package/dist/src/scaffolders/scaffolder.helper.js +7 -2
- package/dist/src/scripts/postinstall.cjs +24 -3
- package/dist/src/templates/microservice/index.d.ts +1 -1
- package/dist/src/templates/microservice/index.js +1 -1
- package/dist/src/templates/microservice/microservice.template.d.ts +15 -1
- package/dist/src/templates/microservice/microservice.template.js +165 -183
- package/dist/src/templates/modular-monolith/modularMonolith.template.js +54 -106
- package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
- package/dist/src/templates/monolith/monolith.template.js +50 -94
- package/dist/src/templates/shared/appRuntime.template.d.ts +71 -0
- package/dist/src/templates/shared/appRuntime.template.js +209 -0
- package/dist/src/templates/shared/index.d.ts +5 -0
- package/dist/src/templates/shared/index.js +5 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.js +3 -3
- package/dist/src/utils/utils.exec.d.ts +19 -1
- package/dist/src/utils/utils.exec.js +37 -3
- package/dist/src/utils/utils.fileSystem.d.ts +6 -0
- package/dist/src/utils/utils.fileSystem.js +19 -0
- package/dist/src/utils/utils.name.d.ts +26 -0
- package/dist/src/utils/utils.name.js +51 -1
- package/package.json +29 -22
- package/src/scripts/postinstall.cjs +24 -3
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/adapters/databases/index.d.ts.map +0 -1
- package/dist/src/adapters/databases/index.js.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
- package/dist/src/adapters/frontend/index.d.ts.map +0 -1
- package/dist/src/adapters/frontend/index.js.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/index.js.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
- package/dist/src/bin/zudojs.d.ts.map +0 -1
- package/dist/src/bin/zudojs.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
- package/dist/src/cliApplication/index.d.ts.map +0 -1
- package/dist/src/cliApplication/index.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
- package/dist/src/cliCommand/index.d.ts.map +0 -1
- package/dist/src/cliCommand/index.js.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
- package/dist/src/cliConstant/index.d.ts.map +0 -1
- package/dist/src/cliConstant/index.js.map +0 -1
- package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
- package/dist/src/cliError/cliError.argument.js.map +0 -1
- package/dist/src/cliError/cliError.base.d.ts.map +0 -1
- package/dist/src/cliError/cliError.base.js.map +0 -1
- package/dist/src/cliError/cliError.command.d.ts.map +0 -1
- package/dist/src/cliError/cliError.command.js.map +0 -1
- package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
- package/dist/src/cliError/cliError.execution.js.map +0 -1
- package/dist/src/cliError/cliError.option.d.ts.map +0 -1
- package/dist/src/cliError/cliError.option.js.map +0 -1
- package/dist/src/cliError/index.d.ts.map +0 -1
- package/dist/src/cliError/index.js.map +0 -1
- package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.core.js.map +0 -1
- package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.helper.js.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
- package/dist/src/cliParser/index.d.ts.map +0 -1
- package/dist/src/cliParser/index.js.map +0 -1
- package/dist/src/cliType/cliType.type.d.ts.map +0 -1
- package/dist/src/cliType/cliType.type.js.map +0 -1
- package/dist/src/cliType/index.d.ts.map +0 -1
- package/dist/src/cliType/index.js.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
- package/dist/src/cliVersion/index.d.ts.map +0 -1
- package/dist/src/cliVersion/index.js.map +0 -1
- package/dist/src/commands/add.command.d.ts.map +0 -1
- package/dist/src/commands/add.command.js.map +0 -1
- package/dist/src/commands/build.command.d.ts.map +0 -1
- package/dist/src/commands/build.command.js.map +0 -1
- package/dist/src/commands/create.command.d.ts.map +0 -1
- package/dist/src/commands/create.command.js.map +0 -1
- package/dist/src/commands/dev.command.d.ts.map +0 -1
- package/dist/src/commands/dev.command.js.map +0 -1
- package/dist/src/commands/doctor.command.d.ts.map +0 -1
- package/dist/src/commands/doctor.command.js.map +0 -1
- package/dist/src/commands/generate.command.d.ts.map +0 -1
- package/dist/src/commands/generate.command.js.map +0 -1
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js.map +0 -1
- package/dist/src/commands/info.command.d.ts.map +0 -1
- package/dist/src/commands/info.command.js.map +0 -1
- package/dist/src/constants/index.d.ts.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/errors/index.d.ts.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
- package/dist/src/generators/backend/backend.generator.js.map +0 -1
- package/dist/src/generators/backend/index.d.ts.map +0 -1
- package/dist/src/generators/backend/index.js.map +0 -1
- package/dist/src/generators/command/command.generator.d.ts.map +0 -1
- package/dist/src/generators/command/command.generator.js.map +0 -1
- package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
- package/dist/src/generators/controller/controller.generator.js.map +0 -1
- package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
- package/dist/src/generators/dto/dto.generator.js.map +0 -1
- package/dist/src/generators/dto/index.d.ts.map +0 -1
- package/dist/src/generators/dto/index.js.map +0 -1
- package/dist/src/generators/event/event.generator.d.ts.map +0 -1
- package/dist/src/generators/event/event.generator.js.map +0 -1
- package/dist/src/generators/event/index.d.ts.map +0 -1
- package/dist/src/generators/event/index.js.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
- package/dist/src/generators/frontend/index.d.ts.map +0 -1
- package/dist/src/generators/frontend/index.js.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
- package/dist/src/generators/fullstack/index.d.ts.map +0 -1
- package/dist/src/generators/fullstack/index.js.map +0 -1
- package/dist/src/generators/index.d.ts.map +0 -1
- package/dist/src/generators/index.js.map +0 -1
- package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/index.js.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
- package/dist/src/generators/integration/index.d.ts.map +0 -1
- package/dist/src/generators/integration/index.js.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
- package/dist/src/generators/job/index.d.ts.map +0 -1
- package/dist/src/generators/job/index.js.map +0 -1
- package/dist/src/generators/job/job.generator.d.ts.map +0 -1
- package/dist/src/generators/job/job.generator.js.map +0 -1
- package/dist/src/generators/middleware/index.d.ts.map +0 -1
- package/dist/src/generators/middleware/index.js.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
- package/dist/src/generators/model/index.d.ts.map +0 -1
- package/dist/src/generators/model/index.js.map +0 -1
- package/dist/src/generators/model/model.generator.d.ts.map +0 -1
- package/dist/src/generators/model/model.generator.js.map +0 -1
- package/dist/src/generators/module/module.generator.d.ts.map +0 -1
- package/dist/src/generators/module/module.generator.js.map +0 -1
- package/dist/src/generators/project/project.generator.d.ts.map +0 -1
- package/dist/src/generators/project/project.generator.js.map +0 -1
- package/dist/src/generators/query/query.generator.d.ts.map +0 -1
- package/dist/src/generators/query/query.generator.js.map +0 -1
- package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
- package/dist/src/generators/repository/repository.generator.js.map +0 -1
- package/dist/src/generators/route/index.d.ts.map +0 -1
- package/dist/src/generators/route/index.js.map +0 -1
- package/dist/src/generators/route/route.generator.d.ts.map +0 -1
- package/dist/src/generators/route/route.generator.js.map +0 -1
- package/dist/src/generators/service/service.generator.d.ts.map +0 -1
- package/dist/src/generators/service/service.generator.js.map +0 -1
- package/dist/src/generators/validator/index.d.ts.map +0 -1
- package/dist/src/generators/validator/index.js.map +0 -1
- package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
- package/dist/src/generators/validator/validator.generator.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/installers/dependency.installer.d.ts.map +0 -1
- package/dist/src/installers/dependency.installer.js.map +0 -1
- package/dist/src/installers/index.d.ts.map +0 -1
- package/dist/src/installers/index.js.map +0 -1
- package/dist/src/manifest/index.d.ts.map +0 -1
- package/dist/src/manifest/index.js.map +0 -1
- package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
- package/dist/src/manifest/manifestManager.core.js.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/database.prompt.js.map +0 -1
- package/dist/src/prompts/backend/index.d.ts.map +0 -1
- package/dist/src/prompts/backend/index.js.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
- package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/index.js.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/index.d.ts.map +0 -1
- package/dist/src/prompts/frontend/index.js.map +0 -1
- package/dist/src/prompts/index.d.ts.map +0 -1
- package/dist/src/prompts/index.js.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
- package/dist/src/prompts/project/index.d.ts.map +0 -1
- package/dist/src/prompts/project/index.js.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
- package/dist/src/prompts/prompts.createProject.d.ts +0 -33
- package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
- package/dist/src/prompts/prompts.createProject.js +0 -143
- package/dist/src/prompts/prompts.createProject.js.map +0 -1
- package/dist/src/prompts/workspace/index.d.ts.map +0 -1
- package/dist/src/prompts/workspace/index.js.map +0 -1
- package/dist/src/prompts/workspace/package-manager.prompt.d.ts.map +0 -1
- package/dist/src/prompts/workspace/package-manager.prompt.js.map +0 -1
- package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/adapter/frontendAdapterRegistry.core.js.map +0 -1
- package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/adapter/packageManagerRegistry.core.js.map +0 -1
- package/dist/src/registries/dependency/dependencyRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/dependency/dependencyRegistry.core.js.map +0 -1
- package/dist/src/registries/dependency/index.d.ts.map +0 -1
- package/dist/src/registries/dependency/index.js.map +0 -1
- package/dist/src/registries/generator/generatorRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/generator/generatorRegistry.core.js.map +0 -1
- package/dist/src/registries/generator/index.d.ts.map +0 -1
- package/dist/src/registries/generator/index.js.map +0 -1
- package/dist/src/registries/index.d.ts.map +0 -1
- package/dist/src/registries/index.js.map +0 -1
- package/dist/src/resolvers/architecture.resolver.d.ts.map +0 -1
- package/dist/src/resolvers/architecture.resolver.js.map +0 -1
- package/dist/src/resolvers/capability/capabilityResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/capability/capabilityResolver.core.js.map +0 -1
- package/dist/src/resolvers/capability/index.d.ts.map +0 -1
- package/dist/src/resolvers/capability/index.js.map +0 -1
- package/dist/src/resolvers/configuration/configurationResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/configuration/configurationResolver.core.js.map +0 -1
- package/dist/src/resolvers/configuration/index.d.ts.map +0 -1
- package/dist/src/resolvers/configuration/index.js.map +0 -1
- package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/dependency/dependencyResolver.core.js.map +0 -1
- package/dist/src/resolvers/dependency/index.d.ts.map +0 -1
- package/dist/src/resolvers/dependency/index.js.map +0 -1
- package/dist/src/resolvers/index.d.ts.map +0 -1
- package/dist/src/resolvers/index.js.map +0 -1
- package/dist/src/resolvers/project.resolver.d.ts.map +0 -1
- package/dist/src/resolvers/project.resolver.js.map +0 -1
- package/dist/src/rollback/index.d.ts.map +0 -1
- package/dist/src/rollback/index.js.map +0 -1
- package/dist/src/rollback/rollbackManager.core.d.ts.map +0 -1
- package/dist/src/rollback/rollbackManager.core.js.map +0 -1
- package/dist/src/runners/package-manager/index.d.ts.map +0 -1
- package/dist/src/runners/package-manager/index.js.map +0 -1
- package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts.map +0 -1
- package/dist/src/runners/package-manager/packageManagerRunner.core.js.map +0 -1
- package/dist/src/runners/process/index.d.ts.map +0 -1
- package/dist/src/runners/process/index.js.map +0 -1
- package/dist/src/runners/process/processRunner.core.d.ts.map +0 -1
- package/dist/src/runners/process/processRunner.core.js.map +0 -1
- package/dist/src/runners/task/index.d.ts.map +0 -1
- package/dist/src/runners/task/index.js.map +0 -1
- package/dist/src/runners/task/taskRunner.core.d.ts.map +0 -1
- package/dist/src/runners/task/taskRunner.core.js.map +0 -1
- package/dist/src/scaffolders/framework.scaffolder.d.ts.map +0 -1
- package/dist/src/scaffolders/framework.scaffolder.js.map +0 -1
- package/dist/src/scaffolders/index.d.ts.map +0 -1
- package/dist/src/scaffolders/index.js.map +0 -1
- package/dist/src/scaffolders/scaffolder.helper.d.ts.map +0 -1
- package/dist/src/scaffolders/scaffolder.helper.js.map +0 -1
- package/dist/src/templates/microservice/index.d.ts.map +0 -1
- package/dist/src/templates/microservice/index.js.map +0 -1
- package/dist/src/templates/microservice/microservice.template.d.ts.map +0 -1
- package/dist/src/templates/microservice/microservice.template.js.map +0 -1
- package/dist/src/templates/modular-monolith/index.d.ts.map +0 -1
- package/dist/src/templates/modular-monolith/index.js.map +0 -1
- package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts.map +0 -1
- package/dist/src/templates/modular-monolith/modularMonolith.template.js.map +0 -1
- package/dist/src/templates/monolith/index.d.ts.map +0 -1
- package/dist/src/templates/monolith/index.js.map +0 -1
- package/dist/src/templates/monolith/monolith.template.d.ts.map +0 -1
- package/dist/src/templates/monolith/monolith.template.js.map +0 -1
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/projectConfiguration.type.d.ts.map +0 -1
- package/dist/src/types/projectConfiguration.type.js.map +0 -1
- package/dist/src/types/scaffold.type.d.ts.map +0 -1
- package/dist/src/types/scaffold.type.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/utils.detect.d.ts.map +0 -1
- package/dist/src/utils/utils.detect.js.map +0 -1
- package/dist/src/utils/utils.exec.d.ts.map +0 -1
- package/dist/src/utils/utils.exec.js.map +0 -1
- package/dist/src/utils/utils.fileSystem.d.ts.map +0 -1
- package/dist/src/utils/utils.fileSystem.js.map +0 -1
- package/dist/src/utils/utils.name.d.ts.map +0 -1
- package/dist/src/utils/utils.name.js.map +0 -1
- package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts.map +0 -1
- package/dist/src/validators/compatibility/compatibilityValidator.core.js.map +0 -1
- package/dist/src/validators/compatibility/index.d.ts.map +0 -1
- package/dist/src/validators/compatibility/index.js.map +0 -1
- package/dist/src/validators/environment/environmentValidator.core.d.ts.map +0 -1
- package/dist/src/validators/environment/environmentValidator.core.js.map +0 -1
- package/dist/src/validators/environment/index.d.ts.map +0 -1
- package/dist/src/validators/environment/index.js.map +0 -1
- package/dist/src/validators/index.d.ts.map +0 -1
- package/dist/src/validators/index.js.map +0 -1
- package/dist/src/validators/project/index.d.ts.map +0 -1
- package/dist/src/validators/project/index.js.map +0 -1
- package/dist/src/validators/project/projectValidator.core.d.ts.map +0 -1
- package/dist/src/validators/project/projectValidator.core.js.map +0 -1
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { existsSync, readFileSync } from "node:fs";
|
|
8
8
|
import { join } from "node:path";
|
|
9
|
-
import {
|
|
9
|
+
import { runStreaming } from "../utils/utils.exec.js";
|
|
10
10
|
import { CLIValidationError, CLIGenerationError } from "../errors/index.js";
|
|
11
11
|
import { ManifestManager } from "../manifest/manifestManager.core.js";
|
|
12
|
+
import { SAFE_PATH_SEGMENT } from "../utils/utils.name.js";
|
|
12
13
|
export async function runDevCommand(context) {
|
|
13
14
|
const frontendOnly = context.values["frontend-only"] === true;
|
|
14
15
|
const backendOnly = context.values["backend-only"] === true;
|
|
@@ -16,7 +17,8 @@ export async function runDevCommand(context) {
|
|
|
16
17
|
if (frontendOnly && backendOnly) {
|
|
17
18
|
throw new CLIValidationError("Cannot use --frontend-only and --backend-only together.");
|
|
18
19
|
}
|
|
19
|
-
const
|
|
20
|
+
const manifest = await new ManifestManager(context.cwd).read();
|
|
21
|
+
const config = readProjectConfig(context.cwd) ?? configFromManifest(manifest);
|
|
20
22
|
if (!config) {
|
|
21
23
|
throw new CLIValidationError("No Zudojs project found. Run `zudojs create` first.");
|
|
22
24
|
}
|
|
@@ -28,11 +30,18 @@ export async function runDevCommand(context) {
|
|
|
28
30
|
if (config.frontend) {
|
|
29
31
|
context.logger.info(`Frontend: ${config.frontend.framework}`);
|
|
30
32
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
// Service names come from a manifest file on disk and are joined into
|
|
34
|
+
// filesystem paths below; a crafted entry such as "../../.." would make the
|
|
35
|
+
// dev command probe and run outside the project.
|
|
36
|
+
const services = (manifest?.services ?? []).filter((service) => {
|
|
37
|
+
if (SAFE_PATH_SEGMENT.test(service))
|
|
38
|
+
return true;
|
|
39
|
+
context.logger.warn(`Ignoring invalid service name in .zudojs/manifest.json: "${service}"`);
|
|
40
|
+
return false;
|
|
41
|
+
});
|
|
33
42
|
const processes = [];
|
|
34
|
-
if (
|
|
35
|
-
config.type === "fullstack") {
|
|
43
|
+
if (!frontendOnly &&
|
|
44
|
+
(config.type === "backend" || config.type === "fullstack")) {
|
|
36
45
|
if (config.backend?.architecture === "microservice") {
|
|
37
46
|
processes.push(...startMicroserviceDev(context.cwd, services));
|
|
38
47
|
}
|
|
@@ -58,6 +67,20 @@ export async function runDevCommand(context) {
|
|
|
58
67
|
throw new CLIGenerationError("Development server failed to start.", error);
|
|
59
68
|
}
|
|
60
69
|
}
|
|
70
|
+
function configFromManifest(manifest) {
|
|
71
|
+
if (!manifest)
|
|
72
|
+
return null;
|
|
73
|
+
return {
|
|
74
|
+
name: "zudojs-project",
|
|
75
|
+
type: manifest.projectType ?? "backend",
|
|
76
|
+
backend: manifest.backend
|
|
77
|
+
? { architecture: manifest.backend.architecture }
|
|
78
|
+
: { architecture: manifest.architecture },
|
|
79
|
+
frontend: manifest.frontend
|
|
80
|
+
? { framework: manifest.frontend.framework }
|
|
81
|
+
: undefined,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
61
84
|
function readProjectConfig(cwd) {
|
|
62
85
|
const configPath = join(cwd, "zudojs.config.ts");
|
|
63
86
|
const configPathJs = join(cwd, "zudojs.config.js");
|
|
@@ -113,20 +136,32 @@ function parseConfigContent(content, cwd) {
|
|
|
113
136
|
};
|
|
114
137
|
}
|
|
115
138
|
async function startBackendDev(cwd, config, port) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
// `--port=N` was appended to the tsx argv, where it became an argument of
|
|
140
|
+
// the watched script and was ignored. Generated servers read PORT from the
|
|
141
|
+
// environment, so that is where the option has to land.
|
|
142
|
+
const options = port !== undefined
|
|
143
|
+
? { env: { ...process.env, PORT: String(port) } }
|
|
144
|
+
: undefined;
|
|
145
|
+
const entry = config.backend?.architecture === "microservice"
|
|
146
|
+
? "apps/gateway/src"
|
|
147
|
+
: "src";
|
|
148
|
+
await runStreaming("tsx", ["watch", entry], cwd, options);
|
|
123
149
|
}
|
|
124
150
|
function startMicroserviceDev(cwd, services) {
|
|
125
|
-
const serviceDirs = services.map((service) =>
|
|
151
|
+
const serviceDirs = services.map((service) => {
|
|
152
|
+
const nested = join(cwd, "apps", "services", service);
|
|
153
|
+
return existsSync(join(nested, "src"))
|
|
154
|
+
? nested
|
|
155
|
+
: join(cwd, "apps", service);
|
|
156
|
+
});
|
|
126
157
|
const promises = [];
|
|
158
|
+
const gatewayDir = join(cwd, "apps", "gateway");
|
|
159
|
+
if (existsSync(join(gatewayDir, "src"))) {
|
|
160
|
+
promises.push(runStreaming("tsx", ["watch", "src"], gatewayDir));
|
|
161
|
+
}
|
|
127
162
|
for (const dir of serviceDirs) {
|
|
128
163
|
if (existsSync(join(dir, "src"))) {
|
|
129
|
-
promises.push(
|
|
164
|
+
promises.push(runStreaming("tsx", ["watch", "src"], dir));
|
|
130
165
|
}
|
|
131
166
|
}
|
|
132
167
|
return promises;
|
|
@@ -136,40 +171,40 @@ async function startFrontendDev(cwd, config) {
|
|
|
136
171
|
const frontendDir = join(cwd, "apps", "web");
|
|
137
172
|
switch (framework) {
|
|
138
173
|
case "react":
|
|
139
|
-
await
|
|
174
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
140
175
|
break;
|
|
141
176
|
case "next":
|
|
142
|
-
await
|
|
177
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
143
178
|
break;
|
|
144
179
|
case "vue":
|
|
145
|
-
await
|
|
180
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
146
181
|
break;
|
|
147
182
|
case "nuxt":
|
|
148
|
-
await
|
|
183
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
149
184
|
break;
|
|
150
185
|
case "angular":
|
|
151
|
-
await
|
|
186
|
+
await runStreaming("ng", ["serve"], frontendDir);
|
|
152
187
|
break;
|
|
153
188
|
case "svelte":
|
|
154
|
-
await
|
|
189
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
155
190
|
break;
|
|
156
191
|
case "sveltekit":
|
|
157
|
-
await
|
|
192
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
158
193
|
break;
|
|
159
194
|
case "astro":
|
|
160
|
-
await
|
|
195
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
161
196
|
break;
|
|
162
197
|
case "vanilla":
|
|
163
|
-
await
|
|
198
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
164
199
|
break;
|
|
165
200
|
case "flutter":
|
|
166
|
-
await
|
|
201
|
+
await runStreaming("flutter", ["run", "--debug"], frontendDir);
|
|
167
202
|
break;
|
|
168
203
|
case "react-native":
|
|
169
|
-
await
|
|
204
|
+
await runStreaming("npx", ["react-native", "start"], frontendDir);
|
|
170
205
|
break;
|
|
171
206
|
default:
|
|
172
|
-
await
|
|
207
|
+
await runStreaming("npm", ["run", "dev"], frontendDir);
|
|
173
208
|
}
|
|
174
209
|
}
|
|
175
210
|
//# sourceMappingURL=dev.command.js.map
|
|
@@ -5,24 +5,29 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
import { join } from "node:path";
|
|
8
|
-
import {
|
|
8
|
+
import { CLIValidationError } from "../errors/index.js";
|
|
9
9
|
export async function runDoctorCommand(context) {
|
|
10
10
|
const checks = [];
|
|
11
11
|
const warnings = [];
|
|
12
12
|
const errors = [];
|
|
13
13
|
checks.push(checkNodeVersion());
|
|
14
|
-
checks.push(checkPackageManager());
|
|
15
|
-
checks.push(checkTypeScriptConfig());
|
|
16
|
-
checks.push(checkZudojsConfig());
|
|
14
|
+
checks.push(checkPackageManager(context.cwd));
|
|
15
|
+
checks.push(checkTypeScriptConfig(context.cwd));
|
|
16
|
+
checks.push(checkZudojsConfig(context.cwd));
|
|
17
17
|
checks.push(checkDependencies(context));
|
|
18
|
-
checks.push(checkArchitectureViolations());
|
|
18
|
+
checks.push(checkArchitectureViolations(context.cwd));
|
|
19
19
|
context.logger.info("Zudojs Doctor - Project Diagnostics");
|
|
20
20
|
context.logger.info("");
|
|
21
21
|
for (const check of checks) {
|
|
22
22
|
const symbol = check.passed ? "✔" : "✖";
|
|
23
23
|
context.logger.info(`${symbol} ${check.name}: ${check.message}`);
|
|
24
24
|
if (!check.passed) {
|
|
25
|
-
|
|
25
|
+
if (check.severity === "warning") {
|
|
26
|
+
warnings.push(`${check.name}: ${check.message}`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
errors.push(`${check.name}: ${check.message}`);
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
if (warnings.length > 0) {
|
|
@@ -40,7 +45,9 @@ export async function runDoctorCommand(context) {
|
|
|
40
45
|
}
|
|
41
46
|
context.logger.info("");
|
|
42
47
|
context.logger.info("Please fix the errors above before deploying.");
|
|
43
|
-
|
|
48
|
+
// Throwing is what gives `zudojs doctor` a non-zero exit code; returning
|
|
49
|
+
// here would report success to CI while diagnostics failed.
|
|
50
|
+
throw new CLIValidationError(`Zudojs doctor found ${errors.length} problem(s): ${errors.join("; ")}`);
|
|
44
51
|
}
|
|
45
52
|
context.logger.info("");
|
|
46
53
|
context.logger.info("All checks passed!");
|
|
@@ -51,35 +58,40 @@ function checkNodeVersion() {
|
|
|
51
58
|
const passed = major >= 24;
|
|
52
59
|
return {
|
|
53
60
|
name: "Node.js version",
|
|
61
|
+
severity: "error",
|
|
54
62
|
passed,
|
|
55
63
|
message: passed
|
|
56
64
|
? `Node.js ${version} (✓ meets minimum v24)`
|
|
57
65
|
: `Node.js ${version} (✗ requires >= v24)`,
|
|
58
66
|
};
|
|
59
67
|
}
|
|
60
|
-
function checkPackageManager() {
|
|
61
|
-
const hasPnpm = existsSync("pnpm-lock.yaml");
|
|
62
|
-
const hasNpm = existsSync("package-lock.json");
|
|
63
|
-
const hasYarn = existsSync("yarn.lock");
|
|
68
|
+
function checkPackageManager(cwd) {
|
|
69
|
+
const hasPnpm = existsSync(join(cwd, "pnpm-lock.yaml"));
|
|
70
|
+
const hasNpm = existsSync(join(cwd, "package-lock.json"));
|
|
71
|
+
const hasYarn = existsSync(join(cwd, "yarn.lock"));
|
|
64
72
|
const passed = hasPnpm || hasNpm || hasYarn;
|
|
65
73
|
const manager = hasPnpm ? "pnpm" : hasNpm ? "npm" : hasYarn ? "yarn" : "none";
|
|
66
74
|
return {
|
|
67
75
|
name: "Package manager",
|
|
76
|
+
severity: "warning",
|
|
68
77
|
passed,
|
|
69
78
|
message: passed ? `Detected: ${manager}` : "No lock file found",
|
|
70
79
|
};
|
|
71
80
|
}
|
|
72
|
-
function checkTypeScriptConfig() {
|
|
73
|
-
const passed = existsSync("tsconfig.json") ||
|
|
81
|
+
function checkTypeScriptConfig(cwd) {
|
|
82
|
+
const passed = existsSync(join(cwd, "tsconfig.json")) ||
|
|
83
|
+
existsSync(join(cwd, "tsconfig.base.json"));
|
|
74
84
|
return {
|
|
75
85
|
name: "TypeScript configuration",
|
|
86
|
+
severity: "error",
|
|
76
87
|
passed,
|
|
77
88
|
message: passed ? "tsconfig.json found" : "No tsconfig.json found",
|
|
78
89
|
};
|
|
79
90
|
}
|
|
80
|
-
function checkZudojsConfig() {
|
|
81
|
-
const hasPkgConfig = checkZudojsInPackageJson();
|
|
82
|
-
const hasConfig = existsSync("zudojs.config.ts") ||
|
|
91
|
+
function checkZudojsConfig(cwd) {
|
|
92
|
+
const hasPkgConfig = checkZudojsInPackageJson(cwd);
|
|
93
|
+
const hasConfig = existsSync(join(cwd, "zudojs.config.ts")) ||
|
|
94
|
+
existsSync(join(cwd, "zudojs.config.js"));
|
|
83
95
|
const passed = hasPkgConfig || hasConfig;
|
|
84
96
|
let message = "No Zudojs configuration found.";
|
|
85
97
|
if (passed) {
|
|
@@ -89,11 +101,16 @@ function checkZudojsConfig() {
|
|
|
89
101
|
? "zudojs.config.ts found"
|
|
90
102
|
: "Zudojs config in package.json";
|
|
91
103
|
}
|
|
92
|
-
return {
|
|
104
|
+
return {
|
|
105
|
+
name: "Zudojs configuration",
|
|
106
|
+
severity: "error",
|
|
107
|
+
passed,
|
|
108
|
+
message,
|
|
109
|
+
};
|
|
93
110
|
}
|
|
94
|
-
function checkZudojsInPackageJson() {
|
|
111
|
+
function checkZudojsInPackageJson(cwd) {
|
|
95
112
|
try {
|
|
96
|
-
const pkgPath = join(
|
|
113
|
+
const pkgPath = join(cwd, "package.json");
|
|
97
114
|
if (!existsSync(pkgPath))
|
|
98
115
|
return false;
|
|
99
116
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
@@ -108,6 +125,7 @@ function checkDependencies(context) {
|
|
|
108
125
|
if (!existsSync(pkgPath)) {
|
|
109
126
|
return {
|
|
110
127
|
name: "Dependencies",
|
|
128
|
+
severity: "error",
|
|
111
129
|
passed: false,
|
|
112
130
|
message: "No package.json found",
|
|
113
131
|
};
|
|
@@ -118,6 +136,7 @@ function checkDependencies(context) {
|
|
|
118
136
|
const passed = zudojsDeps.length > 0;
|
|
119
137
|
return {
|
|
120
138
|
name: "Zudojs dependencies",
|
|
139
|
+
severity: "warning",
|
|
121
140
|
passed,
|
|
122
141
|
message: passed
|
|
123
142
|
? `${zudojsDeps.length} Zudojs packages installed`
|
|
@@ -127,22 +146,24 @@ function checkDependencies(context) {
|
|
|
127
146
|
catch {
|
|
128
147
|
return {
|
|
129
148
|
name: "Dependencies",
|
|
149
|
+
severity: "error",
|
|
130
150
|
passed: false,
|
|
131
151
|
message: "Failed to read package.json",
|
|
132
152
|
};
|
|
133
153
|
}
|
|
134
154
|
}
|
|
135
|
-
function checkArchitectureViolations() {
|
|
136
|
-
const srcDir = join(
|
|
155
|
+
function checkArchitectureViolations(cwd) {
|
|
156
|
+
const srcDir = join(cwd, "src");
|
|
137
157
|
const violations = [];
|
|
138
158
|
if (!existsSync(srcDir)) {
|
|
139
159
|
return {
|
|
140
160
|
name: "Architecture",
|
|
161
|
+
severity: "warning",
|
|
141
162
|
passed: true,
|
|
142
163
|
message: "No src/ directory (not a Zudojs project?)",
|
|
143
164
|
};
|
|
144
165
|
}
|
|
145
|
-
const configPath = join(
|
|
166
|
+
const configPath = join(cwd, "zudojs.config.ts");
|
|
146
167
|
let architecture = "monolith";
|
|
147
168
|
if (existsSync(configPath)) {
|
|
148
169
|
const configContent = readFileSync(configPath, "utf-8");
|
|
@@ -163,7 +184,7 @@ function checkArchitectureViolations() {
|
|
|
163
184
|
violations.push("src/modules/ found in monolith architecture — consider modular-monolith or microservice architecture");
|
|
164
185
|
}
|
|
165
186
|
}
|
|
166
|
-
const pkgPath = join(
|
|
187
|
+
const pkgPath = join(cwd, "package.json");
|
|
167
188
|
if (existsSync(pkgPath)) {
|
|
168
189
|
try {
|
|
169
190
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
@@ -182,6 +203,7 @@ function checkArchitectureViolations() {
|
|
|
182
203
|
}
|
|
183
204
|
return {
|
|
184
205
|
name: "Architecture",
|
|
206
|
+
severity: "warning",
|
|
185
207
|
passed: violations.length === 0,
|
|
186
208
|
message: violations.length === 0
|
|
187
209
|
? "No violations detected"
|
|
@@ -19,8 +19,8 @@ import { generateRoute } from "../generators/route/route.generator.js";
|
|
|
19
19
|
import { generateModel } from "../generators/model/model.generator.js";
|
|
20
20
|
import { generateDto } from "../generators/dto/dto.generator.js";
|
|
21
21
|
import { generateValidator } from "../generators/validator/validator.generator.js";
|
|
22
|
-
import { ManifestManager } from "../manifest/manifestManager.core.js";
|
|
23
22
|
import { CLIGenerationError, CLIValidationError } from "../errors/index.js";
|
|
23
|
+
import { assertGeneratableName, assertSafePathSegment, } from "../utils/utils.name.js";
|
|
24
24
|
const VALID_SCHEMATICS = [
|
|
25
25
|
"service",
|
|
26
26
|
"module",
|
|
@@ -36,7 +36,28 @@ const VALID_SCHEMATICS = [
|
|
|
36
36
|
"dto",
|
|
37
37
|
"validator",
|
|
38
38
|
];
|
|
39
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Resolves the directory a schematic is generated into.
|
|
41
|
+
*
|
|
42
|
+
* `moduleName` comes from `--module`, which was previously accepted,
|
|
43
|
+
* documented and then never read by any schematic. It is validated as a
|
|
44
|
+
* single safe path segment by the caller before it reaches here.
|
|
45
|
+
*/
|
|
46
|
+
function getBasePath(architecture, schematic, moduleName, serviceName) {
|
|
47
|
+
const root = getArchitectureRoot(architecture, schematic, serviceName);
|
|
48
|
+
if (moduleName !== undefined && schematic !== "module") {
|
|
49
|
+
return `${root}/modules/${moduleName}`;
|
|
50
|
+
}
|
|
51
|
+
return root;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolves the directory a schematic is generated into for an architecture.
|
|
55
|
+
*
|
|
56
|
+
* The microservice layout produced by `zudojs create` is
|
|
57
|
+
* `apps/gateway/src` plus `apps/services/<name>/src`; the previous
|
|
58
|
+
* `apps/default` root matched no directory the scaffolder ever writes.
|
|
59
|
+
*/
|
|
60
|
+
function getArchitectureRoot(architecture, schematic, serviceName) {
|
|
40
61
|
switch (architecture) {
|
|
41
62
|
case "modular-monolith":
|
|
42
63
|
if (schematic === "module") {
|
|
@@ -45,9 +66,14 @@ function getBasePath(architecture, schematic) {
|
|
|
45
66
|
return "src";
|
|
46
67
|
case "microservice":
|
|
47
68
|
if (schematic === "service") {
|
|
48
|
-
|
|
69
|
+
// A new service is a new app in the workspace.
|
|
70
|
+
return "apps/services";
|
|
49
71
|
}
|
|
50
|
-
|
|
72
|
+
// `--service <name>` selects which app the schematic belongs to.
|
|
73
|
+
// Without it the gateway app — the one app always generated — is used.
|
|
74
|
+
return serviceName !== undefined
|
|
75
|
+
? `apps/services/${serviceName}/src`
|
|
76
|
+
: "apps/gateway/src";
|
|
51
77
|
case "monolith":
|
|
52
78
|
default:
|
|
53
79
|
if (schematic === "module") {
|
|
@@ -57,18 +83,40 @@ function getBasePath(architecture, schematic) {
|
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
85
|
function readZudojsArchitecture(cwd) {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
86
|
+
for (const configFile of ["zudojs.config.ts", "zudojs.config.js"]) {
|
|
87
|
+
const configPath = join(cwd, configFile);
|
|
88
|
+
if (existsSync(configPath)) {
|
|
89
|
+
const content = readFileSync(configPath, "utf-8");
|
|
90
|
+
const match = content.match(/architecture:\s*["'](\w[\w-]*)["']/);
|
|
91
|
+
if (match?.[1])
|
|
92
|
+
return match[1];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Fall back to the machine-managed manifest written by `zudojs create`.
|
|
96
|
+
const manifestPath = join(cwd, ".zudojs", "manifest.json");
|
|
97
|
+
if (existsSync(manifestPath)) {
|
|
98
|
+
try {
|
|
99
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
100
|
+
if (manifest.architecture)
|
|
101
|
+
return manifest.architecture;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// ignore malformed manifest
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Fall back to the zudojs field in package.json.
|
|
108
|
+
const pkgPath = join(cwd, "package.json");
|
|
109
|
+
if (existsSync(pkgPath)) {
|
|
110
|
+
try {
|
|
111
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
112
|
+
if (pkg.zudojs?.architecture)
|
|
113
|
+
return pkg.zudojs.architecture;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// ignore malformed package.json
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
72
120
|
}
|
|
73
121
|
export async function runGenerateCommand(context) {
|
|
74
122
|
const schematic = context.values.schematic;
|
|
@@ -83,14 +131,25 @@ export async function runGenerateCommand(context) {
|
|
|
83
131
|
if (!name) {
|
|
84
132
|
throw new CLIValidationError("Resource name is required.");
|
|
85
133
|
}
|
|
134
|
+
// Reject names that normalize to nothing (`zudojs generate event "..."`
|
|
135
|
+
// wrote src/events/.event.ts with an anonymous export), and reject option
|
|
136
|
+
// values that are interpolated verbatim into a generated path. `--service ..`
|
|
137
|
+
// used to place files outside the schematic's base directory.
|
|
138
|
+
assertGeneratableName(name, "resource name");
|
|
139
|
+
if (service !== undefined) {
|
|
140
|
+
assertSafePathSegment(service, "--service");
|
|
141
|
+
}
|
|
142
|
+
if (moduleName !== undefined) {
|
|
143
|
+
assertSafePathSegment(moduleName, "--module");
|
|
144
|
+
}
|
|
86
145
|
const cwd = context.cwd;
|
|
87
146
|
const architecture = readZudojsArchitecture(cwd);
|
|
88
|
-
const manifest = await new ManifestManager(cwd).read();
|
|
89
147
|
if (architecture) {
|
|
90
148
|
context.logger.info(`Detected architecture: ${architecture}`);
|
|
91
149
|
}
|
|
92
150
|
else {
|
|
93
|
-
context.logger.warn("No zudojs.config.ts
|
|
151
|
+
context.logger.warn("No Zudojs project detected (no zudojs.config.ts, .zudojs/manifest.json " +
|
|
152
|
+
"or `zudojs` field in package.json). Run `zudojs create` first.");
|
|
94
153
|
}
|
|
95
154
|
if (architecture === "microservice" && schematic === "service") {
|
|
96
155
|
context.logger.warn('In microservice architecture, prefer "zudojs generate module" — services are top-level apps.');
|
|
@@ -104,42 +163,52 @@ export async function runGenerateCommand(context) {
|
|
|
104
163
|
dryRun,
|
|
105
164
|
architecture: architecture ?? undefined,
|
|
106
165
|
}, cwd);
|
|
107
|
-
|
|
166
|
+
if (dryRun) {
|
|
167
|
+
context.logger.info(`Dry run: ${result.length} files would be generated (nothing written):`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
context.logger.info(`Generated ${result.length} files:`);
|
|
171
|
+
}
|
|
108
172
|
for (const file of result) {
|
|
109
173
|
context.logger.info(` - ${file}`);
|
|
110
174
|
}
|
|
111
175
|
}
|
|
112
176
|
async function runSchematic(schematic, name, options, cwd) {
|
|
113
177
|
try {
|
|
114
|
-
const basePath = getBasePath(options.architecture, schematic);
|
|
115
|
-
const
|
|
178
|
+
const basePath = getBasePath(options.architecture, schematic, options.module, options.service);
|
|
179
|
+
const dryRun = options.dryRun;
|
|
180
|
+
// In the microservice layout `--service` selected the owning app and is
|
|
181
|
+
// already part of basePath, so it must not nest the schematic again.
|
|
182
|
+
const cqrsService = options.architecture === "microservice"
|
|
183
|
+
? undefined
|
|
184
|
+
: (options.service ?? "default");
|
|
116
185
|
switch (schematic) {
|
|
117
186
|
case "service":
|
|
118
|
-
return await generateService({ name, basePath }, cwd);
|
|
187
|
+
return await generateService({ name, basePath, dryRun }, cwd);
|
|
119
188
|
case "module":
|
|
120
|
-
return await generateModule({ name, feature: true, basePath }, cwd);
|
|
189
|
+
return await generateModule({ name, feature: true, basePath, dryRun }, cwd);
|
|
121
190
|
case "command":
|
|
122
|
-
return await generateCommand({ name, service:
|
|
191
|
+
return await generateCommand({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
|
|
123
192
|
case "query":
|
|
124
|
-
return await generateQuery({ name, service:
|
|
193
|
+
return await generateQuery({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
|
|
125
194
|
case "controller":
|
|
126
|
-
return await generateController({ name, basePath }, cwd);
|
|
195
|
+
return await generateController({ name, basePath, dryRun }, cwd);
|
|
127
196
|
case "repository":
|
|
128
|
-
return await generateRepository({ name, basePath }, cwd);
|
|
197
|
+
return await generateRepository({ name, basePath, dryRun }, cwd);
|
|
129
198
|
case "middleware":
|
|
130
|
-
return await generateMiddleware({ name, basePath }, cwd);
|
|
199
|
+
return await generateMiddleware({ name, basePath, dryRun }, cwd);
|
|
131
200
|
case "event":
|
|
132
|
-
return await generateEvent({ name, basePath }, cwd);
|
|
201
|
+
return await generateEvent({ name, basePath, dryRun }, cwd);
|
|
133
202
|
case "job":
|
|
134
|
-
return await generateJob({ name, basePath }, cwd);
|
|
203
|
+
return await generateJob({ name, basePath, dryRun }, cwd);
|
|
135
204
|
case "route":
|
|
136
|
-
return await generateRoute({ name, basePath }, cwd);
|
|
205
|
+
return await generateRoute({ name, basePath, dryRun }, cwd);
|
|
137
206
|
case "model":
|
|
138
|
-
return await generateModel({ name, basePath }, cwd);
|
|
207
|
+
return await generateModel({ name, basePath, dryRun }, cwd);
|
|
139
208
|
case "dto":
|
|
140
|
-
return await generateDto({ name, basePath }, cwd);
|
|
209
|
+
return await generateDto({ name, basePath, dryRun }, cwd);
|
|
141
210
|
case "validator":
|
|
142
|
-
return await generateValidator({ name, basePath }, cwd);
|
|
211
|
+
return await generateValidator({ name, basePath, dryRun }, cwd);
|
|
143
212
|
default:
|
|
144
213
|
throw new CLIValidationError(`Unknown schematic: "${schematic}". Available: ${VALID_SCHEMATICS.join(", ")}.`);
|
|
145
214
|
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Constants used by the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export { CLI_VERSION } from "../cliConstant/cliVersion.js";
|
|
7
|
+
/** Published version of all @zudojs/* framework packages. */
|
|
8
|
+
export declare const ZUDOJS_PACKAGES_VERSION: "1.0.0";
|
|
7
9
|
export declare const ARCHITECTURE_CHOICES: readonly [{
|
|
8
10
|
readonly value: "monolith";
|
|
9
11
|
readonly label: "Monolith";
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Constants used by the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export { CLI_VERSION } from "../cliConstant/cliVersion.js";
|
|
7
|
+
/** Published version of all @zudojs/* framework packages. */
|
|
8
|
+
export const ZUDOJS_PACKAGES_VERSION = "1.0.0";
|
|
7
9
|
export const ARCHITECTURE_CHOICES = [
|
|
8
10
|
{ value: "monolith", label: "Monolith" },
|
|
9
11
|
{ value: "modular-monolith", label: "Modular Monolith" },
|
|
@@ -7,6 +7,7 @@ export interface GenerateCommandOptions {
|
|
|
7
7
|
readonly name: string;
|
|
8
8
|
readonly service?: string;
|
|
9
9
|
readonly basePath?: string;
|
|
10
|
+
readonly dryRun?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export declare function generateCommand(options: GenerateCommandOptions, cwd: string): Promise<string[]>;
|
|
12
13
|
//# sourceMappingURL=command.generator.d.ts.map
|
|
@@ -4,16 +4,19 @@
|
|
|
4
4
|
* Generates a CQRS command with handler.
|
|
5
5
|
*/
|
|
6
6
|
import { writeFileTree } from "../../utils/utils.fileSystem.js";
|
|
7
|
-
import { CLIGenerationError
|
|
7
|
+
import { CLIGenerationError } from "../../errors/index.js";
|
|
8
8
|
import { normalizeName } from "../../utils/utils.name.js";
|
|
9
9
|
export async function generateCommand(options, cwd) {
|
|
10
10
|
const name = normalizeName(options.name);
|
|
11
11
|
const nameCamel = name
|
|
12
12
|
.replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
|
|
13
13
|
.replace(/^./, (c) => c.toUpperCase());
|
|
14
|
-
const service = options.service
|
|
14
|
+
const service = options.service;
|
|
15
15
|
const basePath = options.basePath ?? "services";
|
|
16
|
-
|
|
16
|
+
// When no service grouping is given the schematic is written directly under
|
|
17
|
+
// basePath. Callers that resolved the owning app into basePath (the
|
|
18
|
+
// microservice layout) pass no service, so the path is not nested twice.
|
|
19
|
+
const servicePath = service ? `${basePath}/${service}` : basePath;
|
|
17
20
|
const files = {
|
|
18
21
|
[`${servicePath}/commands/${name}/${name}.command.ts`]: `import type { BaseCommand } from "@zudojs/cqrs";
|
|
19
22
|
|
|
@@ -48,12 +51,15 @@ export class ${nameCamel}CommandHandler implements CommandHandler<${nameCamel}Co
|
|
|
48
51
|
export { ${nameCamel}CommandHandler } from "./${name}.handler.js";
|
|
49
52
|
`,
|
|
50
53
|
};
|
|
54
|
+
if (options.dryRun) {
|
|
55
|
+
return Object.keys(files);
|
|
56
|
+
}
|
|
51
57
|
try {
|
|
52
58
|
await writeFileTree(cwd, files);
|
|
53
59
|
return Object.keys(files);
|
|
54
60
|
}
|
|
55
61
|
catch (error) {
|
|
56
|
-
throw new CLIGenerationError(`Failed to generate command: ${name}
|
|
62
|
+
throw new CLIGenerationError(`Failed to generate command: ${name} in ${servicePath}`, error);
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
//# sourceMappingURL=command.generator.js.map
|
|
@@ -5,6 +5,7 @@ export interface GenerateControllerOptions {
|
|
|
5
5
|
readonly name: string;
|
|
6
6
|
readonly service?: string;
|
|
7
7
|
readonly basePath?: string;
|
|
8
|
+
readonly dryRun?: boolean;
|
|
8
9
|
}
|
|
9
10
|
export declare function generateController(options: GenerateControllerOptions, cwd: string): Promise<string[]>;
|
|
10
11
|
//# sourceMappingURL=controller.generator.d.ts.map
|