@xeno-js/cli 0.1.2 → 0.1.4

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.
Files changed (88) hide show
  1. package/LICENSE +18 -12
  2. package/README.md +461 -236
  3. package/dist/index.js +1018 -688
  4. package/dist/index.js.map +1 -1
  5. package/package.json +91 -66
  6. package/.github/.copilot-instruction.md +0 -73
  7. package/.github/agents/git-operator.agent.md +0 -86
  8. package/.github/agents/unit-tester.agent.md +0 -68
  9. package/.husky/commit-msg +0 -1
  10. package/.husky/pre-commit +0 -1
  11. package/.husky/pre-push +0 -1
  12. package/.prettierignore +0 -7
  13. package/.prettierrc.json +0 -37
  14. package/commitlint.config.cjs +0 -39
  15. package/eslint.config.mjs +0 -306
  16. package/lint-staged.config.mjs +0 -5
  17. package/logo/logo.png +0 -0
  18. package/src/domain/contracts/icommand-cli.contracts.ts +0 -13
  19. package/src/domain/contracts/icommand-runner.contracts.ts +0 -3
  20. package/src/domain/contracts/idispatch.contracts.ts +0 -3
  21. package/src/domain/contracts/ifile-service.contracts.ts +0 -3
  22. package/src/domain/contracts/igenerator.contracts.ts +0 -5
  23. package/src/domain/contracts/index.ts +0 -6
  24. package/src/domain/contracts/iscaffold-strategy.contracts.ts +0 -7
  25. package/src/domain/index.ts +0 -1
  26. package/src/index.ts +0 -30
  27. package/src/infrastructure/bootstrap/bootstrapper.ts +0 -30
  28. package/src/infrastructure/bootstrap/index.ts +0 -1
  29. package/src/infrastructure/builder/builder.test.ts +0 -36
  30. package/src/infrastructure/builder/builder.ts +0 -15
  31. package/src/infrastructure/builder/index.ts +0 -1
  32. package/src/infrastructure/command_launcher/command.utils.ts +0 -31
  33. package/src/infrastructure/command_launcher/index.ts +0 -0
  34. package/src/infrastructure/commands/command-runner.service.ts +0 -36
  35. package/src/infrastructure/commands/generate.command.ts +0 -55
  36. package/src/infrastructure/commands/help.command.ts +0 -63
  37. package/src/infrastructure/commands/index.ts +0 -4
  38. package/src/infrastructure/commands/new-project.command.ts +0 -47
  39. package/src/infrastructure/dispatcher/dispatcher.ts +0 -45
  40. package/src/infrastructure/dispatcher/index.ts +0 -1
  41. package/src/infrastructure/file/file.service.ts +0 -14
  42. package/src/infrastructure/file/index.ts +0 -1
  43. package/src/infrastructure/generators/core/bootstrap.generator.ts +0 -118
  44. package/src/infrastructure/generators/core/command/cqrs.generator.ts +0 -63
  45. package/src/infrastructure/generators/core/command/generate-command.generator.ts +0 -191
  46. package/src/infrastructure/generators/core/command/generate-query.generator.ts +0 -150
  47. package/src/infrastructure/generators/core/drizzle-sql-lite.generator.ts +0 -76
  48. package/src/infrastructure/generators/core/drizzle.generator.ts +0 -86
  49. package/src/infrastructure/generators/core/env.generator.ts +0 -69
  50. package/src/infrastructure/generators/core/index.ts +0 -9
  51. package/src/infrastructure/generators/core/main.generator.ts +0 -41
  52. package/src/infrastructure/generators/core/packagejson.generator.ts +0 -70
  53. package/src/infrastructure/generators/core/readme.generator.ts +0 -427
  54. package/src/infrastructure/generators/core/registry.generator.ts +0 -40
  55. package/src/infrastructure/generators/core/tsconfig.generator.ts +0 -39
  56. package/src/infrastructure/generators/gitignore.generator.ts +0 -60
  57. package/src/infrastructure/generators/vue/app-vue.generator.ts +0 -21
  58. package/src/infrastructure/generators/vue/bootstrap-ts.generator.ts +0 -60
  59. package/src/infrastructure/generators/vue/command_query/cqrs.generator.ts +0 -36
  60. package/src/infrastructure/generators/vue/command_query/generate-command-vue.generator.ts +0 -153
  61. package/src/infrastructure/generators/vue/command_query/generate-query-vue.generator.ts +0 -161
  62. package/src/infrastructure/generators/vue/env.generator.ts +0 -39
  63. package/src/infrastructure/generators/vue/index-html.generator.ts +0 -24
  64. package/src/infrastructure/generators/vue/index.ts +0 -12
  65. package/src/infrastructure/generators/vue/main.generator.ts +0 -41
  66. package/src/infrastructure/generators/vue/packagejson.generator.ts +0 -50
  67. package/src/infrastructure/generators/vue/readme.generator.ts +0 -389
  68. package/src/infrastructure/generators/vue/registry-ts.generator.ts +0 -26
  69. package/src/infrastructure/generators/vue/router.generator.ts +0 -35
  70. package/src/infrastructure/generators/vue/tailwind.generator.ts +0 -17
  71. package/src/infrastructure/generators/vue/tsconfig.generator.ts +0 -38
  72. package/src/infrastructure/generators/vue/use-app.generator.ts +0 -38
  73. package/src/infrastructure/generators/vue/vite-config.generator.ts +0 -35
  74. package/src/infrastructure/index.ts +0 -5
  75. package/src/infrastructure/strategies/core-scaffold.strategy.ts +0 -100
  76. package/src/infrastructure/strategies/index.ts +0 -2
  77. package/src/infrastructure/strategies/vue-scaffold.strategy.ts +0 -79
  78. package/src/shared/constants/command.constants.ts +0 -18
  79. package/src/shared/constants/core.constants.ts +0 -7
  80. package/src/shared/constants/index.ts +0 -2
  81. package/src/shared/index.ts +0 -3
  82. package/src/shared/types/common.types.ts +0 -68
  83. package/src/shared/types/index.ts +0 -1
  84. package/src/shared/utils/guards.utils.ts +0 -334
  85. package/src/shared/utils/index.ts +0 -2
  86. package/src/shared/utils/string.utils.ts +0 -60
  87. package/tsconfig.json +0 -15
  88. package/tsup.config.ts +0 -13
