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
|
@@ -1,14 +1,85 @@
|
|
|
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
|
-
import { existsSync
|
|
8
|
-
import { join } from "node:path";
|
|
9
|
-
import {
|
|
16
|
+
import { existsSync } from "node:fs";
|
|
17
|
+
import { basename, join, relative } from "node:path";
|
|
18
|
+
import { runStreaming } from "../utils/utils.exec.js";
|
|
10
19
|
import { CLIValidationError, CLIGenerationError } from "../errors/index.js";
|
|
11
|
-
import {
|
|
20
|
+
import { getRunScriptCommand } from "../installers/dependency.installer.js";
|
|
21
|
+
import { resolveProjectLayout, } from "../resolvers/layout/projectLayout.core.js";
|
|
22
|
+
/**
|
|
23
|
+
* Computes the servers `zudojs dev` starts for a project layout.
|
|
24
|
+
*
|
|
25
|
+
* Exported so the selection can be tested without spawning anything.
|
|
26
|
+
*/
|
|
27
|
+
export function planDevServers(layout, options = {}) {
|
|
28
|
+
const servers = [];
|
|
29
|
+
const env = options.port !== undefined
|
|
30
|
+
? { ...process.env, PORT: String(options.port) }
|
|
31
|
+
: undefined;
|
|
32
|
+
if (!options.frontendOnly) {
|
|
33
|
+
for (const dir of layout.backendDirs) {
|
|
34
|
+
if (!existsSync(join(dir, "package.json")))
|
|
35
|
+
continue;
|
|
36
|
+
const [file, ...args] = getRunScriptCommand(layout.packageManager, "dev");
|
|
37
|
+
servers.push({
|
|
38
|
+
label: labelFor(layout.root, dir, "backend"),
|
|
39
|
+
cwd: dir,
|
|
40
|
+
file,
|
|
41
|
+
args,
|
|
42
|
+
...(env ? { env } : {}),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!options.backendOnly && layout.frontendDir !== undefined) {
|
|
47
|
+
const spec = frontendServer(layout, layout.frontendDir);
|
|
48
|
+
if (spec)
|
|
49
|
+
servers.push(spec);
|
|
50
|
+
}
|
|
51
|
+
return servers;
|
|
52
|
+
}
|
|
53
|
+
function labelFor(root, dir, fallback) {
|
|
54
|
+
const rel = relative(root, dir);
|
|
55
|
+
return rel === "" ? fallback : basename(dir);
|
|
56
|
+
}
|
|
57
|
+
function frontendServer(layout, dir) {
|
|
58
|
+
const framework = layout.frontendFramework ?? "react";
|
|
59
|
+
if (framework === "none")
|
|
60
|
+
return null;
|
|
61
|
+
if (framework === "flutter") {
|
|
62
|
+
if (!existsSync(join(dir, "pubspec.yaml")))
|
|
63
|
+
return null;
|
|
64
|
+
return {
|
|
65
|
+
label: "web",
|
|
66
|
+
cwd: dir,
|
|
67
|
+
file: "flutter",
|
|
68
|
+
args: ["run", "--debug"],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (!existsSync(join(dir, "package.json")))
|
|
72
|
+
return null;
|
|
73
|
+
// Angular's package.json has `start: ng serve`; React Native's has `start`.
|
|
74
|
+
const script = framework === "angular" || framework === "react-native" ? "start" : "dev";
|
|
75
|
+
const [file, ...args] = getRunScriptCommand(layout.packageManager, script);
|
|
76
|
+
return {
|
|
77
|
+
label: labelFor(layout.root, dir, "frontend"),
|
|
78
|
+
cwd: dir,
|
|
79
|
+
file,
|
|
80
|
+
args,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
12
83
|
export async function runDevCommand(context) {
|
|
13
84
|
const frontendOnly = context.values["frontend-only"] === true;
|
|
14
85
|
const backendOnly = context.values["backend-only"] === true;
|
|
@@ -16,160 +87,45 @@ export async function runDevCommand(context) {
|
|
|
16
87
|
if (frontendOnly && backendOnly) {
|
|
17
88
|
throw new CLIValidationError("Cannot use --frontend-only and --backend-only together.");
|
|
18
89
|
}
|
|
19
|
-
const
|
|
20
|
-
if (!
|
|
21
|
-
throw new CLIValidationError("No Zudojs project found. Run `zudojs create` first.");
|
|
90
|
+
const layout = resolveProjectLayout(context.cwd);
|
|
91
|
+
if (!layout) {
|
|
92
|
+
throw new CLIValidationError("No Zudojs project found in this directory. Run `zudojs create` first.");
|
|
22
93
|
}
|
|
23
|
-
context.logger.info(`
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
context.logger.info(`Backend architecture: ${config.backend.architecture}`);
|
|
94
|
+
context.logger.info(`Project type: ${layout.projectType}`);
|
|
95
|
+
if (layout.backendDirs.length > 0) {
|
|
96
|
+
context.logger.info(`Backend architecture: ${layout.architecture}`);
|
|
27
97
|
}
|
|
28
|
-
if (
|
|
29
|
-
context.logger.info(`Frontend: ${
|
|
98
|
+
if (layout.frontendFramework) {
|
|
99
|
+
context.logger.info(`Frontend: ${layout.frontendFramework}`);
|
|
30
100
|
}
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
processes.push(...startMicroserviceDev(context.cwd, services));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
processes.push(startBackendDev(context.cwd, config, port));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (!backendOnly &&
|
|
44
|
-
(config.type === "frontend" || config.type === "fullstack")) {
|
|
45
|
-
if (config.frontend && config.frontend.framework !== "none") {
|
|
46
|
-
processes.push(startFrontendDev(context.cwd, config));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (processes.length === 0) {
|
|
101
|
+
const servers = planDevServers(layout, {
|
|
102
|
+
frontendOnly,
|
|
103
|
+
backendOnly,
|
|
104
|
+
...(port !== undefined ? { port } : {}),
|
|
105
|
+
});
|
|
106
|
+
if (servers.length === 0) {
|
|
50
107
|
context.logger.warn("No development servers to start.");
|
|
51
108
|
return;
|
|
52
109
|
}
|
|
53
|
-
|
|
110
|
+
for (const server of servers) {
|
|
111
|
+
context.logger.info(`Starting ${server.label}: ${server.file} ${server.args.join(" ")}`);
|
|
112
|
+
}
|
|
113
|
+
// One controller for every server: when any of them exits with an error
|
|
114
|
+
// the others are stopped too, instead of being left running detached
|
|
115
|
+
// after the command has already reported failure.
|
|
116
|
+
const controller = new AbortController();
|
|
117
|
+
const runs = servers.map((server) => runStreaming(server.file, server.args, server.cwd, {
|
|
118
|
+
signal: controller.signal,
|
|
119
|
+
...(server.env ? { env: server.env } : {}),
|
|
120
|
+
}).catch((error) => {
|
|
121
|
+
controller.abort();
|
|
122
|
+
throw error;
|
|
123
|
+
}));
|
|
54
124
|
try {
|
|
55
|
-
await Promise.all(
|
|
125
|
+
await Promise.all(runs);
|
|
56
126
|
}
|
|
57
127
|
catch (error) {
|
|
58
128
|
throw new CLIGenerationError("Development server failed to start.", error);
|
|
59
129
|
}
|
|
60
130
|
}
|
|
61
|
-
function readProjectConfig(cwd) {
|
|
62
|
-
const configPath = join(cwd, "zudojs.config.ts");
|
|
63
|
-
const configPathJs = join(cwd, "zudojs.config.js");
|
|
64
|
-
if (existsSync(configPath)) {
|
|
65
|
-
const content = readFileSync(configPath, "utf-8");
|
|
66
|
-
return parseConfigContent(content, cwd);
|
|
67
|
-
}
|
|
68
|
-
if (existsSync(configPathJs)) {
|
|
69
|
-
const content = readFileSync(configPathJs, "utf-8");
|
|
70
|
-
return parseConfigContent(content, cwd);
|
|
71
|
-
}
|
|
72
|
-
const pkgPath = join(cwd, "package.json");
|
|
73
|
-
if (existsSync(pkgPath)) {
|
|
74
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
75
|
-
if (pkg.zudojs) {
|
|
76
|
-
return {
|
|
77
|
-
name: pkg.name ?? "unknown",
|
|
78
|
-
type: pkg.zudojs.projectType ?? "backend",
|
|
79
|
-
backend: pkg.zudojs.architecture
|
|
80
|
-
? { architecture: pkg.zudojs.architecture }
|
|
81
|
-
: undefined,
|
|
82
|
-
frontend: pkg.zudojs.frontend
|
|
83
|
-
? { framework: pkg.zudojs.frontend }
|
|
84
|
-
: undefined,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
function parseConfigContent(content, cwd) {
|
|
91
|
-
const nameMatch = content.match(/name:\s*["']([^"']+)["']/);
|
|
92
|
-
const typeMatch = content.match(/projectType:\s*["'](\w+)["']/);
|
|
93
|
-
const architectureMatch = content.match(/architecture:\s*["'](\w+)["']/);
|
|
94
|
-
const frontendMatch = content.match(/frontend:\s*\{[\s\S]*?framework:\s*["']([^"']+)["']/);
|
|
95
|
-
const pkgPath = join(cwd, "package.json");
|
|
96
|
-
let name = "unknown";
|
|
97
|
-
if (existsSync(pkgPath)) {
|
|
98
|
-
try {
|
|
99
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
100
|
-
name = pkg.name ?? name;
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// ignore
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
name: nameMatch?.[1] ?? name,
|
|
108
|
-
type: typeMatch?.[1] ?? "backend",
|
|
109
|
-
backend: architectureMatch?.[1]
|
|
110
|
-
? { architecture: architectureMatch[1] }
|
|
111
|
-
: undefined,
|
|
112
|
-
frontend: frontendMatch?.[1] ? { framework: frontendMatch[1] } : undefined,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
async function startBackendDev(cwd, config, port) {
|
|
116
|
-
const portFlag = port ? [`--port=${port}`] : [];
|
|
117
|
-
if (config.backend?.architecture === "microservice") {
|
|
118
|
-
await execCommand("tsx", ["watch", "apps/gateway/src", ...portFlag], cwd);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
await execCommand("tsx", ["watch", "src", ...portFlag], cwd);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
function startMicroserviceDev(cwd, services) {
|
|
125
|
-
const serviceDirs = services.map((service) => join(cwd, "apps", service));
|
|
126
|
-
const promises = [];
|
|
127
|
-
for (const dir of serviceDirs) {
|
|
128
|
-
if (existsSync(join(dir, "src"))) {
|
|
129
|
-
promises.push(execCommand("tsx", ["watch", "src"], dir).then(() => { }));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return promises;
|
|
133
|
-
}
|
|
134
|
-
async function startFrontendDev(cwd, config) {
|
|
135
|
-
const framework = config.frontend?.framework ?? "react";
|
|
136
|
-
const frontendDir = join(cwd, "apps", "web");
|
|
137
|
-
switch (framework) {
|
|
138
|
-
case "react":
|
|
139
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
140
|
-
break;
|
|
141
|
-
case "next":
|
|
142
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
143
|
-
break;
|
|
144
|
-
case "vue":
|
|
145
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
146
|
-
break;
|
|
147
|
-
case "nuxt":
|
|
148
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
149
|
-
break;
|
|
150
|
-
case "angular":
|
|
151
|
-
await execCommand("ng", ["serve"], frontendDir);
|
|
152
|
-
break;
|
|
153
|
-
case "svelte":
|
|
154
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
155
|
-
break;
|
|
156
|
-
case "sveltekit":
|
|
157
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
158
|
-
break;
|
|
159
|
-
case "astro":
|
|
160
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
161
|
-
break;
|
|
162
|
-
case "vanilla":
|
|
163
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
164
|
-
break;
|
|
165
|
-
case "flutter":
|
|
166
|
-
await execCommand("flutter", ["run", "--debug"], frontendDir);
|
|
167
|
-
break;
|
|
168
|
-
case "react-native":
|
|
169
|
-
await execCommand("npx", ["react-native", "start"], frontendDir);
|
|
170
|
-
break;
|
|
171
|
-
default:
|
|
172
|
-
await execCommand("npm", ["run", "dev"], frontendDir);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
131
|
//# sourceMappingURL=dev.command.js.map
|
|
@@ -4,5 +4,23 @@
|
|
|
4
4
|
* The `zudojs doctor` command for project diagnostics.
|
|
5
5
|
*/
|
|
6
6
|
import type { CLIContext } from "../cliType/cliType.type.js";
|
|
7
|
+
export interface DoctorCheck {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly passed: boolean;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
/**
|
|
12
|
+
* Whether a failed check is fatal. Advisory checks (a missing lock file in
|
|
13
|
+
* a project created with `--no-install`, for example) are reported as
|
|
14
|
+
* warnings and do not fail the command.
|
|
15
|
+
*/
|
|
16
|
+
readonly severity: "error" | "warning";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Runs every diagnostic for the project at `cwd`.
|
|
20
|
+
*
|
|
21
|
+
* Exported so the checks can be run against a scaffolded directory in tests
|
|
22
|
+
* without going through the logger.
|
|
23
|
+
*/
|
|
24
|
+
export declare function runDoctorChecks(cwd: string): DoctorCheck[];
|
|
7
25
|
export declare function runDoctorCommand(context: CLIContext): Promise<void>;
|
|
8
26
|
//# sourceMappingURL=doctor.command.d.ts.map
|
|
@@ -4,25 +4,41 @@
|
|
|
4
4
|
* The `zudojs doctor` command for project diagnostics.
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
|
-
import { join } from "node:path";
|
|
8
|
-
import {
|
|
7
|
+
import { join, relative } from "node:path";
|
|
8
|
+
import { CLIValidationError } from "../errors/index.js";
|
|
9
|
+
import { FEATURE_PACKAGES } from "../constants/index.js";
|
|
10
|
+
import { resolveProjectLayout, } from "../resolvers/layout/projectLayout.core.js";
|
|
11
|
+
/**
|
|
12
|
+
* Runs every diagnostic for the project at `cwd`.
|
|
13
|
+
*
|
|
14
|
+
* Exported so the checks can be run against a scaffolded directory in tests
|
|
15
|
+
* without going through the logger.
|
|
16
|
+
*/
|
|
17
|
+
export function runDoctorChecks(cwd) {
|
|
18
|
+
const layout = resolveProjectLayout(cwd);
|
|
19
|
+
const checks = [checkNodeVersion(), checkProject(layout)];
|
|
20
|
+
if (!layout) {
|
|
21
|
+
return checks;
|
|
22
|
+
}
|
|
23
|
+
checks.push(checkPackageManager(layout), checkInstalled(layout), checkTypeScriptConfig(layout), checkDependencies(layout), checkFeatures(layout));
|
|
24
|
+
return checks;
|
|
25
|
+
}
|
|
9
26
|
export async function runDoctorCommand(context) {
|
|
10
|
-
const checks =
|
|
27
|
+
const checks = runDoctorChecks(context.cwd);
|
|
11
28
|
const warnings = [];
|
|
12
29
|
const errors = [];
|
|
13
|
-
checks.push(checkNodeVersion());
|
|
14
|
-
checks.push(checkPackageManager());
|
|
15
|
-
checks.push(checkTypeScriptConfig());
|
|
16
|
-
checks.push(checkZudojsConfig());
|
|
17
|
-
checks.push(checkDependencies(context));
|
|
18
|
-
checks.push(checkArchitectureViolations());
|
|
19
30
|
context.logger.info("Zudojs Doctor - Project Diagnostics");
|
|
20
31
|
context.logger.info("");
|
|
21
32
|
for (const check of checks) {
|
|
22
|
-
const symbol = check.passed ? "✔" : "✖";
|
|
33
|
+
const symbol = check.passed ? "✔" : check.severity === "error" ? "✖" : "⚠";
|
|
23
34
|
context.logger.info(`${symbol} ${check.name}: ${check.message}`);
|
|
24
35
|
if (!check.passed) {
|
|
25
|
-
|
|
36
|
+
if (check.severity === "warning") {
|
|
37
|
+
warnings.push(`${check.name}: ${check.message}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
errors.push(`${check.name}: ${check.message}`);
|
|
41
|
+
}
|
|
26
42
|
}
|
|
27
43
|
}
|
|
28
44
|
if (warnings.length > 0) {
|
|
@@ -40,7 +56,9 @@ export async function runDoctorCommand(context) {
|
|
|
40
56
|
}
|
|
41
57
|
context.logger.info("");
|
|
42
58
|
context.logger.info("Please fix the errors above before deploying.");
|
|
43
|
-
|
|
59
|
+
// Throwing is what gives `zudojs doctor` a non-zero exit code; returning
|
|
60
|
+
// here would report success to CI while diagnostics failed.
|
|
61
|
+
throw new CLIValidationError(`Zudojs doctor found ${errors.length} problem(s): ${errors.join("; ")}`);
|
|
44
62
|
}
|
|
45
63
|
context.logger.info("");
|
|
46
64
|
context.logger.info("All checks passed!");
|
|
@@ -51,141 +69,173 @@ function checkNodeVersion() {
|
|
|
51
69
|
const passed = major >= 24;
|
|
52
70
|
return {
|
|
53
71
|
name: "Node.js version",
|
|
72
|
+
severity: "error",
|
|
54
73
|
passed,
|
|
55
74
|
message: passed
|
|
56
|
-
? `Node.js ${version} (
|
|
57
|
-
: `Node.js ${version} (
|
|
75
|
+
? `Node.js ${version} (meets minimum v24)`
|
|
76
|
+
: `Node.js ${version} (requires >= v24)`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function checkProject(layout) {
|
|
80
|
+
if (!layout) {
|
|
81
|
+
return {
|
|
82
|
+
name: "Zudojs project",
|
|
83
|
+
severity: "error",
|
|
84
|
+
passed: false,
|
|
85
|
+
message: "No Zudojs project found (no .zudojs/manifest.json, zudojs.config.ts or zudojs block in package.json)",
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const source = layout.source === "manifest"
|
|
89
|
+
? ".zudojs/manifest.json"
|
|
90
|
+
: layout.source === "config"
|
|
91
|
+
? "zudojs.config.ts"
|
|
92
|
+
: "package.json#zudojs";
|
|
93
|
+
return {
|
|
94
|
+
name: "Zudojs project",
|
|
95
|
+
severity: "error",
|
|
96
|
+
passed: true,
|
|
97
|
+
message: `${layout.projectType} (${layout.architecture}) from ${source}`,
|
|
58
98
|
};
|
|
59
99
|
}
|
|
60
|
-
function checkPackageManager() {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
100
|
+
function checkPackageManager(layout) {
|
|
101
|
+
const lockFiles = {
|
|
102
|
+
pnpm: ["pnpm-lock.yaml"],
|
|
103
|
+
npm: ["package-lock.json"],
|
|
104
|
+
yarn: ["yarn.lock"],
|
|
105
|
+
bun: ["bun.lock", "bun.lockb"],
|
|
106
|
+
};
|
|
107
|
+
const expected = lockFiles[layout.packageManager] ?? [];
|
|
108
|
+
const passed = expected.some((file) => existsSync(join(layout.root, file)));
|
|
66
109
|
return {
|
|
67
110
|
name: "Package manager",
|
|
111
|
+
severity: "warning",
|
|
68
112
|
passed,
|
|
69
|
-
message: passed
|
|
113
|
+
message: passed
|
|
114
|
+
? `${layout.packageManager} (lock file present)`
|
|
115
|
+
: `${layout.packageManager} configured but no lock file found; run "${layout.packageManager} install"`,
|
|
70
116
|
};
|
|
71
117
|
}
|
|
72
|
-
function
|
|
73
|
-
const passed = existsSync(
|
|
118
|
+
function checkInstalled(layout) {
|
|
119
|
+
const passed = existsSync(join(layout.root, "node_modules"));
|
|
74
120
|
return {
|
|
75
|
-
name: "
|
|
121
|
+
name: "Dependencies installed",
|
|
122
|
+
severity: "warning",
|
|
76
123
|
passed,
|
|
77
|
-
message: passed
|
|
124
|
+
message: passed
|
|
125
|
+
? "node_modules present"
|
|
126
|
+
: `node_modules missing; run "${layout.packageManager} install"`,
|
|
78
127
|
};
|
|
79
128
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
? "Zudojs config in package.json"
|
|
88
|
-
: hasConfig
|
|
89
|
-
? "zudojs.config.ts found"
|
|
90
|
-
: "Zudojs config in package.json";
|
|
129
|
+
/** Directories that must each carry a tsconfig.json. */
|
|
130
|
+
function appDirs(layout) {
|
|
131
|
+
const dirs = [...layout.backendDirs];
|
|
132
|
+
if (layout.frontendDir !== undefined &&
|
|
133
|
+
layout.frontendFramework !== "flutter" &&
|
|
134
|
+
existsSync(join(layout.frontendDir, "package.json"))) {
|
|
135
|
+
dirs.push(layout.frontendDir);
|
|
91
136
|
}
|
|
92
|
-
return
|
|
137
|
+
return dirs;
|
|
138
|
+
}
|
|
139
|
+
function describe(layout, dir) {
|
|
140
|
+
const rel = relative(layout.root, dir);
|
|
141
|
+
return rel === "" ? "." : rel;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A workspace root has no tsconfig.json of its own — the apps do. This
|
|
145
|
+
* check used to look only at the root, so every fullstack and microservice
|
|
146
|
+
* project failed the doctor the moment it was created.
|
|
147
|
+
*/
|
|
148
|
+
function checkTypeScriptConfig(layout) {
|
|
149
|
+
const missing = appDirs(layout).filter((dir) => !existsSync(join(dir, "tsconfig.json")) &&
|
|
150
|
+
!existsSync(join(dir, "tsconfig.base.json")));
|
|
151
|
+
const passed = missing.length === 0;
|
|
152
|
+
return {
|
|
153
|
+
name: "TypeScript configuration",
|
|
154
|
+
severity: "error",
|
|
155
|
+
passed,
|
|
156
|
+
message: passed
|
|
157
|
+
? "tsconfig.json found in every app"
|
|
158
|
+
: `No tsconfig.json in: ${missing.map((d) => describe(layout, d)).join(", ")}`,
|
|
159
|
+
};
|
|
93
160
|
}
|
|
94
|
-
function
|
|
161
|
+
function readPackageJson(dir) {
|
|
95
162
|
try {
|
|
96
|
-
|
|
97
|
-
if (!existsSync(pkgPath))
|
|
98
|
-
return false;
|
|
99
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
100
|
-
return typeof pkg.zudojs === "object" && pkg.zudojs !== null;
|
|
163
|
+
return JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
|
|
101
164
|
}
|
|
102
165
|
catch {
|
|
103
|
-
return
|
|
166
|
+
return null;
|
|
104
167
|
}
|
|
105
168
|
}
|
|
106
|
-
function checkDependencies(
|
|
107
|
-
|
|
108
|
-
if (!existsSync(pkgPath)) {
|
|
109
|
-
return {
|
|
110
|
-
name: "Dependencies",
|
|
111
|
-
passed: false,
|
|
112
|
-
message: "No package.json found",
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
try {
|
|
116
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
117
|
-
const zudojsDeps = Object.keys(pkg.dependencies ?? {}).filter((d) => d.startsWith("@zudojs/"));
|
|
118
|
-
const passed = zudojsDeps.length > 0;
|
|
169
|
+
function checkDependencies(layout) {
|
|
170
|
+
if (layout.backendDirs.length === 0) {
|
|
119
171
|
return {
|
|
120
172
|
name: "Zudojs dependencies",
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
: "No Zudojs packages found",
|
|
173
|
+
severity: "warning",
|
|
174
|
+
passed: true,
|
|
175
|
+
message: "Frontend-only project; no framework packages expected",
|
|
125
176
|
};
|
|
126
177
|
}
|
|
127
|
-
|
|
178
|
+
const found = new Set();
|
|
179
|
+
const unreadable = [];
|
|
180
|
+
for (const dir of layout.backendDirs) {
|
|
181
|
+
const pkg = readPackageJson(dir);
|
|
182
|
+
if (!pkg) {
|
|
183
|
+
unreadable.push(describe(layout, dir));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
for (const name of Object.keys(pkg.dependencies ?? {})) {
|
|
187
|
+
if (name.startsWith("@zudojs/"))
|
|
188
|
+
found.add(name);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (unreadable.length > 0) {
|
|
128
192
|
return {
|
|
129
|
-
name: "
|
|
193
|
+
name: "Zudojs dependencies",
|
|
194
|
+
severity: "error",
|
|
130
195
|
passed: false,
|
|
131
|
-
message:
|
|
196
|
+
message: `Failed to read package.json in: ${unreadable.join(", ")}`,
|
|
132
197
|
};
|
|
133
198
|
}
|
|
199
|
+
const passed = found.size > 0;
|
|
200
|
+
return {
|
|
201
|
+
name: "Zudojs dependencies",
|
|
202
|
+
severity: "warning",
|
|
203
|
+
passed,
|
|
204
|
+
message: passed
|
|
205
|
+
? `${found.size} Zudojs package(s) declared`
|
|
206
|
+
: "No @zudojs/* packages declared",
|
|
207
|
+
};
|
|
134
208
|
}
|
|
135
|
-
|
|
136
|
-
|
|
209
|
+
/**
|
|
210
|
+
* Every feature recorded in a backend package.json must be backed by the
|
|
211
|
+
* package `zudojs add` installs for it.
|
|
212
|
+
*/
|
|
213
|
+
function checkFeatures(layout) {
|
|
137
214
|
const violations = [];
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
architecture = archMatch[1];
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
if (architecture === "modular-monolith" || architecture === "microservice") {
|
|
155
|
-
const servicesDir = join(srcDir, "services");
|
|
156
|
-
if (existsSync(servicesDir)) {
|
|
157
|
-
violations.push("src/services/ should be split into modules/ (modular-monolith) or apps/services/ (microservice)");
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
if (architecture === "monolith") {
|
|
161
|
-
const modulesDir = join(srcDir, "modules");
|
|
162
|
-
if (existsSync(modulesDir)) {
|
|
163
|
-
violations.push("src/modules/ found in monolith architecture — consider modular-monolith or microservice architecture");
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const pkgPath = join(process.cwd(), "package.json");
|
|
167
|
-
if (existsSync(pkgPath)) {
|
|
168
|
-
try {
|
|
169
|
-
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
170
|
-
const features = pkg.zudojs?.features ?? [];
|
|
171
|
-
const deps = Object.keys(pkg.dependencies ?? {});
|
|
172
|
-
for (const feature of features) {
|
|
173
|
-
const pkgName = `@zudojs/${feature}`;
|
|
174
|
-
if (!deps.includes(pkgName)) {
|
|
175
|
-
violations.push(`Feature "${feature}" declared in package.json#zudojs.features but ${pkgName} not in dependencies`);
|
|
215
|
+
for (const dir of layout.backendDirs) {
|
|
216
|
+
const pkg = readPackageJson(dir);
|
|
217
|
+
if (!pkg)
|
|
218
|
+
continue;
|
|
219
|
+
const features = Array.isArray(pkg.zudojs?.features)
|
|
220
|
+
? pkg.zudojs.features.filter((f) => typeof f === "string")
|
|
221
|
+
: [];
|
|
222
|
+
const deps = Object.keys(pkg.dependencies ?? {});
|
|
223
|
+
for (const feature of features) {
|
|
224
|
+
const required = FEATURE_PACKAGES[feature] ?? [`@zudojs/${feature}`];
|
|
225
|
+
for (const name of required) {
|
|
226
|
+
if (!deps.includes(name)) {
|
|
227
|
+
violations.push(`${describe(layout, dir)}: feature "${feature}" declared but ${name} is not a dependency`);
|
|
176
228
|
}
|
|
177
229
|
}
|
|
178
230
|
}
|
|
179
|
-
catch {
|
|
180
|
-
// ignore parse errors
|
|
181
|
-
}
|
|
182
231
|
}
|
|
183
232
|
return {
|
|
184
|
-
name: "
|
|
233
|
+
name: "Features",
|
|
234
|
+
severity: "warning",
|
|
185
235
|
passed: violations.length === 0,
|
|
186
236
|
message: violations.length === 0
|
|
187
|
-
? "
|
|
188
|
-
:
|
|
237
|
+
? "Every declared feature has its package"
|
|
238
|
+
: violations.join("; "),
|
|
189
239
|
};
|
|
190
240
|
}
|
|
191
241
|
//# sourceMappingURL=doctor.command.js.map
|
|
@@ -2,7 +2,8 @@
|
|
|
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
8
|
import type { CLIContext } from "../cliType/cliType.type.js";
|
|
8
9
|
export declare function runGenerateCommand(context: CLIContext): Promise<void>;
|