@iconsulting-dev/forgekit 1.5.0 → 1.6.1
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 +67 -51
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +18 -6
- package/dist/commands/new.js.map +1 -1
- package/dist/generators/ci/index.d.ts.map +1 -1
- package/dist/generators/ci/index.js +5 -1
- package/dist/generators/ci/index.js.map +1 -1
- package/dist/generators/claude-code/index.d.ts.map +1 -1
- package/dist/generators/claude-code/index.js +15 -2
- package/dist/generators/claude-code/index.js.map +1 -1
- package/dist/generators/docker/index.d.ts.map +1 -1
- package/dist/generators/docker/index.js +3 -1
- package/dist/generators/docker/index.js.map +1 -1
- package/dist/generators/fastapi/index.d.ts +3 -0
- package/dist/generators/fastapi/index.d.ts.map +1 -0
- package/dist/generators/fastapi/index.js +32 -0
- package/dist/generators/fastapi/index.js.map +1 -0
- package/dist/generators/root/index.d.ts.map +1 -1
- package/dist/generators/root/index.js +3 -1
- package/dist/generators/root/index.js.map +1 -1
- package/dist/prompts/project.d.ts.map +1 -1
- package/dist/prompts/project.js +17 -11
- package/dist/prompts/project.js.map +1 -1
- package/dist/templates/ci/ci.yml.hbs +25 -1
- package/dist/templates/claude-code/CLAUDE.md.hbs +66 -22
- package/dist/templates/claude-code/settings.json.hbs +3 -2
- package/dist/templates/docker/docker-compose.yml.hbs +11 -0
- package/dist/templates/fastapi/Dockerfile.hbs +12 -0
- package/dist/templates/fastapi/config.py.hbs +12 -0
- package/dist/templates/fastapi/gitignore.hbs +13 -0
- package/dist/templates/fastapi/health.py.hbs +8 -0
- package/dist/templates/fastapi/main.py.hbs +6 -0
- package/dist/templates/fastapi/python-version.hbs +1 -0
- package/dist/templates/fastapi/requirements.txt.hbs +5 -0
- package/dist/templates/fastapi/test_health.py.hbs +11 -0
- package/dist/templates/root/README.md.hbs +16 -5
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/versions.d.ts +2 -1
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +1 -1
- package/dist/versions.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<h1 align="center">ForgeKit</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
CLI de scaffolding full-stack qui génère des projets
|
|
9
|
-
|
|
8
|
+
CLI de scaffolding full-stack qui génère des projets préconfigurés et prêts à l'emploi.<br/>
|
|
9
|
+
Choisissez votre backend (Spring Boot ou FastAPI), votre frontend, et lancez.
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
@@ -38,9 +38,10 @@ Un wizard vous guide avec des valeurs par défaut modifiables :
|
|
|
38
38
|
```
|
|
39
39
|
? Nom du projet : (mon-app)
|
|
40
40
|
? Description : (Mon application)
|
|
41
|
-
?
|
|
42
|
-
?
|
|
43
|
-
?
|
|
41
|
+
? Backend : (Spring Boot (Java 21) | FastAPI (Python) | Aucun)
|
|
42
|
+
? Inclure le frontend Angular ? (Oui)
|
|
43
|
+
? Group ID : (com.example) ← Spring Boot uniquement
|
|
44
|
+
? Fonctionnalités backend : (Flyway ✓ OpenAPI ✓ JWT ✗ MapStruct ✓) ← Spring Boot uniquement
|
|
44
45
|
? Framework UI : (PrimeNG)
|
|
45
46
|
? Preset PrimeNG : (Aura)
|
|
46
47
|
? Inclure NgRx SignalStore ? (Non)
|
|
@@ -50,36 +51,44 @@ Un wizard vous guide avec des valeurs par défaut modifiables :
|
|
|
50
51
|
### Mode commande directe
|
|
51
52
|
|
|
52
53
|
```bash
|
|
53
|
-
|
|
54
|
+
# Projet Spring Boot + Angular
|
|
55
|
+
forgekit new mon-app --spring-boot --group com.salim --frontend --docker --claude-code
|
|
56
|
+
|
|
57
|
+
# Projet FastAPI + Angular
|
|
58
|
+
forgekit new mon-app --fastapi --frontend --docker --claude-code
|
|
59
|
+
|
|
60
|
+
# Backend FastAPI seul
|
|
61
|
+
forgekit new mon-api --fastapi --no-frontend --no-docker
|
|
54
62
|
```
|
|
55
63
|
|
|
56
64
|
### Options disponibles
|
|
57
65
|
|
|
58
66
|
| Flag | Description |
|
|
59
67
|
|---|---|
|
|
60
|
-
| `--
|
|
68
|
+
| `--spring-boot` | Backend Spring Boot (Java 21) |
|
|
69
|
+
| `--fastapi` | Backend FastAPI (Python 3.12) |
|
|
70
|
+
| `--frontend` / `--no-frontend` | Inclure/exclure le frontend Angular |
|
|
71
|
+
| `--group <id>` | Group ID Java (ex: `com.salim`) — Spring Boot uniquement |
|
|
61
72
|
| `--description <desc>` | Description du projet |
|
|
62
|
-
| `--backend` | Inclure le backend Spring Boot |
|
|
63
|
-
| `--frontend` | Inclure le frontend Angular |
|
|
64
73
|
| `--auth` | Inclure Spring Security + interceptors Angular |
|
|
65
74
|
| `--flyway` / `--no-flyway` | Inclure/exclure Flyway (migrations SQL) |
|
|
66
75
|
| `--openapi` / `--no-openapi` | Inclure/exclure OpenAPI / Swagger UI |
|
|
67
76
|
| `--mapstruct` / `--no-mapstruct` | Inclure/exclure MapStruct |
|
|
68
|
-
| `--ngrx` | Inclure NgRx SignalStore |
|
|
77
|
+
| `--ngrx` / `--no-ngrx` | Inclure/exclure NgRx SignalStore |
|
|
69
78
|
| `--ui <framework>` | Framework UI : `primeng` \| `tailwind` \| `none` |
|
|
70
79
|
| `--preset <preset>` | Preset PrimeNG : `Aura` \| `Lara` \| `Nora` |
|
|
71
|
-
| `--docker` | Inclure Docker Compose |
|
|
72
|
-
| `--ci` | Inclure GitHub Actions CI |
|
|
73
|
-
| `--claude-code` | Inclure la config Claude Code |
|
|
80
|
+
| `--docker` / `--no-docker` | Inclure/exclure Docker Compose |
|
|
81
|
+
| `--ci` / `--no-ci` | Inclure/exclure GitHub Actions CI |
|
|
82
|
+
| `--claude-code` / `--no-claude-code` | Inclure/exclure la config Claude Code |
|
|
74
83
|
| `--no-git` | Ne pas initialiser Git |
|
|
75
84
|
|
|
76
85
|
## Projet généré
|
|
77
86
|
|
|
78
87
|
```
|
|
79
88
|
mon-projet/
|
|
80
|
-
├── backend/ # Spring Boot 4.x / Java 21
|
|
89
|
+
├── backend/ # Spring Boot 4.x / Java 21 — ou — FastAPI / Python 3.12
|
|
81
90
|
├── frontend/ # Angular 21 / PrimeNG 21
|
|
82
|
-
├── docker-compose.yml # PostgreSQL 17 + pgAdmin
|
|
91
|
+
├── docker-compose.yml # PostgreSQL 17 + pgAdmin (+ service api si FastAPI)
|
|
83
92
|
├── .github/workflows/ # CI GitHub Actions
|
|
84
93
|
├── CLAUDE.md # Conventions Claude Code
|
|
85
94
|
├── .claude/settings.json # Permissions Claude Code
|
|
@@ -119,6 +128,35 @@ backend/src/main/java/com/{group}/{name}/
|
|
|
119
128
|
- `application-dev.yml` — Profil dev pointant vers Docker Compose
|
|
120
129
|
- `db/migration/V1__init.sql` — Migration Flyway prête
|
|
121
130
|
|
|
131
|
+
### Backend — FastAPI
|
|
132
|
+
|
|
133
|
+
**Stack :** FastAPI, uvicorn, pydantic-settings, pytest, httpx
|
|
134
|
+
|
|
135
|
+
**Structure :**
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
backend/
|
|
139
|
+
├── app/
|
|
140
|
+
│ ├── __init__.py
|
|
141
|
+
│ ├── main.py # Entrée FastAPI
|
|
142
|
+
│ ├── config.py # pydantic-settings
|
|
143
|
+
│ └── routers/
|
|
144
|
+
│ └── health.py # GET /health
|
|
145
|
+
├── tests/
|
|
146
|
+
│ └── test_health.py # pytest + TestClient
|
|
147
|
+
├── requirements.txt # Dépendances épinglées
|
|
148
|
+
├── Dockerfile # python:3.12-slim + uvicorn
|
|
149
|
+
└── .python-version # 3.12
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Démarrage :**
|
|
153
|
+
```bash
|
|
154
|
+
cd backend
|
|
155
|
+
pip install -r requirements.txt
|
|
156
|
+
uvicorn app.main:app --reload # port 8000
|
|
157
|
+
pytest # tests
|
|
158
|
+
```
|
|
159
|
+
|
|
122
160
|
### Frontend — Angular
|
|
123
161
|
|
|
124
162
|
**Framework UI (choix exclusif) :**
|
|
@@ -148,44 +186,19 @@ frontend/src/app/
|
|
|
148
186
|
└── home/ # Page d'accueil par défaut
|
|
149
187
|
```
|
|
150
188
|
|
|
151
|
-
**Prêt à l'emploi :**
|
|
152
|
-
- Layout sidebar/topbar fonctionnel avec design tokens PrimeNG v20+
|
|
153
|
-
- Page d'accueil avec cards de démarrage
|
|
154
|
-
- Thème Aura PrimeNG appliqué via `providePrimeNG`
|
|
155
|
-
- PrimeIcons intégrés
|
|
156
|
-
- NgRx SignalStore prêt par feature
|
|
157
|
-
- Standalone components, signals, `@if`/`@for`, OnPush
|
|
158
|
-
- **Avec `--auth` :** Intercepteurs HTTP + guard + AuthService câblés
|
|
159
|
-
|
|
160
189
|
### Docker Compose
|
|
161
190
|
|
|
162
191
|
| Service | Port | Description |
|
|
163
192
|
|---|---|---|
|
|
164
193
|
| PostgreSQL 17 | 5432 | Base de données avec volume persistant |
|
|
165
194
|
| pgAdmin | 5050 | Interface web (admin@admin.com / admin) |
|
|
195
|
+
| api *(FastAPI)* | 8000 | Service FastAPI (si `--fastapi`) |
|
|
166
196
|
|
|
167
197
|
### Claude Code
|
|
168
198
|
|
|
169
199
|
Génère automatiquement :
|
|
170
|
-
- **`CLAUDE.md`** — Conventions du projet, commandes, structure
|
|
171
|
-
- **`.claude/settings.json`** — Permissions préconfigurées
|
|
172
|
-
|
|
173
|
-
## Démarrage rapide d'un projet généré
|
|
174
|
-
|
|
175
|
-
```bash
|
|
176
|
-
# Générer le projet
|
|
177
|
-
forgekit new mon-app --group com.salim --backend --frontend --docker --claude-code
|
|
178
|
-
|
|
179
|
-
# Démarrer l'infrastructure
|
|
180
|
-
cd mon-app
|
|
181
|
-
docker compose up -d
|
|
182
|
-
|
|
183
|
-
# Démarrer le backend (port 8080)
|
|
184
|
-
cd backend && ./mvnw spring-boot:run
|
|
185
|
-
|
|
186
|
-
# Démarrer le frontend (port 4200)
|
|
187
|
-
cd frontend && npm install && ng serve
|
|
188
|
-
```
|
|
200
|
+
- **`CLAUDE.md`** — Conventions du projet, commandes, structure, workflow speckit
|
|
201
|
+
- **`.claude/settings.json`** — Permissions préconfigurées selon le backend choisi
|
|
189
202
|
|
|
190
203
|
## Versions dynamiques
|
|
191
204
|
|
|
@@ -207,22 +220,25 @@ src/
|
|
|
207
220
|
├── prompts/project.ts # Wizard interactif avec validation
|
|
208
221
|
├── generators/
|
|
209
222
|
│ ├── base-generator.ts # Classe abstraite commune
|
|
210
|
-
│ ├── backend/index.ts # BackendGenerator
|
|
223
|
+
│ ├── backend/index.ts # BackendGenerator (Spring Boot)
|
|
224
|
+
│ ├── fastapi/index.ts # FastAPIGenerator
|
|
211
225
|
│ ├── frontend/index.ts # FrontendGenerator
|
|
212
226
|
│ ├── docker/index.ts # DockerGenerator
|
|
213
227
|
│ ├── claude-code/index.ts # ClaudeCodeGenerator
|
|
214
228
|
│ ├── root/index.ts # RootGenerator (README + .gitignore)
|
|
215
229
|
│ └── git.ts # Initialisation Git
|
|
216
|
-
├── templates/ #
|
|
217
|
-
│ ├── backend/ # 14 templates
|
|
218
|
-
│ ├──
|
|
219
|
-
│ ├──
|
|
220
|
-
│ ├──
|
|
221
|
-
│
|
|
230
|
+
├── templates/ # Templates Handlebars (.hbs)
|
|
231
|
+
│ ├── backend/ # Spring Boot (14 templates)
|
|
232
|
+
│ ├── fastapi/ # FastAPI (8 templates)
|
|
233
|
+
│ ├── frontend/ # Angular (21 templates)
|
|
234
|
+
│ ├── docker/ # Docker Compose
|
|
235
|
+
│ ├── claude-code/ # CLAUDE.md + settings.json
|
|
236
|
+
│ ├── ci/ # GitHub Actions
|
|
237
|
+
│ └── root/ # README + .gitignore
|
|
222
238
|
├── utils/
|
|
223
239
|
│ ├── template-engine.ts # Handlebars compile + render
|
|
224
240
|
│ └── validation.ts # Validation inputs
|
|
225
|
-
├── types.ts
|
|
241
|
+
├── types.ts # BackendType, ProjectConfig
|
|
226
242
|
├── versions.ts # Résolution dynamique Maven + NPM
|
|
227
243
|
└── config.ts # Config persistante (~/.forgekit)
|
|
228
244
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,UAAU,SA4KpB,CAAC"}
|
package/dist/commands/new.js
CHANGED
|
@@ -9,6 +9,7 @@ import { generateFrontend } from "../generators/frontend/index.js";
|
|
|
9
9
|
import { generateDocker } from "../generators/docker/index.js";
|
|
10
10
|
import { generateCI } from "../generators/ci/index.js";
|
|
11
11
|
import { generateClaudeCode } from "../generators/claude-code/index.js";
|
|
12
|
+
import { generateFastAPIBackend } from "../generators/fastapi/index.js";
|
|
12
13
|
import { generateRoot } from "../generators/root/index.js";
|
|
13
14
|
import { initGit } from "../generators/git.js";
|
|
14
15
|
import { resolveVersions } from "../versions.js";
|
|
@@ -17,8 +18,10 @@ export const newCommand = new Command("new")
|
|
|
17
18
|
.argument("[name]", "Nom du projet")
|
|
18
19
|
.option("--group <groupId>", "Group ID Java")
|
|
19
20
|
.option("--description <desc>", "Description du projet")
|
|
20
|
-
.option("--
|
|
21
|
+
.option("--spring-boot", "Inclure le backend Spring Boot")
|
|
22
|
+
.option("--fastapi", "Inclure le backend FastAPI")
|
|
21
23
|
.option("--frontend", "Inclure le frontend Angular")
|
|
24
|
+
.option("--no-frontend", "Exclure le frontend Angular")
|
|
22
25
|
.option("--auth", "Inclure l'authentification")
|
|
23
26
|
.option("--flyway", "Inclure Flyway (migrations SQL)")
|
|
24
27
|
.option("--no-flyway", "Exclure Flyway")
|
|
@@ -46,8 +49,10 @@ export const newCommand = new Command("new")
|
|
|
46
49
|
defaults.groupId = options.group;
|
|
47
50
|
if (options.description)
|
|
48
51
|
defaults.description = options.description;
|
|
49
|
-
if (
|
|
50
|
-
defaults.
|
|
52
|
+
if (options.springBoot)
|
|
53
|
+
defaults.backendType = "spring-boot";
|
|
54
|
+
if (options.fastapi)
|
|
55
|
+
defaults.backendType = "fastapi";
|
|
51
56
|
if (typeof options.frontend === "boolean")
|
|
52
57
|
defaults.frontend = options.frontend;
|
|
53
58
|
if (typeof options.auth === "boolean")
|
|
@@ -90,14 +95,19 @@ export const newCommand = new Command("new")
|
|
|
90
95
|
await fs.ensureDir(projectDir);
|
|
91
96
|
console.log(chalk.gray(`\nCréation du projet ${config.name}...\n`));
|
|
92
97
|
const versions = await resolveVersions({
|
|
93
|
-
|
|
98
|
+
backendType: config.backendType,
|
|
94
99
|
frontend: config.frontend,
|
|
95
100
|
});
|
|
96
|
-
if (config.
|
|
101
|
+
if (config.backendType === "spring-boot") {
|
|
97
102
|
process.stdout.write(chalk.yellow(" ⏳ Backend Spring Boot..."));
|
|
98
103
|
await generateBackend(projectDir, config, versions);
|
|
99
104
|
console.log(chalk.green(`\r ✔ Backend Spring Boot ${versions.springBoot} généré `));
|
|
100
105
|
}
|
|
106
|
+
if (config.backendType === "fastapi") {
|
|
107
|
+
process.stdout.write(chalk.yellow(" ⏳ Backend FastAPI..."));
|
|
108
|
+
await generateFastAPIBackend(projectDir, config);
|
|
109
|
+
console.log(chalk.green("\r ✔ Backend FastAPI généré "));
|
|
110
|
+
}
|
|
101
111
|
if (config.frontend) {
|
|
102
112
|
process.stdout.write(chalk.yellow(" ⏳ Frontend Angular..."));
|
|
103
113
|
await generateFrontend(projectDir, config, versions);
|
|
@@ -130,8 +140,10 @@ export const newCommand = new Command("new")
|
|
|
130
140
|
console.log(chalk.cyan(` cd ${config.name}`));
|
|
131
141
|
if (config.docker)
|
|
132
142
|
console.log(chalk.cyan(" docker compose up -d"));
|
|
133
|
-
if (config.
|
|
143
|
+
if (config.backendType === "spring-boot")
|
|
134
144
|
console.log(chalk.cyan(" cd backend && ./mvnw spring-boot:run"));
|
|
145
|
+
if (config.backendType === "fastapi")
|
|
146
|
+
console.log(chalk.cyan(" cd backend && uvicorn app.main:app --reload"));
|
|
135
147
|
if (config.frontend)
|
|
136
148
|
console.log(chalk.cyan(" cd frontend && npm install && ng serve"));
|
|
137
149
|
console.log("");
|
package/dist/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;KACnC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;KAC5C,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;KACvD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/ci/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/ci/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAmBpD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -5,8 +5,12 @@ class CIGenerator extends BaseGenerator {
|
|
|
5
5
|
async generate() {
|
|
6
6
|
const workflowsDir = path.join(this.projectDir, ".github", "workflows");
|
|
7
7
|
await this.ensureDirs([workflowsDir]);
|
|
8
|
+
const springBoot = this.config.backendType === "spring-boot";
|
|
9
|
+
const fastapi = this.config.backendType === "fastapi";
|
|
8
10
|
await renderAndWrite("ci/ci.yml.hbs", path.join(workflowsDir, "ci.yml"), {
|
|
9
|
-
backend: this.config.
|
|
11
|
+
backend: this.config.backendType !== null,
|
|
12
|
+
springBoot,
|
|
13
|
+
fastapi,
|
|
10
14
|
frontend: this.config.frontend,
|
|
11
15
|
});
|
|
12
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/ci/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAY,SAAQ,aAAa;IACrC,KAAK,CAAC,QAAQ;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtC,MAAM,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE;YACvE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/ci/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,WAAY,SAAQ,aAAa;IACrC,KAAK,CAAC,QAAQ;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;QAEtD,MAAM,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE;YACvE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI;YACzC,UAAU;YACV,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,MAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/claude-code/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/claude-code/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAmG1D,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -12,12 +12,20 @@ class ClaudeCodeGenerator extends BaseGenerator {
|
|
|
12
12
|
const claudeDir = path.join(this.projectDir, ".claude");
|
|
13
13
|
await fs.ensureDir(claudeDir);
|
|
14
14
|
const allowedCommands = this.buildAllowedCommands();
|
|
15
|
+
const springBoot = this.config.backendType === "spring-boot";
|
|
16
|
+
const fastapi = this.config.backendType === "fastapi";
|
|
17
|
+
const backend = this.config.backendType !== null;
|
|
15
18
|
const data = {
|
|
16
19
|
name: this.config.name,
|
|
17
20
|
description: this.config.description,
|
|
18
|
-
backend
|
|
21
|
+
backend,
|
|
22
|
+
springBoot,
|
|
23
|
+
fastapi,
|
|
19
24
|
frontend: this.config.frontend,
|
|
20
25
|
docker: this.config.docker,
|
|
26
|
+
flyway: this.config.flyway,
|
|
27
|
+
ngrx: this.config.ngrx,
|
|
28
|
+
auth: this.config.auth,
|
|
21
29
|
versions: this.versions,
|
|
22
30
|
allowedCommands,
|
|
23
31
|
};
|
|
@@ -28,9 +36,14 @@ class ClaudeCodeGenerator extends BaseGenerator {
|
|
|
28
36
|
}
|
|
29
37
|
buildAllowedCommands() {
|
|
30
38
|
const commands = [];
|
|
31
|
-
|
|
39
|
+
const springBoot = this.config.backendType === "spring-boot";
|
|
40
|
+
const fastapi = this.config.backendType === "fastapi";
|
|
41
|
+
if (springBoot) {
|
|
32
42
|
commands.push("Bash(./mvnw spring-boot:run)", "Bash(./mvnw test)", "Bash(./mvnw package)", "Bash(./mvnw clean)");
|
|
33
43
|
}
|
|
44
|
+
if (fastapi) {
|
|
45
|
+
commands.push("Bash(uvicorn app.main:app --reload)", "Bash(pytest)", "Bash(pip install)", "Bash(pip freeze)");
|
|
46
|
+
}
|
|
34
47
|
if (this.config.frontend) {
|
|
35
48
|
commands.push("Bash(ng serve)", "Bash(ng build)", "Bash(ng test)", "Bash(ng generate)", "Bash(npm install)", "Bash(npm run)");
|
|
36
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/claude-code/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,mBAAoB,SAAQ,aAAa;IAC5B,QAAQ,CAAmB;IAE5C,YACE,UAAkB,EAClB,MAAqB,EACrB,QAA0B;QAE1B,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEpD,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/claude-code/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,mBAAoB,SAAQ,aAAa;IAC5B,QAAQ,CAAmB;IAE5C,YACE,UAAkB,EAClB,MAAqB,EACrB,QAA0B;QAE1B,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE9B,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;QAEjD,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,OAAO;YACP,UAAU;YACV,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe;SAChB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,cAAc,CACZ,2BAA2B,EAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACvC,IAAI,CACL;YACD,cAAc,CACZ,+BAA+B,EAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,IAAI,CACL;SACF,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB;QAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;QAEtD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CACX,8BAA8B,EAC9B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CACX,qCAAqC,EACrC,cAAc,EACd,mBAAmB,EACnB,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CACX,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,MAAqB,EACrB,QAA0B;IAE1B,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/docker/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/docker/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAgBpD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -4,7 +4,9 @@ import { BaseGenerator } from "../base-generator.js";
|
|
|
4
4
|
class DockerGenerator extends BaseGenerator {
|
|
5
5
|
async generate() {
|
|
6
6
|
const dbName = this.config.name.toLowerCase().replace(/[^a-z0-9]/g, "_");
|
|
7
|
-
|
|
7
|
+
const springBoot = this.config.backendType === "spring-boot";
|
|
8
|
+
const fastapi = this.config.backendType === "fastapi";
|
|
9
|
+
await renderAndWrite("docker/docker-compose.yml.hbs", path.join(this.projectDir, "docker-compose.yml"), { dbName, name: this.config.name, springBoot, fastapi });
|
|
8
10
|
}
|
|
9
11
|
}
|
|
10
12
|
export async function generateDocker(projectDir, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/docker/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,eAAgB,SAAQ,aAAa;IACzC,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/docker/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,eAAgB,SAAQ,aAAa;IACzC,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC;QAEtD,MAAM,cAAc,CAClB,+BAA+B,EAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,EAChD,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CACxD,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/fastapi/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAyDpD,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
import { renderAndWrite } from "../../utils/template-engine.js";
|
|
4
|
+
import { BaseGenerator } from "../base-generator.js";
|
|
5
|
+
class FastAPIGenerator extends BaseGenerator {
|
|
6
|
+
async generate() {
|
|
7
|
+
const backendDir = path.join(this.projectDir, "backend");
|
|
8
|
+
const appDir = path.join(backendDir, "app");
|
|
9
|
+
const routersDir = path.join(appDir, "routers");
|
|
10
|
+
const testsDir = path.join(backendDir, "tests");
|
|
11
|
+
await this.ensureDirs([appDir, routersDir, testsDir]);
|
|
12
|
+
const data = { name: this.config.name };
|
|
13
|
+
await Promise.all([
|
|
14
|
+
renderAndWrite("fastapi/main.py.hbs", path.join(appDir, "main.py"), data),
|
|
15
|
+
renderAndWrite("fastapi/config.py.hbs", path.join(appDir, "config.py"), data),
|
|
16
|
+
renderAndWrite("fastapi/health.py.hbs", path.join(routersDir, "health.py"), data),
|
|
17
|
+
renderAndWrite("fastapi/requirements.txt.hbs", path.join(backendDir, "requirements.txt"), data),
|
|
18
|
+
renderAndWrite("fastapi/test_health.py.hbs", path.join(testsDir, "test_health.py"), data),
|
|
19
|
+
renderAndWrite("fastapi/gitignore.hbs", path.join(backendDir, ".gitignore"), data),
|
|
20
|
+
renderAndWrite("fastapi/python-version.hbs", path.join(backendDir, ".python-version"), data),
|
|
21
|
+
renderAndWrite("fastapi/Dockerfile.hbs", path.join(backendDir, "Dockerfile"), data),
|
|
22
|
+
fs.writeFile(path.join(appDir, "__init__.py"), ""),
|
|
23
|
+
fs.writeFile(path.join(routersDir, "__init__.py"), ""),
|
|
24
|
+
fs.writeFile(path.join(testsDir, "__init__.py"), ""),
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function generateFastAPIBackend(projectDir, config) {
|
|
29
|
+
const generator = new FastAPIGenerator(projectDir, config);
|
|
30
|
+
await generator.generate();
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/fastapi/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,KAAK,CAAC,QAAQ;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QAEtD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAExC,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,cAAc,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC;YACzE,cAAc,CACZ,uBAAuB,EACvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B,IAAI,CACL;YACD,cAAc,CACZ,uBAAuB,EACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAClC,IAAI,CACL;YACD,cAAc,CACZ,8BAA8B,EAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EACzC,IAAI,CACL;YACD,cAAc,CACZ,4BAA4B,EAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EACrC,IAAI,CACL;YACD,cAAc,CACZ,uBAAuB,EACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC,IAAI,CACL;YACD,cAAc,CACZ,4BAA4B,EAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EACxC,IAAI,CACL;YACD,cAAc,CACZ,wBAAwB,EACxB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC,IAAI,CACL;YACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;YAClD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;YACtD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;SACrD,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,EAClB,MAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/root/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/root/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAyC1D,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -11,7 +11,9 @@ class RootGenerator extends BaseGenerator {
|
|
|
11
11
|
const data = {
|
|
12
12
|
name: this.config.name,
|
|
13
13
|
description: this.config.description,
|
|
14
|
-
backend: this.config.
|
|
14
|
+
backend: this.config.backendType !== null,
|
|
15
|
+
springBoot: this.config.backendType === "spring-boot",
|
|
16
|
+
fastapi: this.config.backendType === "fastapi",
|
|
15
17
|
frontend: this.config.frontend,
|
|
16
18
|
docker: this.config.docker,
|
|
17
19
|
versions: this.versions,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/root/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,aAAc,SAAQ,aAAa;IACtB,QAAQ,CAAmB;IAE5C,YACE,UAAkB,EAClB,MAAqB,EACrB,QAA0B;QAE1B,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/root/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,aAAc,SAAQ,aAAa;IACtB,QAAQ,CAAmB;IAE5C,YACE,UAAkB,EAClB,MAAqB,EACrB,QAA0B;QAE1B,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI;YACzC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,aAAa;YACrD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS;YAC9C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,cAAc,CACZ,oBAAoB,EACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACvC,IAAI,CACL;YACD,cAAc,CACZ,oBAAoB,EACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACxC,IAAI,CACL;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,MAAqB,EACrB,QAA0B;IAE1B,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/prompts/project.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/prompts/project.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,aAAa,CAAC;AAErB,wBAAsB,mBAAmB,CACvC,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAM,GACpC,OAAO,CAAC,aAAa,CAAC,CAuKxB"}
|
package/dist/prompts/project.js
CHANGED
|
@@ -18,18 +18,24 @@ export async function promptProjectConfig(defaults = {}) {
|
|
|
18
18
|
default: "Mon application",
|
|
19
19
|
}));
|
|
20
20
|
// ── Section 2: Stack ──────────────────────────────────────────────────────
|
|
21
|
-
const
|
|
22
|
-
?
|
|
23
|
-
: await
|
|
24
|
-
message: "
|
|
21
|
+
const backendType = defaults.backendType !== undefined
|
|
22
|
+
? defaults.backendType
|
|
23
|
+
: await select({
|
|
24
|
+
message: "Backend",
|
|
25
25
|
choices: [
|
|
26
|
-
{ name: "
|
|
27
|
-
{ name: "
|
|
26
|
+
{ name: "Spring Boot (Java 21)", value: "spring-boot" },
|
|
27
|
+
{ name: "FastAPI (Python)", value: "fastapi" },
|
|
28
|
+
{ name: "Aucun", value: null },
|
|
28
29
|
],
|
|
30
|
+
default: "spring-boot",
|
|
29
31
|
});
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
const frontend = defaults.frontend !== undefined
|
|
33
|
+
? defaults.frontend
|
|
34
|
+
: await confirm({
|
|
35
|
+
message: "Inclure le frontend Angular ?",
|
|
36
|
+
default: true,
|
|
37
|
+
});
|
|
38
|
+
const groupId = backendType === "spring-boot"
|
|
33
39
|
? (defaults.groupId ??
|
|
34
40
|
(await input({
|
|
35
41
|
message: "Group ID",
|
|
@@ -42,7 +48,7 @@ export async function promptProjectConfig(defaults = {}) {
|
|
|
42
48
|
let openapi = defaults.openapi ?? true;
|
|
43
49
|
let auth = defaults.auth ?? false;
|
|
44
50
|
let mapstruct = defaults.mapstruct ?? true;
|
|
45
|
-
if (
|
|
51
|
+
if (backendType === "spring-boot" &&
|
|
46
52
|
defaults.flyway === undefined &&
|
|
47
53
|
defaults.openapi === undefined &&
|
|
48
54
|
defaults.auth === undefined &&
|
|
@@ -126,7 +132,7 @@ export async function promptProjectConfig(defaults = {}) {
|
|
|
126
132
|
name,
|
|
127
133
|
groupId,
|
|
128
134
|
description,
|
|
129
|
-
|
|
135
|
+
backendType,
|
|
130
136
|
frontend,
|
|
131
137
|
flyway,
|
|
132
138
|
openapi,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/prompts/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/prompts/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
- 'frontend/**'
|
|
34
34
|
{{/if}}
|
|
35
35
|
|
|
36
|
-
{{#if
|
|
36
|
+
{{#if springBoot}}
|
|
37
37
|
backend:
|
|
38
38
|
needs: changes
|
|
39
39
|
if: needs.changes.outputs.backend == 'true'
|
|
@@ -55,6 +55,30 @@ jobs:
|
|
|
55
55
|
run: ./mvnw verify --batch-mode --no-transfer-progress
|
|
56
56
|
{{/if}}
|
|
57
57
|
|
|
58
|
+
{{#if fastapi}}
|
|
59
|
+
backend:
|
|
60
|
+
needs: changes
|
|
61
|
+
if: needs.changes.outputs.backend == 'true'
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
defaults:
|
|
64
|
+
run:
|
|
65
|
+
working-directory: backend
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v4
|
|
68
|
+
|
|
69
|
+
- name: Set up Python 3.12
|
|
70
|
+
uses: actions/setup-python@v5
|
|
71
|
+
with:
|
|
72
|
+
python-version: '3.12'
|
|
73
|
+
cache: pip
|
|
74
|
+
|
|
75
|
+
- name: Install dependencies
|
|
76
|
+
run: pip install -r requirements.txt
|
|
77
|
+
|
|
78
|
+
- name: Test
|
|
79
|
+
run: pytest
|
|
80
|
+
{{/if}}
|
|
81
|
+
|
|
58
82
|
{{#if frontend}}
|
|
59
83
|
frontend:
|
|
60
84
|
needs: changes
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
```
|
|
8
8
|
{{name}}/
|
|
9
9
|
{{#if backend}}
|
|
10
|
-
├── backend/ #
|
|
10
|
+
├── backend/ # Backend API
|
|
11
11
|
{{/if}}
|
|
12
12
|
{{#if frontend}}
|
|
13
13
|
├── frontend/ # Angular SPA
|
|
@@ -18,44 +18,63 @@
|
|
|
18
18
|
└── README.md
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
{{#if
|
|
21
|
+
{{#if springBoot}}
|
|
22
22
|
## Backend — Spring Boot {{versions.springBoot}}
|
|
23
23
|
|
|
24
|
-
- **Java 21**
|
|
25
|
-
- **Architecture:** Feature-based
|
|
26
|
-
- **DB:** PostgreSQL, Flyway migrations in `backend/src/main/resources/db/migration/`
|
|
27
|
-
- **Conventions:** Records for DTOs, Lombok
|
|
28
|
-
- **Validation:** Jakarta Bean Validation
|
|
29
|
-
- **
|
|
24
|
+
- **Java 21** — records, pattern matching, sealed classes, virtual threads
|
|
25
|
+
- **Architecture:** Feature-based packages — `com.<groupId>.<feature>.{domain,application,infrastructure}`
|
|
26
|
+
- **DB:** PostgreSQL{{#if flyway}}, Flyway migrations in `backend/src/main/resources/db/migration/`{{/if}}
|
|
27
|
+
- **Conventions:** Records for DTOs, Lombok, MapStruct for mappings
|
|
28
|
+
- **Validation:** Jakarta Bean Validation | **Logging:** `@Slf4j`
|
|
29
|
+
- **Skill:** apply `applying-java-conventions` for all Java code
|
|
30
30
|
|
|
31
31
|
### Commands
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
cd backend
|
|
35
35
|
./mvnw spring-boot:run # Start dev server
|
|
36
|
-
./mvnw test
|
|
37
|
-
./mvnw package -DskipTests
|
|
36
|
+
./mvnw test # Run tests
|
|
37
|
+
./mvnw package -DskipTests # Build JAR
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
{{/if}}
|
|
41
|
+
{{#if fastapi}}
|
|
42
|
+
## Backend — FastAPI (Python 3.12)
|
|
43
|
+
|
|
44
|
+
- **FastAPI** with uvicorn, pydantic-settings
|
|
45
|
+
- **Architecture:** `app/routers/`, `app/config.py`, `tests/`
|
|
46
|
+
- **Conventions:** Pydantic models, async endpoints, dependency injection
|
|
47
|
+
- **Skill:** apply `applying-python-conventions` for all Python code
|
|
48
|
+
|
|
49
|
+
### Commands
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
cd backend
|
|
53
|
+
uvicorn app.main:app --reload # Start dev server (port 8000)
|
|
54
|
+
pytest # Run tests
|
|
55
|
+
pip install -r requirements.txt # Install dependencies
|
|
38
56
|
```
|
|
39
57
|
|
|
40
58
|
{{/if}}
|
|
41
59
|
{{#if frontend}}
|
|
42
|
-
## Frontend — Angular
|
|
60
|
+
## Frontend — Angular {{versions.angular}}
|
|
43
61
|
|
|
44
|
-
- **Angular {{versions.angular}}**
|
|
62
|
+
- **Angular {{versions.angular}}** — strict mode, standalone components, signals
|
|
45
63
|
- **UI:** PrimeNG {{versions.primeng}}, theme Aura, PrimeFlex
|
|
64
|
+
{{#if ngrx}}
|
|
46
65
|
- **State:** NgRx SignalStore
|
|
47
|
-
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
66
|
+
{{/if}}
|
|
67
|
+
- **Conventions:** OnPush, `input()`/`output()`, `inject()`, `@if`/`@for` control flow
|
|
68
|
+
- **Skill:** apply `applying-angular-conventions` for all Angular/TypeScript code
|
|
50
69
|
|
|
51
70
|
### Commands
|
|
52
71
|
|
|
53
72
|
```bash
|
|
54
73
|
cd frontend
|
|
55
|
-
npm install
|
|
56
|
-
ng serve
|
|
57
|
-
ng build
|
|
58
|
-
ng test
|
|
74
|
+
npm install # Install dependencies
|
|
75
|
+
ng serve # Start dev server (port 4200)
|
|
76
|
+
ng build # Production build
|
|
77
|
+
ng test # Run tests
|
|
59
78
|
```
|
|
60
79
|
|
|
61
80
|
{{/if}}
|
|
@@ -63,17 +82,42 @@ ng test # Run tests
|
|
|
63
82
|
## Infrastructure
|
|
64
83
|
|
|
65
84
|
```bash
|
|
66
|
-
docker compose up -d
|
|
67
|
-
docker compose down
|
|
85
|
+
docker compose up -d # Start PostgreSQL + pgAdmin
|
|
86
|
+
docker compose down # Stop services
|
|
68
87
|
```
|
|
69
88
|
|
|
70
89
|
- **PostgreSQL:** localhost:5432
|
|
71
90
|
- **pgAdmin:** localhost:5050 (admin@admin.com / admin)
|
|
72
91
|
|
|
73
92
|
{{/if}}
|
|
93
|
+
## Workflow
|
|
94
|
+
|
|
95
|
+
| Scenario | Action |
|
|
96
|
+
|---|---|
|
|
97
|
+
| New feature | `/speckit.workflow` — routes automatiquement (fast track ou full workflow spec→PR) |
|
|
98
|
+
| Bug | Describe to Claude → apply `superpowers:systematic-debugging` |
|
|
99
|
+
| UI component | Apply `frontend-design:frontend-design` skill |
|
|
100
|
+
| Commit / PR | Use `commit-commands:commit-push-pr` skill |
|
|
101
|
+
|
|
102
|
+
## TDD
|
|
103
|
+
|
|
104
|
+
Write the failing test first — no implementation code before a red test.
|
|
105
|
+
**Red → Green → Refactor.** This is not optional.
|
|
106
|
+
|
|
107
|
+
## Source of Truth
|
|
108
|
+
|
|
109
|
+
{{#if springBoot}}
|
|
110
|
+
- **API contract:** OpenAPI annotations on controllers (Springdoc)
|
|
111
|
+
{{#if flyway}}
|
|
112
|
+
- **DB schema:** Flyway migrations — never modify existing migration files
|
|
113
|
+
{{/if}}
|
|
114
|
+
{{/if}}
|
|
115
|
+
- **Config:** `application.yml` (never `application.properties`)
|
|
116
|
+
- **Secrets:** environment variables only — never committed
|
|
117
|
+
|
|
74
118
|
## Conventions
|
|
75
119
|
|
|
76
120
|
- **Git:** Conventional commits (`feat:`, `fix:`, `refactor:`, `chore:`)
|
|
77
121
|
- **Branches:** `feature/`, `fix/`, `refactor/`, `chore/`
|
|
78
122
|
- **DB:** snake_case naming
|
|
79
|
-
- **Security:** Never commit secrets
|
|
123
|
+
- **Security:** Never commit secrets — use environment variables
|
|
@@ -29,6 +29,17 @@ services:
|
|
|
29
29
|
depends_on:
|
|
30
30
|
postgres:
|
|
31
31
|
condition: service_healthy
|
|
32
|
+
{{#if fastapi}}
|
|
33
|
+
|
|
34
|
+
api:
|
|
35
|
+
build: ./backend
|
|
36
|
+
container_name: {{name}}_api
|
|
37
|
+
restart: unless-stopped
|
|
38
|
+
ports:
|
|
39
|
+
- "8000:8000"
|
|
40
|
+
environment:
|
|
41
|
+
DEBUG: "false"
|
|
42
|
+
{{/if}}
|
|
32
43
|
|
|
33
44
|
volumes:
|
|
34
45
|
postgres_data:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
## Stack
|
|
6
6
|
|
|
7
|
-
{{#if
|
|
7
|
+
{{#if springBoot}}
|
|
8
8
|
- **Backend:** Spring Boot {{versions.springBoot}} / Java 21
|
|
9
9
|
{{/if}}
|
|
10
|
+
{{#if fastapi}}
|
|
11
|
+
- **Backend:** FastAPI / Python 3.12
|
|
12
|
+
{{/if}}
|
|
10
13
|
{{#if frontend}}
|
|
11
14
|
- **Frontend:** Angular {{versions.angular}} / PrimeNG {{versions.primeng}}
|
|
12
15
|
{{/if}}
|
|
@@ -22,16 +25,24 @@
|
|
|
22
25
|
docker compose up -d
|
|
23
26
|
|
|
24
27
|
{{/if}}
|
|
25
|
-
{{#if
|
|
26
|
-
# Démarrer le backend
|
|
28
|
+
{{#if springBoot}}
|
|
29
|
+
# Démarrer le backend (port 8080)
|
|
27
30
|
cd backend && ./mvnw spring-boot:run
|
|
28
31
|
|
|
32
|
+
{{/if}}
|
|
33
|
+
{{#if fastapi}}
|
|
34
|
+
# Installer les dépendances Python
|
|
35
|
+
cd backend && pip install -r requirements.txt
|
|
36
|
+
|
|
37
|
+
# Démarrer le backend (port 8000)
|
|
38
|
+
uvicorn app.main:app --reload
|
|
39
|
+
|
|
29
40
|
{{/if}}
|
|
30
41
|
{{#if frontend}}
|
|
31
|
-
# Démarrer le frontend
|
|
42
|
+
# Démarrer le frontend (port 4200)
|
|
32
43
|
cd frontend && npm install && ng serve
|
|
33
44
|
{{/if}}
|
|
34
45
|
```
|
|
35
46
|
|
|
36
47
|
---
|
|
37
|
-
*Généré avec [ForgeKit](https://github.com/
|
|
48
|
+
*Généré avec [ForgeKit](https://github.com/salimomrani/forgekit)*
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export type UIFramework = "primeng" | "tailwind" | "none";
|
|
2
2
|
export type PrimeNGPreset = "Aura" | "Lara" | "Nora";
|
|
3
|
+
export type BackendType = "spring-boot" | "fastapi" | null;
|
|
3
4
|
export interface ProjectConfig {
|
|
4
5
|
name: string;
|
|
5
6
|
groupId: string;
|
|
6
7
|
description: string;
|
|
7
|
-
|
|
8
|
+
backendType: BackendType;
|
|
8
9
|
frontend: boolean;
|
|
9
10
|
flyway: boolean;
|
|
10
11
|
openapi: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAElB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IAEnB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IAEd,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/versions.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { BackendType } from "./types.js";
|
|
1
2
|
export interface ResolvedVersions {
|
|
2
3
|
springBoot: string;
|
|
3
4
|
springDoc: string;
|
|
@@ -14,7 +15,7 @@ export interface ResolvedVersions {
|
|
|
14
15
|
tailwind: string;
|
|
15
16
|
}
|
|
16
17
|
export declare function resolveVersions(opts: {
|
|
17
|
-
|
|
18
|
+
backendType: BackendType;
|
|
18
19
|
frontend: boolean;
|
|
19
20
|
}): Promise<ResolvedVersions>;
|
|
20
21
|
//# sourceMappingURL=versions.d.ts.map
|
package/dist/versions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAE/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkDD,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmE5B"}
|
package/dist/versions.js
CHANGED
|
@@ -47,7 +47,7 @@ export async function resolveVersions(opts) {
|
|
|
47
47
|
const versions = { ...FALLBACK_VERSIONS };
|
|
48
48
|
process.stdout.write(chalk.gray(" Résolution des dernières versions..."));
|
|
49
49
|
const tasks = [];
|
|
50
|
-
if (opts.
|
|
50
|
+
if (opts.backendType === "spring-boot") {
|
|
51
51
|
tasks.push(fetchMavenVersion("org.springframework.boot", "spring-boot-starter-parent").then((v) => {
|
|
52
52
|
if (v)
|
|
53
53
|
versions.springBoot = v;
|
package/dist/versions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"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"}
|