diff options
Diffstat (limited to 'lib/plugins/sortDependencies.js')
-rw-r--r-- | lib/plugins/sortDependencies.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/plugins/sortDependencies.js b/lib/plugins/sortDependencies.js new file mode 100644 index 0000000..7f10095 --- /dev/null +++ b/lib/plugins/sortDependencies.js @@ -0,0 +1,34 @@ +var Immutable = require('immutable'); + +var THEME_PREFIX = require('../constants/themePrefix'); + +var TYPE_PLUGIN = 'plugin'; +var TYPE_THEME = 'theme'; + + +/** + * Returns the type of a plugin given its name + * @param {Plugin} plugin + * @return {String} + */ +function pluginType(plugin) { + var name = plugin.getName(); + return (name && name.indexOf(THEME_PREFIX) === 0) ? TYPE_THEME : TYPE_PLUGIN; +} + + +/** + * Sort the list of dependencies to match list in book.json + * The themes should always be loaded after the plugins + * + * @param {List<PluginDependency>} deps + * @return {List<PluginDependency>} + */ +function sortDependencies(plugins) { + var byTypes = plugins.groupBy(pluginType); + + return byTypes.get(TYPE_PLUGIN, Immutable.List()) + .concat(byTypes.get(TYPE_THEME, Immutable.List())); +} + +module.exports = sortDependencies;
\ No newline at end of file |