index.js 806 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. 'use strict';
  2. var hasOwn = require('hasown');
  3. // data descriptor properties
  4. var data = {
  5. __proto__: null,
  6. configurable: 'boolean',
  7. enumerable: 'boolean',
  8. writable: 'boolean',
  9. };
  10. module.exports = function isDataDescriptor(obj, prop) {
  11. if (!obj || typeof obj !== 'object') {
  12. return false;
  13. }
  14. if (typeof prop === 'string') {
  15. var val = Object.getOwnPropertyDescriptor(obj, prop);
  16. return typeof val !== 'undefined';
  17. }
  18. if (
  19. (!('value' in obj) && !('writable' in obj))
  20. || 'get' in obj
  21. || 'set' in obj
  22. ) {
  23. return false;
  24. }
  25. for (var key in obj) { // eslint-disable-line no-restricted-syntax
  26. if (
  27. key !== 'value'
  28. && hasOwn(obj, key)
  29. && hasOwn(data, key)
  30. && typeof obj[key] !== data[key]
  31. && typeof obj[key] !== 'undefined'
  32. ) {
  33. return false;
  34. }
  35. }
  36. return true;
  37. };