mirror of https://github.com/Seich/Beau.git
77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
const { Command, flags } = require('@oclif/command')
|
|
const yaml = require('js-yaml')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const dotenv = require('dotenv')
|
|
const Beau = require('../../src/beau')
|
|
const Ajv = require('ajv').default
|
|
const betterAjvErrors = require('better-ajv-errors')
|
|
|
|
const schema = require('../../schema.json')
|
|
const ajv = new Ajv()
|
|
const validate = ajv.compile(schema)
|
|
|
|
class Base extends Command {
|
|
openConfigFile(configFile) {
|
|
if (!fs.existsSync(configFile)) {
|
|
throw new Error(`The config file, ${configFile} was not found.`)
|
|
}
|
|
|
|
let config
|
|
yaml.safeLoadAll(fs.readFileSync(configFile, 'utf-8'), (doc) => {
|
|
const valid = validate(doc)
|
|
|
|
if (!valid) {
|
|
this.log(`The configuration file is not valid.`)
|
|
this.error(
|
|
betterAjvErrors(schema, doc, validate.errors, { indent: 2 })
|
|
)
|
|
}
|
|
|
|
if (typeof config === 'undefined') {
|
|
config = doc
|
|
} else {
|
|
if (typeof config.hosts === 'undefined') {
|
|
config.hosts = []
|
|
}
|
|
|
|
config.hosts.push(doc)
|
|
}
|
|
})
|
|
|
|
return config
|
|
}
|
|
loadConfig(configFile, params = []) {
|
|
const config = this.openConfigFile(configFile)
|
|
const env = dotenv.config().parsed || {}
|
|
params = dotenv.parse(params.join('\n'))
|
|
|
|
const envParams = { _: Object.assign(env, params) }
|
|
|
|
const configFileDir = path.dirname(
|
|
path.resolve(process.cwd(), configFile)
|
|
)
|
|
|
|
process.chdir(configFileDir)
|
|
|
|
return new Beau(config, envParams)
|
|
}
|
|
}
|
|
|
|
Base.flags = {
|
|
config: flags.string({
|
|
char: 'c',
|
|
description: 'The configuration file to be used.',
|
|
default: 'beau.yml'
|
|
}),
|
|
verbose: flags.boolean({
|
|
char: 'V',
|
|
description: `Show all additional information available for a command.`
|
|
}),
|
|
'no-format': flags.boolean({
|
|
description: `Disables color formatting for usage on external tools.`
|
|
})
|
|
}
|
|
|
|
module.exports = Base
|