'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; 
 | 
}; 
 |