62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import { defineConfig } from 'prisma/config'
|
|
|
|
function loadEnvValuesFromDotEnv(names: string[]): void {
|
|
const missingNames = names.filter((name) => {
|
|
const value = process.env[name]
|
|
return !(typeof value === 'string' && value.length > 0)
|
|
})
|
|
if (missingNames.length === 0) {
|
|
return
|
|
}
|
|
|
|
const envPath = path.resolve(process.cwd(), '.env')
|
|
if (!fs.existsSync(envPath)) {
|
|
return
|
|
}
|
|
|
|
const content = fs.readFileSync(envPath, 'utf8')
|
|
for (const line of content.split(/\r?\n/)) {
|
|
const trimmed = line.trim()
|
|
if (!trimmed || trimmed.startsWith('#')) continue
|
|
|
|
const separatorIndex = trimmed.indexOf('=')
|
|
if (separatorIndex <= 0) continue
|
|
|
|
const key = trimmed.slice(0, separatorIndex).trim()
|
|
if (!missingNames.includes(key)) continue
|
|
|
|
let value = trimmed.slice(separatorIndex + 1).trim()
|
|
if (
|
|
(value.startsWith('"') && value.endsWith('"')) ||
|
|
(value.startsWith("'") && value.endsWith("'"))
|
|
) {
|
|
value = value.slice(1, -1)
|
|
}
|
|
|
|
if (value.length > 0) {
|
|
process.env[key] = value
|
|
}
|
|
}
|
|
}
|
|
|
|
loadEnvValuesFromDotEnv(['DATABASE_URL', 'SHADOW_DATABASE_URL'])
|
|
|
|
if (!process.env.DATABASE_URL) {
|
|
throw new Error('DATABASE_URL 未配置。请在 .env 中设置 DATABASE_URL。')
|
|
}
|
|
|
|
export default defineConfig({
|
|
schema: 'prisma/schema.prisma',
|
|
migrations: {
|
|
path: 'prisma/migrations',
|
|
},
|
|
datasource: {
|
|
url: process.env.DATABASE_URL,
|
|
...(process.env.SHADOW_DATABASE_URL
|
|
? { shadowDatabaseUrl: process.env.SHADOW_DATABASE_URL }
|
|
: {}),
|
|
},
|
|
})
|