UNPKG

@reliverse/rse

Version:

@reliverse/rse is your all-in-one companion for bootstrapping and improving any kind of projects (especially web apps built with frameworks like Next.js) — whether you're kicking off something new or upgrading an existing app. It is also a little AI-power

80 lines (79 loc) 2.7 kB
import fs from "@reliverse/relifso"; import path from "node:path"; import { addPackageDependency } from "../../utils/add-package-deps.js"; export async function setupRuntime(config) { const { runtime, backend, projectDir } = config; if (backend === "convex" || backend === "next" || runtime === "none") { return; } const serverDir = path.join(projectDir, "apps/server"); if (!await fs.pathExists(serverDir)) { return; } if (runtime === "bun") { await setupBunRuntime(serverDir, backend); } else if (runtime === "node") { await setupNodeRuntime(serverDir, backend); } else if (runtime === "workers") { await setupWorkersRuntime(serverDir); } } async function setupBunRuntime(serverDir, _backend) { const packageJsonPath = path.join(serverDir, "package.json"); if (!await fs.pathExists(packageJsonPath)) return; const packageJson = await fs.readJson(packageJsonPath); packageJson.scripts = { ...packageJson.scripts, dev: "bun run --hot src/index.ts", start: "bun run dist/src/index.js" }; await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 }); await addPackageDependency({ devDependencies: ["@types/bun"], projectDir: serverDir }); } async function setupNodeRuntime(serverDir, backend) { const packageJsonPath = path.join(serverDir, "package.json"); if (!await fs.pathExists(packageJsonPath)) return; const packageJson = await fs.readJson(packageJsonPath); packageJson.scripts = { ...packageJson.scripts, dev: "tsx watch src/index.ts", start: "node dist/src/index.js" }; await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 }); await addPackageDependency({ devDependencies: ["tsx", "@types/node"], projectDir: serverDir }); if (backend === "hono") { await addPackageDependency({ dependencies: ["@hono/node-server"], projectDir: serverDir }); } else if (backend === "elysia") { await addPackageDependency({ dependencies: ["@elysiajs/node"], projectDir: serverDir }); } } async function setupWorkersRuntime(serverDir) { const packageJsonPath = path.join(serverDir, "package.json"); if (!await fs.pathExists(packageJsonPath)) return; const packageJson = await fs.readJson(packageJsonPath); packageJson.scripts = { ...packageJson.scripts, dev: "wrangler dev --port=3000", start: "wrangler dev", deploy: "wrangler deploy", build: "wrangler deploy --dry-run", "cf-typegen": "wrangler types --env-interface CloudflareBindings" }; await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 }); await addPackageDependency({ devDependencies: ["wrangler"], projectDir: serverDir }); }