UNPKG

lipgrate

Version:

Lipgrate is a clean and safe migration toolkit for SQL databases. Designed to be readable, minimal, and powerful.

54 lines (41 loc) 1.55 kB
const fs = require('fs'); const path = require('path'); const logger = require('../../common/logger'); async function runSeeds(db, config) { const seedsDir = path.join(process.cwd(), config.seeds.directory || 'seeds'); if (!fs.existsSync(seedsDir)) { logger.warning('No seeds directory found. Nothing to seed.'); return; } const seedFiles = fs.readdirSync(seedsDir).filter(file => file.endsWith('.js')).sort(); if (seedFiles.length === 0) { logger.info('No seed files found.'); return; } logger.info(`Found ${seedFiles.length} seed files...`); await db.query('BEGIN'); logger.info(' -> Transaction started.'); try { for (const file of seedFiles) { const seedPath = path.join(seedsDir, file); // Bust the cache to ensure the latest version is run delete require.cache[require.resolve(seedPath)]; const seeder = require(seedPath); if (typeof seeder.run !== 'function') { logger.warning(`Skipping ${file}: 'run' function not found or not a function.`); continue; } logger.info(`- Running seed: ${file}`); await seeder.run(db); } await db.query('COMMIT'); logger.success('✔ Transaction committed successfully.'); logger.success('Database seeded successfully.'); } catch (error) { await db.query('ROLLBACK'); logger.error('✖ Transaction rolled back due to an error.'); // Re-throw the original error to be caught by the command dispatcher throw error; } } module.exports = { runSeeds };