mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
add postgres support
This commit is contained in:
@@ -52,9 +52,11 @@ export async function configureAuth(
|
||||
const envPath = path.join(serverDir, ".env");
|
||||
const templateEnvPath = path.join(
|
||||
PKG_ROOT,
|
||||
options.orm === "drizzle"
|
||||
? "template/with-drizzle/packages/server/_env"
|
||||
: "template/base/packages/server/_env",
|
||||
getOrmTemplatePath(
|
||||
options.orm,
|
||||
options.database,
|
||||
"packages/server/_env",
|
||||
),
|
||||
);
|
||||
|
||||
if (!(await fs.pathExists(envPath))) {
|
||||
@@ -108,7 +110,11 @@ ${options.orm === "prisma" ? 'DATABASE_URL="file:./dev.db"' : ""}
|
||||
const prismaAuthPath = path.join(serverDir, "src/lib/auth.ts");
|
||||
const defaultPrismaAuthPath = path.join(
|
||||
PKG_ROOT,
|
||||
"template/with-prisma/packages/server/src/lib/auth.ts",
|
||||
getOrmTemplatePath(
|
||||
options.orm,
|
||||
options.database,
|
||||
"packages/server/src/lib/auth.ts",
|
||||
),
|
||||
);
|
||||
|
||||
if (
|
||||
@@ -147,7 +153,11 @@ ${options.orm === "prisma" ? 'DATABASE_URL="file:./dev.db"' : ""}
|
||||
const drizzleAuthPath = path.join(serverDir, "src/lib/auth.ts");
|
||||
const defaultDrizzleAuthPath = path.join(
|
||||
PKG_ROOT,
|
||||
"template/with-drizzle/packages/server/src/lib/auth.ts",
|
||||
getOrmTemplatePath(
|
||||
options.orm,
|
||||
options.database,
|
||||
"packages/server/src/lib/auth.ts",
|
||||
),
|
||||
);
|
||||
|
||||
if (
|
||||
@@ -180,6 +190,24 @@ ${options.orm === "prisma" ? 'DATABASE_URL="file:./dev.db"' : ""}
|
||||
}
|
||||
}
|
||||
|
||||
function getOrmTemplatePath(
|
||||
orm: string,
|
||||
database: string,
|
||||
relativePath: string,
|
||||
): string {
|
||||
if (orm === "drizzle") {
|
||||
return database === "sqlite"
|
||||
? `template/with-drizzle-sqlite/${relativePath}`
|
||||
: `template/with-drizzle-postgres/${relativePath}`;
|
||||
}
|
||||
if (orm === "prisma") {
|
||||
return database === "sqlite"
|
||||
? `template/with-prisma-sqlite/${relativePath}`
|
||||
: `template/with-prisma-postgres/${relativePath}`;
|
||||
}
|
||||
return `template/base/${relativePath}`;
|
||||
}
|
||||
|
||||
function generateAuthSecret(length = 32): string {
|
||||
const characters =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
|
||||
@@ -27,9 +27,7 @@ export async function createProject(options: ProjectConfig): Promise<string> {
|
||||
if (options.orm !== "none" && options.database !== "none") {
|
||||
const ormTemplateDir = path.join(
|
||||
PKG_ROOT,
|
||||
options.orm === "drizzle"
|
||||
? "template/with-drizzle"
|
||||
: "template/with-prisma",
|
||||
getOrmTemplateDir(options.orm, options.database),
|
||||
);
|
||||
|
||||
if (await fs.pathExists(ormTemplateDir)) {
|
||||
@@ -143,3 +141,19 @@ export async function createProject(options: ProjectConfig): Promise<string> {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
function getOrmTemplateDir(orm: string, database: string): string {
|
||||
if (orm === "drizzle") {
|
||||
return database === "sqlite"
|
||||
? "template/with-drizzle-sqlite"
|
||||
: "template/with-drizzle-postgres";
|
||||
}
|
||||
|
||||
if (orm === "prisma") {
|
||||
return database === "sqlite"
|
||||
? "template/with-prisma-sqlite"
|
||||
: "template/with-prisma-postgres";
|
||||
}
|
||||
|
||||
return "template/base";
|
||||
}
|
||||
|
||||
@@ -21,24 +21,21 @@ export async function setupDatabase(
|
||||
try {
|
||||
if (databaseType === "sqlite") {
|
||||
if (orm === "drizzle") {
|
||||
await setupDrizzleDependencies(projectDir);
|
||||
await setupTurso(projectDir, setupTursoDb);
|
||||
await setupDrizzleDependencies(projectDir, "sqlite");
|
||||
if (setupTursoDb) {
|
||||
await setupTurso(projectDir, true);
|
||||
}
|
||||
} else if (orm === "prisma") {
|
||||
await setupPrismaDependencies(projectDir);
|
||||
await setupTurso(projectDir, setupTursoDb);
|
||||
await setupPrismaDependencies(projectDir, "sqlite");
|
||||
if (setupTursoDb) {
|
||||
await setupTurso(projectDir, true);
|
||||
}
|
||||
}
|
||||
} else if (databaseType === "postgres") {
|
||||
log.info(
|
||||
pc.blue(
|
||||
"PostgreSQL setup is coming in a future update. Using SQLite configuration for now.",
|
||||
),
|
||||
);
|
||||
if (orm === "drizzle") {
|
||||
await setupDrizzleDependencies(projectDir);
|
||||
await setupTurso(projectDir, setupTursoDb);
|
||||
await setupDrizzleDependencies(projectDir, "postgres");
|
||||
} else if (orm === "prisma") {
|
||||
await setupPrismaDependencies(projectDir);
|
||||
await setupTurso(projectDir, setupTursoDb);
|
||||
await setupPrismaDependencies(projectDir, "postgres");
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -50,7 +47,10 @@ export async function setupDatabase(
|
||||
}
|
||||
}
|
||||
|
||||
async function setupDrizzleDependencies(projectDir: string): Promise<void> {
|
||||
async function setupDrizzleDependencies(
|
||||
projectDir: string,
|
||||
dbType: string,
|
||||
): Promise<void> {
|
||||
const serverDir = path.join(projectDir, "packages/server");
|
||||
|
||||
const packageJsonPath = path.join(serverDir, "package.json");
|
||||
@@ -60,9 +60,14 @@ async function setupDrizzleDependencies(projectDir: string): Promise<void> {
|
||||
packageJson.dependencies = {
|
||||
...packageJson.dependencies,
|
||||
"drizzle-orm": "^0.38.4",
|
||||
"@libsql/client": "^0.14.0",
|
||||
};
|
||||
|
||||
if (dbType === "sqlite") {
|
||||
packageJson.dependencies["@libsql/client"] = "^0.14.0";
|
||||
} else if (dbType === "postgres") {
|
||||
packageJson.dependencies.postgres = "^3.4.5";
|
||||
}
|
||||
|
||||
packageJson.devDependencies = {
|
||||
...packageJson.devDependencies,
|
||||
"drizzle-kit": "^0.30.4",
|
||||
@@ -79,7 +84,10 @@ async function setupDrizzleDependencies(projectDir: string): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
async function setupPrismaDependencies(projectDir: string): Promise<void> {
|
||||
async function setupPrismaDependencies(
|
||||
projectDir: string,
|
||||
dbType: string,
|
||||
): Promise<void> {
|
||||
const serverDir = path.join(projectDir, "packages/server");
|
||||
|
||||
const packageJsonPath = path.join(serverDir, "package.json");
|
||||
@@ -89,10 +97,15 @@ async function setupPrismaDependencies(projectDir: string): Promise<void> {
|
||||
packageJson.dependencies = {
|
||||
...packageJson.dependencies,
|
||||
"@prisma/client": "^5.7.1",
|
||||
"@prisma/adapter-libsql": "^5.7.1",
|
||||
"@libsql/client": "^0.14.0",
|
||||
};
|
||||
|
||||
if (dbType === "sqlite") {
|
||||
packageJson.dependencies["@prisma/adapter-libsql"] = "^5.7.1";
|
||||
packageJson.dependencies["@libsql/client"] = "^0.14.0";
|
||||
} else if (dbType === "postgres") {
|
||||
// PostgreSQL specific dependencies if needed
|
||||
}
|
||||
|
||||
packageJson.devDependencies = {
|
||||
...packageJson.devDependencies,
|
||||
prisma: "^5.7.1",
|
||||
@@ -112,7 +125,10 @@ async function setupPrismaDependencies(projectDir: string): Promise<void> {
|
||||
if (await fs.pathExists(envPath)) {
|
||||
const envContent = await fs.readFile(envPath, "utf8");
|
||||
if (!envContent.includes("DATABASE_URL")) {
|
||||
const databaseUrlLine = `\nDATABASE_URL="file:./dev.db"`;
|
||||
const databaseUrlLine =
|
||||
dbType === "sqlite"
|
||||
? `\nDATABASE_URL="file:./dev.db"`
|
||||
: `\nDATABASE_URL="postgresql://postgres:postgres@localhost:5432/mydb?schema=public"`;
|
||||
await fs.appendFile(envPath, databaseUrlLine);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user