UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

115 lines (113 loc) 4.01 kB
const require_runtime = require('../_virtual/_rolldown/runtime.cjs'); const require_db_doctor = require('./db-doctor.cjs'); let node_fs = require("node:fs"); let node_path = require("node:path"); let node_child_process = require("node:child_process"); //#region src/cli/db-repair.ts async function repairPlugin(info, mode) { const diagnosis = await require_db_doctor.diagnosePlugin(info); if (diagnosis.diagnosis === "error") return { status: "refused", diagnosis, message: `Cannot repair — diagnosis failed: ${diagnosis.error}` }; if (mode === "recreate") return { status: "refused", diagnosis, message: "Recreate mode is not supported without per-plugin schemas. Use --mode history-reset instead." }; if (diagnosis.diagnosis !== "drift-safe-repair" && diagnosis.diagnosis !== "legacy-importable") { if (diagnosis.diagnosis === "healthy") return { status: "refused", diagnosis, message: "Database is healthy — no repair needed." }; if (diagnosis.diagnosis === "no-local-migrations") return { status: "refused", diagnosis, message: "No local migrations found for this plugin." }; if (diagnosis.diagnosis === "drift-manual") return { status: "refused", diagnosis, message: `Partial drift detected (${diagnosis.missingTables.length}/${diagnosis.expectedTables.length} tables missing). Manual intervention required — some tables exist but schema is incomplete.` }; if (diagnosis.diagnosis === "unapplied") return { status: "refused", diagnosis, message: "Migrations have not been applied yet. Start the dev server to apply them." }; return { status: "refused", diagnosis, message: `Cannot repair — diagnosis: ${diagnosis.diagnosis}` }; } const { Pool } = await Promise.resolve().then(() => require("../node_modules/pg/esm/index.cjs")); const journalRef = `"${diagnosis.journalSchema}"."${diagnosis.journalTable}"`; const pool = new Pool({ connectionString: info.databaseUrl, ssl: info.databaseUrl.includes("localhost") || info.databaseUrl.includes("127.0.0.1") ? false : { rejectUnauthorized: false }, max: 1, connectionTimeoutMillis: 1e4 }); try { await pool.query(`DROP TABLE IF EXISTS ${journalRef}`); } catch (error) { return { status: "error", diagnosis, message: `Failed to reset journal: ${error instanceof Error ? error.message : String(error)}` }; } finally { await pool.end().catch(() => {}); } if (info.workspaceDir) { const configPath = (0, node_path.join)(info.workspaceDir, "drizzle.config.ts"); if ((0, node_fs.existsSync)(configPath)) try { await spawnDrizzleMigrate(info.workspaceDir, configPath); return { status: "repaired", diagnosis, message: `Migration history reset for ${diagnosis.plugin}. Migrations reapplied via drizzle-kit. Restart the dev server to confirm.` }; } catch (error) { return { status: "repaired", diagnosis, message: `Migration history reset for ${diagnosis.plugin}. Automatic reapply failed: ${error instanceof Error ? error.message : String(error)}. Run \`bun run --cwd ${info.workspaceDir} db:migrate\` manually.` }; } } return { status: "repaired", diagnosis, message: `Migration history reset for ${diagnosis.plugin}. No local drizzle.config.ts found — start the dev server to reapply migrations.` }; } function spawnDrizzleMigrate(cwd, configPath) { return new Promise((resolvePromise, reject) => { const child = (0, node_child_process.spawn)("npx", [ "drizzle-kit", "migrate", "--config", configPath ], { cwd, stdio: "pipe", shell: true }); let stderr = ""; child.stderr?.on("data", (data) => { stderr += data.toString(); }); child.on("error", (err) => reject(err)); child.on("exit", (code) => { if (code === 0) resolvePromise(); else reject(/* @__PURE__ */ new Error(`drizzle-kit migrate exited with code ${code}: ${stderr}`)); }); }); } //#endregion exports.repairPlugin = repairPlugin; //# sourceMappingURL=db-repair.cjs.map