diff options
Diffstat (limited to 'packages/gitbook/src/cli/buildEbook.js')
-rw-r--r-- | packages/gitbook/src/cli/buildEbook.js | 78 |
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)); + }); + } + }; +}; |