diff options
author | Samy Pessé <samypesse@gmail.com> | 2015-09-22 23:25:15 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2015-09-22 23:25:15 +0200 |
commit | 58a3c5634ee4c2d21d7b6236516149bb8912d9dd (patch) | |
tree | 7734da5cc64599649b912951a6017b5cd0652f13 /lib/configuration.js | |
parent | f0ddb6e89f78558814e3a3b4ac6c919b8d5ac3a8 (diff) | |
download | gitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.zip gitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.tar.gz gitbook-58a3c5634ee4c2d21d7b6236516149bb8912d9dd.tar.bz2 |
Improve installation of plugins to not install default ones
Diffstat (limited to 'lib/configuration.js')
-rw-r--r-- | lib/configuration.js | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/lib/configuration.js b/lib/configuration.js index 2412ff3..b314492 100644 --- a/lib/configuration.js +++ b/lib/configuration.js @@ -7,7 +7,21 @@ var pkg = require("../package.json"); var i18n = require("./utils/i18n"); // Default plugins added to each books -var defaultsPlugins = ["highlight"]; +var DEFAULT_PLUGINS = ["highlight"]; + +// Check if a plugin is a default plugin +// Plugin should be in the list +// And version from book.json specified for this plugin should be satisfied +function isDefaultPlugin(name, version) { + if (!_.contains(DEFAULT_PLUGINS, name)) return false; + + try { + var pluginPkg = require('gitbook-plugin-'+name+'/package.json'); + return semver.satisfies(pluginPkg.version, version || '*'); + } catch(e) { + return false; + } +} // Normalize a list of plugins to use function normalizePluginsList(plugins, addDefaults) { @@ -22,9 +36,12 @@ function normalizePluginsList(plugins, addDefaults) { if (plugin.name) return plugin; var parts = plugin.split("@"); + var name = parts[0]; + var version = parts[1]; return { - "name": parts[0], - "version": parts[1] // optional + "name": name, + "version": version, // optional + "isDefault": isDefaultPlugin(name, version) }; }); @@ -40,19 +57,26 @@ function normalizePluginsList(plugins, addDefaults) { // Merge with defaults if (addDefaults !== false) { - plugins = _.chain(plugins) - .concat(_.map(defaultsPlugins, function(plugin) { - return { "name": plugin }; - })) - .uniq() - .value(); + _.each(DEFAULT_PLUGINS, function(plugin) { + if (_.find(plugins, { name: plugin })) { + return; + } + + plugins.push({ + "name": plugin, + "isDefault": true + }); + }); } - // Build final list + // Remove plugin that start with '-' plugins = _.filter(plugins, function(plugin) { return !_.contains(toremove, plugin.name) && !(plugin.name.length > 0 && plugin.name[0] == "-"); }); + // Remove duplicates + plugins = _.uniq(plugins, 'name'); + return plugins; } |