summaryrefslogtreecommitdiffstats
path: root/packages/gitbook/src/cli/buildEbook.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gitbook/src/cli/buildEbook.js')
-rw-r--r--packages/gitbook/src/cli/buildEbook.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/packages/gitbook/src/cli/buildEbook.js b/packages/gitbook/src/cli/buildEbook.js
new file mode 100644
index 0000000..56e63f8
--- /dev/null
+++ b/packages/gitbook/src/cli/buildEbook.js
@@ -0,0 +1,78 @@
+const path = require('path');
+const tmp = require('tmp');
+
+const Promise = require('../utils/promise');
+const fs = require('../utils/fs');
+const Parse = require('../parse');
+const Output = require('../output');
+
+const options = require('./options');
+const getBook = require('./getBook');
+
+
+module.exports = function(format) {
+ return {
+ name: (format + ' [book] [output]'),
+ description: 'build a book into an ebook file',
+ options: [
+ options.log
+ ],
+ exec(args, kwargs) {
+ const extension = '.' + format;
+
+ // Output file will be stored in
+ const outputFile = args[1] || ('book' + extension);
+
+ // Create temporary directory
+ const outputFolder = tmp.dirSync().name;
+
+ const book = getBook(args, kwargs);
+ const logger = book.getLogger();
+ const Generator = Output.getGenerator('ebook');
+
+ return Parse.parseBook(book)
+ .then(function(resultBook) {
+ return Output.generate(Generator, resultBook, {
+ root: outputFolder,
+ format
+ });
+ })
+
+ // Extract ebook file
+ .then(function(output) {
+ const book = output.getBook();
+ const languages = book.getLanguages();
+
+ if (book.isMultilingual()) {
+ return Promise.forEach(languages.getList(), function(lang) {
+ const langID = lang.getID();
+
+ const langOutputFile = path.join(
+ path.dirname(outputFile),
+ path.basename(outputFile, extension) + '_' + langID + extension
+ );
+
+ return fs.copy(
+ path.resolve(outputFolder, langID, 'index' + extension),
+ langOutputFile
+ );
+ })
+ .thenResolve(languages.getCount());
+ } else {
+ return fs.copy(
+ path.resolve(outputFolder, 'index' + extension),
+ outputFile
+ ).thenResolve(1);
+ }
+ })
+
+ // Log end
+ .then(function(count) {
+ logger.info.ok(count + ' file(s) generated');
+
+ logger.debug('cleaning up... ');
+ return logger.debug.promise(fs.rmDir(outputFolder));
+ });
+ }
+ };
+};