UNPKG

prisma-migration-migrator

Version:

Replace Prisma as the migration engine with Knex, while keeping it as ORM

55 lines 2.26 kB
import { access, lstat, readdir, readFile } from 'node:fs/promises'; import { createHash } from 'node:crypto'; import path from 'node:path'; import { resolveMigrationDirectories } from './directories.js'; export function calculateChecksum(data) { return createHash('sha256').update(data, 'utf8').digest('hex'); } export async function getMigrationsToMigrate(params) { const { prismaMigrationsDir, knexMigrationsDir } = await resolveMigrationDirectories(params); let prismaMigrationsDirectories; try { prismaMigrationsDirectories = await readdir(prismaMigrationsDir).then((files) => Promise.all(files.map(async (name) => lstat(path.join(prismaMigrationsDir, name)).then(async (stat) => { if (!stat.isDirectory()) return { skipReason: `Element is not a folder`, name, }; const baseSqlPath = path.join(prismaMigrationsDir, name, 'migration.sql'); const finalMigrationPath = path.join(knexMigrationsDir, `${name}.mjs`); const alreadyExists = await access(finalMigrationPath) .then(() => true) .catch(() => false); if (alreadyExists) return { skipReason: 'A migration with the same name already exists', name, }; return { name, baseSqlPath, finalMigrationPath, }; }))).then((dirs) => dirs.filter(({ skipReason }) => !skipReason))); } catch (error) { console.error('> Error reading Prisma migrations directory:', error); throw error; } let migrations = []; try { migrations = await Promise.all(prismaMigrationsDirectories.map(({ baseSqlPath, finalMigrationPath, name }) => readFile(baseSqlPath, 'utf-8').then((sql) => ({ name, baseSqlPath, finalMigrationPath, sql: sql, checksum: calculateChecksum(sql), })))); } catch (error) { console.error('> Error reading Prisma migration files:', error); throw error; } return migrations; } //# sourceMappingURL=prismaMigrationsFetcher.js.map