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
JavaScript
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 };