@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
JavaScript
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
});
}