UNPKG

is-data-descriptor

Version:

Returns true if a value has the characteristics of a valid JavaScript data descriptor.

42 lines (37 loc) 1 kB
'use strict'; var hasOwn = require('hasown'); var gOPD = require('gopd'); var isObject = function (val) { return val !== null && typeof val === 'object' && !Array.isArray(val); }; module.exports = function isDataDescriptor(obj, key) { if (!isObject(obj)) { return false; } var desc = arguments.length > 1 ? gOPD(obj, key) : obj; if (isObject(desc)) { if ( !hasOwn(desc, 'value') || hasOwn(desc, 'get') || hasOwn(desc, 'set') || (hasOwn(desc, 'configurable') && typeof desc.configurable !== 'boolean') || (hasOwn(desc, 'enumerable') && typeof desc.enumerable !== 'boolean') || (hasOwn(desc, 'writable') && typeof desc.writable !== 'boolean') ) { return false; } for (var descKey in desc) { // eslint-disable-line no-restricted-syntax if ( hasOwn(desc, descKey) && descKey !== 'configurable' && descKey !== 'enumerable' && descKey !== 'writable' && descKey !== 'value' ) { return false; } } return true; } return false; };