| 'use strict'; | 
| 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'); | 
|   | 
| var $TypeError = TypeError; | 
| // eslint-disable-next-line es/no-object-defineproperty -- safe | 
| var $defineProperty = Object.defineProperty; | 
| // eslint-disable-next-line es/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 ? 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); | 
|   if (IE8_DOM_DEFINE) try { | 
|     return $defineProperty(O, P, Attributes); | 
|   } catch (error) { /* empty */ } | 
|   if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); | 
|   if ('value' in Attributes) O[P] = Attributes.value; | 
|   return O; | 
| }; |