import { drizzle } from 'drizzle-orm/better-sqlite3' import { migrate } from 'drizzle-orm/better-sqlite3/migrator' import Database from 'better-sqlite3' import path from 'node:path' import { fileURLToPath } from 'node:url' const argv = process.argv.slice(2) const migrationsFolderRelative = argv[0] if (!migrationsFolderRelative) { throw new Error('migrations 文件夹未设置') } export async function runMigrations() { const dbUrl = process.env.DATABASE_URL || '' const sqlitePath = dbUrl.startsWith('file:') ? dbUrl.slice(5) : dbUrl if (!sqlitePath) { throw new Error('DATABASE_URL 未设置,且未提供有效的 SQLite 文件路径') } const sqlite = new Database(sqlitePath) const db = drizzle(sqlite) try { console.log(`🚀 开始执行 SQLite 迁移... (${sqlitePath})`) const migrationsFolder = path.resolve(process.cwd(), migrationsFolderRelative) await migrate(db, { migrationsFolder, }) console.log('✅ SQLite 迁移完成!') } catch (err) { console.log('❌ 迁移失败:', err) throw err } finally { sqlite.close() } } const isMain = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url) if (isMain) { runMigrations().catch((err) => { console.error(err) process.exit(1) }) }