1 | module.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 | };
|