| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 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.setfunction 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 prototypevar 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});
 |