You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.0 KiB
73 lines
2.0 KiB
"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
|