1 | 'use strict';
|
2 |
|
3 | var watcher = require('./watcher')
|
4 | , colors = require('ansicolors')
|
5 | , log = require('./log')
|
6 | , config = require('../config/current')
|
7 | , events = require('events')
|
8 | ;
|
9 |
|
10 | function reportWatchedFiles(watchers) {
|
11 | log.println('Watching ' + colors.brightGreen('[' + Object.keys(watchers).length + ' files]'));
|
12 | }
|
13 |
|
14 | module.exports = function initWatcher(root) {
|
15 | var watcherInitialized
|
16 | , emitter = new events.EventEmitter()
|
17 | , feed = config.feed
|
18 | , opts = {
|
19 | fileFilter : feed.fileFilter || '*.js'
|
20 | , directoryFilter : feed.directoryFilter || [ '!.*', '!node_modules' ]
|
21 | , root : root
|
22 | }
|
23 | ;
|
24 |
|
25 | watcher.watchTree(
|
26 | opts
|
27 | , function onAddedWatch(info) {
|
28 | try {
|
29 | log.print('Started watching: ' + info.entry.path);
|
30 |
|
31 |
|
32 | if (watcherInitialized) {
|
33 | reportWatchedFiles(info.all);
|
34 | emitter.emit('file-changed', info.entry);
|
35 | }
|
36 | } catch(e) {
|
37 | console.trace();
|
38 | log.error(e);
|
39 | }
|
40 | }
|
41 | , function onChanged(file) {
|
42 | emitter.emit('file-changed', file);
|
43 | }
|
44 | , function onWatcherInitialized(watchers) {
|
45 | watcherInitialized = true;
|
46 | reportWatchedFiles(watchers);
|
47 | emitter.emit('initialized', watchers);
|
48 | }
|
49 | );
|
50 |
|
51 | return emitter;
|
52 | };
|