Browse Source

Implemented `now-browse` (#339)

master
Jaga Santagostino 8 years ago
committed by Leo Lamprecht
parent
commit
103c6abbdc
  1. 138
      bin/now-browse.js
  2. 3
      bin/now.js
  3. 1
      package.json

138
bin/now-browse.js

@ -0,0 +1,138 @@
#!/usr/bin/env node
// Packages
const fs = require('fs-promise')
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 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('𝚫 now browse')}
${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 app
${chalk.cyan('$ now browse')}
`)
}
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)
}
const config = cfg.read()
Promise.resolve(argv.token || config.token || login(apiUrl))
.then(async token => {
try {
await browse(token)
} catch (err) {
error(`Unknown error: ${err}\n${err.stack}`)
process.exit(1)
}
})
.catch(e => {
error(`Authentication error – ${e.message}`)
process.exit(1)
})
async function browse(token) {
const now = new Now(apiUrl, token, {debug})
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)}`)
process.exit(0)
}
const sorted = await sortByCreation([...currentProjectDeployments])
const latestDeploy = sorted[0]
try {
const url = `https://${latestDeploy.url}`
console.log(`opening your latest deployment url for ${chalk.bold(pkg.name)} in browser - ${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
})
}

3
bin/now.js

@ -54,7 +54,8 @@ const commands = new Set([
'cc',
'billing',
'upgrade',
'downgrade'
'downgrade',
'browse'
])
const aliases = new Map([

1
package.json

@ -81,6 +81,7 @@
"ms": "0.7.2",
"node-fetch": "1.6.3",
"node-version": "1.0.0",
"opn": "4.0.2",
"ora": "1.1.0",
"progress": "1.1.8",
"psl": "1.1.16",

Loading…
Cancel
Save