summaryrefslogtreecommitdiffstats
path: root/lib/plugins/loadForBook.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-04-22 11:00:21 +0200
committerSamy Pessé <samypesse@gmail.com>2016-04-22 11:00:21 +0200
commit4336fdb2414d460ffee68a0cc87c0cb0c85cf56e (patch)
tree279f711ab98666c892c19a7b9e4073a094f03f98 /lib/plugins/loadForBook.js
parent87db7cf1d412fa6fbd18e9a7e4f4755f2c0c5547 (diff)
downloadgitbook-4336fdb2414d460ffee68a0cc87c0cb0c85cf56e.zip
gitbook-4336fdb2414d460ffee68a0cc87c0cb0c85cf56e.tar.gz
gitbook-4336fdb2414d460ffee68a0cc87c0cb0c85cf56e.tar.bz2
Base
Diffstat (limited to 'lib/plugins/loadForBook.js')
-rw-r--r--lib/plugins/loadForBook.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/plugins/loadForBook.js b/lib/plugins/loadForBook.js
new file mode 100644
index 0000000..fcfac08
--- /dev/null
+++ b/lib/plugins/loadForBook.js
@@ -0,0 +1,57 @@
+var Promise = require('../utils/promise');
+
+var listForBook = require('./listForBook');
+var listInstalledForBook = require('./listInstalledForBook');
+var loadPlugin = require('./loadPlugin');
+
+
+/**
+ Load a list of plugins in a book
+
+ @param {Book}
+ @return {Promise<Map<String:Plugin>}
+*/
+function loadForBook(book) {
+ var logger = book.getLogger();
+ var requirements = listForBook(book);
+ var requirementsKeys = requirements.keys().toList();
+
+ return listInstalledForBook(book)
+ .then(function(installed) {
+ // Filter out plugins not listed of first level
+ // (aka pre-installed plugins)
+ installed = installed.filter(function(plugin) {
+ return (
+ plugin.getDepth() > 1 ||
+ requirements.has(plugin.getName())
+ );
+ });
+
+ // Sort plugins to match list in book.json
+ installed = installed.sort(function(a, b){
+ return requirementsKeys.indexOf(a.getName()) < requirementsKeys.indexOf(b.getName()) ? -1 : 1;
+ });
+
+ // Log state
+ logger.info.ln(installed.size + ' are installed');
+ if (requirements.size != installed.size) {
+ logger.info.ln(requirements.size + ' explicitly listed');
+ }
+
+ // Verify that all plugins are present
+ var notInstalled = requirementsKeys.filter(function(name) {
+ return !installed.has(name);
+ });
+
+ if (notInstalled.size > 0) {
+ throw new Error('Couldn\'t locate plugins "' + notInstalled.join(', ') + '", Run \'gitbook install\' to install plugins from registry.');
+ }
+
+ return Promise.map(installed, function(plugin) {
+ return loadPlugin(plugin);
+ });
+ });
+}
+
+
+module.exports = loadForBook;