mirror of
https://github.com/FranP-code/create-better-t-stack.git
synced 2025-10-12 23:52:15 +00:00
feat(cli): prisma + workers, prisma + turso, planetscale (postgres/mysql) support (#567)
This commit is contained in:
@@ -4,7 +4,7 @@ import { prismaAdapter } from "better-auth/adapters/prisma";
|
||||
{{#if (or (includes frontend "native-nativewind") (includes frontend "native-unistyles"))}}
|
||||
import { expo } from "@better-auth/expo";
|
||||
{{/if}}
|
||||
import prisma from "../../prisma";
|
||||
import prisma from "../db";
|
||||
|
||||
export const auth = betterAuth({
|
||||
database: prismaAdapter(prisma, {
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
{{#if (or (eq runtime "bun") (eq runtime "node"))}}
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
import { drizzle } from "drizzle-orm/planetscale-serverless";
|
||||
|
||||
export const db = drizzle({
|
||||
connection: {
|
||||
host: process.env.DATABASE_HOST,
|
||||
username: process.env.DATABASE_USERNAME,
|
||||
password: process.env.DATABASE_PASSWORD,
|
||||
},
|
||||
});
|
||||
{{else}}
|
||||
import { drizzle } from "drizzle-orm/mysql2";
|
||||
|
||||
export const db = drizzle({
|
||||
@@ -7,8 +18,21 @@ export const db = drizzle({
|
||||
},
|
||||
});
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq runtime "workers")}}
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
import { drizzle } from "drizzle-orm/planetscale-serverless";
|
||||
import { env } from "cloudflare:workers";
|
||||
|
||||
export const db = drizzle({
|
||||
connection: {
|
||||
host: env.DATABASE_HOST,
|
||||
username: env.DATABASE_USERNAME,
|
||||
password: env.DATABASE_PASSWORD,
|
||||
},
|
||||
});
|
||||
{{else}}
|
||||
import { drizzle } from "drizzle-orm/mysql2";
|
||||
import { env } from "cloudflare:workers";
|
||||
|
||||
@@ -18,3 +42,4 @@ export const db = drizzle({
|
||||
},
|
||||
});
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
import { PrismaClient } from "./generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
5
apps/cli/templates/db/prisma/mongodb/src/db/index.ts.hbs
Normal file
5
apps/cli/templates/db/prisma/mongodb/src/db/index.ts.hbs
Normal file
@@ -0,0 +1,5 @@
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
@@ -1,5 +0,0 @@
|
||||
import { PrismaClient } from "./generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
@@ -11,9 +11,15 @@ generator client {
|
||||
{{#if (eq runtime "workers")}}
|
||||
runtime = "workerd"
|
||||
{{/if}}
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
previewFeatures = ["driverAdapters"]
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "mysql"
|
||||
url = env("DATABASE_URL")
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
relationMode = "prisma"
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
12
apps/cli/templates/db/prisma/mysql/src/db/index.ts.hbs
Normal file
12
apps/cli/templates/db/prisma/mysql/src/db/index.ts.hbs
Normal file
@@ -0,0 +1,12 @@
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
import { PrismaPlanetScale } from '@prisma/adapter-planetscale'
|
||||
|
||||
const adapter = new PrismaPlanetScale({ url: process.env.DATABASE_URL })
|
||||
|
||||
const prisma = new PrismaClient({adapter});
|
||||
{{else}}
|
||||
const prisma = new PrismaClient();
|
||||
{{/if}}
|
||||
|
||||
export default prisma;
|
||||
@@ -1,5 +0,0 @@
|
||||
import { PrismaClient } from "./generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
@@ -19,4 +19,7 @@ datasource db {
|
||||
{{#if (eq dbSetup "supabase")}}
|
||||
directUrl = env("DIRECT_URL")
|
||||
{{/if}}
|
||||
{{#if (eq dbSetup "planetscale")}}
|
||||
relationMode = "prisma"
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
@@ -1,10 +1,38 @@
|
||||
import "dotenv/config";
|
||||
import path from "node:path";
|
||||
import type { PrismaConfig } from "prisma";
|
||||
{{#if (eq dbSetup "d1")}}
|
||||
import { PrismaD1 } from "@prisma/adapter-d1";
|
||||
{{/if}}
|
||||
{{#if (eq dbSetup "turso")}}
|
||||
import { PrismaLibSQL } from "@prisma/adapter-libsql";
|
||||
{{/if}}
|
||||
|
||||
export default {
|
||||
{{#if (or (eq dbSetup "d1") (eq dbSetup "turso"))}}
|
||||
experimental: {
|
||||
adapter: true
|
||||
},
|
||||
{{/if}}
|
||||
schema: path.join("prisma", "schema"),
|
||||
migrations: {
|
||||
path: path.join("prisma", "migrations"),
|
||||
}
|
||||
},
|
||||
{{#if (eq dbSetup "d1")}}
|
||||
async adapter() {
|
||||
return new PrismaD1({
|
||||
CLOUDFLARE_D1_TOKEN: process.env.CLOUDFLARE_D1_TOKEN,
|
||||
CLOUDFLARE_ACCOUNT_ID: process.env.CLOUDFLARE_ACCOUNT_ID,
|
||||
CLOUDFLARE_DATABASE_ID: process.env.CLOUDFLARE_DATABASE_ID,
|
||||
});
|
||||
},
|
||||
{{/if}}
|
||||
{{#if (eq dbSetup "turso")}}
|
||||
async adapter() {
|
||||
return new PrismaLibSQL({
|
||||
url: process.env.DATABASE_URL || "",
|
||||
authToken: process.env.DATABASE_AUTH_TOKEN,
|
||||
});
|
||||
},
|
||||
{{/if}}
|
||||
} satisfies PrismaConfig;
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
import { PrismaClient } from "./generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
@@ -10,10 +10,20 @@ generator client {
|
||||
{{/if}}
|
||||
{{#if (eq runtime "workers")}}
|
||||
runtime = "workerd"
|
||||
{{#if (eq dbSetup "d1")}}
|
||||
previewFeatures = ["driverAdapters"]
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
{{#if (eq dbSetup "turso")}}
|
||||
previewFeatures = ["driverAdapters"]
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "sqlite"
|
||||
{{#if (eq dbSetup "turso")}}
|
||||
url = "file:./local.db"
|
||||
{{else}}
|
||||
url = env("DATABASE_URL")
|
||||
{{/if}}
|
||||
}
|
||||
|
||||
28
apps/cli/templates/db/prisma/sqlite/src/db/index.ts.hbs
Normal file
28
apps/cli/templates/db/prisma/sqlite/src/db/index.ts.hbs
Normal file
@@ -0,0 +1,28 @@
|
||||
{{#if (eq dbSetup "d1")}}
|
||||
import { env } from "cloudflare:workers";
|
||||
import { PrismaD1 } from "@prisma/adapter-d1";
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
|
||||
const adapter = new PrismaD1(env.DB);
|
||||
const prisma = new PrismaClient({ adapter });
|
||||
|
||||
export default prisma;
|
||||
{{else if (eq dbSetup "turso")}}
|
||||
import { PrismaLibSQL } from "@prisma/adapter-libsql";
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
|
||||
const adapter = new PrismaLibSQL({
|
||||
url: process.env.DATABASE_URL || "",
|
||||
authToken: process.env.DATABASE_AUTH_TOKEN,
|
||||
});
|
||||
|
||||
const prisma = new PrismaClient({ adapter });
|
||||
|
||||
export default prisma;
|
||||
{{else}}
|
||||
import { PrismaClient } from "../../prisma/generated/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default prisma;
|
||||
{{/if}}
|
||||
@@ -1,7 +1,7 @@
|
||||
import alchemy from "alchemy";
|
||||
{{#if (eq webDeploy "alchemy")}}
|
||||
{{#if (includes frontend "next")}}
|
||||
import { Next } from "alchemy/cloudflare";
|
||||
import { Nextjs } from "alchemy/cloudflare";
|
||||
{{else if (includes frontend "nuxt")}}
|
||||
import { Nuxt } from "alchemy/cloudflare";
|
||||
{{else if (includes frontend "svelte")}}
|
||||
@@ -44,13 +44,17 @@ await Exec("db-generate", {
|
||||
});
|
||||
|
||||
const db = await D1Database("database", {
|
||||
{{#if (eq orm "prisma")}}
|
||||
migrationsDir: "apps/server/prisma/migrations",
|
||||
{{else if (eq orm "drizzle")}}
|
||||
migrationsDir: "apps/server/src/db/migrations",
|
||||
{{/if}}
|
||||
});
|
||||
{{/if}}
|
||||
|
||||
{{#if (eq webDeploy "alchemy")}}
|
||||
{{#if (includes frontend "next")}}
|
||||
export const web = await Next("web", {
|
||||
export const web = await Nextjs("web", {
|
||||
{{#if (eq serverDeploy "alchemy")}}cwd: "apps/web",{{/if}}
|
||||
bindings: {
|
||||
{{#if (eq backend "convex")}}
|
||||
|
||||
@@ -27,7 +27,12 @@
|
||||
"database_name": "YOUR_DB_NAME",
|
||||
"database_id": "YOUR_DB_ID",
|
||||
"preview_database_id": "local-test-db",
|
||||
{{#if (eq orm "drizzle")}}
|
||||
"migrations_dir": "./src/db/migrations"
|
||||
{{/if}}
|
||||
{{#if (eq orm "prisma")}}
|
||||
"migrations_dir": "./prisma/migrations"
|
||||
{{/if}}
|
||||
}
|
||||
]
|
||||
{{/if}}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{#if (eq api "orpc")}}
|
||||
import z from "zod";
|
||||
import prisma from "../../prisma";
|
||||
import prisma from "../db";
|
||||
import { publicProcedure } from "../lib/orpc";
|
||||
|
||||
export const todoRouter = {
|
||||
@@ -52,7 +52,7 @@ export const todoRouter = {
|
||||
{{#if (eq api "trpc")}}
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import z from "zod";
|
||||
import prisma from "../../prisma";
|
||||
import prisma from "../db";
|
||||
import { publicProcedure, router } from "../lib/trpc";
|
||||
|
||||
export const todoRouter = router({
|
||||
|
||||
@@ -1,7 +1,2 @@
|
||||
[install]
|
||||
{{#if (or (or (includes frontend "nuxt") (includes frontend "native-nativewind")) (includes frontend
|
||||
"native-unistyles"))}}
|
||||
# linker = "isolated"
|
||||
{{else}}
|
||||
linker = "isolated"
|
||||
{{/if}}
|
||||
@@ -1,3 +1,6 @@
|
||||
{{#if (or (eq webDeploy "alchemy") (eq webDeploy "wrangler"))}}
|
||||
import { initOpenNextCloudflareForDev } from "@opennextjs/cloudflare";
|
||||
{{/if}}
|
||||
import type { NextConfig } from "next";
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
@@ -5,3 +8,7 @@ const nextConfig: NextConfig = {
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
|
||||
{{#if (or (eq webDeploy "alchemy") (eq webDeploy "wrangler"))}}
|
||||
initOpenNextCloudflareForDev();
|
||||
{{/if}}
|
||||
Reference in New Issue
Block a user