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
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* zudojs-cli — Generate Command
|
|
3
3
|
*
|
|
4
4
|
* The `zudojs generate` (alias: `g`) command.
|
|
5
|
-
* Reads
|
|
5
|
+
* Reads the project manifest to determine the architecture and where the
|
|
6
|
+
* backend lives, then places the schematic accordingly.
|
|
6
7
|
*/
|
|
7
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
8
|
-
import { join } from "node:path";
|
|
9
8
|
import { generateService } from "../generators/service/service.generator.js";
|
|
10
9
|
import { generateModule } from "../generators/module/module.generator.js";
|
|
11
10
|
import { generateCommand } from "../generators/command/command.generator.js";
|
|
@@ -19,8 +18,9 @@ import { generateRoute } from "../generators/route/route.generator.js";
|
|
|
19
18
|
import { generateModel } from "../generators/model/model.generator.js";
|
|
20
19
|
import { generateDto } from "../generators/dto/dto.generator.js";
|
|
21
20
|
import { generateValidator } from "../generators/validator/validator.generator.js";
|
|
22
|
-
import { ManifestManager } from "../manifest/manifestManager.core.js";
|
|
23
21
|
import { CLIGenerationError, CLIValidationError } from "../errors/index.js";
|
|
22
|
+
import { assertGeneratableName, assertSafePathSegment, } from "../utils/utils.name.js";
|
|
23
|
+
import { resolveProjectLayout } from "../resolvers/layout/projectLayout.core.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") {
|
|
@@ -56,19 +82,20 @@ function getBasePath(architecture, schematic) {
|
|
|
56
82
|
return "src";
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Prefix under which backend schematics are generated.
|
|
87
|
+
*
|
|
88
|
+
* A fullstack project keeps its backend in `apps/api`; generating into the
|
|
89
|
+
* workspace root's `src/` produced files no app compiled. Microservice apps
|
|
90
|
+
* are addressed inside getArchitectureRoot, relative to that prefix.
|
|
91
|
+
*/
|
|
92
|
+
function backendPrefix(cwd) {
|
|
93
|
+
const layout = resolveProjectLayout(cwd);
|
|
94
|
+
const [first] = layout?.backendDirs ?? [];
|
|
95
|
+
if (layout?.projectType === "fullstack" && first !== undefined && first !== cwd) {
|
|
96
|
+
return "apps/api/";
|
|
97
|
+
}
|
|
98
|
+
return "";
|
|
72
99
|
}
|
|
73
100
|
export async function runGenerateCommand(context) {
|
|
74
101
|
const schematic = context.values.schematic;
|
|
@@ -83,14 +110,26 @@ export async function runGenerateCommand(context) {
|
|
|
83
110
|
if (!name) {
|
|
84
111
|
throw new CLIValidationError("Resource name is required.");
|
|
85
112
|
}
|
|
113
|
+
// Reject names that normalize to nothing (`zudojs generate event "..."`
|
|
114
|
+
// wrote src/events/.event.ts with an anonymous export), and reject option
|
|
115
|
+
// values that are interpolated verbatim into a generated path. `--service ..`
|
|
116
|
+
// used to place files outside the schematic's base directory.
|
|
117
|
+
assertGeneratableName(name, "resource name");
|
|
118
|
+
if (service !== undefined) {
|
|
119
|
+
assertSafePathSegment(service, "--service");
|
|
120
|
+
}
|
|
121
|
+
if (moduleName !== undefined) {
|
|
122
|
+
assertSafePathSegment(moduleName, "--module");
|
|
123
|
+
}
|
|
86
124
|
const cwd = context.cwd;
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
if (
|
|
90
|
-
context.logger.info(`Detected architecture: ${architecture}`);
|
|
125
|
+
const layout = resolveProjectLayout(cwd);
|
|
126
|
+
const architecture = layout?.architecture ?? null;
|
|
127
|
+
if (layout) {
|
|
128
|
+
context.logger.info(`Detected architecture: ${layout.architecture}`);
|
|
91
129
|
}
|
|
92
130
|
else {
|
|
93
|
-
context.logger.warn("No zudojs.config.ts
|
|
131
|
+
context.logger.warn("No Zudojs project detected (no .zudojs/manifest.json, zudojs.config.ts " +
|
|
132
|
+
"or `zudojs` field in package.json). Run `zudojs create` first.");
|
|
94
133
|
}
|
|
95
134
|
if (architecture === "microservice" && schematic === "service") {
|
|
96
135
|
context.logger.warn('In microservice architecture, prefer "zudojs generate module" — services are top-level apps.');
|
|
@@ -104,42 +143,53 @@ export async function runGenerateCommand(context) {
|
|
|
104
143
|
dryRun,
|
|
105
144
|
architecture: architecture ?? undefined,
|
|
106
145
|
}, cwd);
|
|
107
|
-
|
|
146
|
+
if (dryRun) {
|
|
147
|
+
context.logger.info(`Dry run: ${result.length} files would be generated (nothing written):`);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
context.logger.info(`Generated ${result.length} files:`);
|
|
151
|
+
}
|
|
108
152
|
for (const file of result) {
|
|
109
153
|
context.logger.info(` - ${file}`);
|
|
110
154
|
}
|
|
111
155
|
}
|
|
112
156
|
async function runSchematic(schematic, name, options, cwd) {
|
|
113
157
|
try {
|
|
114
|
-
const basePath =
|
|
115
|
-
|
|
158
|
+
const basePath = backendPrefix(cwd) +
|
|
159
|
+
getBasePath(options.architecture, schematic, options.module, options.service);
|
|
160
|
+
const dryRun = options.dryRun;
|
|
161
|
+
// In the microservice layout `--service` selected the owning app and is
|
|
162
|
+
// already part of basePath, so it must not nest the schematic again.
|
|
163
|
+
const cqrsService = options.architecture === "microservice"
|
|
164
|
+
? undefined
|
|
165
|
+
: (options.service ?? "default");
|
|
116
166
|
switch (schematic) {
|
|
117
167
|
case "service":
|
|
118
|
-
return await generateService({ name, basePath }, cwd);
|
|
168
|
+
return await generateService({ name, basePath, dryRun }, cwd);
|
|
119
169
|
case "module":
|
|
120
|
-
return await generateModule({ name, feature: true, basePath }, cwd);
|
|
170
|
+
return await generateModule({ name, feature: true, basePath, dryRun }, cwd);
|
|
121
171
|
case "command":
|
|
122
|
-
return await generateCommand({ name, service:
|
|
172
|
+
return await generateCommand({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
|
|
123
173
|
case "query":
|
|
124
|
-
return await generateQuery({ name, service:
|
|
174
|
+
return await generateQuery({ name, ...(cqrsService ? { service: cqrsService } : {}), basePath, dryRun }, cwd);
|
|
125
175
|
case "controller":
|
|
126
|
-
return await generateController({ name, basePath }, cwd);
|
|
176
|
+
return await generateController({ name, basePath, dryRun }, cwd);
|
|
127
177
|
case "repository":
|
|
128
|
-
return await generateRepository({ name, basePath }, cwd);
|
|
178
|
+
return await generateRepository({ name, basePath, dryRun }, cwd);
|
|
129
179
|
case "middleware":
|
|
130
|
-
return await generateMiddleware({ name, basePath }, cwd);
|
|
180
|
+
return await generateMiddleware({ name, basePath, dryRun }, cwd);
|
|
131
181
|
case "event":
|
|
132
|
-
return await generateEvent({ name, basePath }, cwd);
|
|
182
|
+
return await generateEvent({ name, basePath, dryRun }, cwd);
|
|
133
183
|
case "job":
|
|
134
|
-
return await generateJob({ name, basePath }, cwd);
|
|
184
|
+
return await generateJob({ name, basePath, dryRun }, cwd);
|
|
135
185
|
case "route":
|
|
136
|
-
return await generateRoute({ name, basePath }, cwd);
|
|
186
|
+
return await generateRoute({ name, basePath, dryRun }, cwd);
|
|
137
187
|
case "model":
|
|
138
|
-
return await generateModel({ name, basePath }, cwd);
|
|
188
|
+
return await generateModel({ name, basePath, dryRun }, cwd);
|
|
139
189
|
case "dto":
|
|
140
|
-
return await generateDto({ name, basePath }, cwd);
|
|
190
|
+
return await generateDto({ name, basePath, dryRun }, cwd);
|
|
141
191
|
case "validator":
|
|
142
|
-
return await generateValidator({ name, basePath }, cwd);
|
|
192
|
+
return await generateValidator({ name, basePath, dryRun }, cwd);
|
|
143
193
|
default:
|
|
144
194
|
throw new CLIValidationError(`Unknown schematic: "${schematic}". Available: ${VALID_SCHEMATICS.join(", ")}.`);
|
|
145
195
|
}
|
|
@@ -3,42 +3,73 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The `zudojs info` command.
|
|
5
5
|
*/
|
|
6
|
-
import { readFileSync
|
|
7
|
-
import { join } from "node:path";
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { join, relative } from "node:path";
|
|
8
|
+
import { CLI_VERSION } from "../constants/index.js";
|
|
9
|
+
import { checkForNewerVersion } from "../cliVersion/cliVersion.update.js";
|
|
10
|
+
import { resolveProjectLayout } from "../resolvers/layout/projectLayout.core.js";
|
|
8
11
|
export async function runInfoCommand(context) {
|
|
9
|
-
|
|
12
|
+
context.logger.info("Zudojs CLI");
|
|
13
|
+
context.logger.info(` Version: ${CLI_VERSION}`);
|
|
14
|
+
context.logger.info(` Node.js: ${process.version}`);
|
|
15
|
+
const update = await checkForNewerVersion(CLI_VERSION, { env: context.env });
|
|
16
|
+
if (update.latest) {
|
|
17
|
+
context.logger.info(` Update available: ${update.latest} (npm install -g zudojs-cli@latest)`);
|
|
18
|
+
}
|
|
19
|
+
context.logger.info("");
|
|
20
|
+
const layout = resolveProjectLayout(context.cwd);
|
|
21
|
+
if (!layout) {
|
|
22
|
+
context.logger.info("Not in a Zudojs project directory.");
|
|
23
|
+
context.logger.info("Run `zudojs create <project-name>` to create a new project.");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
10
26
|
let projectName = "unknown";
|
|
27
|
+
let projectVersion = "0.0.0";
|
|
11
28
|
try {
|
|
12
|
-
const pkg = JSON.parse(readFileSync(
|
|
13
|
-
projectName = pkg.name ??
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
context.logger.info(`
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
const pkg = JSON.parse(readFileSync(join(layout.root, "package.json"), "utf-8"));
|
|
30
|
+
projectName = pkg.name ?? projectName;
|
|
31
|
+
projectVersion = pkg.version ?? projectVersion;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// A project without a root package.json still has a manifest.
|
|
35
|
+
}
|
|
36
|
+
context.logger.info("Project");
|
|
37
|
+
context.logger.info(` Name: ${projectName}`);
|
|
38
|
+
context.logger.info(` Version: ${projectVersion}`);
|
|
39
|
+
context.logger.info(` Type: ${layout.projectType}`);
|
|
40
|
+
if (layout.backendDirs.length > 0) {
|
|
41
|
+
context.logger.info(` Architecture: ${layout.architecture}`);
|
|
42
|
+
}
|
|
43
|
+
if (layout.frontendFramework) {
|
|
44
|
+
context.logger.info(` Frontend: ${layout.frontendFramework}`);
|
|
45
|
+
}
|
|
46
|
+
context.logger.info(` Package manager: ${layout.packageManager}`);
|
|
47
|
+
if (layout.services.length > 0) {
|
|
48
|
+
context.logger.info(` Services: ${layout.services.join(", ")}`);
|
|
49
|
+
}
|
|
50
|
+
context.logger.info("");
|
|
51
|
+
context.logger.info("Zudojs dependencies");
|
|
52
|
+
const deps = new Map();
|
|
53
|
+
for (const dir of layout.backendDirs) {
|
|
54
|
+
try {
|
|
55
|
+
const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
|
|
56
|
+
for (const [name, version] of Object.entries(pkg.dependencies ?? {})) {
|
|
57
|
+
if (name.startsWith("@zudojs/")) {
|
|
58
|
+
const where = relative(layout.root, dir);
|
|
59
|
+
deps.set(where === "" ? name : `${name} (${where})`, version);
|
|
60
|
+
}
|
|
33
61
|
}
|
|
34
62
|
}
|
|
63
|
+
catch {
|
|
64
|
+
// Reported by `zudojs doctor`.
|
|
65
|
+
}
|
|
35
66
|
}
|
|
36
|
-
|
|
37
|
-
context.logger.info("
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
context.logger.info(
|
|
67
|
+
if (deps.size === 0) {
|
|
68
|
+
context.logger.info(" (none)");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for (const [name, version] of [...deps.entries()].sort(([a], [b]) => a.localeCompare(b))) {
|
|
72
|
+
context.logger.info(` ${name}: ${version}`);
|
|
42
73
|
}
|
|
43
74
|
}
|
|
44
75
|
//# sourceMappingURL=info.command.js.map
|
|
@@ -3,7 +3,25 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Constants used by the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export { CLI_VERSION } from "../cliConstant/cliVersion.js";
|
|
7
|
+
/**
|
|
8
|
+
* Version range every generated project depends on for `@zudojs/*` packages.
|
|
9
|
+
*
|
|
10
|
+
* This is a caret range, not an exact pin, on purpose. The framework
|
|
11
|
+
* packages are released independently, so at any moment their latest
|
|
12
|
+
* versions differ (`@zudojs/openapi` went to 1.1.0 while the rest stayed at
|
|
13
|
+
* 1.0.0). An exact `1.0.0` pin made `pnpm install` in every freshly created
|
|
14
|
+
* project abort with `ERR_PNPM_NO_MATCHING_VERSION` for the package that had
|
|
15
|
+
* moved on. A range resolves each package to its newest compatible release.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ZUDOJS_PACKAGES_VERSION: "^1.0.0";
|
|
18
|
+
/**
|
|
19
|
+
* Packages installed by `zudojs add <feature>`.
|
|
20
|
+
*
|
|
21
|
+
* Also used by `zudojs doctor` to verify that every feature recorded in a
|
|
22
|
+
* project is backed by its package.
|
|
23
|
+
*/
|
|
24
|
+
export declare const FEATURE_PACKAGES: Readonly<Record<string, readonly string[]>>;
|
|
7
25
|
export declare const ARCHITECTURE_CHOICES: readonly [{
|
|
8
26
|
readonly value: "monolith";
|
|
9
27
|
readonly label: "Monolith";
|
|
@@ -3,7 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Constants used by the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export { CLI_VERSION } from "../cliConstant/cliVersion.js";
|
|
7
|
+
/**
|
|
8
|
+
* Version range every generated project depends on for `@zudojs/*` packages.
|
|
9
|
+
*
|
|
10
|
+
* This is a caret range, not an exact pin, on purpose. The framework
|
|
11
|
+
* packages are released independently, so at any moment their latest
|
|
12
|
+
* versions differ (`@zudojs/openapi` went to 1.1.0 while the rest stayed at
|
|
13
|
+
* 1.0.0). An exact `1.0.0` pin made `pnpm install` in every freshly created
|
|
14
|
+
* project abort with `ERR_PNPM_NO_MATCHING_VERSION` for the package that had
|
|
15
|
+
* moved on. A range resolves each package to its newest compatible release.
|
|
16
|
+
*/
|
|
17
|
+
export const ZUDOJS_PACKAGES_VERSION = "^1.0.0";
|
|
18
|
+
/**
|
|
19
|
+
* Packages installed by `zudojs add <feature>`.
|
|
20
|
+
*
|
|
21
|
+
* Also used by `zudojs doctor` to verify that every feature recorded in a
|
|
22
|
+
* project is backed by its package.
|
|
23
|
+
*/
|
|
24
|
+
export const FEATURE_PACKAGES = {
|
|
25
|
+
database: ["@zudojs/database"],
|
|
26
|
+
queue: ["@zudojs/queue"],
|
|
27
|
+
messaging: ["@zudojs/messaging"],
|
|
28
|
+
openapi: ["@zudojs/openapi"],
|
|
29
|
+
observability: ["@zudojs/observability"],
|
|
30
|
+
security: ["@zudojs/security"],
|
|
31
|
+
cache: ["@zudojs/cache"],
|
|
32
|
+
storage: ["@zudojs/storage"],
|
|
33
|
+
// Used to install @zudojs/queue; the scheduler package exists and is the
|
|
34
|
+
// one the feature name promises.
|
|
35
|
+
scheduler: ["@zudojs/scheduler"],
|
|
36
|
+
docs: ["@zudojs/docs"],
|
|
37
|
+
};
|
|
7
38
|
export const ARCHITECTURE_CHOICES = [
|
|
8
39
|
{ value: "monolith", label: "Monolith" },
|
|
9
40
|
{ 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
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* zudojs-cli — Controller Generator
|
|
3
3
|
*/
|
|
4
|
-
import { writeFileTree } from "../../utils/utils.fileSystem.js";
|
|
5
|
-
import { CLIGenerationError
|
|
6
|
-
import { normalizeName } from "../../utils/utils.name.js";
|
|
4
|
+
import { writeFileTree, mergeBarrelExport, } from "../../utils/utils.fileSystem.js";
|
|
5
|
+
import { CLIGenerationError } from "../../errors/index.js";
|
|
6
|
+
import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
|
|
7
7
|
export async function generateController(options, cwd) {
|
|
8
8
|
const name = normalizeName(options.name);
|
|
9
|
-
const nameCamel = name
|
|
10
|
-
.replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
|
|
11
|
-
.replace(/^./, (c) => c.toUpperCase());
|
|
9
|
+
const nameCamel = toPascalCase(options.name);
|
|
12
10
|
const basePath = options.basePath ?? "";
|
|
11
|
+
const prefix = basePath ? `${basePath}/` : "";
|
|
12
|
+
const indexPath = `${prefix}controllers/index.ts`;
|
|
13
13
|
const files = {
|
|
14
|
-
[`${
|
|
14
|
+
[`${prefix}controllers/${name}.controller.ts`]: `import { createLogger } from "@zudojs/logger";
|
|
15
15
|
|
|
16
16
|
export class ${nameCamel}Controller {
|
|
17
17
|
private readonly logger = createLogger({ name: "${name}-controller" });
|
|
@@ -30,9 +30,12 @@ export class ${nameCamel}Controller {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
`,
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// Merge with any existing barrel content instead of overwriting it.
|
|
34
|
+
[indexPath]: mergeBarrelExport(cwd, indexPath, `export { ${nameCamel}Controller } from "./${name}.controller.js";`),
|
|
35
35
|
};
|
|
36
|
+
if (options.dryRun) {
|
|
37
|
+
return Object.keys(files);
|
|
38
|
+
}
|
|
36
39
|
try {
|
|
37
40
|
await writeFileTree(cwd, files);
|
|
38
41
|
return Object.keys(files);
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export interface GenerateDtoOptions {
|
|
7
7
|
readonly name: string;
|
|
8
8
|
readonly basePath: string;
|
|
9
|
+
readonly dryRun?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare function generateDto(options: GenerateDtoOptions, cwd: string): Promise<string[]>;
|
|
11
12
|
//# sourceMappingURL=dto.generator.d.ts.map
|
|
@@ -4,17 +4,23 @@
|
|
|
4
4
|
* Generates DTO files.
|
|
5
5
|
*/
|
|
6
6
|
import { writeFileTree } from "../../utils/utils.fileSystem.js";
|
|
7
|
+
import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
|
|
7
8
|
export async function generateDto(options, cwd) {
|
|
9
|
+
const name = normalizeName(options.name);
|
|
10
|
+
const namePascal = toPascalCase(options.name);
|
|
8
11
|
const files = {
|
|
9
|
-
[`${options.basePath}/dtos/${
|
|
10
|
-
* ${
|
|
12
|
+
[`${options.basePath}/dtos/${name}.dto.ts`]: `/**
|
|
13
|
+
* ${name} DTO.
|
|
11
14
|
*/
|
|
12
15
|
|
|
13
|
-
export interface Create${
|
|
16
|
+
export interface Create${namePascal}Dto {
|
|
14
17
|
readonly name: string;
|
|
15
18
|
}
|
|
16
19
|
`,
|
|
17
20
|
};
|
|
21
|
+
if (options.dryRun) {
|
|
22
|
+
return Object.keys(files);
|
|
23
|
+
}
|
|
18
24
|
await writeFileTree(cwd, files);
|
|
19
25
|
return Object.keys(files);
|
|
20
26
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export interface GenerateEventOptions {
|
|
7
7
|
readonly name: string;
|
|
8
8
|
readonly basePath: string;
|
|
9
|
+
readonly dryRun?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare function generateEvent(options: GenerateEventOptions, cwd: string): Promise<string[]>;
|
|
11
12
|
//# sourceMappingURL=event.generator.d.ts.map
|
|
@@ -4,18 +4,24 @@
|
|
|
4
4
|
* Generates event files.
|
|
5
5
|
*/
|
|
6
6
|
import { writeFileTree } from "../../utils/utils.fileSystem.js";
|
|
7
|
+
import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
|
|
7
8
|
export async function generateEvent(options, cwd) {
|
|
9
|
+
const name = normalizeName(options.name);
|
|
10
|
+
const namePascal = toPascalCase(options.name);
|
|
8
11
|
const files = {
|
|
9
|
-
[`${options.basePath}/events/${
|
|
10
|
-
* ${
|
|
12
|
+
[`${options.basePath}/events/${name}.event.ts`]: `/**
|
|
13
|
+
* ${name} event.
|
|
11
14
|
*/
|
|
12
15
|
|
|
13
|
-
export interface ${
|
|
14
|
-
readonly type: "${
|
|
16
|
+
export interface ${namePascal}Event {
|
|
17
|
+
readonly type: "${name}";
|
|
15
18
|
readonly timestamp: Date;
|
|
16
19
|
}
|
|
17
20
|
`,
|
|
18
21
|
};
|
|
22
|
+
if (options.dryRun) {
|
|
23
|
+
return Object.keys(files);
|
|
24
|
+
}
|
|
19
25
|
await writeFileTree(cwd, files);
|
|
20
26
|
return Object.keys(files);
|
|
21
27
|
}
|
|
@@ -14,6 +14,8 @@ export interface FrontendGenerationOptions {
|
|
|
14
14
|
readonly architecture?: "zudojs-standard" | "feature-based" | "minimal" | "framework-default";
|
|
15
15
|
readonly language?: "typescript" | "javascript";
|
|
16
16
|
readonly packageManager?: "pnpm" | "npm" | "yarn" | "bun";
|
|
17
|
+
/** `false` records dependencies in package.json instead of installing. */
|
|
18
|
+
readonly installDeps?: boolean;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Frontend generation result.
|
|
@@ -7,6 +7,9 @@ import { FrontendAdapterRegistry } from "../../registries/adapter/frontendAdapte
|
|
|
7
7
|
import { PackageManagerRegistry } from "../../registries/adapter/packageManagerRegistry.core.js";
|
|
8
8
|
import { DependencyResolver } from "../../resolvers/dependency/dependencyResolver.core.js";
|
|
9
9
|
import { CLIGenerationError } from "../../errors/index.js";
|
|
10
|
+
import { runFrontendPipeline } from "./frontendPipeline.js";
|
|
11
|
+
import { writeFileTree } from "../../utils/utils.fileSystem.js";
|
|
12
|
+
import { renderPnpmWorkspaceFile } from "../../templates/shared/pnpm.template.js";
|
|
10
13
|
/**
|
|
11
14
|
* Generates frontend projects using framework adapters.
|
|
12
15
|
*/
|
|
@@ -39,38 +42,22 @@ export class FrontendGenerator {
|
|
|
39
42
|
linting: true,
|
|
40
43
|
formatting: true,
|
|
41
44
|
},
|
|
45
|
+
...(options.installDeps === false ? { skipInstall: true } : {}),
|
|
42
46
|
};
|
|
43
47
|
const files = [];
|
|
44
48
|
const errors = [];
|
|
45
49
|
try {
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const deps = adapter.getDependencies(context);
|
|
54
|
-
const resolution = this.dependencyResolver.resolve(deps);
|
|
55
|
-
if (resolution.conflicts.length > 0) {
|
|
56
|
-
for (const conflict of resolution.conflicts) {
|
|
57
|
-
errors.push(`Conflict: ${conflict.reason}`);
|
|
58
|
-
}
|
|
59
|
-
return { success: false, framework: options.framework, files, errors };
|
|
60
|
-
}
|
|
61
|
-
// 4. Install dependencies
|
|
62
|
-
const pmName = options.packageManager ?? "pnpm";
|
|
63
|
-
const packageManager = this.packageManagerRegistry.get(pmName);
|
|
64
|
-
if (packageManager) {
|
|
65
|
-
const devDeps = resolution.devDependencies.map((d) => d.name);
|
|
66
|
-
await packageManager.addDev(options.projectPath, devDeps);
|
|
67
|
-
files.push("dependencies");
|
|
68
|
-
}
|
|
69
|
-
// 5. Validate
|
|
70
|
-
const validation = await adapter.validate(context);
|
|
71
|
-
if (!validation.valid) {
|
|
72
|
-
errors.push(...validation.errors);
|
|
50
|
+
// A frontend-only project is its own pnpm root. Vite depends on
|
|
51
|
+
// esbuild, whose install script pnpm 10+ refuses without this list,
|
|
52
|
+
// and the pipeline installs dependencies right after scaffolding.
|
|
53
|
+
if (context.packageManager === "pnpm") {
|
|
54
|
+
await writeFileTree(context.projectPath, {
|
|
55
|
+
"pnpm-workspace.yaml": renderPnpmWorkspaceFile(),
|
|
56
|
+
});
|
|
73
57
|
}
|
|
58
|
+
const outcome = await runFrontendPipeline(adapter, context, this.packageManagerRegistry, this.dependencyResolver);
|
|
59
|
+
files.push(...outcome.files);
|
|
60
|
+
errors.push(...outcome.errors);
|
|
74
61
|
}
|
|
75
62
|
catch (error) {
|
|
76
63
|
errors.push(error instanceof Error ? error.message : String(error));
|