foop
Version:
interfaces that describe their intentions.
42 lines (40 loc) • 3.01 kB
JavaScript
var propertyIsEnumerable = require('../native/propertyIsEnumerable')
var curry = require('../fp/curry')
/**
* @desc object at property is enumerable
* @memberOf is
* @since 3.0.0
*
* @param {Object | *} obj
* @param {string | *} prop
* @return {boolean} obj[prop] is enumerable
*
* @func
* @name isEnumerable
* @type {Function}
*
* {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable mozilla-propertyisenumerable}
* @see {@link mozilla-propertyisenumerable}
*
* @TODO use fp/call
*
* @example
*
* const obj = {eh: true}
* isEnumerable(obj, 'eh')
* //=> true
*
* const objPropEnumerable = isEnumerable(obj)
* objPropEnumerable('eh')
* //=> true
*
* Object.defineProperty(obj, 'length', {
* enumerable: false,
* value: () => Object.keys(obj).length,
* })
* isEnumerable(obj, 'length')
* //=> false
*
*/
module.exports = curry(2, function (obj, prop) { return propertyIsEnumerable.call(obj, prop); })
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bWVyYWJsZS5qcyIsInNvdXJjZXMiOlsiZW51bWVyYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHJlcXVpcmUoJy4uL25hdGl2ZS9wcm9wZXJ0eUlzRW51bWVyYWJsZScpXG5jb25zdCBjdXJyeSA9IHJlcXVpcmUoJy4uL2ZwL2N1cnJ5JylcblxuLyoqXG4gKiBAZGVzYyBvYmplY3QgYXQgcHJvcGVydHkgaXMgZW51bWVyYWJsZVxuICogQG1lbWJlck9mIGlzXG4gKiBAc2luY2UgMy4wLjBcbiAqXG4gKiBAcGFyYW0ge09iamVjdCB8ICp9IG9ialxuICogQHBhcmFtIHtzdHJpbmcgfCAqfSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufSBvYmpbcHJvcF0gaXMgZW51bWVyYWJsZVxuICpcbiAqIEBmdW5jXG4gKiBAbmFtZSBpc0VudW1lcmFibGVcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L3Byb3BlcnR5SXNFbnVtZXJhYmxlIG1vemlsbGEtcHJvcGVydHlpc2VudW1lcmFibGV9XG4gKiBAc2VlIHtAbGluayBtb3ppbGxhLXByb3BlcnR5aXNlbnVtZXJhYmxlfVxuICpcbiAqIEBUT0RPIHVzZSBmcC9jYWxsXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGNvbnN0IG9iaiA9IHtlaDogdHJ1ZX1cbiAqICAgaXNFbnVtZXJhYmxlKG9iaiwgJ2VoJylcbiAqICAgLy89PiB0cnVlXG4gKlxuICogICBjb25zdCBvYmpQcm9wRW51bWVyYWJsZSA9IGlzRW51bWVyYWJsZShvYmopXG4gKiAgIG9ialByb3BFbnVtZXJhYmxlKCdlaCcpXG4gKiAgIC8vPT4gdHJ1ZVxuICpcbiAqICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ2xlbmd0aCcsIHtcbiAqICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gKiAgICAgIHZhbHVlOiAoKSA9PiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCxcbiAqICAgfSlcbiAqICAgaXNFbnVtZXJhYmxlKG9iaiwgJ2xlbmd0aCcpXG4gKiAgIC8vPT4gZmFsc2VcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY3VycnkoMiwgKG9iaiwgcHJvcCkgPT4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHByb3ApKVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztBQUN0RUEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDcEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQUEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEFBQUcsU0FBQSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFBLENBQUM7In0=