-
Notifications
You must be signed in to change notification settings - Fork 754
/
browser-sync.js
executable file
·110 lines (87 loc) · 2.55 KB
/
browser-sync.js
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env node
"use strict";
var meow = require("meow");
var fs = require("fs");
var path = require("path");
var compile = require("eazy-logger").compile;
var utils = require("../lib/utils");
var logger = require("../lib/logger").logger;
var cmdWhitelist = ["start", "init", "reload"];
var cli = meow({
pkg: "../package.json",
help: getHelpText(path.resolve(__dirname, "../lib/cli/help.txt"))
});
/**
* Handle cli input
*/
if (!module.parent) {
handleCli({cli: cli, whitelist: cmdWhitelist});
}
/**
* Generate & colour the help text
* @param {String} filepath - relative file path to the help text
* @returns {String}
*/
function getHelpText(filepath) {
/**
* Help text template
*/
var template = fs.readFileSync(filepath, "utf8");
cmdWhitelist.forEach(function (command) {
var flags = require("../lib/cli/opts." + command + ".json");
template = template.replace(
["%", command, "flags%"].join(""),
listFlags(flags)
);
});
return compile(template);
}
/**
* @param {{cli: object, [whitelist]: array, [cb]: function}} opts
* @returns {*}
*/
function handleCli (opts) {
opts.cb = opts.cb || utils.defaultCallback;
var input = opts.cli.input;
if (!opts.whitelist) {
opts.whitelist = cmdWhitelist;
}
if (!input.length || opts.whitelist.indexOf(input[0]) === -1) {
return console.log(opts.cli.help);
}
if (!require("../lib/cli/cli-utils").verifyOpts(input[0], opts.cli.flags)) {
logger.info("For help, run: {cyan:browser-sync --help}");
return opts.cb(new Error("Unknown flag given. Please refer to the documentation for help."));
}
return require("../lib/cli/command." + input[0])(opts);
}
/**
* @param {Object} flags
*/
function listFlags (flags) {
var flagKeys = Object.keys(flags);
var longest = getLongest(Object.keys(flags));
if (!longest || !longest.length) {
return;
}
return flagKeys.reduce(function (all, item) {
return all + " {bold:--" + item + "}" + getPadding(item.length, longest.length + 8) + flags[item] + "\n";
}, "");
}
/**
* @param {Number} len
* @param {Number} max
* @returns {string}
*/
function getPadding (len, max) {
return new Array(max - (len + 1)).join(" ");
}
/**
* @param {Array} arr
* @returns {String}
*/
function getLongest (arr) {
return arr.sort(function (a, b) { return b.length - a.length; })[0];
}
module.exports = handleCli;
module.exports.getHelpText = getHelpText;