phos 1.0.1 → 1.0.3
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/README.md +3 -1
- package/dist/generators/backends/elysia.d.ts.map +1 -1
- package/dist/generators/backends/elysia.js +2 -3
- package/dist/generators/backends/elysia.js.map +1 -1
- package/dist/generators/backends/fastapi.d.ts.map +1 -1
- package/dist/generators/backends/fastapi.js +2 -3
- package/dist/generators/backends/fastapi.js.map +1 -1
- package/dist/generators/frontends/astro.d.ts.map +1 -1
- package/dist/generators/frontends/astro.js +2 -3
- package/dist/generators/frontends/astro.js.map +1 -1
- package/dist/generators/frontends/nextjs.d.ts.map +1 -1
- package/dist/generators/frontends/nextjs.js +2 -3
- package/dist/generators/frontends/nextjs.js.map +1 -1
- package/dist/generators/frontends/svelte.d.ts.map +1 -1
- package/dist/generators/frontends/svelte.js +2 -3
- package/dist/generators/frontends/svelte.js.map +1 -1
- package/dist/utils/helpers.d.ts +1 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +10 -1
- package/dist/utils/helpers.js.map +1 -1
- package/package.json +5 -1
- package/src/templates/frontend/astro/.vscode/extensions.json +4 -0
- package/src/templates/frontend/astro/.vscode/launch.json +11 -0
- package/src/templates/frontend/svelte/.vscode/settings.json +5 -0
- package/.eslintignore +0 -3
- package/AGENTS.md +0 -172
- package/CHANGELOG.md +0 -202
- package/bun.lock +0 -125
- package/src/cli.ts +0 -500
- package/src/generators/backends/elysia.ts +0 -45
- package/src/generators/backends/fastapi.ts +0 -71
- package/src/generators/frontends/astro.ts +0 -37
- package/src/generators/frontends/nextjs.ts +0 -37
- package/src/generators/frontends/svelte.ts +0 -38
- package/src/generators/monorepo.ts +0 -529
- package/src/generators/single.ts +0 -465
- package/src/utils/helpers.ts +0 -198
- package/tsconfig.json +0 -24
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Full-stack interactive project generator CLI
|
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](http://makeapullrequest.com)
|
|
12
12
|
|
|
13
|
-
**Version 1.0.
|
|
13
|
+
**Version 1.0.3 - Production Release** 🎉
|
|
14
14
|
|
|
15
15
|
[View on npmjs.com](https://www.npmjs.com/package/phos)
|
|
16
16
|
|
|
@@ -278,6 +278,8 @@ Contributions are welcome! Please feel free to submit a Pull Request.
|
|
|
278
278
|
|
|
279
279
|
Phos follows [semantic versioning](https://semver.org/).
|
|
280
280
|
|
|
281
|
+
- **1.0.3** - Patch release (template path fix)
|
|
282
|
+
- **1.0.2** - Patch release (template missing fix)
|
|
281
283
|
- **1.0.1** - Patch release (bug fixes)
|
|
282
284
|
- **1.0.0** - Production release with full feature support
|
|
283
285
|
- **1.x.0** - Minor releases (new features, non-breaking changes)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"elysia.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,oBAAoB,CAAC;AAW5B,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createDirectory, logSuccess, copyTemplate, capitalize, } from "../../utils/helpers.js";
|
|
2
|
-
import { resolve } from "path";
|
|
1
|
+
import { createDirectory, logSuccess, copyTemplate, capitalize, getTemplatePath, } from "../../utils/helpers.js";
|
|
3
2
|
import fs from "fs-extra";
|
|
4
3
|
async function removeFileIfExists(filePath) {
|
|
5
4
|
try {
|
|
@@ -12,7 +11,7 @@ async function removeFileIfExists(filePath) {
|
|
|
12
11
|
export async function generateElysiaBackend(projectPath, config) {
|
|
13
12
|
const srcPath = `${projectPath}/src`;
|
|
14
13
|
await createDirectory(srcPath);
|
|
15
|
-
const templatePath =
|
|
14
|
+
const templatePath = getTemplatePath("backend/elysia");
|
|
16
15
|
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
17
16
|
const templateData = {
|
|
18
17
|
...config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,UAAU,
|
|
1
|
+
{"version":3,"file":"elysia.js","sourceRoot":"","sources":["../../../src/generators/backends/elysia.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IAEhE,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,WAAW;KACZ,CAAC;IAEF,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,YAAkD,CAAC,CAAC;IAElG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,MAAM,kBAAkB,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC9B,MAAM,kBAAkB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CAAC,0BAA0B,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastapi.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"fastapi.d.ts","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,eAAe,EAIrB,MAAM,oBAAoB,CAAC;AAgB5B,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createDirectory, logSuccess, logInfo, copyTemplate, capitalize, getPackageManagerInstallCmd, getPackageManagerRunCmd, } from "../../utils/helpers.js";
|
|
2
|
-
import { resolve } from "path";
|
|
1
|
+
import { createDirectory, logSuccess, logInfo, copyTemplate, capitalize, getPackageManagerInstallCmd, getPackageManagerRunCmd, getTemplatePath, } from "../../utils/helpers.js";
|
|
3
2
|
import fs from "fs-extra";
|
|
4
3
|
async function removeFileIfExists(filePath) {
|
|
5
4
|
try {
|
|
@@ -16,7 +15,7 @@ async function copyAndRenameFile(srcPath, destPath) {
|
|
|
16
15
|
export async function generateFastAPIBackend(projectPath, config) {
|
|
17
16
|
const srcPath = `${projectPath}/src`;
|
|
18
17
|
await createDirectory(srcPath);
|
|
19
|
-
const templatePath =
|
|
18
|
+
const templatePath = getTemplatePath("backend/fastapi");
|
|
20
19
|
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
21
20
|
const templateData = {
|
|
22
21
|
...config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fastapi.js","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EAEV,2BAA2B,EAC3B,uBAAuB,
|
|
1
|
+
{"version":3,"file":"fastapi.js","sourceRoot":"","sources":["../../../src/generators/backends/fastapi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,OAAO,EACP,YAAY,EACZ,UAAU,EAEV,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,QAAgB;IAChE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IAEhE,MAAM,YAAY,GAAG;QACnB,GAAG,MAAM;QACT,WAAW;KACZ,CAAC;IAEF,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,YAAkD,CAAC,CAAC;IAElG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5B,MAAM,kBAAkB,CAAC,GAAG,WAAW,YAAY,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC7B,MAAM,iBAAiB,CACrB,GAAG,YAAY,0BAA0B,EACzC,GAAG,WAAW,iBAAiB,CAChC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,GAAG,WAAW,0BAA0B,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,KAAK,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,IAAI,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvF,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1B,OAAO,CAAC,QAAQ,WAAW,EAAE,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC/B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAW5B,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createDirectory, logSuccess, copyTemplate, } from "../../utils/helpers.js";
|
|
2
|
-
import { resolve } from "path";
|
|
1
|
+
import { createDirectory, logSuccess, copyTemplate, getTemplatePath, } from "../../utils/helpers.js";
|
|
3
2
|
import fs from "fs-extra";
|
|
4
3
|
async function removeFileIfExists(filePath) {
|
|
5
4
|
try {
|
|
@@ -12,7 +11,7 @@ async function removeFileIfExists(filePath) {
|
|
|
12
11
|
export async function generateAstroFrontend(projectPath, config) {
|
|
13
12
|
const srcPath = `${projectPath}/src`;
|
|
14
13
|
await createDirectory(srcPath);
|
|
15
|
-
const templatePath =
|
|
14
|
+
const templatePath = getTemplatePath("frontend/astro");
|
|
16
15
|
await copyTemplate(templatePath, projectPath, config);
|
|
17
16
|
if (!config.frontend?.eslint) {
|
|
18
17
|
await removeFileIfExists(`${projectPath}/eslint.config.js`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astro.js","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"astro.js","sourceRoot":"","sources":["../../../src/generators/frontends/astro.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,MAA4C,CAAC,CAAC;IAE5F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,GAAG,WAAW,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/B,MAAM,kBAAkB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CAAC,0BAA0B,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"nextjs.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAW5B,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createDirectory, logSuccess, copyTemplate, } from "../../utils/helpers.js";
|
|
2
|
-
import { resolve } from "path";
|
|
1
|
+
import { createDirectory, logSuccess, copyTemplate, getTemplatePath, } from "../../utils/helpers.js";
|
|
3
2
|
import fs from "fs-extra";
|
|
4
3
|
async function removeFileIfExists(filePath) {
|
|
5
4
|
try {
|
|
@@ -12,7 +11,7 @@ async function removeFileIfExists(filePath) {
|
|
|
12
11
|
export async function generateNextJSFrontend(projectPath, config) {
|
|
13
12
|
const srcPath = `${projectPath}/src`;
|
|
14
13
|
await createDirectory(srcPath);
|
|
15
|
-
const templatePath =
|
|
14
|
+
const templatePath = getTemplatePath("frontend/nextjs");
|
|
16
15
|
await copyTemplate(templatePath, projectPath, config);
|
|
17
16
|
if (!config.frontend?.eslint) {
|
|
18
17
|
await removeFileIfExists(`${projectPath}/eslint.config.mjs`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../src/generators/frontends/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../../src/generators/frontends/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,MAA4C,CAAC,CAAC;IAE5F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,GAAG,WAAW,oBAAoB,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/B,MAAM,kBAAkB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,UAAU,CAAC,4BAA4B,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../../src/generators/frontends/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAW5B,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { createDirectory, logSuccess, copyTemplate, } from "../../utils/helpers.js";
|
|
2
|
-
import { resolve } from "path";
|
|
1
|
+
import { createDirectory, logSuccess, copyTemplate, getTemplatePath, } from "../../utils/helpers.js";
|
|
3
2
|
import fs from "fs-extra";
|
|
4
3
|
async function removeFileIfExists(filePath) {
|
|
5
4
|
try {
|
|
@@ -12,7 +11,7 @@ async function removeFileIfExists(filePath) {
|
|
|
12
11
|
export async function generateSvelteFrontend(projectPath, config) {
|
|
13
12
|
const srcPath = `${projectPath}/src`;
|
|
14
13
|
await createDirectory(srcPath);
|
|
15
|
-
const templatePath =
|
|
14
|
+
const templatePath = getTemplatePath("frontend/svelte");
|
|
16
15
|
await copyTemplate(templatePath, projectPath, config);
|
|
17
16
|
if (!config.frontend?.eslint) {
|
|
18
17
|
await removeFileIfExists(`${projectPath}/eslint.config.js`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../../src/generators/frontends/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../../src/generators/frontends/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IAChD,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,WAAW,MAAM,CAAC;IACrC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,MAA4C,CAAC,CAAC;IAE5F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,GAAG,WAAW,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC/B,MAAM,kBAAkB,CAAC,GAAG,WAAW,cAAc,CAAC,CAAC;QACvD,MAAM,kBAAkB,CAAC,GAAG,WAAW,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,2BAA2B,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/utils/helpers.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAOpE;AAUD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;QAChC,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;QACjE,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,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,CAiDf;AAED,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAiB1E;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAiBtF;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,CAEhD"}
|
package/dist/utils/helpers.js
CHANGED
|
@@ -2,7 +2,16 @@ import fs from "fs-extra";
|
|
|
2
2
|
import Handlebars from "handlebars";
|
|
3
3
|
import pc from "picocolors";
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
|
-
import { resolve, join } from "path";
|
|
5
|
+
import { resolve, join, dirname } from "path";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
export function getTemplatePath(relativeTemplatePath) {
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
// Phos/src/utils/helpers.ts -> Phos/
|
|
11
|
+
// Phos/dist/utils/helpers.js -> Phos/
|
|
12
|
+
const root = resolve(__dirname, "../../");
|
|
13
|
+
return resolve(root, "src/templates", relativeTemplatePath);
|
|
14
|
+
}
|
|
6
15
|
Handlebars.registerHelper("eq", function (a, b) {
|
|
7
16
|
return a === b;
|
|
8
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phos",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Full-stack interactive project generator CLI - Phos",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -40,6 +40,10 @@
|
|
|
40
40
|
"url": "git+https://github.com/DotJumpDot/Phos.git"
|
|
41
41
|
},
|
|
42
42
|
"types": "./dist/cli.d.ts",
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"src/templates"
|
|
46
|
+
],
|
|
43
47
|
"bugs": {
|
|
44
48
|
"url": "https://github.com/DotJumpDot/Phos/issues"
|
|
45
49
|
},
|
package/.eslintignore
DELETED
package/AGENTS.md
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
# AGENTS Guidelines for This Repository
|
|
2
|
-
|
|
3
|
-
## Project Name: Phos CLI
|
|
4
|
-
|
|
5
|
-
Full-stack interactive project generator CLI that scaffolds modern web applications with configurable backends and frontends.
|
|
6
|
-
|
|
7
|
-
**Version:** 1.0.0 (Production Release)
|
|
8
|
-
|
|
9
|
-
### Core Features:
|
|
10
|
-
|
|
11
|
-
1. **Interactive CLI** - Beautiful prompts using @clack/prompts
|
|
12
|
-
2. **Multiple Backends** - Elysia (Bun), FastAPI (Python)
|
|
13
|
-
3. **Multiple Frontends** - Astro, Svelte, Next.js
|
|
14
|
-
4. **Monorepo Support** - Workspace configuration for scalable projects
|
|
15
|
-
5. **Configurable Tooling** - TypeScript, ESLint, Prettier options
|
|
16
|
-
6. **CSS Frameworks** - Tailwind, SCSS, CSS Modules
|
|
17
|
-
7. **UI Components** - shadcn/ui, Radix UI
|
|
18
|
-
8. **Testing Support** - Vitest, Playwright
|
|
19
|
-
|
|
20
|
-
### Technology Stack:
|
|
21
|
-
|
|
22
|
-
- **CLI**: Node.js + TypeScript
|
|
23
|
-
- **CLI Framework**: Commander.js
|
|
24
|
-
- **Interactive Prompts**: @clack/prompts
|
|
25
|
-
- **File Operations**: fs-extra
|
|
26
|
-
- **Template Engine**: Handlebars
|
|
27
|
-
- **Terminal Colors**: picocolors
|
|
28
|
-
- **Backend**: Elysia (Bun), FastAPI (Python)
|
|
29
|
-
- **Frontend**: Astro, SvelteKit, Next.js
|
|
30
|
-
- **Package Managers**: npm, yarn, pnpm, bun
|
|
31
|
-
|
|
32
|
-
## 1. Development Workflow
|
|
33
|
-
|
|
34
|
-
### CLI Tool (Phos)
|
|
35
|
-
|
|
36
|
-
- Use Commander.js for CLI argument parsing
|
|
37
|
-
- Use @clack/prompts for beautiful interactive UI
|
|
38
|
-
- Use fs-extra for file system operations
|
|
39
|
-
- Use Handlebars for template rendering
|
|
40
|
-
- Use picocolors for terminal colors
|
|
41
|
-
|
|
42
|
-
## 2. Architecture
|
|
43
|
-
|
|
44
|
-
### Core Components
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
src/
|
|
48
|
-
├── cli.ts # Main CLI entry point
|
|
49
|
-
├── generators/
|
|
50
|
-
│ ├── monorepo.ts # Monorepo scaffold generator
|
|
51
|
-
│ ├── single.ts # Single project generator
|
|
52
|
-
│ ├── backends/
|
|
53
|
-
│ │ ├── elysia.ts # Elysia (Bun) backend generator
|
|
54
|
-
│ │ └── fastapi.ts # FastAPI (Python) backend generator
|
|
55
|
-
│ └── frontends/
|
|
56
|
-
│ ├── astro.ts # Astro frontend generator
|
|
57
|
-
│ ├── svelte.ts # Svelte frontend generator
|
|
58
|
-
│ └── nextjs.ts # Next.js frontend generator
|
|
59
|
-
├── templates/ # Project templates
|
|
60
|
-
└── utils/
|
|
61
|
-
└── helpers.ts # Helper functions
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### File Naming Conventions
|
|
65
|
-
|
|
66
|
-
| Layer | Pattern | Example |
|
|
67
|
-
| ------------ | ---------------- | ----------------------- |
|
|
68
|
-
| CLI Commands | `*.ts` | `cli.ts`, `monorepo.ts` |
|
|
69
|
-
| Generators | `{framework}.ts` | `elysia.ts`, `astro.ts` |
|
|
70
|
-
| Utils | `*.ts` | `helpers.ts` |
|
|
71
|
-
|
|
72
|
-
**Rules:**
|
|
73
|
-
|
|
74
|
-
- Use **PascalCase** for generator files
|
|
75
|
-
- Use **camelCase** for utility functions
|
|
76
|
-
- Export generators as named exports
|
|
77
|
-
|
|
78
|
-
## 3. Keep Dependencies in Sync
|
|
79
|
-
|
|
80
|
-
When adding/updating packages:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
bun install <package>
|
|
84
|
-
# OR
|
|
85
|
-
npm install <package>
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 4. Coding Conventions
|
|
89
|
-
|
|
90
|
-
### TypeScript
|
|
91
|
-
|
|
92
|
-
- Use modern TypeScript with strict mode enabled
|
|
93
|
-
- Import using `@/` alias for internal modules
|
|
94
|
-
- Use ES modules with `.js` extensions
|
|
95
|
-
|
|
96
|
-
### Project Templates
|
|
97
|
-
|
|
98
|
-
- Use Handlebars for dynamic content
|
|
99
|
-
- Include TypeScript/ESLint/Prettier options as needed
|
|
100
|
-
- Generate complete project structures
|
|
101
|
-
|
|
102
|
-
## 5. Key Technologies
|
|
103
|
-
|
|
104
|
-
### CLI Framework
|
|
105
|
-
|
|
106
|
-
- **Commander.js** - Command-line interface framework
|
|
107
|
-
- **@clack/prompts** - Interactive prompts
|
|
108
|
-
- **fs-extra** - Enhanced file system operations
|
|
109
|
-
- **Handlebars** - Template engine
|
|
110
|
-
- **picocolors** - Terminal colors
|
|
111
|
-
|
|
112
|
-
### Supported Backends
|
|
113
|
-
|
|
114
|
-
- **Elysia** - Fast and elegant Bun web framework
|
|
115
|
-
- **FastAPI** - Modern Python web framework
|
|
116
|
-
|
|
117
|
-
### Supported Frontends
|
|
118
|
-
|
|
119
|
-
- **Astro** - Modern static site generator
|
|
120
|
-
- **SvelteKit** - Full-stack Svelte framework
|
|
121
|
-
- **Next.js** - React framework with server components
|
|
122
|
-
|
|
123
|
-
## 6. Configuration Options
|
|
124
|
-
|
|
125
|
-
### Backend Options
|
|
126
|
-
|
|
127
|
-
- **TypeScript** - Enable/disable TypeScript
|
|
128
|
-
- **ESLint** - Add ESLint configuration
|
|
129
|
-
- **Prettier** - Add Prettier configuration
|
|
130
|
-
|
|
131
|
-
### Frontend Options
|
|
132
|
-
|
|
133
|
-
- **TypeScript** - Enable/disable TypeScript
|
|
134
|
-
- **ESLint** - Add ESLint configuration
|
|
135
|
-
- **Prettier** - Add Prettier configuration
|
|
136
|
-
- **CSS Framework** - Tailwind, SCSS, CSS Modules
|
|
137
|
-
- **UI Components** - shadcn/ui, Radix UI
|
|
138
|
-
- **Testing** - Vitest, Playwright, or both
|
|
139
|
-
|
|
140
|
-
## 7. Available Commands
|
|
141
|
-
|
|
142
|
-
| Command | Purpose |
|
|
143
|
-
| ------------------------- | ------------------------------ |
|
|
144
|
-
| `bun run dev create` | Run CLI in development mode |
|
|
145
|
-
| `bun run build` | Build TypeScript to JavaScript |
|
|
146
|
-
| `bun run start` | Run built CLI |
|
|
147
|
-
| `node dist/cli.js create` | Run CLI directly |
|
|
148
|
-
| `bun link` | Link CLI globally |
|
|
149
|
-
| `phos create` | Run CLI (after linking) |
|
|
150
|
-
|
|
151
|
-
## 8. Versioning
|
|
152
|
-
|
|
153
|
-
Phos CLI follows semantic versioning:
|
|
154
|
-
|
|
155
|
-
- **x.y.z (Patch/Bugfix)**: `0.0.x`, `1.0.x`, `2.0.x`
|
|
156
|
-
- Bug fixes
|
|
157
|
-
- Documentation updates
|
|
158
|
-
- Small improvements
|
|
159
|
-
|
|
160
|
-
- **x.y.0 (Minor/Feature)**: `0.x.0`, `1.x.0`, `2.x.0`
|
|
161
|
-
- New features
|
|
162
|
-
- Breaking changes (when < 1.0.0)
|
|
163
|
-
- Significant updates
|
|
164
|
-
|
|
165
|
-
- **x.0.0 (Major/Milestone)**: `1.0.0`, `2.0.0`, `3.0.0`
|
|
166
|
-
- Major architectural changes
|
|
167
|
-
- Complete rewrites
|
|
168
|
-
- Production-ready releases
|
|
169
|
-
|
|
170
|
-
**Current Version: 1.0.0** - Production Release
|
|
171
|
-
|
|
172
|
-
See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
|