zudojs-cli 0.1.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +14 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -14
- package/dist/src/adapters/databases/postgres.adapter.js +0 -30
- package/dist/src/adapters/frontend/angular.adapter.js +6 -0
- package/dist/src/adapters/frontend/astro.adapter.js +2 -2
- package/dist/src/adapters/frontend/react.adapter.js +26 -17
- package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
- package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
- package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
- package/dist/src/adapters/frontend/vue.adapter.js +1 -0
- package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
- package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
- package/dist/src/bin/zudojs.js +42 -6
- package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
- package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
- package/dist/src/cliApplication/cliApplication.core.js +20 -5
- package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
- package/dist/src/cliConstant/cliConstant.value.js +2 -1
- package/dist/src/cliConstant/cliVersion.d.ts +16 -0
- package/dist/src/cliConstant/cliVersion.js +57 -0
- package/dist/src/cliParser/cliParser.core.js +7 -0
- package/dist/src/cliParser/cliParser.shortOption.js +1 -1
- package/dist/src/commands/add.command.js +27 -24
- package/dist/src/commands/build.command.js +13 -7
- package/dist/src/commands/create.command.js +169 -51
- package/dist/src/commands/dev.command.js +62 -27
- package/dist/src/commands/doctor.command.js +45 -23
- package/dist/src/commands/generate.command.js +103 -34
- package/dist/src/constants/index.d.ts +3 -1
- package/dist/src/constants/index.js +3 -1
- package/dist/src/generators/command/command.generator.d.ts +1 -0
- package/dist/src/generators/command/command.generator.js +10 -4
- package/dist/src/generators/controller/controller.generator.d.ts +1 -0
- package/dist/src/generators/controller/controller.generator.js +12 -9
- package/dist/src/generators/dto/dto.generator.d.ts +1 -0
- package/dist/src/generators/dto/dto.generator.js +9 -3
- package/dist/src/generators/event/event.generator.d.ts +1 -0
- package/dist/src/generators/event/event.generator.js +10 -4
- package/dist/src/generators/frontend/frontendGenerator.core.js +4 -28
- package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
- package/dist/src/generators/frontend/frontendPipeline.js +93 -0
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +1 -2
- package/dist/src/generators/fullstack/fullstackComposer.core.js +72 -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/installers/dependency.installer.js +6 -2
- package/dist/src/manifest/manifestManager.core.d.ts +3 -0
- package/dist/src/prompts/backend/index.d.ts +1 -0
- package/dist/src/prompts/backend/index.js +1 -0
- package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
- package/dist/src/prompts/backend/services.prompt.js +39 -0
- package/dist/src/prompts/index.d.ts +0 -1
- package/dist/src/prompts/index.js +0 -1
- package/dist/src/rollback/rollbackManager.core.js +0 -1
- package/dist/src/runners/process/processRunner.core.d.ts +4 -0
- package/dist/src/runners/process/processRunner.core.js +17 -3
- package/dist/src/scaffolders/framework.scaffolder.js +9 -6
- package/dist/src/scaffolders/scaffolder.helper.js +7 -2
- package/dist/src/scripts/postinstall.cjs +24 -3
- package/dist/src/templates/microservice/index.d.ts +1 -1
- package/dist/src/templates/microservice/index.js +1 -1
- package/dist/src/templates/microservice/microservice.template.d.ts +15 -0
- package/dist/src/templates/microservice/microservice.template.js +148 -162
- package/dist/src/templates/modular-monolith/modularMonolith.template.js +45 -76
- package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
- package/dist/src/templates/monolith/monolith.template.js +48 -68
- package/dist/src/templates/shared/appRuntime.template.d.ts +71 -0
- package/dist/src/templates/shared/appRuntime.template.js +209 -0
- package/dist/src/templates/shared/index.d.ts +5 -0
- package/dist/src/templates/shared/index.js +5 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.js +3 -3
- package/dist/src/utils/utils.exec.d.ts +19 -1
- package/dist/src/utils/utils.exec.js +37 -3
- package/dist/src/utils/utils.fileSystem.d.ts +6 -0
- package/dist/src/utils/utils.fileSystem.js +19 -0
- package/dist/src/utils/utils.name.d.ts +26 -0
- package/dist/src/utils/utils.name.js +51 -1
- package/package.json +29 -22
- package/src/scripts/postinstall.cjs +24 -3
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/adapters/databases/index.d.ts.map +0 -1
- package/dist/src/adapters/databases/index.js.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
- package/dist/src/adapters/frontend/index.d.ts.map +0 -1
- package/dist/src/adapters/frontend/index.js.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/index.js.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
- package/dist/src/bin/zudojs.d.ts.map +0 -1
- package/dist/src/bin/zudojs.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
- package/dist/src/cliApplication/index.d.ts.map +0 -1
- package/dist/src/cliApplication/index.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
- package/dist/src/cliCommand/index.d.ts.map +0 -1
- package/dist/src/cliCommand/index.js.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
- package/dist/src/cliConstant/index.d.ts.map +0 -1
- package/dist/src/cliConstant/index.js.map +0 -1
- package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
- package/dist/src/cliError/cliError.argument.js.map +0 -1
- package/dist/src/cliError/cliError.base.d.ts.map +0 -1
- package/dist/src/cliError/cliError.base.js.map +0 -1
- package/dist/src/cliError/cliError.command.d.ts.map +0 -1
- package/dist/src/cliError/cliError.command.js.map +0 -1
- package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
- package/dist/src/cliError/cliError.execution.js.map +0 -1
- package/dist/src/cliError/cliError.option.d.ts.map +0 -1
- package/dist/src/cliError/cliError.option.js.map +0 -1
- package/dist/src/cliError/index.d.ts.map +0 -1
- package/dist/src/cliError/index.js.map +0 -1
- package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.core.js.map +0 -1
- package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.helper.js.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
- package/dist/src/cliParser/index.d.ts.map +0 -1
- package/dist/src/cliParser/index.js.map +0 -1
- package/dist/src/cliType/cliType.type.d.ts.map +0 -1
- package/dist/src/cliType/cliType.type.js.map +0 -1
- package/dist/src/cliType/index.d.ts.map +0 -1
- package/dist/src/cliType/index.js.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
- package/dist/src/cliVersion/index.d.ts.map +0 -1
- package/dist/src/cliVersion/index.js.map +0 -1
- package/dist/src/commands/add.command.d.ts.map +0 -1
- package/dist/src/commands/add.command.js.map +0 -1
- package/dist/src/commands/build.command.d.ts.map +0 -1
- package/dist/src/commands/build.command.js.map +0 -1
- package/dist/src/commands/create.command.d.ts.map +0 -1
- package/dist/src/commands/create.command.js.map +0 -1
- package/dist/src/commands/dev.command.d.ts.map +0 -1
- package/dist/src/commands/dev.command.js.map +0 -1
- package/dist/src/commands/doctor.command.d.ts.map +0 -1
- package/dist/src/commands/doctor.command.js.map +0 -1
- package/dist/src/commands/generate.command.d.ts.map +0 -1
- package/dist/src/commands/generate.command.js.map +0 -1
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js.map +0 -1
- package/dist/src/commands/info.command.d.ts.map +0 -1
- package/dist/src/commands/info.command.js.map +0 -1
- package/dist/src/constants/index.d.ts.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/errors/index.d.ts.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
- package/dist/src/generators/backend/backend.generator.js.map +0 -1
- package/dist/src/generators/backend/index.d.ts.map +0 -1
- package/dist/src/generators/backend/index.js.map +0 -1
- package/dist/src/generators/command/command.generator.d.ts.map +0 -1
- package/dist/src/generators/command/command.generator.js.map +0 -1
- package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
- package/dist/src/generators/controller/controller.generator.js.map +0 -1
- package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
- package/dist/src/generators/dto/dto.generator.js.map +0 -1
- package/dist/src/generators/dto/index.d.ts.map +0 -1
- package/dist/src/generators/dto/index.js.map +0 -1
- package/dist/src/generators/event/event.generator.d.ts.map +0 -1
- package/dist/src/generators/event/event.generator.js.map +0 -1
- package/dist/src/generators/event/index.d.ts.map +0 -1
- package/dist/src/generators/event/index.js.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
- package/dist/src/generators/frontend/index.d.ts.map +0 -1
- package/dist/src/generators/frontend/index.js.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
- package/dist/src/generators/fullstack/index.d.ts.map +0 -1
- package/dist/src/generators/fullstack/index.js.map +0 -1
- package/dist/src/generators/index.d.ts.map +0 -1
- package/dist/src/generators/index.js.map +0 -1
- package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/index.js.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
- package/dist/src/generators/integration/index.d.ts.map +0 -1
- package/dist/src/generators/integration/index.js.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
- package/dist/src/generators/job/index.d.ts.map +0 -1
- package/dist/src/generators/job/index.js.map +0 -1
- package/dist/src/generators/job/job.generator.d.ts.map +0 -1
- package/dist/src/generators/job/job.generator.js.map +0 -1
- package/dist/src/generators/middleware/index.d.ts.map +0 -1
- package/dist/src/generators/middleware/index.js.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
- package/dist/src/generators/model/index.d.ts.map +0 -1
- package/dist/src/generators/model/index.js.map +0 -1
- package/dist/src/generators/model/model.generator.d.ts.map +0 -1
- package/dist/src/generators/model/model.generator.js.map +0 -1
- package/dist/src/generators/module/module.generator.d.ts.map +0 -1
- package/dist/src/generators/module/module.generator.js.map +0 -1
- package/dist/src/generators/project/project.generator.d.ts.map +0 -1
- package/dist/src/generators/project/project.generator.js.map +0 -1
- package/dist/src/generators/query/query.generator.d.ts.map +0 -1
- package/dist/src/generators/query/query.generator.js.map +0 -1
- package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
- package/dist/src/generators/repository/repository.generator.js.map +0 -1
- package/dist/src/generators/route/index.d.ts.map +0 -1
- package/dist/src/generators/route/index.js.map +0 -1
- package/dist/src/generators/route/route.generator.d.ts.map +0 -1
- package/dist/src/generators/route/route.generator.js.map +0 -1
- package/dist/src/generators/service/service.generator.d.ts.map +0 -1
- package/dist/src/generators/service/service.generator.js.map +0 -1
- package/dist/src/generators/validator/index.d.ts.map +0 -1
- package/dist/src/generators/validator/index.js.map +0 -1
- package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
- package/dist/src/generators/validator/validator.generator.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/installers/dependency.installer.d.ts.map +0 -1
- package/dist/src/installers/dependency.installer.js.map +0 -1
- package/dist/src/installers/index.d.ts.map +0 -1
- package/dist/src/installers/index.js.map +0 -1
- package/dist/src/manifest/index.d.ts.map +0 -1
- package/dist/src/manifest/index.js.map +0 -1
- package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
- package/dist/src/manifest/manifestManager.core.js.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/database.prompt.js.map +0 -1
- package/dist/src/prompts/backend/index.d.ts.map +0 -1
- package/dist/src/prompts/backend/index.js.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
- package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/index.js.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/index.d.ts.map +0 -1
- package/dist/src/prompts/frontend/index.js.map +0 -1
- package/dist/src/prompts/index.d.ts.map +0 -1
- package/dist/src/prompts/index.js.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
- package/dist/src/prompts/project/index.d.ts.map +0 -1
- package/dist/src/prompts/project/index.js.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
- package/dist/src/prompts/prompts.createProject.d.ts +0 -33
- package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
- package/dist/src/prompts/prompts.createProject.js +0 -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/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
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* │ ├── loggers/
|
|
25
25
|
* │ ├── middlewares/
|
|
26
26
|
* │ ├── models/
|
|
27
|
+
* │ ├── modules/
|
|
27
28
|
* │ ├── repositories/
|
|
28
29
|
* │ ├── routes/
|
|
29
30
|
* │ ├── services/
|
|
@@ -37,16 +38,16 @@
|
|
|
37
38
|
* └── README.md
|
|
38
39
|
* ```
|
|
39
40
|
*/
|
|
41
|
+
import { ZUDOJS_PACKAGES_VERSION } from "../../constants/index.js";
|
|
42
|
+
import { normalizeName, toPascalCase } from "../../utils/utils.name.js";
|
|
43
|
+
import { RUNTIME_APP_DEPENDENCIES, moduleSpec, renderAppFile, renderModuleFile, renderServerFile, renderServiceFile, renderZudojsConfig, } from "../shared/index.js";
|
|
40
44
|
export function generateMonolithFiles(options) {
|
|
41
45
|
const name = options.projectName;
|
|
42
46
|
const nameSlug = name.replace(/[^a-z0-9-]+/gi, "-").toLowerCase();
|
|
43
47
|
const deps = [
|
|
44
|
-
|
|
45
|
-
"@zudojs/container",
|
|
48
|
+
...RUNTIME_APP_DEPENDENCIES,
|
|
46
49
|
"@zudojs/config",
|
|
47
|
-
"@zudojs/logger",
|
|
48
50
|
"@zudojs/errors",
|
|
49
|
-
"@zudojs/constants",
|
|
50
51
|
"@zudojs/types",
|
|
51
52
|
"@zudojs/validation",
|
|
52
53
|
"@zudojs/schema",
|
|
@@ -67,7 +68,12 @@ export function generateMonolithFiles(options) {
|
|
|
67
68
|
if (options.enableOpenAPI) {
|
|
68
69
|
deps.push("@zudojs/openapi");
|
|
69
70
|
}
|
|
70
|
-
const devDeps =
|
|
71
|
+
const devDeps = {
|
|
72
|
+
tsx: "^4.7.0",
|
|
73
|
+
typescript: "^5.7.0",
|
|
74
|
+
"@types/node": "^24.0.0",
|
|
75
|
+
vitest: "^3.0.0",
|
|
76
|
+
};
|
|
71
77
|
const files = {};
|
|
72
78
|
// Root files
|
|
73
79
|
files["package.json"] =
|
|
@@ -77,16 +83,21 @@ export function generateMonolithFiles(options) {
|
|
|
77
83
|
private: true,
|
|
78
84
|
type: "module",
|
|
79
85
|
license: "MIT",
|
|
86
|
+
zudojs: {
|
|
87
|
+
projectType: "backend",
|
|
88
|
+
architecture: "monolith",
|
|
89
|
+
features: [],
|
|
90
|
+
},
|
|
80
91
|
scripts: {
|
|
81
|
-
dev: "
|
|
92
|
+
dev: "tsx watch src/server.ts",
|
|
82
93
|
start: "node dist/server.js",
|
|
83
94
|
build: "tsc",
|
|
84
95
|
typecheck: "tsc --noEmit",
|
|
85
96
|
test: "vitest run",
|
|
86
97
|
lint: "tsc --noEmit",
|
|
87
98
|
},
|
|
88
|
-
dependencies: Object.fromEntries([...new Set(deps)].map((d) => [d,
|
|
89
|
-
devDependencies:
|
|
99
|
+
dependencies: Object.fromEntries([...new Set(deps)].map((d) => [d, ZUDOJS_PACKAGES_VERSION])),
|
|
100
|
+
devDependencies: devDeps,
|
|
90
101
|
}, null, 2) + "\n";
|
|
91
102
|
// tsconfig
|
|
92
103
|
files["tsconfig.json"] = `{
|
|
@@ -94,9 +105,9 @@ export function generateMonolithFiles(options) {
|
|
|
94
105
|
"target": "ES2024",
|
|
95
106
|
"module": "Node16",
|
|
96
107
|
"moduleResolution": "Node16",
|
|
97
|
-
"
|
|
108
|
+
"outDir": "dist",
|
|
109
|
+
"rootDir": "src",
|
|
98
110
|
"strict": true,
|
|
99
|
-
"noEmit": true,
|
|
100
111
|
"skipLibCheck": true,
|
|
101
112
|
"esModuleInterop": true,
|
|
102
113
|
"resolveJsonModule": true,
|
|
@@ -107,6 +118,11 @@ export function generateMonolithFiles(options) {
|
|
|
107
118
|
"exclude": ["node_modules", "dist", "**/*.test.ts"]
|
|
108
119
|
}
|
|
109
120
|
`;
|
|
121
|
+
files["zudojs.config.ts"] = renderZudojsConfig({
|
|
122
|
+
projectName: nameSlug,
|
|
123
|
+
projectType: "backend",
|
|
124
|
+
architecture: "monolith",
|
|
125
|
+
});
|
|
110
126
|
// Environment
|
|
111
127
|
files[".env.example"] = `NODE_ENV=development
|
|
112
128
|
PORT=3000
|
|
@@ -127,7 +143,7 @@ A Zudojs framework application.
|
|
|
127
143
|
## Getting Started
|
|
128
144
|
|
|
129
145
|
\`\`\`bash
|
|
130
|
-
${options.packageManager === "npm" ? "
|
|
146
|
+
${options.packageManager === "npm" ? "npm run dev" : options.packageManager === "yarn" ? "yarn dev" : options.packageManager === "bun" ? "bun run dev" : "pnpm run dev"}
|
|
131
147
|
\`\`\`
|
|
132
148
|
|
|
133
149
|
## Structure
|
|
@@ -150,6 +166,7 @@ src/
|
|
|
150
166
|
├── loggers/ # Logger configuration
|
|
151
167
|
├── middlewares/ # HTTP middleware
|
|
152
168
|
├── models/ # Data models
|
|
169
|
+
├── modules/ # Runtime modules
|
|
153
170
|
├── repositories/ # Data repositories
|
|
154
171
|
├── routes/ # HTTP routes
|
|
155
172
|
├── services/ # Application services
|
|
@@ -165,47 +182,24 @@ MIT
|
|
|
165
182
|
// src/ entry points
|
|
166
183
|
files["src/index.ts"] = `export { createApp } from "./app.js";
|
|
167
184
|
`;
|
|
168
|
-
files["src/server.ts"] =
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
process.exit(0);
|
|
187
|
-
});
|
|
188
|
-
`;
|
|
189
|
-
files["src/app.ts"] = `import { logger } from "@zudojs/logger";
|
|
190
|
-
import { createContainer } from "@zudojs/container";
|
|
191
|
-
|
|
192
|
-
export async function createApp() {
|
|
193
|
-
const log = logger.child({ service: "app" });
|
|
194
|
-
const container = createContainer();
|
|
195
|
-
|
|
196
|
-
log.info("${nameSlug} v0.1.0 starting...");
|
|
197
|
-
|
|
198
|
-
return {
|
|
199
|
-
container,
|
|
200
|
-
listen: async () => {
|
|
201
|
-
log.info("Server started");
|
|
202
|
-
},
|
|
203
|
-
stop: async () => {
|
|
204
|
-
log.info("Shutting down...");
|
|
205
|
-
},
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
`;
|
|
185
|
+
files["src/server.ts"] = renderServerFile();
|
|
186
|
+
// Normalized: the name becomes a file path segment and a class name.
|
|
187
|
+
const moduleName = normalizeName(options.services[0] ?? "app") || "app";
|
|
188
|
+
const serviceClassName = `${toPascalCase(moduleName)}Service`;
|
|
189
|
+
const appModule = moduleSpec(moduleName, "./modules/index.js");
|
|
190
|
+
files["src/app.ts"] = renderAppFile({
|
|
191
|
+
applicationName: nameSlug,
|
|
192
|
+
modules: [appModule],
|
|
193
|
+
});
|
|
194
|
+
files[`src/modules/${moduleName}.module.ts`] = renderModuleFile({
|
|
195
|
+
module: appModule,
|
|
196
|
+
service: {
|
|
197
|
+
className: serviceClassName,
|
|
198
|
+
importPath: "../services/index.js",
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
files["src/modules/index.ts"] =
|
|
202
|
+
`export { ${appModule.className} } from "./${moduleName}.module.js";\n`;
|
|
209
203
|
// Shared directories with empty index.ts
|
|
210
204
|
const sharedDirs = [
|
|
211
205
|
"configs",
|
|
@@ -232,23 +226,9 @@ export async function createApp() {
|
|
|
232
226
|
files[`src/${dir}/index.ts`] = "";
|
|
233
227
|
}
|
|
234
228
|
// Services
|
|
235
|
-
|
|
236
|
-
const serviceNamePascal = serviceName
|
|
237
|
-
.replace(/-([a-z])/g, (_m, c) => c.toUpperCase())
|
|
238
|
-
.replace(/^./, (c) => c.toUpperCase());
|
|
239
|
-
files[`src/services/${serviceName}.service.ts`] = `import { createLogger } from "@zudojs/logger";
|
|
240
|
-
|
|
241
|
-
export class ${serviceNamePascal}Service {
|
|
242
|
-
private readonly logger = createLogger({ service: "${serviceName}" });
|
|
243
|
-
|
|
244
|
-
async initialize(): Promise<void> {
|
|
245
|
-
this.logger.info("${serviceName} service initialized");
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
`;
|
|
229
|
+
files[`src/services/${moduleName}.service.ts`] = renderServiceFile(moduleName);
|
|
249
230
|
files["src/services/index.ts"] =
|
|
250
|
-
`export { ${
|
|
251
|
-
`;
|
|
231
|
+
`export { ${serviceClassName} } from "./${moduleName}.service.js";\n`;
|
|
252
232
|
// Controllers
|
|
253
233
|
files["src/controllers/health.controller.ts"] =
|
|
254
234
|
`export class HealthController {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zudojs-cli — Shared Runtime App Templates
|
|
3
|
+
*
|
|
4
|
+
* Every architecture template assembles the same four framework pieces:
|
|
5
|
+
* a logger, a container, an event bus and a set of modules, handed to
|
|
6
|
+
* `createRuntime(dependencies, options)`.
|
|
7
|
+
*
|
|
8
|
+
* The emitted source is kept here rather than duplicated per architecture
|
|
9
|
+
* so it can be verified against the real `@zudojs/*` packages in one place.
|
|
10
|
+
* `tests/generatedProject.typecheck.test.ts` type-checks the output of every
|
|
11
|
+
* template against `packages/<name>/src/index.ts`, so any drift between these
|
|
12
|
+
* snippets and the framework API fails the CLI test suite.
|
|
13
|
+
*/
|
|
14
|
+
/** Packages every generated runtime entry point imports from. */
|
|
15
|
+
export declare const RUNTIME_APP_DEPENDENCIES: readonly ["@zudojs/core", "@zudojs/runtime", "@zudojs/container", "@zudojs/events", "@zudojs/logger", "@zudojs/constants"];
|
|
16
|
+
/** A module registered with the runtime by the generated `createApp`. */
|
|
17
|
+
export interface RuntimeModuleSpec {
|
|
18
|
+
/** Slug used for the module id, file name and log messages. */
|
|
19
|
+
readonly name: string;
|
|
20
|
+
/** PascalCase class name. */
|
|
21
|
+
readonly className: string;
|
|
22
|
+
/** Import specifier the module class is imported from, relative to app.ts. */
|
|
23
|
+
readonly importPath: string;
|
|
24
|
+
}
|
|
25
|
+
/** Builds a module spec from a raw name. */
|
|
26
|
+
export declare function moduleSpec(name: string, importPath: string): RuntimeModuleSpec;
|
|
27
|
+
/**
|
|
28
|
+
* Renders `zudojs.config.ts`.
|
|
29
|
+
*
|
|
30
|
+
* The shape matches what the fullstack composer writes and what
|
|
31
|
+
* `zudojs generate` parses to detect the project architecture.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderZudojsConfig(options: {
|
|
34
|
+
readonly projectName: string;
|
|
35
|
+
readonly projectType: string;
|
|
36
|
+
readonly architecture: string;
|
|
37
|
+
}): string;
|
|
38
|
+
/**
|
|
39
|
+
* Renders `src/app.ts`: assembles the runtime dependencies and returns a
|
|
40
|
+
* started-on-demand `Runtime`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderAppFile(options: {
|
|
43
|
+
readonly applicationName: string;
|
|
44
|
+
readonly modules: readonly RuntimeModuleSpec[];
|
|
45
|
+
/**
|
|
46
|
+
* Port this app is deployed on. Recorded as runtime metadata so the value
|
|
47
|
+
* in docker-compose.yml and the Dockerfile is also visible from the app.
|
|
48
|
+
*/
|
|
49
|
+
readonly port?: number;
|
|
50
|
+
}): string;
|
|
51
|
+
/**
|
|
52
|
+
* Renders `src/server.ts`: the process entry point. Starts the runtime and
|
|
53
|
+
* stops it cleanly on SIGINT/SIGTERM.
|
|
54
|
+
*/
|
|
55
|
+
export declare function renderServerFile(appImportPath?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Renders a module class extending `BaseModule`.
|
|
58
|
+
*
|
|
59
|
+
* `BaseModule`'s constructor is protected, so the generated class declares a
|
|
60
|
+
* public constructor — without one the class cannot be instantiated.
|
|
61
|
+
*/
|
|
62
|
+
export declare function renderModuleFile(options: {
|
|
63
|
+
readonly module: RuntimeModuleSpec;
|
|
64
|
+
readonly service?: {
|
|
65
|
+
readonly className: string;
|
|
66
|
+
readonly importPath: string;
|
|
67
|
+
};
|
|
68
|
+
}): string;
|
|
69
|
+
/** Renders a service class using the real `createLogger` factory. */
|
|
70
|
+
export declare function renderServiceFile(name: string): string;
|
|
71
|
+
//# sourceMappingURL=appRuntime.template.d.ts.map
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* zudojs-cli — Shared Runtime App Templates
|
|
3
|
+
*
|
|
4
|
+
* Every architecture template assembles the same four framework pieces:
|
|
5
|
+
* a logger, a container, an event bus and a set of modules, handed to
|
|
6
|
+
* `createRuntime(dependencies, options)`.
|
|
7
|
+
*
|
|
8
|
+
* The emitted source is kept here rather than duplicated per architecture
|
|
9
|
+
* so it can be verified against the real `@zudojs/*` packages in one place.
|
|
10
|
+
* `tests/generatedProject.typecheck.test.ts` type-checks the output of every
|
|
11
|
+
* template against `packages/<name>/src/index.ts`, so any drift between these
|
|
12
|
+
* snippets and the framework API fails the CLI test suite.
|
|
13
|
+
*/
|
|
14
|
+
import { toPascalCase } from "../../utils/utils.name.js";
|
|
15
|
+
/** Packages every generated runtime entry point imports from. */
|
|
16
|
+
export const RUNTIME_APP_DEPENDENCIES = [
|
|
17
|
+
"@zudojs/core",
|
|
18
|
+
"@zudojs/runtime",
|
|
19
|
+
"@zudojs/container",
|
|
20
|
+
"@zudojs/events",
|
|
21
|
+
"@zudojs/logger",
|
|
22
|
+
"@zudojs/constants",
|
|
23
|
+
];
|
|
24
|
+
/** Builds a module spec from a raw name. */
|
|
25
|
+
export function moduleSpec(name, importPath) {
|
|
26
|
+
return {
|
|
27
|
+
name,
|
|
28
|
+
className: `${toPascalCase(name)}Module`,
|
|
29
|
+
importPath,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Emits a string as a TypeScript string literal that cannot break out. */
|
|
33
|
+
function literal(value) {
|
|
34
|
+
return JSON.stringify(value);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Renders `zudojs.config.ts`.
|
|
38
|
+
*
|
|
39
|
+
* The shape matches what the fullstack composer writes and what
|
|
40
|
+
* `zudojs generate` parses to detect the project architecture.
|
|
41
|
+
*/
|
|
42
|
+
export function renderZudojsConfig(options) {
|
|
43
|
+
return `/**
|
|
44
|
+
* Zudojs project configuration.
|
|
45
|
+
*
|
|
46
|
+
* Read by the \`zudojs\` CLI to detect this project's architecture.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
export default {
|
|
50
|
+
name: ${literal(options.projectName)},
|
|
51
|
+
projectType: ${literal(options.projectType)},
|
|
52
|
+
architecture: ${literal(options.architecture)},
|
|
53
|
+
};
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Renders `src/app.ts`: assembles the runtime dependencies and returns a
|
|
58
|
+
* started-on-demand `Runtime`.
|
|
59
|
+
*/
|
|
60
|
+
export function renderAppFile(options) {
|
|
61
|
+
const imports = [...options.modules]
|
|
62
|
+
.map((m) => `import { ${m.className} } from ${literal(m.importPath)};`)
|
|
63
|
+
.join("\n");
|
|
64
|
+
// An empty array literal would make the loop variable `never`, so the
|
|
65
|
+
// registration loop is only emitted when there is at least one module.
|
|
66
|
+
const registration = options.modules.length > 0
|
|
67
|
+
? ` for (const module of [
|
|
68
|
+
${options.modules.map((m) => ` new ${m.className}(),`).join("\n")}
|
|
69
|
+
]) {
|
|
70
|
+
modules.set(module.id, module);
|
|
71
|
+
}
|
|
72
|
+
`
|
|
73
|
+
: "";
|
|
74
|
+
const metadata = options.port === undefined
|
|
75
|
+
? ""
|
|
76
|
+
: `\n metadata: { port: ${options.port} },`;
|
|
77
|
+
return `import type { Environment } from "@zudojs/constants";
|
|
78
|
+
import { createContainer } from "@zudojs/container";
|
|
79
|
+
import type { Module } from "@zudojs/core";
|
|
80
|
+
import { createEventBus } from "@zudojs/events";
|
|
81
|
+
import { createLogger } from "@zudojs/logger";
|
|
82
|
+
import { createRuntime, type Runtime } from "@zudojs/runtime";
|
|
83
|
+
${imports}
|
|
84
|
+
|
|
85
|
+
const ENVIRONMENTS: readonly Environment[] = [
|
|
86
|
+
"development",
|
|
87
|
+
"test",
|
|
88
|
+
"staging",
|
|
89
|
+
"production",
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
/** Narrows NODE_ENV to a framework Environment without an unchecked cast. */
|
|
93
|
+
function resolveEnvironment(): Environment {
|
|
94
|
+
const value = process.env["NODE_ENV"];
|
|
95
|
+
return ENVIRONMENTS.find((candidate) => candidate === value) ?? "development";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Assembles the application runtime.
|
|
100
|
+
*
|
|
101
|
+
* \`createRuntime\` takes two arguments: the dependencies the runtime and its
|
|
102
|
+
* modules share, and the options describing this application.
|
|
103
|
+
*/
|
|
104
|
+
export function createApp(): Runtime {
|
|
105
|
+
const logger = createLogger({ name: ${literal(options.applicationName)} });
|
|
106
|
+
const container = createContainer();
|
|
107
|
+
const eventBus = createEventBus();
|
|
108
|
+
|
|
109
|
+
const modules = new Map<string, Module>();
|
|
110
|
+
${registration}
|
|
111
|
+
const runtime = createRuntime(
|
|
112
|
+
{ modules, logger, container, eventBus },
|
|
113
|
+
{
|
|
114
|
+
applicationName: ${literal(options.applicationName)},
|
|
115
|
+
applicationVersion: "0.1.0",
|
|
116
|
+
environment: resolveEnvironment(),
|
|
117
|
+
// Signals are handled explicitly in server.ts.
|
|
118
|
+
handleSignals: false,${metadata}
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
runtime.registerReadinessCheck("modules", () => runtime.state === "running");
|
|
123
|
+
|
|
124
|
+
return runtime;
|
|
125
|
+
}
|
|
126
|
+
`;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Renders `src/server.ts`: the process entry point. Starts the runtime and
|
|
130
|
+
* stops it cleanly on SIGINT/SIGTERM.
|
|
131
|
+
*/
|
|
132
|
+
export function renderServerFile(appImportPath = "./app.js") {
|
|
133
|
+
return `import { createApp } from ${literal(appImportPath)};
|
|
134
|
+
|
|
135
|
+
const runtime = createApp();
|
|
136
|
+
|
|
137
|
+
await runtime.start();
|
|
138
|
+
|
|
139
|
+
for (const signal of ["SIGINT", "SIGTERM"] as const) {
|
|
140
|
+
process.once(signal, () => {
|
|
141
|
+
void runtime
|
|
142
|
+
.stop()
|
|
143
|
+
.then(() => {
|
|
144
|
+
process.exit(0);
|
|
145
|
+
})
|
|
146
|
+
.catch((error: unknown) => {
|
|
147
|
+
console.error(error);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Renders a module class extending `BaseModule`.
|
|
156
|
+
*
|
|
157
|
+
* `BaseModule`'s constructor is protected, so the generated class declares a
|
|
158
|
+
* public constructor — without one the class cannot be instantiated.
|
|
159
|
+
*/
|
|
160
|
+
export function renderModuleFile(options) {
|
|
161
|
+
const { module, service } = options;
|
|
162
|
+
const serviceImport = service
|
|
163
|
+
? `import { ${service.className} } from ${literal(service.importPath)};\n`
|
|
164
|
+
: "";
|
|
165
|
+
const serviceField = service
|
|
166
|
+
? ` private readonly service = new ${service.className}();\n\n`
|
|
167
|
+
: "";
|
|
168
|
+
const serviceInit = service ? " await this.service.initialize();\n" : "";
|
|
169
|
+
return `import { BaseModule, type ModuleContext } from "@zudojs/core";
|
|
170
|
+
${serviceImport}
|
|
171
|
+
/**
|
|
172
|
+
* ${module.name} module.
|
|
173
|
+
*
|
|
174
|
+
* Registered with the runtime in app.ts. The runtime calls onInitialize
|
|
175
|
+
* during start and onShutdown during stop.
|
|
176
|
+
*/
|
|
177
|
+
export class ${module.className} extends BaseModule {
|
|
178
|
+
public readonly id = ${literal(module.name)};
|
|
179
|
+
public readonly name = ${literal(module.name)};
|
|
180
|
+
|
|
181
|
+
${serviceField} public constructor() {
|
|
182
|
+
super({ version: "0.1.0" });
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
public override async onInitialize(context: ModuleContext): Promise<void> {
|
|
186
|
+
${serviceInit} context.logger.info(${literal(`${module.name} module initialized`)});
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
public override async onShutdown(context: ModuleContext): Promise<void> {
|
|
190
|
+
context.logger.info(${literal(`${module.name} module stopped`)});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
`;
|
|
194
|
+
}
|
|
195
|
+
/** Renders a service class using the real `createLogger` factory. */
|
|
196
|
+
export function renderServiceFile(name) {
|
|
197
|
+
const className = `${toPascalCase(name)}Service`;
|
|
198
|
+
return `import { createLogger } from "@zudojs/logger";
|
|
199
|
+
|
|
200
|
+
export class ${className} {
|
|
201
|
+
private readonly logger = createLogger({ name: ${literal(`${name}-service`)} });
|
|
202
|
+
|
|
203
|
+
public async initialize(): Promise<void> {
|
|
204
|
+
this.logger.info(${literal(`${name} service initialized`)});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
`;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=appRuntime.template.js.map
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Shared utility functions for the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export { writeFile, writeFileTree } from "./utils.fileSystem.js";
|
|
7
|
-
export { normalizeName } from "./utils.name.js";
|
|
6
|
+
export { writeFile, writeFileTree, mergeBarrelExport, } from "./utils.fileSystem.js";
|
|
7
|
+
export { normalizeName, toPascalCase, toCamelCase } from "./utils.name.js";
|
|
8
8
|
export { detectArchitecture } from "./utils.detect.js";
|
|
9
|
-
export { execCommand } from "./utils.exec.js";
|
|
9
|
+
export { execCommand, runStreaming } from "./utils.exec.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/utils/index.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Shared utility functions for the CLI scaffolding system.
|
|
5
5
|
*/
|
|
6
|
-
export { writeFile, writeFileTree } from "./utils.fileSystem.js";
|
|
7
|
-
export { normalizeName } from "./utils.name.js";
|
|
6
|
+
export { writeFile, writeFileTree, mergeBarrelExport, } from "./utils.fileSystem.js";
|
|
7
|
+
export { normalizeName, toPascalCase, toCamelCase } from "./utils.name.js";
|
|
8
8
|
export { detectArchitecture } from "./utils.detect.js";
|
|
9
|
-
export { execCommand } from "./utils.exec.js";
|
|
9
|
+
export { execCommand, runStreaming } from "./utils.exec.js";
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -2,5 +2,23 @@ export interface ExecResult {
|
|
|
2
2
|
readonly stdout: string;
|
|
3
3
|
readonly stderr: string;
|
|
4
4
|
}
|
|
5
|
-
export
|
|
5
|
+
export interface ExecOptions {
|
|
6
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
7
|
+
readonly timeout?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Runs a short-lived command and buffers its output.
|
|
11
|
+
*
|
|
12
|
+
* Suitable for quick probes (version checks, git commands). Do NOT use this
|
|
13
|
+
* for long-running processes such as dev servers or dependency installs —
|
|
14
|
+
* use {@link runStreaming} instead.
|
|
15
|
+
*/
|
|
16
|
+
export declare function execCommand(file: string, args: readonly string[], cwd: string, options?: ExecOptions): Promise<ExecResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Runs a command with inherited stdio and no timeout.
|
|
19
|
+
*
|
|
20
|
+
* Use for long-running processes (dev servers) and for dependency installs
|
|
21
|
+
* so output streams to the user and slow commands are not killed.
|
|
22
|
+
*/
|
|
23
|
+
export declare function runStreaming(file: string, args: readonly string[], cwd: string, options?: ExecOptions): Promise<void>;
|
|
6
24
|
//# sourceMappingURL=utils.exec.d.ts.map
|
|
@@ -1,11 +1,45 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
3
|
const execFileAsync = promisify(execFile);
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Runs a short-lived command and buffers its output.
|
|
6
|
+
*
|
|
7
|
+
* Suitable for quick probes (version checks, git commands). Do NOT use this
|
|
8
|
+
* for long-running processes such as dev servers or dependency installs —
|
|
9
|
+
* use {@link runStreaming} instead.
|
|
10
|
+
*/
|
|
11
|
+
export async function execCommand(file, args, cwd, options = {}) {
|
|
5
12
|
const { stdout, stderr } = await execFileAsync(file, args, {
|
|
6
13
|
cwd,
|
|
7
|
-
timeout: 120000,
|
|
14
|
+
timeout: options.timeout ?? 120000,
|
|
15
|
+
...(options.env ? { env: options.env } : {}),
|
|
8
16
|
});
|
|
9
17
|
return { stdout, stderr };
|
|
10
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Runs a command with inherited stdio and no timeout.
|
|
21
|
+
*
|
|
22
|
+
* Use for long-running processes (dev servers) and for dependency installs
|
|
23
|
+
* so output streams to the user and slow commands are not killed.
|
|
24
|
+
*/
|
|
25
|
+
export function runStreaming(file, args, cwd, options = {}) {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const child = spawn(file, Array.from(args), {
|
|
28
|
+
cwd,
|
|
29
|
+
stdio: "inherit",
|
|
30
|
+
...(options.env ? { env: options.env } : {}),
|
|
31
|
+
});
|
|
32
|
+
child.on("error", (error) => {
|
|
33
|
+
reject(error);
|
|
34
|
+
});
|
|
35
|
+
child.on("exit", (code, signal) => {
|
|
36
|
+
if (code === 0) {
|
|
37
|
+
resolve();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
reject(new Error(`Command "${file} ${args.join(" ")}" exited with ${signal ? `signal ${signal}` : `code ${code}`}`));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
11
45
|
//# sourceMappingURL=utils.exec.js.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare function writeFile(basePath: string, filePath: string, content: string): Promise<void>;
|
|
2
2
|
export declare function writeFileTree(basePath: string, files: Readonly<Record<string, string>>): Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Returns the content of a barrel index file with `exportLine` appended,
|
|
5
|
+
* preserving any existing exports. If the line is already present, the
|
|
6
|
+
* existing content is returned unchanged.
|
|
7
|
+
*/
|
|
8
|
+
export declare function mergeBarrelExport(basePath: string, indexPath: string, exportLine: string): string;
|
|
3
9
|
//# sourceMappingURL=utils.fileSystem.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
1
2
|
import { mkdir, writeFile as writeFileAsync } from "node:fs/promises";
|
|
2
3
|
import { dirname, join, relative } from "node:path";
|
|
3
4
|
function assertSafePath(basePath, filePath) {
|
|
@@ -18,4 +19,22 @@ export async function writeFileTree(basePath, files) {
|
|
|
18
19
|
await writeFile(basePath, filePath, content);
|
|
19
20
|
}
|
|
20
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns the content of a barrel index file with `exportLine` appended,
|
|
24
|
+
* preserving any existing exports. If the line is already present, the
|
|
25
|
+
* existing content is returned unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export function mergeBarrelExport(basePath, indexPath, exportLine) {
|
|
28
|
+
const fullPath = join(basePath, indexPath);
|
|
29
|
+
const line = exportLine.trim();
|
|
30
|
+
let existing = "";
|
|
31
|
+
if (existsSync(fullPath)) {
|
|
32
|
+
existing = readFileSync(fullPath, "utf-8");
|
|
33
|
+
}
|
|
34
|
+
if (existing.includes(line)) {
|
|
35
|
+
return existing;
|
|
36
|
+
}
|
|
37
|
+
const separator = existing.length > 0 && !existing.endsWith("\n") ? "\n" : "";
|
|
38
|
+
return existing + separator + line + "\n";
|
|
39
|
+
}
|
|
21
40
|
//# sourceMappingURL=utils.fileSystem.js.map
|
|
@@ -1,2 +1,28 @@
|
|
|
1
1
|
export declare function normalizeName(name: string): string;
|
|
2
|
+
/** Converts an arbitrary name to PascalCase (safe as a TS identifier). */
|
|
3
|
+
export declare function toPascalCase(name: string): string;
|
|
4
|
+
/** Converts an arbitrary name to camelCase (safe as a TS identifier). */
|
|
5
|
+
export declare function toCamelCase(name: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Pattern for names that may be used verbatim as a path segment
|
|
8
|
+
* (`--service`, `--module`, manifest service entries).
|
|
9
|
+
*/
|
|
10
|
+
export declare const SAFE_PATH_SEGMENT: RegExp;
|
|
11
|
+
/**
|
|
12
|
+
* Validates a name that a generator will normalize into file paths and
|
|
13
|
+
* identifiers.
|
|
14
|
+
*
|
|
15
|
+
* `normalizeName` strips everything outside `[a-z0-9-]`, so a name such as
|
|
16
|
+
* `"..."` or `"!!!"` collapses to the empty string and the generator writes
|
|
17
|
+
* `src//.event.ts` with an anonymous exported class. Reject it up front.
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertGeneratableName(name: string, kind?: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Validates a value that is interpolated verbatim into a generated file path.
|
|
22
|
+
*
|
|
23
|
+
* Unlike {@link assertGeneratableName} this does not normalize: the value is
|
|
24
|
+
* used as-is, so `..` or a path separator here would let a generator write
|
|
25
|
+
* outside its base path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function assertSafePathSegment(value: string, kind?: string): string;
|
|
2
28
|
//# sourceMappingURL=utils.name.d.ts.map
|