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
package/bun.lock ADDED
@@ -0,0 +1,125 @@
1
+ {
2
+ "lockfileVersion": 1,
3
+ "configVersion": 1,
4
+ "workspaces": {
5
+ "": {
6
+ "name": "phos",
7
+ "dependencies": {
8
+ "@clack/prompts": "^1.0.0",
9
+ "commander": "^14.0.2",
10
+ "fs-extra": "^11.3.3",
11
+ "handlebars": "^4.7.8",
12
+ "picocolors": "^1.1.1",
13
+ },
14
+ "devDependencies": {
15
+ "@types/fs-extra": "^11.0.4",
16
+ "@types/node": "^20.11.0",
17
+ "tsx": "^4.19.2",
18
+ "typescript": "^5.7.3",
19
+ },
20
+ },
21
+ },
22
+ "packages": {
23
+ "@clack/core": ["@clack/core@1.0.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ=="],
24
+
25
+ "@clack/prompts": ["@clack/prompts@1.0.0", "", { "dependencies": { "@clack/core": "1.0.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A=="],
26
+
27
+ "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="],
28
+
29
+ "@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="],
30
+
31
+ "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="],
32
+
33
+ "@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="],
34
+
35
+ "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="],
36
+
37
+ "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="],
38
+
39
+ "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="],
40
+
41
+ "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="],
42
+
43
+ "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="],
44
+
45
+ "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="],
46
+
47
+ "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="],
48
+
49
+ "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="],
50
+
51
+ "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="],
52
+
53
+ "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="],
54
+
55
+ "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="],
56
+
57
+ "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="],
58
+
59
+ "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="],
60
+
61
+ "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="],
62
+
63
+ "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="],
64
+
65
+ "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="],
66
+
67
+ "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="],
68
+
69
+ "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="],
70
+
71
+ "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="],
72
+
73
+ "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="],
74
+
75
+ "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="],
76
+
77
+ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="],
78
+
79
+ "@types/fs-extra": ["@types/fs-extra@11.0.4", "", { "dependencies": { "@types/jsonfile": "*", "@types/node": "*" } }, "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ=="],
80
+
81
+ "@types/jsonfile": ["@types/jsonfile@6.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ=="],
82
+
83
+ "@types/node": ["@types/node@20.19.33", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw=="],
84
+
85
+ "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
86
+
87
+ "esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="],
88
+
89
+ "fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="],
90
+
91
+ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
92
+
93
+ "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
94
+
95
+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
96
+
97
+ "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="],
98
+
99
+ "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="],
100
+
101
+ "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
102
+
103
+ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="],
104
+
105
+ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
106
+
107
+ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
108
+
109
+ "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
110
+
111
+ "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
112
+
113
+ "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="],
114
+
115
+ "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
116
+
117
+ "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="],
118
+
119
+ "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
120
+
121
+ "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
122
+
123
+ "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="],
124
+ }
125
+ }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { intro, outro, select, text, confirm, note } from "@clack/prompts";
4
+ import pc from "picocolors";
5
+ import { existsSync } from "fs";
6
+ import { resolve } from "path";
7
+ import { generateMonorepo } from "@/generators/monorepo.js";
8
+ import { generateSingle } from "@/generators/single.js";
9
+ const program = new Command();
10
+ program.name("phos").description("Full-stack interactive project generator CLI").version("0.1.0");
11
+ program
12
+ .command("create")
13
+ .description("Create a new project")
14
+ .action(async () => {
15
+ intro(pc.bgCyan(pc.black(" Phos ")));
16
+ const projectName = await text({
17
+ message: "Project name",
18
+ placeholder: "my-awesome-app",
19
+ validate: (value) => {
20
+ if (!value)
21
+ return "Project name is required";
22
+ if (!/^[a-z0-9-]+$/.test(value)) {
23
+ return "Project name must be lowercase letters, numbers, and hyphens only";
24
+ }
25
+ const projectPath = resolve(process.cwd(), value);
26
+ if (existsSync(projectPath)) {
27
+ return `Directory "${value}" already exists`;
28
+ }
29
+ return undefined;
30
+ },
31
+ });
32
+ if (typeof projectName !== "string" || !projectName) {
33
+ outro(pc.red("Project creation cancelled"));
34
+ process.exit(0);
35
+ }
36
+ const projectType = await select({
37
+ message: "Select project type",
38
+ options: [
39
+ { value: "monorepo", label: "Monorepo" },
40
+ { value: "single", label: "Single repo" },
41
+ ],
42
+ });
43
+ if (typeof projectType !== "string") {
44
+ outro(pc.red("Project creation cancelled"));
45
+ process.exit(0);
46
+ }
47
+ const projectTypeTyped = projectType;
48
+ const backendFramework = await select({
49
+ message: "Select Backend Framework",
50
+ options: [
51
+ { value: "elysia", label: "Elysia" },
52
+ { value: "fastapi", label: "FastAPI" },
53
+ ],
54
+ });
55
+ if (typeof backendFramework !== "string") {
56
+ outro(pc.red("Project creation cancelled"));
57
+ process.exit(0);
58
+ }
59
+ const backendPackageManager = await select({
60
+ message: "Select Backend package manager",
61
+ options: [
62
+ { value: "npm", label: "npm" },
63
+ { value: "yarn", label: "yarn" },
64
+ { value: "pnpm", label: "pnpm" },
65
+ { value: "bun", label: "bun" },
66
+ ],
67
+ });
68
+ if (typeof backendPackageManager !== "string") {
69
+ outro(pc.red("Project creation cancelled"));
70
+ process.exit(0);
71
+ }
72
+ const backendUseTypeScript = await confirm({
73
+ message: "Backend: Use TypeScript?",
74
+ initialValue: false,
75
+ });
76
+ if (typeof backendUseTypeScript !== "boolean") {
77
+ outro(pc.red("Project creation cancelled"));
78
+ process.exit(0);
79
+ }
80
+ const backendAddESLint = await confirm({
81
+ message: "Backend: Add ESLint?",
82
+ initialValue: false,
83
+ });
84
+ if (typeof backendAddESLint !== "boolean") {
85
+ outro(pc.red("Project creation cancelled"));
86
+ process.exit(0);
87
+ }
88
+ const backendAddPrettier = await confirm({
89
+ message: "Backend: Add Prettier?",
90
+ initialValue: false,
91
+ });
92
+ if (typeof backendAddPrettier !== "boolean") {
93
+ outro(pc.red("Project creation cancelled"));
94
+ process.exit(0);
95
+ }
96
+ const frontendFramework = await select({
97
+ message: "Select Frontend Framework",
98
+ options: [
99
+ { value: "astro", label: "Astro" },
100
+ { value: "svelte", label: "Svelte" },
101
+ { value: "nextjs", label: "NextJS" },
102
+ ],
103
+ });
104
+ if (typeof frontendFramework !== "string") {
105
+ outro(pc.red("Project creation cancelled"));
106
+ process.exit(0);
107
+ }
108
+ const frontendPackageManager = await select({
109
+ message: "Select Frontend package manager",
110
+ options: [
111
+ { value: "npm", label: "npm" },
112
+ { value: "yarn", label: "yarn" },
113
+ { value: "pnpm", label: "pnpm" },
114
+ { value: "bun", label: "bun" },
115
+ ],
116
+ });
117
+ if (typeof frontendPackageManager !== "string") {
118
+ outro(pc.red("Project creation cancelled"));
119
+ process.exit(0);
120
+ }
121
+ const frontendUseTypeScript = await confirm({
122
+ message: "Frontend: Use TypeScript?",
123
+ initialValue: false,
124
+ });
125
+ if (typeof frontendUseTypeScript !== "boolean") {
126
+ outro(pc.red("Project creation cancelled"));
127
+ process.exit(0);
128
+ }
129
+ const frontendAddESLint = await confirm({
130
+ message: "Frontend: Add ESLint?",
131
+ initialValue: false,
132
+ });
133
+ if (typeof frontendAddESLint !== "boolean") {
134
+ outro(pc.red("Project creation cancelled"));
135
+ process.exit(0);
136
+ }
137
+ const frontendAddPrettier = await confirm({
138
+ message: "Frontend: Add Prettier?",
139
+ initialValue: false,
140
+ });
141
+ if (typeof frontendAddPrettier !== "boolean") {
142
+ outro(pc.red("Project creation cancelled"));
143
+ process.exit(0);
144
+ }
145
+ const cssFramework = await select({
146
+ message: "Select CSS Framework",
147
+ options: [
148
+ { value: "none", label: "No" },
149
+ { value: "tailwind", label: "Tailwind CSS" },
150
+ { value: "scss", label: "SCSS" },
151
+ { value: "css-modules", label: "CSS Modules" },
152
+ ],
153
+ });
154
+ if (typeof cssFramework !== "string") {
155
+ outro(pc.red("Project creation cancelled"));
156
+ process.exit(0);
157
+ }
158
+ const uiComponents = await select({
159
+ message: "Add UI Components?",
160
+ options: [
161
+ { value: "none", label: "No" },
162
+ { value: "shadcn", label: "shadcn/ui" },
163
+ { value: "radix", label: "Radix UI" },
164
+ ],
165
+ });
166
+ if (typeof uiComponents !== "string") {
167
+ outro(pc.red("Project creation cancelled"));
168
+ process.exit(0);
169
+ }
170
+ const testing = await select({
171
+ message: "Add Testing?",
172
+ options: [
173
+ { value: "none", label: "No" },
174
+ { value: "vitest", label: "Vitest" },
175
+ { value: "playwright", label: "Playwright" },
176
+ { value: "both", label: "Vitest + Playwright" },
177
+ ],
178
+ });
179
+ if (typeof testing !== "string") {
180
+ outro(pc.red("Project creation cancelled"));
181
+ process.exit(0);
182
+ }
183
+ const initGit = await confirm({
184
+ message: "Initialize Git?",
185
+ initialValue: false,
186
+ });
187
+ if (typeof initGit !== "boolean") {
188
+ outro(pc.red("Project creation cancelled"));
189
+ process.exit(0);
190
+ }
191
+ const installDeps = await confirm({
192
+ message: "Install dependencies?",
193
+ initialValue: false,
194
+ });
195
+ if (typeof installDeps !== "boolean") {
196
+ outro(pc.red("Project creation cancelled"));
197
+ process.exit(0);
198
+ }
199
+ const backendFrameworkTyped = backendFramework;
200
+ const backendPackageManagerTyped = backendPackageManager;
201
+ const frontendFrameworkTyped = frontendFramework;
202
+ const frontendPackageManagerTyped = frontendPackageManager;
203
+ const cssFrameworkTyped = cssFramework;
204
+ const uiComponentsTyped = uiComponents;
205
+ const testingTyped = testing;
206
+ const config = {
207
+ projectName,
208
+ projectType: projectTypeTyped,
209
+ backend: {
210
+ framework: backendFrameworkTyped,
211
+ packageManager: backendPackageManagerTyped,
212
+ typescript: backendUseTypeScript,
213
+ eslint: backendAddESLint,
214
+ prettier: backendAddPrettier,
215
+ },
216
+ frontend: {
217
+ framework: frontendFrameworkTyped,
218
+ packageManager: frontendPackageManagerTyped,
219
+ typescript: frontendUseTypeScript,
220
+ eslint: frontendAddESLint,
221
+ prettier: frontendAddPrettier,
222
+ cssFramework: cssFrameworkTyped,
223
+ uiComponents: uiComponentsTyped,
224
+ testing: testingTyped,
225
+ },
226
+ git: initGit,
227
+ install: installDeps,
228
+ };
229
+ note(`${pc.bold("Configuration Summary")}\n\n` +
230
+ `${pc.cyan("Project:")} ${projectName}\n` +
231
+ `${pc.cyan("Type:")} ${projectTypeTyped}\n` +
232
+ `${pc.cyan("Backend:")} ${backendFrameworkTyped} (${backendPackageManagerTyped})\n` +
233
+ `${pc.cyan("Frontend:")} ${frontendFrameworkTyped} (${frontendPackageManagerTyped})\n` +
234
+ `${pc.cyan("TypeScript:")} ${backendUseTypeScript || frontendUseTypeScript ? "Yes" : "No"}\n` +
235
+ `${pc.cyan("CSS:")} ${cssFrameworkTyped}\n` +
236
+ `${pc.cyan("UI Components:")} ${uiComponentsTyped}\n` +
237
+ `${pc.cyan("Testing:")} ${testingTyped}\n` +
238
+ `${pc.cyan("Git:")} ${initGit ? "Yes" : "No"}\n` +
239
+ `${pc.cyan("Install:")} ${installDeps ? "Yes" : "No"}`, "Configuration");
240
+ try {
241
+ if (projectTypeTyped === "monorepo") {
242
+ await generateMonorepo(config);
243
+ }
244
+ else {
245
+ await generateSingle(config);
246
+ }
247
+ outro(pc.green("✨ Project created successfully!"));
248
+ }
249
+ catch (error) {
250
+ outro(pc.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
251
+ process.exit(1);
252
+ }
253
+ });
254
+ program.parse();
255
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type GeneratorConfig } from "@/utils/helpers.js";
2
+ export declare function generateElysiaBackend(projectPath: string, config: GeneratorConfig): Promise<void>;
3
+ //# sourceMappingURL=elysia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElG,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,135 @@
1
+ import { createDirectory, writeFile, logSuccess } from "@/utils/helpers.js";
2
+ export async function generateElysiaBackend(projectPath, config) {
3
+ const srcPath = `${projectPath}/src`;
4
+ await createDirectory(srcPath);
5
+ const indexExtension = config.backend.typescript ? "ts" : "js";
6
+ const importType = config.backend.typescript ? "import" : "require";
7
+ await generateIndexFile(srcPath, indexExtension, importType, config);
8
+ await generatePackageJson(projectPath, config);
9
+ await generateTsConfig(projectPath, config);
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",
42
+ };
43
+ const devDependencies = {};
44
+ if (config.backend.eslint) {
45
+ devDependencies["eslint"] = "^8.57.0";
46
+ devDependencies["@typescript-eslint/parser"] = "^7.0.0";
47
+ devDependencies["@typescript-eslint/eslint-plugin"] = "^7.0.0";
48
+ }
49
+ if (config.backend.prettier) {
50
+ devDependencies["prettier"] = "^3.2.0";
51
+ }
52
+ if (config.backend.typescript) {
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);
134
+ }
135
+ //# sourceMappingURL=elysia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type GeneratorConfig } from "@/utils/helpers.js";
2
+ export declare function generateFastAPIBackend(projectPath: string, config: GeneratorConfig): Promise<void>;
3
+ //# sourceMappingURL=fastapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastapi.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAElG,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAkBf"}