foop
Version:
interfaces that describe their intentions.
72 lines (69 loc) • 5.44 kB
JavaScript
var EMPTY_STRING = require('../native/EMPTY_STRING')
var size = require('../util/size')
var isNullOrUndefined = require('./nullOrUndefined')
var isObj = require('./objTypeof')
/* prettier-ignore */
/**
* Returns `true` if the given value is its type's empty value;
* `false` otherwise.
*
* @since 5.0.0-beta.1
* @memberOf is
*
* @param {*} x value to check if empty
* @return {boolean}
*
* @func
* @fork v0.1.0
* @category Logic
* @sig a -> Boolean
*
* {@link https://github.com/js-data/js-data/blob/v2/src/utils.js#L98 js-data-is-empty}
* {@link https://github.com/wycats/handlebars.js/blob/master/lib/handlebars/utils.js#L85 handlebars-is-empty}
* {@link https://github.com/bitovi/u/blob/master/js/object/isEmptyObject.js can-u-is-empty-object}
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L1293 underscore-is-empty}
* {@link https://github.com/ramda/ramda/issues/1228 ramda-is-empty}
* @see {@link can-u-is-empty-object}
* @see {@link underscore-is-empty}
* @see {@link ramda-is-empty}
* @see {@link handlebars-is-empty}
* @see {@link js-data-is-empty}
* @see empty
*
* @example
*
* isEmpty([1, 2, 3]); //=> false
* isEmpty([]); //=> true
* isEmpty(''); //=> true
* isEmpty(null); //=> false
* isEmpty({}); //=> true
* isEmpty({length: 0}); //=> false
*
*/
module.exports = function isEmpty(x) {
if (x === EMPTY_STRING) {
return true
}
else if (isNullOrUndefined(x)) {
return false
}
else if (isObj(x)) {
// @NOTE
// for (const property in x)
// return true
// return false
return size(x) === 0
}
else {
return false
}
// @NOTE old version
// else return (
// // null|undefined = empty
// // isNullOrUndefined(x) ||
// // '' = empty
// // [] | {} = empty
// keys(x).length === 0
// )
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHkuanMiLCJzb3VyY2VzIjpbImVtcHR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVNUFRZX1NUUklORyA9IHJlcXVpcmUoJy4uL25hdGl2ZS9FTVBUWV9TVFJJTkcnKVxuY29uc3Qgc2l6ZSA9IHJlcXVpcmUoJy4uL3V0aWwvc2l6ZScpXG5jb25zdCBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4vbnVsbE9yVW5kZWZpbmVkJylcbmNvbnN0IGlzT2JqID0gcmVxdWlyZSgnLi9vYmpUeXBlb2YnKVxuXG4vKiBwcmV0dGllci1pZ25vcmUgKi9cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGl0cyB0eXBlJ3MgZW1wdHkgdmFsdWU7XG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAc2luY2UgNS4wLjAtYmV0YS4xXG4gKiBAbWVtYmVyT2YgaXNcbiAqXG4gKiBAcGFyYW0geyp9IHggdmFsdWUgdG8gY2hlY2sgaWYgZW1wdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKlxuICogQGZ1bmNcbiAqIEBmb3JrIHYwLjEuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIGEgLT4gQm9vbGVhblxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vanMtZGF0YS9qcy1kYXRhL2Jsb2IvdjIvc3JjL3V0aWxzLmpzI0w5OCBqcy1kYXRhLWlzLWVtcHR5fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9ibG9iL21hc3Rlci9saWIvaGFuZGxlYmFycy91dGlscy5qcyNMODUgaGFuZGxlYmFycy1pcy1lbXB0eX1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYml0b3ZpL3UvYmxvYi9tYXN0ZXIvanMvb2JqZWN0L2lzRW1wdHlPYmplY3QuanMgY2FuLXUtaXMtZW1wdHktb2JqZWN0fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvdW5kZXJzY29yZS9ibG9iL21hc3Rlci91bmRlcnNjb3JlLmpzI0wxMjkzIHVuZGVyc2NvcmUtaXMtZW1wdHl9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2lzc3Vlcy8xMjI4IHJhbWRhLWlzLWVtcHR5fVxuICogQHNlZSB7QGxpbmsgY2FuLXUtaXMtZW1wdHktb2JqZWN0fVxuICogQHNlZSB7QGxpbmsgdW5kZXJzY29yZS1pcy1lbXB0eX1cbiAqIEBzZWUge0BsaW5rIHJhbWRhLWlzLWVtcHR5fVxuICogQHNlZSB7QGxpbmsgaGFuZGxlYmFycy1pcy1lbXB0eX1cbiAqIEBzZWUge0BsaW5rIGpzLWRhdGEtaXMtZW1wdHl9XG4gKiBAc2VlIGVtcHR5XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIGlzRW1wdHkoWzEsIDIsIDNdKTsgICAvLz0+IGZhbHNlXG4gKiAgICAgIGlzRW1wdHkoW10pOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgaXNFbXB0eSgnJyk7ICAgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgICBpc0VtcHR5KG51bGwpOyAgICAgICAgLy89PiBmYWxzZVxuICogICAgICBpc0VtcHR5KHt9KTsgICAgICAgICAgLy89PiB0cnVlXG4gKiAgICAgIGlzRW1wdHkoe2xlbmd0aDogMH0pOyAvLz0+IGZhbHNlXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRW1wdHkoeCkge1xuICBpZiAoeCA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBlbHNlIGlmIChpc051bGxPclVuZGVmaW5lZCh4KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGVsc2UgaWYgKGlzT2JqKHgpKSB7XG4gICAgLy8gQE5PVEVcbiAgICAvLyBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHgpXG4gICAgLy8gICByZXR1cm4gdHJ1ZVxuICAgIC8vIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBzaXplKHgpID09PSAwXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBATk9URSBvbGQgdmVyc2lvblxuICAvLyBlbHNlIHJldHVybiAoXG4gIC8vICAgLy8gbnVsbHx1bmRlZmluZWQgPSBlbXB0eVxuICAvLyAgIC8vIGlzTnVsbE9yVW5kZWZpbmVkKHgpIHx8XG4gIC8vICAgLy8gJycgPSBlbXB0eVxuICAvLyAgIC8vIFtdIHwge30gPSBlbXB0eVxuICAvLyAgIGtleXMoeCkubGVuZ3RoID09PSAwXG4gIC8vIClcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0FBQ3REQSxHQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDcENBLEdBQUssQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDdERBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdDcEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDbkMsSUFBSSxDQUFDLEtBQUssWUFBWSxFQUFFO0lBQ3RCLE9BQU8sSUFBSTtHQUNaO09BQ0ksSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUM3QixPQUFPLEtBQUs7R0FDYjtPQUNJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7OztJQUtqQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0dBQ3JCO09BQ0k7SUFDSCxPQUFPLEtBQUs7R0FDYjs7Ozs7Ozs7OztDQVVGOyJ9