UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

65 lines (64 loc) 2.42 kB
// @ts-strict-ignore import { commitTransaction } from '../../utilities/commitTransaction.js'; import { createLocalReq } from '../../utilities/createLocalReq.js'; import { initTransaction } from '../../utilities/initTransaction.js'; import { killTransaction } from '../../utilities/killTransaction.js'; import { getMigrations } from './getMigrations.js'; import { readMigrationFiles } from './readMigrationFiles.js'; export async function migrateDown() { const { payload } = this; const migrationFiles = await readMigrationFiles({ payload }); const { existingMigrations, latestBatch } = await getMigrations({ payload }); if (!existingMigrations?.length) { payload.logger.info({ msg: 'No migrations to rollback.' }); return; } payload.logger.info({ msg: `Rolling back batch ${latestBatch} consisting of ${existingMigrations.length} migration(s).` }); const latestBatchMigrations = existingMigrations.filter(({ batch })=>batch === latestBatch); for (const migration of latestBatchMigrations){ const migrationFile = migrationFiles.find((m)=>m.name === migration.name); if (!migrationFile) { throw new Error(`Migration ${migration.name} not found locally.`); } const start = Date.now(); const req = await createLocalReq({}, payload); try { payload.logger.info({ msg: `Migrating down: ${migrationFile.name}` }); await initTransaction(req); const session = payload.db.sessions?.[await req.transactionID]; await migrationFile.down({ payload, req, session }); payload.logger.info({ msg: `Migrated down: ${migrationFile.name} (${Date.now() - start}ms)` }); // Waiting for implementation here await payload.delete({ id: migration.id, collection: 'payload-migrations', req }); await commitTransaction(req); } catch (err) { await killTransaction(req); payload.logger.error({ err, msg: `Error running migration ${migrationFile.name}` }); process.exit(1); } } } //# sourceMappingURL=migrateDown.js.map