UNPKG

1.79 kBJavaScriptView Raw
1/* @flow */
2'use strict'
3
4const chalk = require('chalk')
5const Table = require('cli-table2')
6
7const projectMeta = require('./utils/project-meta.js')
8
9function read (
10 cwd /* : string */,
11 env /* : string */
12) /* : Promise<{ [id:string]: string }> */ {
13 return projectMeta.read(cwd)
14 .then((config) => config && config.server && config.server.variables ? config.server.variables : {})
15 .then((variables) => {
16 const keys = Object.keys(variables)
17
18 if (!keys.length) {
19 return {}
20 }
21
22 return keys.reduce((memo, key) => {
23 const variable = variables[key]
24 switch (typeof variable) {
25 case 'string':
26 memo[key] = variable
27 return memo
28 case 'object': {
29 if (variable[env]) {
30 if (typeof variable[env] !== 'string') {
31 throw new Error(`Variable ${key} for Environment ${env} must be a string`)
32 }
33 memo[key] = variable[env]
34 }
35 return memo
36 }
37 default:
38 throw new Error(`Variable ${key} must be an object or a string`)
39 }
40 }, {})
41 })
42}
43
44function display (
45 logger /* : any */,
46 cwd /* : string */,
47 env /* : string */
48) /* : Promise<void> */ {
49 return read(cwd, env)
50 .then((envVars) => {
51 const keys = Object.keys(envVars)
52 if (!keys.length) {
53 return
54 }
55
56 const rows = keys.map((key) => [
57 chalk.grey(key),
58 envVars[key]
59 ])
60
61 rows.unshift([{
62 content: chalk.bold(`Environment Variables (${env})`),
63 hAlign: 'center',
64 colSpan: 2
65 }])
66
67 var table = new Table()
68 table.push.apply(table, rows)
69
70 logger.log(table.toString())
71 })
72}
73
74module.exports = {
75 read,
76 display
77}