UNPKG

2.19 kBJavaScriptView Raw
1#!/usr/bin/env node
2let chalk = require('chalk')
3let create = require('@architect/create/cli')
4let deploy = require('@architect/deploy/cli')
5let env = require('@architect/env')
6let hydrate = require('@architect/hydrate/cli')
7let logs = require('@architect/logs/cli')
8let pkg = require('@architect/package/cli')
9let repl = require('@architect/repl')
10let sandbox = require('@architect/sandbox/src/cli/arc')
11
12let before = require('./before')
13let help = require('./help')
14let version = require('./version')
15
16let update = require('update-notifier')
17let _pkg = require('../package.json')
18
19let cmds = {
20 create,
21 init: create,
22 deploy,
23 env,
24 help,
25 hydrate,
26 logs,
27 package: pkg,
28 repl,
29 sandbox,
30 version
31}
32
33let red = chalk.bgRed.bold.white
34let yel = chalk.yellow
35let dim = chalk.grey
36
37let pretty = {
38 fail(cmd, err) {
39 console.log(red(`${cmd} failed!`), err && err.message? yel(err.message) : '')
40 if (err && err.message)
41 console.log(dim(err.stack))
42 },
43 notFound(cmd) {
44 console.log(dim(`Sorry, ${chalk.green.bold('arc ' +cmd)} command not found!`))
45 }
46}
47
48async function run ({cmd, opts}) {
49 try {
50 await cmds[cmd](opts)
51 }
52 catch(err) {
53 pretty.fail(cmd, err)
54 process.exit(1)
55 }
56}
57
58async function main (args) {
59 // Mainly here for testing
60 args = args || process.argv.slice(2)
61
62 // Check for updates in a non-blocking background process
63 let boxenOpts = {padding: 1, margin: 1, align: 'center', borderColor: 'green', borderStyle: 'round', dimBorder: true}
64 update({pkg: _pkg, shouldNotifyInNpmScript: true}).notify({boxenOpts})
65
66 let cmd = args.shift()
67 let opts = args.slice(0)
68
69 if (cmd && !cmds[cmd]) {
70 pretty.notFound(cmd)
71 process.exit(1)
72 }
73 else if (!cmd || cmd === 'help') {
74 help(opts)
75 }
76 else if (cmd === 'create' || cmd === 'init' || cmd === 'version') {
77 run({cmd, opts})
78 }
79 else {
80 // Only run preflight ops on workflows related to existing projects
81 try {
82 before()
83 }
84 catch(err) {
85 pretty.fail(cmd, err)
86 process.exit(1)
87 }
88 run({cmd, opts})
89 }
90}
91
92module.exports = main
93
94// allow direct invoke
95if (require.main === module) {
96 (async function () {
97 await main()
98 })()
99}