@@ -2,6 +2,7 @@ import path from "node:path";
22import { log , spinner } from "@clack/prompts" ;
33import fs from "fs-extra" ;
44import pc from "picocolors" ;
5+ import { addPackageDependency } from "../utils/add-package-deps" ;
56import { setupTurso } from "./turso-setup" ;
67
78export async function setupDatabase (
@@ -21,115 +22,100 @@ export async function setupDatabase(
2122 try {
2223 if ( databaseType === "sqlite" ) {
2324 if ( orm === "drizzle" ) {
24- await setupDrizzleDependencies ( projectDir , "sqlite" ) ;
25+ addPackageDependency ( {
26+ dependencies : [ "drizzle-orm" , "drizzle-kit" , "@libsql/client" ] ,
27+ devDependencies : false ,
28+ projectDir : serverDir ,
29+ } ) ;
2530 if ( setupTursoDb ) {
2631 await setupTurso ( projectDir , true ) ;
2732 }
2833 } else if ( orm === "prisma" ) {
29- await setupPrismaDependencies ( projectDir , "sqlite" ) ;
34+ addPackageDependency ( {
35+ dependencies : [
36+ "@prisma/client" ,
37+ "@prisma/adapter-libsql" ,
38+ "@libsql/client" ,
39+ ] ,
40+ devDependencies : false ,
41+ projectDir : serverDir ,
42+ } ) ;
43+ addPackageDependency ( {
44+ dependencies : [ "prisma" ] ,
45+ devDependencies : true ,
46+ projectDir : serverDir ,
47+ } ) ;
3048 if ( setupTursoDb ) {
3149 await setupTurso ( projectDir , true ) ;
3250 }
3351 }
3452 } else if ( databaseType === "postgres" ) {
3553 if ( orm === "drizzle" ) {
36- await setupDrizzleDependencies ( projectDir , "postgres" ) ;
54+ addPackageDependency ( {
55+ dependencies : [ "drizzle-orm" , "postgres" ] ,
56+ devDependencies : false ,
57+ projectDir : serverDir ,
58+ } ) ;
59+ addPackageDependency ( {
60+ dependencies : [ "drizzle-kit" ] ,
61+ devDependencies : true ,
62+ projectDir : serverDir ,
63+ } ) ;
3764 } else if ( orm === "prisma" ) {
38- await setupPrismaDependencies ( projectDir , "postgres" ) ;
65+ addPackageDependency ( {
66+ dependencies : [ "@prisma/client" ] ,
67+ devDependencies : false ,
68+ projectDir : serverDir ,
69+ } ) ;
70+ addPackageDependency ( {
71+ dependencies : [ "prisma" ] ,
72+ devDependencies : true ,
73+ projectDir : serverDir ,
74+ } ) ;
3975 }
4076 }
41- } catch ( error ) {
42- s . stop ( pc . red ( "Failed to set up database" ) ) ;
43- if ( error instanceof Error ) {
44- log . error ( pc . red ( error . message ) ) ;
45- }
46- throw error ;
47- }
48- }
4977
50- async function setupDrizzleDependencies (
51- projectDir : string ,
52- dbType : string ,
53- ) : Promise < void > {
54- const serverDir = path . join ( projectDir , "packages/server" ) ;
55-
56- const packageJsonPath = path . join ( serverDir , "package.json" ) ;
57- if ( await fs . pathExists ( packageJsonPath ) ) {
58- const packageJson = await fs . readJSON ( packageJsonPath ) ;
78+ const packageJsonPath = path . join ( serverDir , "package.json" ) ;
79+ if ( await fs . pathExists ( packageJsonPath ) ) {
80+ const packageJson = await fs . readJSON ( packageJsonPath ) ;
5981
60- packageJson . dependencies = {
61- ...packageJson . dependencies ,
62- "drizzle-orm" : "^0.38.4" ,
63- } ;
82+ if ( orm === "drizzle" ) {
83+ packageJson . scripts = {
84+ ...packageJson . scripts ,
85+ "db:generate" : "drizzle-kit generate" ,
86+ "db:migrate" : "drizzle-kit push" ,
87+ "db:studio" : "drizzle-kit studio" ,
88+ } ;
89+ } else if ( orm === "prisma" ) {
90+ packageJson . scripts = {
91+ ...packageJson . scripts ,
92+ "prisma:generate" : "prisma generate" ,
93+ "prisma:push" : "prisma db push" ,
94+ "prisma:studio" : "prisma studio" ,
95+ } ;
96+ }
6497
65- if ( dbType === "sqlite" ) {
66- packageJson . dependencies [ "@libsql/client" ] = "^0.14.0" ;
67- } else if ( dbType === "postgres" ) {
68- packageJson . dependencies . postgres = "^3.4.5" ;
98+ await fs . writeJSON ( packageJsonPath , packageJson , { spaces : 2 } ) ;
6999 }
70100
71- packageJson . devDependencies = {
72- ...packageJson . devDependencies ,
73- "drizzle-kit" : "^0.30.4" ,
74- } ;
75-
76- packageJson . scripts = {
77- ...packageJson . scripts ,
78- "db:generate" : "drizzle-kit generate" ,
79- "db:migrate" : "drizzle-kit push" ,
80- "db:studio" : "drizzle-kit studio" ,
81- } ;
82-
83- await fs . writeJSON ( packageJsonPath , packageJson , { spaces : 2 } ) ;
84- }
85- }
86-
87- async function setupPrismaDependencies (
88- projectDir : string ,
89- dbType : string ,
90- ) : Promise < void > {
91- const serverDir = path . join ( projectDir , "packages/server" ) ;
92-
93- const packageJsonPath = path . join ( serverDir , "package.json" ) ;
94- if ( await fs . pathExists ( packageJsonPath ) ) {
95- const packageJson = await fs . readJSON ( packageJsonPath ) ;
96-
97- packageJson . dependencies = {
98- ...packageJson . dependencies ,
99- "@prisma/client" : "^5.7.1" ,
100- } ;
101-
102- if ( dbType === "sqlite" ) {
103- packageJson . dependencies [ "@prisma/adapter-libsql" ] = "^5.7.1" ;
104- packageJson . dependencies [ "@libsql/client" ] = "^0.14.0" ;
105- } else if ( dbType === "postgres" ) {
106- // PostgreSQL specific dependencies if needed
101+ if ( orm === "prisma" ) {
102+ const envPath = path . join ( serverDir , ".env" ) ;
103+ if ( await fs . pathExists ( envPath ) ) {
104+ const envContent = await fs . readFile ( envPath , "utf8" ) ;
105+ if ( ! envContent . includes ( "DATABASE_URL" ) ) {
106+ const databaseUrlLine =
107+ databaseType === "sqlite"
108+ ? `\nDATABASE_URL="file:./dev.db"`
109+ : `\nDATABASE_URL="postgresql://postgres:postgres@localhost:5432/mydb?schema=public"` ;
110+ await fs . appendFile ( envPath , databaseUrlLine ) ;
111+ }
112+ }
107113 }
108-
109- packageJson . devDependencies = {
110- ...packageJson . devDependencies ,
111- prisma : "^5.7.1" ,
112- } ;
113-
114- packageJson . scripts = {
115- ...packageJson . scripts ,
116- "prisma:generate" : "prisma generate" ,
117- "prisma:push" : "prisma db push" ,
118- "prisma:studio" : "prisma studio" ,
119- } ;
120-
121- await fs . writeJSON ( packageJsonPath , packageJson , { spaces : 2 } ) ;
122- }
123-
124- const envPath = path . join ( serverDir , ".env" ) ;
125- if ( await fs . pathExists ( envPath ) ) {
126- const envContent = await fs . readFile ( envPath , "utf8" ) ;
127- if ( ! envContent . includes ( "DATABASE_URL" ) ) {
128- const databaseUrlLine =
129- dbType === "sqlite"
130- ? `\nDATABASE_URL="file:./dev.db"`
131- : `\nDATABASE_URL="postgresql://postgres:postgres@localhost:5432/mydb?schema=public"` ;
132- await fs . appendFile ( envPath , databaseUrlLine ) ;
114+ } catch ( error ) {
115+ s . stop ( pc . red ( "Failed to set up database" ) ) ;
116+ if ( error instanceof Error ) {
117+ log . error ( pc . red ( error . message ) ) ;
133118 }
119+ throw error ;
134120 }
135121}
0 commit comments