'use strict'; var GetIntrinsic = require('get-intrinsic'); var has = require('has'); var $TypeError = GetIntrinsic('%TypeError%'); module.exports = function IsPropertyDescriptor(ES, Desc) { if (ES.Type(Desc) !== 'Object') { return false; } var allowed = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Get]]': true, '[[Set]]': true, '[[Value]]': true, '[[Writable]]': true }; for (var key in Desc) { // eslint-disable-line no-restricted-syntax if (has(Desc, key) && !allowed[key]) { return false; } } if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) { throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); } return true; };