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.
Files changed (116) hide show
  1. package/.eslintignore +3 -0
  2. package/AGENTS.md +172 -0
  3. package/CHANGELOG.md +184 -0
  4. package/LICENSE +21 -0
  5. package/README.md +279 -0
  6. package/bun.lock +125 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +255 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/generators/backends/elysia.d.ts +3 -0
  12. package/dist/generators/backends/elysia.d.ts.map +1 -0
  13. package/dist/generators/backends/elysia.js +135 -0
  14. package/dist/generators/backends/elysia.js.map +1 -0
  15. package/dist/generators/backends/fastapi.d.ts +3 -0
  16. package/dist/generators/backends/fastapi.d.ts.map +1 -0
  17. package/dist/generators/backends/fastapi.js +158 -0
  18. package/dist/generators/backends/fastapi.js.map +1 -0
  19. package/dist/generators/frontends/astro.d.ts +3 -0
  20. package/dist/generators/frontends/astro.d.ts.map +1 -0
  21. package/dist/generators/frontends/astro.js +303 -0
  22. package/dist/generators/frontends/astro.js.map +1 -0
  23. package/dist/generators/frontends/nextjs.d.ts +3 -0
  24. package/dist/generators/frontends/nextjs.d.ts.map +1 -0
  25. package/dist/generators/frontends/nextjs.js +274 -0
  26. package/dist/generators/frontends/nextjs.js.map +1 -0
  27. package/dist/generators/frontends/svelte.d.ts +3 -0
  28. package/dist/generators/frontends/svelte.d.ts.map +1 -0
  29. package/dist/generators/frontends/svelte.js +324 -0
  30. package/dist/generators/frontends/svelte.js.map +1 -0
  31. package/dist/generators/monorepo.d.ts +3 -0
  32. package/dist/generators/monorepo.d.ts.map +1 -0
  33. package/dist/generators/monorepo.js +320 -0
  34. package/dist/generators/monorepo.js.map +1 -0
  35. package/dist/generators/single.d.ts +3 -0
  36. package/dist/generators/single.d.ts.map +1 -0
  37. package/dist/generators/single.js +229 -0
  38. package/dist/generators/single.js.map +1 -0
  39. package/dist/utils/helpers.d.ts +38 -0
  40. package/dist/utils/helpers.d.ts.map +1 -0
  41. package/dist/utils/helpers.js +109 -0
  42. package/dist/utils/helpers.js.map +1 -0
  43. package/package.json +46 -0
  44. package/src/cli.ts +500 -0
  45. package/src/generators/backends/elysia.ts +45 -0
  46. package/src/generators/backends/fastapi.ts +71 -0
  47. package/src/generators/frontends/astro.ts +37 -0
  48. package/src/generators/frontends/nextjs.ts +37 -0
  49. package/src/generators/frontends/svelte.ts +38 -0
  50. package/src/generators/monorepo.ts +529 -0
  51. package/src/generators/single.ts +465 -0
  52. package/src/templates/backend/elysia/README.md +15 -0
  53. package/src/templates/backend/elysia/package.json +26 -0
  54. package/src/templates/backend/elysia/src/api/user_api.ts +0 -0
  55. package/src/templates/backend/elysia/src/db.ts +17 -0
  56. package/src/templates/backend/elysia/src/index.ts +68 -0
  57. package/src/templates/backend/elysia/src/service/user_service.ts +0 -0
  58. package/src/templates/backend/elysia/src/sql/user_sql.ts +0 -0
  59. package/src/templates/backend/elysia/src/types/user_type.ts +0 -0
  60. package/src/templates/backend/elysia/tsconfig.json +103 -0
  61. package/src/templates/backend/fastapi/.pylintrc +2 -0
  62. package/src/templates/backend/fastapi/README.md +33 -0
  63. package/src/templates/backend/fastapi/pyproject.toml +9 -0
  64. package/src/templates/backend/fastapi/pyproject_prettier.toml +20 -0
  65. package/src/templates/backend/fastapi/requirements.txt +15 -0
  66. package/src/templates/backend/fastapi/setup.sh +23 -0
  67. package/src/templates/backend/fastapi/src/api/user_api.py +0 -0
  68. package/src/templates/backend/fastapi/src/db.py +31 -0
  69. package/src/templates/backend/fastapi/src/main.py +53 -0
  70. package/src/templates/backend/fastapi/src/service/user_service.py +0 -0
  71. package/src/templates/backend/fastapi/src/sql/user_sql.py +0 -0
  72. package/src/templates/backend/fastapi/src/types/user_type.py +0 -0
  73. package/src/templates/frontend/astro/README.md +46 -0
  74. package/src/templates/frontend/astro/astro.config.mjs +5 -0
  75. package/src/templates/frontend/astro/package.json +28 -0
  76. package/src/templates/frontend/astro/public/favicon.ico +0 -0
  77. package/src/templates/frontend/astro/public/favicon.svg +9 -0
  78. package/src/templates/frontend/astro/src/assets/astro.svg +1 -0
  79. package/src/templates/frontend/astro/src/assets/background.svg +1 -0
  80. package/src/templates/frontend/astro/src/components/Welcome.astro +5 -0
  81. package/src/templates/frontend/astro/src/layouts/Layout.astro +23 -0
  82. package/src/templates/frontend/astro/src/pages/index.astro +8 -0
  83. package/src/templates/frontend/astro/tsconfig.json +5 -0
  84. package/src/templates/frontend/nextjs/README.md +36 -0
  85. package/src/templates/frontend/nextjs/app/favicon.ico +0 -0
  86. package/src/templates/frontend/nextjs/app/globals.css +26 -0
  87. package/src/templates/frontend/nextjs/app/layout.tsx +34 -0
  88. package/src/templates/frontend/nextjs/app/page.tsx +16 -0
  89. package/src/templates/frontend/nextjs/eslint.config.mjs +18 -0
  90. package/src/templates/frontend/nextjs/next.config.ts +7 -0
  91. package/src/templates/frontend/nextjs/package.json +28 -0
  92. package/src/templates/frontend/nextjs/postcss.config.mjs +7 -0
  93. package/src/templates/frontend/nextjs/public/file.svg +1 -0
  94. package/src/templates/frontend/nextjs/public/globe.svg +1 -0
  95. package/src/templates/frontend/nextjs/public/next.svg +1 -0
  96. package/src/templates/frontend/nextjs/public/vercel.svg +1 -0
  97. package/src/templates/frontend/nextjs/public/window.svg +1 -0
  98. package/src/templates/frontend/nextjs/tsconfig.json +34 -0
  99. package/src/templates/frontend/svelte/.prettierignore +9 -0
  100. package/src/templates/frontend/svelte/.prettierrc +19 -0
  101. package/src/templates/frontend/svelte/README.md +42 -0
  102. package/src/templates/frontend/svelte/eslint.config.js +39 -0
  103. package/src/templates/frontend/svelte/package.json +39 -0
  104. package/src/templates/frontend/svelte/src/app.d.ts +13 -0
  105. package/src/templates/frontend/svelte/src/app.html +11 -0
  106. package/src/templates/frontend/svelte/src/lib/assets/favicon.svg +1 -0
  107. package/src/templates/frontend/svelte/src/lib/index.ts +1 -0
  108. package/src/templates/frontend/svelte/src/routes/+layout.svelte +9 -0
  109. package/src/templates/frontend/svelte/src/routes/+page.svelte +2 -0
  110. package/src/templates/frontend/svelte/src/routes/layout.css +2 -0
  111. package/src/templates/frontend/svelte/static/robots.txt +3 -0
  112. package/src/templates/frontend/svelte/svelte.config.js +13 -0
  113. package/src/templates/frontend/svelte/tsconfig.json +20 -0
  114. package/src/templates/frontend/svelte/vite.config.ts +5 -0
  115. package/src/utils/helpers.ts +198 -0
  116. 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,3 @@
1
+ import { type GeneratorConfig } from '@/utils/helpers.js';
2
+ export declare function generateSingle(config: GeneratorConfig): Promise<void>;
3
+ //# sourceMappingURL=single.d.ts.map
@@ -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"}