@s-hirano-ist/s-database 1.19.1 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@s-hirano-ist/s-database",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"description": "Prisma database schema and client for s-private project",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"types": "./src/index.ts",
|
|
11
11
|
"default": "./src/index.ts"
|
|
12
12
|
},
|
|
13
|
+
"./resolve-db-env": "./src/resolve-db-env.ts",
|
|
13
14
|
"./generated": "./src/generated/index.js",
|
|
14
15
|
"./generated/*": "./src/generated/*"
|
|
15
16
|
},
|
|
@@ -35,12 +36,11 @@
|
|
|
35
36
|
"prisma": "7.8.0"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
38
|
-
"
|
|
39
|
-
"prisma-dbml-generator": "0.12.0",
|
|
39
|
+
"prisma-erd-generator": "2.4.2",
|
|
40
40
|
"typescript": "6.0.3"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
|
-
"prisma:generate": "prisma generate",
|
|
43
|
+
"prisma:generate": "mkdir -p erd && prisma generate",
|
|
44
44
|
"prisma:migrate": "prisma migrate dev",
|
|
45
45
|
"prisma:deploy": "prisma migrate deploy",
|
|
46
46
|
"prisma:studio": "prisma studio",
|
package/prisma/schema.prisma
CHANGED
|
@@ -3,10 +3,10 @@ generator client {
|
|
|
3
3
|
output = "../src/generated"
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
generator
|
|
7
|
-
provider
|
|
8
|
-
output
|
|
9
|
-
|
|
6
|
+
generator erd {
|
|
7
|
+
provider = "prisma-erd-generator"
|
|
8
|
+
output = "../erd/schema.md"
|
|
9
|
+
mmdcPath = ""
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
datasource db {
|
package/src/generated/edge.js
CHANGED
|
@@ -196,7 +196,7 @@ const config = {
|
|
|
196
196
|
"clientVersion": "7.8.0",
|
|
197
197
|
"engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a",
|
|
198
198
|
"activeProvider": "postgresql",
|
|
199
|
-
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated\"\n}\n\ngenerator
|
|
199
|
+
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated\"\n}\n\ngenerator erd {\n provider = \"prisma-erd-generator\"\n output = \"../erd/schema.md\"\n mmdcPath = \"\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum Status {\n UNEXPORTED\n LAST_UPDATED\n EXPORTED\n}\n\nmodel Category {\n id String @id @db.VarChar(36)\n\n name String @db.VarChar(16)\n\n Articles Article[]\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n @@unique([name, userId])\n @@map(\"categories\")\n}\n\nmodel Article {\n id String @id @db.VarChar(36)\n\n title String @db.VarChar(128)\n url String @db.VarChar(2048)\n quote String? @db.VarChar(512)\n\n ogImageUrl String? @map(\"og_image_url\") @db.VarChar(4096)\n ogTitle String? @map(\"og_title\") @db.VarChar(512)\n ogDescription String? @map(\"og_description\") @db.VarChar(1024)\n\n Category Category @relation(fields: [categoryId], references: [id], onDelete: Cascade, onUpdate: Cascade)\n categoryId String @map(\"category_id\") @db.VarChar(36)\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([url, userId])\n @@map(\"articles\")\n}\n\nmodel Note {\n id String @id @db.VarChar(36)\n\n title String @db.VarChar(64)\n markdown String @db.Text\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([title, userId])\n @@map(\"notes\")\n}\n\nmodel Image {\n id String @id @db.VarChar(36)\n\n path String @db.VarChar(512)\n contentType String @map(\"content_type\") @db.VarChar(32) // e.g.: image/jpeg, image/png\n fileSize Int? @map(\"file_size\") // byte\n width Int? // pixel\n height Int? // pixel\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([path, userId])\n @@map(\"images\")\n}\n\nmodel Book {\n id String @id @db.VarChar(36)\n isbn String @db.VarChar(17)\n title String @db.VarChar(512)\n\n googleSubTitle String? @map(\"google_subtitle\") @db.VarChar(512)\n googleAuthors String[] @map(\"google_authors\")\n googleDescription String? @map(\"google_description\") @db.Text\n googleImgSrc String? @map(\"google_img_src\") @db.VarChar(2048)\n googleHref String? @map(\"google_href\") @db.VarChar(2048)\n\n imagePath String? @map(\"image_path\") @db.VarChar(512)\n\n markdown String? @db.Text\n\n rating Int // 1-5\n tags String[]\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([isbn, userId])\n @@map(\"books\")\n}\n"
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
config.runtimeDataModel = JSON.parse("{\"models\":{\"Category\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"Articles\",\"kind\":\"object\",\"type\":\"Article\",\"relationName\":\"ArticleToCategory\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"}],\"dbName\":\"categories\"},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quote\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ogImageUrl\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_image_url\"},{\"name\":\"ogTitle\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_title\"},{\"name\":\"ogDescription\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_description\"},{\"name\":\"Category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"ArticleToCategory\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"category_id\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"articles\"},\"Note\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markdown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"notes\"},\"Image\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentType\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"content_type\"},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"file_size\"},{\"name\":\"width\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"height\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"images\"},\"Book\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isbn\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleSubTitle\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_subtitle\"},{\"name\":\"googleAuthors\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_authors\"},{\"name\":\"googleDescription\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_description\"},{\"name\":\"googleImgSrc\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_img_src\"},{\"name\":\"googleHref\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_href\"},{\"name\":\"imagePath\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"image_path\"},{\"name\":\"markdown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tags\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"books\"}},\"enums\":{},\"types\":{}}")
|
package/src/generated/index.js
CHANGED
|
@@ -197,7 +197,7 @@ const config = {
|
|
|
197
197
|
"clientVersion": "7.8.0",
|
|
198
198
|
"engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a",
|
|
199
199
|
"activeProvider": "postgresql",
|
|
200
|
-
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated\"\n}\n\ngenerator
|
|
200
|
+
"inlineSchema": "generator client {\n provider = \"prisma-client-js\"\n output = \"../src/generated\"\n}\n\ngenerator erd {\n provider = \"prisma-erd-generator\"\n output = \"../erd/schema.md\"\n mmdcPath = \"\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nenum Status {\n UNEXPORTED\n LAST_UPDATED\n EXPORTED\n}\n\nmodel Category {\n id String @id @db.VarChar(36)\n\n name String @db.VarChar(16)\n\n Articles Article[]\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n @@unique([name, userId])\n @@map(\"categories\")\n}\n\nmodel Article {\n id String @id @db.VarChar(36)\n\n title String @db.VarChar(128)\n url String @db.VarChar(2048)\n quote String? @db.VarChar(512)\n\n ogImageUrl String? @map(\"og_image_url\") @db.VarChar(4096)\n ogTitle String? @map(\"og_title\") @db.VarChar(512)\n ogDescription String? @map(\"og_description\") @db.VarChar(1024)\n\n Category Category @relation(fields: [categoryId], references: [id], onDelete: Cascade, onUpdate: Cascade)\n categoryId String @map(\"category_id\") @db.VarChar(36)\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([url, userId])\n @@map(\"articles\")\n}\n\nmodel Note {\n id String @id @db.VarChar(36)\n\n title String @db.VarChar(64)\n markdown String @db.Text\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([title, userId])\n @@map(\"notes\")\n}\n\nmodel Image {\n id String @id @db.VarChar(36)\n\n path String @db.VarChar(512)\n contentType String @map(\"content_type\") @db.VarChar(32) // e.g.: image/jpeg, image/png\n fileSize Int? @map(\"file_size\") // byte\n width Int? // pixel\n height Int? // pixel\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([path, userId])\n @@map(\"images\")\n}\n\nmodel Book {\n id String @id @db.VarChar(36)\n isbn String @db.VarChar(17)\n title String @db.VarChar(512)\n\n googleSubTitle String? @map(\"google_subtitle\") @db.VarChar(512)\n googleAuthors String[] @map(\"google_authors\")\n googleDescription String? @map(\"google_description\") @db.Text\n googleImgSrc String? @map(\"google_img_src\") @db.VarChar(2048)\n googleHref String? @map(\"google_href\") @db.VarChar(2048)\n\n imagePath String? @map(\"image_path\") @db.VarChar(512)\n\n markdown String? @db.Text\n\n rating Int // 1-5\n tags String[]\n\n status Status\n\n userId String @map(\"user_id\") @db.VarChar(128)\n\n createdAt DateTime @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n exportedAt DateTime? @map(\"exported_at\")\n\n @@unique([isbn, userId])\n @@map(\"books\")\n}\n"
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
config.runtimeDataModel = JSON.parse("{\"models\":{\"Category\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"Articles\",\"kind\":\"object\",\"type\":\"Article\",\"relationName\":\"ArticleToCategory\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"}],\"dbName\":\"categories\"},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"quote\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"ogImageUrl\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_image_url\"},{\"name\":\"ogTitle\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_title\"},{\"name\":\"ogDescription\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"og_description\"},{\"name\":\"Category\",\"kind\":\"object\",\"type\":\"Category\",\"relationName\":\"ArticleToCategory\"},{\"name\":\"categoryId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"category_id\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"articles\"},\"Note\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markdown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"notes\"},\"Image\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"path\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contentType\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"content_type\"},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"type\":\"Int\",\"dbName\":\"file_size\"},{\"name\":\"width\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"height\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"images\"},\"Book\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isbn\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"googleSubTitle\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_subtitle\"},{\"name\":\"googleAuthors\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_authors\"},{\"name\":\"googleDescription\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_description\"},{\"name\":\"googleImgSrc\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_img_src\"},{\"name\":\"googleHref\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"google_href\"},{\"name\":\"imagePath\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"image_path\"},{\"name\":\"markdown\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"rating\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tags\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"Status\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\",\"dbName\":\"user_id\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"created_at\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"updated_at\"},{\"name\":\"exportedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\",\"dbName\":\"exported_at\"}],\"dbName\":\"books\"}},\"enums\":{},\"types\":{}}")
|
|
@@ -3,10 +3,10 @@ generator client {
|
|
|
3
3
|
output = "../src/generated"
|
|
4
4
|
}
|
|
5
5
|
|
|
6
|
-
generator
|
|
7
|
-
provider
|
|
8
|
-
output
|
|
9
|
-
|
|
6
|
+
generator erd {
|
|
7
|
+
provider = "prisma-erd-generator"
|
|
8
|
+
output = "../erd/schema.md"
|
|
9
|
+
mmdcPath = ""
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
datasource db {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Side-effect module: aliases Vercel Supabase Marketplace env vars
|
|
2
|
+
// (POSTGRES_PRISMA_URL / POSTGRES_URL_NON_POOLING) to the canonical
|
|
3
|
+
// names Prisma expects. Import this before any code reads
|
|
4
|
+
// process.env.DATABASE_URL or DIRECT_URL.
|
|
5
|
+
//
|
|
6
|
+
// Vercel-Supabase Marketplace で注入される URL には `sslmode=require` が
|
|
7
|
+
// 既に付与されているが、@prisma/adapter-pg (pg) はそれを strict verify
|
|
8
|
+
// として解釈し、Supabase の cert chain を Node.js が信頼できず
|
|
9
|
+
// `SELF_SIGNED_CERT_IN_CHAIN` / Prisma `P1011 TlsConnectionError` を投げる。
|
|
10
|
+
// そこで `sslmode` を **常に `no-verify` に正規化** して TLS 検証だけを
|
|
11
|
+
// 緩める(暗号化自体は維持される)。
|
|
12
|
+
//
|
|
13
|
+
// SECURITY:
|
|
14
|
+
// sslmode=no-verify はサーバー証明書の検証を行わず MITM 耐性が下がる。
|
|
15
|
+
// Vercel ↔ Supabase は同一クラウド内 routing のため現実的リスクは低いが、
|
|
16
|
+
// 理想形は Supabase root CA を `ssl.ca` で pin する形 (TODO)。
|
|
17
|
+
//
|
|
18
|
+
// ローカル開発:
|
|
19
|
+
// Doppler で `DATABASE_URL` を直接設定しているケースでは、下の `??=` で
|
|
20
|
+
// 何も上書きしないため、Docker Postgres (`sslmode=disable`) など既存の
|
|
21
|
+
// 設定にも影響しない。
|
|
22
|
+
export function withNoVerifySsl(url: string | undefined): string | undefined {
|
|
23
|
+
if (!url) return url;
|
|
24
|
+
if (/[?&]sslmode=no-verify\b/i.test(url)) return url;
|
|
25
|
+
if (/[?&]sslmode=[^&]*/i.test(url)) {
|
|
26
|
+
return url.replace(/([?&])sslmode=[^&]*/i, "$1sslmode=no-verify");
|
|
27
|
+
}
|
|
28
|
+
return `${url}${url.includes("?") ? "&" : "?"}sslmode=no-verify`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
process.env.DATABASE_URL ??= withNoVerifySsl(
|
|
32
|
+
process.env.POSTGRES_PRISMA_URL ?? process.env.POSTGRES_URL,
|
|
33
|
+
);
|
|
34
|
+
process.env.DIRECT_URL ??=
|
|
35
|
+
withNoVerifySsl(process.env.POSTGRES_URL_NON_POOLING) ??
|
|
36
|
+
process.env.DATABASE_URL;
|