summaryrefslogtreecommitdiffstats
path: root/lib/cli
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cli')
-rw-r--r--lib/cli/build.js34
-rw-r--r--lib/cli/buildEbook.js78
-rw-r--r--lib/cli/getBook.js23
-rw-r--r--lib/cli/getOutputFolder.js17
-rw-r--r--lib/cli/index.js12
-rw-r--r--lib/cli/init.js17
-rw-r--r--lib/cli/install.js21
-rw-r--r--lib/cli/options.js31
-rw-r--r--lib/cli/parse.js79
-rw-r--r--lib/cli/serve.js159
-rw-r--r--lib/cli/server.js128
-rw-r--r--lib/cli/watch.js46
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;