| | |
| | | var global = require('../internals/global'); |
| | | var DESCRIPTORS = require('../internals/descriptors'); |
| | | var IE8_DOM_DEFINE = require('../internals/ie8-dom-define'); |
| | | var V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug'); |
| | | var anObject = require('../internals/an-object'); |
| | | var toPropertyKey = require('../internals/to-property-key'); |
| | | |
| | | // eslint-disable-next-line es/no-object-defineproperty -- safe |
| | | var TypeError = global.TypeError; |
| | | // eslint-disable-next-line es-x/no-object-defineproperty -- safe |
| | | var $defineProperty = Object.defineProperty; |
| | | // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe |
| | | var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; |
| | | var ENUMERABLE = 'enumerable'; |
| | | var CONFIGURABLE = 'configurable'; |
| | | var WRITABLE = 'writable'; |
| | | |
| | | // `Object.defineProperty` method |
| | | // https://tc39.es/ecma262/#sec-object.defineproperty |
| | | exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) { |
| | | exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { |
| | | anObject(O); |
| | | P = toPropertyKey(P); |
| | | anObject(Attributes); |
| | | if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { |
| | | var current = $getOwnPropertyDescriptor(O, P); |
| | | if (current && current[WRITABLE]) { |
| | | O[P] = Attributes.value; |
| | | Attributes = { |
| | | configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], |
| | | enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], |
| | | writable: false |
| | | }; |
| | | } |
| | | } return $defineProperty(O, P, Attributes); |
| | | } : $defineProperty : function defineProperty(O, P, Attributes) { |
| | | anObject(O); |
| | | P = toPropertyKey(P); |
| | | anObject(Attributes); |