diff --git a/frameworks/react-cra/add-ons/prisma/assets/prisma.config.ts.ejs b/frameworks/react-cra/add-ons/prisma/assets/prisma.config.ts.ejs new file mode 100644 index 00000000..544dfa29 --- /dev/null +++ b/frameworks/react-cra/add-ons/prisma/assets/prisma.config.ts.ejs @@ -0,0 +1,13 @@ +import { defineConfig, env } from 'prisma/config' + +export default defineConfig({ + schema: './prisma/schema.prisma', + migrations: { + path: './prisma/migrations', + seed: 'tsx prisma/seed.ts', + }, + datasource: { + url: env('DATABASE_URL'), + }, +}); + \ No newline at end of file diff --git a/frameworks/react-cra/add-ons/prisma/assets/schema.prisma.ejs b/frameworks/react-cra/add-ons/prisma/assets/prisma/schema.prisma.ejs similarity index 80% rename from frameworks/react-cra/add-ons/prisma/assets/schema.prisma.ejs rename to frameworks/react-cra/add-ons/prisma/assets/prisma/schema.prisma.ejs index 63cefd51..7e683661 100644 --- a/frameworks/react-cra/add-ons/prisma/assets/schema.prisma.ejs +++ b/frameworks/react-cra/add-ons/prisma/assets/prisma/schema.prisma.ejs @@ -1,10 +1,10 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client" + output = "../src/generated/prisma" } datasource db { provider = "<%= addOnOption.prisma.database === "postgres" ? "postgresql" : addOnOption.prisma.database %>" - url = env("DATABASE_URL") } model Todo { diff --git a/frameworks/react-cra/add-ons/prisma/assets/prisma/seed.ts.ejs b/frameworks/react-cra/add-ons/prisma/assets/prisma/seed.ts.ejs new file mode 100644 index 00000000..69363602 --- /dev/null +++ b/frameworks/react-cra/add-ons/prisma/assets/prisma/seed.ts.ejs @@ -0,0 +1,51 @@ +import { PrismaClient } from "../src/generated/prisma/client.js"; + +<% if (addOnOption.prisma.database === 'postgres') { %> +import { PrismaPg } from '@prisma/adapter-pg'; + +const adapter = new PrismaPg({ + connectionString: process.env.DATABASE_URL!, +});<% } %> + +<% if (addOnOption.prisma.database === 'mysql') { %> +import { PrismaMariaDb } from '@prisma/adapter-mariadb'; +const adapter = new PrismaMariaDb({ + host: "localhost", + port: 3306, + connectionLimit: 5 +});<% } %> + +<% if (addOnOption.prisma.database === 'sqlite') { %> +import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3'; +const adapter = new PrismaBetterSQLite3({ + url: process.env.DATABASE_URL || 'file:./dev.db' +});<% } %> + +const prisma = new PrismaClient({adapter}) + +async function main() { + console.log('🌱 Seeding database...') + + // Clear existing todos + await prisma.todo.deleteMany() + + // Create example todos + const todos = await prisma.todo.createMany({ + data: [ + { title: 'Buy groceries' }, + { title: 'Read a book' }, + { title: 'Workout' }, + ], + }) + + console.log(`✅ Created ${todos.count} todos`) +} + +main() + .catch((e) => { + console.error('❌ Error seeding database:', e) + process.exit(1) + }) + .finally(async () => { + await prisma.$disconnect() + }) diff --git a/frameworks/react-cra/add-ons/prisma/assets/seed.ts b/frameworks/react-cra/add-ons/prisma/assets/seed.ts deleted file mode 100644 index 8851a9b8..00000000 --- a/frameworks/react-cra/add-ons/prisma/assets/seed.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { PrismaClient } from '@prisma/client' - -const prisma = new PrismaClient() - -async function main() { - console.log('🌱 Seeding database...') - - // Clear existing todos - await prisma.todo.deleteMany() - - // Create example todos - const todos = await prisma.todo.createMany({ - data: [ - { title: 'Buy groceries' }, - { title: 'Read a book' }, - { title: 'Workout' }, - ], - }) - - console.log(`✅ Created ${todos.count} todos`) -} - -main() - .catch((e) => { - console.error('❌ Error seeding database:', e) - process.exit(1) - }) - .finally(async () => { - await prisma.$disconnect() - }) diff --git a/frameworks/react-cra/add-ons/prisma/assets/src/db.ts b/frameworks/react-cra/add-ons/prisma/assets/src/db.ts deleted file mode 100644 index ef4539b4..00000000 --- a/frameworks/react-cra/add-ons/prisma/assets/src/db.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { PrismaClient } from '@prisma/client' - -declare global { - var __prisma: PrismaClient | undefined -} - -export const prisma = globalThis.__prisma || new PrismaClient() - -if (process.env.NODE_ENV !== 'production') { - globalThis.__prisma = prisma -} diff --git a/frameworks/react-cra/add-ons/prisma/assets/src/db.ts.ejs b/frameworks/react-cra/add-ons/prisma/assets/src/db.ts.ejs new file mode 100644 index 00000000..abd821ae --- /dev/null +++ b/frameworks/react-cra/add-ons/prisma/assets/src/db.ts.ejs @@ -0,0 +1,32 @@ +import { PrismaClient } from './generated/prisma/client.js' + +<% if (addOnOption.prisma.database === 'postgres') { %> +import { PrismaPg } from '@prisma/adapter-pg'; + +const adapter = new PrismaPg({ + connectionString: process.env.DATABASE_URL!, +});<% } %> + +<% if (addOnOption.prisma.database === 'mysql') { %> +import { PrismaMariaDb } from '@prisma/adapter-mariadb'; +const adapter = new PrismaMariaDb({ + host: "localhost", + port: 3306, + connectionLimit: 5 +});<% } %> + +<% if (addOnOption.prisma.database === 'sqlite') { %> +import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3'; +const adapter = new PrismaBetterSQLite3({ + url: process.env.DATABASE_URL || 'file:./dev.db' +});<% } %> + +declare global { + var __prisma: PrismaClient | undefined +} + +export const prisma = globalThis.__prisma || new PrismaClient({ adapter }) + +if (process.env.NODE_ENV !== 'production') { + globalThis.__prisma = prisma +} diff --git a/frameworks/react-cra/add-ons/prisma/package.json.ejs b/frameworks/react-cra/add-ons/prisma/package.json.ejs index 847f7dfb..1880d00a 100644 --- a/frameworks/react-cra/add-ons/prisma/package.json.ejs +++ b/frameworks/react-cra/add-ons/prisma/package.json.ejs @@ -1,17 +1,14 @@ { "dependencies": { "prisma": "^6.16.3", - "@prisma/client": "^6.16.3"<% if (addOnOption.prisma.database === 'postgres') { %>, - "pg": "^8.11.0"<% } %><% if (addOnOption.prisma.database === 'mysql') { %>, - "mysql2": "^3.6.0"<% } %> + "@prisma/client": "^7.0.0"<% if (addOnOption.prisma.database === 'postgres') { %>, + "@prisma/adapter-pg": "^7.0.0"<% } %><% if (addOnOption.prisma.database === 'mysql') { %>, + "@prisma/adapter-mariadb": "^7.0.0"<% } %><% if (addOnOption.prisma.database === 'sqlite') { %>, + "@prisma/adapter-better-sqlite3": "^7.0.0"<% } %> }, "devDependencies": { "dotenv-cli": "^10.0.0", - "ts-node": "^10.9.2", - <% if (addOnOption.prisma.database === 'postgres') { %> - "@types/pg": "^8.10.0"<% } %><% if (addOnOption.prisma.database === 'mysql') { %> - "@types/mysql2": "^3.6.0"<% } %><% if (addOnOption.prisma.database === 'sqlite') { %> - "@types/better-sqlite3": "^7.6.0"<% } %> + "tsx": "^4.20.6" }, "scripts": {<% if (addOnOption.prisma.database === 'postgres') { %> "post-cta-init": "npx create-db@latest",<% } %> @@ -20,8 +17,5 @@ "db:migrate": "dotenv -e .env.local -- prisma migrate dev", "db:studio": "dotenv -e .env.local -- prisma studio", "db:seed": "dotenv -e .env.local -- prisma db seed" - }, - "prisma": { - "seed": "ts-node seed.ts" } -} \ No newline at end of file +} diff --git a/frameworks/react-cra/src/checksum.ts b/frameworks/react-cra/src/checksum.ts index c6705210..8a20e7b1 100644 --- a/frameworks/react-cra/src/checksum.ts +++ b/frameworks/react-cra/src/checksum.ts @@ -1,3 +1,3 @@ // This file is auto-generated. Do not edit manually. // Generated from add-ons, examples, hosts, project, and toolchains directories -export const contentChecksum = '22415a1abc64758541fdba06e79f1b24860e8100379e3a08c2cd0084f5ec26f9' +export const contentChecksum = '2124eaa547a2067f472354b25eb9ad5472526504fb8a80226ee6996a412e2b49'