UNPKG

browser-sync

Version:

Live CSS Reload & Browser Syncing

89 lines (69 loc) 2.27 kB
#!/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 longest = require("longest"); var padLeft = require("pad-left"); 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.join(__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%", 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 maxLength = (longest(Object.keys(flags)) || "").length; return flagKeys.map(function (item) { return " {bold:--" + item + "}" + padLeft(flags[item], maxLength + 4 - item.length, " "); }).join("\n"); } module.exports = handleCli; module.exports.getHelpText = getHelpText;