package/README.md CHANGED
@@ -1,236 +1,461 @@
1
- <div align="center">
2
- <img src="logo/logo.png" alt="Xeno CLI Logo" width="140" />
3
-
4
- <h1>Xeno CLI</h1>
5
-
6
- <p><em>Enterprise-grade scaffolding and CLI toolkit for Xeno projects</em></p>
7
-
8
- <p>
9
- <a href="https://github.com/xeno-js/xeno-js">
10
- <img src="https://img.shields.io/badge/Powered%20by-Xeno-blueviolet?style=flat-square" alt="Powered by Xeno" />
11
- </a>
12
- <a href="https://github.com/xeno-js/xeno-cli/blob/main/LICENSE">
13
- <img src="https://img.shields.io/npm/l/@xeno-js/cli?style=flat-square" alt="License: ISC" />
14
- </a>
15
- <a href="https://www.npmjs.com/package/@xeno-js/cli">
16
- <img src="https://img.shields.io/npm/v/@xeno-js/cli?style=flat-square" alt="NPM Version" />
17
- </a>
18
- <a href="https://buymeacoffee.com/xenojs">
19
- <img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Support-FFdd00?style=flat-square&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me A Coffee" />
20
- </a>
21
- </p>
22
- </div>
23
-
24
- ---
25
-
26
- ## What is Xeno CLI?
27
-
28
- **Xeno CLI** (`@xeno-js/cli`) is the official command-line interface designed to
29
- initialize, configure, and manage projects based on the Xeno framework. It
30
- automates infrastructural scaffolding to enforce **Domain-Driven Design (DDD)**
31
- and **Command Query Responsibility Segregation (CQRS)** patterns seamlessly,
32
- eliminating boilerplate for both Node.js backend environments (`@xeno-js/core`)
33
- and frontend applications (`@xeno-js/vue`).
34
-
35
- ---
36
-
37
- ## 💡 Why Choose Xeno CLI?
38
-
39
- - **Interactive Configuration**: Launch your project creation through guided
40
- prompts that automatically install essential dependencies tailored to your
41
- choices (e.g., Zod, Supabase, Drizzle ORM, Pino, Sentry, Pinia, and Tailwind
42
- CSS).
43
- - **CQRS Architectural Scaffolding**: With a single command, dynamically
44
- generate Controllers, Handlers, Commands/Queries, dedicated modules, Vue
45
- composables, and interconnected Zod or DB schemas.
46
- - **Target Agnosticism**: Natively handles project structures for both Backend
47
- (pure TypeScript) and Frontend (Vue.js), autonomously setting up key files
48
- like `tsconfig.json`, `vite.config.ts`, `.env`, and infrastructure
49
- bootstrappers.
50
- - **CI/CD & Git Ready**: Instantly initializes Git repositories and triggers NPM
51
- installations, providing a "ready-to-code" ecosystem from the very first
52
- second.
53
-
54
- ---
55
-
56
- ## 📖 Documentation & Getting Started
57
-
58
- The CLI interacts directly with Xeno's explicit Inversion of Control (IoC)
59
- container. To explore the architecture and programmatic configurations, read the
60
- full technical manuals:
61
-
62
- - **[Framework Documentation Repository](https://www.xeno-js.it/cli/overview)**
63
-
64
- ---
65
-
66
- ## 📦 Installation
67
-
68
- Install the CLI globally via npm or run it on-demand using `npx`:
69
-
70
- ```bash
71
- # Global installation
72
- npm install -g @xeno-js/cli
73
-
74
- # On-demand execution
75
- npx xeno-js new my-xeno-app
76
-
77
- ```
78
-
79
- ---
80
-
81
- ## 🚀 Usage Guide & Commands
82
-
83
- ### 1. Create a New Project
84
-
85
- Bootstrap the complete architecture:
86
-
87
- ```bash
88
- xeno-js new <name> [--vue | --core]
89
-
90
- ```
91
-
92
- - `<name>`: The name of your target project directory.
93
-
94
- - `[--vue | --core]`: Select the target environment. If omitted, it defaults to
95
- `--core`.
96
-
97
- - `--core`: Initializes a Backend project (Node.js/TS).
98
-
99
- - `--vue`: Initializes a Frontend project (Vue.js).
100
-
101
- ### 2. Generate CQRS Components
102
-
103
- Dynamically generate folders and infrastructural files for read or write
104
- operations:
105
-
106
- ```bash
107
- xeno-js generate <type> <Name> [--vue | --core] [--output <path>]
108
-
109
- # Recommended alias:
110
- xeno-js g <type> <Name> [-o <path>]
111
-
112
- ```
113
-
114
- - `<type>`: Component type to generate (`command` or `query`).
115
-
116
- - `<Name>`: The name of the domain or entity in PascalCase or camelCase (e.g.,
117
- `UserCreate`).
118
-
119
- - `[--vue | --core]`: Target context. Defaults to `--core`.
120
-
121
- - `--core`: Generates Controller, Handler, Command/Query, Module, Zod schemas,
122
- and DB schema.
123
-
124
- - `--vue`: Generates frontend-specific files like abstract Commands/Queries,
125
- Models, and Presentation Composables.
126
-
127
- - `[--output | -o | --o]`: Custom destination path inside the `src/` directory.
128
- Defaults to `src/<name-in-lowercase>`.
129
-
130
- ### 3. Help & Guide
131
-
132
- Display the quick command guide and supported aliases directly in your terminal:
133
-
134
- ```bash
135
- xeno-js --help
136
-
137
- # Alias:
138
- xeno-js -h
139
- xeno-js --h
140
- ```
141
-
142
- ---
143
-
144
- ## 🤝 For Contributors
145
-
146
- We welcome contributions to Xeno CLI! To maintain the highest code quality and
147
- stability for the generated scaffolding, **direct pushes to the `main` and
148
- `develop` branches are strictly prohibited**. Please follow the same Git Flow as
149
- the core framework:
150
-
151
- 1. **Branch off from `develop**`:
152
-
153
- ```bash
154
- git checkout develop
155
- git pull origin develop
156
- git checkout -b feat/add-new-generator
157
-
158
- ```
159
-
160
- 2. **Local Development**: Ensure your scaffolding changes do not break tests or
161
- builds:
162
-
163
- ```bash
164
- npm run check
165
-
166
- ```
167
-
168
- 3. **Commit Standards**: We enforce
169
- [Conventional Commits](https://www.conventionalcommits.org/?utm_source=gemini).
170
- Husky will automatically verify your commit message format:
171
-
172
- ```bash
173
- feat(cli): add interactive prompt for Drizzle setup
174
- fix(generator): resolve output path bug in Vue scaffold
175
-
176
- ```
177
-
178
- 4. **Submit a Pull Request (PR)**: Push your branch to GitHub and open a Pull
179
- Request targeting the **`develop`** branch.
180
-
181
- ### Maintenance Scripts
182
-
183
- | Command | Description |
184
- | ----------------------------- | ------------------------------------------------------------------- |
185
- | `npm run build` | Compiles the TypeScript CLI source code into the `dist/` directory. |
186
- | `npm run dev` | Runs the CLI in development mode using `tsx`. |
187
- | `npm run typecheck` | Checks types without emitting files (`tsc`). |
188
- | `npm run lint` | Runs ESLint to ensure no blocking formatting defects exist. |
189
- | `npm run format` | Automatically formats codebase files using Prettier. |
190
- | `npm run test` | Executes the Vitest test suite. |
191
- | `npm run test:coverage` | Runs tests and generates a detailed coverage |
192
- | report using the v8 provider. |
193
-
194
- ---
195
-
196
- ## 🌱 Support & Appreciation
197
-
198
- Designing, integrating, and maintaining a CLI toolkit like Xeno requires massive
199
- engineering effort. If the decoupled patterns generated by this CLI save you
200
- countless hours of initial setup, please consider supporting its open-source
201
- development.
202
-
203
- **[Read our support guidelines and find out how to help](https://www.xeno-js.it/support-us)**
204
-
205
- Thank you for being part of this decoupled open-source journey!
206
-
207
- <amp-bounce>
208
- </amp-bounce>
209
- <a href="https://www.buymeacoffee.com/xenojs" target="_blank">
210
- <img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="42" style="height: 42px !important;" />
211
- </a>
212
-
213
- ---
214
-
215
- ## 🛡️ Powered by Xeno
216
-
217
- If you scaffolded your architecture using this CLI, let the world know by adding
218
- our badge to your repository:
219
-
220
- ```html
221
- <a
222
- href="[https://github.com/xeno-js/xeno-js](https://github.com/xeno-js/xeno-js)"
223
- target="_blank"
224
- >
225
- <img
226
- src="[https://img.shields.io/badge/Powered%20by-Xeno-black?style=flat-square](https://img.shields.io/badge/Powered%20by-Xeno-black?style=flat-square)"
227
- alt="Powered by Xeno"
228
- height="20"
229
- />
230
- </a>
231
- ```
232
-
233
- ## 📄 License
234
-
235
- Copyright (c) 2026 Xeno. Licensed under the
236
- [ISC License](https://www.google.com/search?q=LICENSE&utm_source=gemini).
1
+ <div align="center">
2
+ <img src="logo/logo.png" alt="Xeno CLI Logo" width="140" />
3
+
4
+ <h1>Xeno CLI</h1>
5
+
6
+ <p><strong>Start with the architecture. Not the scaffolding.</strong></p>
7
+
8
+ <p>
9
+ Scaffold and generate TypeScript applications around explicit
10
+ application boundaries, CQRS, dependency injection, and Xeno's
11
+ application architecture.
12
+ </p>
13
+
14
+ <p>
15
+ <a href="https://www.npmjs.com/package/@xeno-js/cli">
16
+ <img src="https://img.shields.io/npm/v/@xeno-js/cli?style=flat-square" alt="npm version" />
17
+ </a>
18
+ <a href="https://github.com/xeno-js/xeno-cli">
19
+ <img src="https://img.shields.io/github/stars/xeno-js/xeno-cli?style=flat-square" alt="GitHub stars" />
20
+ </a>
21
+ <a href="https://github.com/xeno-js/xeno-cli/blob/develop/LICENSE">
22
+ <img src="https://img.shields.io/npm/l/@xeno-js/cli?style=flat-square" alt="License: MIT" />
23
+ </a>
24
+ <a href="https://buymeacoffee.com/xenojs">
25
+ <img src="https://img.shields.io/badge/Buy%20Me%20A%20Coffee-Support-FFdd00?style=flat-square&logo=buy-me-a-coffee&logoColor=black" alt="Buy Me A Coffee" />
26
+ </a>
27
+ </p>
28
+ </div>
29
+
30
+ ---
31
+
32
+ ## What is Xeno CLI?
33
+
34
+ **Xeno CLI** (`@xeno-js/cli`) is the command-line entry point for creating and
35
+ generating Xeno projects.
36
+
37
+ It helps you start with an explicit application structure instead of rebuilding
38
+ the same architecture by hand.
39
+
40
+ Use it to:
41
+
42
+ - create a new Xeno backend project;
43
+ - create a Xeno Vue project;
44
+ - generate commands and queries;
45
+ - choose the infrastructure modules your project needs;
46
+ - generate the initial configuration and composition files.
47
+
48
+ The goal is simple:
49
+
50
+ > **Start coding the application, not the scaffolding.**
51
+
52
+ ---
53
+
54
+ # Start in seconds
55
+
56
+ Create a Xeno backend project:
57
+
58
+ ```bash
59
+ npx @xeno-js/cli new my-app --core
60
+ ```
61
+
62
+ Create a Vue project:
63
+
64
+ ```bash
65
+ npx @xeno-js/cli new my-app --vue
66
+ ```
67
+
68
+ The CLI guides you through the project options and generates the initial
69
+ structure for you.
70
+
71
+ ---
72
+
73
+ # Generate a use case
74
+
75
+ Once your project exists, generate application components without manually
76
+ rebuilding the same structure.
77
+
78
+ ```bash
79
+ npx @xeno-js/cli g command CreateUser --core
80
+ ```
81
+
82
+ or:
83
+
84
+ ```bash
85
+ npx @xeno-js/cli g query FindUser --core
86
+ ```
87
+
88
+ For Vue:
89
+
90
+ ```bash
91
+ npx @xeno-js/cli g command CreateUser --vue
92
+ ```
93
+
94
+ The `g` alias is available for faster iteration:
95
+
96
+ ```bash
97
+ xeno-js g command CreateUser --core
98
+ ```
99
+
100
+ ---
101
+
102
+ # What the CLI creates
103
+
104
+ Xeno CLI is built around the architecture used by the Xeno ecosystem.
105
+
106
+ A new project starts from explicit building blocks such as:
107
+
108
+ ```text
109
+ Application
110
+ ├── composition root
111
+ ├── configuration
112
+ ├── registry
113
+ ├── CQRS
114
+ ├── domain contracts
115
+ └── infrastructure boundaries
116
+ ```
117
+
118
+ The exact generated files depend on the project type and the modules you select.
119
+
120
+ The important part is the boundary:
121
+
122
+ ```text
123
+ Transport
124
+ ↓
125
+ Application
126
+ ↓
127
+ Domain
128
+ ↓
129
+ Infrastructure
130
+ ```
131
+
132
+ The CLI gives you the starting structure.
133
+
134
+ Your application defines the business behavior.
135
+
136
+ ---
137
+
138
+ # Backend projects
139
+
140
+ The Core scaffold can configure modules for areas such as:
141
+
142
+ - database access;
143
+ - Redis;
144
+ - authentication;
145
+ - HTTP clients;
146
+ - resilience;
147
+ - logging;
148
+ - validation;
149
+ - application pipelines.
150
+
151
+ The generated project uses `@xeno-js/core` as its application runtime.
152
+
153
+ Example:
154
+
155
+ ```text
156
+ my-app/
157
+ ├── src/
158
+ │ ├── bootstrap.ts
159
+ │ ├── main.ts
160
+ │ └── registry.ts
161
+ ├── package.json
162
+ ├── tsconfig.json
163
+ └── .env
164
+ ```
165
+
166
+ The purpose is not to hide the architecture.
167
+
168
+ The purpose is to give you a clear place to continue building it.
169
+
170
+ ---
171
+
172
+ # Vue projects
173
+
174
+ Xeno CLI can also scaffold Vue applications around `@xeno-js/vue`.
175
+
176
+ ```bash
177
+ npx @xeno-js/cli new my-app --vue
178
+ ```
179
+
180
+ The generated project can include the pieces you choose for your application,
181
+ such as:
182
+
183
+ - Xeno frontend bootstrap;
184
+ - Vue configuration;
185
+ - application registry;
186
+ - routing;
187
+ - Pinia;
188
+ - authentication;
189
+ - HTTP data sources;
190
+ - validation;
191
+ - logging;
192
+ - styling.
193
+
194
+ The UI remains the presentation layer.
195
+
196
+ Application behavior remains outside the component whenever the architecture
197
+ requires it.
198
+
199
+ ---
200
+
201
+ # Why use the CLI?
202
+
203
+ Starting an application usually creates the same decisions again:
204
+
205
+ Where should the application bootstrap live?
206
+
207
+ Where should dependencies be registered?
208
+
209
+ Where do commands and queries belong?
210
+
211
+ How should infrastructure connect to the application?
212
+
213
+ How should the project evolve without putting everything into controllers,
214
+ routes, or components?
215
+
216
+ Xeno CLI turns those decisions into a repeatable starting structure.
217
+
218
+ > **You still design the application. You do not have to rebuild its
219
+ > foundation** **every time.**
220
+
221
+ ---
222
+
223
+ # CLI and Xeno
224
+
225
+ The CLI is one part of the Xeno ecosystem.
226
+
227
+ ```text
228
+ @xeno-js/shared
229
+ defines domain primitives
230
+ and application contracts
231
+
232
+ ↓
233
+
234
+ @xeno-js/core
235
+ executes the application architecture
236
+
237
+ ↓
238
+
239
+ @xeno-js/vue
240
+ brings the model to the browser
241
+
242
+ ↓
243
+
244
+ @xeno-js/cli
245
+ creates the starting structure
246
+ ```
247
+
248
+ A useful mental model is:
249
+
250
+ > **Shared defines the language.** **Core executes the architecture.** **Vue
251
+ > hosts the architecture in the browser.** **CLI gets you started.**
252
+
253
+ ---
254
+
255
+ # Use it on new projects
256
+
257
+ The CLI is designed to make the first project setup explicit and repeatable.
258
+
259
+ ```bash
260
+ npx @xeno-js/cli new my-app --core
261
+ ```
262
+
263
+ Then:
264
+
265
+ ```bash
266
+ cd my-app
267
+ npm install
268
+ ```
269
+
270
+ The generated application can then be extended with the components and
271
+ infrastructure your project actually needs.
272
+
273
+ ---
274
+
275
+ # Generate inside an existing project
276
+
277
+ The generator can also be used after the project already exists.
278
+
279
+ For example:
280
+
281
+ ```bash
282
+ npx @xeno-js/cli g command CreateOrder --core
283
+ ```
284
+
285
+ This is useful when a project already has its application structure and you want
286
+ to add another command or query without rebuilding the surrounding files
287
+ manually.
288
+
289
+ ---
290
+
291
+ # Commands
292
+
293
+ ## Create a project
294
+
295
+ ```bash
296
+ xeno-js new <name> [--core | --vue]
297
+ ```
298
+
299
+ ### Options
300
+
301
+ - `--core` — create a backend project using `@xeno-js/core`
302
+ - `--vue` — create a frontend project using `@xeno-js/vue`
303
+
304
+ ---
305
+
306
+ ## Generate a command or query
307
+
308
+ ```bash
309
+ xeno-js generate <command | query> <Name> [--core | --vue]
310
+ ```
311
+
312
+ Alias:
313
+
314
+ ```bash
315
+ xeno-js g <command | query> <Name> [--core | --vue]
316
+ ```
317
+
318
+ Optional output path:
319
+
320
+ ```bash
321
+ xeno-js g command CreateUser --core --output src/features/users
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Help
327
+
328
+ ```bash
329
+ xeno-js --help
330
+ ```
331
+
332
+ Aliases:
333
+
334
+ ```bash
335
+ xeno-js -h
336
+ xeno-js --h
337
+ ```
338
+
339
+ ---
340
+
341
+ # Installation
342
+
343
+ You can run the CLI on demand:
344
+
345
+ ```bash
346
+ npx @xeno-js/cli --help
347
+ ```
348
+
349
+ Or install it globally:
350
+
351
+ ```bash
352
+ npm install -g @xeno-js/cli
353
+ ```
354
+
355
+ Then:
356
+
357
+ ```bash
358
+ xeno-js --help
359
+ ```
360
+
361
+ ---
362
+
363
+ # Node.js
364
+
365
+ Xeno CLI currently targets:
366
+
367
+ ```text
368
+ Node.js 20+
369
+ ```
370
+
371
+ ---
372
+
373
+ # Relationship with the Xeno architecture
374
+
375
+ Xeno CLI does not replace your transport framework.
376
+
377
+ It does not try to own HTTP routing.
378
+
379
+ It does not define your business rules.
380
+
381
+ It gives you a consistent starting point for the application layer that sits
382
+ between transport and infrastructure.
383
+
384
+ ```text
385
+ HTTP / CLI / Worker
386
+ ↓
387
+ Application
388
+ ↓
389
+ Domain
390
+ ↓
391
+ Infrastructure
392
+ ```
393
+
394
+ That boundary is what the rest of Xeno is designed to execute.
395
+
396
+ ---
397
+
398
+ # Read the architecture
399
+
400
+ The CLI is easier to understand when you see the architecture it generates.
401
+
402
+ Start with:
403
+
404
+ - Xeno Core
405
+ - Xeno Shared
406
+ - Xeno Vue
407
+ - Xeno architecture documentation
408
+
409
+ Documentation:
410
+
411
+ https://www.xeno-js.it/docs/introduction
412
+
413
+ Core:
414
+
415
+ https://github.com/xeno-js/xeno-js
416
+
417
+ Shared:
418
+
419
+ https://github.com/xeno-js/xeno-shared
420
+
421
+ Vue:
422
+
423
+ https://github.com/xeno-js/xeno-fe
424
+
425
+ ---
426
+
427
+ # Contributing
428
+
429
+ Contributions are welcome.
430
+
431
+ Development happens from feature branches targeting `develop`.
432
+
433
+ ```bash
434
+ git checkout develop
435
+ git pull origin develop
436
+ git checkout -b feat/your-feature
437
+
438
+ npm install
439
+ npm run check
440
+ ```
441
+
442
+ Before opening a pull request:
443
+
444
+ ```bash
445
+ npm run check
446
+ ```
447
+
448
+ We use Conventional Commits:
449
+
450
+ ```text
451
+ feat(cli): add generator
452
+ fix(generator): correct scaffold output
453
+ refactor(dispatcher): simplify command dispatch
454
+ docs(readme): improve getting started
455
+ ```
456
+
457
+ ---
458
+
459
+ # License
460
+
461
+ MIT License. See `LICENSE`.