UNPKG

cn-shell

Version:
101 lines (100 loc) 3.1 kB
import dotenv from "dotenv"; import minimist from "minimist"; const CFG_DOTENV_PATH = "DOTENV_PATH"; const DEFAULT_CONFIG_OPTIONS = { silent: false, redact: false, envVarPrefix: "", }; export var ConfigTypes; (function (ConfigTypes) { ConfigTypes[(ConfigTypes["String"] = 0)] = "String"; ConfigTypes[(ConfigTypes["Boolean"] = 1)] = "Boolean"; ConfigTypes[(ConfigTypes["Number"] = 2)] = "Number"; })(ConfigTypes || (ConfigTypes = {})); export class ConfigMan { _minimist; constructor() { this._minimist = minimist(process.argv.slice(2)); let dotenvPath = this.get(CFG_DOTENV_PATH, ConfigTypes.String, { defaultVal: "", }); if (dotenvPath.length) { dotenv.config({ path: dotenvPath }); } } convertConfigValue(value, type) { switch (type) { case ConfigTypes.Number: return parseInt(value); case ConfigTypes.Boolean: if (value.toUpperCase() === "Y") { return true; } return false; default: return value; } } get(config, type, passedOptions = {}, appOrExtName = "", logger) { let options = { ...DEFAULT_CONFIG_OPTIONS, ...passedOptions, }; let cliParams = config.toLowerCase(); let value = this._minimist[cliParams]; if (value !== undefined) { if (logger !== undefined && logger.started && options.silent === false) { logger.startup( appOrExtName, "CLI parameter (%s) = (%j)", cliParams, options.redact ? "redacted" : value, ); } if (type === ConfigTypes.String && typeof value === "number") { return value.toString(); } if (type === ConfigTypes.String && typeof value !== "string") { throw Error(`Config parameter (${config}) should be a string!`); } if (type === ConfigTypes.Number && typeof value !== "number") { throw Error(`Config parameter (${config}) should be a number!`); } if (type === ConfigTypes.Boolean && typeof value !== "boolean") { throw Error(`Config parameter (${config}) should be a boolean!`); } return value; } let evar = `${options.envVarPrefix}${config.toUpperCase()}`; value = process.env[evar]; if (value !== undefined) { value = this.convertConfigValue(value, type); if (logger !== undefined && logger.started && options.silent === false) { logger.startup( appOrExtName, "Env var (%s) = (%j)", evar, options.redact ? "redacted" : value, ); } } if (value === undefined) { if (options.defaultVal === undefined) { throw Error( `Config parameter (${config}) not set on the CLI or as an env var!`, ); } value = options.defaultVal; if (logger !== undefined && logger.started && options.silent === false) { logger.startup( appOrExtName, "Default value used for (%s) = (%j)", config, options.redact ? "redacted" : value, ); } } return value; } }