sharyn
Version:
Combines all the other packages under one.
49 lines (41 loc) • 1.25 kB
Flow
// @flow
import isInt from 'validator/lib/isInt'
import forOwn from 'lodash.forown'
const parseObject = (obj: Object, { integer: integerParam, toggle: toggleParam }: Object = {}) => {
const parsedObject = {}
let integerProperties
if (typeof integerParam === 'string') {
integerProperties = [integerParam]
} else if (!integerParam) {
integerProperties = []
} else {
integerProperties = integerParam
}
let toggleProperties
if (typeof toggleParam === 'string') {
toggleProperties = [toggleParam]
} else if (!toggleParam) {
toggleProperties = []
} else {
toggleProperties = toggleParam
}
forOwn(obj, (value, key) => {
if (integerProperties.find(f => f === key)) {
if (isInt(value)) {
parsedObject[key] = Number(value)
} else {
throw Error(`Value '${value}' of integer property '${key}' is not an integer.`)
}
} else if (toggleProperties.find(f => f === key)) {
if (value === 'on') {
parsedObject[key] = true
} else if (value) {
throw Error(`Value '${value}' of toggle property '${key}' is not 'on'.`)
}
} else if (value !== '') {
parsedObject[key] = value
}
})
return parsedObject
}
export default parseObject