| 12345678910111213141516171819202122232425262728293031323334 |
- import fs from 'node:fs'
- import path from 'node:path'
- import { fileURLToPath } from 'node:url'
- import Database from 'better-sqlite3'
- import { drizzle } from 'drizzle-orm/better-sqlite3'
- import { migrate } from 'drizzle-orm/better-sqlite3/migrator'
- import * as schema from './schema'
- export type DB = ReturnType<typeof createDb>
- export function createDb(file: string) {
- fs.mkdirSync(path.dirname(file), { recursive: true })
- const sqlite = new Database(file)
- sqlite.pragma('journal_mode = WAL')
- sqlite.pragma('synchronous = NORMAL')
- sqlite.pragma('foreign_keys = ON')
- sqlite.pragma('busy_timeout = 5000')
- return drizzle(sqlite, { schema })
- }
- /** 迁移目录:开发时在 apps/server/drizzle,打包后与 dist 同级 */
- function migrationsFolder() {
- const here = path.dirname(fileURLToPath(import.meta.url))
- for (const candidate of [path.join(here, '../../drizzle'), path.join(here, '../drizzle')]) {
- if (fs.existsSync(path.join(candidate, 'meta/_journal.json'))) return candidate
- }
- throw new Error('找不到数据库迁移目录 drizzle/')
- }
- export function migrateDb(db: DB) {
- migrate(db, { migrationsFolder: migrationsFolder() })
- }
- export { schema }
|