zudojs-cli 0.1.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +14 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts +0 -14
- package/dist/src/adapters/databases/postgres.adapter.js +0 -30
- package/dist/src/adapters/frontend/angular.adapter.js +6 -0
- package/dist/src/adapters/frontend/astro.adapter.js +2 -2
- package/dist/src/adapters/frontend/react.adapter.js +26 -17
- package/dist/src/adapters/frontend/svelte.adapter.js +1 -0
- package/dist/src/adapters/frontend/sveltekit.adapter.js +7 -8
- package/dist/src/adapters/frontend/vanilla.adapter.js +1 -1
- package/dist/src/adapters/frontend/vue.adapter.js +1 -0
- package/dist/src/adapters/package-managers/bun.adapter.js +5 -5
- package/dist/src/adapters/package-managers/npm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/pnpm.adapter.js +5 -5
- package/dist/src/adapters/package-managers/yarn.adapter.js +5 -5
- package/dist/src/bin/zudojs.js +42 -6
- package/dist/src/cliApplication/cliApplication.builtins.d.ts +11 -2
- package/dist/src/cliApplication/cliApplication.builtins.js +15 -4
- package/dist/src/cliApplication/cliApplication.core.js +20 -5
- package/dist/src/cliConstant/cliConstant.value.d.ts +1 -1
- package/dist/src/cliConstant/cliConstant.value.js +2 -1
- package/dist/src/cliConstant/cliVersion.d.ts +16 -0
- package/dist/src/cliConstant/cliVersion.js +57 -0
- package/dist/src/cliParser/cliParser.core.js +7 -0
- package/dist/src/cliParser/cliParser.shortOption.js +1 -1
- package/dist/src/commands/add.command.js +27 -24
- package/dist/src/commands/build.command.js +13 -7
- package/dist/src/commands/create.command.js +177 -84
- package/dist/src/commands/dev.command.js +62 -27
- package/dist/src/commands/doctor.command.js +45 -23
- package/dist/src/commands/generate.command.js +103 -34
- package/dist/src/constants/index.d.ts +3 -1
- package/dist/src/constants/index.js +3 -1
- package/dist/src/generators/command/command.generator.d.ts +1 -0
- package/dist/src/generators/command/command.generator.js +10 -4
- package/dist/src/generators/controller/controller.generator.d.ts +1 -0
- package/dist/src/generators/controller/controller.generator.js +12 -9
- package/dist/src/generators/dto/dto.generator.d.ts +1 -0
- package/dist/src/generators/dto/dto.generator.js +9 -3
- package/dist/src/generators/event/event.generator.d.ts +1 -0
- package/dist/src/generators/event/event.generator.js +10 -4
- package/dist/src/generators/frontend/frontendGenerator.core.js +4 -28
- package/dist/src/generators/frontend/frontendPipeline.d.ts +26 -0
- package/dist/src/generators/frontend/frontendPipeline.js +93 -0
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts +1 -2
- package/dist/src/generators/fullstack/fullstackComposer.core.js +68 -62
- package/dist/src/generators/infrastructure/infrastructure.generator.d.ts +11 -0
- package/dist/src/generators/infrastructure/infrastructure.generator.js +101 -61
- package/dist/src/generators/integration/integrationGenerator.core.d.ts +6 -0
- package/dist/src/generators/integration/integrationGenerator.core.js +35 -6
- package/dist/src/generators/job/job.generator.d.ts +1 -0
- package/dist/src/generators/job/job.generator.js +9 -3
- package/dist/src/generators/middleware/middleware.generator.d.ts +1 -0
- package/dist/src/generators/middleware/middleware.generator.js +10 -4
- package/dist/src/generators/model/model.generator.d.ts +1 -0
- package/dist/src/generators/model/model.generator.js +9 -3
- package/dist/src/generators/module/module.generator.d.ts +1 -0
- package/dist/src/generators/module/module.generator.js +11 -24
- package/dist/src/generators/project/project.generator.js +2 -23
- package/dist/src/generators/query/query.generator.d.ts +1 -0
- package/dist/src/generators/query/query.generator.js +10 -4
- package/dist/src/generators/repository/repository.generator.d.ts +1 -0
- package/dist/src/generators/repository/repository.generator.js +12 -9
- package/dist/src/generators/route/route.generator.d.ts +1 -0
- package/dist/src/generators/route/route.generator.js +11 -5
- package/dist/src/generators/service/service.generator.d.ts +1 -0
- package/dist/src/generators/service/service.generator.js +12 -9
- package/dist/src/generators/validator/validator.generator.d.ts +1 -0
- package/dist/src/generators/validator/validator.generator.js +9 -3
- package/dist/src/installers/dependency.installer.js +6 -2
- package/dist/src/manifest/manifestManager.core.d.ts +3 -0
- package/dist/src/prompts/backend/index.d.ts +1 -0
- package/dist/src/prompts/backend/index.js +1 -0
- package/dist/src/prompts/backend/services.prompt.d.ts +7 -0
- package/dist/src/prompts/backend/services.prompt.js +39 -0
- package/dist/src/prompts/index.d.ts +0 -1
- package/dist/src/prompts/index.js +0 -1
- package/dist/src/rollback/rollbackManager.core.js +0 -1
- package/dist/src/runners/process/processRunner.core.d.ts +4 -0
- package/dist/src/runners/process/processRunner.core.js +17 -3
- package/dist/src/scaffolders/framework.scaffolder.js +9 -6
- package/dist/src/scaffolders/scaffolder.helper.js +7 -2
- package/dist/src/scripts/postinstall.cjs +24 -3
- package/dist/src/templates/microservice/index.d.ts +1 -1
- package/dist/src/templates/microservice/index.js +1 -1
- package/dist/src/templates/microservice/microservice.template.d.ts +15 -1
- package/dist/src/templates/microservice/microservice.template.js +165 -183
- package/dist/src/templates/modular-monolith/modularMonolith.template.js +54 -106
- package/dist/src/templates/monolith/monolith.template.d.ts +1 -0
- package/dist/src/templates/monolith/monolith.template.js +50 -94
- package/dist/src/templates/shared/appRuntime.template.d.ts +71 -0
- package/dist/src/templates/shared/appRuntime.template.js +209 -0
- package/dist/src/templates/shared/index.d.ts +5 -0
- package/dist/src/templates/shared/index.js +5 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.js +3 -3
- package/dist/src/utils/utils.exec.d.ts +19 -1
- package/dist/src/utils/utils.exec.js +37 -3
- package/dist/src/utils/utils.fileSystem.d.ts +6 -0
- package/dist/src/utils/utils.fileSystem.js +19 -0
- package/dist/src/utils/utils.name.d.ts +26 -0
- package/dist/src/utils/utils.name.js +51 -1
- package/package.json +29 -22
- package/src/scripts/postinstall.cjs +24 -3
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/adapters/databases/index.d.ts.map +0 -1
- package/dist/src/adapters/databases/index.js.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/mysql.adapter.js.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/postgres.adapter.js.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.d.ts.map +0 -1
- package/dist/src/adapters/databases/sqlite.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/angular.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/astro.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/flutter.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.d.ts.map +0 -1
- package/dist/src/adapters/frontend/frontendAdapter.type.js.map +0 -1
- package/dist/src/adapters/frontend/index.d.ts.map +0 -1
- package/dist/src/adapters/frontend/index.js.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/next.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/nuxt.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react-native.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/react.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/svelte.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/sveltekit.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vanilla.adapter.js.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.d.ts.map +0 -1
- package/dist/src/adapters/frontend/vue.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/bun.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/index.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/index.js.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/npm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/packageManager.type.js.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/pnpm.adapter.js.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.d.ts.map +0 -1
- package/dist/src/adapters/package-managers/yarn.adapter.js.map +0 -1
- package/dist/src/bin/zudojs.d.ts.map +0 -1
- package/dist/src/bin/zudojs.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.builtins.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.core.js.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.d.ts.map +0 -1
- package/dist/src/cliApplication/cliApplication.writer.js.map +0 -1
- package/dist/src/cliApplication/index.d.ts.map +0 -1
- package/dist/src/cliApplication/index.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.builder.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.factory.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.registry.js.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.d.ts.map +0 -1
- package/dist/src/cliCommand/cliCommand.validator.js.map +0 -1
- package/dist/src/cliCommand/index.d.ts.map +0 -1
- package/dist/src/cliCommand/index.js.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.d.ts.map +0 -1
- package/dist/src/cliConstant/cliConstant.value.js.map +0 -1
- package/dist/src/cliConstant/index.d.ts.map +0 -1
- package/dist/src/cliConstant/index.js.map +0 -1
- package/dist/src/cliError/cliError.argument.d.ts.map +0 -1
- package/dist/src/cliError/cliError.argument.js.map +0 -1
- package/dist/src/cliError/cliError.base.d.ts.map +0 -1
- package/dist/src/cliError/cliError.base.js.map +0 -1
- package/dist/src/cliError/cliError.command.d.ts.map +0 -1
- package/dist/src/cliError/cliError.command.js.map +0 -1
- package/dist/src/cliError/cliError.execution.d.ts.map +0 -1
- package/dist/src/cliError/cliError.execution.js.map +0 -1
- package/dist/src/cliError/cliError.option.d.ts.map +0 -1
- package/dist/src/cliError/cliError.option.js.map +0 -1
- package/dist/src/cliError/index.d.ts.map +0 -1
- package/dist/src/cliError/index.js.map +0 -1
- package/dist/src/cliParser/cliParser.core.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.core.js.map +0 -1
- package/dist/src/cliParser/cliParser.helper.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.helper.js.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.longOption.js.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.d.ts.map +0 -1
- package/dist/src/cliParser/cliParser.shortOption.js.map +0 -1
- package/dist/src/cliParser/index.d.ts.map +0 -1
- package/dist/src/cliParser/index.js.map +0 -1
- package/dist/src/cliType/cliType.type.d.ts.map +0 -1
- package/dist/src/cliType/cliType.type.js.map +0 -1
- package/dist/src/cliType/index.d.ts.map +0 -1
- package/dist/src/cliType/index.js.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.d.ts.map +0 -1
- package/dist/src/cliVersion/cliVersion.core.js.map +0 -1
- package/dist/src/cliVersion/index.d.ts.map +0 -1
- package/dist/src/cliVersion/index.js.map +0 -1
- package/dist/src/commands/add.command.d.ts.map +0 -1
- package/dist/src/commands/add.command.js.map +0 -1
- package/dist/src/commands/build.command.d.ts.map +0 -1
- package/dist/src/commands/build.command.js.map +0 -1
- package/dist/src/commands/create.command.d.ts.map +0 -1
- package/dist/src/commands/create.command.js.map +0 -1
- package/dist/src/commands/dev.command.d.ts.map +0 -1
- package/dist/src/commands/dev.command.js.map +0 -1
- package/dist/src/commands/doctor.command.d.ts.map +0 -1
- package/dist/src/commands/doctor.command.js.map +0 -1
- package/dist/src/commands/generate.command.d.ts.map +0 -1
- package/dist/src/commands/generate.command.js.map +0 -1
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js.map +0 -1
- package/dist/src/commands/info.command.d.ts.map +0 -1
- package/dist/src/commands/info.command.js.map +0 -1
- package/dist/src/constants/index.d.ts.map +0 -1
- package/dist/src/constants/index.js.map +0 -1
- package/dist/src/errors/index.d.ts.map +0 -1
- package/dist/src/errors/index.js.map +0 -1
- package/dist/src/generators/backend/backend.generator.d.ts.map +0 -1
- package/dist/src/generators/backend/backend.generator.js.map +0 -1
- package/dist/src/generators/backend/index.d.ts.map +0 -1
- package/dist/src/generators/backend/index.js.map +0 -1
- package/dist/src/generators/command/command.generator.d.ts.map +0 -1
- package/dist/src/generators/command/command.generator.js.map +0 -1
- package/dist/src/generators/controller/controller.generator.d.ts.map +0 -1
- package/dist/src/generators/controller/controller.generator.js.map +0 -1
- package/dist/src/generators/dto/dto.generator.d.ts.map +0 -1
- package/dist/src/generators/dto/dto.generator.js.map +0 -1
- package/dist/src/generators/dto/index.d.ts.map +0 -1
- package/dist/src/generators/dto/index.js.map +0 -1
- package/dist/src/generators/event/event.generator.d.ts.map +0 -1
- package/dist/src/generators/event/event.generator.js.map +0 -1
- package/dist/src/generators/event/index.d.ts.map +0 -1
- package/dist/src/generators/event/index.js.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/frontend/frontendGenerator.core.js.map +0 -1
- package/dist/src/generators/frontend/index.d.ts.map +0 -1
- package/dist/src/generators/frontend/index.js.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.d.ts.map +0 -1
- package/dist/src/generators/fullstack/fullstackComposer.core.js.map +0 -1
- package/dist/src/generators/fullstack/index.d.ts.map +0 -1
- package/dist/src/generators/fullstack/index.js.map +0 -1
- package/dist/src/generators/index.d.ts.map +0 -1
- package/dist/src/generators/index.js.map +0 -1
- package/dist/src/generators/infrastructure/index.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/index.js.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.d.ts.map +0 -1
- package/dist/src/generators/infrastructure/infrastructure.generator.js.map +0 -1
- package/dist/src/generators/integration/index.d.ts.map +0 -1
- package/dist/src/generators/integration/index.js.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.d.ts.map +0 -1
- package/dist/src/generators/integration/integrationGenerator.core.js.map +0 -1
- package/dist/src/generators/job/index.d.ts.map +0 -1
- package/dist/src/generators/job/index.js.map +0 -1
- package/dist/src/generators/job/job.generator.d.ts.map +0 -1
- package/dist/src/generators/job/job.generator.js.map +0 -1
- package/dist/src/generators/middleware/index.d.ts.map +0 -1
- package/dist/src/generators/middleware/index.js.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.d.ts.map +0 -1
- package/dist/src/generators/middleware/middleware.generator.js.map +0 -1
- package/dist/src/generators/model/index.d.ts.map +0 -1
- package/dist/src/generators/model/index.js.map +0 -1
- package/dist/src/generators/model/model.generator.d.ts.map +0 -1
- package/dist/src/generators/model/model.generator.js.map +0 -1
- package/dist/src/generators/module/module.generator.d.ts.map +0 -1
- package/dist/src/generators/module/module.generator.js.map +0 -1
- package/dist/src/generators/project/project.generator.d.ts.map +0 -1
- package/dist/src/generators/project/project.generator.js.map +0 -1
- package/dist/src/generators/query/query.generator.d.ts.map +0 -1
- package/dist/src/generators/query/query.generator.js.map +0 -1
- package/dist/src/generators/repository/repository.generator.d.ts.map +0 -1
- package/dist/src/generators/repository/repository.generator.js.map +0 -1
- package/dist/src/generators/route/index.d.ts.map +0 -1
- package/dist/src/generators/route/index.js.map +0 -1
- package/dist/src/generators/route/route.generator.d.ts.map +0 -1
- package/dist/src/generators/route/route.generator.js.map +0 -1
- package/dist/src/generators/service/service.generator.d.ts.map +0 -1
- package/dist/src/generators/service/service.generator.js.map +0 -1
- package/dist/src/generators/validator/index.d.ts.map +0 -1
- package/dist/src/generators/validator/index.js.map +0 -1
- package/dist/src/generators/validator/validator.generator.d.ts.map +0 -1
- package/dist/src/generators/validator/validator.generator.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/installers/dependency.installer.d.ts.map +0 -1
- package/dist/src/installers/dependency.installer.js.map +0 -1
- package/dist/src/installers/index.d.ts.map +0 -1
- package/dist/src/installers/index.js.map +0 -1
- package/dist/src/manifest/index.d.ts.map +0 -1
- package/dist/src/manifest/index.js.map +0 -1
- package/dist/src/manifest/manifestManager.core.d.ts.map +0 -1
- package/dist/src/manifest/manifestManager.core.js.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/api-style.prompt.js.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/backend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/backend/database.prompt.d.ts.map +0 -1
- package/dist/src/prompts/backend/database.prompt.js.map +0 -1
- package/dist/src/prompts/backend/index.d.ts.map +0 -1
- package/dist/src/prompts/backend/index.js.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/capabilities.prompt.js.map +0 -1
- package/dist/src/prompts/capabilities/index.d.ts.map +0 -1
- package/dist/src/prompts/capabilities/index.js.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/framework.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.d.ts.map +0 -1
- package/dist/src/prompts/frontend/frontend-architecture.prompt.js.map +0 -1
- package/dist/src/prompts/frontend/index.d.ts.map +0 -1
- package/dist/src/prompts/frontend/index.js.map +0 -1
- package/dist/src/prompts/index.d.ts.map +0 -1
- package/dist/src/prompts/index.js.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/confirmation.prompt.js.map +0 -1
- package/dist/src/prompts/project/index.d.ts.map +0 -1
- package/dist/src/prompts/project/index.js.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-name.prompt.js.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.d.ts.map +0 -1
- package/dist/src/prompts/project/project-type.prompt.js.map +0 -1
- package/dist/src/prompts/prompts.createProject.d.ts +0 -33
- package/dist/src/prompts/prompts.createProject.d.ts.map +0 -1
- package/dist/src/prompts/prompts.createProject.js +0 -143
- package/dist/src/prompts/prompts.createProject.js.map +0 -1
- package/dist/src/prompts/workspace/index.d.ts.map +0 -1
- package/dist/src/prompts/workspace/index.js.map +0 -1
- package/dist/src/prompts/workspace/package-manager.prompt.d.ts.map +0 -1
- package/dist/src/prompts/workspace/package-manager.prompt.js.map +0 -1
- package/dist/src/registries/adapter/frontendAdapterRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/adapter/frontendAdapterRegistry.core.js.map +0 -1
- package/dist/src/registries/adapter/packageManagerRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/adapter/packageManagerRegistry.core.js.map +0 -1
- package/dist/src/registries/dependency/dependencyRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/dependency/dependencyRegistry.core.js.map +0 -1
- package/dist/src/registries/dependency/index.d.ts.map +0 -1
- package/dist/src/registries/dependency/index.js.map +0 -1
- package/dist/src/registries/generator/generatorRegistry.core.d.ts.map +0 -1
- package/dist/src/registries/generator/generatorRegistry.core.js.map +0 -1
- package/dist/src/registries/generator/index.d.ts.map +0 -1
- package/dist/src/registries/generator/index.js.map +0 -1
- package/dist/src/registries/index.d.ts.map +0 -1
- package/dist/src/registries/index.js.map +0 -1
- package/dist/src/resolvers/architecture.resolver.d.ts.map +0 -1
- package/dist/src/resolvers/architecture.resolver.js.map +0 -1
- package/dist/src/resolvers/capability/capabilityResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/capability/capabilityResolver.core.js.map +0 -1
- package/dist/src/resolvers/capability/index.d.ts.map +0 -1
- package/dist/src/resolvers/capability/index.js.map +0 -1
- package/dist/src/resolvers/configuration/configurationResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/configuration/configurationResolver.core.js.map +0 -1
- package/dist/src/resolvers/configuration/index.d.ts.map +0 -1
- package/dist/src/resolvers/configuration/index.js.map +0 -1
- package/dist/src/resolvers/dependency/dependencyResolver.core.d.ts.map +0 -1
- package/dist/src/resolvers/dependency/dependencyResolver.core.js.map +0 -1
- package/dist/src/resolvers/dependency/index.d.ts.map +0 -1
- package/dist/src/resolvers/dependency/index.js.map +0 -1
- package/dist/src/resolvers/index.d.ts.map +0 -1
- package/dist/src/resolvers/index.js.map +0 -1
- package/dist/src/resolvers/project.resolver.d.ts.map +0 -1
- package/dist/src/resolvers/project.resolver.js.map +0 -1
- package/dist/src/rollback/index.d.ts.map +0 -1
- package/dist/src/rollback/index.js.map +0 -1
- package/dist/src/rollback/rollbackManager.core.d.ts.map +0 -1
- package/dist/src/rollback/rollbackManager.core.js.map +0 -1
- package/dist/src/runners/package-manager/index.d.ts.map +0 -1
- package/dist/src/runners/package-manager/index.js.map +0 -1
- package/dist/src/runners/package-manager/packageManagerRunner.core.d.ts.map +0 -1
- package/dist/src/runners/package-manager/packageManagerRunner.core.js.map +0 -1
- package/dist/src/runners/process/index.d.ts.map +0 -1
- package/dist/src/runners/process/index.js.map +0 -1
- package/dist/src/runners/process/processRunner.core.d.ts.map +0 -1
- package/dist/src/runners/process/processRunner.core.js.map +0 -1
- package/dist/src/runners/task/index.d.ts.map +0 -1
- package/dist/src/runners/task/index.js.map +0 -1
- package/dist/src/runners/task/taskRunner.core.d.ts.map +0 -1
- package/dist/src/runners/task/taskRunner.core.js.map +0 -1
- package/dist/src/scaffolders/framework.scaffolder.d.ts.map +0 -1
- package/dist/src/scaffolders/framework.scaffolder.js.map +0 -1
- package/dist/src/scaffolders/index.d.ts.map +0 -1
- package/dist/src/scaffolders/index.js.map +0 -1
- package/dist/src/scaffolders/scaffolder.helper.d.ts.map +0 -1
- package/dist/src/scaffolders/scaffolder.helper.js.map +0 -1
- package/dist/src/templates/microservice/index.d.ts.map +0 -1
- package/dist/src/templates/microservice/index.js.map +0 -1
- package/dist/src/templates/microservice/microservice.template.d.ts.map +0 -1
- package/dist/src/templates/microservice/microservice.template.js.map +0 -1
- package/dist/src/templates/modular-monolith/index.d.ts.map +0 -1
- package/dist/src/templates/modular-monolith/index.js.map +0 -1
- package/dist/src/templates/modular-monolith/modularMonolith.template.d.ts.map +0 -1
- package/dist/src/templates/modular-monolith/modularMonolith.template.js.map +0 -1
- package/dist/src/templates/monolith/index.d.ts.map +0 -1
- package/dist/src/templates/monolith/index.js.map +0 -1
- package/dist/src/templates/monolith/monolith.template.d.ts.map +0 -1
- package/dist/src/templates/monolith/monolith.template.js.map +0 -1
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/types/projectConfiguration.type.d.ts.map +0 -1
- package/dist/src/types/projectConfiguration.type.js.map +0 -1
- package/dist/src/types/scaffold.type.d.ts.map +0 -1
- package/dist/src/types/scaffold.type.js.map +0 -1
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/utils.detect.d.ts.map +0 -1
- package/dist/src/utils/utils.detect.js.map +0 -1
- package/dist/src/utils/utils.exec.d.ts.map +0 -1
- package/dist/src/utils/utils.exec.js.map +0 -1
- package/dist/src/utils/utils.fileSystem.d.ts.map +0 -1
- package/dist/src/utils/utils.fileSystem.js.map +0 -1
- package/dist/src/utils/utils.name.d.ts.map +0 -1
- package/dist/src/utils/utils.name.js.map +0 -1
- package/dist/src/validators/compatibility/compatibilityValidator.core.d.ts.map +0 -1
- package/dist/src/validators/compatibility/compatibilityValidator.core.js.map +0 -1
- package/dist/src/validators/compatibility/index.d.ts.map +0 -1
- package/dist/src/validators/compatibility/index.js.map +0 -1
- package/dist/src/validators/environment/environmentValidator.core.d.ts.map +0 -1
- package/dist/src/validators/environment/environmentValidator.core.js.map +0 -1
- package/dist/src/validators/environment/index.d.ts.map +0 -1
- package/dist/src/validators/environment/index.js.map +0 -1
- package/dist/src/validators/index.d.ts.map +0 -1
- package/dist/src/validators/index.js.map +0 -1
- package/dist/src/validators/project/index.d.ts.map +0 -1
- package/dist/src/validators/project/index.js.map +0 -1
- package/dist/src/validators/project/projectValidator.core.d.ts.map +0 -1
- package/dist/src/validators/project/projectValidator.core.js.map +0 -1
|
@@ -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
|
|
@@ -1,8 +1,58 @@
|
|
|
1
|
+
import { CLIValidationError } from "../errors/index.js";
|
|
1
2
|
export function normalizeName(name) {
|
|
2
3
|
return name
|
|
3
4
|
.trim()
|
|
4
5
|
.toLowerCase()
|
|
5
6
|
.replace(/[^a-z0-9-]+/g, "-")
|
|
6
|
-
|
|
7
|
+
// Trim leading/trailing dashes without the quadratic `-+$` scan: the
|
|
8
|
+
// lookbehind pins each attempt to the start of a dash run.
|
|
9
|
+
.replace(/^-+/, "")
|
|
10
|
+
.replace(/(?<!-)-+$/, "");
|
|
11
|
+
}
|
|
12
|
+
/** Converts an arbitrary name to PascalCase (safe as a TS identifier). */
|
|
13
|
+
export function toPascalCase(name) {
|
|
14
|
+
return normalizeName(name)
|
|
15
|
+
.split("-")
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
18
|
+
.join("");
|
|
19
|
+
}
|
|
20
|
+
/** Converts an arbitrary name to camelCase (safe as a TS identifier). */
|
|
21
|
+
export function toCamelCase(name) {
|
|
22
|
+
const pascal = toPascalCase(name);
|
|
23
|
+
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Pattern for names that may be used verbatim as a path segment
|
|
27
|
+
* (`--service`, `--module`, manifest service entries).
|
|
28
|
+
*/
|
|
29
|
+
export const SAFE_PATH_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
|
|
30
|
+
/**
|
|
31
|
+
* Validates a name that a generator will normalize into file paths and
|
|
32
|
+
* identifiers.
|
|
33
|
+
*
|
|
34
|
+
* `normalizeName` strips everything outside `[a-z0-9-]`, so a name such as
|
|
35
|
+
* `"..."` or `"!!!"` collapses to the empty string and the generator writes
|
|
36
|
+
* `src//.event.ts` with an anonymous exported class. Reject it up front.
|
|
37
|
+
*/
|
|
38
|
+
export function assertGeneratableName(name, kind = "name") {
|
|
39
|
+
const normalized = normalizeName(name);
|
|
40
|
+
if (normalized === "") {
|
|
41
|
+
throw new CLIValidationError(`Invalid ${kind}: "${name}". It must contain at least one letter or digit.`);
|
|
42
|
+
}
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validates a value that is interpolated verbatim into a generated file path.
|
|
47
|
+
*
|
|
48
|
+
* Unlike {@link assertGeneratableName} this does not normalize: the value is
|
|
49
|
+
* used as-is, so `..` or a path separator here would let a generator write
|
|
50
|
+
* outside its base path.
|
|
51
|
+
*/
|
|
52
|
+
export function assertSafePathSegment(value, kind = "value") {
|
|
53
|
+
if (!SAFE_PATH_SEGMENT.test(value)) {
|
|
54
|
+
throw new CLIValidationError(`Invalid ${kind}: "${value}". Only alphanumeric characters, hyphens, and underscores are allowed.`);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
7
57
|
}
|
|
8
58
|
//# sourceMappingURL=utils.name.js.map
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zudojs-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Command-line interface for scaffolding, generating, and managing Zudojs framework projects.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"main": "./dist/index.js",
|
|
8
|
-
"module": "./dist/index.js",
|
|
9
|
-
"types": "./dist/index.d.ts",
|
|
7
|
+
"main": "./dist/src/index.js",
|
|
8
|
+
"module": "./dist/src/index.js",
|
|
9
|
+
"types": "./dist/src/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
13
|
-
"import": "./dist/index.js"
|
|
12
|
+
"types": "./dist/src/index.d.ts",
|
|
13
|
+
"import": "./dist/src/index.js"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"bin": {
|
|
@@ -18,28 +18,22 @@
|
|
|
18
18
|
},
|
|
19
19
|
"files": [
|
|
20
20
|
"dist",
|
|
21
|
+
"!dist/**/*.map",
|
|
22
|
+
"!dist/**/*.tsbuildinfo",
|
|
23
|
+
"!dist/.tsbuildinfo",
|
|
21
24
|
"src/scripts/postinstall.cjs"
|
|
22
25
|
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc -p tsconfig.json && mkdir -p dist/src/scripts && cp src/scripts/postinstall.cjs dist/src/scripts/postinstall.cjs",
|
|
25
|
-
"dev": "tsx src/bin/zudojs.ts",
|
|
26
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
27
|
-
"clean": "rm -rf dist",
|
|
28
|
-
"test": "vitest run",
|
|
29
|
-
"test:watch": "vitest",
|
|
30
|
-
"postinstall": "node src/scripts/postinstall.cjs"
|
|
31
|
-
},
|
|
32
26
|
"dependencies": {
|
|
33
27
|
"@clack/prompts": "^1.7.0",
|
|
34
|
-
"@zudojs/config": "
|
|
35
|
-
"@zudojs/core": "
|
|
36
|
-
"@zudojs/errors": "
|
|
37
|
-
"@zudojs/logger": "
|
|
28
|
+
"@zudojs/config": "1.0.0",
|
|
29
|
+
"@zudojs/core": "1.0.0",
|
|
30
|
+
"@zudojs/errors": "1.0.0",
|
|
31
|
+
"@zudojs/logger": "1.0.0"
|
|
38
32
|
},
|
|
39
33
|
"devDependencies": {
|
|
40
34
|
"@types/node": "^26.4.1",
|
|
41
35
|
"tsx": "^4.23.12",
|
|
42
|
-
"typescript": "
|
|
36
|
+
"typescript": "7.0.2",
|
|
43
37
|
"vitest": "^4.1.11"
|
|
44
38
|
},
|
|
45
39
|
"engines": {
|
|
@@ -56,8 +50,21 @@
|
|
|
56
50
|
"dev"
|
|
57
51
|
],
|
|
58
52
|
"homepage": "https://github.com/oyinlola-tech/zudo#readme",
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/oyinlola-tech/zudo/issues"
|
|
55
|
+
},
|
|
59
56
|
"repository": {
|
|
60
57
|
"type": "git",
|
|
61
|
-
"url": "https://github.com/oyinlola-tech/zudo"
|
|
58
|
+
"url": "https://github.com/oyinlola-tech/zudo",
|
|
59
|
+
"directory": "packages/cli"
|
|
60
|
+
},
|
|
61
|
+
"scripts": {
|
|
62
|
+
"build": "tsc -p tsconfig.json && mkdir -p dist/src/scripts && cp src/scripts/postinstall.cjs dist/src/scripts/postinstall.cjs",
|
|
63
|
+
"dev": "tsx src/bin/zudojs.ts",
|
|
64
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
65
|
+
"clean": "rm -rf dist",
|
|
66
|
+
"test": "vitest run",
|
|
67
|
+
"test:watch": "vitest",
|
|
68
|
+
"postinstall": "node src/scripts/postinstall.cjs"
|
|
62
69
|
}
|
|
63
|
-
}
|
|
70
|
+
}
|
|
@@ -25,7 +25,7 @@ async function checkLatestVersion(packageName) {
|
|
|
25
25
|
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
26
26
|
|
|
27
27
|
const response = await fetch(
|
|
28
|
-
`https://registry.npmjs.org
|
|
28
|
+
`https://registry.npmjs.org/${packageName}/latest`,
|
|
29
29
|
{ signal: controller.signal },
|
|
30
30
|
);
|
|
31
31
|
clearTimeout(timeout);
|
|
@@ -41,15 +41,36 @@ async function checkLatestVersion(packageName) {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Whether the update check should be skipped.
|
|
46
|
+
*
|
|
47
|
+
* The check reaches out to registry.npmjs.org on every install. That is
|
|
48
|
+
* unwanted in CI, in Docker builds and on air-gapped machines, and there was
|
|
49
|
+
* previously no way to turn it off.
|
|
50
|
+
*/
|
|
51
|
+
function shouldSkip() {
|
|
52
|
+
if (process.env.ZUDOJS_NO_UPDATE_CHECK) return true;
|
|
53
|
+
if (process.env.CI) return true;
|
|
54
|
+
if (process.env.NODE_ENV === "test") return true;
|
|
55
|
+
if (process.env.npm_config_offline === "true") return true;
|
|
56
|
+
// Only a global install is the one the user upgrades with `npm i -g`.
|
|
57
|
+
if (process.env.npm_config_global !== "true") return true;
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
async function main() {
|
|
62
|
+
if (shouldSkip()) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
45
66
|
const installed = getInstalledVersion();
|
|
46
|
-
const latest = await checkLatestVersion("
|
|
67
|
+
const latest = await checkLatestVersion("zudojs-cli");
|
|
47
68
|
|
|
48
69
|
if (latest && latest !== installed) {
|
|
49
70
|
console.log(
|
|
50
71
|
`\n zudojs ${installed} is installed, but version ${latest} is available.`,
|
|
51
72
|
);
|
|
52
|
-
console.log(` Run: npm install -g
|
|
73
|
+
console.log(` Run: npm install -g zudojs-cli@latest\n`);
|
|
53
74
|
}
|
|
54
75
|
}
|
|
55
76
|
|