/**
* @module darkFns/assert
*/
function genTypeofFn (type) {
return function (target) {
return typeof target === type
}
}
function genIsEqualFn (value) {
return function (target) {
return target === value
}
}
function genCbIsEqualFn (cb, value) {
return function (target) {
return cb(target) === value
}
}
/**
* assert function type
* @method
* @param { * } target
* @return { boolean } return `typeof(target) === 'function'`
* @example
* isFn(function(){}) // => true
* isFn([]) // => false
*/
export var isFn = genTypeofFn('function')
/**
* assert object type
* @method
* @param { * } target
* @return { boolean } return `typeof(target) === 'object'`
* @example
* isObj([]) // => true
* isObj(null) // => true
* isObj('') // => false
*/
export var isObj = genTypeofFn('object')
/**
* assert undefined type
* @method
* @param { * } target
* @return { boolean } return `typeof(target) === 'undefined'`
* @example
* var a = '1', b
* isUndef(a) // => false
* isUndef(b) // => true
*/
export var isUnDef = genTypeofFn('undefined')
/**
* assert number type
* @method
* @param { * } target
* @return { boolean } return `typeof(target) === 'number'`
* @example
* isNumber(1) // => true
*/
export var isNumber = genTypeofFn('number')
/**
* assert string type
* @method
* @param { * } target
* @return { boolean } return `typeof(target) === 'string'`
* @example
* isString('') // => true
*/
export var isString = genTypeofFn('string')
/**
* assert null
* @method
* @param { * } target
* @return { boolean } return `true` if the target is null
* @example
* isNull(null) // => true
*/
export var isNull = genIsEqualFn(null)
/**
* assert number zero
* @method
* @param { * } target
* @return { boolean } return `true` if the target is zero
* @example
* isZero(0) // => true
*/
export var isZero = genIsEqualFn(0)
/**
* assert false
* @method
* @param { * } target
* @return { boolean } return `true` if the target is false
* @example
* isFalse(false) // => true
* isFalse(0) // => false
*/
export var isFalse = genIsEqualFn(false)
/**
* assert true
* @method
* @param { * } target
* @return { boolean } return `true` if the target is true
* @example
* isFalse(false) // => false
* isFalse(true) // => true
*/
export var isTrue = genIsEqualFn(true)
/**
* assert is an empty string
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an empty string
* @example
* isEmptyString('') // => true
* isEmptyString('123') // => false
* isEmptyString(0) // => false
*/
export var isEmptyString = genIsEqualFn('')
/**
* assert is an empty array
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an empty array
* @example
* isEmptyArray([]) // => true
* isEmptyArray([1, 2, 3]) // => false
* isEmptyArray(0) // => false
*/
export var isEmptyArray = genCbIsEqualFn(JSON.stringify, '[]')
/**
* assert is an empty object
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an empty object
* @example
* isEmptyArray({}}) // => true
* isEmptyArray({a: 1}) // => false
* isEmptyArray(0) // => false
*/
export var isEmptyObj = genCbIsEqualFn(JSON.stringify, '{}')
/**
* assert is array
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an array
* @example
* isArray([]) // => true
* isArray([1, 2, 3]) // => true
* isArray(0) // => false
*/
export function isArray (target) {
return isObj(target) && target instanceof Array
}
/**
* assert is an strict object (json-like)
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an strict object
* @example
* isStrictObj([]) // => false
* isStrictObj({}) // => true
*/
export function isStrictObj (target) {
return isObj(target) && !isArray(target)
}
/**
* assert is an empty string, empty array or empty object
* @method
* @param { * } target
* @return { boolean } return `true` if the target is an strict object
* @example
* isEmpty([]) // => true
* isEmpty({}) // => true
* isEmpty('') // => true
*/
export function isEmpty (target) {
return isEmptyString(target) || isEmptyArray(target) || isEmptyObj(target)
}
/**
* assert is falsy
* @method
* @param { * } target
* @return { boolean } return `true` if the target is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy)
* @example
* isEmpty([]) // => true
* isEmpty({}) // => true
* isEmpty('') // => true
*/
export function isFalsy (target) {
return !!!target
}
/**
* assert is an instance of Class
* @method
* @param { * } target
* @param { * } Class a class
* @return { boolean } return `target instanceof Class`
*/
export function isInstanceOf (target, Class) {
return target instanceof Class
}
export default {
isFn,
isArray,
isString,
isUnDef,
isNull,
isNumber,
isObj,
isStrictObj,
isEmptyObj,
isEmptyArray,
isEmptyString,
isEmpty,
isZero,
isTrue,
isFalse,
isFalsy,
isInstanceOf
}