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,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDirectory,
|
|
3
|
+
logSuccess,
|
|
4
|
+
copyTemplate,
|
|
5
|
+
type GeneratorConfig,
|
|
6
|
+
capitalize,
|
|
7
|
+
} from "@/utils/helpers.js";
|
|
8
|
+
import { resolve } from "path";
|
|
9
|
+
import fs from "fs-extra";
|
|
10
|
+
|
|
11
|
+
async function removeFileIfExists(filePath: string): Promise<void> {
|
|
12
|
+
try {
|
|
13
|
+
if (await fs.pathExists(filePath)) {
|
|
14
|
+
await fs.unlink(filePath);
|
|
15
|
+
}
|
|
16
|
+
} catch (error) {}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function generateElysiaBackend(
|
|
20
|
+
projectPath: string,
|
|
21
|
+
config: GeneratorConfig
|
|
22
|
+
): Promise<void> {
|
|
23
|
+
const srcPath = `${projectPath}/src`;
|
|
24
|
+
await createDirectory(srcPath);
|
|
25
|
+
|
|
26
|
+
const templatePath = resolve(process.cwd(), "src/templates/backend/elysia");
|
|
27
|
+
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
28
|
+
|
|
29
|
+
const templateData = {
|
|
30
|
+
...config,
|
|
31
|
+
backendName,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
await copyTemplate(templatePath, projectPath, templateData as unknown as Record<string, unknown>);
|
|
35
|
+
|
|
36
|
+
if (!config.backend?.eslint) {
|
|
37
|
+
await removeFileIfExists(`${projectPath}/.eslintrc.js`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!config.backend?.prettier) {
|
|
41
|
+
await removeFileIfExists(`${projectPath}/.prettierrc`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
logSuccess(`Elysia backend generated`);
|
|
45
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDirectory,
|
|
3
|
+
logSuccess,
|
|
4
|
+
logInfo,
|
|
5
|
+
copyTemplate,
|
|
6
|
+
capitalize,
|
|
7
|
+
type GeneratorConfig,
|
|
8
|
+
getPackageManagerInstallCmd,
|
|
9
|
+
getPackageManagerRunCmd,
|
|
10
|
+
} from "@/utils/helpers.js";
|
|
11
|
+
import { resolve } from "path";
|
|
12
|
+
import fs from "fs-extra";
|
|
13
|
+
|
|
14
|
+
async function removeFileIfExists(filePath: string): Promise<void> {
|
|
15
|
+
try {
|
|
16
|
+
if (await fs.pathExists(filePath)) {
|
|
17
|
+
await fs.unlink(filePath);
|
|
18
|
+
}
|
|
19
|
+
} catch (error) {}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function copyAndRenameFile(srcPath: string, destPath: string): Promise<void> {
|
|
23
|
+
const content = await fs.readFile(srcPath, "utf-8");
|
|
24
|
+
await fs.writeFile(destPath, content, "utf-8");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function generateFastAPIBackend(
|
|
28
|
+
projectPath: string,
|
|
29
|
+
config: GeneratorConfig
|
|
30
|
+
): Promise<void> {
|
|
31
|
+
const srcPath = `${projectPath}/src`;
|
|
32
|
+
await createDirectory(srcPath);
|
|
33
|
+
|
|
34
|
+
const templatePath = resolve(process.cwd(), "src/templates/backend/fastapi");
|
|
35
|
+
const backendName = `${capitalize(config.projectName)}_Backend`;
|
|
36
|
+
|
|
37
|
+
const templateData = {
|
|
38
|
+
...config,
|
|
39
|
+
backendName,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
await copyTemplate(templatePath, projectPath, templateData as unknown as Record<string, unknown>);
|
|
43
|
+
|
|
44
|
+
if (!config.backend?.eslint) {
|
|
45
|
+
await removeFileIfExists(`${projectPath}/.pylintrc`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (config.backend?.prettier) {
|
|
49
|
+
await copyAndRenameFile(
|
|
50
|
+
`${templatePath}/pyproject_prettier.toml`,
|
|
51
|
+
`${projectPath}/pyproject.toml`
|
|
52
|
+
);
|
|
53
|
+
} else {
|
|
54
|
+
await removeFileIfExists(`${projectPath}/pyproject_prettier.toml`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const installCmd = getPackageManagerInstallCmd(config.backend?.packageManager || "pip");
|
|
58
|
+
const runCmd = getPackageManagerRunCmd(config.backend?.packageManager || "pip", "dev");
|
|
59
|
+
|
|
60
|
+
logSuccess(`FastAPI backend generated`);
|
|
61
|
+
logInfo("");
|
|
62
|
+
logInfo(`📦 Next steps:`);
|
|
63
|
+
logInfo(` cd ${backendName}`);
|
|
64
|
+
if (config.backend?.packageManager === "venv") {
|
|
65
|
+
logInfo(` chmod +x setup.sh`);
|
|
66
|
+
logInfo(` ./setup.sh`);
|
|
67
|
+
} else {
|
|
68
|
+
logInfo(` ${installCmd}`);
|
|
69
|
+
logInfo(` ${runCmd}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDirectory,
|
|
3
|
+
logSuccess,
|
|
4
|
+
copyTemplate,
|
|
5
|
+
type GeneratorConfig,
|
|
6
|
+
} from "@/utils/helpers.js";
|
|
7
|
+
import { resolve } from "path";
|
|
8
|
+
import fs from "fs-extra";
|
|
9
|
+
|
|
10
|
+
async function removeFileIfExists(filePath: string): Promise<void> {
|
|
11
|
+
try {
|
|
12
|
+
if (await fs.pathExists(filePath)) {
|
|
13
|
+
await fs.unlink(filePath);
|
|
14
|
+
}
|
|
15
|
+
} catch (error) {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function generateAstroFrontend(
|
|
19
|
+
projectPath: string,
|
|
20
|
+
config: GeneratorConfig
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
const srcPath = `${projectPath}/src`;
|
|
23
|
+
await createDirectory(srcPath);
|
|
24
|
+
|
|
25
|
+
const templatePath = resolve(process.cwd(), "src/templates/frontend/astro");
|
|
26
|
+
await copyTemplate(templatePath, projectPath, config as unknown as Record<string, unknown>);
|
|
27
|
+
|
|
28
|
+
if (!config.frontend?.eslint) {
|
|
29
|
+
await removeFileIfExists(`${projectPath}/eslint.config.js`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!config.frontend?.prettier) {
|
|
33
|
+
await removeFileIfExists(`${projectPath}/.prettierrc`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
logSuccess(`Astro frontend generated`);
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDirectory,
|
|
3
|
+
logSuccess,
|
|
4
|
+
copyTemplate,
|
|
5
|
+
type GeneratorConfig,
|
|
6
|
+
} from "@/utils/helpers.js";
|
|
7
|
+
import { resolve } from "path";
|
|
8
|
+
import fs from "fs-extra";
|
|
9
|
+
|
|
10
|
+
async function removeFileIfExists(filePath: string): Promise<void> {
|
|
11
|
+
try {
|
|
12
|
+
if (await fs.pathExists(filePath)) {
|
|
13
|
+
await fs.unlink(filePath);
|
|
14
|
+
}
|
|
15
|
+
} catch (error) {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function generateNextJSFrontend(
|
|
19
|
+
projectPath: string,
|
|
20
|
+
config: GeneratorConfig
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
const srcPath = `${projectPath}/src`;
|
|
23
|
+
await createDirectory(srcPath);
|
|
24
|
+
|
|
25
|
+
const templatePath = resolve(process.cwd(), "src/templates/frontend/nextjs");
|
|
26
|
+
await copyTemplate(templatePath, projectPath, config as unknown as Record<string, unknown>);
|
|
27
|
+
|
|
28
|
+
if (!config.frontend?.eslint) {
|
|
29
|
+
await removeFileIfExists(`${projectPath}/eslint.config.mjs`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!config.frontend?.prettier) {
|
|
33
|
+
await removeFileIfExists(`${projectPath}/.prettierrc`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
logSuccess(`Next.js frontend generated`);
|
|
37
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createDirectory,
|
|
3
|
+
logSuccess,
|
|
4
|
+
copyTemplate,
|
|
5
|
+
type GeneratorConfig,
|
|
6
|
+
} from "@/utils/helpers.js";
|
|
7
|
+
import { resolve } from "path";
|
|
8
|
+
import fs from "fs-extra";
|
|
9
|
+
|
|
10
|
+
async function removeFileIfExists(filePath: string): Promise<void> {
|
|
11
|
+
try {
|
|
12
|
+
if (await fs.pathExists(filePath)) {
|
|
13
|
+
await fs.unlink(filePath);
|
|
14
|
+
}
|
|
15
|
+
} catch (error) {}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function generateSvelteFrontend(
|
|
19
|
+
projectPath: string,
|
|
20
|
+
config: GeneratorConfig
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
const srcPath = `${projectPath}/src`;
|
|
23
|
+
await createDirectory(srcPath);
|
|
24
|
+
|
|
25
|
+
const templatePath = resolve(process.cwd(), "src/templates/frontend/svelte");
|
|
26
|
+
await copyTemplate(templatePath, projectPath, config as unknown as Record<string, unknown>);
|
|
27
|
+
|
|
28
|
+
if (!config.frontend?.eslint) {
|
|
29
|
+
await removeFileIfExists(`${projectPath}/eslint.config.js`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!config.frontend?.prettier) {
|
|
33
|
+
await removeFileIfExists(`${projectPath}/.prettierrc`);
|
|
34
|
+
await removeFileIfExists(`${projectPath}/.prettierignore`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
logSuccess(`Svelte frontend generated`);
|
|
38
|
+
}
|