import { toBoolean } from '@uci-utils/to-boolean' // adapted from "https://github.com/eivindfjeldstad/const git" /** * Cast `val` to `String` * * @param {Mixed} val * @api public */ const toString = function (val) { if (null == val) return '' return val.toString() } /** * Cast `val` to `Number` * * @param {Mixed} val * @api public */ const toNumber = function (val) { var num = parseFloat(val) return isNaN(num) ? 0 : num } /** * Cast `val` to a`Date` * * @param {Mixed} val * @api public */ const toDate = function () { var date = new Date(...arguments) return isNaN(date.getTime()) ? new Date(0) : date } /** * Cast `val` to `Array` * * @param {Mixed} val * @api public */ const toArray = function (val) { if (val == null) return [] if (val instanceof Array) return val if (typeof val != 'string') return [val] var arr = val.split(',') for (var i = 0; i < arr.length; i++) { arr[i] = arr[i].trim() } return arr } /** * Cast given `val` to `type` * * @param {Mixed} val * @param {String} type * @api public */ const typecast={string:toString,number:toNumber,date:toDate,boolean:toBoolean,array:toArray} function cast (val, type) { var fn = typecast[type] if (typeof fn != 'function') throw new Error('cannot cast to ' + type) return fn(val) } export { cast, typecast, toBoolean, toArray, toDate, toNumber, toString } // TODO support registering alternative casting functions with a register function /** * Cast `val` to `Boolean` * * @param {Mixed} val * @api public */ // const toBoolean = function (val) { // return !! val && val !== 'false' && val !== '0' // }