From 8b2c4a38a461ff5ecc95972291bc711e2c5dec9a Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 28 Apr 2023 01:47:57 +0800 Subject: --- .../with-prisma/packages/database/.eslintrc.js | 1 + .../with-prisma/packages/database/package.json | 39 ++++++++++++++++++++++ .../packages/database/prisma/schema.prisma | 20 +++++++++++ .../with-prisma/packages/database/src/client.ts | 11 ++++++ .../with-prisma/packages/database/src/index.ts | 1 + examples/with-prisma/packages/database/src/seed.ts | 36 ++++++++++++++++++++ .../with-prisma/packages/database/tsconfig.json | 5 +++ .../with-prisma/packages/database/tsup.config.ts | 12 +++++++ 8 files changed, 125 insertions(+) create mode 100644 examples/with-prisma/packages/database/.eslintrc.js create mode 100644 examples/with-prisma/packages/database/package.json create mode 100644 examples/with-prisma/packages/database/prisma/schema.prisma create mode 100644 examples/with-prisma/packages/database/src/client.ts create mode 100644 examples/with-prisma/packages/database/src/index.ts create mode 100644 examples/with-prisma/packages/database/src/seed.ts create mode 100644 examples/with-prisma/packages/database/tsconfig.json create mode 100644 examples/with-prisma/packages/database/tsup.config.ts (limited to 'examples/with-prisma/packages/database') diff --git a/examples/with-prisma/packages/database/.eslintrc.js b/examples/with-prisma/packages/database/.eslintrc.js new file mode 100644 index 0000000..dc369e9 --- /dev/null +++ b/examples/with-prisma/packages/database/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require("config/eslint-preset"); diff --git a/examples/with-prisma/packages/database/package.json b/examples/with-prisma/packages/database/package.json new file mode 100644 index 0000000..b7c046c --- /dev/null +++ b/examples/with-prisma/packages/database/package.json @@ -0,0 +1,39 @@ +{ + "name": "database", + "version": "1.0.0", + "license": "MIT", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "files": [ + "dist/**" + ], + "scripts": { + "build": "tsup", + "clean": "rimraf .turbo node_modules dist", + "db:migrate:deploy": "prisma migrate deploy", + "db:migrate:dev": "prisma migrate dev", + "db:push": "prisma db push", + "db:seed": "tsx src/seed.ts", + "dev": "tsup --watch", + "format": "prisma format", + "generate": "prisma generate", + "lint": "eslint \"src/**/*.ts\"", + "prebuild": "npm run generate", + "predev": "npm run generate", + "studio": "prisma studio" + }, + "dependencies": { + "@prisma/client": "^3.10.0" + }, + "devDependencies": { + "config": "*", + "eslint": "^8.12.0", + "prisma": "^3.10.0", + "rimraf": "^3.0.2", + "tsconfig": "*", + "tsup": "^5.11.13", + "tsx": "^3.7.1", + "typescript": "^4.5.5" + } +} diff --git a/examples/with-prisma/packages/database/prisma/schema.prisma b/examples/with-prisma/packages/database/prisma/schema.prisma new file mode 100644 index 0000000..b2fb730 --- /dev/null +++ b/examples/with-prisma/packages/database/prisma/schema.prisma @@ -0,0 +1,20 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + referentialIntegrity = "prisma" +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["referentialIntegrity"] +} + +model User { + id String @id @default(cuid()) + name String? + email String? @unique + emailVerified DateTime? +} diff --git a/examples/with-prisma/packages/database/src/client.ts b/examples/with-prisma/packages/database/src/client.ts new file mode 100644 index 0000000..481d7a9 --- /dev/null +++ b/examples/with-prisma/packages/database/src/client.ts @@ -0,0 +1,11 @@ +import { PrismaClient } from "@prisma/client"; + +declare global { + var prisma: PrismaClient | undefined; +} + +export const prisma = global.prisma || new PrismaClient(); + +if (process.env.NODE_ENV !== "production") global.prisma = prisma; + +export * from "@prisma/client"; diff --git a/examples/with-prisma/packages/database/src/index.ts b/examples/with-prisma/packages/database/src/index.ts new file mode 100644 index 0000000..5ec7692 --- /dev/null +++ b/examples/with-prisma/packages/database/src/index.ts @@ -0,0 +1 @@ +export * from "./client"; diff --git a/examples/with-prisma/packages/database/src/seed.ts b/examples/with-prisma/packages/database/src/seed.ts new file mode 100644 index 0000000..a5d7752 --- /dev/null +++ b/examples/with-prisma/packages/database/src/seed.ts @@ -0,0 +1,36 @@ +import { prisma } from "."; + +import type { User } from "@prisma/client"; + +const DEFAULT_USERS = [ + // Add your own user to pre-populate the database with + { + name: "Tim Apple", + email: "tim@apple.com", + }, +] as Array>; + +(async () => { + try { + await Promise.all( + DEFAULT_USERS.map((user) => + prisma.user.upsert({ + where: { + email: user.email!, + }, + update: { + ...user, + }, + create: { + ...user, + }, + }) + ) + ); + } catch (error) { + console.error(error); + process.exit(1); + } finally { + await prisma.$disconnect(); + } +})(); diff --git a/examples/with-prisma/packages/database/tsconfig.json b/examples/with-prisma/packages/database/tsconfig.json new file mode 100644 index 0000000..cbf6061 --- /dev/null +++ b/examples/with-prisma/packages/database/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/node16.json", + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "tsup.config.ts"], + "exclude": ["node_modules"] +} diff --git a/examples/with-prisma/packages/database/tsup.config.ts b/examples/with-prisma/packages/database/tsup.config.ts new file mode 100644 index 0000000..27be5a7 --- /dev/null +++ b/examples/with-prisma/packages/database/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +const isProduction = process.env.NODE_ENV === "production"; + +export default defineConfig({ + clean: true, + dts: true, + entry: ["src/index.ts"], + format: ["cjs", "esm"], + minify: isProduction, + sourcemap: true, +}); -- cgit v1.2.3-70-g09d2