aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/with-prisma/packages/database
diff options
context:
space:
mode:
Diffstat (limited to 'examples/with-prisma/packages/database')
-rw-r--r--examples/with-prisma/packages/database/.eslintrc.js1
-rw-r--r--examples/with-prisma/packages/database/package.json39
-rw-r--r--examples/with-prisma/packages/database/prisma/schema.prisma20
-rw-r--r--examples/with-prisma/packages/database/src/client.ts11
-rw-r--r--examples/with-prisma/packages/database/src/index.ts1
-rw-r--r--examples/with-prisma/packages/database/src/seed.ts36
-rw-r--r--examples/with-prisma/packages/database/tsconfig.json5
-rw-r--r--examples/with-prisma/packages/database/tsup.config.ts12
8 files changed, 125 insertions, 0 deletions
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<Partial<User>>;
+
+(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,
+});