nexu-app 2.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/README.md +149 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1192 -0
- package/package.json +43 -0
- package/templates/default/.changeset/config.json +11 -0
- package/templates/default/.eslintignore +16 -0
- package/templates/default/.eslintrc.js +67 -0
- package/templates/default/.github/actions/build/action.yml +35 -0
- package/templates/default/.github/actions/quality/action.yml +53 -0
- package/templates/default/.github/dependabot.yml +51 -0
- package/templates/default/.github/workflows/deploy-dev.yml +83 -0
- package/templates/default/.github/workflows/deploy-prod.yml +83 -0
- package/templates/default/.github/workflows/deploy-rec.yml +83 -0
- package/templates/default/.husky/commit-msg +1 -0
- package/templates/default/.husky/pre-commit +1 -0
- package/templates/default/.nexu-version +1 -0
- package/templates/default/.prettierignore +7 -0
- package/templates/default/.prettierrc +19 -0
- package/templates/default/.vscode/extensions.json +14 -0
- package/templates/default/.vscode/settings.json +36 -0
- package/templates/default/apps/gitkeep +0 -0
- package/templates/default/commitlint.config.js +26 -0
- package/templates/default/docker/docker-compose.dev.yml +49 -0
- package/templates/default/docker/docker-compose.prod.yml +64 -0
- package/templates/default/docker/docker-compose.yml +6 -0
- package/templates/default/docs/architecture.md +452 -0
- package/templates/default/docs/cli.md +330 -0
- package/templates/default/docs/contributing.md +462 -0
- package/templates/default/docs/scripts.md +460 -0
- package/templates/default/gitignore +44 -0
- package/templates/default/lintstagedrc.cjs +4 -0
- package/templates/default/package.json +51 -0
- package/templates/default/packages/auth/package.json +61 -0
- package/templates/default/packages/auth/src/components/ProtectedRoute.tsx +75 -0
- package/templates/default/packages/auth/src/components/SignInForm.tsx +153 -0
- package/templates/default/packages/auth/src/components/SignUpForm.tsx +179 -0
- package/templates/default/packages/auth/src/components/SocialButtons.tsx +147 -0
- package/templates/default/packages/auth/src/components/index.ts +4 -0
- package/templates/default/packages/auth/src/hooks/index.ts +4 -0
- package/templates/default/packages/auth/src/hooks/useAuth.ts +51 -0
- package/templates/default/packages/auth/src/hooks/useRequireAuth.ts +54 -0
- package/templates/default/packages/auth/src/hooks/useSession.ts +48 -0
- package/templates/default/packages/auth/src/hooks/useUser.ts +48 -0
- package/templates/default/packages/auth/src/index.ts +45 -0
- package/templates/default/packages/auth/src/next/index.ts +18 -0
- package/templates/default/packages/auth/src/next/middleware.ts +183 -0
- package/templates/default/packages/auth/src/next/server.ts +219 -0
- package/templates/default/packages/auth/src/providers/AuthContext.tsx +435 -0
- package/templates/default/packages/auth/src/providers/index.ts +1 -0
- package/templates/default/packages/auth/src/types/index.ts +284 -0
- package/templates/default/packages/auth/src/utils/api.ts +228 -0
- package/templates/default/packages/auth/src/utils/index.ts +3 -0
- package/templates/default/packages/auth/src/utils/oauth.ts +230 -0
- package/templates/default/packages/auth/src/utils/token.ts +204 -0
- package/templates/default/packages/auth/tsconfig.json +14 -0
- package/templates/default/packages/auth/tsup.config.ts +18 -0
- package/templates/default/packages/cache/package.json +26 -0
- package/templates/default/packages/cache/src/index.ts +137 -0
- package/templates/default/packages/cache/tsconfig.json +9 -0
- package/templates/default/packages/cache/tsup.config.ts +9 -0
- package/templates/default/packages/config/eslint/index.js +20 -0
- package/templates/default/packages/config/package.json +9 -0
- package/templates/default/packages/config/typescript/base.json +26 -0
- package/templates/default/packages/constants/package.json +26 -0
- package/templates/default/packages/constants/src/index.ts +121 -0
- package/templates/default/packages/constants/tsconfig.json +9 -0
- package/templates/default/packages/constants/tsup.config.ts +9 -0
- package/templates/default/packages/logger/package.json +27 -0
- package/templates/default/packages/logger/src/index.ts +197 -0
- package/templates/default/packages/logger/tsconfig.json +11 -0
- package/templates/default/packages/logger/tsup.config.ts +9 -0
- package/templates/default/packages/result/package.json +26 -0
- package/templates/default/packages/result/src/index.ts +142 -0
- package/templates/default/packages/result/tsconfig.json +9 -0
- package/templates/default/packages/result/tsup.config.ts +9 -0
- package/templates/default/packages/types/package.json +26 -0
- package/templates/default/packages/types/src/index.ts +78 -0
- package/templates/default/packages/types/tsconfig.json +9 -0
- package/templates/default/packages/types/tsup.config.ts +10 -0
- package/templates/default/packages/ui/package.json +38 -0
- package/templates/default/packages/ui/src/components/Button.tsx +58 -0
- package/templates/default/packages/ui/src/components/Card.tsx +85 -0
- package/templates/default/packages/ui/src/components/Input.tsx +45 -0
- package/templates/default/packages/ui/src/index.ts +15 -0
- package/templates/default/packages/ui/tsconfig.json +11 -0
- package/templates/default/packages/ui/tsup.config.ts +11 -0
- package/templates/default/packages/utils/package.json +30 -0
- package/templates/default/packages/utils/src/index.test.ts +130 -0
- package/templates/default/packages/utils/src/index.ts +154 -0
- package/templates/default/packages/utils/tsconfig.json +10 -0
- package/templates/default/packages/utils/tsup.config.ts +10 -0
- package/templates/default/pnpm-workspace.yaml +3 -0
- package/templates/default/scripts/audit.mjs +700 -0
- package/templates/default/scripts/deploy.mjs +40 -0
- package/templates/default/scripts/generate-app.mjs +808 -0
- package/templates/default/scripts/lib/package-manager.mjs +186 -0
- package/templates/default/scripts/setup.mjs +102 -0
- package/templates/default/services/.env.example +16 -0
- package/templates/default/services/docker-compose.yml +207 -0
- package/templates/default/services/grafana/provisioning/dashboards/dashboards.yml +11 -0
- package/templates/default/services/grafana/provisioning/datasources/datasources.yml +9 -0
- package/templates/default/services/postgres/init/gitkeep +2 -0
- package/templates/default/services/prometheus/prometheus.yml +13 -0
- package/templates/default/tsconfig.json +27 -0
- package/templates/default/turbo.json +40 -0
- package/templates/default/vitest.config.ts +15 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# CLI nexu-app
|
|
2
|
+
|
|
3
|
+
`nexu-app` est un outil en ligne de commande pour créer et gérer des projets monorepo Nexu.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Créer un nouveau projet (installation automatique via npx)
|
|
9
|
+
npx nexu-app my-project
|
|
10
|
+
|
|
11
|
+
# Ou via npm create
|
|
12
|
+
npx nexu-app my-project
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Commandes
|
|
16
|
+
|
|
17
|
+
### `nexu-app [project-name]` / `nexu-app init [project-name]`
|
|
18
|
+
|
|
19
|
+
Crée un nouveau projet Nexu.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Les deux syntaxes sont équivalentes
|
|
23
|
+
npx nexu-app my-project
|
|
24
|
+
npx nexu-app init my-project
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### Options
|
|
28
|
+
|
|
29
|
+
| Option | Description |
|
|
30
|
+
| --------------------------- | -------------------------------------- |
|
|
31
|
+
| `-t, --template <template>` | Template à utiliser (default, minimal) |
|
|
32
|
+
| `--skip-install` | Ne pas installer les dépendances |
|
|
33
|
+
| `--skip-git` | Ne pas initialiser Git |
|
|
34
|
+
|
|
35
|
+
#### Exemples
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Projet standard
|
|
39
|
+
npx nexu-app my-project
|
|
40
|
+
|
|
41
|
+
# Avec la commande init explicite
|
|
42
|
+
npx nexu-app init my-project
|
|
43
|
+
|
|
44
|
+
# Initialiser dans le dossier courant
|
|
45
|
+
npx nexu-app .
|
|
46
|
+
npx nexu-app init .
|
|
47
|
+
|
|
48
|
+
# Sans installation des dépendances
|
|
49
|
+
npx nexu-app my-project --skip-install
|
|
50
|
+
|
|
51
|
+
# Sans initialisation Git
|
|
52
|
+
npx nexu-app my-project --skip-git
|
|
53
|
+
|
|
54
|
+
# Les deux
|
|
55
|
+
npx nexu-app my-project --skip-install --skip-git
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### `nexu-app update`
|
|
59
|
+
|
|
60
|
+
Met à jour un projet Nexu existant avec les dernières fonctionnalités du template.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
cd my-project
|
|
64
|
+
npx nexu-app update
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Options
|
|
68
|
+
|
|
69
|
+
| Option | Description |
|
|
70
|
+
| -------------------- | ------------------------------------------------------ |
|
|
71
|
+
| `-p, --packages` | Mettre à jour uniquement les packages partagés |
|
|
72
|
+
| `-c, --config` | Mettre à jour uniquement les fichiers de configuration |
|
|
73
|
+
| `-w, --workflows` | Mettre à jour uniquement les GitHub workflows |
|
|
74
|
+
| `-s, --services` | Mettre à jour uniquement les services Docker |
|
|
75
|
+
| `--scripts` | Mettre à jour uniquement le dossier scripts |
|
|
76
|
+
| `-d, --dependencies` | Mettre à jour uniquement les dépendances package.json |
|
|
77
|
+
| `--all` | Mettre à jour tout (comportement par défaut) |
|
|
78
|
+
| `--dry-run` | Afficher les changements sans les appliquer |
|
|
79
|
+
| `--preview` | Afficher les différences détaillées avant d'appliquer |
|
|
80
|
+
|
|
81
|
+
#### Fonctionnalités
|
|
82
|
+
|
|
83
|
+
1. **Détection des changements**
|
|
84
|
+
- Fichiers ajoutés (nouveaux dans le template)
|
|
85
|
+
- Fichiers modifiés (différents du template)
|
|
86
|
+
- Fichiers supprimés (présents localement mais plus dans le template)
|
|
87
|
+
|
|
88
|
+
2. **Prévisualisation**
|
|
89
|
+
- Mode `--preview` pour voir les différences ligne par ligne
|
|
90
|
+
- Mode `--dry-run` pour simuler sans modifier
|
|
91
|
+
|
|
92
|
+
3. **Sélection interactive**
|
|
93
|
+
- Choisissez quels fichiers mettre à jour
|
|
94
|
+
- Confirmez avant d'appliquer les changements
|
|
95
|
+
|
|
96
|
+
4. **Mise à jour des dépendances**
|
|
97
|
+
- Nouvelles dépendances ajoutées au template
|
|
98
|
+
- Nouveaux scripts ajoutés au template
|
|
99
|
+
- Mise à jour automatique du package.json
|
|
100
|
+
|
|
101
|
+
5. **Installation automatique**
|
|
102
|
+
- Exécute `pnpm install` si le package.json a été modifié
|
|
103
|
+
|
|
104
|
+
#### Exemples
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Mise à jour complète avec prévisualisation
|
|
108
|
+
npx nexu-app update --preview
|
|
109
|
+
|
|
110
|
+
# Mise à jour des packages partagés uniquement
|
|
111
|
+
npx nexu-app update --packages
|
|
112
|
+
|
|
113
|
+
# Mise à jour des configs et workflows
|
|
114
|
+
npx nexu-app update --config --workflows
|
|
115
|
+
|
|
116
|
+
# Simulation (voir sans appliquer)
|
|
117
|
+
npx nexu-app update --dry-run
|
|
118
|
+
|
|
119
|
+
# Mise à jour des dépendances uniquement
|
|
120
|
+
npx nexu-app update --dependencies
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### Catégories de fichiers
|
|
124
|
+
|
|
125
|
+
| Catégorie | Fichiers inclus |
|
|
126
|
+
| ----------- | -------------------------------------------------------- |
|
|
127
|
+
| `packages` | `packages/**/*` |
|
|
128
|
+
| `config` | `*.json`, `*.js`, `*.cjs`, `*.yaml`, `*.yml` à la racine |
|
|
129
|
+
| `workflows` | `.github/**/*` |
|
|
130
|
+
| `services` | `services/**/*` |
|
|
131
|
+
| `scripts` | `scripts/**/*` |
|
|
132
|
+
| `docker` | `docker/**/*` |
|
|
133
|
+
|
|
134
|
+
### `nexu-app add <component>`
|
|
135
|
+
|
|
136
|
+
Ajoute un composant au projet.
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
npx nexu-app add package
|
|
140
|
+
npx nexu-app add service
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Composants disponibles
|
|
144
|
+
|
|
145
|
+
| Composant | Description |
|
|
146
|
+
| --------- | -------------------------------------------------- |
|
|
147
|
+
| `package` | Ajoute un nouveau package partagé dans `packages/` |
|
|
148
|
+
| `service` | Ajoute un nouveau service Docker dans `services/` |
|
|
149
|
+
|
|
150
|
+
#### Options
|
|
151
|
+
|
|
152
|
+
| Option | Description |
|
|
153
|
+
| ------------------- | ---------------- |
|
|
154
|
+
| `-n, --name <name>` | Nom du composant |
|
|
155
|
+
|
|
156
|
+
#### Exemples
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Ajouter un package (interactif)
|
|
160
|
+
npx nexu-app add package
|
|
161
|
+
|
|
162
|
+
# Ajouter un package avec un nom
|
|
163
|
+
npx nexu-app add package --name my-utils
|
|
164
|
+
|
|
165
|
+
# Ajouter un service Docker
|
|
166
|
+
npx nexu-app add service
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Flux de travail typique
|
|
170
|
+
|
|
171
|
+
### Nouveau projet
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 1. Créer le projet
|
|
175
|
+
npx nexu-app my-project
|
|
176
|
+
|
|
177
|
+
# 2. Aller dans le projet
|
|
178
|
+
cd my-project
|
|
179
|
+
|
|
180
|
+
# 3. Créer une application
|
|
181
|
+
pnpm generate:app web next 3000
|
|
182
|
+
|
|
183
|
+
# 4. Démarrer le développement
|
|
184
|
+
pnpm dev
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Mise à jour d'un projet existant
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# 1. Aller dans le projet
|
|
191
|
+
cd my-project
|
|
192
|
+
|
|
193
|
+
# 2. Prévisualiser les changements
|
|
194
|
+
npx nexu-app update --preview
|
|
195
|
+
|
|
196
|
+
# 3. Appliquer les mises à jour souhaitées
|
|
197
|
+
npx nexu-app update
|
|
198
|
+
|
|
199
|
+
# 4. Vérifier que tout fonctionne
|
|
200
|
+
pnpm build
|
|
201
|
+
pnpm test
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Ajouter des fonctionnalités
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Ajouter un nouveau package partagé
|
|
208
|
+
npx nexu-app add package --name validators
|
|
209
|
+
|
|
210
|
+
# Ajouter un service Docker (Redis, etc.)
|
|
211
|
+
npx nexu-app add service
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Structure du template
|
|
215
|
+
|
|
216
|
+
Le template par défaut inclut:
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
template/
|
|
220
|
+
├── apps/ # Dossier pour les applications (vide)
|
|
221
|
+
├── packages/ # Packages partagés
|
|
222
|
+
│ ├── cache/
|
|
223
|
+
│ ├── config/
|
|
224
|
+
│ ├── constants/
|
|
225
|
+
│ ├── logger/
|
|
226
|
+
│ ├── result/
|
|
227
|
+
│ ├── types/
|
|
228
|
+
│ ├── utils/
|
|
229
|
+
│ └── ui/
|
|
230
|
+
├── scripts/ # Scripts utilitaires
|
|
231
|
+
│ ├── generate-app.mjs
|
|
232
|
+
│ └── audit.mjs
|
|
233
|
+
├── services/ # Services Docker externes
|
|
234
|
+
├── docker/ # Configuration Docker principale
|
|
235
|
+
├── .github/ # Workflows GitHub Actions
|
|
236
|
+
├── package.json
|
|
237
|
+
├── turbo.json
|
|
238
|
+
├── pnpm-workspace.yaml
|
|
239
|
+
└── ... (fichiers de config)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Développement du CLI
|
|
243
|
+
|
|
244
|
+
### Structure du code
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
nexu-app/
|
|
248
|
+
├── src/
|
|
249
|
+
│ ├── index.ts # Point d'entrée
|
|
250
|
+
│ ├── commands/
|
|
251
|
+
│ │ ├── init.ts # Commande de création
|
|
252
|
+
│ │ ├── update.ts # Commande de mise à jour
|
|
253
|
+
│ │ └── add.ts # Commande d'ajout
|
|
254
|
+
│ └── utils/
|
|
255
|
+
│ └── helpers.ts # Fonctions utilitaires
|
|
256
|
+
├── templates/
|
|
257
|
+
│ └── default/ # Template par défaut
|
|
258
|
+
└── package.json
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Générer le template
|
|
262
|
+
|
|
263
|
+
Pour mettre à jour le template avec les derniers changements du monorepo:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
pnpm generate:template
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Ce script:
|
|
270
|
+
|
|
271
|
+
1. Copie les fichiers du monorepo vers `nexu-app/templates/default/`
|
|
272
|
+
2. Exclut `node_modules`, `.git`, `dist`, etc.
|
|
273
|
+
3. Remplace le nom du projet par un placeholder
|
|
274
|
+
4. Supprime les scripts spécifiques au développement du CLI
|
|
275
|
+
|
|
276
|
+
### Publier le CLI
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
pnpm publish:cli
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Ce script:
|
|
283
|
+
|
|
284
|
+
1. Génère le template
|
|
285
|
+
2. Build le CLI avec tsup
|
|
286
|
+
3. Publie sur npm
|
|
287
|
+
|
|
288
|
+
## Dépendances
|
|
289
|
+
|
|
290
|
+
Le CLI utilise:
|
|
291
|
+
|
|
292
|
+
| Package | Usage |
|
|
293
|
+
| ----------- | ---------------------------- |
|
|
294
|
+
| `commander` | Parsing des arguments CLI |
|
|
295
|
+
| `inquirer` | Prompts interactifs |
|
|
296
|
+
| `chalk` | Couleurs dans le terminal |
|
|
297
|
+
| `ora` | Spinners de chargement |
|
|
298
|
+
| `fs-extra` | Opérations fichiers avancées |
|
|
299
|
+
| `diff` | Comparaison de fichiers |
|
|
300
|
+
| `semver` | Gestion des versions |
|
|
301
|
+
|
|
302
|
+
## Troubleshooting
|
|
303
|
+
|
|
304
|
+
### "Template not found"
|
|
305
|
+
|
|
306
|
+
Le template doit être généré avant de publier:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
pnpm generate:template
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### "Permission denied"
|
|
313
|
+
|
|
314
|
+
Assurez-vous d'avoir les droits d'écriture dans le dossier cible:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
sudo chown -R $(whoami) /path/to/project
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### "pnpm not found" lors de l'installation
|
|
321
|
+
|
|
322
|
+
Le CLI utilise pnpm par défaut. Installez-le:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
npm install -g pnpm
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Les fichiers ne sont pas mis à jour
|
|
329
|
+
|
|
330
|
+
Vérifiez que vous êtes bien dans un projet Nexu (présence de `turbo.json` et `pnpm-workspace.yaml`).
|