73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
|
"use strict";
|
||
|
var _ = require("./lodash.custom");
|
||
|
var utils = require("./utils");
|
||
|
var Rx = require("rx");
|
||
|
/**
|
||
|
* Plugin interface
|
||
|
* @returns {*|function(this:exports)}
|
||
|
*/
|
||
|
module.exports.plugin = function (bs) {
|
||
|
var options = bs.options;
|
||
|
var emitter = bs.emitter;
|
||
|
var defaultWatchOptions = options.get("watchOptions").toJS();
|
||
|
return options.get("files").reduce(function (map, glob, namespace) {
|
||
|
/**
|
||
|
* Default CB when not given
|
||
|
* @param event
|
||
|
* @param path
|
||
|
*/
|
||
|
var fn = function (event, path) {
|
||
|
emitter.emit("file:changed", {
|
||
|
event: event,
|
||
|
path: path,
|
||
|
namespace: namespace
|
||
|
});
|
||
|
};
|
||
|
var jsItem = glob.toJS();
|
||
|
if (jsItem.globs.length) {
|
||
|
var watcher = watch(jsItem.globs, defaultWatchOptions, fn);
|
||
|
map[namespace] = {
|
||
|
watchers: [watcher]
|
||
|
};
|
||
|
}
|
||
|
if (jsItem.objs.length) {
|
||
|
jsItem.objs.forEach(function (item) {
|
||
|
if (!_.isFunction(item.fn)) {
|
||
|
item.fn = fn;
|
||
|
}
|
||
|
var watcher = watch(item.match, item.options || defaultWatchOptions, item.fn.bind(bs.publicInstance));
|
||
|
if (!map[namespace]) {
|
||
|
map[namespace] = {
|
||
|
watchers: [watcher]
|
||
|
};
|
||
|
}
|
||
|
else {
|
||
|
map[namespace].watchers.push(watcher);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
return map;
|
||
|
}, {});
|
||
|
};
|
||
|
/**
|
||
|
* @param patterns
|
||
|
* @param opts
|
||
|
* @param cb
|
||
|
* @returns {*}
|
||
|
*/
|
||
|
function watch(patterns, opts, cb) {
|
||
|
if (typeof opts === "function") {
|
||
|
cb = opts;
|
||
|
opts = {};
|
||
|
}
|
||
|
var watcher = require("chokidar").watch(patterns, opts);
|
||
|
if (_.isFunction(cb)) {
|
||
|
watcher.on("all", cb);
|
||
|
}
|
||
|
// watcher.on('ready', () => {
|
||
|
// console.log(watcher.getWatched());
|
||
|
// });
|
||
|
return watcher;
|
||
|
}
|
||
|
module.exports.watch = watch;
|
||
|
//# sourceMappingURL=file-watcher.js.map
|