UNPKG

@mockyeah/server

Version:

A powerful service mocking, recording, and playback utility.

67 lines (52 loc) 1.5 kB
const _ = require('lodash'); const chokidar = require('chokidar'); const clearModule = require('clear-module'); const restart = app => { const { suitesDir, fixturesDir } = app.config; app.log(['watch'], 'restarting'); clearModule.match(new RegExp(suitesDir)); clearModule.match(new RegExp(fixturesDir)); const wasPlayingSuites = app.locals.playingSuites; const wasPlayingAll = app.locals.playingAll; app.reset(); if (wasPlayingAll) { app.playAll(); } else { wasPlayingSuites.forEach(name => { app.play(name); }); } }; const makeWatch = app => { const { suitesDir, fixturesDir } = app.config; let first = true; const debounced = _.debounce(() => { if (first) { first = false; return; } restart(app); }, 500); const watch = callback => new Promise((resolve, reject) => { const watcher = chokidar.watch([suitesDir, fixturesDir]); watcher.on('ready', err => { if (callback) callback(err); if (err) reject(err); else resolve(); }); watcher.on('error', err => { app.log(['watch', 'error'], err && err.message); if (callback) callback(err); reject(err); }); watcher.on('all', debounced); app.log('watch', 'started watching'); app.locals.watcher = watcher; }); return watch; }; // Exposed only for testing. // eslint-disable-next-line no-underscore-dangle makeWatch.__restart = restart; module.exports = makeWatch;