diff options
Diffstat (limited to 'lib/cli')
-rw-r--r-- | lib/cli/build.js | 34 | ||||
-rw-r--r-- | lib/cli/buildEbook.js | 78 | ||||
-rw-r--r-- | lib/cli/getBook.js | 23 | ||||
-rw-r--r-- | lib/cli/getOutputFolder.js | 17 | ||||
-rw-r--r-- | lib/cli/index.js | 12 | ||||
-rw-r--r-- | lib/cli/init.js | 17 | ||||
-rw-r--r-- | lib/cli/install.js | 21 | ||||
-rw-r--r-- | lib/cli/options.js | 31 | ||||
-rw-r--r-- | lib/cli/parse.js | 79 | ||||
-rw-r--r-- | lib/cli/serve.js | 159 | ||||
-rw-r--r-- | lib/cli/server.js | 128 | ||||
-rw-r--r-- | lib/cli/watch.js | 46 |
12 files changed, 0 insertions, 645 deletions
diff --git a/lib/cli/build.js b/lib/cli/build.js deleted file mode 100644 index 023901e..0000000 --- a/lib/cli/build.js +++ /dev/null @@ -1,34 +0,0 @@ -var Parse = require('../parse'); -var Output = require('../output'); -var timing = require('../utils/timing'); - -var options = require('./options'); -var getBook = require('./getBook'); -var getOutputFolder = require('./getOutputFolder'); - - -module.exports = { - name: 'build [book] [output]', - description: 'build a book', - options: [ - options.log, - options.format, - options.timing - ], - exec: function(args, kwargs) { - var book = getBook(args, kwargs); - var outputFolder = getOutputFolder(args); - - var Generator = Output.getGenerator(kwargs.format); - - return Parse.parseBook(book) - .then(function(resultBook) { - return Output.generate(Generator, resultBook, { - root: outputFolder - }); - }) - .fin(function() { - if (kwargs.timing) timing.dump(book.getLogger()); - }); - } -}; diff --git a/lib/cli/buildEbook.js b/lib/cli/buildEbook.js deleted file mode 100644 index a87fac7..0000000 --- a/lib/cli/buildEbook.js +++ /dev/null @@ -1,78 +0,0 @@ -var path = require('path'); -var tmp = require('tmp'); - -var Promise = require('../utils/promise'); -var fs = require('../utils/fs'); -var Parse = require('../parse'); -var Output = require('../output'); - -var options = require('./options'); -var getBook = require('./getBook'); - - -module.exports = function(format) { - return { - name: (format + ' [book] [output]'), - description: 'build a book into an ebook file', - options: [ - options.log - ], - exec: function(args, kwargs) { - var extension = '.' + format; - - // Output file will be stored in - var outputFile = args[1] || ('book' + extension); - - // Create temporary directory - var outputFolder = tmp.dirSync().name; - - var book = getBook(args, kwargs); - var logger = book.getLogger(); - var Generator = Output.getGenerator('ebook'); - - return Parse.parseBook(book) - .then(function(resultBook) { - return Output.generate(Generator, resultBook, { - root: outputFolder, - format: format - }); - }) - - // Extract ebook file - .then(function(output) { - var book = output.getBook(); - var languages = book.getLanguages(); - - if (book.isMultilingual()) { - return Promise.forEach(languages.getList(), function(lang) { - var langID = lang.getID(); - - var 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)); - }); - } - }; -}; diff --git a/lib/cli/getBook.js b/lib/cli/getBook.js deleted file mode 100644 index ac82187..0000000 --- a/lib/cli/getBook.js +++ /dev/null @@ -1,23 +0,0 @@ -var path = require('path'); -var Book = require('../models/book'); -var createNodeFS = require('../fs/node'); - -/** - Return a book instance to work on from - command line args/kwargs - - @param {Array} args - @param {Object} kwargs - @return {Book} -*/ -function getBook(args, kwargs) { - var input = path.resolve(args[0] || process.cwd()); - var logLevel = kwargs.log; - - var fs = createNodeFS(input); - var book = Book.createForFS(fs); - - return book.setLogLevel(logLevel); -} - -module.exports = getBook; diff --git a/lib/cli/getOutputFolder.js b/lib/cli/getOutputFolder.js deleted file mode 100644 index 272dff9..0000000 --- a/lib/cli/getOutputFolder.js +++ /dev/null @@ -1,17 +0,0 @@ -var path = require('path'); - -/** - Return path to output folder - - @param {Array} args - @return {String} -*/ -function getOutputFolder(args) { - var bookRoot = path.resolve(args[0] || process.cwd()); - var defaultOutputRoot = path.join(bookRoot, '_book'); - var outputFolder = args[1]? path.resolve(process.cwd(), args[1]) : defaultOutputRoot; - - return outputFolder; -} - -module.exports = getOutputFolder; diff --git a/lib/cli/index.js b/lib/cli/index.js deleted file mode 100644 index f1fca1d..0000000 --- a/lib/cli/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var buildEbook = require('./buildEbook'); - -module.exports = [ - require('./build'), - require('./serve'), - require('./install'), - require('./parse'), - require('./init'), - buildEbook('pdf'), - buildEbook('epub'), - buildEbook('mobi') -]; diff --git a/lib/cli/init.js b/lib/cli/init.js deleted file mode 100644 index 55f1b15..0000000 --- a/lib/cli/init.js +++ /dev/null @@ -1,17 +0,0 @@ -var path = require('path'); - -var options = require('./options'); -var initBook = require('../init'); - -module.exports = { - name: 'init [book]', - description: 'setup and create files for chapters', - options: [ - options.log - ], - exec: function(args, kwargs) { - var bookRoot = path.resolve(process.cwd(), args[0] || './'); - - return initBook(bookRoot); - } -}; diff --git a/lib/cli/install.js b/lib/cli/install.js deleted file mode 100644 index c001711..0000000 --- a/lib/cli/install.js +++ /dev/null @@ -1,21 +0,0 @@ -var options = require('./options'); -var getBook = require('./getBook'); - -var Parse = require('../parse'); -var Plugins = require('../plugins'); - -module.exports = { - name: 'install [book]', - description: 'install all plugins dependencies', - options: [ - options.log - ], - exec: function(args, kwargs) { - var book = getBook(args, kwargs); - - return Parse.parseConfig(book) - .then(function(resultBook) { - return Plugins.installPlugins(resultBook); - }); - } -}; diff --git a/lib/cli/options.js b/lib/cli/options.js deleted file mode 100644 index 72961ab..0000000 --- a/lib/cli/options.js +++ /dev/null @@ -1,31 +0,0 @@ -var Logger = require('../utils/logger'); - -var logOptions = { - name: 'log', - description: 'Minimum log level to display', - values: Logger.LEVELS - .keySeq() - .map(function(s) { - return s.toLowerCase(); - }).toJS(), - defaults: 'info' -}; - -var formatOption = { - name: 'format', - description: 'Format to build to', - values: ['website', 'json', 'ebook'], - defaults: 'website' -}; - -var timingOption = { - name: 'timing', - description: 'Print timing debug information', - defaults: false -}; - -module.exports = { - log: logOptions, - format: formatOption, - timing: timingOption -}; diff --git a/lib/cli/parse.js b/lib/cli/parse.js deleted file mode 100644 index 0fa509a..0000000 --- a/lib/cli/parse.js +++ /dev/null @@ -1,79 +0,0 @@ -var options = require('./options'); -var getBook = require('./getBook'); - -var Parse = require('../parse'); - -function printBook(book) { - var logger = book.getLogger(); - - var config = book.getConfig(); - var configFile = config.getFile(); - - var summary = book.getSummary(); - var summaryFile = summary.getFile(); - - var readme = book.getReadme(); - var readmeFile = readme.getFile(); - - var glossary = book.getGlossary(); - var glossaryFile = glossary.getFile(); - - if (configFile.exists()) { - logger.info.ln('Configuration file is', configFile.getPath()); - } - - if (readmeFile.exists()) { - logger.info.ln('Introduction file is', readmeFile.getPath()); - } - - if (glossaryFile.exists()) { - logger.info.ln('Glossary file is', glossaryFile.getPath()); - } - - if (summaryFile.exists()) { - logger.info.ln('Table of Contents file is', summaryFile.getPath()); - } -} - -function printMultingualBook(book) { - var logger = book.getLogger(); - var languages = book.getLanguages(); - var books = book.getBooks(); - - logger.info.ln(languages.size + ' languages'); - - languages.forEach(function(lang) { - logger.info.ln('Language:', lang.getTitle()); - printBook(books.get(lang.getID())); - logger.info.ln(''); - }); -} - -module.exports = { - name: 'parse [book]', - description: 'parse and print debug information about a book', - options: [ - options.log - ], - exec: function(args, kwargs) { - var book = getBook(args, kwargs); - var logger = book.getLogger(); - - return Parse.parseBook(book) - .then(function(resultBook) { - var rootFolder = book.getRoot(); - var contentFolder = book.getContentRoot(); - - logger.info.ln('Book located in:', rootFolder); - if (contentFolder != rootFolder) { - logger.info.ln('Content located in:', contentFolder); - } - - if (resultBook.isMultilingual()) { - printMultingualBook(resultBook); - } else { - printBook(resultBook); - } - }); - } -}; diff --git a/lib/cli/serve.js b/lib/cli/serve.js deleted file mode 100644 index 5340851..0000000 --- a/lib/cli/serve.js +++ /dev/null @@ -1,159 +0,0 @@ -/* eslint-disable no-console */ - -var tinylr = require('tiny-lr'); -var open = require('open'); - -var Parse = require('../parse'); -var Output = require('../output'); -var ConfigModifier = require('../modifiers').Config; - -var Promise = require('../utils/promise'); - -var options = require('./options'); -var getBook = require('./getBook'); -var getOutputFolder = require('./getOutputFolder'); -var Server = require('./server'); -var watch = require('./watch'); - -var server, lrServer, lrPath; - -function waitForCtrlC() { - var d = Promise.defer(); - - process.on('SIGINT', function() { - d.resolve(); - }); - - return d.promise; -} - - -function generateBook(args, kwargs) { - var port = kwargs.port; - var outputFolder = getOutputFolder(args); - var book = getBook(args, kwargs); - var Generator = Output.getGenerator(kwargs.format); - var browser = kwargs['browser']; - - var hasWatch = kwargs['watch']; - var hasLiveReloading = kwargs['live']; - var hasOpen = kwargs['open']; - - // Stop server if running - if (server.isRunning()) console.log('Stopping server'); - - return server.stop() - .then(function() { - return Parse.parseBook(book) - .then(function(resultBook) { - if (hasLiveReloading) { - // Enable livereload plugin - var config = resultBook.getConfig(); - config = ConfigModifier.addPlugin(config, 'livereload'); - resultBook = resultBook.set('config', config); - } - - return Output.generate(Generator, resultBook, { - root: outputFolder - }); - }); - }) - .then(function() { - console.log(); - console.log('Starting server ...'); - return server.start(outputFolder, port); - }) - .then(function() { - console.log('Serving book on http://localhost:'+port); - - if (lrPath && hasLiveReloading) { - // trigger livereload - lrServer.changed({ - body: { - files: [lrPath] - } - }); - } - - if (hasOpen) { - open('http://localhost:'+port, browser); - } - }) - .then(function() { - if (!hasWatch) { - return waitForCtrlC(); - } - - return watch(book.getRoot()) - .then(function(filepath) { - // set livereload path - lrPath = filepath; - console.log('Restart after change in file', filepath); - console.log(''); - return generateBook(args, kwargs); - }); - }); -} - -module.exports = { - name: 'serve [book] [output]', - description: 'serve the book as a website for testing', - options: [ - { - name: 'port', - description: 'Port for server to listen on', - defaults: 4000 - }, - { - name: 'lrport', - description: 'Port for livereload server to listen on', - defaults: 35729 - }, - { - name: 'watch', - description: 'Enable file watcher and live reloading', - defaults: true - }, - { - name: 'live', - description: 'Enable live reloading', - defaults: true - }, - { - name: 'open', - description: 'Enable opening book in browser', - defaults: false - }, - { - name: 'browser', - description: 'Specify browser for opening book', - defaults: '' - }, - options.log, - options.format - ], - exec: function(args, kwargs) { - server = new Server(); - var hasWatch = kwargs['watch']; - var hasLiveReloading = kwargs['live']; - - return Promise() - .then(function() { - if (!hasWatch || !hasLiveReloading) { - return; - } - - lrServer = tinylr({}); - return Promise.nfcall(lrServer.listen.bind(lrServer), kwargs.lrport) - .then(function() { - console.log('Live reload server started on port:', kwargs.lrport); - console.log('Press CTRL+C to quit ...'); - console.log(''); - - }); - }) - .then(function() { - return generateBook(args, kwargs); - }); - } -}; diff --git a/lib/cli/server.js b/lib/cli/server.js deleted file mode 100644 index 752f867..0000000 --- a/lib/cli/server.js +++ /dev/null @@ -1,128 +0,0 @@ -var events = require('events'); -var http = require('http'); -var send = require('send'); -var util = require('util'); -var url = require('url'); - -var Promise = require('../utils/promise'); - -function Server() { - this.running = null; - this.dir = null; - this.port = 0; - this.sockets = []; -} -util.inherits(Server, events.EventEmitter); - -/** - Return true if the server is running - - @return {Boolean} -*/ -Server.prototype.isRunning = function() { - return !!this.running; -}; - -/** - Stop the server - - @return {Promise} -*/ -Server.prototype.stop = function() { - var that = this; - if (!this.isRunning()) return Promise(); - - var d = Promise.defer(); - this.running.close(function(err) { - that.running = null; - that.emit('state', false); - - if (err) d.reject(err); - else d.resolve(); - }); - - for (var i = 0; i < this.sockets.length; i++) { - this.sockets[i].destroy(); - } - - return d.promise; -}; - -/** - Start the server - - @return {Promise} -*/ -Server.prototype.start = function(dir, port) { - var that = this, pre = Promise(); - port = port || 8004; - - if (that.isRunning()) pre = this.stop(); - return pre - .then(function() { - var d = Promise.defer(); - - that.running = http.createServer(function(req, res){ - // Render error - function error(err) { - res.statusCode = err.status || 500; - res.end(err.message); - } - - // Redirect to directory's index.html - function redirect() { - var resultURL = urlTransform(req.url, function(parsed) { - parsed.pathname += '/'; - return parsed; - }); - - res.statusCode = 301; - res.setHeader('Location', resultURL); - res.end('Redirecting to ' + resultURL); - } - - res.setHeader('X-Current-Location', req.url); - - // Send file - send(req, url.parse(req.url).pathname, { - root: dir - }) - .on('error', error) - .on('directory', redirect) - .pipe(res); - }); - - that.running.on('connection', function (socket) { - that.sockets.push(socket); - socket.setTimeout(4000); - socket.on('close', function () { - that.sockets.splice(that.sockets.indexOf(socket), 1); - }); - }); - - that.running.listen(port, function(err) { - if (err) return d.reject(err); - - that.port = port; - that.dir = dir; - that.emit('state', true); - d.resolve(); - }); - - return d.promise; - }); -}; - -/** - urlTransform is a helper function that allows a function to transform - a url string in it's parsed form and returns the new url as a string - - @param {String} uri - @param {Function} fn - @return {String} -*/ -function urlTransform(uri, fn) { - return url.format(fn(url.parse(uri))); -} - -module.exports = Server; diff --git a/lib/cli/watch.js b/lib/cli/watch.js deleted file mode 100644 index 14434ab..0000000 --- a/lib/cli/watch.js +++ /dev/null @@ -1,46 +0,0 @@ -var path = require('path'); -var chokidar = require('chokidar'); - -var Promise = require('../utils/promise'); -var parsers = require('../parsers'); - -/** - Watch a folder and resolve promise once a file is modified - - @param {String} dir - @return {Promise} -*/ -function watch(dir) { - var d = Promise.defer(); - dir = path.resolve(dir); - - var toWatch = [ - 'book.json', 'book.js', '_layouts/**' - ]; - - // Watch all parsable files - parsers.extensions.forEach(function(ext) { - toWatch.push('**/*'+ext); - }); - - var watcher = chokidar.watch(toWatch, { - cwd: dir, - ignored: '_book/**', - ignoreInitial: true - }); - - watcher.once('all', function(e, filepath) { - watcher.close(); - - d.resolve(filepath); - }); - watcher.once('error', function(err) { - watcher.close(); - - d.reject(err); - }); - - return d.promise; -} - -module.exports = watch; |