let rTrue=['t','true','y','yes','on','affirmative','positive','up','enabled','affirmative','yea','yep','sure','online','set','closed'] let rFalse=['f','false','n','no','off','negative','negatory','down','disabled','nope','offline','unset','open'] function createBoolean (opts={}) { return (value => { if (opts.addTrue) rTrue = rTrue.concat(opts.addTrue) if (opts.addFalse) rFalse = rFalse.concat(opts.addFalse) if (opts.True) rTrue = opts.True if (opts.False) rFalse = opts.False if (value===undefined) return opts.undefined==='same' ? undefined : (opts.undefined || false) // false by default if (value===null) return opts.null==='same' ? null : (opts.null || false) // false by default 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 (rTrue.includes(value)) return true if (rFalse.includes(value)) return false return !!opts.string || false } return !!value }) } const toBoolean = createBoolean() export default toBoolean export { toBoolean, createBoolean, rTrue, rFalse }