| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var call = require('../internals/function-call'); | 
| var anObject = require('../internals/an-object'); | 
| var isObject = require('../internals/is-object'); | 
| var isDataDescriptor = require('../internals/is-data-descriptor'); | 
| var fails = require('../internals/fails'); | 
| var definePropertyModule = require('../internals/object-define-property'); | 
| var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor'); | 
| var getPrototypeOf = require('../internals/object-get-prototype-of'); | 
| var createPropertyDescriptor = require('../internals/create-property-descriptor'); | 
|   | 
| // `Reflect.set` method | 
| // https://tc39.es/ecma262/#sec-reflect.set | 
| function set(target, propertyKey, V /* , receiver */) { | 
|   var receiver = arguments.length < 4 ? target : arguments[3]; | 
|   var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey); | 
|   var existingDescriptor, prototype, setter; | 
|   if (!ownDescriptor) { | 
|     if (isObject(prototype = getPrototypeOf(target))) { | 
|       return set(prototype, propertyKey, V, receiver); | 
|     } | 
|     ownDescriptor = createPropertyDescriptor(0); | 
|   } | 
|   if (isDataDescriptor(ownDescriptor)) { | 
|     if (ownDescriptor.writable === false || !isObject(receiver)) return false; | 
|     if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) { | 
|       if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; | 
|       existingDescriptor.value = V; | 
|       definePropertyModule.f(receiver, propertyKey, existingDescriptor); | 
|     } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V)); | 
|   } else { | 
|     setter = ownDescriptor.set; | 
|     if (setter === undefined) return false; | 
|     call(setter, receiver, V); | 
|   } return true; | 
| } | 
|   | 
| // MS Edge 17-18 Reflect.set allows setting the property to object | 
| // with non-writable property on the prototype | 
| var MS_EDGE_BUG = fails(function () { | 
|   var Constructor = function () { /* empty */ }; | 
|   var object = definePropertyModule.f(new Constructor(), 'a', { configurable: true }); | 
|   // eslint-disable-next-line es/no-reflect -- required for testing | 
|   return Reflect.set(Constructor.prototype, 'a', 1, object) !== false; | 
| }); | 
|   | 
| $({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, { | 
|   set: set | 
| }); |