| 'use strict'; | 
|   | 
| var GetIntrinsic = require('get-intrinsic'); | 
|   | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
|   | 
| var Type = require('./Type'); | 
| var IsDataDescriptor = require('./IsDataDescriptor'); | 
| var IsAccessorDescriptor = require('./IsAccessorDescriptor'); | 
|   | 
| var assertRecord = require('../helpers/assertRecord'); | 
|   | 
| // https://262.ecma-international.org/5.1/#sec-8.10.4 | 
|   | 
| module.exports = function FromPropertyDescriptor(Desc) { | 
|     if (typeof Desc === 'undefined') { | 
|         return Desc; | 
|     } | 
|   | 
|     assertRecord(Type, 'Property Descriptor', 'Desc', Desc); | 
|   | 
|     if (IsDataDescriptor(Desc)) { | 
|         return { | 
|             value: Desc['[[Value]]'], | 
|             writable: !!Desc['[[Writable]]'], | 
|             enumerable: !!Desc['[[Enumerable]]'], | 
|             configurable: !!Desc['[[Configurable]]'] | 
|         }; | 
|     } else if (IsAccessorDescriptor(Desc)) { | 
|         return { | 
|             get: Desc['[[Get]]'], | 
|             set: Desc['[[Set]]'], | 
|             enumerable: !!Desc['[[Enumerable]]'], | 
|             configurable: !!Desc['[[Configurable]]'] | 
|         }; | 
|     } | 
|     throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor'); | 
|   | 
| }; |