diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-06-10 22:08:16 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-06-10 22:08:16 +0200 |
commit | 1e3d871c1e288b58dc486053cc7fa0f274c4cf31 (patch) | |
tree | 5f221cb283e5f4591a3764112569ee62220e6da2 /lib/plugins/sortDependencies.js | |
parent | 50a132cb2c0b0666b3b067e32d37e10bfb9e50da (diff) | |
parent | 94a4310c1e4b9ee71def9cbd9efd8a4c491f4444 (diff) | |
download | gitbook-1e3d871c1e288b58dc486053cc7fa0f274c4cf31.zip gitbook-1e3d871c1e288b58dc486053cc7fa0f274c4cf31.tar.gz gitbook-1e3d871c1e288b58dc486053cc7fa0f274c4cf31.tar.bz2 |
Merge branch 'fix/plugins_loading'
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 |