Matheus Fernandes
8 years ago
3 changed files with 0 additions and 150 deletions
@ -1,148 +0,0 @@ |
|||||
#!/usr/bin/env node
|
|
||||
|
|
||||
// Packages
|
|
||||
const fs = require('fs-extra') |
|
||||
const minimist = require('minimist') |
|
||||
const chalk = require('chalk') |
|
||||
const opn = require('opn') |
|
||||
|
|
||||
// Ours
|
|
||||
const Now = require('../lib') |
|
||||
const login = require('../lib/login') |
|
||||
const cfg = require('../lib/cfg') |
|
||||
const { handleError, error } = require('../lib/error') |
|
||||
const logo = require('../lib/utils/output/logo') |
|
||||
|
|
||||
const argv = minimist(process.argv.slice(2), { |
|
||||
string: ['config', 'token'], |
|
||||
boolean: ['help', 'debug'], |
|
||||
alias: { |
|
||||
help: 'h', |
|
||||
config: 'c', |
|
||||
debug: 'd', |
|
||||
token: 't' |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
const help = () => { |
|
||||
console.log(` |
|
||||
${chalk.bold(`${logo} now open`)} |
|
||||
|
|
||||
${chalk.dim('Options:')} |
|
||||
|
|
||||
-h, --help Output usage information |
|
||||
-c ${chalk.bold.underline('FILE')}, --config=${chalk.bold.underline('FILE')} Config file |
|
||||
-d, --debug Debug mode [off] |
|
||||
-t ${chalk.bold.underline('TOKEN')}, --token=${chalk.bold.underline('TOKEN')} Login token |
|
||||
|
|
||||
${chalk.dim('Examples:')} |
|
||||
|
|
||||
${chalk.gray('–')} Open latest deployment for current project |
|
||||
|
|
||||
${chalk.cyan('$ now open')} |
|
||||
|
|
||||
`)
|
|
||||
} |
|
||||
|
|
||||
if (argv.help) { |
|
||||
help() |
|
||||
process.exit(0) |
|
||||
} |
|
||||
|
|
||||
const app = argv._[0] |
|
||||
|
|
||||
// Options
|
|
||||
const debug = argv.debug |
|
||||
const apiUrl = argv.url || 'https://api.zeit.co' |
|
||||
|
|
||||
if (argv.config) { |
|
||||
cfg.setConfigFile(argv.config) |
|
||||
} |
|
||||
|
|
||||
Promise.resolve().then(async () => { |
|
||||
const config = await cfg.read({ token: argv.token }) |
|
||||
|
|
||||
let token |
|
||||
try { |
|
||||
token = config.token || (await login(apiUrl)) |
|
||||
} catch (err) { |
|
||||
error(`Authentication error – ${err.message}`) |
|
||||
process.exit(1) |
|
||||
} |
|
||||
|
|
||||
try { |
|
||||
await open({ token, config }) |
|
||||
} catch (err) { |
|
||||
error(`Unknown error: ${err}\n${err.stack}`) |
|
||||
process.exit(1) |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
async function open({ token, config: { currentTeam, user } }) { |
|
||||
const now = new Now({ apiUrl, token, debug, currentTeam }) |
|
||||
|
|
||||
let deployments |
|
||||
try { |
|
||||
deployments = await now.list(app) |
|
||||
} catch (err) { |
|
||||
handleError(err) |
|
||||
process.exit(1) |
|
||||
} |
|
||||
|
|
||||
now.close() |
|
||||
|
|
||||
const apps = new Map() |
|
||||
|
|
||||
for (const dep of deployments) { |
|
||||
const deps = apps.get(dep.name) || [] |
|
||||
apps.set(dep.name, deps.concat(dep)) |
|
||||
} |
|
||||
|
|
||||
let pkg |
|
||||
try { |
|
||||
const json = await fs.readFile('package.json') |
|
||||
pkg = JSON.parse(json) |
|
||||
} catch (err) { |
|
||||
pkg = {} |
|
||||
} |
|
||||
|
|
||||
const [currentProjectDeployments] = await getCurrentProjectDeployments( |
|
||||
[...apps], |
|
||||
pkg |
|
||||
) |
|
||||
|
|
||||
if (typeof currentProjectDeployments === 'undefined') { |
|
||||
console.log( |
|
||||
`No deployments found for ${chalk.bold(pkg.name)} under ${chalk.bold((currentTeam && currentTeam.slug) || user.username || user.email)}` |
|
||||
) |
|
||||
process.exit(0) |
|
||||
} |
|
||||
|
|
||||
const sorted = await sortByCreation([...currentProjectDeployments]) |
|
||||
const latestDeploy = sorted[0] |
|
||||
|
|
||||
try { |
|
||||
const url = `https://${latestDeploy.url}` |
|
||||
|
|
||||
console.log( |
|
||||
`Opening the latest deployment for ${chalk.bold(pkg.name)}... under ${chalk.bold((currentTeam && currentTeam.slug) || user.username || user.email)}` |
|
||||
) |
|
||||
console.log(`Here's the URL: ${chalk.underline(url)}`) |
|
||||
|
|
||||
opn(url) |
|
||||
process.exit(0) |
|
||||
} catch (err) { |
|
||||
error(`Unknown error: ${err}\n${err.stack}`) |
|
||||
process.exit(1) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
async function getCurrentProjectDeployments(apps, pkg) { |
|
||||
return apps.filter(app => pkg.name === app[0]).map(app => app[1]) |
|
||||
} |
|
||||
|
|
||||
async function sortByCreation(deps) { |
|
||||
return deps.sort((depA, depB) => { |
|
||||
return depB.created - depA.created |
|
||||
}) |
|
||||
} |
|
Loading…
Reference in new issue