@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
83 lines (82 loc) • 2.99 kB
JavaScript
import { re } from "@reliverse/relico";
import fs from "@reliverse/relifso";
import { relinka } from "@reliverse/relinka";
import { spinner } from "@reliverse/rempts";
import path from "node:path";
import { setupMongoDBAtlas } from "../database-providers/mongodb-atlas-setup.js";
import { setupNeonPostgres } from "../database-providers/neon-setup.js";
import { setupPrismaPostgres } from "../database-providers/prisma-postgres-setup.js";
import { setupSupabase } from "../database-providers/supabase-setup.js";
import { setupTurso } from "../database-providers/turso-setup.js";
import { addPackageDependency } from "../../utils/add-package-deps.js";
export async function setupDatabase(config) {
const { database, orm, dbSetup, backend, projectDir } = config;
if (backend === "convex" || database === "none") {
if (backend !== "convex") {
const serverDir2 = path.join(projectDir, "apps/server");
const serverDbDir = path.join(serverDir2, "src/db");
if (await fs.pathExists(serverDbDir)) {
await fs.remove(serverDbDir);
}
}
return;
}
const s = spinner();
const serverDir = path.join(projectDir, "apps/server");
if (!await fs.pathExists(serverDir)) {
return;
}
try {
if (orm === "prisma") {
await addPackageDependency({
dependencies: ["@prisma/client"],
devDependencies: ["prisma"],
projectDir: serverDir
});
} else if (orm === "drizzle") {
if (database === "sqlite") {
await addPackageDependency({
dependencies: ["drizzle-orm", "@libsql/client"],
devDependencies: ["drizzle-kit"],
projectDir: serverDir
});
} else if (database === "postgres") {
await addPackageDependency({
dependencies: ["drizzle-orm", "pg"],
devDependencies: ["drizzle-kit", "@types/pg"],
projectDir: serverDir
});
} else if (database === "mysql") {
await addPackageDependency({
dependencies: ["drizzle-orm", "mysql2"],
devDependencies: ["drizzle-kit"],
projectDir: serverDir
});
}
} else if (orm === "mongoose") {
await addPackageDependency({
dependencies: ["mongoose"],
devDependencies: [],
projectDir: serverDir
});
}
if (database === "sqlite" && dbSetup === "turso") {
await setupTurso(config);
} else if (database === "postgres") {
if (orm === "prisma" && dbSetup === "prisma-postgres") {
await setupPrismaPostgres(config);
} else if (dbSetup === "neon") {
await setupNeonPostgres(config);
} else if (dbSetup === "supabase") {
await setupSupabase(config);
}
} else if (database === "mongodb" && dbSetup === "mongodb-atlas") {
await setupMongoDBAtlas(config);
}
} catch (error) {
s.stop(re.red("Failed to set up database"));
if (error instanceof Error) {
relinka("error", re.red(error.message));
}
}
}