Skip to content

Commit d15c9f6

Browse files
committed
✨ feat(database): add Vercel Postgres support
- added vercel postgres database support - updated database config files to include vercel postgres - added new template for vercel postgres - updated package.json to include vercel postgres package - added basic schema for vercel postgres 🐛 fix(install): handle dev dependencies correctly - improved package manager handling for dev dependencies - added support for specifying dev dependencies with -D flag - fixed issue where dev dependencies were not being installed correctly ♻️ refactor(packages): update package versions - updated drizzle-orm, pg, and other packages to latest versions - improved type safety and compatibility with latest versions of dependencies - resolved conflicts and merge issues to ensure compatibility ✅ test(database): added tests for vercel postgres - added unit tests for vercel postgres database connection - added integration tests for vercel postgres database operations - improved test coverage for database functionalities 📝 docs(readme): update readme with vercel postgres - updated readme to include instructions for using vercel postgres - added section on vercel postgres configuration - improved overall documentation clarity and organization
1 parent d26d45e commit d15c9f6

File tree

7 files changed

+69
-24
lines changed

7 files changed

+69
-24
lines changed

src/configs/databases/postgres_sql.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const PostgresqlDatabasesConfigs = [
66
env_var: {
77
DATABASE_URL: 'postgres://postgres:postgres@localhost:5432/postgres',
88
},
9-
packages: ['drizzle-orm', 'mysql2', 'dotenv', 'drizzle-kit'],
9+
packages: ['drizzle-orm', 'pg', 'dotenv', '@types/pg -D', 'drizzle-kit -D'],
1010
},
1111
{
1212
name: 'Neon',
@@ -19,9 +19,18 @@ const PostgresqlDatabasesConfigs = [
1919
'drizzle-orm',
2020
'@neondatabase/serverless',
2121
'dotenv',
22-
'drizzle-kit',
22+
'drizzle-kit -D',
2323
],
2424
},
25+
{
26+
name: 'Vercel Postgres',
27+
path: 'vercel_postgres',
28+
template_path: 'templates/postgres/vercel-postgres',
29+
env_var: {
30+
POSTGRES_URL: '',
31+
},
32+
packages: ['drizzle-orm', '@vercel/postgres', 'dotenv', 'drizzle-kit -D'],
33+
},
2534
]
2635

2736
export function getPostgresqlDatabasesConfigs() {

src/configs/databases/sqlite.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const SQLiteDatabasesConfigs = [
66
env_var: {
77
DB_FILE_NAME: 'file:local.db',
88
},
9-
packages: ['drizzle-orm', '@libsql/client', 'dotenv', 'drizzle-kit'],
9+
packages: ['drizzle-orm', '@libsql/client', 'dotenv', 'drizzle-kit -D'],
1010
},
1111
{
1212
name: 'Turso',
@@ -16,7 +16,7 @@ const SQLiteDatabasesConfigs = [
1616
TURSO_DATABASE_URL: '',
1717
TURSO_AUTH_TOKEN: '',
1818
},
19-
packages: ['drizzle-orm', '@libsql/client', 'dotenv', 'drizzle-kit'],
19+
packages: ['drizzle-orm', '@libsql/client', 'dotenv', 'drizzle-kit -D'],
2020
},
2121
{
2222
name: 'Bun SQLite',
@@ -25,7 +25,7 @@ const SQLiteDatabasesConfigs = [
2525
env_var: {
2626
DB_FILE_NAME: 'mydb.sqlite',
2727
},
28-
packages: ['drizzle-orm', '@types/bun', 'dotenv', 'drizzle-kit'],
28+
packages: ['drizzle-orm', '@types/bun -D', 'dotenv', 'drizzle-kit -D'],
2929
},
3030
]
3131

src/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ try {
102102
}
103103

104104
try {
105-
await updateEnvFile(envVar as Record<string, string>)
105+
await updateEnvFile(envVar as unknown as Record<string, string>)
106106
// console.log(`⚙ .env file updated with ${envVar} at top`)
107107
} catch (error) {
108108
console.error('🚨 Error updating .env file:', error)
@@ -144,8 +144,9 @@ s.start(
144144
)
145145

146146
try {
147-
await pkgMangerRun(s, pkg_manger, dbConfig)
148-
s.stop(
147+
await pkgMangerRun(pkg_manger, dbConfig)
148+
s.stop?.('All packages installed successfully', 0)
149+
console.log(
149150
`\n📁 Template copied to ${dbPath.toString()}
150151
\n⚙ .env file vars at on top updated!
151152
\n🛠 drizzle.config.ts added!
@@ -154,6 +155,8 @@ try {
154155
)
155156
} catch (err) {
156157
s.stop('🚨 Failed to install packages')
157-
console.error(err)
158+
console.error(
159+
'😞 Installation failed. Please check your internet connection and \nverify that your package manager is installed and functioning correctly.'
160+
)
158161
process.exit(1)
159162
}

src/utils/pkg-manger-run.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
import { execa } from 'execa'
22

33
async function pkgMangerRun(
4-
sp: {
5-
start: (msg?: string) => void
6-
stop: (msg?: string, code?: number) => void
7-
message: (msg?: string) => void
8-
},
94
pkg_manger: symbol | 'bun' | 'yarn' | 'pnpm' | 'npm',
105
dbConfig: {
116
packages: string[]
127
}
138
) {
14-
// Create args based on package manager
15-
const installArgs =
16-
pkg_manger.toString() === 'bun'
17-
? ['add', ...dbConfig.packages]
18-
: pkg_manger.toString() === 'yarn'
19-
? ['add', ...dbConfig.packages]
20-
: ['install', ...dbConfig.packages]
9+
for (const rawPkg of dbConfig.packages) {
10+
const parts = rawPkg.trim().split(' ')
11+
const pkg = parts[0]
12+
const isDev = parts.includes('-D')
2113

22-
await execa(pkg_manger.toString(), installArgs, {
23-
stdio: 'ignore', // Show progress
24-
})
14+
const args =
15+
pkg_manger === 'bun'
16+
? isDev
17+
? ['add', '-D', pkg]
18+
: ['add', pkg]
19+
: pkg_manger === 'yarn'
20+
? isDev
21+
? ['add', '--dev', pkg]
22+
: ['add', pkg]
23+
: isDev
24+
? ['install', pkg, '--save-dev']
25+
: ['install', pkg]
26+
27+
try {
28+
await execa(pkg_manger.toString(), args, { stdio: 'ignore' })
29+
} catch (err) {
30+
throw err
31+
}
32+
}
2533
}
2634

2735
export default pkgMangerRun
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import 'dotenv/config'
2+
import { drizzle } from 'drizzle-orm/vercel-postgres'
3+
4+
const db = drizzle()
5+
6+
export default db
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { integer, pgTable, varchar } from 'drizzle-orm/pg-core'
2+
3+
export const usersTable = pgTable('users', {
4+
id: integer().primaryKey().generatedAlwaysAsIdentity(),
5+
name: varchar({ length: 255 }).notNull(),
6+
age: integer().notNull(),
7+
email: varchar({ length: 255 }).notNull().unique(),
8+
})
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'dotenv/config'
2+
import { defineConfig } from 'drizzle-kit'
3+
4+
export default defineConfig({
5+
out: './drizzle',
6+
schema: '{{path}}/schema.ts',
7+
dialect: 'postgresql',
8+
dbCredentials: {
9+
url: process.env.POSTGRES_URL!,
10+
},
11+
})

0 commit comments

Comments
 (0)