UNPKG

1.11 kBJavaScriptView Raw
1module.exports = function ( gobblefile, getTask ) {
2 var chokidar = require( 'graceful-chokidar' ),
3 logger = require( './utils/logger' ),
4 task,
5 watcher,
6 resuming;
7
8 resume();
9
10 watcher = chokidar.watch( gobblefile, {
11 ignoreInitial: true
12 });
13
14 watcher.on( 'change', function () {
15 logger.info({
16 code: 'GOBBLEFILE_CHANGED'
17 });
18 restart();
19 });
20
21 function restart () {
22 if ( resuming ) {
23 return;
24 }
25
26 process.env.GOBBLE_RESET_UID = 'reset';
27
28 if ( task ) {
29 resuming = true;
30
31 task.pause().then( function () {
32 resuming = false;
33 delete require.cache[ gobblefile ];
34 resume();
35 });
36 } else {
37 resume();
38 }
39 }
40
41 function resume () {
42 var node, err;
43
44 try {
45 node = require( gobblefile );
46
47 if ( task ) {
48 task.resume( node );
49 } else {
50 task = getTask( node );
51
52 task.on( 'info', logger.info );
53 task.on( 'error', logger.error );
54 }
55 } catch ( e ) {
56 if ( e.name !== 'GobbleError' ) {
57 err = {
58 name: 'GobbleError',
59 code: 'STARTUP_ERROR',
60 original: e
61 };
62 } else {
63 err = e;
64 }
65
66 logger.error( err );
67 }
68 }
69};