uci-utils-to-boolean/src/boolean.js

26 lines
1.0 KiB
JavaScript

let rTrue=['t','true','y','yes','on','positive','up','enabled','affirmative','yea','sure','online']
let rFalse=['f','false','n','no','off','negative','down','disabled','nope','offline']
function createBoolean (opts={}) {
return (value => {
if (opts.addTrue) rTrue = rTrue.concat(opts.addTrue)
if (opts.addFalse) rFalse = rFalse.concat(opts.addFalse)
if (value===undefined) return opts.undefined==='same' ? undefined : opts.undefined || false
if (value===null) return opts.null==='same' ? null : opts.null || false
if (!isNaN(Number(value))) return (opts.number==='default' ? !!value : (Number(value) > (opts.number || 0)? true : false))
if (typeof value==='string') {
value = value.trim()
value = value.toLowerCase()
if ((opts.rTrue || rTrue).includes(value)) return true
if ((opts.rFalse || rFalse).includes(value)) return false
return !!opts.string || false
}
return !!value
})
}
const toBoolean = createBoolean()
export default toBoolean
export { toBoolean, createBoolean, rTrue, rFalse }