@iconsulting-dev/forgekit 1.5.0 → 1.6.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/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.js +1 -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/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
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -11,7 +11,7 @@ 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
15
|
frontend: this.config.frontend,
|
|
16
16
|
docker: this.config.docker,
|
|
17
17
|
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,
|
|
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,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
|
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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"}
|