40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
var GetIntrinsic = require('../GetIntrinsic');
 | 
						|
 | 
						|
var $TypeError = GetIntrinsic('%TypeError%');
 | 
						|
 | 
						|
var Type = require('./Type');
 | 
						|
var IsDataDescriptor = require('./IsDataDescriptor');
 | 
						|
var IsAccessorDescriptor = require('./IsAccessorDescriptor');
 | 
						|
 | 
						|
var assertRecord = require('../helpers/assertRecord');
 | 
						|
 | 
						|
// https://ecma-international.org/ecma-262/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]]']
 | 
						|
		};
 | 
						|
	} else {
 | 
						|
		throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
 | 
						|
	}
 | 
						|
};
 |