You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.2 KiB
						
					
					
				| 'use strict'; | |
| 
 | |
| var GetIntrinsic = require('get-intrinsic'); | |
| 
 | |
| var $TypeError = GetIntrinsic('%TypeError%'); | |
| 
 | |
| var DefineOwnProperty = require('../helpers/DefineOwnProperty'); | |
| 
 | |
| var FromPropertyDescriptor = require('./FromPropertyDescriptor'); | |
| var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); | |
| var IsDataDescriptor = require('./IsDataDescriptor'); | |
| var IsExtensible = require('./IsExtensible'); | |
| var IsPropertyKey = require('./IsPropertyKey'); | |
| var SameValue = require('./SameValue'); | |
| var Type = require('./Type'); | |
| 
 | |
| // https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty | |
|  | |
| module.exports = function CreateDataProperty(O, P, V) { | |
| 	if (Type(O) !== 'Object') { | |
| 		throw new $TypeError('Assertion failed: Type(O) is not Object'); | |
| 	} | |
| 	if (!IsPropertyKey(P)) { | |
| 		throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); | |
| 	} | |
| 	var oldDesc = OrdinaryGetOwnProperty(O, P); | |
| 	var extensible = !oldDesc || IsExtensible(O); | |
| 	var nonConfigurable = oldDesc && !oldDesc['[[Configurable]]']; | |
| 	if (nonConfigurable || !extensible) { | |
| 		return false; | |
| 	} | |
| 	return DefineOwnProperty( | |
| 		IsDataDescriptor, | |
| 		SameValue, | |
| 		FromPropertyDescriptor, | |
| 		O, | |
| 		P, | |
| 		{ | |
| 			'[[Configurable]]': true, | |
| 			'[[Enumerable]]': true, | |
| 			'[[Value]]': V, | |
| 			'[[Writable]]': true | |
| 		} | |
| 	); | |
| };
 | |
| 
 |