| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 'use strict';var GetIntrinsic = require('get-intrinsic');var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);if ($defineProperty) {	try {		$defineProperty({}, 'a', { value: 1 });	} catch (e) {		// IE 8 has a broken defineProperty		$defineProperty = null;	}}// node v0.6 has a bug where array lengths can be Set but not Definedvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;// eslint-disable-next-line global-requirevar isArray = hasArrayLengthDefineBug && require('../2020/IsArray'); // this does not depend on any other AOs.var callBound = require('call-bind/callBound');var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');// eslint-disable-next-line max-paramsmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {	if (!$defineProperty) {		if (!IsDataDescriptor(desc)) {			// ES3 does not support getters/setters			return false;		}		if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {			return false;		}		// fallback for ES3		if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {			// a non-enumerable existing property			return false;		}		// property does not exist at all, or exists but is enumerable		var V = desc['[[Value]]'];		// eslint-disable-next-line no-param-reassign		O[P] = V; // will use [[Define]]		return SameValue(O[P], V);	}	if (		hasArrayLengthDefineBug		&& P === 'length'		&& '[[Value]]' in desc		&& isArray(O)		&& O.length !== desc['[[Value]]']	) {		// eslint-disable-next-line no-param-reassign		O.length = desc['[[Value]]'];		return O.length === desc['[[Value]]'];	}	$defineProperty(O, P, FromPropertyDescriptor(desc));	return true;};
 |