#!/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"); // 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); } if (!process.pkg) { const notifier = updateNotifier({ pkg }); const update = notifier.update; 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 }); } } // 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)); 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"); } cmd = aliases.get(cmd) || cmd; } const bin = resolve(__dirname, "now-" + cmd + ".js"); // Prepare process.argv for subcommand process.argv = process.argv.slice(0, 2).concat(args); // Load sub command // With custom parameter to make "pkg" happy require(bin, "may-exclude");