phos 1.0.0 → 1.0.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/CHANGELOG.md +18 -0
- package/README.md +67 -42
- package/dist/cli.js +351 -171
- package/dist/cli.js.map +1 -1
- package/dist/generators/backends/elysia.d.ts +1 -1
- package/dist/generators/backends/elysia.d.ts.map +1 -1
- package/dist/generators/backends/elysia.js +22 -127
- package/dist/generators/backends/elysia.js.map +1 -1
- package/dist/generators/backends/fastapi.d.ts +1 -1
- package/dist/generators/backends/fastapi.d.ts.map +1 -1
- package/dist/generators/backends/fastapi.js +40 -148
- package/dist/generators/backends/fastapi.js.map +1 -1
- package/dist/generators/frontends/astro.d.ts +1 -1
- package/dist/generators/frontends/astro.d.ts.map +1 -1
- package/dist/generators/frontends/astro.js +17 -295
- package/dist/generators/frontends/astro.js.map +1 -1
- package/dist/generators/frontends/nextjs.d.ts +1 -1
- package/dist/generators/frontends/nextjs.d.ts.map +1 -1
- package/dist/generators/frontends/nextjs.js +17 -266
- package/dist/generators/frontends/nextjs.js.map +1 -1
- package/dist/generators/frontends/svelte.d.ts +1 -1
- package/dist/generators/frontends/svelte.d.ts.map +1 -1
- package/dist/generators/frontends/svelte.js +18 -316
- package/dist/generators/frontends/svelte.js.map +1 -1
- package/dist/generators/monorepo.d.ts +1 -1
- package/dist/generators/monorepo.d.ts.map +1 -1
- package/dist/generators/monorepo.js +369 -202
- package/dist/generators/monorepo.js.map +1 -1
- package/dist/generators/single.d.ts +1 -1
- package/dist/generators/single.d.ts.map +1 -1
- package/dist/generators/single.js +335 -134
- package/dist/generators/single.js.map +1 -1
- package/dist/templates/backend/elysia/src/api/user_api.d.ts +1 -0
- package/dist/templates/backend/elysia/src/api/user_api.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/api/user_api.js +2 -0
- package/dist/templates/backend/elysia/src/api/user_api.js.map +1 -0
- package/dist/templates/backend/elysia/src/db.d.ts +3 -0
- package/dist/templates/backend/elysia/src/db.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/db.js +13 -0
- package/dist/templates/backend/elysia/src/db.js.map +1 -0
- package/dist/templates/backend/elysia/src/index.d.ts +4 -0
- package/dist/templates/backend/elysia/src/index.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/index.js +55 -0
- package/dist/templates/backend/elysia/src/index.js.map +1 -0
- package/dist/templates/backend/elysia/src/service/user_service.d.ts +1 -0
- package/dist/templates/backend/elysia/src/service/user_service.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/service/user_service.js +2 -0
- package/dist/templates/backend/elysia/src/service/user_service.js.map +1 -0
- package/dist/templates/backend/elysia/src/sql/user_sql.d.ts +1 -0
- package/dist/templates/backend/elysia/src/sql/user_sql.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/sql/user_sql.js +2 -0
- package/dist/templates/backend/elysia/src/sql/user_sql.js.map +1 -0
- package/dist/templates/backend/elysia/src/types/user_type.d.ts +1 -0
- package/dist/templates/backend/elysia/src/types/user_type.d.ts.map +1 -0
- package/dist/templates/backend/elysia/src/types/user_type.js +2 -0
- package/dist/templates/backend/elysia/src/types/user_type.js.map +1 -0
- package/dist/templates/frontend/nextjs/app/layout.d.ts +7 -0
- package/dist/templates/frontend/nextjs/app/layout.d.ts.map +1 -0
- package/dist/templates/frontend/nextjs/app/layout.js +22 -0
- package/dist/templates/frontend/nextjs/app/layout.js.map +1 -0
- package/dist/templates/frontend/nextjs/app/page.d.ts +2 -0
- package/dist/templates/frontend/nextjs/app/page.d.ts.map +1 -0
- package/dist/templates/frontend/nextjs/app/page.js +15 -0
- package/dist/templates/frontend/nextjs/app/page.js.map +1 -0
- package/dist/templates/frontend/nextjs/next.config.d.ts +4 -0
- package/dist/templates/frontend/nextjs/next.config.d.ts.map +1 -0
- package/dist/templates/frontend/nextjs/next.config.js +5 -0
- package/dist/templates/frontend/nextjs/next.config.js.map +1 -0
- package/dist/templates/frontend/svelte/src/lib/index.d.ts +1 -0
- package/dist/templates/frontend/svelte/src/lib/index.d.ts.map +1 -0
- package/dist/templates/frontend/svelte/src/lib/index.js +3 -0
- package/dist/templates/frontend/svelte/src/lib/index.js.map +1 -0
- package/dist/templates/frontend/svelte/vite.config.d.ts +3 -0
- package/dist/templates/frontend/svelte/vite.config.d.ts.map +1 -0
- package/dist/templates/frontend/svelte/vite.config.js +5 -0
- package/dist/templates/frontend/svelte/vite.config.js.map +1 -0
- package/dist/utils/helpers.d.ts +10 -10
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +77 -34
- package/dist/utils/helpers.js.map +1 -1
- package/package.json +3 -2
- package/tsconfig.json +1 -1
|
@@ -1,135 +1,30 @@
|
|
|
1
|
-
import { createDirectory,
|
|
1
|
+
import { createDirectory, logSuccess, copyTemplate, capitalize, } from "../../utils/helpers.js";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
async function removeFileIfExists(filePath) {
|
|
5
|
+
try {
|
|
6
|
+
if (await fs.pathExists(filePath)) {
|
|
7
|
+
await fs.unlink(filePath);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch (error) { }
|
|
11
|
+
}
|
|
2
12
|
export async function generateElysiaBackend(projectPath, config) {
|
|
3
13
|
const srcPath = `${projectPath}/src`;
|
|
4
14
|
await createDirectory(srcPath);
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
await generateBunConfig(projectPath, config);
|
|
11
|
-
if (config.backend.eslint) {
|
|
12
|
-
await generateEslintConfig(projectPath, config);
|
|
13
|
-
}
|
|
14
|
-
if (config.backend.prettier) {
|
|
15
|
-
await generatePrettierConfig(projectPath, config);
|
|
16
|
-
}
|
|
17
|
-
logSuccess(`Elysia backend generated`);
|
|
18
|
-
}
|
|
19
|
-
async function generateIndexFile(srcPath, extension, importType, config) {
|
|
20
|
-
const typeAnnotations = config.backend.typescript ? ": string" : "";
|
|
21
|
-
const returnType = config.backend.typescript ? ": Response" : "";
|
|
22
|
-
const content = `import { Elysia } from 'elysia';
|
|
23
|
-
import { cors } from '@elysiajs/cors';
|
|
24
|
-
|
|
25
|
-
const app = new Elysia()
|
|
26
|
-
.use(cors())
|
|
27
|
-
.get('/', () => 'Hello from Phos! 🚀')
|
|
28
|
-
.get('/api/hello', () => ({
|
|
29
|
-
message: 'Hello from the API!',
|
|
30
|
-
timestamp: new Date().toISOString(),
|
|
31
|
-
}))
|
|
32
|
-
.listen(3000);
|
|
33
|
-
|
|
34
|
-
console.log(\`🦊 Elysia is running at http://\${app.server?.hostname}:\${app.server?.port}\`);
|
|
35
|
-
`;
|
|
36
|
-
await writeFile(`${srcPath}/index.${extension}`, content);
|
|
37
|
-
}
|
|
38
|
-
async function generatePackageJson(projectPath, config) {
|
|
39
|
-
const dependencies = {
|
|
40
|
-
elysia: "^1.0.0",
|
|
41
|
-
"@elysiajs/cors": "^1.0.0",
|
|
15
|
+
const templatePath = resolve(process.cwd(), "src/templates/backend/elysia");
|
|
16
|
+
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
17
|
+
const templateData = {
|
|
18
|
+
...config,
|
|
19
|
+
backendName,
|
|
42
20
|
};
|
|
43
|
-
|
|
44
|
-
if (config.backend
|
|
45
|
-
|
|
46
|
-
devDependencies["@typescript-eslint/parser"] = "^7.0.0";
|
|
47
|
-
devDependencies["@typescript-eslint/eslint-plugin"] = "^7.0.0";
|
|
21
|
+
await copyTemplate(templatePath, projectPath, templateData);
|
|
22
|
+
if (!config.backend?.eslint) {
|
|
23
|
+
await removeFileIfExists(`${projectPath}/.eslintrc.js`);
|
|
48
24
|
}
|
|
49
|
-
if (config.backend
|
|
50
|
-
|
|
25
|
+
if (!config.backend?.prettier) {
|
|
26
|
+
await removeFileIfExists(`${projectPath}/.prettierrc`);
|
|
51
27
|
}
|
|
52
|
-
|
|
53
|
-
devDependencies["typescript"] = "^5.3.0";
|
|
54
|
-
}
|
|
55
|
-
const content = JSON.stringify({
|
|
56
|
-
name: config.projectType === "monorepo" ? "backend" : config.projectName,
|
|
57
|
-
version: "0.1.0",
|
|
58
|
-
type: "module",
|
|
59
|
-
scripts: {
|
|
60
|
-
dev: "bun run src/index.ts",
|
|
61
|
-
start: "bun run src/index.ts",
|
|
62
|
-
...(config.backend.eslint ? { lint: "eslint src --ext .ts" } : {}),
|
|
63
|
-
...(config.backend.prettier ? { format: 'prettier --write "src/**/*.ts"' } : {}),
|
|
64
|
-
},
|
|
65
|
-
dependencies,
|
|
66
|
-
devDependencies,
|
|
67
|
-
}, null, 2);
|
|
68
|
-
await writeFile(`${projectPath}/package.json`, content);
|
|
69
|
-
}
|
|
70
|
-
async function generateTsConfig(projectPath, config) {
|
|
71
|
-
if (!config.backend.typescript)
|
|
72
|
-
return;
|
|
73
|
-
const content = JSON.stringify({
|
|
74
|
-
compilerOptions: {
|
|
75
|
-
target: "ES2022",
|
|
76
|
-
module: "ES2022",
|
|
77
|
-
lib: ["ES2022"],
|
|
78
|
-
moduleResolution: "bundler",
|
|
79
|
-
strict: true,
|
|
80
|
-
esModuleInterop: true,
|
|
81
|
-
skipLibCheck: true,
|
|
82
|
-
forceConsistentCasingInFileNames: true,
|
|
83
|
-
resolveJsonModule: true,
|
|
84
|
-
declaration: true,
|
|
85
|
-
declarationMap: true,
|
|
86
|
-
sourceMap: true,
|
|
87
|
-
},
|
|
88
|
-
include: ["src/**/*"],
|
|
89
|
-
}, null, 2);
|
|
90
|
-
await writeFile(`${projectPath}/tsconfig.json`, content);
|
|
91
|
-
}
|
|
92
|
-
async function generateBunConfig(projectPath, config) {
|
|
93
|
-
const content = JSON.stringify({
|
|
94
|
-
name: config.projectType === "monorepo" ? "backend" : config.projectName,
|
|
95
|
-
scripts: {
|
|
96
|
-
dev: "bun run src/index.ts",
|
|
97
|
-
start: "bun run src/index.ts",
|
|
98
|
-
},
|
|
99
|
-
}, null, 2);
|
|
100
|
-
await writeFile(`${projectPath}/bunfig.toml`, content);
|
|
101
|
-
}
|
|
102
|
-
async function generateEslintConfig(projectPath, config) {
|
|
103
|
-
if (!config.backend.eslint)
|
|
104
|
-
return;
|
|
105
|
-
const content = `module.exports = {
|
|
106
|
-
root: true,
|
|
107
|
-
parser: '@typescript-eslint/parser',
|
|
108
|
-
extends: [
|
|
109
|
-
'eslint:recommended',
|
|
110
|
-
'plugin:@typescript-eslint/recommended',
|
|
111
|
-
],
|
|
112
|
-
env: {
|
|
113
|
-
node: true,
|
|
114
|
-
es2022: true,
|
|
115
|
-
},
|
|
116
|
-
parserOptions: {
|
|
117
|
-
ecmaVersion: 'latest',
|
|
118
|
-
sourceType: 'module',
|
|
119
|
-
},
|
|
120
|
-
};`;
|
|
121
|
-
await writeFile(`${projectPath}/.eslintrc.js`, content);
|
|
122
|
-
}
|
|
123
|
-
async function generatePrettierConfig(projectPath, config) {
|
|
124
|
-
if (!config.backend.prettier)
|
|
125
|
-
return;
|
|
126
|
-
const content = JSON.stringify({
|
|
127
|
-
semi: false,
|
|
128
|
-
singleQuote: true,
|
|
129
|
-
tabWidth: 2,
|
|
130
|
-
trailingComma: "es5",
|
|
131
|
-
printWidth: 80,
|
|
132
|
-
}, null, 2);
|
|
133
|
-
await writeFile(`${projectPath}/.prettierrc`, content);
|
|
28
|
+
logSuccess(`Elysia backend generated`);
|
|
134
29
|
}
|
|
135
30
|
//# sourceMappingURL=elysia.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,8BAA8B,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IAEhE,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,WAAW;KACZ,CAAC;IAEF,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,YAAkD,CAAC,CAAC;IAElG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,MAAM,kBAAkB,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC9B,MAAM,kBAAkB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CAAC,0BAA0B,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type GeneratorConfig } from "
|
|
1
|
+
import { type GeneratorConfig } from "../../utils/helpers.js";
|
|
2
2
|
export declare function generateFastAPIBackend(projectPath: string, config: GeneratorConfig): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=fastapi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastapi.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fastapi.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EAGrB,MAAM,oBAAoB,CAAC;AAiB5B,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -1,158 +1,50 @@
|
|
|
1
|
-
import { createDirectory,
|
|
1
|
+
import { createDirectory, logSuccess, logInfo, copyTemplate, capitalize, getPackageManagerInstallCmd, getPackageManagerRunCmd, } from "../../utils/helpers.js";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
async function removeFileIfExists(filePath) {
|
|
5
|
+
try {
|
|
6
|
+
if (await fs.pathExists(filePath)) {
|
|
7
|
+
await fs.unlink(filePath);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
catch (error) { }
|
|
11
|
+
}
|
|
12
|
+
async function copyAndRenameFile(srcPath, destPath) {
|
|
13
|
+
const content = await fs.readFile(srcPath, "utf-8");
|
|
14
|
+
await fs.writeFile(destPath, content, "utf-8");
|
|
15
|
+
}
|
|
2
16
|
export async function generateFastAPIBackend(projectPath, config) {
|
|
3
17
|
const srcPath = `${projectPath}/src`;
|
|
4
18
|
await createDirectory(srcPath);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
19
|
+
const templatePath = resolve(process.cwd(), "src/templates/backend/fastapi");
|
|
20
|
+
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
21
|
+
const templateData = {
|
|
22
|
+
...config,
|
|
23
|
+
backendName,
|
|
24
|
+
};
|
|
25
|
+
await copyTemplate(templatePath, projectPath, templateData);
|
|
26
|
+
if (!config.backend?.eslint) {
|
|
27
|
+
await removeFileIfExists(`${projectPath}/.pylintrc`);
|
|
11
28
|
}
|
|
12
|
-
if (config.backend
|
|
13
|
-
await
|
|
29
|
+
if (config.backend?.prettier) {
|
|
30
|
+
await copyAndRenameFile(`${templatePath}/pyproject_prettier.toml`, `${projectPath}/pyproject.toml`);
|
|
14
31
|
}
|
|
32
|
+
else {
|
|
33
|
+
await removeFileIfExists(`${projectPath}/pyproject_prettier.toml`);
|
|
34
|
+
}
|
|
35
|
+
const installCmd = getPackageManagerInstallCmd(config.backend?.packageManager || "pip");
|
|
36
|
+
const runCmd = getPackageManagerRunCmd(config.backend?.packageManager || "pip", "dev");
|
|
15
37
|
logSuccess(`FastAPI backend generated`);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
app = FastAPI(
|
|
23
|
-
title="${config.projectType === "monorepo" ? "Backend API" : config.projectName}",
|
|
24
|
-
description="Generated by Phos",
|
|
25
|
-
version="0.1.0"
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
app.add_middleware(
|
|
29
|
-
CORSMiddleware,
|
|
30
|
-
allow_origins=["*"],
|
|
31
|
-
allow_credentials=True,
|
|
32
|
-
allow_methods=["*"],
|
|
33
|
-
allow_headers=["*"],
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
@app.get("/")
|
|
37
|
-
async def root():
|
|
38
|
-
return {"message": "Hello from Phos! 🚀"}
|
|
39
|
-
|
|
40
|
-
@app.get("/api/hello")
|
|
41
|
-
async def hello():
|
|
42
|
-
return {
|
|
43
|
-
"message": "Hello from API!",
|
|
44
|
-
"timestamp": datetime.now().isoformat()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if __name__ == "__main__":
|
|
48
|
-
import uvicorn
|
|
49
|
-
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
50
|
-
`;
|
|
51
|
-
await writeFile(`${srcPath}/main.py`, content);
|
|
52
|
-
}
|
|
53
|
-
async function generateRequirementsTxt(projectPath, config) {
|
|
54
|
-
const requirements = [
|
|
55
|
-
"fastapi>=0.104.0",
|
|
56
|
-
"uvicorn[standard]>=0.24.0",
|
|
57
|
-
"pydantic>=2.0.0",
|
|
58
|
-
"python-multipart>=0.0.6",
|
|
59
|
-
];
|
|
60
|
-
if (config.backend.eslint) {
|
|
61
|
-
requirements.push("pylint>=3.0.0");
|
|
38
|
+
logInfo("");
|
|
39
|
+
logInfo(`📦 Next steps:`);
|
|
40
|
+
logInfo(` cd ${backendName}`);
|
|
41
|
+
if (config.backend?.packageManager === "venv") {
|
|
42
|
+
logInfo(` chmod +x setup.sh`);
|
|
43
|
+
logInfo(` ./setup.sh`);
|
|
62
44
|
}
|
|
63
|
-
|
|
64
|
-
|
|
45
|
+
else {
|
|
46
|
+
logInfo(` ${installCmd}`);
|
|
47
|
+
logInfo(` ${runCmd}`);
|
|
65
48
|
}
|
|
66
|
-
await writeFile(`${projectPath}/requirements.txt`, requirements.join("\n"));
|
|
67
|
-
}
|
|
68
|
-
async function generatePyProject(projectPath, config) {
|
|
69
|
-
const content = `[build-system]
|
|
70
|
-
requires = ["hatchling"]
|
|
71
|
-
build-backend = "hatchling.build"
|
|
72
|
-
|
|
73
|
-
[project]
|
|
74
|
-
name = "${config.projectType === "monorepo" ? "backend" : config.projectName}"
|
|
75
|
-
version = "0.1.0"
|
|
76
|
-
description = "Generated by Phos"
|
|
77
|
-
requires-python = ">=3.10"
|
|
78
|
-
dependencies = [
|
|
79
|
-
"fastapi>=0.104.0",
|
|
80
|
-
"uvicorn[standard]>=0.24.0",
|
|
81
|
-
"pydantic>=2.0.0",
|
|
82
|
-
"python-multipart>=0.0.6",
|
|
83
|
-
]
|
|
84
|
-
|
|
85
|
-
[tool.hatch.build.targets.wheel]
|
|
86
|
-
packages = ["src"]
|
|
87
|
-
`;
|
|
88
|
-
await writeFile(`${projectPath}/pyproject.toml`, content);
|
|
89
|
-
}
|
|
90
|
-
async function generateReadme(projectPath, config) {
|
|
91
|
-
const content = `# FastAPI Backend
|
|
92
|
-
|
|
93
|
-
Generated by [Phos](https://github.com/yourusername/phos).
|
|
94
|
-
|
|
95
|
-
## Getting Started
|
|
96
|
-
|
|
97
|
-
\`\`\`bash
|
|
98
|
-
# Install dependencies
|
|
99
|
-
pip install -r requirements.txt
|
|
100
|
-
|
|
101
|
-
# Run development server
|
|
102
|
-
uvicorn src.main:app --reload --port 8000
|
|
103
|
-
\`\`\`
|
|
104
|
-
|
|
105
|
-
## API Documentation
|
|
106
|
-
|
|
107
|
-
Once the server is running, visit:
|
|
108
|
-
- Swagger UI: http://localhost:8000/docs
|
|
109
|
-
- ReDoc: http://localhost:8000/redoc
|
|
110
|
-
|
|
111
|
-
## Available Scripts
|
|
112
|
-
|
|
113
|
-
- \`uvicorn src.main:app --reload\` - Start development server
|
|
114
|
-
- \`uvicorn src.main:app\` - Start production server
|
|
115
|
-
${config.backend.eslint ? "- \`pylint src\` - Run linter\n" : ""}${config.backend.prettier ? "- \`black src\` - Format code\n" : ""}
|
|
116
|
-
|
|
117
|
-
## Tech Stack
|
|
118
|
-
|
|
119
|
-
- Framework: FastAPI
|
|
120
|
-
- Python: 3.10+
|
|
121
|
-
- ESLint: ${config.backend.eslint ? "Yes" : "No"}
|
|
122
|
-
- Prettier (Black): ${config.backend.prettier ? "Yes" : "No"}
|
|
123
|
-
`;
|
|
124
|
-
await writeFile(`${projectPath}/README.md`, content);
|
|
125
|
-
}
|
|
126
|
-
async function generatePylintrc(projectPath) {
|
|
127
|
-
const content = `[MASTER]
|
|
128
|
-
disable=C0114,C0115,C0116,W0611
|
|
129
|
-
`;
|
|
130
|
-
await writeFile(`${projectPath}/.pylintrc`, content);
|
|
131
|
-
}
|
|
132
|
-
async function generatePyprojectToml(projectPath, config) {
|
|
133
|
-
if (!config.backend.prettier)
|
|
134
|
-
return;
|
|
135
|
-
const content = `[tool.black]
|
|
136
|
-
line-length = 88
|
|
137
|
-
target-version = ['py310']
|
|
138
|
-
include = '\\.pyi?$'
|
|
139
|
-
extend-exclude = '''
|
|
140
|
-
/(
|
|
141
|
-
# directories
|
|
142
|
-
\\.eggs
|
|
143
|
-
| \\.git
|
|
144
|
-
| \\.hg
|
|
145
|
-
| \\.mypy_cache
|
|
146
|
-
| \\.tox
|
|
147
|
-
| \\.venv
|
|
148
|
-
| build
|
|
149
|
-
| dist
|
|
150
|
-
)/
|
|
151
|
-
'''
|
|
152
|
-
|
|
153
|
-
[tool.isort]
|
|
154
|
-
profile = "black"
|
|
155
|
-
`;
|
|
156
|
-
await writeFile(`${projectPath}/pyproject.toml`, content);
|
|
157
49
|
}
|
|
158
50
|
//# sourceMappingURL=fastapi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastapi.js","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fastapi.js","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EAEV,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAgB;IAChE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,+BAA+B,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IAEhE,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,WAAW;KACZ,CAAC;IAEF,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,YAAkD,CAAC,CAAC;IAElG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,MAAM,kBAAkB,CAAC,GAAG,WAAW,YAAY,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7B,MAAM,iBAAiB,CACrB,GAAG,YAAY,0BAA0B,EACzC,GAAG,WAAW,iBAAiB,CAChC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,GAAG,WAAW,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,KAAK,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvF,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1B,OAAO,CAAC,QAAQ,WAAW,EAAE,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC/B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAY5B,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|