UNPKG

1.8 kBJavaScriptView Raw
1'use strict'
2
3const cli = require('heroku-cli-util')
4const co = require('co')
5
6exports.boolean = (value) => {
7 switch (value) {
8 case 'true': case 'TRUE': case 'ON': case 'on': case true:
9 return true
10 case 'false': case 'FALSE': case 'OFF': case 'off': case null: case false:
11 return false
12 default:
13 throw new TypeError('Invalid value. Valid options are: a boolean value')
14 }
15}
16
17exports.enum = (value) => {
18 return value
19}
20
21exports.numeric = (value) => {
22 let n = Number(value)
23 if (!isFinite(n)) {
24 throw new TypeError('Invalid value. Valid options are: a numeric value')
25 }
26 return n
27}
28
29exports.generate = (name, convert, explain) => {
30 return co.wrap(function * run (context, heroku) {
31 const host = require('./host')
32 const util = require('./util')
33 const fetcher = require('./fetcher')(heroku)
34 const { app, args } = context
35 const { value, database } = args
36
37 const db = yield fetcher.addon(app, database)
38
39 if (util.starterPlan(db)) throw new Error('This operation is not supported by Hobby tier databases.')
40 if (util.legacyPlan(db)) throw new Error('This operation is not supported by Legacy tier databases.')
41
42 if (!value) {
43 let settings = yield heroku.get(`/postgres/v0/databases/${db.id}/config`, { host: host(db) })
44 let setting = settings[name]
45 cli.log(`${name.replace(/_/g, '-')} is set to ${setting.value} for ${db.name}.`)
46 cli.log(explain(setting))
47 } else {
48 let settings = yield heroku.patch(`/postgres/v0/databases/${db.id}/config`, {
49 host: host(db),
50 body: { [name]: convert(value) }
51 })
52 let setting = settings[name]
53 cli.log(`${name.replace(/_/g, '-')} has been set to ${setting.value} for ${db.name}.`)
54 cli.log(explain(setting))
55 }
56 })
57}