qenv/ts/index.ts

75 lines
2.4 KiB
TypeScript
Raw Normal View History

2017-01-21 10:57:04 +00:00
import * as plugins from './qenv.plugins'
2016-06-19 18:08:34 +00:00
2016-08-04 14:44:42 +00:00
export interface IKeyValueObject {
2017-05-12 15:56:51 +00:00
key: string,
value: string
}
2016-08-04 14:09:39 +00:00
2016-06-20 08:45:43 +00:00
export class Qenv {
2017-05-12 15:56:51 +00:00
requiredEnvVars: string[] = []
availableEnvVars: string[] = []
missingEnvVars: string[] = []
keyValueObjectArray: IKeyValueObject[] = []
constructor (basePathArg = process.cwd(), envYmlPathArg, failOnMissing = true) {
getRequiredEnvVars(basePathArg, this.requiredEnvVars)
getAvailableEnvVars(this.requiredEnvVars, envYmlPathArg, this.availableEnvVars, this.keyValueObjectArray)
this.missingEnvVars = getMissingEnvVars(this.requiredEnvVars, this.availableEnvVars)
2017-01-21 10:51:30 +00:00
2017-05-12 15:56:51 +00:00
// handle missing variables
if (this.missingEnvVars.length > 0) {
console.info('Required Env Vars are:')
console.log(this.requiredEnvVars)
console.error('However some Env variables could not be resolved:')
console.log(this.missingEnvVars)
if (failOnMissing) {
console.error('Exiting!')
process.exit(1)
}
}
}
}
2016-06-19 18:08:34 +00:00
2017-01-21 10:51:30 +00:00
let getRequiredEnvVars = (pathArg: string, requiredEnvVarsArray: string[]) => {
2017-05-12 15:56:51 +00:00
let qenvFilePath = plugins.path.join(pathArg, 'qenv.yml')
let qenvFile = plugins.smartfile.fs.toObjectSync(qenvFilePath)
for (let keyArg in qenvFile.vars) {
requiredEnvVarsArray.push(qenvFile.vars[ keyArg ])
}
2016-06-19 18:08:34 +00:00
}
2017-01-21 10:57:04 +00:00
let getAvailableEnvVars = (
2017-05-12 15:56:51 +00:00
requiredEnvVarsArg: string[],
envYmlPathArg: string,
availableEnvVarsArray: string[],
keyValueObjectArrayArg: IKeyValueObject[]
2017-01-21 10:57:04 +00:00
) => {
2017-05-12 15:56:51 +00:00
envYmlPathArg = plugins.path.join(envYmlPathArg, 'env.yml')
let envYml
try {
envYml = plugins.smartfile.fs.toObjectSync(envYmlPathArg)
} catch (err) {
console.log("env file couldn't be found at " + envYmlPathArg)
envYml = {}
}
for (let requiredEnvVar of requiredEnvVarsArg) {
if (process.env[ requiredEnvVar ]) {
availableEnvVarsArray.push(requiredEnvVar)
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[ requiredEnvVar ]
})
} else if (envYml.hasOwnProperty(requiredEnvVar)) {
process.env[ requiredEnvVar ] = envYml[ requiredEnvVar ]
availableEnvVarsArray.push(requiredEnvVar)
keyValueObjectArrayArg.push({
key: requiredEnvVar,
value: process.env[ requiredEnvVar ]
})
2016-06-20 05:06:15 +00:00
}
2017-05-12 15:56:51 +00:00
}
2017-01-21 10:51:30 +00:00
}
2016-06-20 05:06:15 +00:00
2017-05-12 15:56:51 +00:00
let getMissingEnvVars = (requiredEnvVarsArray: string[], availableEnvVarsArray: string[]) => {
return plugins.lodash.difference(requiredEnvVarsArray, availableEnvVarsArray)
2017-01-21 10:51:30 +00:00
}