FromPropertyDescriptor.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var IsDataDescriptor = require('./IsDataDescriptor');
  4. var IsAccessorDescriptor = require('./IsAccessorDescriptor');
  5. var isPropertyDescriptor = require('../helpers/records/property-descriptor');
  6. // https://262.ecma-international.org/5.1/#sec-8.10.4
  7. module.exports = function FromPropertyDescriptor(Desc) {
  8. if (typeof Desc === 'undefined') {
  9. return Desc;
  10. }
  11. if (!isPropertyDescriptor(Desc)) {
  12. throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor');
  13. }
  14. if (IsDataDescriptor(Desc)) {
  15. return {
  16. value: Desc['[[Value]]'],
  17. writable: !!Desc['[[Writable]]'],
  18. enumerable: !!Desc['[[Enumerable]]'],
  19. configurable: !!Desc['[[Configurable]]']
  20. };
  21. } else if (IsAccessorDescriptor(Desc)) {
  22. return {
  23. get: Desc['[[Get]]'],
  24. set: Desc['[[Set]]'],
  25. enumerable: !!Desc['[[Enumerable]]'],
  26. configurable: !!Desc['[[Configurable]]']
  27. };
  28. }
  29. throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
  30. };