summaryrefslogtreecommitdiffstats
path: root/lib/cli/helper.js
blob: 6dae58c245b8f92137cb5dca8494bff4ec7f878c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var _ = require('lodash');
var path = require('path');

var Book = require('../book');
var NodeFS = require('../fs/node');
var Logger = require('../utils/logger');
var JSONOutput = require('../output/json');
var WebsiteOutput = require('../output/website');
var EBookOutput = require('../output/ebook');

var LOG_OPTION = {
    name: 'log',
    description: 'Minimum log level to display',
    values: _.chain(Logger.LEVELS)
        .keys()
        .map(function(s) {
            return s.toLowerCase();
        })
        .value(),
    defaults: 'info'
};

var FORMAT_OPTION = {
    name: 'format',
    description: 'Format to build to',
    values: ['website', 'json', 'ebook'],
    defaults: 'website'
};

var FORMATS = {
    json: JSONOutput,
    website: WebsiteOutput,
    ebook: EBookOutput
};

// Commands which is processing a book
// the root of the book is the first argument (or current directory)
function bookCmd(fn) {
    return function(args, kwargs) {
        var input = path.resolve(args[0] || process.cwd());
        var book = new Book({
            fs: new NodeFS(),
            root: input,

            logLevel: kwargs.log
        });

        return fn(book, args.slice(1), kwargs);
    };
}

// Commands which is working on a Output instance
function outputCmd(fn) {
    return bookCmd(function(book, args, kwargs) {
        var Out = FORMATS[kwargs.format];
        return fn(new Out(book), args);
    });
}

module.exports = {
    bookCmd: bookCmd,
    outputCmd: outputCmd,

    options: {
        log: LOG_OPTION,
        format: FORMAT_OPTION
    },

    FORMATS: FORMATS
};