refactor code
This commit is contained in:
75
ts/index.ts
75
ts/index.ts
@ -1,74 +1 @@
|
||||
import * as plugins from './qenv.plugins'
|
||||
|
||||
export interface IKeyValueObject {
|
||||
key: string,
|
||||
value: string
|
||||
}
|
||||
|
||||
export class Qenv {
|
||||
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)
|
||||
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let getRequiredEnvVars = (pathArg: string, requiredEnvVarsArray: string[]) => {
|
||||
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 ])
|
||||
}
|
||||
}
|
||||
|
||||
let getAvailableEnvVars = (
|
||||
requiredEnvVarsArg: string[],
|
||||
envYmlPathArg: string,
|
||||
availableEnvVarsArray: string[],
|
||||
keyValueObjectArrayArg: IKeyValueObject[]
|
||||
) => {
|
||||
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 ]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let getMissingEnvVars = (requiredEnvVarsArray: string[], availableEnvVarsArray: string[]) => {
|
||||
return plugins.lodash.difference(requiredEnvVarsArray, availableEnvVarsArray)
|
||||
}
|
||||
export * from './qenv.classes.qenv'
|
||||
|
35
ts/qenv.classes.qenv.ts
Normal file
35
ts/qenv.classes.qenv.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import * as plugins from './qenv.plugins'
|
||||
import * as helpers from './qenv.helpers'
|
||||
|
||||
export interface IKeyValueObject {
|
||||
key: string,
|
||||
value: string
|
||||
}
|
||||
|
||||
export class Qenv {
|
||||
requiredEnvVars: string[] = []
|
||||
availableEnvVars: string[] = []
|
||||
missingEnvVars: string[] = []
|
||||
keyValueObjectArray: IKeyValueObject[] = []
|
||||
constructor (basePathArg = process.cwd(), envYmlPathArg, failOnMissing = true) {
|
||||
helpers.getRequiredEnvVars(basePathArg, this.requiredEnvVars)
|
||||
helpers.getAvailableEnvVars(this.requiredEnvVars, envYmlPathArg, this.availableEnvVars, this.keyValueObjectArray)
|
||||
this.missingEnvVars = helpers.getMissingEnvVars(this.requiredEnvVars, this.availableEnvVars)
|
||||
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getEnvVar (envVarName): string {
|
||||
return process.env[envVarName]
|
||||
}
|
||||
}
|
46
ts/qenv.helpers.ts
Normal file
46
ts/qenv.helpers.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import * as plugins from './qenv.plugins'
|
||||
import { IKeyValueObject } from './qenv.classes.qenv'
|
||||
|
||||
export let getRequiredEnvVars = (pathArg: string, requiredEnvVarsArray: string[]) => {
|
||||
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 ])
|
||||
}
|
||||
}
|
||||
|
||||
export let getAvailableEnvVars = (
|
||||
requiredEnvVarsArg: string[],
|
||||
envYmlPathArg: string,
|
||||
availableEnvVarsArray: string[],
|
||||
keyValueObjectArrayArg: IKeyValueObject[]
|
||||
) => {
|
||||
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 ]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export let getMissingEnvVars = (requiredEnvVarsArray: string[], availableEnvVarsArray: string[]) => {
|
||||
return plugins.lodash.difference(requiredEnvVarsArray, availableEnvVarsArray)
|
||||
}
|
Reference in New Issue
Block a user