| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							- var fs          = require("fs");
 
- var path        = require("path");
 
- var Immutable   = require("immutable");
 
- /**
 
-  * Take Browsersync plugins and determine if
 
-  * any UI is provided by looking at data in the the
 
-  * modules package.json file
 
-  * @param plugins
 
-  * @returns {*}
 
-  */
 
- module.exports = function (plugins) {
 
-     return require("immutable")
 
-         .fromJS(plugins)
 
-         /**
 
-          * Exclude the UI
 
-          */
 
-         .filter(function (plugin) {
 
-             return plugin.get("name") !== "UI";
 
-         })
 
-         /**
 
-          * Attempt to retrieve a plugins package.json file
 
-          */
 
-         .map(function (plugin) {
 
-             var moduleName = plugin.getIn(["opts", "moduleName"]);
 
-             var pkg = {};
 
-             if (!moduleName) {
 
-                 return plugin;
 
-             }
 
-             try {
 
-                 pkg = require("immutable").fromJS(require(path.join(moduleName, "package.json")));
 
-             } catch (e) {
 
-                 console.error(e);
 
-                 return plugin;
 
-             }
 
-             plugin = plugin.set("pkg", pkg);
 
-             return plugin.set("relpath", path.dirname(require.resolve(moduleName)));
 
-         })
 
-         /**
 
-          * Try to load markup for each plugin
 
-          */
 
-         .map(function (plugin) {
 
-             if (!plugin.hasIn(["pkg", "browser-sync:ui"])) {
 
-                 return plugin;
 
-             }
 
-             var markup    = plugin.getIn(["pkg", "browser-sync:ui", "hooks", "markup"]);
 
-             if (markup) {
 
-                 plugin = plugin.set("markup", fs.readFileSync(path.resolve(plugin.get("relpath"), markup), "utf8"));
 
-             }
 
-             return plugin;
 
-         })
 
-         /**
 
-          * Load any template files for the plugin
 
-          */
 
-         .map(function (plugin) {
 
-             if (!plugin.hasIn(["pkg", "browser-sync:ui"])) {
 
-                 return plugin;
 
-             }
 
-             return resolveIfPluginHas(["pkg", "browser-sync:ui", "hooks", "templates"], "templates", plugin);
 
-         })
 
-         /**
 
-          * Try to load Client JS for each plugin
 
-          */
 
-         .map(function (plugin) {
 
-             if (!plugin.hasIn(["pkg", "browser-sync:ui"])) {
 
-                 return plugin;
 
-             }
 
-             return resolveIfPluginHas(["pkg", "browser-sync:ui", "hooks", "client:js"], "client:js", plugin);
 
-         });
 
- };
 
- /**
 
-  * If a plugin contains this option path, resolve/read the files
 
-  * @param {Array} optPath - How to access the collection
 
-  * @param {String} propName - Key for property access
 
-  * @param {Immutable.Map} plugin
 
-  * @returns {*}
 
-  */
 
- function resolveIfPluginHas(optPath, propName, plugin) {
 
-     var opt = plugin.getIn(optPath);
 
-     if (opt.size) {
 
-         return plugin.set(
 
-             propName,
 
-             resolvePluginFiles(opt, plugin.get("relpath"))
 
-         );
 
-     }
 
-     return plugin;
 
- }
 
- /**
 
-  * Read & store a file from a plugin
 
-  * @param {Array|Immutable.List} collection
 
-  * @param {String} relPath
 
-  * @returns {any}
 
-  */
 
- function resolvePluginFiles (collection, relPath) {
 
-     return Immutable.fromJS(collection.reduce(function (all, item) {
 
-         var full = path.join(relPath, item);
 
-         if (fs.existsSync(full)) {
 
-             all[full] = fs.readFileSync(full, "utf8");
 
-         }
 
-         return all;
 
-     }, {}));
 
- }
 
 
  |