zudojs-cli 0.1.2 → 1.1.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 +26 -3
- 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/frontendAdapter.type.d.ts +6 -0
- 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 +23 -11
- 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 +22 -7
- package/dist/src/cliApplication/cliApplication.logger.d.ts +28 -0
- package/dist/src/cliApplication/cliApplication.logger.js +68 -0
- package/dist/src/cliApplication/index.d.ts +1 -3
- package/dist/src/cliApplication/index.js +1 -3
- 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/cliVersion/cliVersion.update.d.ts +38 -0
- package/dist/src/cliVersion/cliVersion.update.js +63 -0
- package/dist/src/cliVersion/index.d.ts +2 -1
- package/dist/src/cliVersion/index.js +2 -1
- package/dist/src/commands/add.command.d.ts +29 -0
- package/dist/src/commands/add.command.js +95 -107
- package/dist/src/commands/build.command.d.ts +8 -0
- package/dist/src/commands/build.command.js +24 -24
- package/dist/src/commands/create.command.js +176 -55
- package/dist/src/commands/dev.command.d.ts +30 -2
- package/dist/src/commands/dev.command.js +106 -150
- package/dist/src/commands/doctor.command.d.ts +18 -0
- package/dist/src/commands/doctor.command.js +160 -110
- package/dist/src/commands/generate.command.d.ts +2 -1
- package/dist/src/commands/generate.command.js +91 -41
- package/dist/src/commands/info.command.js +61 -30
- package/dist/src/constants/index.d.ts +19 -1
- package/dist/src/constants/index.js +32 -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.d.ts +2 -0
- package/dist/src/generators/frontend/frontendGenerator.core.js +14 -27
- package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
- package/dist/src/generators/frontend/frontendPipeline.js +136 -0
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +3 -2
- package/dist/src/generators/fullstack/fullstackComposer.core.js +58 -43
- 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/index.d.ts +3 -2
- package/dist/src/index.js +3 -2
- package/dist/src/installers/dependency.installer.d.ts +9 -0
- package/dist/src/installers/dependency.installer.js +27 -2
- package/dist/src/installers/index.d.ts +1 -3
- package/dist/src/installers/index.js +1 -3
- 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/resolvers/architecture.resolver.d.ts +11 -1
- package/dist/src/resolvers/architecture.resolver.js +12 -13
- package/dist/src/resolvers/configuration/configurationResolver.core.d.ts +10 -1
- package/dist/src/resolvers/configuration/configurationResolver.core.js +68 -29
- package/dist/src/resolvers/index.d.ts +1 -0
- package/dist/src/resolvers/index.js +1 -0
- package/dist/src/resolvers/layout/index.d.ts +5 -0
- package/dist/src/resolvers/layout/index.js +5 -0
- package/dist/src/resolvers/layout/projectLayout.core.d.ts +60 -0
- package/dist/src/resolvers/layout/projectLayout.core.js +236 -0
- package/dist/src/resolvers/project.resolver.d.ts +5 -0
- package/dist/src/resolvers/project.resolver.js +10 -6
- 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/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 +14 -0
- package/dist/src/templates/microservice/microservice.template.js +140 -162
- package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts +0 -1
- package/dist/src/templates/modular-monolith/modularMonolith.template.js +43 -77
- package/dist/src/templates/monolith/monolith.template.d.ts +1 -1
- package/dist/src/templates/monolith/monolith.template.js +46 -69
- package/dist/src/templates/shared/appRuntime.template.d.ts +60 -0
- package/dist/src/templates/shared/appRuntime.template.js +189 -0
- package/dist/src/templates/shared/index.d.ts +6 -0
- package/dist/src/templates/shared/index.js +6 -0
- package/dist/src/templates/shared/pnpm.template.d.ts +27 -0
- package/dist/src/templates/shared/pnpm.template.js +57 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.js +3 -3
- package/dist/src/utils/utils.detect.d.ts +9 -0
- package/dist/src/utils/utils.detect.js +11 -11
- package/dist/src/utils/utils.exec.d.ts +35 -1
- package/dist/src/utils/utils.exec.js +99 -4
- 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 +32 -23
- 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 -150
- 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/scripts/postinstall.cjs +0 -56
- 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
- package/src/scripts/postinstall.cjs +0 -56
|
@@ -4,5 +4,13 @@
|
|
|
4
4
|
* The `zudojs build` command for building Zudojs projects.
|
|
5
5
|
*/
|
|
6
6
|
import type { CLIContext } from "../cliType/cliType.type.js";
|
|
7
|
+
import type { PackageManager } from "../types/index.js";
|
|
7
8
|
export declare function runBuildCommand(context: CLIContext): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Arguments that run the `build` script.
|
|
11
|
+
*
|
|
12
|
+
* pnpm's `-r` is only meaningful in a workspace; a single-package project's
|
|
13
|
+
* root `build` script is the whole build.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getBuildArgs(packageManager: PackageManager, isWorkspace: boolean): string[];
|
|
8
16
|
//# sourceMappingURL=build.command.d.ts.map
|
|
@@ -3,47 +3,47 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The `zudojs build` command for building Zudojs projects.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { join } from "node:path";
|
|
8
|
-
import { execCommand } from "../utils/utils.exec.js";
|
|
6
|
+
import { runStreaming } from "../utils/utils.exec.js";
|
|
9
7
|
import { findProjectRoot } from "../resolvers/project.resolver.js";
|
|
8
|
+
import { detectPackageManager, resolveProjectLayout, } from "../resolvers/layout/projectLayout.core.js";
|
|
9
|
+
import { CLIGenerationError, CLINotInProjectError } from "../errors/index.js";
|
|
10
10
|
export async function runBuildCommand(context) {
|
|
11
11
|
const projectRoot = findProjectRoot(context.cwd);
|
|
12
12
|
if (!projectRoot) {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
// Throwing (rather than returning) is what gives the process a non-zero
|
|
14
|
+
// exit code; CI must not see a green build for a missing project.
|
|
15
|
+
throw new CLINotInProjectError();
|
|
15
16
|
}
|
|
16
17
|
context.logger.info(`Building project at: ${projectRoot}`);
|
|
17
|
-
const
|
|
18
|
-
const
|
|
18
|
+
const layout = resolveProjectLayout(projectRoot);
|
|
19
|
+
const packageManager = layout?.packageManager ?? detectPackageManager(projectRoot);
|
|
20
|
+
const buildArgs = getBuildArgs(packageManager, layout?.isWorkspace ?? false);
|
|
19
21
|
try {
|
|
20
|
-
await
|
|
22
|
+
await runStreaming(packageManager, buildArgs, projectRoot);
|
|
21
23
|
context.logger.info("Build completed successfully.");
|
|
22
24
|
}
|
|
23
25
|
catch (error) {
|
|
24
26
|
const message = error instanceof Error ? error.message : String(error);
|
|
25
|
-
|
|
27
|
+
// A failed build must fail the command so CI does not report success.
|
|
28
|
+
throw new CLIGenerationError(`Build failed: ${message}`, error);
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (existsSync(join(cwd, "bun.lockb")))
|
|
36
|
-
return "bun";
|
|
37
|
-
return "npm";
|
|
38
|
-
}
|
|
39
|
-
function getBuildArgs(packageManager) {
|
|
31
|
+
/**
|
|
32
|
+
* Arguments that run the `build` script.
|
|
33
|
+
*
|
|
34
|
+
* pnpm's `-r` is only meaningful in a workspace; a single-package project's
|
|
35
|
+
* root `build` script is the whole build.
|
|
36
|
+
*/
|
|
37
|
+
export function getBuildArgs(packageManager, isWorkspace) {
|
|
40
38
|
switch (packageManager) {
|
|
41
39
|
case "pnpm":
|
|
42
|
-
return ["-r", "run", "build"];
|
|
40
|
+
return isWorkspace ? ["-r", "run", "build"] : ["run", "build"];
|
|
43
41
|
case "yarn":
|
|
44
|
-
|
|
42
|
+
// Plain `yarn run build` works on both Yarn classic and Berry without
|
|
43
|
+
// requiring the workspace-tools plugin.
|
|
44
|
+
return ["run", "build"];
|
|
45
45
|
case "bun":
|
|
46
|
-
return ["
|
|
46
|
+
return ["run", "build"];
|
|
47
47
|
default:
|
|
48
48
|
return ["run", "build"];
|
|
49
49
|
}
|
|
@@ -15,17 +15,25 @@ import { InfrastructureGenerator } from "../generators/infrastructure/infrastruc
|
|
|
15
15
|
import { BackendGenerator } from "../generators/backend/backend.generator.js";
|
|
16
16
|
import { RollbackManager } from "../rollback/rollbackManager.core.js";
|
|
17
17
|
import { promptProjectName, promptProjectType, promptConfirmation, } from "../prompts/project/index.js";
|
|
18
|
-
import { promptBackendArchitecture, promptDatabase, promptApiStyle, } from "../prompts/backend/index.js";
|
|
18
|
+
import { promptBackendArchitecture, promptDatabase, promptApiStyle, promptServices, } from "../prompts/backend/index.js";
|
|
19
19
|
import { promptFramework, promptFrontendArchitecture, } from "../prompts/frontend/index.js";
|
|
20
20
|
import { promptPackageManager } from "../prompts/workspace/index.js";
|
|
21
21
|
import { promptCapabilities } from "../prompts/capabilities/index.js";
|
|
22
22
|
import { CLIValidationError, CLIGenerationError } from "../errors/index.js";
|
|
23
|
-
import { execCommand } from "../utils/utils.exec.js";
|
|
23
|
+
import { execCommand, runStreaming } from "../utils/utils.exec.js";
|
|
24
24
|
import { writeFileTree } from "../utils/utils.fileSystem.js";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
25
|
+
import { resolveMicroserviceServices } from "../templates/microservice/index.js";
|
|
26
|
+
import { ManifestManager } from "../manifest/manifestManager.core.js";
|
|
27
|
+
import { CLI_VERSION } from "../constants/index.js";
|
|
28
28
|
const VALID_PROJECT_TYPES = ["backend", "frontend", "fullstack"];
|
|
29
|
+
const VALID_ARCHITECTURES = [
|
|
30
|
+
"monolith",
|
|
31
|
+
"modular-monolith",
|
|
32
|
+
"microservice",
|
|
33
|
+
];
|
|
34
|
+
const VALID_DATABASES = ["postgresql", "mysql", "sqlite", "mongodb"];
|
|
35
|
+
const VALID_PACKAGE_MANAGERS = ["npm", "pnpm", "yarn", "bun"];
|
|
36
|
+
const SERVICE_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
29
37
|
const VALID_FRONTENDS = [
|
|
30
38
|
"none",
|
|
31
39
|
"react",
|
|
@@ -59,8 +67,54 @@ function validateProjectName(name) {
|
|
|
59
67
|
throw new CLIValidationError("Project name must contain only alphanumeric characters, hyphens, and underscores.");
|
|
60
68
|
}
|
|
61
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Returns whether the user typed a flag on the command line.
|
|
72
|
+
*
|
|
73
|
+
* All the shapes the parser accepts must be recognised here, otherwise an
|
|
74
|
+
* explicitly supplied flag is silently dropped and the interactive prompt
|
|
75
|
+
* offers its own default instead:
|
|
76
|
+
*
|
|
77
|
+
* `--type backend` `--type=backend` `-t backend` `-tbackend` `-abt`
|
|
78
|
+
*/
|
|
79
|
+
/**
|
|
80
|
+
* Narrows a raw CLI string to one of a fixed set of choices.
|
|
81
|
+
*
|
|
82
|
+
* The returned value is typed as the union, which is what lets the
|
|
83
|
+
* non-interactive branch build ScaffoldOptions without `as any` casts. The
|
|
84
|
+
* cast below is guarded by the membership test immediately above it.
|
|
85
|
+
*/
|
|
86
|
+
function validateChoice(value, allowed, label) {
|
|
87
|
+
if (!allowed.includes(value)) {
|
|
88
|
+
throw new CLIValidationError(`Invalid ${label}: ${value}. Valid: ${allowed.join(", ")}`);
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
62
92
|
function hasExplicitFlag(args, long, short) {
|
|
63
|
-
|
|
93
|
+
const longName = long.startsWith("--") ? long.slice(2) : long;
|
|
94
|
+
const shortName = short !== undefined && short.startsWith("-") ? short.slice(1) : short;
|
|
95
|
+
for (const arg of args) {
|
|
96
|
+
if (arg === "--")
|
|
97
|
+
break;
|
|
98
|
+
if (arg.startsWith("--")) {
|
|
99
|
+
const body = arg.slice(2);
|
|
100
|
+
const separator = body.indexOf("=");
|
|
101
|
+
const name = separator >= 0 ? body.slice(0, separator) : body;
|
|
102
|
+
// `--no-install` negates the boolean `install`; both count as explicit.
|
|
103
|
+
if (name === longName || name === `no-${longName}`)
|
|
104
|
+
return true;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (shortName === undefined)
|
|
108
|
+
continue;
|
|
109
|
+
if (arg.startsWith("-") && arg.length > 1) {
|
|
110
|
+
// Every short flag `create` defines takes a value, so it can only be
|
|
111
|
+
// the first character of the token: `-t backend` or `-tbackend`.
|
|
112
|
+
// Matching anywhere would treat the "t" in `-fnuxt` as `--type`.
|
|
113
|
+
if (arg[1] === shortName)
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
64
118
|
}
|
|
65
119
|
export async function runCreateCommand(context) {
|
|
66
120
|
const projectName = context.values["project-name"];
|
|
@@ -76,34 +130,36 @@ export async function runCreateCommand(context) {
|
|
|
76
130
|
const noInstall = context.values["no-install"] === true;
|
|
77
131
|
const noGit = context.values["no-git"] === true;
|
|
78
132
|
const servicesRaw = context.values.services;
|
|
79
|
-
const
|
|
133
|
+
const servicesExplicit = hasExplicitFlag(context.args, "--services");
|
|
134
|
+
const parsedServices = servicesRaw
|
|
80
135
|
? servicesRaw
|
|
81
136
|
.split(",")
|
|
82
137
|
.map((s) => s.trim())
|
|
83
138
|
.filter(Boolean)
|
|
84
139
|
: [];
|
|
140
|
+
// The --services option only applies to microservice architecture; ignore
|
|
141
|
+
// its parser-applied default for other architectures.
|
|
142
|
+
const services = servicesExplicit || architecture === "microservice" ? parsedServices : [];
|
|
85
143
|
if (projectName) {
|
|
86
144
|
validateProjectName(projectName);
|
|
87
145
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (!VALID_APIS.includes(api)) {
|
|
101
|
-
throw new CLIValidationError(`Invalid API style: ${api}. Valid: ${VALID_APIS.join(", ")}`);
|
|
146
|
+
const projectTypeValue = validateChoice(projectType, VALID_PROJECT_TYPES, "project type");
|
|
147
|
+
const architectureValue = validateChoice(architecture, VALID_ARCHITECTURES, "architecture");
|
|
148
|
+
const databaseValue = validateChoice(database, VALID_DATABASES, "database");
|
|
149
|
+
const packageManagerValue = validateChoice(packageManager, VALID_PACKAGE_MANAGERS, "package manager");
|
|
150
|
+
const frontendValue = validateChoice(frontend, VALID_FRONTENDS, "frontend");
|
|
151
|
+
const frontendArchitectureValue = validateChoice(frontendArchitecture, VALID_FRONTEND_ARCHITECTURES, "frontend architecture");
|
|
152
|
+
const languageValue = validateChoice(language, VALID_LANGUAGES, "language");
|
|
153
|
+
const apiValue = validateChoice(api, VALID_APIS, "API style");
|
|
154
|
+
for (const service of services) {
|
|
155
|
+
if (!SERVICE_NAME_PATTERN.test(service)) {
|
|
156
|
+
throw new CLIValidationError(`Invalid service name: "${service}". Service names must contain only alphanumeric characters, hyphens, and underscores.`);
|
|
157
|
+
}
|
|
102
158
|
}
|
|
103
|
-
const resolvedFrontend =
|
|
104
|
-
?
|
|
159
|
+
const resolvedFrontend = projectTypeValue === "frontend" || projectTypeValue === "fullstack"
|
|
160
|
+
? frontendValue === "none"
|
|
105
161
|
? "react"
|
|
106
|
-
:
|
|
162
|
+
: frontendValue
|
|
107
163
|
: undefined;
|
|
108
164
|
const explicitOverrides = {
|
|
109
165
|
projectName,
|
|
@@ -126,7 +182,7 @@ export async function runCreateCommand(context) {
|
|
|
126
182
|
if (hasExplicitFlag(context.args, "--frontend", "-f")) {
|
|
127
183
|
explicitOverrides.frontend = resolvedFrontend;
|
|
128
184
|
}
|
|
129
|
-
if (hasExplicitFlag(context.args, "--frontend-architecture", "-
|
|
185
|
+
if (hasExplicitFlag(context.args, "--frontend-architecture", "-F")) {
|
|
130
186
|
explicitOverrides.frontendArchitecture = frontendArchitecture;
|
|
131
187
|
}
|
|
132
188
|
if (hasExplicitFlag(context.args, "--language", "-l")) {
|
|
@@ -138,9 +194,17 @@ export async function runCreateCommand(context) {
|
|
|
138
194
|
p.intro("Zudojs");
|
|
139
195
|
const name = (await promptProjectName(projectName ?? undefined));
|
|
140
196
|
const type = await promptProjectType(explicitOverrides.projectType);
|
|
141
|
-
|
|
197
|
+
// `architecture` is a required ScaffoldOptions field and is written to
|
|
198
|
+
// the project manifest. For a frontend-only project no prompt runs, so
|
|
199
|
+
// without this default it was `undefined` and the generated manifest
|
|
200
|
+
// came out with no architecture at all, breaking `zudojs dev` and
|
|
201
|
+
// `zudojs generate` in the new project.
|
|
202
|
+
const arch = type === "backend" || type === "fullstack"
|
|
142
203
|
? await promptBackendArchitecture(explicitOverrides.architecture)
|
|
143
|
-
: explicitOverrides.architecture;
|
|
204
|
+
: (explicitOverrides.architecture ?? architectureValue);
|
|
205
|
+
const interactiveServices = arch === "microservice"
|
|
206
|
+
? await promptServices(servicesExplicit ? services : undefined)
|
|
207
|
+
: services;
|
|
144
208
|
const db = type === "backend" || type === "fullstack"
|
|
145
209
|
? await promptDatabase(explicitOverrides.database)
|
|
146
210
|
: explicitOverrides.database;
|
|
@@ -179,7 +243,7 @@ export async function runCreateCommand(context) {
|
|
|
179
243
|
frontendPath: "apps/web",
|
|
180
244
|
language: (explicitOverrides.language ??
|
|
181
245
|
"typescript"),
|
|
182
|
-
services:
|
|
246
|
+
services: interactiveServices,
|
|
183
247
|
enableCQRS,
|
|
184
248
|
enableMessaging,
|
|
185
249
|
enableObservability,
|
|
@@ -194,15 +258,17 @@ export async function runCreateCommand(context) {
|
|
|
194
258
|
else {
|
|
195
259
|
answers = {
|
|
196
260
|
projectName: projectName ?? "",
|
|
197
|
-
projectType:
|
|
198
|
-
architecture:
|
|
199
|
-
packageManager:
|
|
200
|
-
database:
|
|
201
|
-
api:
|
|
202
|
-
|
|
203
|
-
|
|
261
|
+
projectType: projectTypeValue,
|
|
262
|
+
architecture: architectureValue,
|
|
263
|
+
packageManager: packageManagerValue,
|
|
264
|
+
database: databaseValue,
|
|
265
|
+
api: apiValue,
|
|
266
|
+
...(resolvedFrontend !== undefined
|
|
267
|
+
? { frontend: resolvedFrontend }
|
|
268
|
+
: {}),
|
|
269
|
+
frontendArchitecture: frontendArchitectureValue,
|
|
204
270
|
frontendPath: "apps/web",
|
|
205
|
-
language:
|
|
271
|
+
language: languageValue,
|
|
206
272
|
services,
|
|
207
273
|
enableCQRS: true,
|
|
208
274
|
enableMessaging: true,
|
|
@@ -210,7 +276,8 @@ export async function runCreateCommand(context) {
|
|
|
210
276
|
enableOpenAPI: true,
|
|
211
277
|
enableDatabase: true,
|
|
212
278
|
enableQueue: false,
|
|
213
|
-
|
|
279
|
+
// Match the interactive branch, which enables Docker for microservices.
|
|
280
|
+
enableDocker: architectureValue === "microservice",
|
|
214
281
|
installDeps: !noInstall,
|
|
215
282
|
initGit: !noGit,
|
|
216
283
|
};
|
|
@@ -232,7 +299,6 @@ async function createProject(options, context) {
|
|
|
232
299
|
try {
|
|
233
300
|
spinner.start("Creating project structure");
|
|
234
301
|
await mkdir(targetPath, { recursive: true });
|
|
235
|
-
rollback.trackDirectory(targetPath);
|
|
236
302
|
spinner.stop("Project structure created");
|
|
237
303
|
if (options.projectType === "fullstack" &&
|
|
238
304
|
options.frontend &&
|
|
@@ -251,9 +317,9 @@ async function createProject(options, context) {
|
|
|
251
317
|
else {
|
|
252
318
|
spinner.start("Generating backend project");
|
|
253
319
|
const result = await generateProject(options, targetPath);
|
|
254
|
-
|
|
255
|
-
spinner.stop("Backend project generated");
|
|
320
|
+
spinner.stop(`Backend project generated (${result.filesCreated.length} files)`);
|
|
256
321
|
}
|
|
322
|
+
await writeProjectManifest(options, targetPath);
|
|
257
323
|
if (options.installDeps) {
|
|
258
324
|
spinner.start("Installing dependencies");
|
|
259
325
|
const installFile = packageManager === "pnpm"
|
|
@@ -264,11 +330,17 @@ async function createProject(options, context) {
|
|
|
264
330
|
? "bun"
|
|
265
331
|
: "npm";
|
|
266
332
|
try {
|
|
267
|
-
|
|
268
|
-
|
|
333
|
+
// Streamed with no timeout: installs can be slow and their output
|
|
334
|
+
// should reach the user.
|
|
335
|
+
spinner.stop("Installing dependencies...");
|
|
336
|
+
await runStreaming(installFile, ["install"], targetPath);
|
|
337
|
+
p.log.success("Dependencies installed");
|
|
269
338
|
}
|
|
270
|
-
catch {
|
|
271
|
-
|
|
339
|
+
catch (error) {
|
|
340
|
+
// The project is complete without its node_modules; say what
|
|
341
|
+
// failed and how to retry instead of a bare "skipped".
|
|
342
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
343
|
+
p.log.warn(`Dependency installation failed: ${reason}\nRun "${installFile} install" inside ${projectName} to retry.`);
|
|
272
344
|
}
|
|
273
345
|
}
|
|
274
346
|
if (options.initGit) {
|
|
@@ -298,6 +370,58 @@ async function createProject(options, context) {
|
|
|
298
370
|
throw new CLIGenerationError(`Failed to create project "${projectName}"`, error);
|
|
299
371
|
}
|
|
300
372
|
}
|
|
373
|
+
/**
|
|
374
|
+
* Writes the machine-managed .zudojs/manifest.json so follow-up commands
|
|
375
|
+
* (`zudojs dev`, `generate`, `add`) recognize the project immediately.
|
|
376
|
+
*/
|
|
377
|
+
async function writeProjectManifest(options, targetPath) {
|
|
378
|
+
const capabilities = [];
|
|
379
|
+
if (options.enableCQRS)
|
|
380
|
+
capabilities.push("cqrs");
|
|
381
|
+
if (options.enableMessaging)
|
|
382
|
+
capabilities.push("messaging");
|
|
383
|
+
if (options.enableObservability)
|
|
384
|
+
capabilities.push("observability");
|
|
385
|
+
if (options.enableOpenAPI)
|
|
386
|
+
capabilities.push("openapi");
|
|
387
|
+
if (options.enableDatabase)
|
|
388
|
+
capabilities.push("database");
|
|
389
|
+
if (options.enableQueue)
|
|
390
|
+
capabilities.push("queue");
|
|
391
|
+
// Record the services actually generated, not the raw request: the
|
|
392
|
+
// template drops reserved names (gateway) and duplicates, and substitutes
|
|
393
|
+
// its own defaults for an empty list.
|
|
394
|
+
const services = options.architecture === "microservice"
|
|
395
|
+
? resolveMicroserviceServices(options.services)
|
|
396
|
+
: undefined;
|
|
397
|
+
const hasFrontend = options.frontend !== undefined && options.frontend !== "none";
|
|
398
|
+
const hasBackend = options.projectType !== "frontend";
|
|
399
|
+
await new ManifestManager(targetPath).create({
|
|
400
|
+
version: CLI_VERSION,
|
|
401
|
+
projectType: options.projectType ?? "backend",
|
|
402
|
+
architecture: options.architecture,
|
|
403
|
+
...(hasBackend
|
|
404
|
+
? {
|
|
405
|
+
backend: {
|
|
406
|
+
architecture: options.architecture,
|
|
407
|
+
api: options.api ?? "rest",
|
|
408
|
+
},
|
|
409
|
+
}
|
|
410
|
+
: {}),
|
|
411
|
+
...(hasFrontend
|
|
412
|
+
? {
|
|
413
|
+
frontend: {
|
|
414
|
+
framework: options.frontend,
|
|
415
|
+
architecture: options.frontendArchitecture ?? "zudojs-standard",
|
|
416
|
+
},
|
|
417
|
+
}
|
|
418
|
+
: {}),
|
|
419
|
+
...(options.database ? { database: { provider: options.database } } : {}),
|
|
420
|
+
workspace: { packageManager: options.packageManager },
|
|
421
|
+
capabilities,
|
|
422
|
+
...(services ? { services: [...services] } : {}),
|
|
423
|
+
});
|
|
424
|
+
}
|
|
301
425
|
async function generateFullstackProject(options, projectPath, rollback) {
|
|
302
426
|
const composer = new FullstackComposer();
|
|
303
427
|
const result = await composer.generate({
|
|
@@ -322,21 +446,17 @@ async function generateFullstackProject(options, projectPath, rollback) {
|
|
|
322
446
|
features: options.services,
|
|
323
447
|
},
|
|
324
448
|
projectPath,
|
|
449
|
+
installDeps: options.installDeps,
|
|
325
450
|
});
|
|
326
451
|
if (!result.success) {
|
|
327
452
|
throw new CLIGenerationError(`Fullstack generation failed:\n${result.errors.join("\n")}`);
|
|
328
453
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
backendFiles = generateMicroserviceFiles(options);
|
|
336
|
-
break;
|
|
337
|
-
default:
|
|
338
|
-
backendFiles = generateMonolithFiles(options);
|
|
339
|
-
}
|
|
454
|
+
// Uses the same BackendGenerator the generator registry exposes rather
|
|
455
|
+
// than a third private copy of the architecture switch.
|
|
456
|
+
const backendFiles = await new BackendGenerator().generate(options, join(projectPath, "apps/api"));
|
|
457
|
+
// The backend template may carry its own workspace definition; nested in
|
|
458
|
+
// apps/api it would create a second workspace root, so strip it.
|
|
459
|
+
delete backendFiles["pnpm-workspace.yaml"];
|
|
340
460
|
await writeFileTree(join(projectPath, "apps/api"), backendFiles);
|
|
341
461
|
rollback.trackDirectory(join(projectPath, "apps/api"));
|
|
342
462
|
const integrationGenerator = new IntegrationGenerator();
|
|
@@ -396,6 +516,7 @@ async function generateFrontendProject(options, projectPath) {
|
|
|
396
516
|
architecture: options.frontendArchitecture ?? "zudojs-standard",
|
|
397
517
|
language: options.language ?? "typescript",
|
|
398
518
|
packageManager: options.packageManager,
|
|
519
|
+
installDeps: options.installDeps,
|
|
399
520
|
});
|
|
400
521
|
if (!result.success) {
|
|
401
522
|
throw new CLIGenerationError(`Frontend generation failed:\n${result.errors.join("\n")}`);
|
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* zudojs-cli — Dev Command
|
|
3
3
|
*
|
|
4
|
-
* The `zudojs dev` command.
|
|
5
|
-
*
|
|
4
|
+
* The `zudojs dev` command. Starts the development servers of the project
|
|
5
|
+
* in the current directory.
|
|
6
|
+
*
|
|
7
|
+
* Servers are started through the project's package manager (`pnpm run
|
|
8
|
+
* dev`, `npm run dev`, …) rather than by spawning `tsx` or `ng` directly:
|
|
9
|
+
* those binaries are devDependencies of the generated project and are not
|
|
10
|
+
* on the user's PATH, so the direct spawn failed with ENOENT for everyone
|
|
11
|
+
* who had not installed them globally. Running the script also means the
|
|
12
|
+
* project's own `dev` script is what runs — `tsx watch src` used to be
|
|
13
|
+
* hard-coded here, which watched `src/index.ts`, a file that only exports
|
|
14
|
+
* `createApp` and never starts the server.
|
|
6
15
|
*/
|
|
7
16
|
import type { CLIContext } from "../cliType/cliType.type.js";
|
|
17
|
+
import { type ProjectLayout } from "../resolvers/layout/projectLayout.core.js";
|
|
18
|
+
/** One development server to start. */
|
|
19
|
+
export interface DevServerSpec {
|
|
20
|
+
readonly label: string;
|
|
21
|
+
readonly cwd: string;
|
|
22
|
+
readonly file: string;
|
|
23
|
+
readonly args: readonly string[];
|
|
24
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Computes the servers `zudojs dev` starts for a project layout.
|
|
28
|
+
*
|
|
29
|
+
* Exported so the selection can be tested without spawning anything.
|
|
30
|
+
*/
|
|
31
|
+
export declare function planDevServers(layout: ProjectLayout, options?: {
|
|
32
|
+
readonly frontendOnly?: boolean;
|
|
33
|
+
readonly backendOnly?: boolean;
|
|
34
|
+
readonly port?: number;
|
|
35
|
+
}): DevServerSpec[];
|
|
8
36
|
export declare function runDevCommand(context: CLIContext): Promise<void>;
|
|
9
37
|
//# sourceMappingURL=dev.command.d.ts.map
|