summaryrefslogtreecommitdiffstats
path: root/lib/plugins/sortDependencies.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins/sortDependencies.js')
-rw-r--r--lib/plugins/sortDependencies.js34
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