%PDF- %PDF-
Direktori : /proc/self/root/var/www/html/node_modules/es-abstract/2017/ |
Current File : //proc/self/root/var/www/html/node_modules/es-abstract/2017/OrdinaryDefineOwnProperty.js |
'use strict'; var GetIntrinsic = require('get-intrinsic'); var $gOPD = require('../helpers/getOwnPropertyDescriptor'); var $SyntaxError = GetIntrinsic('%SyntaxError%'); var $TypeError = GetIntrinsic('%TypeError%'); var isPropertyDescriptor = require('../helpers/isPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var IsPropertyKey = require('./IsPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var Type = require('./Type'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (Type(O) !== 'Object') { throw new $TypeError('Assertion failed: O must be an Object'); } if (!IsPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor({ Type: Type, IsDataDescriptor: IsDataDescriptor, IsAccessorDescriptor: IsAccessorDescriptor }, Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); };