Skip to content

Commit

Permalink
Switch to chokidar
Browse files Browse the repository at this point in the history
  • Loading branch information
es128 committed Apr 8, 2015
1 parent 103840f commit a107487
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 22 deletions.
9 changes: 9 additions & 0 deletions README.md
Expand Up @@ -38,6 +38,15 @@ watcher.on('change', function(evt) {

// add files after it has been created
watcher.add('./somefolder/somefile.js');

// stop watching certain files
watcher.remove('./somefolder/dontcare.*');

// stop watching entirely
watcher.close();

// options can be passed to the underlying watch lib as the second arg
watcher = watch('./*.js', {usePolling: true});
```


Expand Down
82 changes: 61 additions & 21 deletions index.js
@@ -1,15 +1,15 @@
var gaze = require('gaze');
var chokidar = require('chokidar');
var anymatch = require('anymatch');
var EventEmitter = require('events').EventEmitter;

function onWatch(out, cb){
return function(err, rwatcher){
if (err) out.emit('error', err);
rwatcher.on('all', function(evt, path, old){
var outEvt = {type: evt, path: path};
if(old) outEvt.old = old;
out.emit('change', outEvt);
if(cb) cb();
});
function mapEvents(evt) {
switch (evt) {
case 'add':
return 'added';
case 'unlink':
return 'deleted';
case 'change':
return 'changed';
}
}

Expand All @@ -21,22 +21,62 @@ module.exports = function(glob, opts, cb) {
opts = {};
}

var watcher = gaze(glob, opts, onWatch(out, cb));
opts = opts || {};

if (opts.ignoreInitial == null) {
opts.ignoreInitial = true;
}

var watcher = chokidar.watch(glob, opts);

var nomatch = true;
var filteredCbs = [];

watcher.on('end', out.emit.bind(out, 'end'));
watcher.on('all', function(evt, path, stats){
evt = mapEvents(evt);
if (!evt) {
return;
}
nomatch = false;
var outEvt = {
type: evt,
path: path
};
if (stats) {
outEvt.stats = stats;
}
out.emit('change', outEvt);
filteredCbs.forEach(function(pair) {
if (pair.filter(path)) {
pair.cb();
}
});
cb && cb();
});
watcher.on('ready', function() {
if (nomatch) {
out.emit('nomatch');
}
out.emit('ready');
});
watcher.on('error', out.emit.bind(out, 'error'));
watcher.on('ready', out.emit.bind(out, 'ready'));
watcher.on('nomatch', out.emit.bind(out, 'nomatch'));

out.end = function(){
return watcher.close();
};
out.add = function(glob, cb){
return watcher.add(glob, onWatch(out, cb));
};
out.remove = function(glob){
return watcher.remove(glob);
if (cb) {
filteredCbs.push({
filter: anymatch(glob),
cb: cb
});
}
watcher.add(glob);
return watcher;
};
out.end = function() {
watcher.close();
out.emit('end');
return watcher;
}
out.remove = watcher.unwatch.bind(watcher);
out._watcher = watcher;

return out;
Expand Down
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -11,7 +11,8 @@
"lib"
],
"dependencies": {
"gaze": "^0.5.1"
"anymatch": "^1.2.1",
"chokidar": "^1.0.0"
},
"devDependencies": {
"mocha": "^2.0.1",
Expand Down

0 comments on commit a107487

Please sign in to comment.