phos 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -0
- package/AGENTS.md +172 -0
- package/CHANGELOG.md +184 -0
- package/LICENSE +21 -0
- package/README.md +279 -0
- package/bun.lock +125 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +255 -0
- package/dist/cli.js.map +1 -0
- package/dist/generators/backends/elysia.d.ts +3 -0
- package/dist/generators/backends/elysia.d.ts.map +1 -0
- package/dist/generators/backends/elysia.js +135 -0
- package/dist/generators/backends/elysia.js.map +1 -0
- package/dist/generators/backends/fastapi.d.ts +3 -0
- package/dist/generators/backends/fastapi.d.ts.map +1 -0
- package/dist/generators/backends/fastapi.js +158 -0
- package/dist/generators/backends/fastapi.js.map +1 -0
- package/dist/generators/frontends/astro.d.ts +3 -0
- package/dist/generators/frontends/astro.d.ts.map +1 -0
- package/dist/generators/frontends/astro.js +303 -0
- package/dist/generators/frontends/astro.js.map +1 -0
- package/dist/generators/frontends/nextjs.d.ts +3 -0
- package/dist/generators/frontends/nextjs.d.ts.map +1 -0
- package/dist/generators/frontends/nextjs.js +274 -0
- package/dist/generators/frontends/nextjs.js.map +1 -0
- package/dist/generators/frontends/svelte.d.ts +3 -0
- package/dist/generators/frontends/svelte.d.ts.map +1 -0
- package/dist/generators/frontends/svelte.js +324 -0
- package/dist/generators/frontends/svelte.js.map +1 -0
- package/dist/generators/monorepo.d.ts +3 -0
- package/dist/generators/monorepo.d.ts.map +1 -0
- package/dist/generators/monorepo.js +320 -0
- package/dist/generators/monorepo.js.map +1 -0
- package/dist/generators/single.d.ts +3 -0
- package/dist/generators/single.d.ts.map +1 -0
- package/dist/generators/single.js +229 -0
- package/dist/generators/single.js.map +1 -0
- package/dist/utils/helpers.d.ts +38 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +109 -0
- package/dist/utils/helpers.js.map +1 -0
- package/package.json +46 -0
- package/src/cli.ts +500 -0
- package/src/generators/backends/elysia.ts +45 -0
- package/src/generators/backends/fastapi.ts +71 -0
- package/src/generators/frontends/astro.ts +37 -0
- package/src/generators/frontends/nextjs.ts +37 -0
- package/src/generators/frontends/svelte.ts +38 -0
- package/src/generators/monorepo.ts +529 -0
- package/src/generators/single.ts +465 -0
- package/src/templates/backend/elysia/README.md +15 -0
- package/src/templates/backend/elysia/package.json +26 -0
- package/src/templates/backend/elysia/src/api/user_api.ts +0 -0
- package/src/templates/backend/elysia/src/db.ts +17 -0
- package/src/templates/backend/elysia/src/index.ts +68 -0
- package/src/templates/backend/elysia/src/service/user_service.ts +0 -0
- package/src/templates/backend/elysia/src/sql/user_sql.ts +0 -0
- package/src/templates/backend/elysia/src/types/user_type.ts +0 -0
- package/src/templates/backend/elysia/tsconfig.json +103 -0
- package/src/templates/backend/fastapi/.pylintrc +2 -0
- package/src/templates/backend/fastapi/README.md +33 -0
- package/src/templates/backend/fastapi/pyproject.toml +9 -0
- package/src/templates/backend/fastapi/pyproject_prettier.toml +20 -0
- package/src/templates/backend/fastapi/requirements.txt +15 -0
- package/src/templates/backend/fastapi/setup.sh +23 -0
- package/src/templates/backend/fastapi/src/api/user_api.py +0 -0
- package/src/templates/backend/fastapi/src/db.py +31 -0
- package/src/templates/backend/fastapi/src/main.py +53 -0
- package/src/templates/backend/fastapi/src/service/user_service.py +0 -0
- package/src/templates/backend/fastapi/src/sql/user_sql.py +0 -0
- package/src/templates/backend/fastapi/src/types/user_type.py +0 -0
- package/src/templates/frontend/astro/README.md +46 -0
- package/src/templates/frontend/astro/astro.config.mjs +5 -0
- package/src/templates/frontend/astro/package.json +28 -0
- package/src/templates/frontend/astro/public/favicon.ico +0 -0
- package/src/templates/frontend/astro/public/favicon.svg +9 -0
- package/src/templates/frontend/astro/src/assets/astro.svg +1 -0
- package/src/templates/frontend/astro/src/assets/background.svg +1 -0
- package/src/templates/frontend/astro/src/components/Welcome.astro +5 -0
- package/src/templates/frontend/astro/src/layouts/Layout.astro +23 -0
- package/src/templates/frontend/astro/src/pages/index.astro +8 -0
- package/src/templates/frontend/astro/tsconfig.json +5 -0
- package/src/templates/frontend/nextjs/README.md +36 -0
- package/src/templates/frontend/nextjs/app/favicon.ico +0 -0
- package/src/templates/frontend/nextjs/app/globals.css +26 -0
- package/src/templates/frontend/nextjs/app/layout.tsx +34 -0
- package/src/templates/frontend/nextjs/app/page.tsx +16 -0
- package/src/templates/frontend/nextjs/eslint.config.mjs +18 -0
- package/src/templates/frontend/nextjs/next.config.ts +7 -0
- package/src/templates/frontend/nextjs/package.json +28 -0
- package/src/templates/frontend/nextjs/postcss.config.mjs +7 -0
- package/src/templates/frontend/nextjs/public/file.svg +1 -0
- package/src/templates/frontend/nextjs/public/globe.svg +1 -0
- package/src/templates/frontend/nextjs/public/next.svg +1 -0
- package/src/templates/frontend/nextjs/public/vercel.svg +1 -0
- package/src/templates/frontend/nextjs/public/window.svg +1 -0
- package/src/templates/frontend/nextjs/tsconfig.json +34 -0
- package/src/templates/frontend/svelte/.prettierignore +9 -0
- package/src/templates/frontend/svelte/.prettierrc +19 -0
- package/src/templates/frontend/svelte/README.md +42 -0
- package/src/templates/frontend/svelte/eslint.config.js +39 -0
- package/src/templates/frontend/svelte/package.json +39 -0
- package/src/templates/frontend/svelte/src/app.d.ts +13 -0
- package/src/templates/frontend/svelte/src/app.html +11 -0
- package/src/templates/frontend/svelte/src/lib/assets/favicon.svg +1 -0
- package/src/templates/frontend/svelte/src/lib/index.ts +1 -0
- package/src/templates/frontend/svelte/src/routes/+layout.svelte +9 -0
- package/src/templates/frontend/svelte/src/routes/+page.svelte +2 -0
- package/src/templates/frontend/svelte/src/routes/layout.css +2 -0
- package/src/templates/frontend/svelte/static/robots.txt +3 -0
- package/src/templates/frontend/svelte/svelte.config.js +13 -0
- package/src/templates/frontend/svelte/tsconfig.json +20 -0
- package/src/templates/frontend/svelte/vite.config.ts +5 -0
- package/src/utils/helpers.ts +198 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { createDirectory, writeFile, getProjectPath, logStep, logSuccess, logInfo, installDependencies, initializeGit, } from '@/utils/helpers.js';
|
|
2
|
+
import { generateElysiaBackend } from "@/generators/backends/elysia.js";
|
|
3
|
+
import { generateFastAPIBackend } from "@/generators/backends/fastapi.js";
|
|
4
|
+
import { generateAstroFrontend } from "@/generators/frontends/astro.js";
|
|
5
|
+
import { generateSvelteFrontend } from "@/generators/frontends/svelte.js";
|
|
6
|
+
import { generateNextJSFrontend } from "@/generators/frontends/nextjs.js";
|
|
7
|
+
export async function generateMonorepo(config) {
|
|
8
|
+
const projectPath = getProjectPath(config.projectName);
|
|
9
|
+
logStep(`Creating monorepo at ${projectPath}`);
|
|
10
|
+
await createDirectory(projectPath);
|
|
11
|
+
const appsPath = `${projectPath}/apps`;
|
|
12
|
+
const packagesPath = `${projectPath}/packages`;
|
|
13
|
+
await createDirectory(appsPath);
|
|
14
|
+
await createDirectory(packagesPath);
|
|
15
|
+
await generateRootPackageJson(projectPath, config);
|
|
16
|
+
await generateWorkspaceConfig(projectPath, config);
|
|
17
|
+
await generateSharedTsConfig(projectPath);
|
|
18
|
+
await generateSharedEslintConfig(projectPath, config);
|
|
19
|
+
await generateSharedPrettierConfig(projectPath, config);
|
|
20
|
+
await generateGitIgnore(projectPath);
|
|
21
|
+
await generateReadme(projectPath, config);
|
|
22
|
+
const backendPath = `${appsPath}/backend`;
|
|
23
|
+
await createDirectory(backendPath);
|
|
24
|
+
switch (config.backend.framework) {
|
|
25
|
+
case "elysia":
|
|
26
|
+
await generateElysiaBackend(backendPath, config);
|
|
27
|
+
break;
|
|
28
|
+
case "fastapi":
|
|
29
|
+
await generateFastAPIBackend(backendPath, config);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
const frontendPath = `${appsPath}/frontend`;
|
|
33
|
+
await createDirectory(frontendPath);
|
|
34
|
+
switch (config.frontend.framework) {
|
|
35
|
+
case "astro":
|
|
36
|
+
await generateAstroFrontend(frontendPath, config);
|
|
37
|
+
break;
|
|
38
|
+
case "svelte":
|
|
39
|
+
await generateSvelteFrontend(frontendPath, config);
|
|
40
|
+
break;
|
|
41
|
+
case "nextjs":
|
|
42
|
+
await generateNextJSFrontend(frontendPath, config);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
await createDirectory(`${packagesPath}/shared`);
|
|
46
|
+
await generateSharedPackage(`${packagesPath}/shared`, config);
|
|
47
|
+
logSuccess("Backend created at apps/backend");
|
|
48
|
+
logSuccess("Frontend created at apps/frontend");
|
|
49
|
+
logSuccess("Shared packages configured");
|
|
50
|
+
logSuccess("Workspace configured");
|
|
51
|
+
if (config.git) {
|
|
52
|
+
await initializeGit(projectPath);
|
|
53
|
+
}
|
|
54
|
+
if (config.install) {
|
|
55
|
+
await installDependencies(projectPath, config.frontend.packageManager);
|
|
56
|
+
}
|
|
57
|
+
logInfo("\n📦 Next steps:");
|
|
58
|
+
logInfo(` cd ${config.projectName}`);
|
|
59
|
+
logInfo(` # Backend`);
|
|
60
|
+
logInfo(` cd apps/backend && ${config.backend.packageManager} install && ${config.backend.packageManager} run dev`);
|
|
61
|
+
logInfo(` # Frontend`);
|
|
62
|
+
logInfo(` cd apps/frontend && ${config.frontend.packageManager} install && ${config.frontend.packageManager} run dev`);
|
|
63
|
+
}
|
|
64
|
+
async function generateRootPackageJson(projectPath, config) {
|
|
65
|
+
const packageManager = config.frontend.packageManager;
|
|
66
|
+
const content = JSON.stringify({
|
|
67
|
+
name: config.projectName,
|
|
68
|
+
version: "0.1.0",
|
|
69
|
+
private: true,
|
|
70
|
+
type: "module",
|
|
71
|
+
scripts: {
|
|
72
|
+
dev: `${packageManager} run --filter "apps/*" dev`,
|
|
73
|
+
build: `${packageManager} run --filter "apps/*" build`,
|
|
74
|
+
lint: `${packageManager} run --filter "*" lint`,
|
|
75
|
+
format: 'prettier --write "**/*.{js,jsx,ts,tsx,json,css,md}"',
|
|
76
|
+
},
|
|
77
|
+
workspaces: ["apps/*", "packages/*"],
|
|
78
|
+
devDependencies: {
|
|
79
|
+
...(config.backend.eslint || config.frontend.eslint
|
|
80
|
+
? {
|
|
81
|
+
eslint: "^8.57.0",
|
|
82
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
83
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
84
|
+
}
|
|
85
|
+
: {}),
|
|
86
|
+
...(config.backend.prettier || config.frontend.prettier ? { prettier: "^3.2.0" } : {}),
|
|
87
|
+
...(config.backend.typescript || config.frontend.typescript
|
|
88
|
+
? { typescript: "^5.3.0" }
|
|
89
|
+
: {}),
|
|
90
|
+
},
|
|
91
|
+
}, null, 2);
|
|
92
|
+
await writeFile(`${projectPath}/package.json`, content);
|
|
93
|
+
logSuccess("Root package.json created");
|
|
94
|
+
}
|
|
95
|
+
async function generateWorkspaceConfig(projectPath, config) {
|
|
96
|
+
let content = "";
|
|
97
|
+
switch (config.frontend.packageManager) {
|
|
98
|
+
case "pnpm":
|
|
99
|
+
content = `packages:\n - 'apps/*'\n - 'packages/*'\n`;
|
|
100
|
+
await writeFile(`${projectPath}/pnpm-workspace.yaml`, content);
|
|
101
|
+
break;
|
|
102
|
+
case "yarn":
|
|
103
|
+
content = JSON.stringify({ workspaces: ["apps/*", "packages/*"] }, null, 2);
|
|
104
|
+
await writeFile(`${projectPath}/package.json`, content);
|
|
105
|
+
break;
|
|
106
|
+
case "npm":
|
|
107
|
+
case "bun":
|
|
108
|
+
await writeFile(`${projectPath}/.npmrc`, "workspaces=apps/* packages/*");
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
logSuccess("Workspace configuration created");
|
|
112
|
+
}
|
|
113
|
+
async function generateSharedTsConfig(projectPath) {
|
|
114
|
+
const content = JSON.stringify({
|
|
115
|
+
compilerOptions: {
|
|
116
|
+
target: "ES2022",
|
|
117
|
+
module: "ES2022",
|
|
118
|
+
lib: ["ES2022"],
|
|
119
|
+
moduleResolution: "bundler",
|
|
120
|
+
strict: true,
|
|
121
|
+
esModuleInterop: true,
|
|
122
|
+
skipLibCheck: true,
|
|
123
|
+
forceConsistentCasingInFileNames: true,
|
|
124
|
+
resolveJsonModule: true,
|
|
125
|
+
declaration: true,
|
|
126
|
+
declarationMap: true,
|
|
127
|
+
sourceMap: true,
|
|
128
|
+
composite: true,
|
|
129
|
+
},
|
|
130
|
+
references: [
|
|
131
|
+
{ path: "./apps/backend" },
|
|
132
|
+
{ path: "./apps/frontend" },
|
|
133
|
+
{ path: "./packages/shared" },
|
|
134
|
+
],
|
|
135
|
+
}, null, 2);
|
|
136
|
+
await writeFile(`${projectPath}/tsconfig.json`, content);
|
|
137
|
+
logSuccess("Shared TypeScript configuration created");
|
|
138
|
+
}
|
|
139
|
+
async function generateSharedEslintConfig(projectPath, config) {
|
|
140
|
+
if (!config.backend.eslint && !config.frontend.eslint)
|
|
141
|
+
return;
|
|
142
|
+
const content = `module.exports = {
|
|
143
|
+
root: true,
|
|
144
|
+
extends: ['eslint:recommended'],
|
|
145
|
+
env: {
|
|
146
|
+
node: true,
|
|
147
|
+
es2022: true,
|
|
148
|
+
},
|
|
149
|
+
parserOptions: {
|
|
150
|
+
ecmaVersion: 'latest',
|
|
151
|
+
sourceType: 'module',
|
|
152
|
+
},
|
|
153
|
+
};`;
|
|
154
|
+
await writeFile(`${projectPath}/.eslintrc.js`, content);
|
|
155
|
+
logSuccess("Shared ESLint configuration created");
|
|
156
|
+
}
|
|
157
|
+
async function generateSharedPrettierConfig(projectPath, config) {
|
|
158
|
+
if (!config.backend.prettier && !config.frontend.prettier)
|
|
159
|
+
return;
|
|
160
|
+
const content = JSON.stringify({
|
|
161
|
+
semi: false,
|
|
162
|
+
singleQuote: true,
|
|
163
|
+
tabWidth: 2,
|
|
164
|
+
trailingComma: "es5",
|
|
165
|
+
printWidth: 80,
|
|
166
|
+
}, null, 2);
|
|
167
|
+
await writeFile(`${projectPath}/.prettierrc`, content);
|
|
168
|
+
logSuccess("Shared Prettier configuration created");
|
|
169
|
+
}
|
|
170
|
+
async function generateGitIgnore(projectPath) {
|
|
171
|
+
const content = `# Dependencies
|
|
172
|
+
node_modules/
|
|
173
|
+
.pnp
|
|
174
|
+
.pnp.js
|
|
175
|
+
|
|
176
|
+
# Testing
|
|
177
|
+
coverage/
|
|
178
|
+
*.lcov
|
|
179
|
+
|
|
180
|
+
# Next.js
|
|
181
|
+
.next/
|
|
182
|
+
out/
|
|
183
|
+
|
|
184
|
+
# Production
|
|
185
|
+
build/
|
|
186
|
+
dist/
|
|
187
|
+
|
|
188
|
+
# Misc
|
|
189
|
+
.DS_Store
|
|
190
|
+
*.pem
|
|
191
|
+
|
|
192
|
+
# Debug
|
|
193
|
+
npm-debug.log*
|
|
194
|
+
yarn-debug.log*
|
|
195
|
+
yarn-error.log*
|
|
196
|
+
|
|
197
|
+
# Local env files
|
|
198
|
+
.env
|
|
199
|
+
.env.local
|
|
200
|
+
.env.development.local
|
|
201
|
+
.env.test.local
|
|
202
|
+
.env.production.local
|
|
203
|
+
|
|
204
|
+
# Vercel
|
|
205
|
+
.vercel
|
|
206
|
+
|
|
207
|
+
# TypeScript
|
|
208
|
+
*.tsbuildinfo
|
|
209
|
+
|
|
210
|
+
# IDE
|
|
211
|
+
.idea/
|
|
212
|
+
.vscode/
|
|
213
|
+
*.swp
|
|
214
|
+
*.swo
|
|
215
|
+
*~
|
|
216
|
+
`;
|
|
217
|
+
await writeFile(`${projectPath}/.gitignore`, content);
|
|
218
|
+
logSuccess(".gitignore created");
|
|
219
|
+
}
|
|
220
|
+
async function generateReadme(projectPath, config) {
|
|
221
|
+
const content = `# ${config.projectName}
|
|
222
|
+
|
|
223
|
+
This project was generated by [Phos](https://github.com/yourusername/phos).
|
|
224
|
+
|
|
225
|
+
## Project Structure
|
|
226
|
+
|
|
227
|
+
\`\`\`
|
|
228
|
+
.
|
|
229
|
+
├── apps/
|
|
230
|
+
│ ├── backend/ # ${config.backend.framework} backend
|
|
231
|
+
│ └── frontend/ # ${config.frontend.framework} frontend
|
|
232
|
+
├── packages/
|
|
233
|
+
│ └── shared/ # Shared utilities and types
|
|
234
|
+
└── package.json # Root package.json with workspace config
|
|
235
|
+
\`\`\`
|
|
236
|
+
|
|
237
|
+
## Getting Started
|
|
238
|
+
|
|
239
|
+
### Backend
|
|
240
|
+
|
|
241
|
+
\`\`\`bash
|
|
242
|
+
cd apps/backend
|
|
243
|
+
${config.backend.packageManager} install
|
|
244
|
+
${config.backend.packageManager} run dev
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
### Frontend
|
|
248
|
+
|
|
249
|
+
\`\`\`bash
|
|
250
|
+
cd apps/frontend
|
|
251
|
+
${config.frontend.packageManager} install
|
|
252
|
+
${config.frontend.packageManager} run dev
|
|
253
|
+
\`\`\`
|
|
254
|
+
|
|
255
|
+
## Available Scripts
|
|
256
|
+
|
|
257
|
+
- \`${config.frontend.packageManager} run dev\` - Start development servers
|
|
258
|
+
- \`${config.frontend.packageManager} run build\` - Build for production
|
|
259
|
+
- \`${config.frontend.packageManager} run lint\` - Run ESLint
|
|
260
|
+
- \`${config.frontend.packageManager} run format\` - Format code with Prettier
|
|
261
|
+
|
|
262
|
+
## Tech Stack
|
|
263
|
+
|
|
264
|
+
### Backend
|
|
265
|
+
- Framework: ${config.backend.framework}
|
|
266
|
+
- Package Manager: ${config.backend.packageManager}
|
|
267
|
+
- TypeScript: ${config.backend.typescript ? "Yes" : "No"}
|
|
268
|
+
- ESLint: ${config.backend.eslint ? "Yes" : "No"}
|
|
269
|
+
- Prettier: ${config.backend.prettier ? "Yes" : "No"}
|
|
270
|
+
|
|
271
|
+
### Frontend
|
|
272
|
+
- Framework: ${config.frontend.framework}
|
|
273
|
+
- Package Manager: ${config.frontend.packageManager}
|
|
274
|
+
- TypeScript: ${config.frontend.typescript ? "Yes" : "No"}
|
|
275
|
+
- ESLint: ${config.frontend.eslint ? "Yes" : "No"}
|
|
276
|
+
- Prettier: ${config.frontend.prettier ? "Yes" : "No"}
|
|
277
|
+
- CSS Framework: ${config.frontend.cssFramework}
|
|
278
|
+
- UI Components: ${config.frontend.uiComponents}
|
|
279
|
+
- Testing: ${config.frontend.testing}
|
|
280
|
+
`;
|
|
281
|
+
await writeFile(`${projectPath}/README.md`, content);
|
|
282
|
+
logSuccess("README.md created");
|
|
283
|
+
}
|
|
284
|
+
async function generateSharedPackage(packagePath, config) {
|
|
285
|
+
const content = JSON.stringify({
|
|
286
|
+
name: "@phos/shared",
|
|
287
|
+
version: "0.1.0",
|
|
288
|
+
type: "module",
|
|
289
|
+
main: "./dist/index.js",
|
|
290
|
+
types: "./dist/index.d.ts",
|
|
291
|
+
exports: {
|
|
292
|
+
".": {
|
|
293
|
+
types: "./dist/index.d.ts",
|
|
294
|
+
import: "./dist/index.js",
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
scripts: {
|
|
298
|
+
build: "tsc",
|
|
299
|
+
dev: "tsc --watch",
|
|
300
|
+
},
|
|
301
|
+
devDependencies: {
|
|
302
|
+
typescript: "^5.3.0",
|
|
303
|
+
},
|
|
304
|
+
}, null, 2);
|
|
305
|
+
await writeFile(`${packagePath}/package.json`, content);
|
|
306
|
+
const tsConfigContent = JSON.stringify({
|
|
307
|
+
extends: "../../tsconfig.json",
|
|
308
|
+
compilerOptions: {
|
|
309
|
+
composite: true,
|
|
310
|
+
outDir: "./dist",
|
|
311
|
+
rootDir: "./src",
|
|
312
|
+
},
|
|
313
|
+
include: ["src/**/*"],
|
|
314
|
+
}, null, 2);
|
|
315
|
+
await writeFile(`${packagePath}/tsconfig.json`, tsConfigContent);
|
|
316
|
+
await createDirectory(`${packagePath}/src`);
|
|
317
|
+
await writeFile(`${packagePath}/src/index.ts`, `export function hello(name: string): string {\n return \`Hello, \${name}!\`;\n}\n`);
|
|
318
|
+
logSuccess("Shared package created");
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=monorepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../../src/generators/monorepo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../src/generators/single.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAO5B,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD3E"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { createDirectory, writeFile, getProjectPath, logStep, logSuccess, logInfo, installDependencies, initializeGit, } from '@/utils/helpers.js';
|
|
2
|
+
import { generateElysiaBackend } from "@/generators/backends/elysia.js";
|
|
3
|
+
import { generateFastAPIBackend } from "@/generators/backends/fastapi.js";
|
|
4
|
+
import { generateAstroFrontend } from "@/generators/frontends/astro.js";
|
|
5
|
+
import { generateSvelteFrontend } from "@/generators/frontends/svelte.js";
|
|
6
|
+
import { generateNextJSFrontend } from "@/generators/frontends/nextjs.js";
|
|
7
|
+
export async function generateSingle(config) {
|
|
8
|
+
const projectPath = getProjectPath(config.projectName);
|
|
9
|
+
logStep(`Creating single project at ${projectPath}`);
|
|
10
|
+
await createDirectory(projectPath);
|
|
11
|
+
await generateRootPackageJson(projectPath, config);
|
|
12
|
+
await generateGitIgnore(projectPath);
|
|
13
|
+
await generateReadme(projectPath, config);
|
|
14
|
+
const srcPath = `${projectPath}/src`;
|
|
15
|
+
await createDirectory(srcPath);
|
|
16
|
+
switch (config.backend.framework) {
|
|
17
|
+
case "elysia":
|
|
18
|
+
await generateElysiaBackend(projectPath, config);
|
|
19
|
+
break;
|
|
20
|
+
case "fastapi":
|
|
21
|
+
await generateFastAPIBackend(projectPath, config);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
switch (config.frontend.framework) {
|
|
25
|
+
case "astro":
|
|
26
|
+
await generateAstroFrontend(projectPath, config);
|
|
27
|
+
break;
|
|
28
|
+
case "svelte":
|
|
29
|
+
await generateSvelteFrontend(projectPath, config);
|
|
30
|
+
break;
|
|
31
|
+
case "nextjs":
|
|
32
|
+
await generateNextJSFrontend(projectPath, config);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
if (config.git) {
|
|
36
|
+
await initializeGit(projectPath);
|
|
37
|
+
}
|
|
38
|
+
if (config.install) {
|
|
39
|
+
await installDependencies(projectPath, config.frontend.packageManager);
|
|
40
|
+
}
|
|
41
|
+
logSuccess("Project created successfully");
|
|
42
|
+
logInfo("\n📦 Next steps:");
|
|
43
|
+
logInfo(` cd ${config.projectName}`);
|
|
44
|
+
logInfo(` ${config.frontend.packageManager} install`);
|
|
45
|
+
logInfo(` ${config.frontend.packageManager} run dev`);
|
|
46
|
+
}
|
|
47
|
+
async function generateRootPackageJson(projectPath, config) {
|
|
48
|
+
const packageManager = config.frontend.packageManager;
|
|
49
|
+
const dependencies = {};
|
|
50
|
+
const devDependencies = {};
|
|
51
|
+
if (config.frontend.framework === "astro") {
|
|
52
|
+
dependencies["astro"] = "^4.0.0";
|
|
53
|
+
}
|
|
54
|
+
else if (config.frontend.framework === "svelte") {
|
|
55
|
+
dependencies["@sveltejs/kit"] = "^2.0.0";
|
|
56
|
+
dependencies["svelte"] = "^4.0.0";
|
|
57
|
+
}
|
|
58
|
+
else if (config.frontend.framework === "nextjs") {
|
|
59
|
+
dependencies["next"] = "^14.0.0";
|
|
60
|
+
dependencies["react"] = "^18.0.0";
|
|
61
|
+
dependencies["react-dom"] = "^18.0.0";
|
|
62
|
+
}
|
|
63
|
+
if (config.backend.framework === "elysia") {
|
|
64
|
+
dependencies["elysia"] = "^1.0.0";
|
|
65
|
+
dependencies["@elysiajs/cors"] = "^1.0.0";
|
|
66
|
+
}
|
|
67
|
+
if (config.frontend.cssFramework === "tailwind") {
|
|
68
|
+
dependencies["tailwindcss"] = "^3.4.0";
|
|
69
|
+
dependencies["postcss"] = "^8.4.0";
|
|
70
|
+
dependencies["autoprefixer"] = "^10.4.0";
|
|
71
|
+
}
|
|
72
|
+
if (config.frontend.uiComponents === "shadcn") {
|
|
73
|
+
dependencies["class-variance-authority"] = "^0.7.0";
|
|
74
|
+
dependencies["clsx"] = "^2.1.0";
|
|
75
|
+
dependencies["tailwind-merge"] = "^2.2.0";
|
|
76
|
+
}
|
|
77
|
+
else if (config.frontend.uiComponents === "radix") {
|
|
78
|
+
dependencies["@radix-ui/react-slot"] = "^1.0.0";
|
|
79
|
+
}
|
|
80
|
+
if (config.frontend.testing === "vitest" || config.frontend.testing === "both") {
|
|
81
|
+
devDependencies["vitest"] = "^1.0.0";
|
|
82
|
+
devDependencies["@vitest/ui"] = "^1.0.0";
|
|
83
|
+
}
|
|
84
|
+
if (config.frontend.testing === "playwright" || config.frontend.testing === "both") {
|
|
85
|
+
devDependencies["@playwright/test"] = "^1.40.0";
|
|
86
|
+
}
|
|
87
|
+
if (config.frontend.eslint) {
|
|
88
|
+
devDependencies["eslint"] = "^8.57.0";
|
|
89
|
+
devDependencies["@typescript-eslint/parser"] = "^7.0.0";
|
|
90
|
+
devDependencies["@typescript-eslint/eslint-plugin"] = "^7.0.0";
|
|
91
|
+
}
|
|
92
|
+
if (config.frontend.prettier) {
|
|
93
|
+
devDependencies["prettier"] = "^3.2.0";
|
|
94
|
+
}
|
|
95
|
+
if (config.frontend.typescript) {
|
|
96
|
+
devDependencies["typescript"] = "^5.3.0";
|
|
97
|
+
}
|
|
98
|
+
const scripts = {
|
|
99
|
+
dev: "astro dev",
|
|
100
|
+
build: "astro build",
|
|
101
|
+
preview: "astro preview",
|
|
102
|
+
};
|
|
103
|
+
if (config.frontend.framework === "svelte") {
|
|
104
|
+
scripts.dev = "vite dev";
|
|
105
|
+
scripts.build = "vite build";
|
|
106
|
+
scripts.preview = "vite preview";
|
|
107
|
+
}
|
|
108
|
+
else if (config.frontend.framework === "nextjs") {
|
|
109
|
+
scripts.dev = "next dev";
|
|
110
|
+
scripts.build = "next build";
|
|
111
|
+
scripts.start = "next start";
|
|
112
|
+
scripts.lint = "next lint";
|
|
113
|
+
}
|
|
114
|
+
if (config.frontend.testing === "vitest" || config.frontend.testing === "both") {
|
|
115
|
+
scripts.test = "vitest";
|
|
116
|
+
}
|
|
117
|
+
if (config.frontend.testing === "playwright" || config.frontend.testing === "both") {
|
|
118
|
+
scripts["test:e2e"] = "playwright test";
|
|
119
|
+
}
|
|
120
|
+
if (config.frontend.eslint) {
|
|
121
|
+
scripts.lint = "eslint . --ext .js,.jsx,.ts,.tsx,.svelte";
|
|
122
|
+
}
|
|
123
|
+
if (config.frontend.prettier) {
|
|
124
|
+
scripts.format = 'prettier --write "**/*.{js,jsx,ts,tsx,json,css,md}"';
|
|
125
|
+
}
|
|
126
|
+
const content = JSON.stringify({
|
|
127
|
+
name: config.projectName,
|
|
128
|
+
version: "0.1.0",
|
|
129
|
+
type: "module",
|
|
130
|
+
scripts,
|
|
131
|
+
dependencies,
|
|
132
|
+
devDependencies,
|
|
133
|
+
}, null, 2);
|
|
134
|
+
await writeFile(`${projectPath}/package.json`, content);
|
|
135
|
+
logSuccess("package.json created");
|
|
136
|
+
}
|
|
137
|
+
async function generateGitIgnore(projectPath) {
|
|
138
|
+
const content = `# Dependencies
|
|
139
|
+
node_modules/
|
|
140
|
+
.pnp
|
|
141
|
+
.pnp.js
|
|
142
|
+
|
|
143
|
+
# Testing
|
|
144
|
+
coverage/
|
|
145
|
+
*.lcov
|
|
146
|
+
playwright-report/
|
|
147
|
+
playwright/.cache/
|
|
148
|
+
|
|
149
|
+
# Next.js
|
|
150
|
+
.next/
|
|
151
|
+
out/
|
|
152
|
+
|
|
153
|
+
# Production
|
|
154
|
+
build/
|
|
155
|
+
dist/
|
|
156
|
+
|
|
157
|
+
# Misc
|
|
158
|
+
.DS_Store
|
|
159
|
+
*.pem
|
|
160
|
+
|
|
161
|
+
# Debug
|
|
162
|
+
npm-debug.log*
|
|
163
|
+
yarn-debug.log*
|
|
164
|
+
yarn-error.log*
|
|
165
|
+
pnpm-debug.log*
|
|
166
|
+
|
|
167
|
+
# Local env files
|
|
168
|
+
.env
|
|
169
|
+
.env.local
|
|
170
|
+
.env.development.local
|
|
171
|
+
.env.test.local
|
|
172
|
+
.env.production.local
|
|
173
|
+
|
|
174
|
+
# Vercel
|
|
175
|
+
.vercel
|
|
176
|
+
|
|
177
|
+
# TypeScript
|
|
178
|
+
*.tsbuildinfo
|
|
179
|
+
|
|
180
|
+
# Astro
|
|
181
|
+
.astro/
|
|
182
|
+
|
|
183
|
+
# Svelte
|
|
184
|
+
.svelte-kit/
|
|
185
|
+
|
|
186
|
+
# IDE
|
|
187
|
+
.idea/
|
|
188
|
+
.vscode/
|
|
189
|
+
*.swp
|
|
190
|
+
*.swo
|
|
191
|
+
*~
|
|
192
|
+
`;
|
|
193
|
+
await writeFile(`${projectPath}/.gitignore`, content);
|
|
194
|
+
logSuccess(".gitignore created");
|
|
195
|
+
}
|
|
196
|
+
async function generateReadme(projectPath, config) {
|
|
197
|
+
const content = `# ${config.projectName}
|
|
198
|
+
|
|
199
|
+
This project was generated by [Phos](https://github.com/yourusername/phos).
|
|
200
|
+
|
|
201
|
+
## Getting Started
|
|
202
|
+
|
|
203
|
+
\`\`\`bash
|
|
204
|
+
${config.frontend.packageManager} install
|
|
205
|
+
${config.frontend.packageManager} run dev
|
|
206
|
+
\`\`\`
|
|
207
|
+
|
|
208
|
+
## Available Scripts
|
|
209
|
+
|
|
210
|
+
- \`${config.frontend.packageManager} run dev\` - Start development server
|
|
211
|
+
- \`${config.frontend.packageManager} run build\` - Build for production
|
|
212
|
+
- \`${config.frontend.packageManager} run preview\` - Preview production build
|
|
213
|
+
${config.frontend.eslint ? `- \`${config.frontend.packageManager} run lint\` - Run ESLint\n` : ""}${config.frontend.prettier ? `- \`${config.frontend.packageManager} run format\` - Format code with Prettier\n` : ""}${config.frontend.testing !== "none" ? `- \`${config.frontend.packageManager} run test\` - Run tests\n` : ""}
|
|
214
|
+
|
|
215
|
+
## Tech Stack
|
|
216
|
+
|
|
217
|
+
- Framework: ${config.frontend.framework}
|
|
218
|
+
- Package Manager: ${config.frontend.packageManager}
|
|
219
|
+
- TypeScript: ${config.frontend.typescript ? "Yes" : "No"}
|
|
220
|
+
- ESLint: ${config.frontend.eslint ? "Yes" : "No"}
|
|
221
|
+
- Prettier: ${config.frontend.prettier ? "Yes" : "No"}
|
|
222
|
+
- CSS Framework: ${config.frontend.cssFramework}
|
|
223
|
+
- UI Components: ${config.frontend.uiComponents}
|
|
224
|
+
- Testing: ${config.frontend.testing}
|
|
225
|
+
`;
|
|
226
|
+
await writeFile(`${projectPath}/README.md`, content);
|
|
227
|
+
logSuccess("README.md created");
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=single.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single.js","sourceRoot":"","sources":["../../src/generators/single.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface GeneratorConfig {
|
|
2
|
+
projectName: string;
|
|
3
|
+
projectType: 'monorepo' | 'single';
|
|
4
|
+
backend: {
|
|
5
|
+
framework: 'elysia' | 'fastapi';
|
|
6
|
+
packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun';
|
|
7
|
+
typescript: boolean;
|
|
8
|
+
eslint: boolean;
|
|
9
|
+
prettier: boolean;
|
|
10
|
+
};
|
|
11
|
+
frontend: {
|
|
12
|
+
framework: 'astro' | 'svelte' | 'nextjs';
|
|
13
|
+
packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun';
|
|
14
|
+
typescript: boolean;
|
|
15
|
+
eslint: boolean;
|
|
16
|
+
prettier: boolean;
|
|
17
|
+
cssFramework: 'none' | 'tailwind' | 'scss' | 'css-modules';
|
|
18
|
+
uiComponents: 'none' | 'shadcn' | 'radix';
|
|
19
|
+
testing: 'none' | 'vitest' | 'playwright' | 'both';
|
|
20
|
+
};
|
|
21
|
+
git: boolean;
|
|
22
|
+
install: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function createDirectory(dirPath: string): Promise<void>;
|
|
25
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
26
|
+
export declare function copyTemplate(templatePath: string, outputPath: string, data: Record<string, unknown>): Promise<void>;
|
|
27
|
+
export declare function getPackageManagerInstallCmd(packageManager: string): string;
|
|
28
|
+
export declare function getPackageManagerRunCmd(packageManager: string, script: string): string;
|
|
29
|
+
export declare function logStep(message: string): void;
|
|
30
|
+
export declare function logSuccess(message: string): void;
|
|
31
|
+
export declare function logInfo(message: string): void;
|
|
32
|
+
export declare function installDependencies(projectPath: string, packageManager: string): Promise<void>;
|
|
33
|
+
export declare function initializeGit(projectPath: string): Promise<void>;
|
|
34
|
+
export declare function getProjectPath(projectName: string): string;
|
|
35
|
+
export declare function capitalize(str: string): string;
|
|
36
|
+
export declare function toKebabCase(str: string): string;
|
|
37
|
+
export declare function toPascalCase(str: string): string;
|
|
38
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,OAAO,EAAE;QACP,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;QAChC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAChD,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE;QACR,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACzC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAChD,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;QAClB,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;QAC3D,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC1C,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;KACpD,CAAC;IACF,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,GACrB,MAAM,CAaR;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CAaR;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatE;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD"}
|