UNPKG

vigour-config

Version:
85 lines (77 loc) 1.81 kB
'use strict' var get = require('lodash.get') var set = require('lodash.set') var isParam = /^--./ const DOT = '.' const CAST = { number: Number, string: JSON.stringify, boolean: Boolean, object: tryParse } function tryParse (val) { try { return JSON.parse(val) } catch (err) { return val } } module.exports = function parseArgv (config) { var setobj = {} var args = process.argv for (let i = 0, param; (param = args[i]); i++) { if (isParam.test(param)) { param = param.slice(2) let path = hasDot(param) && param.split(DOT) let val = args[i + 1] if (isParam.test(val)) { val = true } else { i++ let hasValue = path ? get(config, path) : config[param] let parsed = tryParse(val) let type = hasValue && hasValue._type if (type) { if (typeof parsed !== type) { parsed = CAST[type](parsed) if (typeof parsed !== type) { throw new Error( 'Config: wrong type! ' + val + ' should be ' + type ) } } } val = parsed } if (!(val instanceof Object)) { val = { val: val } } if (path) { set(setobj, path, val) } else { setobj[param] = val } } } var dowhap = setobj.config if (dowhap) { try { var configSet = get(dowhap.total, dowhap.myPath) delete setobj.config for (var s in setobj) { configSet[s] = setobj[s] } setobj = configSet } catch (err) { console.log('CONFIG ERROR! could not parse setobj.config:\n', setobj.config, '\nerror: ', err ) } } return {setobj, dowhap} } function hasDot (str) { return ~str.indexOf(DOT) }