Skip to content

Commit f2db006

Browse files
Refactor Prisma integration and improve project setup
- Move Prisma files to standard /prisma directory - Remove Turso adapter dependencies for Prisma - Fix auth configuration in templates - Update router devtools package name - Simplify post-installation instructions - Improve npm scripts with cleaner commands
1 parent 9461390 commit f2db006

File tree

17 files changed

+91
-88
lines changed

17 files changed

+91
-88
lines changed

apps/cli/src/constants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export const dependencyVersionMap = {
3131

3232
// Database - Prisma
3333
"@prisma/client": "^5.7.1",
34-
"@prisma/adapter-libsql": "^5.7.1",
3534
prisma: "^5.7.1",
3635
} as const;
3736

apps/cli/src/helpers/addons-setup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ services:
7979
- "3000:3000"
8080
environment:
8181
- NODE_ENV=production
82-
- TURSO_DATABASE_URL=\${TURSO_DATABASE_URL}
82+
- TURSO_CONNECTION_URL=\${TURSO_CONNECTION_URL}
8383
- TURSO_AUTH_TOKEN=\${TURSO_AUTH_TOKEN}
8484
- CORS_ORIGIN=\${CORS_ORIGIN}
8585
restart: always

apps/cli/src/helpers/create-project.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export async function createProject(options: ProjectConfig): Promise<string> {
8989
const serverPackageJson = await fs.readJson(serverPackageJsonPath);
9090

9191
if (options.database !== "none") {
92-
if (options.database === "sqlite" && options.turso) {
92+
if (options.database === "sqlite") {
9393
serverPackageJson.scripts["db:local"] =
9494
"turso dev --db-file local.db";
9595
}
@@ -99,19 +99,19 @@ export async function createProject(options: ProjectConfig): Promise<string> {
9999
"npx @better-auth/cli generate --output ./src/db/auth-schema.ts";
100100

101101
if (options.orm === "prisma") {
102-
serverPackageJson.scripts["db:push"] = "npx prisma db push";
103-
serverPackageJson.scripts["db:studio"] = "npx prisma studio";
102+
serverPackageJson.scripts["db:push"] = "prisma db push";
103+
serverPackageJson.scripts["db:studio"] = "prisma studio";
104104
} else if (options.orm === "drizzle") {
105-
serverPackageJson.scripts["db:push"] = "npx drizzle-kit push";
106-
serverPackageJson.scripts["db:studio"] = "npx drizzle-kit studio";
105+
serverPackageJson.scripts["db:push"] = "drizzle-kit push";
106+
serverPackageJson.scripts["db:studio"] = "drizzle-kit studio";
107107
}
108108
} else {
109109
if (options.orm === "prisma") {
110-
serverPackageJson.scripts["db:push"] = "npx prisma db push";
111-
serverPackageJson.scripts["db:studio"] = "npx prisma studio";
110+
serverPackageJson.scripts["db:push"] = "prisma db push";
111+
serverPackageJson.scripts["db:studio"] = "prisma studio";
112112
} else if (options.orm === "drizzle") {
113-
serverPackageJson.scripts["db:push"] = "npx drizzle-kit push";
114-
serverPackageJson.scripts["db:studio"] = "npx drizzle-kit studio";
113+
serverPackageJson.scripts["db:push"] = "drizzle-kit push";
114+
serverPackageJson.scripts["db:studio"] = "drizzle-kit studio";
115115
}
116116
}
117117
}
@@ -124,7 +124,6 @@ export async function createProject(options: ProjectConfig): Promise<string> {
124124
await createReadme(projectDir, options);
125125

126126
displayPostInstallInstructions(
127-
options.auth,
128127
options.database,
129128
options.projectName,
130129
options.packageManager,

apps/cli/src/helpers/db-setup.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,7 @@ export async function setupDatabase(
3232
}
3333
} else if (orm === "prisma") {
3434
addPackageDependency({
35-
dependencies: [
36-
"@prisma/client",
37-
"@prisma/adapter-libsql",
38-
"@libsql/client",
39-
],
35+
dependencies: ["@prisma/client"],
4036
devDependencies: false,
4137
projectDir: serverDir,
4238
});

apps/cli/src/helpers/env-setup.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ export async function setupEnvironmentVariables(
1010
const serverDir = path.join(projectDir, "packages/server");
1111
const clientDir = path.join(projectDir, "packages/client");
1212

13-
// Set up server env variables
1413
const envPath = path.join(serverDir, ".env");
1514
let envContent = "";
1615

1716
if (await fs.pathExists(envPath)) {
1817
envContent = await fs.readFile(envPath, "utf8");
1918
}
2019

21-
// Auth environment variables
2220
if (options.auth) {
2321
if (!envContent.includes("BETTER_AUTH_SECRET")) {
2422
envContent += `\nBETTER_AUTH_SECRET=${generateAuthSecret()}`;
@@ -33,12 +31,11 @@ export async function setupEnvironmentVariables(
3331
}
3432
}
3533

36-
// Database environment variables
3734
if (options.database !== "none") {
3835
if (options.orm === "prisma" && !envContent.includes("DATABASE_URL")) {
3936
const databaseUrlLine =
4037
options.database === "sqlite"
41-
? `\nDATABASE_URL="file:./dev.db"`
38+
? ""
4239
: `\nDATABASE_URL="postgresql://postgres:postgres@localhost:5432/mydb?schema=public"`;
4340
envContent += databaseUrlLine;
4441
}
@@ -54,7 +51,6 @@ export async function setupEnvironmentVariables(
5451

5552
await fs.writeFile(envPath, envContent.trim());
5653

57-
// Set up client env variables
5854
if (options.auth) {
5955
const clientEnvPath = path.join(clientDir, ".env");
6056
if (!(await fs.pathExists(clientEnvPath))) {

apps/cli/src/helpers/post-installation.ts

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { log } from "@clack/prompts";
22
import pc from "picocolors";
33

44
export function displayPostInstallInstructions(
5-
hasAuth: boolean,
65
database: string,
76
projectName: string,
87
packageManager: string,
@@ -12,52 +11,56 @@ export function displayPostInstallInstructions(
1211
const runCmd = packageManager === "npm" ? "npm run" : packageManager;
1312
const cdCmd = `cd ${projectName}`;
1413

15-
const steps = [];
14+
log.info(`${pc.cyan("Project created successfully!")}
1615
17-
if (!depsInstalled) {
18-
steps.push(`${pc.cyan(packageManager)} install`);
19-
}
16+
${pc.bold("Next steps:")}
17+
${pc.cyan("1.")} ${cdCmd}
18+
${!depsInstalled ? `${pc.cyan("2.")} ${packageManager} install\n` : ""}${pc.cyan(depsInstalled ? "2." : "3.")} ${runCmd} dev
2019
21-
if (hasAuth && database !== "none") {
22-
steps.push(`${pc.yellow("Database Setup:")}`);
20+
${pc.bold("Your project will be available at:")}
21+
${pc.cyan("•")} Frontend: http://localhost:3001
22+
${pc.cyan("•")} API: http://localhost:3000
2323
24-
if (orm === "prisma") {
25-
steps.push(
26-
`${pc.cyan("1.")} Generate Prisma client: ${pc.green(`${runCmd} prisma:generate`)}`,
27-
);
28-
steps.push(
29-
`${pc.cyan("2.")} Push schema to database: ${pc.green(`${runCmd} prisma:push`)}`,
30-
);
31-
} else if (orm === "drizzle") {
32-
steps.push(
33-
`${pc.cyan("1.")} Apply migrations: ${pc.green(`${runCmd} db:push`)}`,
34-
);
35-
}
36-
}
24+
${database !== "none" ? getDatabaseInstructions(database, orm, runCmd) : ""}`);
25+
}
26+
27+
function getDatabaseInstructions(
28+
database: string,
29+
orm?: string,
30+
runCmd?: string,
31+
): string {
32+
const instructions = [];
3733

38-
if (database === "postgres") {
39-
steps.push(`${pc.yellow("PostgreSQL Configuration:")}`);
40-
steps.push(
41-
`Make sure to update ${pc.cyan("packages/server/.env")} with your PostgreSQL connection string.`,
34+
if (orm === "prisma") {
35+
instructions.push(
36+
`${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`,
37+
);
38+
instructions.push(
39+
`${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`,
4240
);
43-
} else if (database === "sqlite") {
44-
steps.push(`${pc.yellow("Database Configuration:")}`);
45-
steps.push(
46-
`${pc.cyan("packages/server/.env")} contains your SQLite connection details. Update if needed.`,
41+
42+
if (database === "turso") {
43+
instructions.push(
44+
`${pc.yellow("NOTE:")} Turso support with Prisma is in Early Access and requires additional setup.`,
45+
`${pc.dim("Learn more at: https://www.prisma.io/docs/orm/overview/databases/turso")}`,
46+
);
47+
}
48+
} else if (orm === "drizzle") {
49+
instructions.push(
50+
`${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`,
4751
);
48-
steps.push(
49-
`Start the local SQLite database with: ${pc.green(`${runCmd} db:local`)}`,
52+
instructions.push(
53+
`${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`,
5054
);
5155
}
5256

53-
steps.push(`${pc.yellow("Start Development:")}`);
54-
steps.push(`${pc.green(`${runCmd} dev`)}`);
55-
56-
log.info(`${pc.cyan("Installation completed!")} Here are some next steps:
57-
58-
${cdCmd}
59-
${steps.join("\n")}
57+
if (database === "sqlite") {
58+
instructions.push(
59+
`${pc.cyan("•")} Start local DB: ${pc.dim(`cd packages/server && ${runCmd} db:local`)}`,
60+
);
61+
}
6062

61-
The client application will be available at ${pc.cyan("http://localhost:3001")}
62-
The API server will be running at ${pc.cyan("http://localhost:3000")}`);
63+
return instructions.length
64+
? `${pc.bold("Database commands:")}\n${instructions.join("\n")}\n\n`
65+
: "";
6366
}

apps/cli/src/prompts/config-prompts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export async function gatherConfig(
4343
auth: ({ results }) =>
4444
getAuthChoice(flags.auth, results.database !== "none"),
4545
turso: ({ results }) =>
46-
results.database === "sqlite"
46+
results.database === "sqlite" && results.orm !== "prisma"
4747
? getTursoSetupChoice(flags.turso)
4848
: Promise.resolve(false),
4949
addons: () => getAddonsChoice(flags.addons),

apps/cli/template/base/packages/client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"@tanstack/react-query": "^5.66.0",
3333
"@tanstack/react-query-devtools": "^5.66.0",
3434
"@tanstack/react-router": "^1.101.0",
35-
"@tanstack/router-devtools": "^1.101.0",
35+
"@tanstack/react-router-devtools": "^1.114.25",
3636
"@trpc/client": "^11.0.0-rc.748",
3737
"@trpc/react-query": "^11.0.0-rc.748",
3838
"@trpc/server": "^11.0.0-rc.748",

apps/cli/template/base/packages/client/src/routes/__root.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
createRootRouteWithContext,
1010
useRouterState,
1111
} from "@tanstack/react-router";
12-
import { TanStackRouterDevtools } from "@tanstack/router-devtools";
12+
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
1313
import "../index.css";
1414

1515
export interface RouterAppContext {

0 commit comments

Comments
 (0)