39948-vm/backend/watcher.js
2026-06-26 08:23:11 +02:00

68 lines
1.9 KiB
JavaScript

const chokidar = require('chokidar');
const { exec } = require('child_process');
const nodemon = require('nodemon');
const { logger } = require('./src/utils/logger');
const nodeEnv = process.env.NODE_ENV || 'dev_stage';
const childEnv = { ...process.env, NODE_ENV: nodeEnv };
const log = logger.child({ module: 'watcher' });
function logCommandResult(error, stdout, stderr, successMessage) {
const output = stdout && stdout.trim();
const errorOutput = stderr && stderr.trim();
if (output) {
log.info({ output }, successMessage);
}
if (error) {
log.error(
{ err: error, stderr: errorOutput },
'Watched database command failed',
);
} else if (errorOutput) {
log.warn({ stderr: errorOutput }, 'Watched database command wrote stderr');
}
}
const migrationsWatcher = chokidar.watch('./src/db/migrations', {
persistent: true,
ignoreInitial: true
});
migrationsWatcher.on('add', (filePath) => {
log.info({ filePath }, 'New migration file detected');
exec('npm run db:migrate', { env: childEnv }, (error, stdout, stderr) => {
logCommandResult(error, stdout, stderr, 'Migration command completed');
});
});
const seedersWatcher = chokidar.watch('./src/db/seeders', {
persistent: true,
ignoreInitial: true
});
seedersWatcher.on('add', (filePath) => {
log.info({ filePath }, 'New seed file detected');
exec('npm run db:seed', { env: childEnv }, (error, stdout, stderr) => {
logCommandResult(error, stdout, stderr, 'Seeder command completed');
});
});
nodemon({
script: './src/index.js',
env: childEnv,
ignore: ['./src/db/migrations', './src/db/seeders'],
delay: '500'
});
nodemon.on('start', () => {
log.info({ nodeEnv }, 'Nodemon started');
});
nodemon.on('restart', (files) => {
log.info({ files }, 'Nodemon restarted due to file changes');
});
nodemon.on('crash', () => {
log.error('Nodemon app crashed');
});