raptor
Version:
RaptorJS provides an AMD module loader that works in Node, Rhino and the web browser. It also includes various sub-modules to support building optimized web applications.
73 lines (62 loc) • 2.69 kB
JavaScript
define(
'raptor/file-watcher',
['raptor'],
function(raptor, require, exports, module) {
"use strict";
var createFilenameMatcherFromPatterns = function(patterns) {
var regExpArray = [],
regexp = require('raptor/regexp');
for (var i=0, len=patterns.length, pattern; i<len; i++) {
pattern = patterns[i];
regExpArray.push(regexp.simple(pattern));
}
return function(filename) {
for (i=0, len=regExpArray.length; i<len; i++) {
if (regExpArray[i].test(filename)) {
return true;
}
}
return false;
};
},
createDirWatcherHandle = function(watchers) {
return {
close: function() {
watchers.forEach(function(watcher) {
watcher.close();
});
}
};
};
return {
watchDir: function(dir, callback, thisObj, options) {
var watchers = [];
options = options || {};
var filenameMatchers = [];
if (options.filenamePatterns && options.filenamePatterns.length) {
var filenamePatterns = options.filenamePatterns.split(/\s*,\s*/);
filenameMatchers.push(createFilenameMatcherFromPatterns(filenamePatterns));
}
var dirModifiedFunc = function(file) {
// for (var i=0, len=filenameMatchers.length, matcher; i<len; i++) {
// matcher = filenameMatchers[i];
// if (matcher(file.getName()) === false) {
// return false;
// }
// }
};
if (options.recursive) {
require('raptor/files/walker').walk(
dir,
function(dir) {
watchers.push(this.watch(dir.getAbsolutePath(), dirModifiedFunc));
},
this,
{
dirsOnly: true
});
}
return createDirWatcherHandle(watchers);
}
};
});