diff --git a/.changeset/large-lizards-write.md b/.changeset/large-lizards-write.md new file mode 100644 index 0000000..de02972 --- /dev/null +++ b/.changeset/large-lizards-write.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": patch +--- + +Add support for Neon database in db-setup diff --git a/apps/cli/src/constants.ts b/apps/cli/src/constants.ts index 616277f..a960922 100644 --- a/apps/cli/src/constants.ts +++ b/apps/cli/src/constants.ts @@ -34,6 +34,7 @@ export const dependencyVersionMap = { "drizzle-kit": "^0.31.2", "@libsql/client": "^0.15.9", + "@neondatabase/serverless": "^1.0.1", pg: "^8.14.1", "@types/pg": "^8.11.11", diff --git a/apps/cli/src/helpers/setup/db-setup.ts b/apps/cli/src/helpers/setup/db-setup.ts index fc10608..4d38fd0 100644 --- a/apps/cli/src/helpers/setup/db-setup.ts +++ b/apps/cli/src/helpers/setup/db-setup.ts @@ -48,11 +48,19 @@ export async function setupDatabase(config: ProjectConfig): Promise { projectDir: serverDir, }); } else if (database === "postgres") { - await addPackageDependency({ - dependencies: ["drizzle-orm", "pg"], - devDependencies: ["drizzle-kit", "@types/pg"], - projectDir: serverDir, - }); + if (dbSetup === "neon") { + await addPackageDependency({ + dependencies: ["drizzle-orm", "@neondatabase/serverless"], + devDependencies: ["drizzle-kit"], + projectDir: serverDir, + }); + } else { + await addPackageDependency({ + dependencies: ["drizzle-orm", "pg"], + devDependencies: ["drizzle-kit", "@types/pg"], + projectDir: serverDir, + }); + } } else if (database === "mysql") { await addPackageDependency({ dependencies: ["drizzle-orm", "mysql2"], diff --git a/apps/cli/templates/db/drizzle/postgres/src/db/index.ts.hbs b/apps/cli/templates/db/drizzle/postgres/src/db/index.ts.hbs index 3873607..732bdd7 100644 --- a/apps/cli/templates/db/drizzle/postgres/src/db/index.ts.hbs +++ b/apps/cli/templates/db/drizzle/postgres/src/db/index.ts.hbs @@ -1,12 +1,29 @@ {{#if (or (eq runtime "bun") (eq runtime "node"))}} +{{#if (eq dbSetup "neon")}} +import { neon } from '@neondatabase/serverless'; +import { drizzle } from 'drizzle-orm/neon-http'; + +const sql = neon(process.env.DATABASE_URL || ""); +export const db = drizzle(sql); +{{else}} import { drizzle } from "drizzle-orm/node-postgres"; export const db = drizzle(process.env.DATABASE_URL || ""); {{/if}} +{{/if}} {{#if (eq runtime "workers")}} +{{#if (eq dbSetup "neon")}} +import { neon } from '@neondatabase/serverless'; +import { drizzle } from 'drizzle-orm/neon-http'; +import { env } from "cloudflare:workers"; + +const sql = neon(env.DATABASE_URL || ""); +export const db = drizzle(sql); +{{else}} import { drizzle } from "drizzle-orm/node-postgres"; import { env } from "cloudflare:workers"; export const db = drizzle(env.DATABASE_URL || ""); {{/if}} +{{/if}}