|
|
|
#!/usr/bin/env node
|
|
|
|
import minimist from 'minimist';
|
|
|
|
import { resolve } from 'path';
|
|
|
|
import { spawn } from 'cross-spawn-async';
|
|
|
|
import checkUpdate from '../lib/check-update';
|
|
|
|
|
|
|
|
const argv = minimist(process.argv.slice(2));
|
|
|
|
|
|
|
|
// options
|
|
|
|
const debug = argv.debug || argv.d;
|
|
|
|
|
|
|
|
// auto-update checking
|
|
|
|
const update = checkUpdate({ debug });
|
|
|
|
const exit = (code) => {
|
|
|
|
update.then(() => process.exit(code));
|
|
|
|
// don't wait for updates more than a second
|
|
|
|
// when the process really wants to exit
|
|
|
|
setTimeout(() => process.exit(code), 1000);
|
|
|
|
};
|
|
|
|
|
|
|
|
const defaultCommand = 'deploy';
|
|
|
|
const commands = new Set([defaultCommand, 'list', 'ls', 'rm', 'remove', 'alias', 'aliases', 'ln', 'domain', 'domains']);
|
|
|
|
const aliases = new Map([['ls', 'list'], ['rm', 'remove'], ['ln', 'alias'], ['aliases', 'alias'], ['domain', 'domains']]);
|
|
|
|
|
|
|
|
let cmd = argv._[0];
|
|
|
|
let args = [];
|
|
|
|
|
|
|
|
if ('help' === cmd) {
|
|
|
|
cmd = argv._[1];
|
|
|
|
if (!commands.has(cmd)) cmd = defaultCommand;
|
|
|
|
args.push('--help');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (commands.has(cmd)) {
|
|
|
|
cmd = aliases.get(cmd) || cmd;
|
|
|
|
args = args.concat(process.argv.slice(3));
|
|
|
|
} else {
|
|
|
|
cmd = defaultCommand;
|
|
|
|
args = args.concat(process.argv.slice(2));
|
|
|
|
}
|
|
|
|
|
|
|
|
let bin = resolve(__dirname, 'now-' + cmd);
|
|
|
|
if (process.enclose) {
|
|
|
|
args.unshift("--entrypoint", bin);
|
|
|
|
bin = process.execPath;
|
|
|
|
}
|
|
|
|
|
|
|
|
const proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });
|
|
|
|
proc.on('close', (code) => exit(code));
|
|
|
|
proc.on('error', () => exit(1));
|