You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.1 KiB

#!/usr/bin/env node
// Native
const { resolve } = require("path");
// Packages
const nodeVersion = require("node-version");
const updateNotifier = require("update-notifier");
const chalk = require("chalk");
// Ours
const { error } = require("../lib/error");
const pkg = require("../lib/pkg");
8 years ago
// Throw an error if node version is too low
if (nodeVersion.major < 6) {
error("Now requires at least version 6 of Node. Please upgrade!");
process.exit(1);
}
9 years ago
8 years ago
if (!process.pkg) {
const notifier = updateNotifier({ pkg });
const update = notifier.update;
8 years ago
if (update) {
let message = `Update available! ${chalk.red(update.current)}${chalk.green(update.latest)} \n`;
message += `Run ${chalk.magenta("npm i -g now")} to update!\n`;
message += `${chalk.magenta("Changelog:")} https://github.com/zeit/now-cli/releases/tag/${update.latest}`;
notifier.notify({ message });
}
8 years ago
}
8 years ago
// This command will be run if no other sub command is specified
const defaultCommand = "deploy";
const commands = new Set([
defaultCommand,
"help",
"list",
"ls",
"rm",
"remove",
"alias",
"aliases",
"ln",
"domain",
"domains",
"dns",
"cert",
"certs",
"secret",
"secrets",
"cc",
"billing",
"upgrade",
"downgrade",
"open"
]);
const aliases = new Map([
["ls", "list"],
["rm", "remove"],
["ln", "alias"],
["aliases", "alias"],
["domain", "domains"],
["cert", "certs"],
["secret", "secrets"],
["cc", "billing"],
["downgrade", "upgrade"]
]);
let cmd = defaultCommand;
const args = process.argv.slice(2);
const index = args.findIndex(a => commands.has(a));
9 years ago
if (index > -1) {
cmd = args[index];
args.splice(index, 1);
if (cmd === "help") {
if (index < args.length && commands.has(args[index])) {
cmd = args[index];
args.splice(index, 1);
} else {
cmd = defaultCommand;
}
args.unshift("--help");
}
9 years ago
cmd = aliases.get(cmd) || cmd;
9 years ago
}
const bin = resolve(__dirname, "now-" + cmd + ".js");
// Prepare process.argv for subcommand
process.argv = process.argv.slice(0, 2).concat(args);
8 years ago
// Load sub command
// With custom parameter to make "pkg" happy
require(bin, "may-exclude");