pax_global_header00006660000000000000000000000064151652547240014525gustar00rootroot0000000000000052 comment=9c40412554e67d1cb039f4cb07c9c1c6c27bcaec ljharb-es-abstract-babee05/000077500000000000000000000000001516525472400157425ustar00rootroot00000000000000ljharb-es-abstract-babee05/.editorconfig000066400000000000000000000004701516525472400204200ustar00rootroot00000000000000root = true [*] indent_style = tab; insert_final_newline = true; quote_type = auto; space_after_anonymous_functions = true; space_after_control_statements = true; spaces_around_operators = true; trim_trailing_whitespace = true; spaces_in_brackets = false; end_of_line = lf; [CHANGELOG.md] indent_style = space ljharb-es-abstract-babee05/.gitattributes000066400000000000000000003207061516525472400206450ustar00rootroot00000000000000/helpers/caseFolding.json linguist-generated=true /es2015.js spackled linguist-generated=true /es2016.js spackled linguist-generated=true /es2017.js spackled linguist-generated=true /es2018.js spackled linguist-generated=true /es2019.js spackled linguist-generated=true /es2020.js spackled linguist-generated=true /es2021.js spackled linguist-generated=true /es2022.js spackled linguist-generated=true /es2023.js spackled linguist-generated=true /es2024.js spackled linguist-generated=true /es2025.js spackled linguist-generated=true /2015/AbstractRelationalComparison.js spackled linguist-generated=true /2015/DateFromTime.js spackled linguist-generated=true /2015/Day.js spackled linguist-generated=true /2015/DayFromYear.js spackled linguist-generated=true /2015/DayWithinYear.js spackled linguist-generated=true /2015/DaysInYear.js spackled linguist-generated=true /2015/HourFromTime.js spackled linguist-generated=true /2015/InLeapYear.js spackled linguist-generated=true /2015/IsAccessorDescriptor.js spackled linguist-generated=true /2015/IsCallable.js spackled linguist-generated=true /2015/IsDataDescriptor.js spackled linguist-generated=true /2015/IsPropertyDescriptor.js spackled linguist-generated=true /2015/MakeDate.js spackled linguist-generated=true /2015/MakeDay.js spackled linguist-generated=true /2015/MakeTime.js spackled linguist-generated=true /2015/MinFromTime.js spackled linguist-generated=true /2015/MonthFromTime.js spackled linguist-generated=true /2015/SameValue.js spackled linguist-generated=true /2015/SecFromTime.js spackled linguist-generated=true /2015/StrictEqualityComparison.js spackled linguist-generated=true /2015/TimeClip.js spackled linguist-generated=true /2015/TimeFromYear.js spackled linguist-generated=true /2015/TimeWithinDay.js spackled linguist-generated=true /2015/ToBoolean.js spackled linguist-generated=true /2015/ToInt32.js spackled linguist-generated=true /2015/ToPropertyDescriptor.js spackled linguist-generated=true /2015/ToUint16.js spackled linguist-generated=true /2015/ToUint32.js spackled linguist-generated=true /2015/WeekDay.js spackled linguist-generated=true /2015/YearFromTime.js spackled linguist-generated=true /2015/abs.js spackled linguist-generated=true /2015/floor.js spackled linguist-generated=true /2015/modulo.js spackled linguist-generated=true /2015/msFromTime.js spackled linguist-generated=true /2016/AbstractEqualityComparison.js spackled linguist-generated=true /2016/AbstractRelationalComparison.js spackled linguist-generated=true /2016/AdvanceStringIndex.js spackled linguist-generated=true /2016/ArrayCreate.js spackled linguist-generated=true /2016/ArraySetLength.js spackled linguist-generated=true /2016/ArraySpeciesCreate.js spackled linguist-generated=true /2016/Call.js spackled linguist-generated=true /2016/CanonicalNumericIndexString.js spackled linguist-generated=true /2016/Canonicalize.js spackled linguist-generated=true /2016/CharacterRange.js spackled linguist-generated=true /2016/CompletePropertyDescriptor.js spackled linguist-generated=true /2016/CreateDataProperty.js spackled linguist-generated=true /2016/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2016/CreateHTML.js spackled linguist-generated=true /2016/CreateIterResultObject.js spackled linguist-generated=true /2016/CreateListFromArrayLike.js spackled linguist-generated=true /2016/CreateMethodProperty.js spackled linguist-generated=true /2016/DateFromTime.js spackled linguist-generated=true /2016/Day.js spackled linguist-generated=true /2016/DayFromYear.js spackled linguist-generated=true /2016/DayWithinYear.js spackled linguist-generated=true /2016/DaysInYear.js spackled linguist-generated=true /2016/DefinePropertyOrThrow.js spackled linguist-generated=true /2016/DeletePropertyOrThrow.js spackled linguist-generated=true /2016/DetachArrayBuffer.js spackled linguist-generated=true /2016/EnumerableOwnNames.js spackled linguist-generated=true /2016/FromPropertyDescriptor.js spackled linguist-generated=true /2016/Get.js spackled linguist-generated=true /2016/GetGlobalObject.js spackled linguist-generated=true /2016/GetIterator.js spackled linguist-generated=true /2016/GetMethod.js spackled linguist-generated=true /2016/GetOwnPropertyKeys.js spackled linguist-generated=true /2016/GetPrototypeFromConstructor.js spackled linguist-generated=true /2016/GetSubstitution.js spackled linguist-generated=true /2016/GetV.js spackled linguist-generated=true /2016/GetValueFromBuffer.js spackled linguist-generated=true /2016/HasOwnProperty.js spackled linguist-generated=true /2016/HasProperty.js spackled linguist-generated=true /2016/HourFromTime.js spackled linguist-generated=true /2016/InLeapYear.js spackled linguist-generated=true /2016/InstanceofOperator.js spackled linguist-generated=true /2016/IntegerIndexedElementGet.js spackled linguist-generated=true /2016/IntegerIndexedElementSet.js spackled linguist-generated=true /2016/InternalizeJSONProperty.js spackled linguist-generated=true /2016/Invoke.js spackled linguist-generated=true /2016/IsAccessorDescriptor.js spackled linguist-generated=true /2016/IsArray.js spackled linguist-generated=true /2016/IsCallable.js spackled linguist-generated=true /2016/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2016/IsConcatSpreadable.js spackled linguist-generated=true /2016/IsConstructor.js spackled linguist-generated=true /2016/IsDataDescriptor.js spackled linguist-generated=true /2016/IsDetachedBuffer.js spackled linguist-generated=true /2016/IsExtensible.js spackled linguist-generated=true /2016/IsGenericDescriptor.js spackled linguist-generated=true /2016/IsInteger.js spackled linguist-generated=true /2016/IsPromise.js spackled linguist-generated=true /2016/IsPropertyDescriptor.js spackled linguist-generated=true /2016/IsPropertyKey.js spackled linguist-generated=true /2016/IsRegExp.js spackled linguist-generated=true /2016/IsWordChar.js spackled linguist-generated=true /2016/IteratorClose.js spackled linguist-generated=true /2016/IteratorComplete.js spackled linguist-generated=true /2016/IteratorNext.js spackled linguist-generated=true /2016/IteratorStep.js spackled linguist-generated=true /2016/IteratorValue.js spackled linguist-generated=true /2016/MakeDate.js spackled linguist-generated=true /2016/MakeDay.js spackled linguist-generated=true /2016/MakeTime.js spackled linguist-generated=true /2016/MinFromTime.js spackled linguist-generated=true /2016/MonthFromTime.js spackled linguist-generated=true /2016/NewPromiseCapability.js spackled linguist-generated=true /2016/NormalCompletion.js spackled linguist-generated=true /2016/ObjectCreate.js spackled linguist-generated=true /2016/ObjectDefineProperties.js spackled linguist-generated=true /2016/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2016/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2016/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2016/OrdinaryHasInstance.js spackled linguist-generated=true /2016/OrdinaryHasProperty.js spackled linguist-generated=true /2016/QuoteJSONString.js spackled linguist-generated=true /2016/RegExpCreate.js spackled linguist-generated=true /2016/RegExpExec.js spackled linguist-generated=true /2016/RequireObjectCoercible.js spackled linguist-generated=true /2016/SameValue.js spackled linguist-generated=true /2016/SameValueZero.js spackled linguist-generated=true /2016/SecFromTime.js spackled linguist-generated=true /2016/Set.js spackled linguist-generated=true /2016/SetFunctionName.js spackled linguist-generated=true /2016/SetIntegrityLevel.js spackled linguist-generated=true /2016/SetValueInBuffer.js spackled linguist-generated=true /2016/SpeciesConstructor.js spackled linguist-generated=true /2016/SplitMatch.js spackled linguist-generated=true /2016/StrictEqualityComparison.js spackled linguist-generated=true /2016/StringCreate.js spackled linguist-generated=true /2016/SymbolDescriptiveString.js spackled linguist-generated=true /2016/TestIntegrityLevel.js spackled linguist-generated=true /2016/TimeClip.js spackled linguist-generated=true /2016/TimeFromYear.js spackled linguist-generated=true /2016/TimeWithinDay.js spackled linguist-generated=true /2016/ToBoolean.js spackled linguist-generated=true /2016/ToDateString.js spackled linguist-generated=true /2016/ToInt16.js spackled linguist-generated=true /2016/ToInt32.js spackled linguist-generated=true /2016/ToInt8.js spackled linguist-generated=true /2016/ToInteger.js spackled linguist-generated=true /2016/ToLength.js spackled linguist-generated=true /2016/ToNumber.js spackled linguist-generated=true /2016/ToObject.js spackled linguist-generated=true /2016/ToPrimitive.js spackled linguist-generated=true /2016/ToPropertyDescriptor.js spackled linguist-generated=true /2016/ToPropertyKey.js spackled linguist-generated=true /2016/ToString.js spackled linguist-generated=true /2016/ToUint16.js spackled linguist-generated=true /2016/ToUint32.js spackled linguist-generated=true /2016/ToUint8.js spackled linguist-generated=true /2016/ToUint8Clamp.js spackled linguist-generated=true /2016/Type.js spackled linguist-generated=true /2016/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2016/ValidateTypedArray.js spackled linguist-generated=true /2016/WeekDay.js spackled linguist-generated=true /2016/YearFromTime.js spackled linguist-generated=true /2016/abs.js spackled linguist-generated=true /2016/floor.js spackled linguist-generated=true /2016/max.js spackled linguist-generated=true /2016/min.js spackled linguist-generated=true /2016/modulo.js spackled linguist-generated=true /2016/msFromTime.js spackled linguist-generated=true /2016/tables/typed-array-objects.js spackled linguist-generated=true /2016/thisBooleanValue.js spackled linguist-generated=true /2016/thisNumberValue.js spackled linguist-generated=true /2016/thisStringValue.js spackled linguist-generated=true /2016/thisTimeValue.js spackled linguist-generated=true /2017/AbstractEqualityComparison.js spackled linguist-generated=true /2017/AbstractRelationalComparison.js spackled linguist-generated=true /2017/AdvanceStringIndex.js spackled linguist-generated=true /2017/ArrayCreate.js spackled linguist-generated=true /2017/ArraySetLength.js spackled linguist-generated=true /2017/ArraySpeciesCreate.js spackled linguist-generated=true /2017/Call.js spackled linguist-generated=true /2017/CanonicalNumericIndexString.js spackled linguist-generated=true /2017/Canonicalize.js spackled linguist-generated=true /2017/CharacterRange.js spackled linguist-generated=true /2017/CompletePropertyDescriptor.js spackled linguist-generated=true /2017/CompletionRecord.js spackled linguist-generated=true /2017/CreateDataProperty.js spackled linguist-generated=true /2017/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2017/CreateHTML.js spackled linguist-generated=true /2017/CreateIterResultObject.js spackled linguist-generated=true /2017/CreateListFromArrayLike.js spackled linguist-generated=true /2017/CreateMethodProperty.js spackled linguist-generated=true /2017/DateFromTime.js spackled linguist-generated=true /2017/Day.js spackled linguist-generated=true /2017/DayFromYear.js spackled linguist-generated=true /2017/DayWithinYear.js spackled linguist-generated=true /2017/DaysInYear.js spackled linguist-generated=true /2017/DefinePropertyOrThrow.js spackled linguist-generated=true /2017/DeletePropertyOrThrow.js spackled linguist-generated=true /2017/FromPropertyDescriptor.js spackled linguist-generated=true /2017/Get.js spackled linguist-generated=true /2017/GetGlobalObject.js spackled linguist-generated=true /2017/GetIterator.js spackled linguist-generated=true /2017/GetMethod.js spackled linguist-generated=true /2017/GetOwnPropertyKeys.js spackled linguist-generated=true /2017/GetPrototypeFromConstructor.js spackled linguist-generated=true /2017/GetSubstitution.js spackled linguist-generated=true /2017/GetV.js spackled linguist-generated=true /2017/HasOwnProperty.js spackled linguist-generated=true /2017/HasProperty.js spackled linguist-generated=true /2017/HourFromTime.js spackled linguist-generated=true /2017/InLeapYear.js spackled linguist-generated=true /2017/InstanceofOperator.js spackled linguist-generated=true /2017/Invoke.js spackled linguist-generated=true /2017/IsAccessorDescriptor.js spackled linguist-generated=true /2017/IsArray.js spackled linguist-generated=true /2017/IsCallable.js spackled linguist-generated=true /2017/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2017/IsConcatSpreadable.js spackled linguist-generated=true /2017/IsConstructor.js spackled linguist-generated=true /2017/IsDataDescriptor.js spackled linguist-generated=true /2017/IsExtensible.js spackled linguist-generated=true /2017/IsGenericDescriptor.js spackled linguist-generated=true /2017/IsInteger.js spackled linguist-generated=true /2017/IsPromise.js spackled linguist-generated=true /2017/IsPropertyDescriptor.js spackled linguist-generated=true /2017/IsPropertyKey.js spackled linguist-generated=true /2017/IsRegExp.js spackled linguist-generated=true /2017/IteratorClose.js spackled linguist-generated=true /2017/IteratorComplete.js spackled linguist-generated=true /2017/IteratorNext.js spackled linguist-generated=true /2017/IteratorStep.js spackled linguist-generated=true /2017/IteratorValue.js spackled linguist-generated=true /2017/MakeDate.js spackled linguist-generated=true /2017/MakeDay.js spackled linguist-generated=true /2017/MakeTime.js spackled linguist-generated=true /2017/MinFromTime.js spackled linguist-generated=true /2017/MonthFromTime.js spackled linguist-generated=true /2017/NewPromiseCapability.js spackled linguist-generated=true /2017/NormalCompletion.js spackled linguist-generated=true /2017/ObjectCreate.js spackled linguist-generated=true /2017/ObjectDefineProperties.js spackled linguist-generated=true /2017/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2017/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2017/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2017/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2017/OrdinaryHasInstance.js spackled linguist-generated=true /2017/OrdinaryHasProperty.js spackled linguist-generated=true /2017/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2017/QuoteJSONString.js spackled linguist-generated=true /2017/RegExpCreate.js spackled linguist-generated=true /2017/RegExpExec.js spackled linguist-generated=true /2017/RequireObjectCoercible.js spackled linguist-generated=true /2017/SameValue.js spackled linguist-generated=true /2017/SameValueNonNumber.js spackled linguist-generated=true /2017/SameValueZero.js spackled linguist-generated=true /2017/SecFromTime.js spackled linguist-generated=true /2017/Set.js spackled linguist-generated=true /2017/SetFunctionName.js spackled linguist-generated=true /2017/SetIntegrityLevel.js spackled linguist-generated=true /2017/SpeciesConstructor.js spackled linguist-generated=true /2017/SplitMatch.js spackled linguist-generated=true /2017/StrictEqualityComparison.js spackled linguist-generated=true /2017/StringCreate.js spackled linguist-generated=true /2017/SymbolDescriptiveString.js spackled linguist-generated=true /2017/TestIntegrityLevel.js spackled linguist-generated=true /2017/TimeClip.js spackled linguist-generated=true /2017/TimeFromYear.js spackled linguist-generated=true /2017/TimeWithinDay.js spackled linguist-generated=true /2017/ToBoolean.js spackled linguist-generated=true /2017/ToDateString.js spackled linguist-generated=true /2017/ToInt16.js spackled linguist-generated=true /2017/ToInt32.js spackled linguist-generated=true /2017/ToInt8.js spackled linguist-generated=true /2017/ToInteger.js spackled linguist-generated=true /2017/ToLength.js spackled linguist-generated=true /2017/ToNumber.js spackled linguist-generated=true /2017/ToObject.js spackled linguist-generated=true /2017/ToPrimitive.js spackled linguist-generated=true /2017/ToPropertyDescriptor.js spackled linguist-generated=true /2017/ToPropertyKey.js spackled linguist-generated=true /2017/ToString.js spackled linguist-generated=true /2017/ToUint16.js spackled linguist-generated=true /2017/ToUint32.js spackled linguist-generated=true /2017/ToUint8.js spackled linguist-generated=true /2017/ToUint8Clamp.js spackled linguist-generated=true /2017/Type.js spackled linguist-generated=true /2017/TypedArrayCreate.js spackled linguist-generated=true /2017/TypedArraySpeciesCreate.js spackled linguist-generated=true /2017/UTF16Decode.js spackled linguist-generated=true /2017/UTF16Encoding.js spackled linguist-generated=true /2017/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2017/ValidateTypedArray.js spackled linguist-generated=true /2017/WeekDay.js spackled linguist-generated=true /2017/YearFromTime.js spackled linguist-generated=true /2017/abs.js spackled linguist-generated=true /2017/floor.js spackled linguist-generated=true /2017/max.js spackled linguist-generated=true /2017/min.js spackled linguist-generated=true /2017/modulo.js spackled linguist-generated=true /2017/msFromTime.js spackled linguist-generated=true /2017/thisBooleanValue.js spackled linguist-generated=true /2017/thisNumberValue.js spackled linguist-generated=true /2017/thisStringValue.js spackled linguist-generated=true /2017/thisTimeValue.js spackled linguist-generated=true /2018/AbstractEqualityComparison.js spackled linguist-generated=true /2018/AdvanceStringIndex.js spackled linguist-generated=true /2018/ArrayCreate.js spackled linguist-generated=true /2018/ArraySetLength.js spackled linguist-generated=true /2018/ArraySpeciesCreate.js spackled linguist-generated=true /2018/Call.js spackled linguist-generated=true /2018/CanonicalNumericIndexString.js spackled linguist-generated=true /2018/Canonicalize.js spackled linguist-generated=true /2018/CharacterRange.js spackled linguist-generated=true /2018/CompletePropertyDescriptor.js spackled linguist-generated=true /2018/CompletionRecord.js spackled linguist-generated=true /2018/CreateDataProperty.js spackled linguist-generated=true /2018/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2018/CreateHTML.js spackled linguist-generated=true /2018/CreateIterResultObject.js spackled linguist-generated=true /2018/CreateListFromArrayLike.js spackled linguist-generated=true /2018/CreateMethodProperty.js spackled linguist-generated=true /2018/DateFromTime.js spackled linguist-generated=true /2018/Day.js spackled linguist-generated=true /2018/DayFromYear.js spackled linguist-generated=true /2018/DayWithinYear.js spackled linguist-generated=true /2018/DaysInYear.js spackled linguist-generated=true /2018/DefinePropertyOrThrow.js spackled linguist-generated=true /2018/DeletePropertyOrThrow.js spackled linguist-generated=true /2018/FromPropertyDescriptor.js spackled linguist-generated=true /2018/Get.js spackled linguist-generated=true /2018/GetGlobalObject.js spackled linguist-generated=true /2018/GetIterator.js spackled linguist-generated=true /2018/GetMethod.js spackled linguist-generated=true /2018/GetOwnPropertyKeys.js spackled linguist-generated=true /2018/GetPrototypeFromConstructor.js spackled linguist-generated=true /2018/GetV.js spackled linguist-generated=true /2018/GetValueFromBuffer.js spackled linguist-generated=true /2018/HasOwnProperty.js spackled linguist-generated=true /2018/HasProperty.js spackled linguist-generated=true /2018/HourFromTime.js spackled linguist-generated=true /2018/InLeapYear.js spackled linguist-generated=true /2018/InstanceofOperator.js spackled linguist-generated=true /2018/IntegerIndexedElementGet.js spackled linguist-generated=true /2018/IntegerIndexedElementSet.js spackled linguist-generated=true /2018/Invoke.js spackled linguist-generated=true /2018/IsAccessorDescriptor.js spackled linguist-generated=true /2018/IsArray.js spackled linguist-generated=true /2018/IsCallable.js spackled linguist-generated=true /2018/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2018/IsConcatSpreadable.js spackled linguist-generated=true /2018/IsConstructor.js spackled linguist-generated=true /2018/IsDataDescriptor.js spackled linguist-generated=true /2018/IsDetachedBuffer.js spackled linguist-generated=true /2018/IsExtensible.js spackled linguist-generated=true /2018/IsGenericDescriptor.js spackled linguist-generated=true /2018/IsInteger.js spackled linguist-generated=true /2018/IsPromise.js spackled linguist-generated=true /2018/IsPropertyKey.js spackled linguist-generated=true /2018/IsRegExp.js spackled linguist-generated=true /2018/IsSharedArrayBuffer.js spackled linguist-generated=true /2018/IsWordChar.js spackled linguist-generated=true /2018/IterableToList.js spackled linguist-generated=true /2018/IteratorClose.js spackled linguist-generated=true /2018/IteratorComplete.js spackled linguist-generated=true /2018/IteratorNext.js spackled linguist-generated=true /2018/IteratorStep.js spackled linguist-generated=true /2018/IteratorValue.js spackled linguist-generated=true /2018/MakeDate.js spackled linguist-generated=true /2018/MakeDay.js spackled linguist-generated=true /2018/MakeTime.js spackled linguist-generated=true /2018/MinFromTime.js spackled linguist-generated=true /2018/MonthFromTime.js spackled linguist-generated=true /2018/NewPromiseCapability.js spackled linguist-generated=true /2018/NormalCompletion.js spackled linguist-generated=true /2018/NumberToRawBytes.js spackled linguist-generated=true /2018/ObjectCreate.js spackled linguist-generated=true /2018/ObjectDefineProperties.js spackled linguist-generated=true /2018/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2018/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2018/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2018/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2018/OrdinaryHasInstance.js spackled linguist-generated=true /2018/OrdinaryHasProperty.js spackled linguist-generated=true /2018/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2018/OrdinaryToPrimitive.js spackled linguist-generated=true /2018/RawBytesToNumber.js spackled linguist-generated=true /2018/RegExpCreate.js spackled linguist-generated=true /2018/RegExpExec.js spackled linguist-generated=true /2018/RequireObjectCoercible.js spackled linguist-generated=true /2018/SameValue.js spackled linguist-generated=true /2018/SameValueNonNumber.js spackled linguist-generated=true /2018/SameValueZero.js spackled linguist-generated=true /2018/SecFromTime.js spackled linguist-generated=true /2018/Set.js spackled linguist-generated=true /2018/SetFunctionName.js spackled linguist-generated=true /2018/SetIntegrityLevel.js spackled linguist-generated=true /2018/SetValueInBuffer.js spackled linguist-generated=true /2018/SpeciesConstructor.js spackled linguist-generated=true /2018/SplitMatch.js spackled linguist-generated=true /2018/StrictEqualityComparison.js spackled linguist-generated=true /2018/StringCreate.js spackled linguist-generated=true /2018/StringGetOwnProperty.js spackled linguist-generated=true /2018/SymbolDescriptiveString.js spackled linguist-generated=true /2018/TestIntegrityLevel.js spackled linguist-generated=true /2018/TimeClip.js spackled linguist-generated=true /2018/TimeFromYear.js spackled linguist-generated=true /2018/TimeWithinDay.js spackled linguist-generated=true /2018/ToBoolean.js spackled linguist-generated=true /2018/ToDateString.js spackled linguist-generated=true /2018/ToIndex.js spackled linguist-generated=true /2018/ToInt16.js spackled linguist-generated=true /2018/ToInt32.js spackled linguist-generated=true /2018/ToInt8.js spackled linguist-generated=true /2018/ToInteger.js spackled linguist-generated=true /2018/ToLength.js spackled linguist-generated=true /2018/ToNumber.js spackled linguist-generated=true /2018/ToObject.js spackled linguist-generated=true /2018/ToPrimitive.js spackled linguist-generated=true /2018/ToPropertyDescriptor.js spackled linguist-generated=true /2018/ToPropertyKey.js spackled linguist-generated=true /2018/ToString.js spackled linguist-generated=true /2018/ToUint16.js spackled linguist-generated=true /2018/ToUint32.js spackled linguist-generated=true /2018/ToUint8.js spackled linguist-generated=true /2018/ToUint8Clamp.js spackled linguist-generated=true /2018/Type.js spackled linguist-generated=true /2018/TypedArrayCreate.js spackled linguist-generated=true /2018/TypedArraySpeciesCreate.js spackled linguist-generated=true /2018/UTF16Decode.js spackled linguist-generated=true /2018/UTF16Encoding.js spackled linguist-generated=true /2018/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2018/ValidateAtomicAccess.js spackled linguist-generated=true /2018/ValidateTypedArray.js spackled linguist-generated=true /2018/WeekDay.js spackled linguist-generated=true /2018/WordCharacters.js spackled linguist-generated=true /2018/YearFromTime.js spackled linguist-generated=true /2018/abs.js spackled linguist-generated=true /2018/floor.js spackled linguist-generated=true /2018/max.js spackled linguist-generated=true /2018/min.js spackled linguist-generated=true /2018/modulo.js spackled linguist-generated=true /2018/msFromTime.js spackled linguist-generated=true /2018/tables/typed-array-objects.js spackled linguist-generated=true /2018/thisBooleanValue.js spackled linguist-generated=true /2018/thisNumberValue.js spackled linguist-generated=true /2018/thisStringValue.js spackled linguist-generated=true /2018/thisTimeValue.js spackled linguist-generated=true /2019/AbstractEqualityComparison.js spackled linguist-generated=true /2019/AbstractRelationalComparison.js spackled linguist-generated=true /2019/AdvanceStringIndex.js spackled linguist-generated=true /2019/ArrayCreate.js spackled linguist-generated=true /2019/ArraySetLength.js spackled linguist-generated=true /2019/ArraySpeciesCreate.js spackled linguist-generated=true /2019/AsyncIteratorClose.js spackled linguist-generated=true /2019/Call.js spackled linguist-generated=true /2019/CanonicalNumericIndexString.js spackled linguist-generated=true /2019/Canonicalize.js spackled linguist-generated=true /2019/CharacterRange.js spackled linguist-generated=true /2019/CompletePropertyDescriptor.js spackled linguist-generated=true /2019/CompletionRecord.js spackled linguist-generated=true /2019/CopyDataProperties.js spackled linguist-generated=true /2019/CreateDataProperty.js spackled linguist-generated=true /2019/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2019/CreateHTML.js spackled linguist-generated=true /2019/CreateIterResultObject.js spackled linguist-generated=true /2019/CreateListFromArrayLike.js spackled linguist-generated=true /2019/CreateMethodProperty.js spackled linguist-generated=true /2019/DateFromTime.js spackled linguist-generated=true /2019/DateString.js spackled linguist-generated=true /2019/Day.js spackled linguist-generated=true /2019/DayFromYear.js spackled linguist-generated=true /2019/DayWithinYear.js spackled linguist-generated=true /2019/DaysInYear.js spackled linguist-generated=true /2019/DefinePropertyOrThrow.js spackled linguist-generated=true /2019/DeletePropertyOrThrow.js spackled linguist-generated=true /2019/DetachArrayBuffer.js spackled linguist-generated=true /2019/EnumerableOwnPropertyNames.js spackled linguist-generated=true /2019/FromPropertyDescriptor.js spackled linguist-generated=true /2019/Get.js spackled linguist-generated=true /2019/GetGlobalObject.js spackled linguist-generated=true /2019/GetIterator.js spackled linguist-generated=true /2019/GetMethod.js spackled linguist-generated=true /2019/GetOwnPropertyKeys.js spackled linguist-generated=true /2019/GetPrototypeFromConstructor.js spackled linguist-generated=true /2019/GetSubstitution.js spackled linguist-generated=true /2019/GetV.js spackled linguist-generated=true /2019/HasOwnProperty.js spackled linguist-generated=true /2019/HasProperty.js spackled linguist-generated=true /2019/HourFromTime.js spackled linguist-generated=true /2019/InLeapYear.js spackled linguist-generated=true /2019/InstanceofOperator.js spackled linguist-generated=true /2019/IntegerIndexedElementGet.js spackled linguist-generated=true /2019/IntegerIndexedElementSet.js spackled linguist-generated=true /2019/InternalizeJSONProperty.js spackled linguist-generated=true /2019/Invoke.js spackled linguist-generated=true /2019/IsAccessorDescriptor.js spackled linguist-generated=true /2019/IsArray.js spackled linguist-generated=true /2019/IsCallable.js spackled linguist-generated=true /2019/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2019/IsConcatSpreadable.js spackled linguist-generated=true /2019/IsConstructor.js spackled linguist-generated=true /2019/IsDataDescriptor.js spackled linguist-generated=true /2019/IsDetachedBuffer.js spackled linguist-generated=true /2019/IsExtensible.js spackled linguist-generated=true /2019/IsGenericDescriptor.js spackled linguist-generated=true /2019/IsInteger.js spackled linguist-generated=true /2019/IsPromise.js spackled linguist-generated=true /2019/IsPropertyKey.js spackled linguist-generated=true /2019/IsRegExp.js spackled linguist-generated=true /2019/IsSharedArrayBuffer.js spackled linguist-generated=true /2019/IsStringPrefix.js spackled linguist-generated=true /2019/IsWordChar.js spackled linguist-generated=true /2019/IterableToList.js spackled linguist-generated=true /2019/IteratorClose.js spackled linguist-generated=true /2019/IteratorComplete.js spackled linguist-generated=true /2019/IteratorNext.js spackled linguist-generated=true /2019/IteratorStep.js spackled linguist-generated=true /2019/IteratorValue.js spackled linguist-generated=true /2019/MakeDate.js spackled linguist-generated=true /2019/MakeDay.js spackled linguist-generated=true /2019/MakeTime.js spackled linguist-generated=true /2019/MinFromTime.js spackled linguist-generated=true /2019/MonthFromTime.js spackled linguist-generated=true /2019/NewPromiseCapability.js spackled linguist-generated=true /2019/NormalCompletion.js spackled linguist-generated=true /2019/NumberToRawBytes.js spackled linguist-generated=true /2019/NumberToString.js spackled linguist-generated=true /2019/ObjectCreate.js spackled linguist-generated=true /2019/ObjectDefineProperties.js spackled linguist-generated=true /2019/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2019/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2019/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2019/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2019/OrdinaryHasInstance.js spackled linguist-generated=true /2019/OrdinaryHasProperty.js spackled linguist-generated=true /2019/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2019/OrdinaryToPrimitive.js spackled linguist-generated=true /2019/PromiseResolve.js spackled linguist-generated=true /2019/RawBytesToNumber.js spackled linguist-generated=true /2019/RegExpCreate.js spackled linguist-generated=true /2019/RegExpExec.js spackled linguist-generated=true /2019/RequireObjectCoercible.js spackled linguist-generated=true /2019/SameValue.js spackled linguist-generated=true /2019/SameValueNonNumber.js spackled linguist-generated=true /2019/SameValueZero.js spackled linguist-generated=true /2019/SecFromTime.js spackled linguist-generated=true /2019/Set.js spackled linguist-generated=true /2019/SetFunctionLength.js spackled linguist-generated=true /2019/SetFunctionName.js spackled linguist-generated=true /2019/SetIntegrityLevel.js spackled linguist-generated=true /2019/SetValueInBuffer.js spackled linguist-generated=true /2019/SpeciesConstructor.js spackled linguist-generated=true /2019/SplitMatch.js spackled linguist-generated=true /2019/StrictEqualityComparison.js spackled linguist-generated=true /2019/StringCreate.js spackled linguist-generated=true /2019/StringGetOwnProperty.js spackled linguist-generated=true /2019/SymbolDescriptiveString.js spackled linguist-generated=true /2019/TestIntegrityLevel.js spackled linguist-generated=true /2019/ThrowCompletion.js spackled linguist-generated=true /2019/TimeClip.js spackled linguist-generated=true /2019/TimeFromYear.js spackled linguist-generated=true /2019/TimeString.js spackled linguist-generated=true /2019/TimeWithinDay.js spackled linguist-generated=true /2019/ToBoolean.js spackled linguist-generated=true /2019/ToDateString.js spackled linguist-generated=true /2019/ToIndex.js spackled linguist-generated=true /2019/ToInt16.js spackled linguist-generated=true /2019/ToInt32.js spackled linguist-generated=true /2019/ToInt8.js spackled linguist-generated=true /2019/ToInteger.js spackled linguist-generated=true /2019/ToLength.js spackled linguist-generated=true /2019/ToNumber.js spackled linguist-generated=true /2019/ToObject.js spackled linguist-generated=true /2019/ToPrimitive.js spackled linguist-generated=true /2019/ToPropertyDescriptor.js spackled linguist-generated=true /2019/ToPropertyKey.js spackled linguist-generated=true /2019/ToString.js spackled linguist-generated=true /2019/ToUint16.js spackled linguist-generated=true /2019/ToUint32.js spackled linguist-generated=true /2019/ToUint8.js spackled linguist-generated=true /2019/ToUint8Clamp.js spackled linguist-generated=true /2019/Type.js spackled linguist-generated=true /2019/TypedArrayCreate.js spackled linguist-generated=true /2019/TypedArraySpeciesCreate.js spackled linguist-generated=true /2019/UTF16Decode.js spackled linguist-generated=true /2019/UTF16Encoding.js spackled linguist-generated=true /2019/UnicodeEscape.js spackled linguist-generated=true /2019/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2019/ValidateAtomicAccess.js spackled linguist-generated=true /2019/ValidateTypedArray.js spackled linguist-generated=true /2019/WeekDay.js spackled linguist-generated=true /2019/WordCharacters.js spackled linguist-generated=true /2019/YearFromTime.js spackled linguist-generated=true /2019/abs.js spackled linguist-generated=true /2019/floor.js spackled linguist-generated=true /2019/max.js spackled linguist-generated=true /2019/min.js spackled linguist-generated=true /2019/modulo.js spackled linguist-generated=true /2019/msFromTime.js spackled linguist-generated=true /2019/thisBooleanValue.js spackled linguist-generated=true /2019/thisNumberValue.js spackled linguist-generated=true /2019/thisStringValue.js spackled linguist-generated=true /2019/thisSymbolValue.js spackled linguist-generated=true /2019/thisTimeValue.js spackled linguist-generated=true /2020/AddEntriesFromIterable.js spackled linguist-generated=true /2020/ArrayCreate.js spackled linguist-generated=true /2020/ArraySetLength.js spackled linguist-generated=true /2020/ArraySpeciesCreate.js spackled linguist-generated=true /2020/AsyncIteratorClose.js spackled linguist-generated=true /2020/Call.js spackled linguist-generated=true /2020/CanonicalNumericIndexString.js spackled linguist-generated=true /2020/Canonicalize.js spackled linguist-generated=true /2020/CharacterRange.js spackled linguist-generated=true /2020/CompletePropertyDescriptor.js spackled linguist-generated=true /2020/CompletionRecord.js spackled linguist-generated=true /2020/CreateDataProperty.js spackled linguist-generated=true /2020/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2020/CreateHTML.js spackled linguist-generated=true /2020/CreateIterResultObject.js spackled linguist-generated=true /2020/CreateMethodProperty.js spackled linguist-generated=true /2020/DateFromTime.js spackled linguist-generated=true /2020/DateString.js spackled linguist-generated=true /2020/Day.js spackled linguist-generated=true /2020/DayFromYear.js spackled linguist-generated=true /2020/DayWithinYear.js spackled linguist-generated=true /2020/DaysInYear.js spackled linguist-generated=true /2020/DefinePropertyOrThrow.js spackled linguist-generated=true /2020/DeletePropertyOrThrow.js spackled linguist-generated=true /2020/DetachArrayBuffer.js spackled linguist-generated=true /2020/EnumerableOwnPropertyNames.js spackled linguist-generated=true /2020/FromPropertyDescriptor.js spackled linguist-generated=true /2020/Get.js spackled linguist-generated=true /2020/GetGlobalObject.js spackled linguist-generated=true /2020/GetMethod.js spackled linguist-generated=true /2020/GetOwnPropertyKeys.js spackled linguist-generated=true /2020/GetPrototypeFromConstructor.js spackled linguist-generated=true /2020/GetSubstitution.js spackled linguist-generated=true /2020/GetV.js spackled linguist-generated=true /2020/HasOwnProperty.js spackled linguist-generated=true /2020/HasProperty.js spackled linguist-generated=true /2020/HourFromTime.js spackled linguist-generated=true /2020/InLeapYear.js spackled linguist-generated=true /2020/InstanceofOperator.js spackled linguist-generated=true /2020/Invoke.js spackled linguist-generated=true /2020/IsAccessorDescriptor.js spackled linguist-generated=true /2020/IsArray.js spackled linguist-generated=true /2020/IsCallable.js spackled linguist-generated=true /2020/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2020/IsConcatSpreadable.js spackled linguist-generated=true /2020/IsConstructor.js spackled linguist-generated=true /2020/IsDataDescriptor.js spackled linguist-generated=true /2020/IsDetachedBuffer.js spackled linguist-generated=true /2020/IsExtensible.js spackled linguist-generated=true /2020/IsGenericDescriptor.js spackled linguist-generated=true /2020/IsInteger.js spackled linguist-generated=true /2020/IsPromise.js spackled linguist-generated=true /2020/IsPropertyKey.js spackled linguist-generated=true /2020/IsRegExp.js spackled linguist-generated=true /2020/IsSharedArrayBuffer.js spackled linguist-generated=true /2020/IsStringPrefix.js spackled linguist-generated=true /2020/IsWordChar.js spackled linguist-generated=true /2020/IteratorClose.js spackled linguist-generated=true /2020/IteratorComplete.js spackled linguist-generated=true /2020/IteratorNext.js spackled linguist-generated=true /2020/IteratorStep.js spackled linguist-generated=true /2020/IteratorValue.js spackled linguist-generated=true /2020/MakeDate.js spackled linguist-generated=true /2020/MakeDay.js spackled linguist-generated=true /2020/MakeTime.js spackled linguist-generated=true /2020/MinFromTime.js spackled linguist-generated=true /2020/MonthFromTime.js spackled linguist-generated=true /2020/NewPromiseCapability.js spackled linguist-generated=true /2020/NormalCompletion.js spackled linguist-generated=true /2020/ObjectDefineProperties.js spackled linguist-generated=true /2020/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2020/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2020/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2020/OrdinaryHasInstance.js spackled linguist-generated=true /2020/OrdinaryHasProperty.js spackled linguist-generated=true /2020/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2020/OrdinaryToPrimitive.js spackled linguist-generated=true /2020/PromiseResolve.js spackled linguist-generated=true /2020/RegExpCreate.js spackled linguist-generated=true /2020/RegExpExec.js spackled linguist-generated=true /2020/RequireObjectCoercible.js spackled linguist-generated=true /2020/SameValue.js spackled linguist-generated=true /2020/SameValueZero.js spackled linguist-generated=true /2020/SecFromTime.js spackled linguist-generated=true /2020/Set.js spackled linguist-generated=true /2020/SetFunctionName.js spackled linguist-generated=true /2020/SetIntegrityLevel.js spackled linguist-generated=true /2020/SpeciesConstructor.js spackled linguist-generated=true /2020/SplitMatch.js spackled linguist-generated=true /2020/StrictEqualityComparison.js spackled linguist-generated=true /2020/StringCreate.js spackled linguist-generated=true /2020/StringGetOwnProperty.js spackled linguist-generated=true /2020/SymbolDescriptiveString.js spackled linguist-generated=true /2020/TestIntegrityLevel.js spackled linguist-generated=true /2020/ThrowCompletion.js spackled linguist-generated=true /2020/TimeClip.js spackled linguist-generated=true /2020/TimeFromYear.js spackled linguist-generated=true /2020/TimeString.js spackled linguist-generated=true /2020/TimeWithinDay.js spackled linguist-generated=true /2020/ToBoolean.js spackled linguist-generated=true /2020/ToDateString.js spackled linguist-generated=true /2020/ToInt16.js spackled linguist-generated=true /2020/ToInt32.js spackled linguist-generated=true /2020/ToInt8.js spackled linguist-generated=true /2020/ToLength.js spackled linguist-generated=true /2020/ToObject.js spackled linguist-generated=true /2020/ToPrimitive.js spackled linguist-generated=true /2020/ToPropertyDescriptor.js spackled linguist-generated=true /2020/ToPropertyKey.js spackled linguist-generated=true /2020/ToString.js spackled linguist-generated=true /2020/ToUint16.js spackled linguist-generated=true /2020/ToUint32.js spackled linguist-generated=true /2020/ToUint8.js spackled linguist-generated=true /2020/ToUint8Clamp.js spackled linguist-generated=true /2020/TrimString.js spackled linguist-generated=true /2020/TypedArrayCreate.js spackled linguist-generated=true /2020/TypedArraySpeciesCreate.js spackled linguist-generated=true /2020/UTF16Encoding.js spackled linguist-generated=true /2020/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2020/ValidateAtomicAccess.js spackled linguist-generated=true /2020/ValidateTypedArray.js spackled linguist-generated=true /2020/WeekDay.js spackled linguist-generated=true /2020/WordCharacters.js spackled linguist-generated=true /2020/YearFromTime.js spackled linguist-generated=true /2020/max.js spackled linguist-generated=true /2020/min.js spackled linguist-generated=true /2020/modulo.js spackled linguist-generated=true /2020/msFromTime.js spackled linguist-generated=true /2020/thisBooleanValue.js spackled linguist-generated=true /2020/thisNumberValue.js spackled linguist-generated=true /2020/thisStringValue.js spackled linguist-generated=true /2020/thisSymbolValue.js spackled linguist-generated=true /2020/thisTimeValue.js spackled linguist-generated=true /2021/AbstractEqualityComparison.js spackled linguist-generated=true /2021/AbstractRelationalComparison.js spackled linguist-generated=true /2021/AddEntriesFromIterable.js spackled linguist-generated=true /2021/ArraySetLength.js spackled linguist-generated=true /2021/BigInt/add.js spackled linguist-generated=true /2021/BigInt/bitwiseAND.js spackled linguist-generated=true /2021/BigInt/bitwiseNOT.js spackled linguist-generated=true /2021/BigInt/bitwiseOR.js spackled linguist-generated=true /2021/BigInt/bitwiseXOR.js spackled linguist-generated=true /2021/BigInt/divide.js spackled linguist-generated=true /2021/BigInt/equal.js spackled linguist-generated=true /2021/BigInt/exponentiate.js spackled linguist-generated=true /2021/BigInt/index.js spackled linguist-generated=true /2021/BigInt/leftShift.js spackled linguist-generated=true /2021/BigInt/lessThan.js spackled linguist-generated=true /2021/BigInt/multiply.js spackled linguist-generated=true /2021/BigInt/remainder.js spackled linguist-generated=true /2021/BigInt/sameValue.js spackled linguist-generated=true /2021/BigInt/sameValueZero.js spackled linguist-generated=true /2021/BigInt/signedRightShift.js spackled linguist-generated=true /2021/BigInt/subtract.js spackled linguist-generated=true /2021/BigInt/toString.js spackled linguist-generated=true /2021/BigInt/unaryMinus.js spackled linguist-generated=true /2021/BigInt/unsignedRightShift.js spackled linguist-generated=true /2021/BigIntBitwiseOp.js spackled linguist-generated=true /2021/BinaryAnd.js spackled linguist-generated=true /2021/BinaryOr.js spackled linguist-generated=true /2021/BinaryXor.js spackled linguist-generated=true /2021/Call.js spackled linguist-generated=true /2021/CanonicalNumericIndexString.js spackled linguist-generated=true /2021/Canonicalize.js spackled linguist-generated=true /2021/CharacterRange.js spackled linguist-generated=true /2021/CompletePropertyDescriptor.js spackled linguist-generated=true /2021/CompletionRecord.js spackled linguist-generated=true /2021/CreateAsyncFromSyncIterator.js spackled linguist-generated=true /2021/CreateDataProperty.js spackled linguist-generated=true /2021/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2021/CreateHTML.js spackled linguist-generated=true /2021/CreateIterResultObject.js spackled linguist-generated=true /2021/CreateMethodProperty.js spackled linguist-generated=true /2021/CreateRegExpStringIterator.js spackled linguist-generated=true /2021/DateFromTime.js spackled linguist-generated=true /2021/DateString.js spackled linguist-generated=true /2021/Day.js spackled linguist-generated=true /2021/DayFromYear.js spackled linguist-generated=true /2021/DayWithinYear.js spackled linguist-generated=true /2021/DaysInYear.js spackled linguist-generated=true /2021/DefinePropertyOrThrow.js spackled linguist-generated=true /2021/DeletePropertyOrThrow.js spackled linguist-generated=true /2021/DetachArrayBuffer.js spackled linguist-generated=true /2021/EnumerableOwnPropertyNames.js spackled linguist-generated=true /2021/FlattenIntoArray.js spackled linguist-generated=true /2021/FromPropertyDescriptor.js spackled linguist-generated=true /2021/Get.js spackled linguist-generated=true /2021/GetGlobalObject.js spackled linguist-generated=true /2021/GetIterator.js spackled linguist-generated=true /2021/GetMethod.js spackled linguist-generated=true /2021/GetOwnPropertyKeys.js spackled linguist-generated=true /2021/GetPrototypeFromConstructor.js spackled linguist-generated=true /2021/GetV.js spackled linguist-generated=true /2021/GetValueFromBuffer.js spackled linguist-generated=true /2021/HasOwnProperty.js spackled linguist-generated=true /2021/HasProperty.js spackled linguist-generated=true /2021/HourFromTime.js spackled linguist-generated=true /2021/InLeapYear.js spackled linguist-generated=true /2021/InstanceofOperator.js spackled linguist-generated=true /2021/InternalizeJSONProperty.js spackled linguist-generated=true /2021/Invoke.js spackled linguist-generated=true /2021/IsAccessorDescriptor.js spackled linguist-generated=true /2021/IsArray.js spackled linguist-generated=true /2021/IsBigIntElementType.js spackled linguist-generated=true /2021/IsCallable.js spackled linguist-generated=true /2021/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2021/IsConcatSpreadable.js spackled linguist-generated=true /2021/IsConstructor.js spackled linguist-generated=true /2021/IsDataDescriptor.js spackled linguist-generated=true /2021/IsDetachedBuffer.js spackled linguist-generated=true /2021/IsExtensible.js spackled linguist-generated=true /2021/IsGenericDescriptor.js spackled linguist-generated=true /2021/IsNoTearConfiguration.js spackled linguist-generated=true /2021/IsPromise.js spackled linguist-generated=true /2021/IsPropertyKey.js spackled linguist-generated=true /2021/IsRegExp.js spackled linguist-generated=true /2021/IsSharedArrayBuffer.js spackled linguist-generated=true /2021/IsUnclampedIntegerElementType.js spackled linguist-generated=true /2021/IsUnsignedElementType.js spackled linguist-generated=true /2021/IteratorClose.js spackled linguist-generated=true /2021/IteratorComplete.js spackled linguist-generated=true /2021/IteratorNext.js spackled linguist-generated=true /2021/IteratorStep.js spackled linguist-generated=true /2021/IteratorValue.js spackled linguist-generated=true /2021/LengthOfArrayLike.js spackled linguist-generated=true /2021/MakeDate.js spackled linguist-generated=true /2021/MinFromTime.js spackled linguist-generated=true /2021/MonthFromTime.js spackled linguist-generated=true /2021/NewPromiseCapability.js spackled linguist-generated=true /2021/NormalCompletion.js spackled linguist-generated=true /2021/Number/bitwiseAND.js spackled linguist-generated=true /2021/Number/bitwiseNOT.js spackled linguist-generated=true /2021/Number/bitwiseOR.js spackled linguist-generated=true /2021/Number/bitwiseXOR.js spackled linguist-generated=true /2021/Number/divide.js spackled linguist-generated=true /2021/Number/equal.js spackled linguist-generated=true /2021/Number/exponentiate.js spackled linguist-generated=true /2021/Number/index.js spackled linguist-generated=true /2021/Number/lessThan.js spackled linguist-generated=true /2021/Number/multiply.js spackled linguist-generated=true /2021/Number/sameValue.js spackled linguist-generated=true /2021/Number/sameValueZero.js spackled linguist-generated=true /2021/Number/toString.js spackled linguist-generated=true /2021/Number/unaryMinus.js spackled linguist-generated=true /2021/NumberBitwiseOp.js spackled linguist-generated=true /2021/NumericToRawBytes.js spackled linguist-generated=true /2021/ObjectDefineProperties.js spackled linguist-generated=true /2021/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2021/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2021/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2021/OrdinaryHasInstance.js spackled linguist-generated=true /2021/OrdinaryHasProperty.js spackled linguist-generated=true /2021/OrdinaryObjectCreate.js spackled linguist-generated=true /2021/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2021/OrdinaryToPrimitive.js spackled linguist-generated=true /2021/PromiseResolve.js spackled linguist-generated=true /2021/RawBytesToNumeric.js spackled linguist-generated=true /2021/RegExpCreate.js spackled linguist-generated=true /2021/RegExpExec.js spackled linguist-generated=true /2021/RequireObjectCoercible.js spackled linguist-generated=true /2021/SameValue.js spackled linguist-generated=true /2021/SameValueNonNumeric.js spackled linguist-generated=true /2021/SameValueZero.js spackled linguist-generated=true /2021/SecFromTime.js spackled linguist-generated=true /2021/Set.js spackled linguist-generated=true /2021/SetFunctionName.js spackled linguist-generated=true /2021/SetIntegrityLevel.js spackled linguist-generated=true /2021/SpeciesConstructor.js spackled linguist-generated=true /2021/StrictEqualityComparison.js spackled linguist-generated=true /2021/StringCreate.js spackled linguist-generated=true /2021/StringPad.js spackled linguist-generated=true /2021/StringToBigInt.js spackled linguist-generated=true /2021/SymbolDescriptiveString.js spackled linguist-generated=true /2021/TestIntegrityLevel.js spackled linguist-generated=true /2021/ThrowCompletion.js spackled linguist-generated=true /2021/TimeClip.js spackled linguist-generated=true /2021/TimeFromYear.js spackled linguist-generated=true /2021/TimeString.js spackled linguist-generated=true /2021/TimeWithinDay.js spackled linguist-generated=true /2021/ToBigInt.js spackled linguist-generated=true /2021/ToBigInt64.js spackled linguist-generated=true /2021/ToBigUint64.js spackled linguist-generated=true /2021/ToBoolean.js spackled linguist-generated=true /2021/ToDateString.js spackled linguist-generated=true /2021/ToInt16.js spackled linguist-generated=true /2021/ToInt32.js spackled linguist-generated=true /2021/ToInt8.js spackled linguist-generated=true /2021/ToNumeric.js spackled linguist-generated=true /2021/ToObject.js spackled linguist-generated=true /2021/ToPrimitive.js spackled linguist-generated=true /2021/ToPropertyDescriptor.js spackled linguist-generated=true /2021/ToPropertyKey.js spackled linguist-generated=true /2021/ToString.js spackled linguist-generated=true /2021/ToUint16.js spackled linguist-generated=true /2021/ToUint32.js spackled linguist-generated=true /2021/ToUint8.js spackled linguist-generated=true /2021/ToUint8Clamp.js spackled linguist-generated=true /2021/TrimString.js spackled linguist-generated=true /2021/Type.js spackled linguist-generated=true /2021/TypedArrayCreate.js spackled linguist-generated=true /2021/TypedArraySpeciesCreate.js spackled linguist-generated=true /2021/UnicodeEscape.js spackled linguist-generated=true /2021/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2021/ValidateTypedArray.js spackled linguist-generated=true /2021/WeekDay.js spackled linguist-generated=true /2021/WordCharacters.js spackled linguist-generated=true /2021/abs.js spackled linguist-generated=true /2021/floor.js spackled linguist-generated=true /2021/max.js spackled linguist-generated=true /2021/min.js spackled linguist-generated=true /2021/modulo.js spackled linguist-generated=true /2021/msFromTime.js spackled linguist-generated=true /2021/tables/typed-array-objects.js spackled linguist-generated=true /2021/thisBigIntValue.js spackled linguist-generated=true /2021/thisBooleanValue.js spackled linguist-generated=true /2021/thisNumberValue.js spackled linguist-generated=true /2021/thisStringValue.js spackled linguist-generated=true /2021/thisTimeValue.js spackled linguist-generated=true /2022/AddEntriesFromIterable.js spackled linguist-generated=true /2022/AddToKeptObjects.js spackled linguist-generated=true /2022/AdvanceStringIndex.js spackled linguist-generated=true /2022/ApplyStringOrNumericBinaryOperator.js spackled linguist-generated=true /2022/ArrayCreate.js spackled linguist-generated=true /2022/ArraySetLength.js spackled linguist-generated=true /2022/ArraySpeciesCreate.js spackled linguist-generated=true /2022/AsyncIteratorClose.js spackled linguist-generated=true /2022/BigInt/add.js spackled linguist-generated=true /2022/BigInt/bitwiseAND.js spackled linguist-generated=true /2022/BigInt/bitwiseNOT.js spackled linguist-generated=true /2022/BigInt/bitwiseOR.js spackled linguist-generated=true /2022/BigInt/bitwiseXOR.js spackled linguist-generated=true /2022/BigInt/divide.js spackled linguist-generated=true /2022/BigInt/equal.js spackled linguist-generated=true /2022/BigInt/exponentiate.js spackled linguist-generated=true /2022/BigInt/index.js spackled linguist-generated=true /2022/BigInt/leftShift.js spackled linguist-generated=true /2022/BigInt/lessThan.js spackled linguist-generated=true /2022/BigInt/multiply.js spackled linguist-generated=true /2022/BigInt/remainder.js spackled linguist-generated=true /2022/BigInt/sameValue.js spackled linguist-generated=true /2022/BigInt/sameValueZero.js spackled linguist-generated=true /2022/BigInt/signedRightShift.js spackled linguist-generated=true /2022/BigInt/subtract.js spackled linguist-generated=true /2022/BigInt/toString.js spackled linguist-generated=true /2022/BigInt/unaryMinus.js spackled linguist-generated=true /2022/BigInt/unsignedRightShift.js spackled linguist-generated=true /2022/BigIntBitwiseOp.js spackled linguist-generated=true /2022/BinaryAnd.js spackled linguist-generated=true /2022/BinaryOr.js spackled linguist-generated=true /2022/BinaryXor.js spackled linguist-generated=true /2022/ByteListBitwiseOp.js spackled linguist-generated=true /2022/ByteListEqual.js spackled linguist-generated=true /2022/Call.js spackled linguist-generated=true /2022/CanonicalNumericIndexString.js spackled linguist-generated=true /2022/Canonicalize.js spackled linguist-generated=true /2022/CharacterRange.js spackled linguist-generated=true /2022/ClearKeptObjects.js spackled linguist-generated=true /2022/CloneArrayBuffer.js spackled linguist-generated=true /2022/CodePointAt.js spackled linguist-generated=true /2022/CodePointsToString.js spackled linguist-generated=true /2022/CompletePropertyDescriptor.js spackled linguist-generated=true /2022/CompletionRecord.js spackled linguist-generated=true /2022/CopyDataProperties.js spackled linguist-generated=true /2022/CreateAsyncFromSyncIterator.js spackled linguist-generated=true /2022/CreateDataProperty.js spackled linguist-generated=true /2022/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2022/CreateHTML.js spackled linguist-generated=true /2022/CreateIterResultObject.js spackled linguist-generated=true /2022/CreateListFromArrayLike.js spackled linguist-generated=true /2022/CreateMethodProperty.js spackled linguist-generated=true /2022/CreateRegExpStringIterator.js spackled linguist-generated=true /2022/DateFromTime.js spackled linguist-generated=true /2022/DateString.js spackled linguist-generated=true /2022/Day.js spackled linguist-generated=true /2022/DayFromYear.js spackled linguist-generated=true /2022/DayWithinYear.js spackled linguist-generated=true /2022/DaysInYear.js spackled linguist-generated=true /2022/DefinePropertyOrThrow.js spackled linguist-generated=true /2022/DeletePropertyOrThrow.js spackled linguist-generated=true /2022/DetachArrayBuffer.js spackled linguist-generated=true /2022/EnumerableOwnPropertyNames.js spackled linguist-generated=true /2022/FlattenIntoArray.js spackled linguist-generated=true /2022/FromPropertyDescriptor.js spackled linguist-generated=true /2022/Get.js spackled linguist-generated=true /2022/GetGlobalObject.js spackled linguist-generated=true /2022/GetIterator.js spackled linguist-generated=true /2022/GetMethod.js spackled linguist-generated=true /2022/GetOwnPropertyKeys.js spackled linguist-generated=true /2022/GetPromiseResolve.js spackled linguist-generated=true /2022/GetPrototypeFromConstructor.js spackled linguist-generated=true /2022/GetV.js spackled linguist-generated=true /2022/GetValueFromBuffer.js spackled linguist-generated=true /2022/HasOwnProperty.js spackled linguist-generated=true /2022/HasProperty.js spackled linguist-generated=true /2022/HourFromTime.js spackled linguist-generated=true /2022/InLeapYear.js spackled linguist-generated=true /2022/InstanceofOperator.js spackled linguist-generated=true /2022/InternalizeJSONProperty.js spackled linguist-generated=true /2022/Invoke.js spackled linguist-generated=true /2022/IsAccessorDescriptor.js spackled linguist-generated=true /2022/IsArray.js spackled linguist-generated=true /2022/IsBigIntElementType.js spackled linguist-generated=true /2022/IsCallable.js spackled linguist-generated=true /2022/IsConcatSpreadable.js spackled linguist-generated=true /2022/IsConstructor.js spackled linguist-generated=true /2022/IsDataDescriptor.js spackled linguist-generated=true /2022/IsDetachedBuffer.js spackled linguist-generated=true /2022/IsExtensible.js spackled linguist-generated=true /2022/IsGenericDescriptor.js spackled linguist-generated=true /2022/IsIntegralNumber.js spackled linguist-generated=true /2022/IsNoTearConfiguration.js spackled linguist-generated=true /2022/IsPromise.js spackled linguist-generated=true /2022/IsPropertyKey.js spackled linguist-generated=true /2022/IsRegExp.js spackled linguist-generated=true /2022/IsSharedArrayBuffer.js spackled linguist-generated=true /2022/IsUnclampedIntegerElementType.js spackled linguist-generated=true /2022/IsUnsignedElementType.js spackled linguist-generated=true /2022/IsValidIntegerIndex.js spackled linguist-generated=true /2022/IsWordChar.js spackled linguist-generated=true /2022/IterableToList.js spackled linguist-generated=true /2022/IteratorClose.js spackled linguist-generated=true /2022/IteratorComplete.js spackled linguist-generated=true /2022/IteratorNext.js spackled linguist-generated=true /2022/IteratorStep.js spackled linguist-generated=true /2022/IteratorValue.js spackled linguist-generated=true /2022/LengthOfArrayLike.js spackled linguist-generated=true /2022/MakeDate.js spackled linguist-generated=true /2022/MakeDay.js spackled linguist-generated=true /2022/MakeTime.js spackled linguist-generated=true /2022/MinFromTime.js spackled linguist-generated=true /2022/MonthFromTime.js spackled linguist-generated=true /2022/NewPromiseCapability.js spackled linguist-generated=true /2022/NormalCompletion.js spackled linguist-generated=true /2022/Number/add.js spackled linguist-generated=true /2022/Number/bitwiseAND.js spackled linguist-generated=true /2022/Number/bitwiseNOT.js spackled linguist-generated=true /2022/Number/bitwiseOR.js spackled linguist-generated=true /2022/Number/bitwiseXOR.js spackled linguist-generated=true /2022/Number/divide.js spackled linguist-generated=true /2022/Number/equal.js spackled linguist-generated=true /2022/Number/exponentiate.js spackled linguist-generated=true /2022/Number/index.js spackled linguist-generated=true /2022/Number/leftShift.js spackled linguist-generated=true /2022/Number/lessThan.js spackled linguist-generated=true /2022/Number/multiply.js spackled linguist-generated=true /2022/Number/remainder.js spackled linguist-generated=true /2022/Number/sameValue.js spackled linguist-generated=true /2022/Number/sameValueZero.js spackled linguist-generated=true /2022/Number/signedRightShift.js spackled linguist-generated=true /2022/Number/subtract.js spackled linguist-generated=true /2022/Number/toString.js spackled linguist-generated=true /2022/Number/unaryMinus.js spackled linguist-generated=true /2022/Number/unsignedRightShift.js spackled linguist-generated=true /2022/NumberBitwiseOp.js spackled linguist-generated=true /2022/NumberToBigInt.js spackled linguist-generated=true /2022/NumericToRawBytes.js spackled linguist-generated=true /2022/ObjectDefineProperties.js spackled linguist-generated=true /2022/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2022/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2022/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2022/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2022/OrdinaryHasInstance.js spackled linguist-generated=true /2022/OrdinaryHasProperty.js spackled linguist-generated=true /2022/OrdinaryObjectCreate.js spackled linguist-generated=true /2022/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2022/OrdinaryToPrimitive.js spackled linguist-generated=true /2022/PromiseResolve.js spackled linguist-generated=true /2022/QuoteJSONString.js spackled linguist-generated=true /2022/RawBytesToNumeric.js spackled linguist-generated=true /2022/RegExpCreate.js spackled linguist-generated=true /2022/RegExpExec.js spackled linguist-generated=true /2022/RequireObjectCoercible.js spackled linguist-generated=true /2022/SameValue.js spackled linguist-generated=true /2022/SameValueNonNumeric.js spackled linguist-generated=true /2022/SameValueZero.js spackled linguist-generated=true /2022/SecFromTime.js spackled linguist-generated=true /2022/Set.js spackled linguist-generated=true /2022/SetFunctionLength.js spackled linguist-generated=true /2022/SetFunctionName.js spackled linguist-generated=true /2022/SetIntegrityLevel.js spackled linguist-generated=true /2022/SetValueInBuffer.js spackled linguist-generated=true /2022/SpeciesConstructor.js spackled linguist-generated=true /2022/StringCreate.js spackled linguist-generated=true /2022/StringGetOwnProperty.js spackled linguist-generated=true /2022/StringIndexOf.js spackled linguist-generated=true /2022/StringPad.js spackled linguist-generated=true /2022/StringToCodePoints.js spackled linguist-generated=true /2022/SymbolDescriptiveString.js spackled linguist-generated=true /2022/TestIntegrityLevel.js spackled linguist-generated=true /2022/ThrowCompletion.js spackled linguist-generated=true /2022/TimeClip.js spackled linguist-generated=true /2022/TimeFromYear.js spackled linguist-generated=true /2022/TimeWithinDay.js spackled linguist-generated=true /2022/ToBigInt64.js spackled linguist-generated=true /2022/ToBigUint64.js spackled linguist-generated=true /2022/ToBoolean.js spackled linguist-generated=true /2022/ToDateString.js spackled linguist-generated=true /2022/ToIndex.js spackled linguist-generated=true /2022/ToInt16.js spackled linguist-generated=true /2022/ToInt32.js spackled linguist-generated=true /2022/ToInt8.js spackled linguist-generated=true /2022/ToIntegerOrInfinity.js spackled linguist-generated=true /2022/ToLength.js spackled linguist-generated=true /2022/ToNumeric.js spackled linguist-generated=true /2022/ToObject.js spackled linguist-generated=true /2022/ToPrimitive.js spackled linguist-generated=true /2022/ToPropertyDescriptor.js spackled linguist-generated=true /2022/ToPropertyKey.js spackled linguist-generated=true /2022/ToString.js spackled linguist-generated=true /2022/ToUint16.js spackled linguist-generated=true /2022/ToUint32.js spackled linguist-generated=true /2022/ToUint8.js spackled linguist-generated=true /2022/ToUint8Clamp.js spackled linguist-generated=true /2022/TrimString.js spackled linguist-generated=true /2022/Type.js spackled linguist-generated=true /2022/TypedArrayCreate.js spackled linguist-generated=true /2022/TypedArraySpeciesCreate.js spackled linguist-generated=true /2022/UTF16EncodeCodePoint.js spackled linguist-generated=true /2022/UTF16SurrogatePairToCodePoint.js spackled linguist-generated=true /2022/UnicodeEscape.js spackled linguist-generated=true /2022/WeakRefDeref.js spackled linguist-generated=true /2022/WeekDay.js spackled linguist-generated=true /2022/WordCharacters.js spackled linguist-generated=true /2022/YearFromTime.js spackled linguist-generated=true /2022/abs.js spackled linguist-generated=true /2022/clamp.js spackled linguist-generated=true /2022/floor.js spackled linguist-generated=true /2022/max.js spackled linguist-generated=true /2022/min.js spackled linguist-generated=true /2022/modulo.js spackled linguist-generated=true /2022/msFromTime.js spackled linguist-generated=true /2022/substring.js spackled linguist-generated=true /2022/tables/typed-array-objects.js spackled linguist-generated=true /2022/thisBigIntValue.js spackled linguist-generated=true /2022/thisBooleanValue.js spackled linguist-generated=true /2022/thisNumberValue.js spackled linguist-generated=true /2022/thisStringValue.js spackled linguist-generated=true /2022/thisSymbolValue.js spackled linguist-generated=true /2022/thisTimeValue.js spackled linguist-generated=true /2023/AddToKeptObjects.js spackled linguist-generated=true /2023/AdvanceStringIndex.js spackled linguist-generated=true /2023/ApplyStringOrNumericBinaryOperator.js spackled linguist-generated=true /2023/ArrayCreate.js spackled linguist-generated=true /2023/ArraySetLength.js spackled linguist-generated=true /2023/ArraySpeciesCreate.js spackled linguist-generated=true /2023/AsyncFromSyncIteratorContinuation.js spackled linguist-generated=true /2023/AsyncIteratorClose.js spackled linguist-generated=true /2023/BigInt/add.js spackled linguist-generated=true /2023/BigInt/bitwiseAND.js spackled linguist-generated=true /2023/BigInt/bitwiseNOT.js spackled linguist-generated=true /2023/BigInt/bitwiseOR.js spackled linguist-generated=true /2023/BigInt/bitwiseXOR.js spackled linguist-generated=true /2023/BigInt/divide.js spackled linguist-generated=true /2023/BigInt/equal.js spackled linguist-generated=true /2023/BigInt/exponentiate.js spackled linguist-generated=true /2023/BigInt/leftShift.js spackled linguist-generated=true /2023/BigInt/lessThan.js spackled linguist-generated=true /2023/BigInt/multiply.js spackled linguist-generated=true /2023/BigInt/remainder.js spackled linguist-generated=true /2023/BigInt/signedRightShift.js spackled linguist-generated=true /2023/BigInt/subtract.js spackled linguist-generated=true /2023/BigInt/unaryMinus.js spackled linguist-generated=true /2023/BigInt/unsignedRightShift.js spackled linguist-generated=true /2023/BigIntBitwiseOp.js spackled linguist-generated=true /2023/BinaryAnd.js spackled linguist-generated=true /2023/BinaryOr.js spackled linguist-generated=true /2023/BinaryXor.js spackled linguist-generated=true /2023/ByteListBitwiseOp.js spackled linguist-generated=true /2023/ByteListEqual.js spackled linguist-generated=true /2023/Call.js spackled linguist-generated=true /2023/CanonicalNumericIndexString.js spackled linguist-generated=true /2023/CharacterRange.js spackled linguist-generated=true /2023/ClearKeptObjects.js spackled linguist-generated=true /2023/CloneArrayBuffer.js spackled linguist-generated=true /2023/CodePointAt.js spackled linguist-generated=true /2023/CodePointsToString.js spackled linguist-generated=true /2023/CompletePropertyDescriptor.js spackled linguist-generated=true /2023/CompletionRecord.js spackled linguist-generated=true /2023/CopyDataProperties.js spackled linguist-generated=true /2023/CreateDataProperty.js spackled linguist-generated=true /2023/CreateHTML.js spackled linguist-generated=true /2023/CreateIterResultObject.js spackled linguist-generated=true /2023/CreateListFromArrayLike.js spackled linguist-generated=true /2023/CreateMethodProperty.js spackled linguist-generated=true /2023/CreateNonEnumerableDataPropertyOrThrow.js spackled linguist-generated=true /2023/CreateRegExpStringIterator.js spackled linguist-generated=true /2023/DateFromTime.js spackled linguist-generated=true /2023/DateString.js spackled linguist-generated=true /2023/Day.js spackled linguist-generated=true /2023/DayFromYear.js spackled linguist-generated=true /2023/DayWithinYear.js spackled linguist-generated=true /2023/DaysInYear.js spackled linguist-generated=true /2023/DefineMethodProperty.js spackled linguist-generated=true /2023/DefinePropertyOrThrow.js spackled linguist-generated=true /2023/DeletePropertyOrThrow.js spackled linguist-generated=true /2023/DetachArrayBuffer.js spackled linguist-generated=true /2023/FlattenIntoArray.js spackled linguist-generated=true /2023/FromPropertyDescriptor.js spackled linguist-generated=true /2023/Get.js spackled linguist-generated=true /2023/GetGlobalObject.js spackled linguist-generated=true /2023/GetMatchIndexPair.js spackled linguist-generated=true /2023/GetMatchString.js spackled linguist-generated=true /2023/GetMethod.js spackled linguist-generated=true /2023/GetOwnPropertyKeys.js spackled linguist-generated=true /2023/GetPromiseResolve.js spackled linguist-generated=true /2023/GetPrototypeFromConstructor.js spackled linguist-generated=true /2023/GetStringIndex.js spackled linguist-generated=true /2023/GetV.js spackled linguist-generated=true /2023/GetValueFromBuffer.js spackled linguist-generated=true /2023/HasOwnProperty.js spackled linguist-generated=true /2023/HasProperty.js spackled linguist-generated=true /2023/HourFromTime.js spackled linguist-generated=true /2023/InLeapYear.js spackled linguist-generated=true /2023/InstallErrorCause.js spackled linguist-generated=true /2023/InstanceofOperator.js spackled linguist-generated=true /2023/IntegerIndexedElementGet.js spackled linguist-generated=true /2023/IntegerIndexedElementSet.js spackled linguist-generated=true /2023/Invoke.js spackled linguist-generated=true /2023/IsAccessorDescriptor.js spackled linguist-generated=true /2023/IsArray.js spackled linguist-generated=true /2023/IsBigIntElementType.js spackled linguist-generated=true /2023/IsCallable.js spackled linguist-generated=true /2023/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2023/IsConcatSpreadable.js spackled linguist-generated=true /2023/IsConstructor.js spackled linguist-generated=true /2023/IsDataDescriptor.js spackled linguist-generated=true /2023/IsDetachedBuffer.js spackled linguist-generated=true /2023/IsExtensible.js spackled linguist-generated=true /2023/IsGenericDescriptor.js spackled linguist-generated=true /2023/IsLooselyEqual.js spackled linguist-generated=true /2023/IsNoTearConfiguration.js spackled linguist-generated=true /2023/IsPromise.js spackled linguist-generated=true /2023/IsPropertyKey.js spackled linguist-generated=true /2023/IsRegExp.js spackled linguist-generated=true /2023/IsSharedArrayBuffer.js spackled linguist-generated=true /2023/IsUnclampedIntegerElementType.js spackled linguist-generated=true /2023/IsUnsignedElementType.js spackled linguist-generated=true /2023/IsValidIntegerIndex.js spackled linguist-generated=true /2023/IteratorComplete.js spackled linguist-generated=true /2023/IteratorValue.js spackled linguist-generated=true /2023/LengthOfArrayLike.js spackled linguist-generated=true /2023/MakeDate.js spackled linguist-generated=true /2023/MakeDay.js spackled linguist-generated=true /2023/MakeMatchIndicesIndexPairArray.js spackled linguist-generated=true /2023/MakeTime.js spackled linguist-generated=true /2023/MinFromTime.js spackled linguist-generated=true /2023/MonthFromTime.js spackled linguist-generated=true /2023/NewPromiseCapability.js spackled linguist-generated=true /2023/NormalCompletion.js spackled linguist-generated=true /2023/Number/add.js spackled linguist-generated=true /2023/Number/bitwiseAND.js spackled linguist-generated=true /2023/Number/bitwiseNOT.js spackled linguist-generated=true /2023/Number/bitwiseOR.js spackled linguist-generated=true /2023/Number/bitwiseXOR.js spackled linguist-generated=true /2023/Number/divide.js spackled linguist-generated=true /2023/Number/equal.js spackled linguist-generated=true /2023/Number/exponentiate.js spackled linguist-generated=true /2023/Number/index.js spackled linguist-generated=true /2023/Number/leftShift.js spackled linguist-generated=true /2023/Number/lessThan.js spackled linguist-generated=true /2023/Number/multiply.js spackled linguist-generated=true /2023/Number/sameValue.js spackled linguist-generated=true /2023/Number/sameValueZero.js spackled linguist-generated=true /2023/Number/signedRightShift.js spackled linguist-generated=true /2023/Number/subtract.js spackled linguist-generated=true /2023/Number/unaryMinus.js spackled linguist-generated=true /2023/Number/unsignedRightShift.js spackled linguist-generated=true /2023/NumberBitwiseOp.js spackled linguist-generated=true /2023/NumberToBigInt.js spackled linguist-generated=true /2023/NumericToRawBytes.js spackled linguist-generated=true /2023/ObjectDefineProperties.js spackled linguist-generated=true /2023/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2023/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2023/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2023/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2023/OrdinaryHasInstance.js spackled linguist-generated=true /2023/OrdinaryHasProperty.js spackled linguist-generated=true /2023/OrdinaryObjectCreate.js spackled linguist-generated=true /2023/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2023/OrdinaryToPrimitive.js spackled linguist-generated=true /2023/PromiseResolve.js spackled linguist-generated=true /2023/QuoteJSONString.js spackled linguist-generated=true /2023/RawBytesToNumeric.js spackled linguist-generated=true /2023/RegExpCreate.js spackled linguist-generated=true /2023/RegExpExec.js spackled linguist-generated=true /2023/RegExpHasFlag.js spackled linguist-generated=true /2023/RequireObjectCoercible.js spackled linguist-generated=true /2023/SameValue.js spackled linguist-generated=true /2023/SameValueZero.js spackled linguist-generated=true /2023/SecFromTime.js spackled linguist-generated=true /2023/Set.js spackled linguist-generated=true /2023/SetFunctionLength.js spackled linguist-generated=true /2023/SetFunctionName.js spackled linguist-generated=true /2023/SetIntegrityLevel.js spackled linguist-generated=true /2023/SetValueInBuffer.js spackled linguist-generated=true /2023/SpeciesConstructor.js spackled linguist-generated=true /2023/StringCreate.js spackled linguist-generated=true /2023/StringGetOwnProperty.js spackled linguist-generated=true /2023/StringIndexOf.js spackled linguist-generated=true /2023/StringPad.js spackled linguist-generated=true /2023/StringToBigInt.js spackled linguist-generated=true /2023/StringToCodePoints.js spackled linguist-generated=true /2023/StringToNumber.js spackled linguist-generated=true /2023/SymbolDescriptiveString.js spackled linguist-generated=true /2023/TestIntegrityLevel.js spackled linguist-generated=true /2023/ThrowCompletion.js spackled linguist-generated=true /2023/TimeClip.js spackled linguist-generated=true /2023/TimeFromYear.js spackled linguist-generated=true /2023/TimeString.js spackled linguist-generated=true /2023/TimeWithinDay.js spackled linguist-generated=true /2023/ToBigInt.js spackled linguist-generated=true /2023/ToBigInt64.js spackled linguist-generated=true /2023/ToBigUint64.js spackled linguist-generated=true /2023/ToBoolean.js spackled linguist-generated=true /2023/ToDateString.js spackled linguist-generated=true /2023/ToIndex.js spackled linguist-generated=true /2023/ToLength.js spackled linguist-generated=true /2023/ToNumber.js spackled linguist-generated=true /2023/ToNumeric.js spackled linguist-generated=true /2023/ToObject.js spackled linguist-generated=true /2023/ToPrimitive.js spackled linguist-generated=true /2023/ToPropertyDescriptor.js spackled linguist-generated=true /2023/ToPropertyKey.js spackled linguist-generated=true /2023/ToString.js spackled linguist-generated=true /2023/ToUint8Clamp.js spackled linguist-generated=true /2023/ToZeroPaddedDecimalString.js spackled linguist-generated=true /2023/TrimString.js spackled linguist-generated=true /2023/Type.js spackled linguist-generated=true /2023/TypedArrayCreate.js spackled linguist-generated=true /2023/TypedArrayElementSize.js spackled linguist-generated=true /2023/TypedArrayElementType.js spackled linguist-generated=true /2023/TypedArraySpeciesCreate.js spackled linguist-generated=true /2023/UTF16EncodeCodePoint.js spackled linguist-generated=true /2023/UTF16SurrogatePairToCodePoint.js spackled linguist-generated=true /2023/UnicodeEscape.js spackled linguist-generated=true /2023/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2023/ValidateAtomicAccess.js spackled linguist-generated=true /2023/ValidateIntegerTypedArray.js spackled linguist-generated=true /2023/ValidateTypedArray.js spackled linguist-generated=true /2023/WeakRefDeref.js spackled linguist-generated=true /2023/WeekDay.js spackled linguist-generated=true /2023/YearFromTime.js spackled linguist-generated=true /2023/abs.js spackled linguist-generated=true /2023/clamp.js spackled linguist-generated=true /2023/floor.js spackled linguist-generated=true /2023/max.js spackled linguist-generated=true /2023/min.js spackled linguist-generated=true /2023/modulo.js spackled linguist-generated=true /2023/msFromTime.js spackled linguist-generated=true /2023/substring.js spackled linguist-generated=true /2023/tables/typed-array-objects.js spackled linguist-generated=true /2023/thisBigIntValue.js spackled linguist-generated=true /2023/thisBooleanValue.js spackled linguist-generated=true /2023/thisNumberValue.js spackled linguist-generated=true /2023/thisStringValue.js spackled linguist-generated=true /2023/thisSymbolValue.js spackled linguist-generated=true /2023/thisTimeValue.js spackled linguist-generated=true /2024/AddToKeptObjects.js spackled linguist-generated=true /2024/AdvanceStringIndex.js spackled linguist-generated=true /2024/ApplyStringOrNumericBinaryOperator.js spackled linguist-generated=true /2024/ArrayCreate.js spackled linguist-generated=true /2024/ArraySetLength.js spackled linguist-generated=true /2024/ArraySpeciesCreate.js spackled linguist-generated=true /2024/AsyncFromSyncIteratorContinuation.js spackled linguist-generated=true /2024/BigInt/add.js spackled linguist-generated=true /2024/BigInt/bitwiseAND.js spackled linguist-generated=true /2024/BigInt/bitwiseNOT.js spackled linguist-generated=true /2024/BigInt/bitwiseOR.js spackled linguist-generated=true /2024/BigInt/bitwiseXOR.js spackled linguist-generated=true /2024/BigInt/divide.js spackled linguist-generated=true /2024/BigInt/equal.js spackled linguist-generated=true /2024/BigInt/exponentiate.js spackled linguist-generated=true /2024/BigInt/index.js spackled linguist-generated=true /2024/BigInt/leftShift.js spackled linguist-generated=true /2024/BigInt/lessThan.js spackled linguist-generated=true /2024/BigInt/multiply.js spackled linguist-generated=true /2024/BigInt/remainder.js spackled linguist-generated=true /2024/BigInt/signedRightShift.js spackled linguist-generated=true /2024/BigInt/subtract.js spackled linguist-generated=true /2024/BigInt/toString.js spackled linguist-generated=true /2024/BigInt/unaryMinus.js spackled linguist-generated=true /2024/BigInt/unsignedRightShift.js spackled linguist-generated=true /2024/BigIntBitwiseOp.js spackled linguist-generated=true /2024/BinaryAnd.js spackled linguist-generated=true /2024/BinaryOr.js spackled linguist-generated=true /2024/BinaryXor.js spackled linguist-generated=true /2024/ByteListBitwiseOp.js spackled linguist-generated=true /2024/ByteListEqual.js spackled linguist-generated=true /2024/Call.js spackled linguist-generated=true /2024/CanBeHeldWeakly.js spackled linguist-generated=true /2024/CanonicalNumericIndexString.js spackled linguist-generated=true /2024/Canonicalize.js spackled linguist-generated=true /2024/CharacterRange.js spackled linguist-generated=true /2024/ClearKeptObjects.js spackled linguist-generated=true /2024/CloneArrayBuffer.js spackled linguist-generated=true /2024/CodePointAt.js spackled linguist-generated=true /2024/CodePointsToString.js spackled linguist-generated=true /2024/CompareArrayElements.js spackled linguist-generated=true /2024/CompareTypedArrayElements.js spackled linguist-generated=true /2024/CompletePropertyDescriptor.js spackled linguist-generated=true /2024/CompletionRecord.js spackled linguist-generated=true /2024/CopyDataProperties.js spackled linguist-generated=true /2024/CreateDataProperty.js spackled linguist-generated=true /2024/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2024/CreateHTML.js spackled linguist-generated=true /2024/CreateIterResultObject.js spackled linguist-generated=true /2024/CreateListFromArrayLike.js spackled linguist-generated=true /2024/CreateNonEnumerableDataPropertyOrThrow.js spackled linguist-generated=true /2024/DateFromTime.js spackled linguist-generated=true /2024/DateString.js spackled linguist-generated=true /2024/Day.js spackled linguist-generated=true /2024/DayFromYear.js spackled linguist-generated=true /2024/DayWithinYear.js spackled linguist-generated=true /2024/DaysInYear.js spackled linguist-generated=true /2024/DefineMethodProperty.js spackled linguist-generated=true /2024/DefinePropertyOrThrow.js spackled linguist-generated=true /2024/DeletePropertyOrThrow.js spackled linguist-generated=true /2024/DetachArrayBuffer.js spackled linguist-generated=true /2024/EnumerableOwnProperties.js spackled linguist-generated=true /2024/FlattenIntoArray.js spackled linguist-generated=true /2024/FromPropertyDescriptor.js spackled linguist-generated=true /2024/Get.js spackled linguist-generated=true /2024/GetGlobalObject.js spackled linguist-generated=true /2024/GetMatchIndexPair.js spackled linguist-generated=true /2024/GetMatchString.js spackled linguist-generated=true /2024/GetMethod.js spackled linguist-generated=true /2024/GetNamedTimeZoneEpochNanoseconds.js spackled linguist-generated=true /2024/GetOwnPropertyKeys.js spackled linguist-generated=true /2024/GetPromiseResolve.js spackled linguist-generated=true /2024/GetPrototypeFromConstructor.js spackled linguist-generated=true /2024/GetStringIndex.js spackled linguist-generated=true /2024/GetUTCEpochNanoseconds.js spackled linguist-generated=true /2024/GetV.js spackled linguist-generated=true /2024/HasOwnProperty.js spackled linguist-generated=true /2024/HasProperty.js spackled linguist-generated=true /2024/HourFromTime.js spackled linguist-generated=true /2024/InLeapYear.js spackled linguist-generated=true /2024/InstallErrorCause.js spackled linguist-generated=true /2024/InstanceofOperator.js spackled linguist-generated=true /2024/InternalizeJSONProperty.js spackled linguist-generated=true /2024/Invoke.js spackled linguist-generated=true /2024/IsAccessorDescriptor.js spackled linguist-generated=true /2024/IsArray.js spackled linguist-generated=true /2024/IsCallable.js spackled linguist-generated=true /2024/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2024/IsConcatSpreadable.js spackled linguist-generated=true /2024/IsConstructor.js spackled linguist-generated=true /2024/IsDataDescriptor.js spackled linguist-generated=true /2024/IsDetachedBuffer.js spackled linguist-generated=true /2024/IsExtensible.js spackled linguist-generated=true /2024/IsGenericDescriptor.js spackled linguist-generated=true /2024/IsIntegralNumber.js spackled linguist-generated=true /2024/IsLessThan.js spackled linguist-generated=true /2024/IsLooselyEqual.js spackled linguist-generated=true /2024/IsPromise.js spackled linguist-generated=true /2024/IsPropertyKey.js spackled linguist-generated=true /2024/IsRegExp.js spackled linguist-generated=true /2024/IsSharedArrayBuffer.js spackled linguist-generated=true /2024/IsStrictlyEqual.js spackled linguist-generated=true /2024/IsStringWellFormedUnicode.js spackled linguist-generated=true /2024/IsTimeZoneOffsetString.js spackled linguist-generated=true /2024/IsWordChar.js spackled linguist-generated=true /2024/IteratorComplete.js spackled linguist-generated=true /2024/IteratorValue.js spackled linguist-generated=true /2024/KeyForSymbol.js spackled linguist-generated=true /2024/LengthOfArrayLike.js spackled linguist-generated=true /2024/MakeDate.js spackled linguist-generated=true /2024/MakeDay.js spackled linguist-generated=true /2024/MakeMatchIndicesIndexPairArray.js spackled linguist-generated=true /2024/MakeTime.js spackled linguist-generated=true /2024/MinFromTime.js spackled linguist-generated=true /2024/MonthFromTime.js spackled linguist-generated=true /2024/NewPromiseCapability.js spackled linguist-generated=true /2024/NormalCompletion.js spackled linguist-generated=true /2024/Number/add.js spackled linguist-generated=true /2024/Number/bitwiseAND.js spackled linguist-generated=true /2024/Number/bitwiseNOT.js spackled linguist-generated=true /2024/Number/bitwiseOR.js spackled linguist-generated=true /2024/Number/bitwiseXOR.js spackled linguist-generated=true /2024/Number/divide.js spackled linguist-generated=true /2024/Number/equal.js spackled linguist-generated=true /2024/Number/exponentiate.js spackled linguist-generated=true /2024/Number/index.js spackled linguist-generated=true /2024/Number/leftShift.js spackled linguist-generated=true /2024/Number/lessThan.js spackled linguist-generated=true /2024/Number/multiply.js spackled linguist-generated=true /2024/Number/remainder.js spackled linguist-generated=true /2024/Number/sameValue.js spackled linguist-generated=true /2024/Number/sameValueZero.js spackled linguist-generated=true /2024/Number/signedRightShift.js spackled linguist-generated=true /2024/Number/subtract.js spackled linguist-generated=true /2024/Number/toString.js spackled linguist-generated=true /2024/Number/unaryMinus.js spackled linguist-generated=true /2024/Number/unsignedRightShift.js spackled linguist-generated=true /2024/NumberBitwiseOp.js spackled linguist-generated=true /2024/NumberToBigInt.js spackled linguist-generated=true /2024/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2024/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2024/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2024/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2024/OrdinaryHasInstance.js spackled linguist-generated=true /2024/OrdinaryHasProperty.js spackled linguist-generated=true /2024/OrdinaryObjectCreate.js spackled linguist-generated=true /2024/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2024/OrdinaryToPrimitive.js spackled linguist-generated=true /2024/ParseHexOctet.js spackled linguist-generated=true /2024/PromiseResolve.js spackled linguist-generated=true /2024/QuoteJSONString.js spackled linguist-generated=true /2024/RegExpCreate.js spackled linguist-generated=true /2024/RegExpExec.js spackled linguist-generated=true /2024/RegExpHasFlag.js spackled linguist-generated=true /2024/RequireObjectCoercible.js spackled linguist-generated=true /2024/SameValue.js spackled linguist-generated=true /2024/SameValueNonNumber.js spackled linguist-generated=true /2024/SameValueZero.js spackled linguist-generated=true /2024/SecFromTime.js spackled linguist-generated=true /2024/Set.js spackled linguist-generated=true /2024/SetFunctionLength.js spackled linguist-generated=true /2024/SetFunctionName.js spackled linguist-generated=true /2024/SetIntegrityLevel.js spackled linguist-generated=true /2024/SortIndexedProperties.js spackled linguist-generated=true /2024/SpeciesConstructor.js spackled linguist-generated=true /2024/StringCreate.js spackled linguist-generated=true /2024/StringGetOwnProperty.js spackled linguist-generated=true /2024/StringIndexOf.js spackled linguist-generated=true /2024/StringToBigInt.js spackled linguist-generated=true /2024/StringToCodePoints.js spackled linguist-generated=true /2024/StringToNumber.js spackled linguist-generated=true /2024/SymbolDescriptiveString.js spackled linguist-generated=true /2024/TestIntegrityLevel.js spackled linguist-generated=true /2024/ThrowCompletion.js spackled linguist-generated=true /2024/TimeClip.js spackled linguist-generated=true /2024/TimeFromYear.js spackled linguist-generated=true /2024/TimeString.js spackled linguist-generated=true /2024/TimeWithinDay.js spackled linguist-generated=true /2024/TimeZoneString.js spackled linguist-generated=true /2024/ToBigInt.js spackled linguist-generated=true /2024/ToBigInt64.js spackled linguist-generated=true /2024/ToBigUint64.js spackled linguist-generated=true /2024/ToBoolean.js spackled linguist-generated=true /2024/ToDateString.js spackled linguist-generated=true /2024/ToInt16.js spackled linguist-generated=true /2024/ToInt32.js spackled linguist-generated=true /2024/ToInt8.js spackled linguist-generated=true /2024/ToIntegerOrInfinity.js spackled linguist-generated=true /2024/ToLength.js spackled linguist-generated=true /2024/ToNumber.js spackled linguist-generated=true /2024/ToNumeric.js spackled linguist-generated=true /2024/ToObject.js spackled linguist-generated=true /2024/ToPrimitive.js spackled linguist-generated=true /2024/ToPropertyDescriptor.js spackled linguist-generated=true /2024/ToPropertyKey.js spackled linguist-generated=true /2024/ToString.js spackled linguist-generated=true /2024/ToUint16.js spackled linguist-generated=true /2024/ToUint32.js spackled linguist-generated=true /2024/ToUint8.js spackled linguist-generated=true /2024/ToZeroPaddedDecimalString.js spackled linguist-generated=true /2024/TrimString.js spackled linguist-generated=true /2024/Type.js spackled linguist-generated=true /2024/TypedArrayElementSize.js spackled linguist-generated=true /2024/TypedArrayElementType.js spackled linguist-generated=true /2024/UTF16EncodeCodePoint.js spackled linguist-generated=true /2024/UTF16SurrogatePairToCodePoint.js spackled linguist-generated=true /2024/UnicodeEscape.js spackled linguist-generated=true /2024/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2024/WeakRefDeref.js spackled linguist-generated=true /2024/WeekDay.js spackled linguist-generated=true /2024/WordCharacters.js spackled linguist-generated=true /2024/YearFromTime.js spackled linguist-generated=true /2024/abs.js spackled linguist-generated=true /2024/clamp.js spackled linguist-generated=true /2024/floor.js spackled linguist-generated=true /2024/max.js spackled linguist-generated=true /2024/min.js spackled linguist-generated=true /2024/modulo.js spackled linguist-generated=true /2024/msFromTime.js spackled linguist-generated=true /2024/substring.js spackled linguist-generated=true /2024/truncate.js spackled linguist-generated=true /2025/AddEntriesFromIterable.js spackled linguist-generated=true /2025/AddToKeptObjects.js spackled linguist-generated=true /2025/AddValueToKeyedGroup.js spackled linguist-generated=true /2025/AdvanceStringIndex.js spackled linguist-generated=true /2025/AllCharacters.js spackled linguist-generated=true /2025/ArrayBufferByteLength.js spackled linguist-generated=true /2025/ArrayBufferCopyAndDetach.js spackled linguist-generated=true /2025/ArrayCreate.js spackled linguist-generated=true /2025/ArraySetLength.js spackled linguist-generated=true /2025/ArraySpeciesCreate.js spackled linguist-generated=true /2025/AsyncIteratorClose.js spackled linguist-generated=true /2025/BigInt/add.js spackled linguist-generated=true /2025/BigInt/bitwiseAND.js spackled linguist-generated=true /2025/BigInt/bitwiseNOT.js spackled linguist-generated=true /2025/BigInt/bitwiseOR.js spackled linguist-generated=true /2025/BigInt/bitwiseXOR.js spackled linguist-generated=true /2025/BigInt/divide.js spackled linguist-generated=true /2025/BigInt/equal.js spackled linguist-generated=true /2025/BigInt/exponentiate.js spackled linguist-generated=true /2025/BigInt/index.js spackled linguist-generated=true /2025/BigInt/leftShift.js spackled linguist-generated=true /2025/BigInt/lessThan.js spackled linguist-generated=true /2025/BigInt/multiply.js spackled linguist-generated=true /2025/BigInt/remainder.js spackled linguist-generated=true /2025/BigInt/signedRightShift.js spackled linguist-generated=true /2025/BigInt/subtract.js spackled linguist-generated=true /2025/BigInt/toString.js spackled linguist-generated=true /2025/BigInt/unaryMinus.js spackled linguist-generated=true /2025/BigInt/unsignedRightShift.js spackled linguist-generated=true /2025/BigIntBitwiseOp.js spackled linguist-generated=true /2025/BinaryAnd.js spackled linguist-generated=true /2025/BinaryOr.js spackled linguist-generated=true /2025/BinaryXor.js spackled linguist-generated=true /2025/ByteListBitwiseOp.js spackled linguist-generated=true /2025/ByteListEqual.js spackled linguist-generated=true /2025/Call.js spackled linguist-generated=true /2025/CanBeHeldWeakly.js spackled linguist-generated=true /2025/CanonicalNumericIndexString.js spackled linguist-generated=true /2025/Canonicalize.js spackled linguist-generated=true /2025/CharacterComplement.js spackled linguist-generated=true /2025/ClearKeptObjects.js spackled linguist-generated=true /2025/CloneArrayBuffer.js spackled linguist-generated=true /2025/CodePointAt.js spackled linguist-generated=true /2025/CodePointsToString.js spackled linguist-generated=true /2025/CompareArrayElements.js spackled linguist-generated=true /2025/CompareTypedArrayElements.js spackled linguist-generated=true /2025/CompletePropertyDescriptor.js spackled linguist-generated=true /2025/CompletionRecord.js spackled linguist-generated=true /2025/CopyDataProperties.js spackled linguist-generated=true /2025/CreateDataProperty.js spackled linguist-generated=true /2025/CreateDataPropertyOrThrow.js spackled linguist-generated=true /2025/CreateHTML.js spackled linguist-generated=true /2025/CreateNonEnumerableDataPropertyOrThrow.js spackled linguist-generated=true /2025/DateFromTime.js spackled linguist-generated=true /2025/DateString.js spackled linguist-generated=true /2025/Day.js spackled linguist-generated=true /2025/DayFromYear.js spackled linguist-generated=true /2025/DayWithinYear.js spackled linguist-generated=true /2025/DaysInYear.js spackled linguist-generated=true /2025/DefineMethodProperty.js spackled linguist-generated=true /2025/DefinePropertyOrThrow.js spackled linguist-generated=true /2025/DeletePropertyOrThrow.js spackled linguist-generated=true /2025/DetachArrayBuffer.js spackled linguist-generated=true /2025/EnumerableOwnProperties.js spackled linguist-generated=true /2025/FindViaPredicate.js spackled linguist-generated=true /2025/FlattenIntoArray.js spackled linguist-generated=true /2025/FromPropertyDescriptor.js spackled linguist-generated=true /2025/Get.js spackled linguist-generated=true /2025/GetArrayBufferMaxByteLengthOption.js spackled linguist-generated=true /2025/GetGlobalObject.js spackled linguist-generated=true /2025/GetIterator.js spackled linguist-generated=true /2025/GetIteratorFromMethod.js spackled linguist-generated=true /2025/GetMatchIndexPair.js spackled linguist-generated=true /2025/GetMatchString.js spackled linguist-generated=true /2025/GetMethod.js spackled linguist-generated=true /2025/GetNamedTimeZoneEpochNanoseconds.js spackled linguist-generated=true /2025/GetOwnPropertyKeys.js spackled linguist-generated=true /2025/GetPromiseResolve.js spackled linguist-generated=true /2025/GetPrototypeFromConstructor.js spackled linguist-generated=true /2025/GetStringIndex.js spackled linguist-generated=true /2025/GetSubstitution.js spackled linguist-generated=true /2025/GetUTCEpochNanoseconds.js spackled linguist-generated=true /2025/GetV.js spackled linguist-generated=true /2025/GetValueFromBuffer.js spackled linguist-generated=true /2025/GetViewByteLength.js spackled linguist-generated=true /2025/HasEitherUnicodeFlag.js spackled linguist-generated=true /2025/HasOwnProperty.js spackled linguist-generated=true /2025/HasProperty.js spackled linguist-generated=true /2025/HourFromTime.js spackled linguist-generated=true /2025/InLeapYear.js spackled linguist-generated=true /2025/InstallErrorCause.js spackled linguist-generated=true /2025/InstanceofOperator.js spackled linguist-generated=true /2025/InternalizeJSONProperty.js spackled linguist-generated=true /2025/Invoke.js spackled linguist-generated=true /2025/IsAccessorDescriptor.js spackled linguist-generated=true /2025/IsArray.js spackled linguist-generated=true /2025/IsArrayBufferViewOutOfBounds.js spackled linguist-generated=true /2025/IsBigIntElementType.js spackled linguist-generated=true /2025/IsCallable.js spackled linguist-generated=true /2025/IsCompatiblePropertyDescriptor.js spackled linguist-generated=true /2025/IsConcatSpreadable.js spackled linguist-generated=true /2025/IsConstructor.js spackled linguist-generated=true /2025/IsDataDescriptor.js spackled linguist-generated=true /2025/IsDetachedBuffer.js spackled linguist-generated=true /2025/IsExtensible.js spackled linguist-generated=true /2025/IsFixedLengthArrayBuffer.js spackled linguist-generated=true /2025/IsGenericDescriptor.js spackled linguist-generated=true /2025/IsLessThan.js spackled linguist-generated=true /2025/IsLooselyEqual.js spackled linguist-generated=true /2025/IsNoTearConfiguration.js spackled linguist-generated=true /2025/IsPromise.js spackled linguist-generated=true /2025/IsRegExp.js spackled linguist-generated=true /2025/IsSharedArrayBuffer.js spackled linguist-generated=true /2025/IsStringWellFormedUnicode.js spackled linguist-generated=true /2025/IsTimeZoneOffsetString.js spackled linguist-generated=true /2025/IsTypedArrayOutOfBounds.js spackled linguist-generated=true /2025/IsUnclampedIntegerElementType.js spackled linguist-generated=true /2025/IsUnsignedElementType.js spackled linguist-generated=true /2025/IsValidIntegerIndex.js spackled linguist-generated=true /2025/IsViewOutOfBounds.js spackled linguist-generated=true /2025/IsWordChar.js spackled linguist-generated=true /2025/IteratorClose.js spackled linguist-generated=true /2025/IteratorComplete.js spackled linguist-generated=true /2025/IteratorToList.js spackled linguist-generated=true /2025/IteratorValue.js spackled linguist-generated=true /2025/KeyForSymbol.js spackled linguist-generated=true /2025/LengthOfArrayLike.js spackled linguist-generated=true /2025/MakeDataViewWithBufferWitnessRecord.js spackled linguist-generated=true /2025/MakeDate.js spackled linguist-generated=true /2025/MakeDay.js spackled linguist-generated=true /2025/MakeFullYear.js spackled linguist-generated=true /2025/MakeMatchIndicesIndexPairArray.js spackled linguist-generated=true /2025/MakeTime.js spackled linguist-generated=true /2025/MakeTypedArrayWithBufferWitnessRecord.js spackled linguist-generated=true /2025/MinFromTime.js spackled linguist-generated=true /2025/MonthFromTime.js spackled linguist-generated=true /2025/NewPromiseCapability.js spackled linguist-generated=true /2025/NormalCompletion.js spackled linguist-generated=true /2025/Number/add.js spackled linguist-generated=true /2025/Number/bitwiseAND.js spackled linguist-generated=true /2025/Number/bitwiseNOT.js spackled linguist-generated=true /2025/Number/bitwiseOR.js spackled linguist-generated=true /2025/Number/bitwiseXOR.js spackled linguist-generated=true /2025/Number/divide.js spackled linguist-generated=true /2025/Number/equal.js spackled linguist-generated=true /2025/Number/exponentiate.js spackled linguist-generated=true /2025/Number/index.js spackled linguist-generated=true /2025/Number/leftShift.js spackled linguist-generated=true /2025/Number/lessThan.js spackled linguist-generated=true /2025/Number/multiply.js spackled linguist-generated=true /2025/Number/remainder.js spackled linguist-generated=true /2025/Number/sameValue.js spackled linguist-generated=true /2025/Number/sameValueZero.js spackled linguist-generated=true /2025/Number/signedRightShift.js spackled linguist-generated=true /2025/Number/subtract.js spackled linguist-generated=true /2025/Number/toString.js spackled linguist-generated=true /2025/Number/unaryMinus.js spackled linguist-generated=true /2025/Number/unsignedRightShift.js spackled linguist-generated=true /2025/NumberBitwiseOp.js spackled linguist-generated=true /2025/NumberToBigInt.js spackled linguist-generated=true /2025/ObjectDefineProperties.js spackled linguist-generated=true /2025/OrdinaryCreateFromConstructor.js spackled linguist-generated=true /2025/OrdinaryDefineOwnProperty.js spackled linguist-generated=true /2025/OrdinaryGetOwnProperty.js spackled linguist-generated=true /2025/OrdinaryGetPrototypeOf.js spackled linguist-generated=true /2025/OrdinaryHasInstance.js spackled linguist-generated=true /2025/OrdinaryHasProperty.js spackled linguist-generated=true /2025/OrdinaryObjectCreate.js spackled linguist-generated=true /2025/OrdinarySetPrototypeOf.js spackled linguist-generated=true /2025/OrdinaryToPrimitive.js spackled linguist-generated=true /2025/ParseHexOctet.js spackled linguist-generated=true /2025/PromiseResolve.js spackled linguist-generated=true /2025/QuoteJSONString.js spackled linguist-generated=true /2025/RegExpCreate.js spackled linguist-generated=true /2025/RegExpExec.js spackled linguist-generated=true /2025/RegExpHasFlag.js spackled linguist-generated=true /2025/RequireObjectCoercible.js spackled linguist-generated=true /2025/SameValue.js spackled linguist-generated=true /2025/SameValueZero.js spackled linguist-generated=true /2025/SecFromTime.js spackled linguist-generated=true /2025/Set.js spackled linguist-generated=true /2025/SetFunctionLength.js spackled linguist-generated=true /2025/SetFunctionName.js spackled linguist-generated=true /2025/SetIntegrityLevel.js spackled linguist-generated=true /2025/SetTypedArrayFromArrayLike.js spackled linguist-generated=true /2025/SetTypedArrayFromTypedArray.js spackled linguist-generated=true /2025/SetValueInBuffer.js spackled linguist-generated=true /2025/SortIndexedProperties.js spackled linguist-generated=true /2025/SpeciesConstructor.js spackled linguist-generated=true /2025/StringCreate.js spackled linguist-generated=true /2025/StringGetOwnProperty.js spackled linguist-generated=true /2025/StringPad.js spackled linguist-generated=true /2025/StringPaddingBuiltinsImpl.js spackled linguist-generated=true /2025/StringToBigInt.js spackled linguist-generated=true /2025/StringToCodePoints.js spackled linguist-generated=true /2025/StringToNumber.js spackled linguist-generated=true /2025/SymbolDescriptiveString.js spackled linguist-generated=true /2025/SystemTimeZoneIdentifier.js spackled linguist-generated=true /2025/TestIntegrityLevel.js spackled linguist-generated=true /2025/ThisBigIntValue.js spackled linguist-generated=true /2025/ThisBooleanValue.js spackled linguist-generated=true /2025/ThisNumberValue.js spackled linguist-generated=true /2025/ThisStringValue.js spackled linguist-generated=true /2025/ThisSymbolValue.js spackled linguist-generated=true /2025/ThrowCompletion.js spackled linguist-generated=true /2025/TimeClip.js spackled linguist-generated=true /2025/TimeFromYear.js spackled linguist-generated=true /2025/TimeString.js spackled linguist-generated=true /2025/TimeWithinDay.js spackled linguist-generated=true /2025/TimeZoneString.js spackled linguist-generated=true /2025/ToBigInt.js spackled linguist-generated=true /2025/ToBigInt64.js spackled linguist-generated=true /2025/ToBigUint64.js spackled linguist-generated=true /2025/ToBoolean.js spackled linguist-generated=true /2025/ToDateString.js spackled linguist-generated=true /2025/ToIndex.js spackled linguist-generated=true /2025/ToInt16.js spackled linguist-generated=true /2025/ToInt32.js spackled linguist-generated=true /2025/ToInt8.js spackled linguist-generated=true /2025/ToIntegerOrInfinity.js spackled linguist-generated=true /2025/ToLength.js spackled linguist-generated=true /2025/ToNumber.js spackled linguist-generated=true /2025/ToNumeric.js spackled linguist-generated=true /2025/ToObject.js spackled linguist-generated=true /2025/ToPrimitive.js spackled linguist-generated=true /2025/ToPropertyDescriptor.js spackled linguist-generated=true /2025/ToPropertyKey.js spackled linguist-generated=true /2025/ToString.js spackled linguist-generated=true /2025/ToUint16.js spackled linguist-generated=true /2025/ToUint32.js spackled linguist-generated=true /2025/ToUint8.js spackled linguist-generated=true /2025/ToUint8Clamp.js spackled linguist-generated=true /2025/ToZeroPaddedDecimalString.js spackled linguist-generated=true /2025/TrimString.js spackled linguist-generated=true /2025/TypedArrayByteLength.js spackled linguist-generated=true /2025/TypedArrayCreateFromConstructor.js spackled linguist-generated=true /2025/TypedArrayCreateSameType.js spackled linguist-generated=true /2025/TypedArrayElementSize.js spackled linguist-generated=true /2025/TypedArrayElementType.js spackled linguist-generated=true /2025/TypedArrayGetElement.js spackled linguist-generated=true /2025/TypedArrayLength.js spackled linguist-generated=true /2025/TypedArraySetElement.js spackled linguist-generated=true /2025/TypedArraySpeciesCreate.js spackled linguist-generated=true /2025/UTF16EncodeCodePoint.js spackled linguist-generated=true /2025/UTF16SurrogatePairToCodePoint.js spackled linguist-generated=true /2025/UnicodeEscape.js spackled linguist-generated=true /2025/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true /2025/ValidateAtomicAccess.js spackled linguist-generated=true /2025/ValidateAtomicAccessOnIntegerTypedArray.js spackled linguist-generated=true /2025/ValidateIntegerTypedArray.js spackled linguist-generated=true /2025/ValidateTypedArray.js spackled linguist-generated=true /2025/WeakRefDeref.js spackled linguist-generated=true /2025/WeekDay.js spackled linguist-generated=true /2025/WordCharacters.js spackled linguist-generated=true /2025/YearFromTime.js spackled linguist-generated=true /2025/abs.js spackled linguist-generated=true /2025/clamp.js spackled linguist-generated=true /2025/floor.js spackled linguist-generated=true /2025/max.js spackled linguist-generated=true /2025/min.js spackled linguist-generated=true /2025/modulo.js spackled linguist-generated=true /2025/msFromTime.js spackled linguist-generated=true /2025/substring.js spackled linguist-generated=true /2025/truncate.js spackled linguist-generated=trueljharb-es-abstract-babee05/.github/000077500000000000000000000000001516525472400173025ustar00rootroot00000000000000ljharb-es-abstract-babee05/.github/FUNDING.yml000066400000000000000000000010551516525472400211200ustar00rootroot00000000000000# These are supported funding model platforms github: [ljharb] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username tidelift: npm/es-abstract community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username custom: # Replace with a single custom sponsorship URL ljharb-es-abstract-babee05/.github/workflows/000077500000000000000000000000001516525472400213375ustar00rootroot00000000000000ljharb-es-abstract-babee05/.github/workflows/codeql-analysis.yml000066400000000000000000000030301516525472400251460ustar00rootroot00000000000000name: "Code scanning - action" on: push: pull_request: schedule: - cron: '0 17 * * 4' permissions: contents: read jobs: CodeQL-Build: # CodeQL runs on ubuntu-latest and windows-latest permissions: actions: read # for github/codeql-action/init to get workflow details contents: read # for actions/checkout to fetch code security-events: write # for github/codeql-action/autobuild to send a status report runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: persist-credentials: false # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 # Override language selection by uncommenting this and choosing your languages # with: # languages: go, javascript, csharp, python, cpp, java # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language #- run: | # make bootstrap # make release - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 ljharb-es-abstract-babee05/.github/workflows/node-aught.yml000066400000000000000000000003611516525472400241150ustar00rootroot00000000000000name: 'Tests: node.js < 10' on: [pull_request, push] permissions: contents: read jobs: tests: uses: ljharb/actions/.github/workflows/node.yml@main with: range: '< 10' type: minors command: npm run tests-only ljharb-es-abstract-babee05/.github/workflows/node-pretest.yml000066400000000000000000000002451516525472400244740ustar00rootroot00000000000000name: 'Tests: pretest/posttest' on: [pull_request, push] permissions: contents: read jobs: tests: uses: ljharb/actions/.github/workflows/pretest.yml@main ljharb-es-abstract-babee05/.github/workflows/node-tens.yml000066400000000000000000000003721516525472400237600ustar00rootroot00000000000000name: 'Tests: node.js 10 - 20' on: [pull_request, push] permissions: contents: read jobs: tests: uses: ljharb/actions/.github/workflows/node.yml@main with: range: '>= 10 < 20' type: minors command: npm run tests-only ljharb-es-abstract-babee05/.github/workflows/node-twenties.yml000066400000000000000000000003631516525472400246510ustar00rootroot00000000000000name: 'Tests: node.js >= 20' on: [pull_request, push] permissions: contents: read jobs: tests: uses: ljharb/actions/.github/workflows/node.yml@main with: range: '>= 20' type: minors command: npm run tests-only ljharb-es-abstract-babee05/.github/workflows/rebase.yml000066400000000000000000000002571516525472400233270ustar00rootroot00000000000000name: Automatic Rebase on: [pull_request_target] jobs: _: uses: ljharb/actions/.github/workflows/rebase.yml@main secrets: token: ${{ secrets.GITHUB_TOKEN }} ljharb-es-abstract-babee05/.github/workflows/require-allow-edits.yml000066400000000000000000000005141516525472400257600ustar00rootroot00000000000000name: Require “Allow Edits” on: [pull_request_target] permissions: contents: read jobs: _: permissions: pull-requests: read # for ljharb/require-allow-edits to check 'allow edits' on PR name: "Require “Allow Edits”" runs-on: ubuntu-latest steps: - uses: ljharb/require-allow-edits@main ljharb-es-abstract-babee05/.github/workflows/ses.yml000066400000000000000000000013601516525472400226540ustar00rootroot00000000000000name: 'Tests: SES' on: [pull_request, push] permissions: contents: read jobs: tests: runs-on: ubuntu-latest strategy: fail-fast: false matrix: node-version: - '24' - '23' - '22' - '20' - '18' steps: - uses: actions/checkout@v4 with: persist-credentials: false - uses: ljharb/actions/node/install@main name: 'nvm install ${{ matrix.node-version }} && npm install' with: node-version: ${{ matrix.node-version }} - run: npm run test:ses - uses: codecov/codecov-action@v3.1.5 SES: permissions: contents: none needs: [tests] runs-on: ubuntu-latest steps: - run: true ljharb-es-abstract-babee05/.gitignore000066400000000000000000000002451516525472400177330ustar00rootroot00000000000000# gitignore node_modules # code coverage output coverage .nyc_output # Only apps should have lockfiles npm-shrinkwrap.json package-lock.json yarn.lock .npmignore ljharb-es-abstract-babee05/.npmrc000066400000000000000000000000231516525472400170550ustar00rootroot00000000000000package-lock=false ljharb-es-abstract-babee05/.nycrc000066400000000000000000000004701516525472400170620ustar00rootroot00000000000000{ "all": true, "check-coverage": false, "reporter": ["text-summary", "text", "html", "json"], "exclude": [ "coverage", "operations", "test", "helpers/callBind.js", "helpers/callBound.js", "helpers/getOwnPropertyDescriptor.js", "helpers/getSymbolDescription.js", "helpers/regexTester.js" ] } ljharb-es-abstract-babee05/2015/000077500000000000000000000000001516525472400163315ustar00rootroot00000000000000ljharb-es-abstract-babee05/2015/AbstractEqualityComparison.js000066400000000000000000000022631516525472400242060ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/2015/AbstractRelationalComparison.js000066400000000000000000000030501516525472400244760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var isPrefixOf = require('../helpers/isPrefixOf'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/5.1/#sec-11.8.5 // eslint-disable-next-line max-statements module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } var bothStrings = typeof px === 'string' && typeof py === 'string'; if (!bothStrings) { var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal } if (isPrefixOf(py, px)) { return false; } if (isPrefixOf(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f }; ljharb-es-abstract-babee05/2015/AdvanceStringIndex.js000066400000000000000000000023341516525472400224110ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); // https://262.ecma-international.org/6.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var first = $charCodeAt(S, index); if (!isLeadingSurrogate(first)) { return index + 1; } var second = $charCodeAt(S, index + 1); if (!isTrailingSurrogate(second)) { return index + 1; } return index + 2; }; ljharb-es-abstract-babee05/2015/ArrayCreate.js000066400000000000000000000026251516525472400210760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2015/ArraySetLength.js000066400000000000000000000045661516525472400215760ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2015/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2015/Call.js000066400000000000000000000011351516525472400175420ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2015/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2015/Canonicalize.js000066400000000000000000000022421516525472400212660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2015/CharacterRange.js000066400000000000000000000024751516525472400215500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2015/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2015/CompletionRecord.js000066400000000000000000000025141516525472400221410ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/6.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[type]]', type); SLOT.set(this, '[[value]]', value); // [[target]] slot? }; CompletionRecord.prototype.type = function type() { return SLOT.get(this, '[[type]]'); }; CompletionRecord.prototype.value = function value() { return SLOT.get(this, '[[value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[type]]'); var value = SLOT.get(this, '[[value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2015/CreateDataProperty.js000066400000000000000000000013231516525472400224300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2015/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2015/CreateHTML.js000066400000000000000000000015051516525472400205600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2015/CreateIterResultObject.js000066400000000000000000000005351516525472400232470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2015/CreateListFromArrayLike.js000066400000000000000000000025001516525472400233530ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; // https://262.ecma-international.org/6.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = ToLength(Get(obj, 'length')); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2015/CreateMethodProperty.js000066400000000000000000000016601516525472400230030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2015/DateFromTime.js000066400000000000000000000017341516525472400212140ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2015/Day.js000066400000000000000000000003521516525472400174040ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2015/DayFromYear.js000066400000000000000000000004001516525472400210430ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2015/DayWithinYear.js000066400000000000000000000004361516525472400214130ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2015/DaysInYear.js000066400000000000000000000004551516525472400207030ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2015/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2015/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2015/DetachArrayBuffer.js000066400000000000000000000023511516525472400222110ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isArrayBuffer = require('is-array-buffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; // node 11.7+ } catch (e) { /**/ } // https://262.ecma-international.org/6.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2015/EnumerableOwnNames.js000066400000000000000000000005711516525472400224210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-enumerableownnames module.exports = function EnumerableOwnNames(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return keys(O); }; ljharb-es-abstract-babee05/2015/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2015/Get.js000066400000000000000000000010701516525472400174040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2015/GetGlobalObject.js000066400000000000000000000003061516525472400216550ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2015/GetIterator.js000066400000000000000000000013631516525472400211230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var isObject = require('es-object-atoms/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/6.0/#sec-getiterator module.exports = function GetIterator(obj, method) { var actualMethod = method; if (arguments.length < 2) { actualMethod = getIteratorMethod(ES, obj); } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; }; ljharb-es-abstract-babee05/2015/GetMethod.js000066400000000000000000000012541516525472400205510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2015/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2015/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2015/GetSubstitution.js000066400000000000000000000062751516525472400220550ustar00rootroot00000000000000 'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $parseInt = GetIntrinsic('%parseInt%'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var regexTester = require('safe-regex-test'); var callBound = require('call-bound'); var every = require('../helpers/every'); var isDigit = regexTester(/^[0-9]$/); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var IsArray = require('./IsArray'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // https://262.ecma-international.org/6.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2015/GetV.js000066400000000000000000000007541516525472400175420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2015/GetValueFromBuffer.js000066400000000000000000000063101516525472400223610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var defaultEndianness = require('../helpers/defaultEndianness'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var isUnsignedElementType = function isUnsignedElementType(type) { return $charAt(type, 0) === 'U'; }; // https://262.ecma-international.org/6.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string') { throw new $TypeError('Assertion failed: `type` must be a string'); } if (arguments.length > 3 && typeof arguments[3] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } // 6. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. var rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 3 ? arguments[3] : defaultEndianness === 'little'; // step 7 if (!isLittleEndian) { $reverse(rawValue); // step 8 } var bytes = $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize); if (type === 'Float32') { // step 3 return bytesAsFloat32(bytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(bytes); } return bytesAsInteger(bytes, elementSize, isUnsignedElementType(type), false); }; ljharb-es-abstract-babee05/2015/HasOwnProperty.js000066400000000000000000000010241516525472400216300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2015/HasProperty.js000066400000000000000000000007471516525472400211570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2015/HourFromTime.js000066400000000000000000000005761516525472400212570ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2015/InLeapYear.js000066400000000000000000000007161516525472400206640ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2015/InstanceofOperator.js000066400000000000000000000016371516525472400225030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2015/IntegerIndexedElementGet.js000066400000000000000000000034651516525472400235470ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/6.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 10 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsInteger(index) || isNegativeZero(index)) { return void undefined; // steps 5 - 6 } var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var offset = typedArrayByteOffset(O); // step 9 var elementType = tableTAO.name['$' + arrayTypeName]; // step 13 var elementSize = tableTAO.size['$' + elementType]; // step 11 var indexedPosition = (index * elementSize) + offset; // step 12 return GetValueFromBuffer(buffer, indexedPosition, elementType); // step 14 }; ljharb-es-abstract-babee05/2015/IntegerIndexedElementSet.js000066400000000000000000000036371516525472400235640ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToNumber = require('./ToNumber'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/6.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 12 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2 } var numValue = ToNumber(value); // step 3 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsInteger(index) || isNegativeZero(index)) { return false; // steps 7 - 8 } var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var offset = typedArrayByteOffset(O); // step 11 var elementType = tableTAO.name['$' + arrayTypeName]; // step 15 var elementSize = tableTAO.size['$' + elementType]; // step 13 var indexedPosition = (index * elementSize) + offset; // step 14 SetValueInBuffer(buffer, indexedPosition, elementType, numValue); // step 16 return true; // step 17 }; ljharb-es-abstract-babee05/2015/InternalizeJSONProperty.js000066400000000000000000000041271516525472400234160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnNames = require('./EnumerableOwnNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/6.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 3 var isArray = IsArray(val); // step 3.a if (isArray) { // step 3.c var I = 0; // step 3.c.i var len = ToLength(Get(val, 'length')); // step 3.b.ii while (I < len) { // step 3.b.iv var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 3.b.iv.1 if (typeof newElement === 'undefined') { // step 3.b.iv.3 delete val[ToString(I)]; // step 3.b.iv.3.a } else { // step 3.b.iv.4 CreateDataProperty(val, ToString(I), newElement); // step 3.b.iv.4.a } I += 1; // step 3.b.iv.6 } } else { var keys = EnumerableOwnNames(val); // step 3.d.i forEach(keys, function (P) { // step 3.d.iii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 3.d.iii.1 if (typeof newElement === 'undefined') { // step 3.d.iii.3 delete val[P]; // step 3.d.iii.3.a } else { // step 3.d.iii.4 CreateDataProperty(val, P, newElement); // step 3.d.iii.4.a } }); } } return Call(reviver, holder, [name, val]); // step 4 }; ljharb-es-abstract-babee05/2015/Invoke.js000066400000000000000000000012371516525472400201250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2015/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2015/IsArray.js000066400000000000000000000001661516525472400202440ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2015/IsCallable.js000066400000000000000000000001541516525472400206620ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2015/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250500ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2015/IsConcatSpreadable.js000066400000000000000000000011741516525472400223600ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2015/IsConstructor.js000066400000000000000000000021701516525472400215100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2015/IsDataDescriptor.js000066400000000000000000000010611516525472400220710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2015/IsDetachedBuffer.js000066400000000000000000000013371516525472400220220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var isArrayBuffer = require('is-array-buffer'); var availableTypedArrays = require('available-typed-arrays')(); // https://262.ecma-international.org/6.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ($byteLength(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2015/IsExtensible.js000066400000000000000000000007701516525472400212710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2015/IsGenericDescriptor.js000066400000000000000000000012201516525472400225710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2015/IsInteger.js000066400000000000000000000003201516525472400205530ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2015/IsPromise.js000066400000000000000000000007451516525472400206070ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2015/IsPropertyDescriptor.js000066400000000000000000000004671516525472400230550ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete this var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type module.exports = function IsPropertyDescriptor(Desc) { return isPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2015/IsPropertyKey.js000066400000000000000000000003371516525472400214630ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2015/IsRegExp.js000066400000000000000000000010721516525472400203550ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2015/IsWordChar.js000066400000000000000000000021011516525472400206660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var every = require('../helpers/every'); var regexTester = require('safe-regex-test'); var isChar = function isChar(c) { return typeof c === 'string' && c.length === 1; }; var isWordCharacter = regexTester(/^[a-zA-Z0-9_]$/); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 return isWordCharacter(c); // steps 3-4 }; ljharb-es-abstract-babee05/2015/IteratorClose.js000066400000000000000000000033441516525472400214520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2015/IteratorComplete.js000066400000000000000000000007131516525472400221520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2015/IteratorNext.js000066400000000000000000000007061516525472400213220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2015/IteratorStep.js000066400000000000000000000005341516525472400213160ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2015/IteratorValue.js000066400000000000000000000006241516525472400214570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2015/MakeDate.js000066400000000000000000000005161516525472400203440ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2015/MakeDay.js000066400000000000000000000016321516525472400202040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2015/MakeTime.js000066400000000000000000000013001516525472400203550ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2015/MinFromTime.js000066400000000000000000000006141516525472400210560ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2015/MonthFromTime.js000066400000000000000000000021511516525472400214160ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2015/NewPromiseCapability.js000066400000000000000000000023141516525472400227610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2015/NormalCompletion.js000066400000000000000000000003551516525472400221540ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2015/ObjectCreate.js000066400000000000000000000024571516525472400212310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/6.0/#sec-objectcreate module.exports = function ObjectCreate(proto, internalSlotsList) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 if (arguments.length >= 2 && !IsArray(slots)) { throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); } var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (slots.length > 0) { forEach(slots, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; // step 6 }; ljharb-es-abstract-babee05/2015/ObjectDefineProperties.js000066400000000000000000000026331516525472400232710ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2015/OrdinaryCreateFromConstructor.js000066400000000000000000000014411516525472400246740ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var ObjectCreate = require('./ObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return ObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2015/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240170ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2015/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233500ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2015/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2015/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2015/QuoteJSONString.js000066400000000000000000000024661516525472400216550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var $strSlice = callBound('String.prototype.slice'); var $strSplit = callBound('String.prototype.split'); // https://262.ecma-international.org/6.0/#sec-quotejsonstring var escapes = { '\u0008': 'b', '\u000C': 'f', '\u000A': 'n', '\u000D': 'r', '\u0009': 't' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(value, ''), function (C) { if (C === '"' || C === '\\') { product += '\u005C' + C; } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { var abbrev = escapes[C]; product += '\u005C' + abbrev; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20) { product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); } else { product += C; } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2015/RegExpCreate.js000066400000000000000000000012031516525472400212010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2015/RegExpExec.js000066400000000000000000000014761516525472400206760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2015/RequireObjectCoercible.js000066400000000000000000000001231516525472400232360ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2015/SameValue.js000066400000000000000000000004701516525472400205520ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2015/SameValueZero.js000066400000000000000000000003371516525472400214140ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2015/SecFromTime.js000066400000000000000000000006221516525472400210440ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2015/Set.js000066400000000000000000000023121516525472400174200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2015/SetFunctionName.js000066400000000000000000000024101516525472400217260ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2015/SetIntegrityLevel.js000066400000000000000000000034541516525472400223170ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2015/SetValueInBuffer.js000066400000000000000000000073621516525472400220500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var isArrayBuffer = require('is-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32 }; var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); var integerToNBytes = require('../helpers/integerToNBytes'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); // https://262.ecma-international.org/6.0/#sec-setvalueinbuffer module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a number'); } if (arguments.length > 4 && typeof arguments[4] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Assert: Type(value) is Number. // 5. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. // 6. Assert: block is not undefined. var elementSize = tableTAO.size['$' + type]; // step 7 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 4 ? arguments[4] : defaultEndianness === 'little'; // step 8 var rawBytes; if (type === 'Float32') { // step 1 rawBytes = valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 rawBytes = valueToFloat64Bytes(value, isLittleEndian); } else { var n = elementSize; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c rawBytes = integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 } // 12. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); // 13. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2015/SpeciesConstructor.js000066400000000000000000000015131516525472400225300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2015/SplitMatch.js000066400000000000000000000014431516525472400207410ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2015/StrictEqualityComparison.js000066400000000000000000000004761516525472400237170ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2015/StringCreate.js000066400000000000000000000020631516525472400212620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2015/StringGetIndexProperty.js000066400000000000000000000024371516525472400233400ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $charAt = callBound('String.prototype.charAt'); var isString = require('is-string'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var unbox = require('unbox-primitive'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-stringgetindexproperty module.exports = function StringGetIndexProperty(S, P) { if (typeof S === 'string' || !isString(S)) { throw new $TypeError('Assertion failed: `S` must be a boxed String Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index)) { return void undefined; } var str = unbox(S); var len = str.length; if (index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(str, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2015/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2015/TestIntegrityLevel.js000066400000000000000000000022671516525472400225040ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2015/TimeClip.js000066400000000000000000000006671516525472400204060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2015/TimeFromYear.js000066400000000000000000000004051516525472400212310ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2015/TimeWithinDay.js000066400000000000000000000003671516525472400214140ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2015/ToBoolean.js000066400000000000000000000002021516525472400205430ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2015/ToDateString.js000066400000000000000000000010071516525472400212340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2015/ToInt16.js000066400000000000000000000003771516525472400201020ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2015/ToInt32.js000066400000000000000000000002551516525472400200730ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2015/ToInt8.js000066400000000000000000000003621516525472400200150ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2015/ToInteger.js000066400000000000000000000004141516525472400205660ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/6.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); return ES5ToInteger(number); }; ljharb-es-abstract-babee05/2015/ToLength.js000066400000000000000000000006241516525472400204150ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2015/ToNumber.js000066400000000000000000000027371516525472400204330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2015/ToObject.js000066400000000000000000000001761516525472400204040ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2015/ToPrimitive.js000066400000000000000000000004321516525472400211410ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2015/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230660ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2015/ToPropertyKey.js000066400000000000000000000006201516525472400214650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2015/ToString.js000066400000000000000000000006051516525472400204410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2015/ToUint16.js000066400000000000000000000011371516525472400202620ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2015/ToUint32.js000066400000000000000000000002571516525472400202620ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2015/ToUint8.js000066400000000000000000000011621516525472400202010ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2015/ToUint8Clamp.js000066400000000000000000000010101516525472400211460ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2015/Type.js000066400000000000000000000003641516525472400176130ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2015/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2015/ValidateTypedArray.js000066400000000000000000000014321516525472400224250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2015/WeekDay.js000066400000000000000000000003201516525472400202130ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2015/YearFromTime.js000066400000000000000000000006161516525472400212350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2015/abs.js000066400000000000000000000002461516525472400174360ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/2015/floor.js000066400000000000000000000003571516525472400200150ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/2015/max.js000066400000000000000000000002061516525472400174520ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2015/min.js000066400000000000000000000002061516525472400174500ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2015/modulo.js000066400000000000000000000002501516525472400201630ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2015/msFromTime.js000066400000000000000000000003751516525472400207560ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2015/tables/000077500000000000000000000000001516525472400176035ustar00rootroot00000000000000ljharb-es-abstract-babee05/2015/tables/typed-array-objects.js000066400000000000000000000011641516525472400240330ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#table-49 module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2015/thisBooleanValue.js000066400000000000000000000005031516525472400221310ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2015/thisNumberValue.js000066400000000000000000000005321516525472400220040ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2015/thisStringValue.js000066400000000000000000000004751516525472400220300ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2015/thisTimeValue.js000066400000000000000000000003471516525472400214560ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2016/000077500000000000000000000000001516525472400163325ustar00rootroot00000000000000ljharb-es-abstract-babee05/2016/AbstractEqualityComparison.js000066400000000000000000000022631516525472400242070ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/2016/AbstractRelationalComparison.js000066400000000000000000000030501516525472400244770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var isPrefixOf = require('../helpers/isPrefixOf'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/5.1/#sec-11.8.5 // eslint-disable-next-line max-statements module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } var bothStrings = typeof px === 'string' && typeof py === 'string'; if (!bothStrings) { var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal } if (isPrefixOf(py, px)) { return false; } if (isPrefixOf(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f }; ljharb-es-abstract-babee05/2016/AdvanceStringIndex.js000066400000000000000000000023341516525472400224120ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); // https://262.ecma-international.org/6.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var first = $charCodeAt(S, index); if (!isLeadingSurrogate(first)) { return index + 1; } var second = $charCodeAt(S, index + 1); if (!isTrailingSurrogate(second)) { return index + 1; } return index + 2; }; ljharb-es-abstract-babee05/2016/ArrayCreate.js000066400000000000000000000026251516525472400210770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2016/ArraySetLength.js000066400000000000000000000045661516525472400215770ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2016/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2016/Call.js000066400000000000000000000011351516525472400175430ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2016/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2016/Canonicalize.js000066400000000000000000000022421516525472400212670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2016/CharacterRange.js000066400000000000000000000024751516525472400215510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2016/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2016/CompletionRecord.js000066400000000000000000000025141516525472400221420ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2016/CreateDataProperty.js000066400000000000000000000013231516525472400224310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2016/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2016/CreateHTML.js000066400000000000000000000015051516525472400205610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2016/CreateIterResultObject.js000066400000000000000000000005351516525472400232500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2016/CreateListFromArrayLike.js000066400000000000000000000025001516525472400233540ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; // https://262.ecma-international.org/6.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = ToLength(Get(obj, 'length')); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2016/CreateMethodProperty.js000066400000000000000000000016601516525472400230040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2016/DateFromTime.js000066400000000000000000000017341516525472400212150ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2016/Day.js000066400000000000000000000003521516525472400174050ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2016/DayFromYear.js000066400000000000000000000004001516525472400210440ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2016/DayWithinYear.js000066400000000000000000000004361516525472400214140ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2016/DaysInYear.js000066400000000000000000000004551516525472400207040ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2016/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2016/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2016/DetachArrayBuffer.js000066400000000000000000000023511516525472400222120ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isArrayBuffer = require('is-array-buffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; // node 11.7+ } catch (e) { /**/ } // https://262.ecma-international.org/6.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2016/EnumerableOwnNames.js000066400000000000000000000005711516525472400224220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-enumerableownnames module.exports = function EnumerableOwnNames(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return keys(O); }; ljharb-es-abstract-babee05/2016/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2016/Get.js000066400000000000000000000010701516525472400174050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2016/GetGlobalObject.js000066400000000000000000000003061516525472400216560ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2016/GetIterator.js000066400000000000000000000013631516525472400211240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var isObject = require('es-object-atoms/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/6.0/#sec-getiterator module.exports = function GetIterator(obj, method) { var actualMethod = method; if (arguments.length < 2) { actualMethod = getIteratorMethod(ES, obj); } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; }; ljharb-es-abstract-babee05/2016/GetMethod.js000066400000000000000000000012541516525472400205520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2016/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2016/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2016/GetSubstitution.js000066400000000000000000000062751516525472400220560ustar00rootroot00000000000000 'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $parseInt = GetIntrinsic('%parseInt%'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var regexTester = require('safe-regex-test'); var callBound = require('call-bound'); var every = require('../helpers/every'); var isDigit = regexTester(/^[0-9]$/); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var IsArray = require('./IsArray'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // https://262.ecma-international.org/6.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2016/GetV.js000066400000000000000000000007541516525472400175430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2016/GetValueFromBuffer.js000066400000000000000000000063101516525472400223620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var defaultEndianness = require('../helpers/defaultEndianness'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var isUnsignedElementType = function isUnsignedElementType(type) { return $charAt(type, 0) === 'U'; }; // https://262.ecma-international.org/6.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string') { throw new $TypeError('Assertion failed: `type` must be a string'); } if (arguments.length > 3 && typeof arguments[3] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } // 6. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. var rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 3 ? arguments[3] : defaultEndianness === 'little'; // step 7 if (!isLittleEndian) { $reverse(rawValue); // step 8 } var bytes = $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize); if (type === 'Float32') { // step 3 return bytesAsFloat32(bytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(bytes); } return bytesAsInteger(bytes, elementSize, isUnsignedElementType(type), false); }; ljharb-es-abstract-babee05/2016/HasOwnProperty.js000066400000000000000000000010241516525472400216310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2016/HasProperty.js000066400000000000000000000007471516525472400211600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2016/HourFromTime.js000066400000000000000000000005761516525472400212600ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2016/InLeapYear.js000066400000000000000000000007161516525472400206650ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2016/InstanceofOperator.js000066400000000000000000000016371516525472400225040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2016/IntegerIndexedElementGet.js000066400000000000000000000034651516525472400235500ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/6.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 10 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsInteger(index) || isNegativeZero(index)) { return void undefined; // steps 5 - 6 } var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var offset = typedArrayByteOffset(O); // step 9 var elementType = tableTAO.name['$' + arrayTypeName]; // step 13 var elementSize = tableTAO.size['$' + elementType]; // step 11 var indexedPosition = (index * elementSize) + offset; // step 12 return GetValueFromBuffer(buffer, indexedPosition, elementType); // step 14 }; ljharb-es-abstract-babee05/2016/IntegerIndexedElementSet.js000066400000000000000000000036371516525472400235650ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToNumber = require('./ToNumber'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/6.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 12 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2 } var numValue = ToNumber(value); // step 3 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsInteger(index) || isNegativeZero(index)) { return false; // steps 7 - 8 } var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var offset = typedArrayByteOffset(O); // step 11 var elementType = tableTAO.name['$' + arrayTypeName]; // step 15 var elementSize = tableTAO.size['$' + elementType]; // step 13 var indexedPosition = (index * elementSize) + offset; // step 14 SetValueInBuffer(buffer, indexedPosition, elementType, numValue); // step 16 return true; // step 17 }; ljharb-es-abstract-babee05/2016/InternalizeJSONProperty.js000066400000000000000000000041271516525472400234170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnNames = require('./EnumerableOwnNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/6.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 3 var isArray = IsArray(val); // step 3.a if (isArray) { // step 3.c var I = 0; // step 3.c.i var len = ToLength(Get(val, 'length')); // step 3.b.ii while (I < len) { // step 3.b.iv var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 3.b.iv.1 if (typeof newElement === 'undefined') { // step 3.b.iv.3 delete val[ToString(I)]; // step 3.b.iv.3.a } else { // step 3.b.iv.4 CreateDataProperty(val, ToString(I), newElement); // step 3.b.iv.4.a } I += 1; // step 3.b.iv.6 } } else { var keys = EnumerableOwnNames(val); // step 3.d.i forEach(keys, function (P) { // step 3.d.iii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 3.d.iii.1 if (typeof newElement === 'undefined') { // step 3.d.iii.3 delete val[P]; // step 3.d.iii.3.a } else { // step 3.d.iii.4 CreateDataProperty(val, P, newElement); // step 3.d.iii.4.a } }); } } return Call(reviver, holder, [name, val]); // step 4 }; ljharb-es-abstract-babee05/2016/Invoke.js000066400000000000000000000012371516525472400201260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2016/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2016/IsArray.js000066400000000000000000000001661516525472400202450ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2016/IsCallable.js000066400000000000000000000001541516525472400206630ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2016/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250510ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2016/IsConcatSpreadable.js000066400000000000000000000011741516525472400223610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2016/IsConstructor.js000066400000000000000000000021701516525472400215110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2016/IsDataDescriptor.js000066400000000000000000000010611516525472400220720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2016/IsDetachedBuffer.js000066400000000000000000000013371516525472400220230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var isArrayBuffer = require('is-array-buffer'); var availableTypedArrays = require('available-typed-arrays')(); // https://262.ecma-international.org/6.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ($byteLength(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2016/IsExtensible.js000066400000000000000000000007701516525472400212720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2016/IsGenericDescriptor.js000066400000000000000000000012201516525472400225720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2016/IsInteger.js000066400000000000000000000003201516525472400205540ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2016/IsPromise.js000066400000000000000000000007451516525472400206100ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2016/IsPropertyDescriptor.js000066400000000000000000000004671516525472400230560ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete this var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type module.exports = function IsPropertyDescriptor(Desc) { return isPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2016/IsPropertyKey.js000066400000000000000000000003371516525472400214640ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2016/IsRegExp.js000066400000000000000000000010721516525472400203560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2016/IsWordChar.js000066400000000000000000000021011516525472400206670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var every = require('../helpers/every'); var regexTester = require('safe-regex-test'); var isChar = function isChar(c) { return typeof c === 'string' && c.length === 1; }; var isWordCharacter = regexTester(/^[a-zA-Z0-9_]$/); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 return isWordCharacter(c); // steps 3-4 }; ljharb-es-abstract-babee05/2016/IterableToArrayLike.js000066400000000000000000000016611516525472400225320ustar00rootroot00000000000000'use strict'; var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var GetIterator = require('./GetIterator'); var GetMethod = require('./GetMethod'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ToObject = require('./ToObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/7.0/#sec-iterabletoarraylike module.exports = function IterableToArrayLike(items) { var usingIterator = getIteratorMethod(ES, items); if (typeof usingIterator !== 'undefined') { var iterator = GetIterator(items, usingIterator); var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; } return ToObject(items); }; ljharb-es-abstract-babee05/2016/IteratorClose.js000066400000000000000000000033441516525472400214530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2016/IteratorComplete.js000066400000000000000000000007131516525472400221530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2016/IteratorNext.js000066400000000000000000000007061516525472400213230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2016/IteratorStep.js000066400000000000000000000005341516525472400213170ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2016/IteratorValue.js000066400000000000000000000006241516525472400214600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2016/MakeDate.js000066400000000000000000000005161516525472400203450ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2016/MakeDay.js000066400000000000000000000016321516525472400202050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2016/MakeTime.js000066400000000000000000000013001516525472400203560ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2016/MinFromTime.js000066400000000000000000000006141516525472400210570ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2016/MonthFromTime.js000066400000000000000000000021511516525472400214170ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2016/NewPromiseCapability.js000066400000000000000000000023141516525472400227620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2016/NormalCompletion.js000066400000000000000000000003551516525472400221550ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2016/ObjectCreate.js000066400000000000000000000024571516525472400212320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/6.0/#sec-objectcreate module.exports = function ObjectCreate(proto, internalSlotsList) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 if (arguments.length >= 2 && !IsArray(slots)) { throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); } var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (slots.length > 0) { forEach(slots, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; // step 6 }; ljharb-es-abstract-babee05/2016/ObjectDefineProperties.js000066400000000000000000000026331516525472400232720ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2016/OrdinaryCreateFromConstructor.js000066400000000000000000000014411516525472400246750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var ObjectCreate = require('./ObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return ObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2016/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240200ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2016/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233510ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2016/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2016/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2016/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2016/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2016/QuoteJSONString.js000066400000000000000000000024661516525472400216560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var $strSlice = callBound('String.prototype.slice'); var $strSplit = callBound('String.prototype.split'); // https://262.ecma-international.org/6.0/#sec-quotejsonstring var escapes = { '\u0008': 'b', '\u000C': 'f', '\u000A': 'n', '\u000D': 'r', '\u0009': 't' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(value, ''), function (C) { if (C === '"' || C === '\\') { product += '\u005C' + C; } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { var abbrev = escapes[C]; product += '\u005C' + abbrev; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20) { product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); } else { product += C; } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2016/RegExpCreate.js000066400000000000000000000012031516525472400212020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2016/RegExpExec.js000066400000000000000000000014761516525472400206770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2016/RequireObjectCoercible.js000066400000000000000000000001231516525472400232370ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2016/SameValue.js000066400000000000000000000004701516525472400205530ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2016/SameValueNonNumber.js000066400000000000000000000006221516525472400223760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/7.0/#sec-samevaluenonnumber module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number' || typeof x !== typeof y) { throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2016/SameValueZero.js000066400000000000000000000003371516525472400214150ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2016/SecFromTime.js000066400000000000000000000006221516525472400210450ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2016/Set.js000066400000000000000000000023121516525472400174210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2016/SetFunctionName.js000066400000000000000000000024101516525472400217270ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2016/SetIntegrityLevel.js000066400000000000000000000034541516525472400223200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2016/SetValueInBuffer.js000066400000000000000000000073621516525472400220510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var isArrayBuffer = require('is-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32 }; var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); var integerToNBytes = require('../helpers/integerToNBytes'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); // https://262.ecma-international.org/6.0/#sec-setvalueinbuffer module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value) { if (!isArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a number'); } if (arguments.length > 4 && typeof arguments[4] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Assert: Type(value) is Number. // 5. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. // 6. Assert: block is not undefined. var elementSize = tableTAO.size['$' + type]; // step 7 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 4 ? arguments[4] : defaultEndianness === 'little'; // step 8 var rawBytes; if (type === 'Float32') { // step 1 rawBytes = valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 rawBytes = valueToFloat64Bytes(value, isLittleEndian); } else { var n = elementSize; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c rawBytes = integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 } // 12. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); // 13. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2016/SpeciesConstructor.js000066400000000000000000000015131516525472400225310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2016/SplitMatch.js000066400000000000000000000014431516525472400207420ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2016/StrictEqualityComparison.js000066400000000000000000000004761516525472400237200ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2016/StringCreate.js000066400000000000000000000020631516525472400212630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2016/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2016/TestIntegrityLevel.js000066400000000000000000000022671516525472400225050ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2016/TimeClip.js000066400000000000000000000006671516525472400204070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2016/TimeFromYear.js000066400000000000000000000004051516525472400212320ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2016/TimeWithinDay.js000066400000000000000000000003671516525472400214150ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2016/ToBoolean.js000066400000000000000000000002021516525472400205440ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2016/ToDateString.js000066400000000000000000000010071516525472400212350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2016/ToInt16.js000066400000000000000000000003771516525472400201030ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2016/ToInt32.js000066400000000000000000000002551516525472400200740ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2016/ToInt8.js000066400000000000000000000003621516525472400200160ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2016/ToInteger.js000066400000000000000000000004141516525472400205670ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/6.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); return ES5ToInteger(number); }; ljharb-es-abstract-babee05/2016/ToLength.js000066400000000000000000000006241516525472400204160ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2016/ToNumber.js000066400000000000000000000027371516525472400204340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2016/ToObject.js000066400000000000000000000001761516525472400204050ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2016/ToPrimitive.js000066400000000000000000000004321516525472400211420ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2016/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230670ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2016/ToPropertyKey.js000066400000000000000000000006201516525472400214660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2016/ToString.js000066400000000000000000000006051516525472400204420ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2016/ToUint16.js000066400000000000000000000011371516525472400202630ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2016/ToUint32.js000066400000000000000000000002571516525472400202630ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2016/ToUint8.js000066400000000000000000000011621516525472400202020ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2016/ToUint8Clamp.js000066400000000000000000000010101516525472400211470ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2016/Type.js000066400000000000000000000003641516525472400176140ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2016/TypedArrayCreate.js000066400000000000000000000032261516525472400221030ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2016/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234170ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2016/UTF16Decode.js000066400000000000000000000014651516525472400206070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); // https://262.ecma-international.org/7.0/#sec-utf16decode var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair module.exports = function UTF16Decode(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2016/UTF16Encoding.js000066400000000000000000000012721516525472400211460ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/7.0/#sec-utf16encoding module.exports = function UTF16Encoding(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2016/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2016/ValidateTypedArray.js000066400000000000000000000014321516525472400224260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2016/WeekDay.js000066400000000000000000000003201516525472400202140ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2016/YearFromTime.js000066400000000000000000000006161516525472400212360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2016/abs.js000066400000000000000000000002461516525472400174370ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/2016/floor.js000066400000000000000000000003571516525472400200160ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/2016/max.js000066400000000000000000000002061516525472400174530ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2016/min.js000066400000000000000000000002061516525472400174510ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2016/modulo.js000066400000000000000000000002501516525472400201640ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2016/msFromTime.js000066400000000000000000000003751516525472400207570ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2016/tables/000077500000000000000000000000001516525472400176045ustar00rootroot00000000000000ljharb-es-abstract-babee05/2016/tables/typed-array-objects.js000066400000000000000000000011641516525472400240340ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#table-49 module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2016/thisBooleanValue.js000066400000000000000000000005031516525472400221320ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2016/thisNumberValue.js000066400000000000000000000005321516525472400220050ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2016/thisStringValue.js000066400000000000000000000004751516525472400220310ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2016/thisTimeValue.js000066400000000000000000000003471516525472400214570ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2017/000077500000000000000000000000001516525472400163335ustar00rootroot00000000000000ljharb-es-abstract-babee05/2017/AbstractEqualityComparison.js000066400000000000000000000022631516525472400242100ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/2017/AbstractRelationalComparison.js000066400000000000000000000030501516525472400245000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var isPrefixOf = require('../helpers/isPrefixOf'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/5.1/#sec-11.8.5 // eslint-disable-next-line max-statements module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } var bothStrings = typeof px === 'string' && typeof py === 'string'; if (!bothStrings) { var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal } if (isPrefixOf(py, px)) { return false; } if (isPrefixOf(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f }; ljharb-es-abstract-babee05/2017/AdvanceStringIndex.js000066400000000000000000000023341516525472400224130ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); // https://262.ecma-international.org/6.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var first = $charCodeAt(S, index); if (!isLeadingSurrogate(first)) { return index + 1; } var second = $charCodeAt(S, index + 1); if (!isTrailingSurrogate(second)) { return index + 1; } return index + 2; }; ljharb-es-abstract-babee05/2017/ArrayCreate.js000066400000000000000000000026251516525472400211000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2017/ArraySetLength.js000066400000000000000000000045661516525472400216000ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2017/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2017/Call.js000066400000000000000000000011351516525472400175440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2017/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2017/Canonicalize.js000066400000000000000000000022421516525472400212700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2017/CharacterRange.js000066400000000000000000000024751516525472400215520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2017/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2017/CompletionRecord.js000066400000000000000000000025141516525472400221430ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2017/CreateDataProperty.js000066400000000000000000000013231516525472400224320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2017/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2017/CreateHTML.js000066400000000000000000000015051516525472400205620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2017/CreateIterResultObject.js000066400000000000000000000005351516525472400232510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2017/CreateListFromArrayLike.js000066400000000000000000000025001516525472400233550ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; // https://262.ecma-international.org/6.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = ToLength(Get(obj, 'length')); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2017/CreateMethodProperty.js000066400000000000000000000016601516525472400230050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2017/DateFromTime.js000066400000000000000000000017341516525472400212160ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2017/Day.js000066400000000000000000000003521516525472400174060ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2017/DayFromYear.js000066400000000000000000000004001516525472400210450ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2017/DayWithinYear.js000066400000000000000000000004361516525472400214150ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2017/DaysInYear.js000066400000000000000000000004551516525472400207050ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2017/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2017/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2017/DetachArrayBuffer.js000066400000000000000000000025511516525472400222150ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; // node 11.7+ } catch (e) { /**/ } // https://262.ecma-international.org/8.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2017/EnumerableOwnProperties.js000066400000000000000000000017541516525472400235200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var callBound = require('call-bound'); var safePushApply = require('safe-push-apply'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnProperties(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2017/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2017/Get.js000066400000000000000000000010701516525472400174060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2017/GetGlobalObject.js000066400000000000000000000003061516525472400216570ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2017/GetIterator.js000066400000000000000000000013631516525472400211250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var isObject = require('es-object-atoms/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/6.0/#sec-getiterator module.exports = function GetIterator(obj, method) { var actualMethod = method; if (arguments.length < 2) { actualMethod = getIteratorMethod(ES, obj); } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; }; ljharb-es-abstract-babee05/2017/GetMethod.js000066400000000000000000000012541516525472400205530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2017/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2017/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2017/GetSubstitution.js000066400000000000000000000062751516525472400220570ustar00rootroot00000000000000 'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $parseInt = GetIntrinsic('%parseInt%'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var regexTester = require('safe-regex-test'); var callBound = require('call-bound'); var every = require('../helpers/every'); var isDigit = regexTester(/^[0-9]$/); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var IsArray = require('./IsArray'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // https://262.ecma-international.org/6.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2017/GetV.js000066400000000000000000000007541516525472400175440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2017/GetValueFromBuffer.js000066400000000000000000000104461516525472400223700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumber = require('./RawBytesToNumber'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/8.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string') { throw new $TypeError('Assertion failed: `type` must be a string'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (typeof order !== 'string') { throw new $TypeError('Assertion failed: `order` must be a string'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('TODO: support SharedArrayBuffers'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumber(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2017/HasOwnProperty.js000066400000000000000000000010241516525472400216320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2017/HasProperty.js000066400000000000000000000007471516525472400211610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2017/HourFromTime.js000066400000000000000000000005761516525472400212610ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2017/InLeapYear.js000066400000000000000000000007161516525472400206660ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2017/InstanceofOperator.js000066400000000000000000000016371516525472400225050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2017/IntegerIndexedElementGet.js000066400000000000000000000035111516525472400235410ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 10 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsInteger(index) || isNegativeZero(index)) { return void undefined; // steps 5 - 6 } var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var offset = typedArrayByteOffset(O); // step 9 var elementType = tableTAO.name['$' + arrayTypeName]; // step 13 var elementSize = tableTAO.size['$' + elementType]; // step 11 var indexedPosition = (index * elementSize) + offset; // step 12 return GetValueFromBuffer(buffer, indexedPosition, elementType, true, 'Unordered'); // step 14 }; ljharb-es-abstract-babee05/2017/IntegerIndexedElementSet.js000066400000000000000000000036621516525472400235640ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToNumber = require('./ToNumber'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 12 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2 } var numValue = ToNumber(value); // step 3 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsInteger(index) || isNegativeZero(index)) { return false; // steps 7 - 8 } var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var offset = typedArrayByteOffset(O); // step 11 var elementType = tableTAO.name['$' + arrayTypeName]; // step 15 var elementSize = tableTAO.size['$' + elementType]; // step 13 var indexedPosition = (index * elementSize) + offset; // step 14 SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, 'Unordered'); // step 16 return true; // step 17 }; ljharb-es-abstract-babee05/2017/InternalizeJSONProperty.js000066400000000000000000000041711516525472400234170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnProperties = require('./EnumerableOwnProperties'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = ToLength(Get(val, 'length')); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnProperties(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2017/Invoke.js000066400000000000000000000012371516525472400201270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2017/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2017/IsArray.js000066400000000000000000000001661516525472400202460ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2017/IsCallable.js000066400000000000000000000001541516525472400206640ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2017/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250520ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2017/IsConcatSpreadable.js000066400000000000000000000011741516525472400223620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2017/IsConstructor.js000066400000000000000000000021701516525472400215120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2017/IsDataDescriptor.js000066400000000000000000000010611516525472400220730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2017/IsDetachedBuffer.js000066400000000000000000000017461516525472400220300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2017/IsExtensible.js000066400000000000000000000007701516525472400212730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2017/IsGenericDescriptor.js000066400000000000000000000012201516525472400225730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2017/IsInteger.js000066400000000000000000000003201516525472400205550ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2017/IsPromise.js000066400000000000000000000007451516525472400206110ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2017/IsPropertyDescriptor.js000066400000000000000000000004671516525472400230570ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete this var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type module.exports = function IsPropertyDescriptor(Desc) { return isPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2017/IsPropertyKey.js000066400000000000000000000003371516525472400214650ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2017/IsRegExp.js000066400000000000000000000010721516525472400203570ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2017/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2017/IsWordChar.js000066400000000000000000000025261516525472400207030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2017/IterableToList.js000066400000000000000000000010121516525472400215510ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/8.0/#sec-iterabletolist module.exports = function IterableToList(items, method) { var iterator = GetIterator(items, method); var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2017/IteratorClose.js000066400000000000000000000033441516525472400214540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2017/IteratorComplete.js000066400000000000000000000007131516525472400221540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2017/IteratorNext.js000066400000000000000000000007061516525472400213240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2017/IteratorStep.js000066400000000000000000000005341516525472400213200ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2017/IteratorValue.js000066400000000000000000000006241516525472400214610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2017/MakeDate.js000066400000000000000000000005161516525472400203460ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2017/MakeDay.js000066400000000000000000000016321516525472400202060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2017/MakeTime.js000066400000000000000000000013001516525472400203570ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2017/MinFromTime.js000066400000000000000000000006141516525472400210600ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2017/MonthFromTime.js000066400000000000000000000021511516525472400214200ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2017/NewPromiseCapability.js000066400000000000000000000023141516525472400227630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2017/NormalCompletion.js000066400000000000000000000003551516525472400221560ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2017/NumberToRawBytes.js000066400000000000000000000034331516525472400221100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#table-50 var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32 }; // https://262.ecma-international.org/8.0/#sec-numbertorawbytes module.exports = function NumberToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a Number'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2017/ObjectCreate.js000066400000000000000000000024571516525472400212330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/6.0/#sec-objectcreate module.exports = function ObjectCreate(proto, internalSlotsList) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 if (arguments.length >= 2 && !IsArray(slots)) { throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); } var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (slots.length > 0) { forEach(slots, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; // step 6 }; ljharb-es-abstract-babee05/2017/ObjectDefineProperties.js000066400000000000000000000026331516525472400232730ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2017/OrdinaryCreateFromConstructor.js000066400000000000000000000014411516525472400246760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var ObjectCreate = require('./ObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return ObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2017/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240210ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2017/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233520ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2017/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2017/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2017/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2017/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2017/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2017/QuoteJSONString.js000066400000000000000000000024661516525472400216570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var $strSlice = callBound('String.prototype.slice'); var $strSplit = callBound('String.prototype.split'); // https://262.ecma-international.org/6.0/#sec-quotejsonstring var escapes = { '\u0008': 'b', '\u000C': 'f', '\u000A': 'n', '\u000D': 'r', '\u0009': 't' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(value, ''), function (C) { if (C === '"' || C === '\\') { product += '\u005C' + C; } else if (C === '\u0008' || C === '\u000C' || C === '\u000A' || C === '\u000D' || C === '\u0009') { var abbrev = escapes[C]; product += '\u005C' + abbrev; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20) { product += '\u005Cu' + $toLowerCase($strSlice('0000' + $numberToString(cCharCode, 16), -4)); } else { product += C; } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2017/RawBytesToNumber.js000066400000000000000000000037211516525472400221100ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var $charAt = callBound('String.prototype.charAt'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-rawbytestonumber module.exports = function RawBytesToNumber(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, $charAt(type, 0) === 'U', false); }; ljharb-es-abstract-babee05/2017/RegExpCreate.js000066400000000000000000000012031516525472400212030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2017/RegExpExec.js000066400000000000000000000014761516525472400207000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2017/RequireObjectCoercible.js000066400000000000000000000001231516525472400232400ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2017/SameValue.js000066400000000000000000000004701516525472400205540ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2017/SameValueNonNumber.js000066400000000000000000000006221516525472400223770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/7.0/#sec-samevaluenonnumber module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number' || typeof x !== typeof y) { throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2017/SameValueZero.js000066400000000000000000000003371516525472400214160ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2017/SecFromTime.js000066400000000000000000000006221516525472400210460ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2017/Set.js000066400000000000000000000023121516525472400174220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2017/SetFunctionName.js000066400000000000000000000024101516525472400217300ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2017/SetIntegrityLevel.js000066400000000000000000000034541516525472400223210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2017/SetValueInBuffer.js000066400000000000000000000071571516525472400220540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumberToRawBytes = require('./NumberToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a number'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Assert: Type(value) is Number. // 5. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 6 // 7. If isLittleEndian is not present, set isLittleEndian to to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 8 var rawBytes = NumberToRawBytes(type, value, isLittleEndian); // step 8 if (isSAB) { // step 9 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 10. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 11. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2017/SpeciesConstructor.js000066400000000000000000000015131516525472400225320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2017/SplitMatch.js000066400000000000000000000014431516525472400207430ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2017/StrictEqualityComparison.js000066400000000000000000000004761516525472400237210ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2017/StringCreate.js000066400000000000000000000020631516525472400212640ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2017/StringGetOwnProperty.js000066400000000000000000000025171516525472400230350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); // https://262.ecma-international.org/8.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2017/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2017/TestIntegrityLevel.js000066400000000000000000000022671516525472400225060ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2017/TimeClip.js000066400000000000000000000006671516525472400204100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2017/TimeFromYear.js000066400000000000000000000004051516525472400212330ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2017/TimeWithinDay.js000066400000000000000000000003671516525472400214160ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2017/ToBoolean.js000066400000000000000000000002021516525472400205450ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2017/ToDateString.js000066400000000000000000000010071516525472400212360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2017/ToIndex.js000066400000000000000000000011541516525472400202440ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToInteger = require('./ToInteger'); var ToLength = require('./ToLength'); var SameValueZero = require('./SameValueZero'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToInteger(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValueZero(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2017/ToInt16.js000066400000000000000000000003771516525472400201040ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2017/ToInt32.js000066400000000000000000000002551516525472400200750ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2017/ToInt8.js000066400000000000000000000003621516525472400200170ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2017/ToInteger.js000066400000000000000000000004141516525472400205700ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/6.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); return ES5ToInteger(number); }; ljharb-es-abstract-babee05/2017/ToLength.js000066400000000000000000000006241516525472400204170ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2017/ToNumber.js000066400000000000000000000027371516525472400204350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2017/ToObject.js000066400000000000000000000001761516525472400204060ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2017/ToPrimitive.js000066400000000000000000000004321516525472400211430ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2017/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230700ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2017/ToPropertyKey.js000066400000000000000000000006201516525472400214670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2017/ToString.js000066400000000000000000000006051516525472400204430ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2017/ToUint16.js000066400000000000000000000011371516525472400202640ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2017/ToUint32.js000066400000000000000000000002571516525472400202640ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2017/ToUint8.js000066400000000000000000000011621516525472400202030ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2017/ToUint8Clamp.js000066400000000000000000000010101516525472400211500ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2017/Type.js000066400000000000000000000003641516525472400176150ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2017/TypedArrayCreate.js000066400000000000000000000032261516525472400221040ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2017/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234200ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2017/UTF16Decode.js000066400000000000000000000014651516525472400206100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); // https://262.ecma-international.org/7.0/#sec-utf16decode var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair module.exports = function UTF16Decode(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2017/UTF16Encoding.js000066400000000000000000000012721516525472400211470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/7.0/#sec-utf16encoding module.exports = function UTF16Encoding(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2017/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2017/ValidateAtomicAccess.js000066400000000000000000000016041516525472400227020ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var isTypedArray = require('is-typed-array'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/8.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); // step 1 } var accessIndex = ToIndex(requestIndex); // step 2 var length = typedArrayLength(typedArray); // step 3 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 5 } return accessIndex; // step 6 }; ljharb-es-abstract-babee05/2017/ValidateTypedArray.js000066400000000000000000000014321516525472400224270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2017/WeekDay.js000066400000000000000000000003201516525472400202150ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2017/WordCharacters.js000066400000000000000000000026731516525472400216140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2017/YearFromTime.js000066400000000000000000000006161516525472400212370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2017/abs.js000066400000000000000000000002461516525472400174400ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/2017/floor.js000066400000000000000000000003571516525472400200170ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/2017/max.js000066400000000000000000000002061516525472400174540ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2017/min.js000066400000000000000000000002061516525472400174520ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2017/modulo.js000066400000000000000000000002501516525472400201650ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2017/msFromTime.js000066400000000000000000000003751516525472400207600ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2017/tables/000077500000000000000000000000001516525472400176055ustar00rootroot00000000000000ljharb-es-abstract-babee05/2017/tables/typed-array-objects.js000066400000000000000000000011641516525472400240350ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/8.0/#table-49 module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2017/thisBooleanValue.js000066400000000000000000000005031516525472400221330ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2017/thisNumberValue.js000066400000000000000000000005321516525472400220060ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2017/thisStringValue.js000066400000000000000000000004751516525472400220320ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2017/thisTimeValue.js000066400000000000000000000003471516525472400214600ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2018/000077500000000000000000000000001516525472400163345ustar00rootroot00000000000000ljharb-es-abstract-babee05/2018/AbstractEqualityComparison.js000066400000000000000000000022631516525472400242110ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/2018/AbstractRelationalComparison.js000066400000000000000000000027561516525472400245150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var IsStringPrefix = require('./IsStringPrefix'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { if (IsStringPrefix(py, px)) { return false; } if (IsStringPrefix(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f } var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal }; ljharb-es-abstract-babee05/2018/AdvanceStringIndex.js000066400000000000000000000023341516525472400224140ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); // https://262.ecma-international.org/6.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var first = $charCodeAt(S, index); if (!isLeadingSurrogate(first)) { return index + 1; } var second = $charCodeAt(S, index + 1); if (!isTrailingSurrogate(second)) { return index + 1; } return index + 2; }; ljharb-es-abstract-babee05/2018/ArrayCreate.js000066400000000000000000000026251516525472400211010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2018/ArraySetLength.js000066400000000000000000000045661516525472400216010ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2018/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2018/AsyncIteratorClose.js000066400000000000000000000034161516525472400224530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/9.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return new $Promise(function (resolve) { var ret = GetMethod(iterator, 'return'); // step 4 if (typeof ret === 'undefined') { resolve(completion); // step 5 } else { resolve($then( new $Promise(function (resolve2) { // process.exit(42); resolve2(Call(ret, iterator, [])); // step 6 }), function (innerResult) { if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; }, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 8 } else { throw e; // step 9 } } )); } }); }; ljharb-es-abstract-babee05/2018/Call.js000066400000000000000000000011351516525472400175450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2018/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2018/Canonicalize.js000066400000000000000000000022421516525472400212710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2018/CharacterRange.js000066400000000000000000000024751516525472400215530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2018/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2018/CompletionRecord.js000066400000000000000000000025141516525472400221440ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2018/CopyDataProperties.js000066400000000000000000000034421516525472400224560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var every = require('../helpers/every'); var forEach = require('../helpers/forEach'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataProperty = require('./CreateDataProperty'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); // https://262.ecma-international.org/9.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var fromObj = ToObject(source); var sourceKeys = OwnPropertyKeys(fromObj); forEach(sourceKeys, function (nextKey) { var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); var enumerable = $isEnumerable(fromObj, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && IsInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(fromObj, nextKey); CreateDataProperty(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2018/CreateAsyncFromSyncIterator.js000066400000000000000000000127501516525472400242730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); var IteratorValue = require('./IteratorValue'); var ObjectCreate = require('./ObjectCreate'); var PromiseResolve = require('./PromiseResolve'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); var AsyncFromSyncIteratorContinuation = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $TypeError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/9.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` is not an Iterator Record'); } // var asyncIterator = ObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = ObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2018/CreateDataProperty.js000066400000000000000000000013231516525472400224330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2018/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2018/CreateHTML.js000066400000000000000000000015051516525472400205630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2018/CreateIterResultObject.js000066400000000000000000000005351516525472400232520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2018/CreateListFromArrayLike.js000066400000000000000000000025001516525472400233560ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; // https://262.ecma-international.org/6.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = ToLength(Get(obj, 'length')); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2018/CreateMethodProperty.js000066400000000000000000000016601516525472400230060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2018/DateFromTime.js000066400000000000000000000017341516525472400212170ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2018/DateString.js000066400000000000000000000017271516525472400207450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2018/Day.js000066400000000000000000000003521516525472400174070ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2018/DayFromYear.js000066400000000000000000000004001516525472400210460ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2018/DayWithinYear.js000066400000000000000000000004361516525472400214160ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2018/DaysInYear.js000066400000000000000000000004551516525472400207060ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2018/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2018/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2018/DetachArrayBuffer.js000066400000000000000000000032571516525472400222220ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2018/EnumerableOwnPropertyNames.js000066400000000000000000000017571516525472400242000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnPropertyNames(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2018/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2018/Get.js000066400000000000000000000010701516525472400174070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2018/GetGlobalObject.js000066400000000000000000000003061516525472400216600ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2018/GetIterator.js000066400000000000000000000013631516525472400211260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var isObject = require('es-object-atoms/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/6.0/#sec-getiterator module.exports = function GetIterator(obj, method) { var actualMethod = method; if (arguments.length < 2) { actualMethod = getIteratorMethod(ES, obj); } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; }; ljharb-es-abstract-babee05/2018/GetMethod.js000066400000000000000000000012541516525472400205540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2018/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2018/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2018/GetSubstitution.js000066400000000000000000000076571516525472400220650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var every = require('../helpers/every'); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var $indexOf = callBound('String.prototype.indexOf'); var $parseInt = parseInt; var isDigit = regexTester(/^[0-9]$/); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // http://262.ecma-international.org/9.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; if (typeof namedCaptures !== 'undefined') { namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign } var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else if (next === '<') { if (typeof namedCaptures === 'undefined') { result += '$<'; i += 2; } else { var endIndex = $indexOf(replacement, '>', i); if (endIndex > -1) { var groupName = $strSlice(replacement, i + '$<'.length, endIndex); var capture = Get(namedCaptures, groupName); if (typeof capture !== 'undefined') { result += ToString(capture); } i += ('<' + groupName + '>').length; } } } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2018/GetV.js000066400000000000000000000007541516525472400175450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2018/GetValueFromBuffer.js000066400000000000000000000104461516525472400223710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumber = require('./RawBytesToNumber'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/8.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string') { throw new $TypeError('Assertion failed: `type` must be a string'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (typeof order !== 'string') { throw new $TypeError('Assertion failed: `order` must be a string'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('TODO: support SharedArrayBuffers'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumber(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2018/HasOwnProperty.js000066400000000000000000000010241516525472400216330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2018/HasProperty.js000066400000000000000000000007471516525472400211620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2018/HourFromTime.js000066400000000000000000000005761516525472400212620ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2018/InLeapYear.js000066400000000000000000000007161516525472400206670ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2018/InstanceofOperator.js000066400000000000000000000016371516525472400225060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2018/IntegerIndexedElementGet.js000066400000000000000000000035111516525472400235420ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 10 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsInteger(index) || isNegativeZero(index)) { return void undefined; // steps 5 - 6 } var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var offset = typedArrayByteOffset(O); // step 9 var elementType = tableTAO.name['$' + arrayTypeName]; // step 13 var elementSize = tableTAO.size['$' + elementType]; // step 11 var indexedPosition = (index * elementSize) + offset; // step 12 return GetValueFromBuffer(buffer, indexedPosition, elementType, true, 'Unordered'); // step 14 }; ljharb-es-abstract-babee05/2018/IntegerIndexedElementSet.js000066400000000000000000000036621516525472400235650ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToNumber = require('./ToNumber'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 12 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2 } var numValue = ToNumber(value); // step 3 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsInteger(index) || isNegativeZero(index)) { return false; // steps 7 - 8 } var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var offset = typedArrayByteOffset(O); // step 11 var elementType = tableTAO.name['$' + arrayTypeName]; // step 15 var elementSize = tableTAO.size['$' + elementType]; // step 13 var indexedPosition = (index * elementSize) + offset; // step 14 SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, 'Unordered'); // step 16 return true; // step 17 }; ljharb-es-abstract-babee05/2018/InternalizeJSONProperty.js000066400000000000000000000042021516525472400234130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/9.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = ToLength(Get(val, 'length')); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2018/Invoke.js000066400000000000000000000012371516525472400201300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2018/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2018/IsArray.js000066400000000000000000000001661516525472400202470ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2018/IsCallable.js000066400000000000000000000001541516525472400206650ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2018/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250530ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2018/IsConcatSpreadable.js000066400000000000000000000011741516525472400223630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2018/IsConstructor.js000066400000000000000000000021701516525472400215130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2018/IsDataDescriptor.js000066400000000000000000000010611516525472400220740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2018/IsDetachedBuffer.js000066400000000000000000000017461516525472400220310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2018/IsExtensible.js000066400000000000000000000007701516525472400212740ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2018/IsGenericDescriptor.js000066400000000000000000000012201516525472400225740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2018/IsInteger.js000066400000000000000000000003201516525472400205560ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2018/IsPromise.js000066400000000000000000000007451516525472400206120ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2018/IsPropertyKey.js000066400000000000000000000003371516525472400214660ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2018/IsRegExp.js000066400000000000000000000010721516525472400203600ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2018/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2018/IsStringPrefix.js000066400000000000000000000015261516525472400216160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPrefixOf = require('../helpers/isPrefixOf'); // var callBound = require('call-bound'); // var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/9.0/#sec-isstringprefix module.exports = function IsStringPrefix(p, q) { if (typeof p !== 'string') { throw new $TypeError('Assertion failed: "p" must be a String'); } if (typeof q !== 'string') { throw new $TypeError('Assertion failed: "q" must be a String'); } return isPrefixOf(p, q); /* if (p === q || p === '') { return true; } var pLength = p.length; var qLength = q.length; if (pLength >= qLength) { return false; } // assert: pLength < qLength for (var i = 0; i < pLength; i += 1) { if ($charAt(p, i) !== $charAt(q, i)) { return false; } } return true; */ }; ljharb-es-abstract-babee05/2018/IsWordChar.js000066400000000000000000000025261516525472400207040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2018/IterableToList.js000066400000000000000000000010121516525472400215520ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/8.0/#sec-iterabletolist module.exports = function IterableToList(items, method) { var iterator = GetIterator(items, method); var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2018/IteratorClose.js000066400000000000000000000033441516525472400214550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2018/IteratorComplete.js000066400000000000000000000007131516525472400221550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2018/IteratorNext.js000066400000000000000000000007061516525472400213250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2018/IteratorStep.js000066400000000000000000000005341516525472400213210ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2018/IteratorValue.js000066400000000000000000000006241516525472400214620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2018/MakeDate.js000066400000000000000000000005161516525472400203470ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2018/MakeDay.js000066400000000000000000000016321516525472400202070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2018/MakeTime.js000066400000000000000000000013001516525472400203600ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2018/MinFromTime.js000066400000000000000000000006141516525472400210610ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2018/MonthFromTime.js000066400000000000000000000021511516525472400214210ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2018/NewPromiseCapability.js000066400000000000000000000023141516525472400227640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2018/NormalCompletion.js000066400000000000000000000003551516525472400221570ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2018/NumberToRawBytes.js000066400000000000000000000034331516525472400221110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#table-50 var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32 }; // https://262.ecma-international.org/8.0/#sec-numbertorawbytes module.exports = function NumberToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a Number'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2018/NumberToString.js000066400000000000000000000006201516525472400216120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type module.exports = function NumberToString(m) { if (typeof m !== 'number') { throw new $TypeError('Assertion failed: "m" must be a String'); } return $String(m); }; ljharb-es-abstract-babee05/2018/ObjectCreate.js000066400000000000000000000024571516525472400212340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/6.0/#sec-objectcreate module.exports = function ObjectCreate(proto, internalSlotsList) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 if (arguments.length >= 2 && !IsArray(slots)) { throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); } var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (slots.length > 0) { forEach(slots, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; // step 6 }; ljharb-es-abstract-babee05/2018/ObjectDefineProperties.js000066400000000000000000000026331516525472400232740ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2018/OrdinaryCreateFromConstructor.js000066400000000000000000000014411516525472400246770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var ObjectCreate = require('./ObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return ObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2018/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240220ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2018/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233530ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2018/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2018/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2018/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2018/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2018/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2018/PromiseResolve.js000066400000000000000000000007721516525472400216560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2018/QuoteJSONString.js000066400000000000000000000017521516525472400216550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var UnicodeEscape = require('./UnicodeEscape'); var hasOwn = require('hasown'); // https://262.ecma-international.org/9.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(value, ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else if ($charCodeAt(C, 0) < 0x20) { product += UnicodeEscape(C); } else { product += C; } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2018/RawBytesToNumber.js000066400000000000000000000037211516525472400221110ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var $charAt = callBound('String.prototype.charAt'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-rawbytestonumber module.exports = function RawBytesToNumber(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, $charAt(type, 0) === 'U', false); }; ljharb-es-abstract-babee05/2018/RegExpCreate.js000066400000000000000000000012031516525472400212040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2018/RegExpExec.js000066400000000000000000000014761516525472400207010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2018/RequireObjectCoercible.js000066400000000000000000000001231516525472400232410ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2018/SameValue.js000066400000000000000000000004701516525472400205550ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2018/SameValueNonNumber.js000066400000000000000000000006221516525472400224000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/7.0/#sec-samevaluenonnumber module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number' || typeof x !== typeof y) { throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2018/SameValueZero.js000066400000000000000000000003371516525472400214170ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2018/SecFromTime.js000066400000000000000000000006221516525472400210470ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2018/Set.js000066400000000000000000000023121516525472400174230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2018/SetFunctionLength.js000066400000000000000000000017301516525472400222760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/9.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length < 0 || !isInteger(length)) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2018/SetFunctionName.js000066400000000000000000000024101516525472400217310ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2018/SetIntegrityLevel.js000066400000000000000000000034541516525472400223220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2018/SetValueInBuffer.js000066400000000000000000000071571516525472400220550ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumberToRawBytes = require('./NumberToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a number'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Assert: Type(value) is Number. // 5. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 6 // 7. If isLittleEndian is not present, set isLittleEndian to to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 8 var rawBytes = NumberToRawBytes(type, value, isLittleEndian); // step 8 if (isSAB) { // step 9 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 10. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 11. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2018/SpeciesConstructor.js000066400000000000000000000015131516525472400225330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2018/SplitMatch.js000066400000000000000000000014431516525472400207440ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2018/StrictEqualityComparison.js000066400000000000000000000004761516525472400237220ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2018/StringCreate.js000066400000000000000000000020631516525472400212650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2018/StringGetOwnProperty.js000066400000000000000000000025171516525472400230360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); // https://262.ecma-international.org/8.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2018/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2018/TestIntegrityLevel.js000066400000000000000000000022671516525472400225070ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2018/ThrowCompletion.js000066400000000000000000000003601516525472400220260ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2018/TimeClip.js000066400000000000000000000006671516525472400204110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2018/TimeFromYear.js000066400000000000000000000004051516525472400212340ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2018/TimeString.js000066400000000000000000000013401516525472400207550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); // https://262.ecma-international.org/9.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = HourFromTime(tv); var minute = MinFromTime(tv); var second = SecFromTime(tv); return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; }; ljharb-es-abstract-babee05/2018/TimeWithinDay.js000066400000000000000000000003671516525472400214170ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2018/TimeZoneString.js000066400000000000000000000031561516525472400216200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/9.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (typeof tv !== 'number' || isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); // steps 1 - 2 } // 3. Let offset be LocalTZA(tv, true). // 4. If offset ≥ 0, let offsetSign be "+"; otherwise, let offsetSign be "-". // 5. Let offsetMin be the String representation of MinFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 6. Let offsetHour be the String representation of HourFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 7. Let tzName be an implementation-defined string that is either the empty string or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-dependent timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 8. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until LocalTZA, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2018/ToBoolean.js000066400000000000000000000002021516525472400205460ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2018/ToDateString.js000066400000000000000000000010071516525472400212370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2018/ToIndex.js000066400000000000000000000011541516525472400202450ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToInteger = require('./ToInteger'); var ToLength = require('./ToLength'); var SameValueZero = require('./SameValueZero'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToInteger(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValueZero(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2018/ToInt16.js000066400000000000000000000003771516525472400201050ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2018/ToInt32.js000066400000000000000000000002551516525472400200760ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2018/ToInt8.js000066400000000000000000000003621516525472400200200ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2018/ToInteger.js000066400000000000000000000004141516525472400205710ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/6.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); return ES5ToInteger(number); }; ljharb-es-abstract-babee05/2018/ToLength.js000066400000000000000000000006241516525472400204200ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2018/ToNumber.js000066400000000000000000000027371516525472400204360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2018/ToObject.js000066400000000000000000000001761516525472400204070ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2018/ToPrimitive.js000066400000000000000000000004321516525472400211440ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2018/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230710ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2018/ToPropertyKey.js000066400000000000000000000006201516525472400214700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2018/ToString.js000066400000000000000000000006051516525472400204440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2018/ToUint16.js000066400000000000000000000011371516525472400202650ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2018/ToUint32.js000066400000000000000000000002571516525472400202650ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2018/ToUint8.js000066400000000000000000000011621516525472400202040ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2018/ToUint8Clamp.js000066400000000000000000000010101516525472400211510ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2018/Type.js000066400000000000000000000003641516525472400176160ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2018/TypedArrayCreate.js000066400000000000000000000032261516525472400221050ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2018/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234210ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2018/UTF16Decode.js000066400000000000000000000014651516525472400206110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); // https://262.ecma-international.org/7.0/#sec-utf16decode var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair module.exports = function UTF16Decode(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2018/UTF16Encoding.js000066400000000000000000000012721516525472400211500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/7.0/#sec-utf16encoding module.exports = function UTF16Encoding(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2018/UnicodeEscape.js000066400000000000000000000014251516525472400214030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/9.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + $strSlice('0000' + $toLowerCase($numberToString(n, 16)), -4); }; ljharb-es-abstract-babee05/2018/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2018/ValidateAtomicAccess.js000066400000000000000000000016041516525472400227030ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var isTypedArray = require('is-typed-array'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/8.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); // step 1 } var accessIndex = ToIndex(requestIndex); // step 2 var length = typedArrayLength(typedArray); // step 3 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 5 } return accessIndex; // step 6 }; ljharb-es-abstract-babee05/2018/ValidateTypedArray.js000066400000000000000000000014321516525472400224300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2018/WeekDay.js000066400000000000000000000003201516525472400202160ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2018/WordCharacters.js000066400000000000000000000026731516525472400216150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2018/YearFromTime.js000066400000000000000000000006161516525472400212400ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2018/abs.js000066400000000000000000000002461516525472400174410ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/2018/floor.js000066400000000000000000000003571516525472400200200ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/2018/max.js000066400000000000000000000002061516525472400174550ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2018/min.js000066400000000000000000000002061516525472400174530ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2018/modulo.js000066400000000000000000000002501516525472400201660ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2018/msFromTime.js000066400000000000000000000003751516525472400207610ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2018/tables/000077500000000000000000000000001516525472400176065ustar00rootroot00000000000000ljharb-es-abstract-babee05/2018/tables/typed-array-objects.js000066400000000000000000000011641516525472400240360ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/8.0/#table-49 module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2018/thisBooleanValue.js000066400000000000000000000005031516525472400221340ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2018/thisNumberValue.js000066400000000000000000000005321516525472400220070ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2018/thisStringValue.js000066400000000000000000000004751516525472400220330ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2018/thisSymbolValue.js000066400000000000000000000010161516525472400220220ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2018/thisTimeValue.js000066400000000000000000000003471516525472400214610ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2019/000077500000000000000000000000001516525472400163355ustar00rootroot00000000000000ljharb-es-abstract-babee05/2019/AbstractEqualityComparison.js000066400000000000000000000022631516525472400242120ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/2019/AbstractRelationalComparison.js000066400000000000000000000027561516525472400245160ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var IsStringPrefix = require('./IsStringPrefix'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { if (IsStringPrefix(py, px)) { return false; } if (IsStringPrefix(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f } var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal }; ljharb-es-abstract-babee05/2019/AddEntriesFromIterable.js000066400000000000000000000026101516525472400232100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2019/AdvanceStringIndex.js000066400000000000000000000023341516525472400224150ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); // https://262.ecma-international.org/6.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var first = $charCodeAt(S, index); if (!isLeadingSurrogate(first)) { return index + 1; } var second = $charCodeAt(S, index + 1); if (!isTrailingSurrogate(second)) { return index + 1; } return index + 2; }; ljharb-es-abstract-babee05/2019/ArrayCreate.js000066400000000000000000000026251516525472400211020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2019/ArraySetLength.js000066400000000000000000000045661516525472400216020ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2019/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2019/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2019/AsyncIteratorClose.js000066400000000000000000000034161516525472400224540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/9.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return new $Promise(function (resolve) { var ret = GetMethod(iterator, 'return'); // step 4 if (typeof ret === 'undefined') { resolve(completion); // step 5 } else { resolve($then( new $Promise(function (resolve2) { // process.exit(42); resolve2(Call(ret, iterator, [])); // step 6 }), function (innerResult) { if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; }, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 8 } else { throw e; // step 9 } } )); } }); }; ljharb-es-abstract-babee05/2019/Call.js000066400000000000000000000011351516525472400175460ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2019/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2019/Canonicalize.js000066400000000000000000000022421516525472400212720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2019/CharacterRange.js000066400000000000000000000024751516525472400215540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2019/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2019/CompletionRecord.js000066400000000000000000000025141516525472400221450ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2019/CopyDataProperties.js000066400000000000000000000034421516525472400224570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var every = require('../helpers/every'); var forEach = require('../helpers/forEach'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataProperty = require('./CreateDataProperty'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); // https://262.ecma-international.org/9.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var fromObj = ToObject(source); var sourceKeys = OwnPropertyKeys(fromObj); forEach(sourceKeys, function (nextKey) { var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); var enumerable = $isEnumerable(fromObj, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && IsInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(fromObj, nextKey); CreateDataProperty(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2019/CreateAsyncFromSyncIterator.js000066400000000000000000000107301516525472400242700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var ObjectCreate = require('./ObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/10.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); // step 1 } // var asyncIterator = ObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = ObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2019/CreateDataProperty.js000066400000000000000000000013231516525472400224340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2019/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2019/CreateHTML.js000066400000000000000000000015051516525472400205640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2019/CreateIterResultObject.js000066400000000000000000000005351516525472400232530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2019/CreateListFromArrayLike.js000066400000000000000000000025001516525472400233570ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object']; // https://262.ecma-international.org/6.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = ToLength(Get(obj, 'length')); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2019/CreateMethodProperty.js000066400000000000000000000016601516525472400230070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2019/DateFromTime.js000066400000000000000000000017341516525472400212200ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2019/DateString.js000066400000000000000000000017271516525472400207460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2019/Day.js000066400000000000000000000003521516525472400174100ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2019/DayFromYear.js000066400000000000000000000004001516525472400210470ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2019/DayWithinYear.js000066400000000000000000000004361516525472400214170ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2019/DaysInYear.js000066400000000000000000000004551516525472400207070ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2019/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2019/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2019/DetachArrayBuffer.js000066400000000000000000000032571516525472400222230ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2019/EnumerableOwnPropertyNames.js000066400000000000000000000017571516525472400242010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnPropertyNames(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2019/FlattenIntoArray.js000066400000000000000000000032041516525472400221200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = ToLength(Get(element, 'length')); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2019/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2019/Get.js000066400000000000000000000010701516525472400174100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2019/GetGlobalObject.js000066400000000000000000000003061516525472400216610ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2019/GetIterator.js000066400000000000000000000013631516525472400211270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var isObject = require('es-object-atoms/isObject'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/6.0/#sec-getiterator module.exports = function GetIterator(obj, method) { var actualMethod = method; if (arguments.length < 2) { actualMethod = getIteratorMethod(ES, obj); } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; }; ljharb-es-abstract-babee05/2019/GetMethod.js000066400000000000000000000012541516525472400205550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2019/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2019/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2019/GetSubstitution.js000066400000000000000000000076571516525472400220660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var every = require('../helpers/every'); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var $indexOf = callBound('String.prototype.indexOf'); var $parseInt = parseInt; var isDigit = regexTester(/^[0-9]$/); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // http://262.ecma-international.org/9.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; if (typeof namedCaptures !== 'undefined') { namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign } var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else if (next === '<') { if (typeof namedCaptures === 'undefined') { result += '$<'; i += 2; } else { var endIndex = $indexOf(replacement, '>', i); if (endIndex > -1) { var groupName = $strSlice(replacement, i + '$<'.length, endIndex); var capture = Get(namedCaptures, groupName); if (typeof capture !== 'undefined') { result += ToString(capture); } i += ('<' + groupName + '>').length; } } } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2019/GetV.js000066400000000000000000000007541516525472400175460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2019/GetValueFromBuffer.js000066400000000000000000000102741516525472400223710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumber = require('./RawBytesToNumber'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/10.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string') { throw new $TypeError('Assertion failed: `type` must be a string'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (typeof order !== 'string') { throw new $TypeError('Assertion failed: `order` must be a string'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumber(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2019/HasOwnProperty.js000066400000000000000000000010241516525472400216340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2019/HasProperty.js000066400000000000000000000007471516525472400211630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2019/HourFromTime.js000066400000000000000000000005761516525472400212630ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2019/InLeapYear.js000066400000000000000000000007161516525472400206700ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2019/InstanceofOperator.js000066400000000000000000000016371516525472400225070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2019/IntegerIndexedElementGet.js000066400000000000000000000035111516525472400235430ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 10 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsInteger(index) || isNegativeZero(index)) { return void undefined; // steps 5 - 6 } var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var offset = typedArrayByteOffset(O); // step 9 var elementType = tableTAO.name['$' + arrayTypeName]; // step 13 var elementSize = tableTAO.size['$' + elementType]; // step 11 var indexedPosition = (index * elementSize) + offset; // step 12 return GetValueFromBuffer(buffer, indexedPosition, elementType, true, 'Unordered'); // step 14 }; ljharb-es-abstract-babee05/2019/IntegerIndexedElementSet.js000066400000000000000000000036621516525472400235660ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsInteger = require('./IsInteger'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToNumber = require('./ToNumber'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 1 } var arrayTypeName = whichTypedArray(O); // step 12 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 2 } if (arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array') { throw new $SyntaxError('BigInt64Array and BigUint64Array do not exist until ES2020'); // step 2 } var numValue = ToNumber(value); // step 3 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsInteger(index) || isNegativeZero(index)) { return false; // steps 7 - 8 } var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var offset = typedArrayByteOffset(O); // step 11 var elementType = tableTAO.name['$' + arrayTypeName]; // step 15 var elementSize = tableTAO.size['$' + elementType]; // step 13 var indexedPosition = (index * elementSize) + offset; // step 14 SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, 'Unordered'); // step 16 return true; // step 17 }; ljharb-es-abstract-babee05/2019/InternalizeJSONProperty.js000066400000000000000000000042021516525472400234140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/9.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = ToLength(Get(val, 'length')); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2019/Invoke.js000066400000000000000000000012371516525472400201310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2019/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2019/IsArray.js000066400000000000000000000001661516525472400202500ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2019/IsCallable.js000066400000000000000000000001541516525472400206660ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2019/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250540ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2019/IsConcatSpreadable.js000066400000000000000000000011741516525472400223640ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2019/IsConstructor.js000066400000000000000000000021701516525472400215140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2019/IsDataDescriptor.js000066400000000000000000000010611516525472400220750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2019/IsDetachedBuffer.js000066400000000000000000000017461516525472400220320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2019/IsExtensible.js000066400000000000000000000007701516525472400212750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2019/IsGenericDescriptor.js000066400000000000000000000012201516525472400225750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2019/IsInteger.js000066400000000000000000000003201516525472400205570ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2019/IsPromise.js000066400000000000000000000007451516525472400206130ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2019/IsPropertyKey.js000066400000000000000000000003371516525472400214670ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2019/IsRegExp.js000066400000000000000000000010721516525472400203610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2019/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2019/IsStringPrefix.js000066400000000000000000000015261516525472400216170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPrefixOf = require('../helpers/isPrefixOf'); // var callBound = require('call-bound'); // var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/9.0/#sec-isstringprefix module.exports = function IsStringPrefix(p, q) { if (typeof p !== 'string') { throw new $TypeError('Assertion failed: "p" must be a String'); } if (typeof q !== 'string') { throw new $TypeError('Assertion failed: "q" must be a String'); } return isPrefixOf(p, q); /* if (p === q || p === '') { return true; } var pLength = p.length; var qLength = q.length; if (pLength >= qLength) { return false; } // assert: pLength < qLength for (var i = 0; i < pLength; i += 1) { if ($charAt(p, i) !== $charAt(q, i)) { return false; } } return true; */ }; ljharb-es-abstract-babee05/2019/IsWordChar.js000066400000000000000000000025261516525472400207050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2019/IterableToList.js000066400000000000000000000010121516525472400215530ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/8.0/#sec-iterabletolist module.exports = function IterableToList(items, method) { var iterator = GetIterator(items, method); var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2019/IteratorClose.js000066400000000000000000000033441516525472400214560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2019/IteratorComplete.js000066400000000000000000000007131516525472400221560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2019/IteratorNext.js000066400000000000000000000007061516525472400213260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2019/IteratorStep.js000066400000000000000000000005341516525472400213220ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2019/IteratorValue.js000066400000000000000000000006241516525472400214630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2019/MakeDate.js000066400000000000000000000005161516525472400203500ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2019/MakeDay.js000066400000000000000000000016321516525472400202100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2019/MakeTime.js000066400000000000000000000013001516525472400203610ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2019/MinFromTime.js000066400000000000000000000006141516525472400210620ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2019/MonthFromTime.js000066400000000000000000000021511516525472400214220ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2019/NewPromiseCapability.js000066400000000000000000000023141516525472400227650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2019/NormalCompletion.js000066400000000000000000000003551516525472400221600ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2019/NumberToRawBytes.js000066400000000000000000000034331516525472400221120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#table-50 var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32 }; // https://262.ecma-international.org/8.0/#sec-numbertorawbytes module.exports = function NumberToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a Number'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2019/NumberToString.js000066400000000000000000000006201516525472400216130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type module.exports = function NumberToString(m) { if (typeof m !== 'number') { throw new $TypeError('Assertion failed: "m" must be a String'); } return $String(m); }; ljharb-es-abstract-babee05/2019/ObjectCreate.js000066400000000000000000000024571516525472400212350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/6.0/#sec-objectcreate module.exports = function ObjectCreate(proto, internalSlotsList) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var slots = arguments.length < 2 ? [] : internalSlotsList; // step 1 if (arguments.length >= 2 && !IsArray(slots)) { throw new $TypeError('Assertion failed: `internalSlotsList` must be an Array'); } var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (slots.length > 0) { forEach(slots, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; // step 6 }; ljharb-es-abstract-babee05/2019/ObjectDefineProperties.js000066400000000000000000000026331516525472400232750ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2019/OrdinaryCreateFromConstructor.js000066400000000000000000000014411516525472400247000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var ObjectCreate = require('./ObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return ObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2019/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240230ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2019/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233540ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2019/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2019/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2019/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2019/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2019/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2019/PromiseResolve.js000066400000000000000000000007721516525472400216570ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2019/QuoteJSONString.js000066400000000000000000000024531516525472400216550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16Encoding = require('./UTF16Encoding'); var hasOwn = require('hasown'); // https://262.ecma-international.org/10.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(value, ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16Encoding(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2019/RawBytesToNumber.js000066400000000000000000000037211516525472400221120ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var $charAt = callBound('String.prototype.charAt'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/8.0/#sec-rawbytestonumber module.exports = function RawBytesToNumber(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, $charAt(type, 0) === 'U', false); }; ljharb-es-abstract-babee05/2019/RegExpCreate.js000066400000000000000000000012031516525472400212050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2019/RegExpExec.js000066400000000000000000000014761516525472400207020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2019/RequireObjectCoercible.js000066400000000000000000000001231516525472400232420ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2019/SameValue.js000066400000000000000000000004701516525472400205560ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2019/SameValueNonNumber.js000066400000000000000000000006221516525472400224010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/7.0/#sec-samevaluenonnumber module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number' || typeof x !== typeof y) { throw new $TypeError('SameValueNonNumber requires two non-number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2019/SameValueZero.js000066400000000000000000000003371516525472400214200ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2019/SecFromTime.js000066400000000000000000000006221516525472400210500ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2019/Set.js000066400000000000000000000023121516525472400174240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2019/SetFunctionLength.js000066400000000000000000000017301516525472400222770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/9.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length < 0 || !isInteger(length)) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2019/SetFunctionName.js000066400000000000000000000024101516525472400217320ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2019/SetIntegrityLevel.js000066400000000000000000000034541516525472400223230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2019/SetValueInBuffer.js000066400000000000000000000071571516525472400220560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumberToRawBytes = require('./NumberToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number') { throw new $TypeError('Assertion failed: `value` must be a number'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Assert: Type(value) is Number. // 5. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 6 // 7. If isLittleEndian is not present, set isLittleEndian to to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 8 var rawBytes = NumberToRawBytes(type, value, isLittleEndian); // step 8 if (isSAB) { // step 9 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 10. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 11. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2019/SpeciesConstructor.js000066400000000000000000000015131516525472400225340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2019/SplitMatch.js000066400000000000000000000014431516525472400207450ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2019/StrictEqualityComparison.js000066400000000000000000000004761516525472400237230ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2019/StringCreate.js000066400000000000000000000020631516525472400212660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2019/StringGetOwnProperty.js000066400000000000000000000025171516525472400230370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); // https://262.ecma-international.org/8.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2019/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2019/TestIntegrityLevel.js000066400000000000000000000022671516525472400225100ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2019/ThrowCompletion.js000066400000000000000000000003601516525472400220270ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2019/TimeClip.js000066400000000000000000000006671516525472400204120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2019/TimeFromYear.js000066400000000000000000000004051516525472400212350ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2019/TimeString.js000066400000000000000000000013401516525472400207560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); // https://262.ecma-international.org/9.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = HourFromTime(tv); var minute = MinFromTime(tv); var second = SecFromTime(tv); return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; }; ljharb-es-abstract-babee05/2019/TimeWithinDay.js000066400000000000000000000003671516525472400214200ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2019/TimeZoneString.js000066400000000000000000000031561516525472400216210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/9.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (typeof tv !== 'number' || isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); // steps 1 - 2 } // 3. Let offset be LocalTZA(tv, true). // 4. If offset ≥ 0, let offsetSign be "+"; otherwise, let offsetSign be "-". // 5. Let offsetMin be the String representation of MinFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 6. Let offsetHour be the String representation of HourFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 7. Let tzName be an implementation-defined string that is either the empty string or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-dependent timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 8. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until LocalTZA, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2019/ToBoolean.js000066400000000000000000000002021516525472400205470ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2019/ToDateString.js000066400000000000000000000010071516525472400212400ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2019/ToIndex.js000066400000000000000000000011541516525472400202460ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToInteger = require('./ToInteger'); var ToLength = require('./ToLength'); var SameValueZero = require('./SameValueZero'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToInteger(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValueZero(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2019/ToInt16.js000066400000000000000000000003771516525472400201060ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2019/ToInt32.js000066400000000000000000000002551516525472400200770ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2019/ToInt8.js000066400000000000000000000003621516525472400200210ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2019/ToInteger.js000066400000000000000000000004141516525472400205720ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/6.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); return ES5ToInteger(number); }; ljharb-es-abstract-babee05/2019/ToLength.js000066400000000000000000000006241516525472400204210ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2019/ToNumber.js000066400000000000000000000027371516525472400204370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2019/ToObject.js000066400000000000000000000001761516525472400204100ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2019/ToPrimitive.js000066400000000000000000000004321516525472400211450ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2019/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230720ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2019/ToPropertyKey.js000066400000000000000000000006201516525472400214710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2019/ToString.js000066400000000000000000000006051516525472400204450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2019/ToUint16.js000066400000000000000000000011371516525472400202660ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2019/ToUint32.js000066400000000000000000000002571516525472400202660ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2019/ToUint8.js000066400000000000000000000011621516525472400202050ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2019/ToUint8Clamp.js000066400000000000000000000010101516525472400211520ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2019/TrimString.js000066400000000000000000000013641516525472400210010ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2019/Type.js000066400000000000000000000003641516525472400176170ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2019/TypedArrayCreate.js000066400000000000000000000032261516525472400221060ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2019/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234220ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2019/UTF16Decode.js000066400000000000000000000014651516525472400206120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); // https://262.ecma-international.org/7.0/#sec-utf16decode var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair module.exports = function UTF16Decode(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2019/UTF16Encoding.js000066400000000000000000000012721516525472400211510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/7.0/#sec-utf16encoding module.exports = function UTF16Encoding(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2019/UnicodeEscape.js000066400000000000000000000014251516525472400214040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/9.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + $strSlice('0000' + $toLowerCase($numberToString(n, 16)), -4); }; ljharb-es-abstract-babee05/2019/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2019/ValidateAtomicAccess.js000066400000000000000000000016041516525472400227040ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var isTypedArray = require('is-typed-array'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/8.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); // step 1 } var accessIndex = ToIndex(requestIndex); // step 2 var length = typedArrayLength(typedArray); // step 3 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 5 } return accessIndex; // step 6 }; ljharb-es-abstract-babee05/2019/ValidateTypedArray.js000066400000000000000000000014321516525472400224310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2019/WeekDay.js000066400000000000000000000003201516525472400202170ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2019/WordCharacters.js000066400000000000000000000026731516525472400216160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2019/YearFromTime.js000066400000000000000000000006161516525472400212410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2019/abs.js000066400000000000000000000002461516525472400174420ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/2019/floor.js000066400000000000000000000003571516525472400200210ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/2019/max.js000066400000000000000000000002061516525472400174560ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2019/min.js000066400000000000000000000002061516525472400174540ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2019/modulo.js000066400000000000000000000002501516525472400201670ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2019/msFromTime.js000066400000000000000000000003751516525472400207620ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2019/tables/000077500000000000000000000000001516525472400176075ustar00rootroot00000000000000ljharb-es-abstract-babee05/2019/tables/typed-array-objects.js000066400000000000000000000011651516525472400240400ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/10.0/#table-49 module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2019/thisBooleanValue.js000066400000000000000000000005031516525472400221350ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2019/thisNumberValue.js000066400000000000000000000005321516525472400220100ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2019/thisStringValue.js000066400000000000000000000004751516525472400220340ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2019/thisSymbolValue.js000066400000000000000000000010161516525472400220230ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2019/thisTimeValue.js000066400000000000000000000003471516525472400214620ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2020/000077500000000000000000000000001516525472400163255ustar00rootroot00000000000000ljharb-es-abstract-babee05/2020/AbstractEqualityComparison.js000066400000000000000000000036431516525472400242050ustar00rootroot00000000000000'use strict'; var StrictEqualityComparison = require('./StrictEqualityComparison'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isNaN = require('math-intrinsics/isNaN'); var isObject = require('es-object-atoms/isObject'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/11.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return StrictEqualityComparison(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (isNaN(n)) { return false; } return AbstractEqualityComparison(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return AbstractEqualityComparison(y, x); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'bigint' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'bigint' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (isNaN(x) || isNaN(y) || x === Infinity || y === Infinity || x === -Infinity || y === -Infinity) { return false; } return x == y; // eslint-disable-line eqeqeq } return false; }; ljharb-es-abstract-babee05/2020/AbstractRelationalComparison.js000066400000000000000000000040541516525472400244770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var IsStringPrefix = require('./IsStringPrefix'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/11.0/#sec-abstract-relational-comparison // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { if (IsStringPrefix(py, px)) { return false; } if (IsStringPrefix(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if ($isNaN(ny)) { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if ($isNaN(nx)) { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (isSameType(nx, ny)) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both nonzero, finite, and not equal }; ljharb-es-abstract-babee05/2020/AddEntriesFromIterable.js000066400000000000000000000026101516525472400232000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2020/AdvanceStringIndex.js000066400000000000000000000016501516525472400224050ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/11.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2020/ArrayCreate.js000066400000000000000000000026251516525472400210720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/6.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 5 - 7, and 9 if (proto !== $ArrayPrototype) { // step 8 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 2 A.length = length; } /* step 10, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2020/ArraySetLength.js000066400000000000000000000045661516525472400215720ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2020/ArraySpeciesCreate.js000066400000000000000000000025301516525472400224010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var len = length === 0 ? 0 : length; var C; var isArray = IsArray(originalArray); if (isArray) { C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } } if (typeof C === 'undefined') { return $Array(len); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(len); // Construct(C, len); }; ljharb-es-abstract-babee05/2020/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2020/AsyncIteratorClose.js000066400000000000000000000034161516525472400224440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/9.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return new $Promise(function (resolve) { var ret = GetMethod(iterator, 'return'); // step 4 if (typeof ret === 'undefined') { resolve(completion); // step 5 } else { resolve($then( new $Promise(function (resolve2) { // process.exit(42); resolve2(Call(ret, iterator, [])); // step 6 }), function (innerResult) { if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; }, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 8 } else { throw e; // step 9 } } )); } }); }; ljharb-es-abstract-babee05/2020/BigInt/000077500000000000000000000000001516525472400175015ustar00rootroot00000000000000ljharb-es-abstract-babee05/2020/BigInt/add.js000066400000000000000000000005751516525472400205760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2020/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2020/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2020/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2020/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2020/BigInt/divide.js000066400000000000000000000011251516525472400213020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2020/BigInt/equal.js000066400000000000000000000006021516525472400211440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2020/BigInt/exponentiate.js000066400000000000000000000015251516525472400225450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2020/BigInt/index.js000066400000000000000000000023721516525472400211520ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2020/BigInt/leftShift.js000066400000000000000000000006121516525472400217660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2020/BigInt/lessThan.js000066400000000000000000000006071516525472400216230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2020/BigInt/multiply.js000066400000000000000000000006071516525472400217210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2020/BigInt/remainder.js000066400000000000000000000012401516525472400220020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2020/BigInt/sameValue.js000066400000000000000000000006211516525472400217600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue module.exports = function BigIntSameValue(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2020/BigInt/sameValueZero.js000066400000000000000000000006311516525472400226210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero module.exports = function BigIntSameValueZero(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2020/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2020/BigInt/subtract.js000066400000000000000000000006071516525472400216710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2020/BigInt/toString.js000066400000000000000000000006121516525472400216470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } return $String(x); }; ljharb-es-abstract-babee05/2020/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222170ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2020/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2020/BigIntBitwiseOp.js000066400000000000000000000031771516525472400216750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2020/BinaryAnd.js000066400000000000000000000004741516525472400205370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2020/BinaryOr.js000066400000000000000000000004721516525472400204130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2020/BinaryXor.js000066400000000000000000000004741516525472400206050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2020/Call.js000066400000000000000000000011351516525472400175360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2020/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2020/Canonicalize.js000066400000000000000000000022421516525472400212620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2020/CharacterRange.js000066400000000000000000000024751516525472400215440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2020/CodePointAt.js000066400000000000000000000031421516525472400210340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16DecodeSurrogatePair = require('./UTF16DecodeSurrogatePair'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/11.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16DecodeSurrogatePair(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2020/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2020/CompletionRecord.js000066400000000000000000000025141516525472400221350ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2020/CopyDataProperties.js000066400000000000000000000034541516525472400224520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var every = require('../helpers/every'); var forEach = require('../helpers/forEach'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); // https://262.ecma-international.org/11.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var sourceKeys = OwnPropertyKeys(from); forEach(sourceKeys, function (nextKey) { var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && IsInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2020/CreateAsyncFromSyncIterator.js000066400000000000000000000107561516525472400242700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2020/CreateDataProperty.js000066400000000000000000000013231516525472400224240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2020/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2020/CreateHTML.js000066400000000000000000000015051516525472400205540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2020/CreateIterResultObject.js000066400000000000000000000005351516525472400232430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2020/CreateListFromArrayLike.js000066400000000000000000000027251516525472400233600ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object']; // https://262.ecma-international.org/11.0/#sec-createlistfromarraylike /** @type {(obj: object, elementTypes?: typeof defaultElementTypes) => unknown[]} */ module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = LengthOfArrayLike(obj); /** @type {(typeof elementTypes)[]} */ var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2020/CreateMethodProperty.js000066400000000000000000000016601516525472400227770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2020/CreateRegExpStringIterator.js000066400000000000000000000065301516525472400241060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIterResultObject = require('./CreateIterResultObject'); var CreateMethodProperty = require('./CreateMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIterResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIterResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(match, false); }; CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn); } } // https://262.ecma-international.org/11.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2020/DateFromTime.js000066400000000000000000000017341516525472400212100ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2020/DateString.js000066400000000000000000000017271516525472400207360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2020/Day.js000066400000000000000000000003521516525472400174000ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2020/DayFromYear.js000066400000000000000000000004001516525472400210370ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2020/DayWithinYear.js000066400000000000000000000004361516525472400214070ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2020/DaysInYear.js000066400000000000000000000004551516525472400206770ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2020/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2020/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2020/DetachArrayBuffer.js000066400000000000000000000032571516525472400222130ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2020/EnumerableOwnPropertyNames.js000066400000000000000000000017571516525472400241710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnPropertyNames(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2020/FlattenIntoArray.js000066400000000000000000000032201516525472400221060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2020/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2020/Get.js000066400000000000000000000010701516525472400174000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2020/GetGlobalObject.js000066400000000000000000000003061516525472400216510ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2020/GetIterator.js000066400000000000000000000032721516525472400211200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/9.0/#sec-getiterator module.exports = function GetIterator(obj, hint, method) { var actualHint = hint; if (arguments.length < 2) { actualHint = 'sync'; } if (actualHint !== 'sync' && actualHint !== 'async') { throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint)); } var actualMethod = method; if (arguments.length < 3) { if (actualHint === 'async') { if (hasSymbols && $asyncIterator) { actualMethod = GetMethod(obj, $asyncIterator); } if (typeof actualMethod === 'undefined') { throw new $SyntaxError("async from sync iterators aren't currently supported"); } } else { actualMethod = getIteratorMethod(ES, obj); } } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; // TODO: This should return an IteratorRecord /* var nextMethod = GetV(iterator, 'next'); return { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; */ }; ljharb-es-abstract-babee05/2020/GetMethod.js000066400000000000000000000012541516525472400205450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2020/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2020/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244260ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2020/GetSubstitution.js000066400000000000000000000076571516525472400220560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var every = require('../helpers/every'); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var $indexOf = callBound('String.prototype.indexOf'); var $parseInt = parseInt; var isDigit = regexTester(/^[0-9]$/); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // http://262.ecma-international.org/9.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; if (typeof namedCaptures !== 'undefined') { namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign } var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else if (next === '<') { if (typeof namedCaptures === 'undefined') { result += '$<'; i += 2; } else { var endIndex = $indexOf(replacement, '>', i); if (endIndex > -1) { var groupName = $strSlice(replacement, i + '$<'.length, endIndex); var capture = Get(namedCaptures, groupName); if (typeof capture !== 'undefined') { result += ToString(capture); } i += ('<' + groupName + '>').length; } } } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2020/GetV.js000066400000000000000000000007541516525472400175360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2020/GetValueFromBuffer.js000066400000000000000000000106561516525472400223650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered') { throw new $TypeError('Assertion failed: `order` must be either `SeqCst` or `Unordered`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2020/HasOwnProperty.js000066400000000000000000000010241516525472400216240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2020/HasProperty.js000066400000000000000000000007471516525472400211530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2020/HourFromTime.js000066400000000000000000000005761516525472400212530ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2020/InLeapYear.js000066400000000000000000000007161516525472400206600ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2020/InstanceofOperator.js000066400000000000000000000016371516525472400224770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2020/IntegerIndexedElementGet.js000066400000000000000000000030571516525472400235400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var typedArrayLength = require('typed-array-length'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { var arrayTypeName = whichTypedArray(O); // step 7 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 1 } if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 2 } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 4 } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 5 } var offset = typedArrayByteOffset(O); // step 6 var length = typedArrayLength(O); // step 7 if (index < 0 || index >= length) { return void undefined; // step 8 } var elementType = tableTAO.name['$' + arrayTypeName]; // step 10 var elementSize = tableTAO.size['$' + elementType]; // step 8 var indexedPosition = (index * elementSize) + offset; // step 9 return GetValueFromBuffer(buffer, indexedPosition, elementType, true, 'Unordered'); // step 11 }; ljharb-es-abstract-babee05/2020/IntegerIndexedElementSet.js000066400000000000000000000035321516525472400235520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { var arrayTypeName = whichTypedArray(O); // step 9 if (!arrayTypeName) { throw new $TypeError('`O` must be a TypedArray'); // step 1 } if (typeof index !== 'number') { throw new $TypeError('`index` must be a Number'); // step 2 } var contentType = arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array' ? 'BigInt' : 'Number'; var numValue = contentType === 'BigInt' ? ToBigInt(value) : ToNumber(value); // steps 3 - 4 var buffer = typedArrayBuffer(O); // step 5 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` has a detached buffer'); // step 6 } if (!IsValidIntegerIndex(O, index)) { return false; // step 7 } var offset = typedArrayByteOffset(O); // step 8 var length = typedArrayLength(O); // step 9 if (index < 0 || index >= length) { return false; // step 10 } var elementType = tableTAO.name['$' + arrayTypeName]; // step 12 var elementSize = tableTAO.size['$' + elementType]; // step 10 var indexedPosition = (index * elementSize) + offset; // step 11 SetValueInBuffer(buffer, indexedPosition, elementType, numValue, true, 'Unordered'); // step 13 return true; // step 14 }; ljharb-es-abstract-babee05/2020/InternalizeJSONProperty.js000066400000000000000000000040721516525472400234110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/11.0/#sec-internalizejsonproperty module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val, 'length'); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2020/Invoke.js000066400000000000000000000012371516525472400201210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2020/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2020/IsArray.js000066400000000000000000000001661516525472400202400ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2020/IsBigIntElementType.js000066400000000000000000000003021516525472400225020ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BigUint64' || type === 'BigInt64'; }; ljharb-es-abstract-babee05/2020/IsCallable.js000066400000000000000000000001541516525472400206560ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2020/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250440ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2020/IsConcatSpreadable.js000066400000000000000000000011741516525472400223540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2020/IsConstructor.js000066400000000000000000000021701516525472400215040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2020/IsDataDescriptor.js000066400000000000000000000010611516525472400220650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2020/IsDetachedBuffer.js000066400000000000000000000017461516525472400220220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2020/IsExtensible.js000066400000000000000000000007701516525472400212650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2020/IsGenericDescriptor.js000066400000000000000000000012201516525472400225650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2020/IsInteger.js000066400000000000000000000003201516525472400205470ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/6.0/#sec-isinteger module.exports = function IsInteger(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2020/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231010ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/11.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') { return true; } return false; }; ljharb-es-abstract-babee05/2020/IsNonNegativeInteger.js000066400000000000000000000003541516525472400227140ustar00rootroot00000000000000'use strict'; var IsInteger = require('./IsInteger'); // https://262.ecma-international.org/11.0/#sec-isnonnegativeinteger module.exports = function IsNonNegativeInteger(argument) { return !!IsInteger(argument) && argument >= 0; }; ljharb-es-abstract-babee05/2020/IsPromise.js000066400000000000000000000007451516525472400206030ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2020/IsPropertyKey.js000066400000000000000000000003371516525472400214570ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2020/IsRegExp.js000066400000000000000000000010721516525472400203510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2020/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2020/IsStringPrefix.js000066400000000000000000000015261516525472400216070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPrefixOf = require('../helpers/isPrefixOf'); // var callBound = require('call-bound'); // var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/9.0/#sec-isstringprefix module.exports = function IsStringPrefix(p, q) { if (typeof p !== 'string') { throw new $TypeError('Assertion failed: "p" must be a String'); } if (typeof q !== 'string') { throw new $TypeError('Assertion failed: "q" must be a String'); } return isPrefixOf(p, q); /* if (p === q || p === '') { return true; } var pLength = p.length; var qLength = q.length; if (pLength >= qLength) { return false; } // assert: pLength < qLength for (var i = 0; i < pLength; i += 1) { if ($charAt(p, i) !== $charAt(q, i)) { return false; } } return true; */ }; ljharb-es-abstract-babee05/2020/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245620ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'Int8' || type === 'Uint8' || type === 'Int16' || type === 'Uint16' || type === 'Int32' || type === 'Uint32'; }; ljharb-es-abstract-babee05/2020/IsUnsignedElementType.js000066400000000000000000000004121516525472400231040ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'Uint8' || type === 'Uint8C' || type === 'Uint16' || type === 'Uint32' || type === 'BigUint64'; }; ljharb-es-abstract-babee05/2020/IsValidIntegerIndex.js000066400000000000000000000015161516525472400225270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsInteger = require('./IsInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/11.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { if (!isTypedArray) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); } typedArrayBuffer(O); // step 1 if (typeof index !== 'number') { throw new $TypeError('Assertion failed: Type(index) is not Number'); // step 2 } if (!IsInteger(index)) { return false; } // step 3 if (isNegativeZero(index)) { return false; } // step 4 if (index < 0 || index >= O.length) { return false; } // step 5 return true; // step 6 }; ljharb-es-abstract-babee05/2020/IsWordChar.js000066400000000000000000000025261516525472400206750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var IsInteger = require('./IsInteger'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!IsInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!IsInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2020/IterableToList.js000066400000000000000000000010221516525472400215440ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/9.0/#sec-iterabletolist module.exports = function IterableToList(items, method) { var iterator = GetIterator(items, 'sync', method); var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2020/IteratorClose.js000066400000000000000000000033441516525472400214460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2020/IteratorComplete.js000066400000000000000000000007131516525472400221460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2020/IteratorNext.js000066400000000000000000000007061516525472400213160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2020/IteratorStep.js000066400000000000000000000005341516525472400213120ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2020/IteratorValue.js000066400000000000000000000006241516525472400214530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2020/LengthOfArrayLike.js000066400000000000000000000007151516525472400222000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2020/MakeDate.js000066400000000000000000000005161516525472400203400ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2020/MakeDay.js000066400000000000000000000016321516525472400202000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2020/MakeTime.js000066400000000000000000000013001516525472400203510ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2020/MinFromTime.js000066400000000000000000000006141516525472400210520ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2020/MonthFromTime.js000066400000000000000000000021511516525472400214120ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2020/NewPromiseCapability.js000066400000000000000000000023141516525472400227550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2020/NormalCompletion.js000066400000000000000000000003551516525472400221500ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2020/Number/000077500000000000000000000000001516525472400175555ustar00rootroot00000000000000ljharb-es-abstract-babee05/2020/Number/add.js000066400000000000000000000015621516525472400206470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if ((x === Infinity && y === Infinity) || (x === -Infinity && y === -Infinity)) { return x; } if (x === Infinity) { return x; } if (y === Infinity) { return y; } if (x === y && x === 0) { return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } if (x === -y || -x === y) { return +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2020/Number/bitwiseAND.js000066400000000000000000000006521516525472400221070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2020/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2020/Number/bitwiseOR.js000066400000000000000000000006501516525472400220230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2020/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2020/Number/divide.js000066400000000000000000000010641516525472400213600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2020/Number/equal.js000066400000000000000000000007371516525472400212310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2020/Number/exponentiate.js000066400000000000000000000033141516525472400226170ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2020/Number/index.js000066400000000000000000000023721516525472400212260ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2020/Number/leftShift.js000066400000000000000000000010121516525472400220350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = rnum & 0x1F; return lnum << shiftCount; }; ljharb-es-abstract-babee05/2020/Number/lessThan.js000066400000000000000000000010641516525472400216750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2020/Number/multiply.js000066400000000000000000000014661516525472400220010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2020/Number/remainder.js000066400000000000000000000017661516525472400220730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || (n === 0 && d !== 0)) { return n; } // In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved… return n % d; }; ljharb-es-abstract-babee05/2020/Number/sameValue.js000066400000000000000000000010711516525472400220340ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2020/Number/sameValueZero.js000066400000000000000000000007611516525472400227010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2020/Number/signedRightShift.js000066400000000000000000000010301516525472400233520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = rnum & 0x1F; return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2020/Number/subtract.js000066400000000000000000000005331516525472400217430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return x - y; }; ljharb-es-abstract-babee05/2020/Number/toString.js000066400000000000000000000006121516525472400217230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } return $String(x); }; ljharb-es-abstract-babee05/2020/Number/unaryMinus.js000066400000000000000000000006071516525472400222700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2020/Number/unsignedRightShift.js000066400000000000000000000010351516525472400237220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = rnum & 0x1F; return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2020/NumberBitwiseOp.js000066400000000000000000000012511516525472400217400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2020/NumberToBigInt.js000066400000000000000000000014301516525472400215110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/11.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2020/NumericToRawBytes.js000066400000000000000000000037501516525472400222560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32, $BigInt64: ToBigInt64, $BigUint64: ToBigUint64 }; // https://262.ecma-international.org/11.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2020/ObjectDefineProperties.js000066400000000000000000000026331516525472400232650ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2020/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400246730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2020/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240130ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2020/OrdinaryGetOwnProperty.js000066400000000000000000000022521516525472400233440ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var hasOwn = require('hasown'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2020/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2020/OrdinaryHasInstance.js000066400000000000000000000010731516525472400225740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2020/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2020/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227250ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2020/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2020/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2020/PromiseResolve.js000066400000000000000000000007721516525472400216470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2020/QuoteJSONString.js000066400000000000000000000025661516525472400216520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16DecodeString = require('./UTF16DecodeString'); var UTF16Encoding = require('./UTF16Encoding'); var hasOwn = require('hasown'); // https://262.ecma-international.org/11.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(UTF16DecodeString(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16Encoding(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2020/RawBytesToNumeric.js000066400000000000000000000045001516525472400222500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2020/RegExpCreate.js000066400000000000000000000012031516525472400211750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2020/RegExpExec.js000066400000000000000000000014761516525472400206720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2020/RequireObjectCoercible.js000066400000000000000000000001231516525472400232320ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2020/SameValue.js000066400000000000000000000004701516525472400205460ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2020/SameValueNonNumeric.js000066400000000000000000000010751516525472400225460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var Type = require('./Type'); // https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumeric(x, y) { if (typeof x === 'number' || typeof x === 'bigint') { throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values'); } if (Type(x) !== Type(y)) { throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2020/SameValueZero.js000066400000000000000000000003371516525472400214100ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2020/SecFromTime.js000066400000000000000000000006221516525472400210400ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2020/Set.js000066400000000000000000000023121516525472400174140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2020/SetFunctionLength.js000066400000000000000000000017361516525472400222750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); var IsNonNegativeInteger = require('./IsNonNegativeInteger'); // https://262.ecma-international.org/11.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (!IsNonNegativeInteger(length)) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2020/SetFunctionName.js000066400000000000000000000024101516525472400217220ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2020/SetIntegrityLevel.js000066400000000000000000000034541516525472400223130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2020/SetValueInBuffer.js000066400000000000000000000076231516525472400220440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/11.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 4 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is BigInt64 or BigUint64, otherwise a Number'); } // 5. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 6 // 7. If isLittleEndian is not present, set isLittleEndian to to the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 8 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 8 if (isSAB) { // step 9 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 10. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 11. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2020/SpeciesConstructor.js000066400000000000000000000015131516525472400225240ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2020/SplitMatch.js000066400000000000000000000014431516525472400207350ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/6.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return false; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return false; } } return q + r; }; ljharb-es-abstract-babee05/2020/StrictEqualityComparison.js000066400000000000000000000004761516525472400237130ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2020/StringCreate.js000066400000000000000000000020631516525472400212560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2020/StringGetOwnProperty.js000066400000000000000000000025171516525472400230270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var IsInteger = require('./IsInteger'); var isPropertyKey = require('../helpers/isPropertyKey'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); // https://262.ecma-international.org/8.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !IsInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2020/StringPad.js000066400000000000000000000022661516525472400205640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/11.0/#sec-stringpad module.exports = function StringPad(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end') { throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); } var S = ToString(O); var intMaxLength = ToLength(maxLength); var stringLength = S.length; if (intMaxLength <= stringLength) { return S; } var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); if (filler === '') { return S; } var fillLen = intMaxLength - stringLength; // the String value consisting of repeated concatenations of filler truncated to length fillLen. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += filler; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start') { return truncatedStringFiller + S; } return S + truncatedStringFiller; }; ljharb-es-abstract-babee05/2020/StringToBigInt.js000066400000000000000000000011011516525472400215220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/11.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return NaN; } }; ljharb-es-abstract-babee05/2020/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2020/TestIntegrityLevel.js000066400000000000000000000022671516525472400225000ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2020/ThrowCompletion.js000066400000000000000000000003601516525472400220170ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2020/TimeClip.js000066400000000000000000000006671516525472400204020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2020/TimeFromYear.js000066400000000000000000000004051516525472400212250ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2020/TimeString.js000066400000000000000000000013401516525472400207460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); // https://262.ecma-international.org/9.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = HourFromTime(tv); var minute = MinFromTime(tv); var second = SecFromTime(tv); return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; }; ljharb-es-abstract-babee05/2020/TimeWithinDay.js000066400000000000000000000003671516525472400214100ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2020/TimeZoneString.js000066400000000000000000000031561516525472400216110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/9.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (typeof tv !== 'number' || isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); // steps 1 - 2 } // 3. Let offset be LocalTZA(tv, true). // 4. If offset ≥ 0, let offsetSign be "+"; otherwise, let offsetSign be "-". // 5. Let offsetMin be the String representation of MinFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 6. Let offsetHour be the String representation of HourFromTime(abs(offset)), formatted as a two-digit decimal number, padded to the left with a zero if necessary. // 7. Let tzName be an implementation-defined string that is either the empty string or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-dependent timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 8. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until LocalTZA, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2020/ToBigInt.js000066400000000000000000000024301516525472400203410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (isNaN(n)) { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2020/ToBigInt64.js000066400000000000000000000016701516525472400205200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2020/ToBigUint64.js000066400000000000000000000013041516525472400206770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2020/ToBoolean.js000066400000000000000000000002021516525472400205370ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2020/ToDateString.js000066400000000000000000000010071516525472400212300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2020/ToIndex.js000066400000000000000000000011411516525472400202320ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToInteger = require('./ToInteger'); var ToLength = require('./ToLength'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/12.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToInteger(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValue(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2020/ToInt16.js000066400000000000000000000003771516525472400200760ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2020/ToInt32.js000066400000000000000000000002551516525472400200670ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2020/ToInt8.js000066400000000000000000000003621516525472400200110ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2020/ToInteger.js000066400000000000000000000005131516525472400205620ustar00rootroot00000000000000'use strict'; var ES5ToInteger = require('../5/ToInteger'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tointeger module.exports = function ToInteger(value) { var number = ToNumber(value); if (number !== 0) { number = ES5ToInteger(number); } return number === 0 ? 0 : number; }; ljharb-es-abstract-babee05/2020/ToLength.js000066400000000000000000000006241516525472400204110ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/6.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToInteger(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2020/ToNumber.js000066400000000000000000000031301516525472400204130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2020/ToNumeric.js000066400000000000000000000010131516525472400205630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2020/ToObject.js000066400000000000000000000001761516525472400204000ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2020/ToPrimitive.js000066400000000000000000000004321516525472400211350ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2020/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230620ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2020/ToPropertyKey.js000066400000000000000000000006201516525472400214610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2020/ToString.js000066400000000000000000000006051516525472400204350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2020/ToUint16.js000066400000000000000000000011371516525472400202560ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2020/ToUint32.js000066400000000000000000000002571516525472400202560ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2020/ToUint8.js000066400000000000000000000011621516525472400201750ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2020/ToUint8Clamp.js000066400000000000000000000010101516525472400211420ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2020/TrimString.js000066400000000000000000000013641516525472400207710ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2020/Type.js000066400000000000000000000004511516525472400176040ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } if (typeof x === 'bigint') { return 'BigInt'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2020/TypedArrayCreate.js000066400000000000000000000032261516525472400220760ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2020/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234120ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2020/UTF16DecodeString.js000066400000000000000000000011201516525472400217550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/11.0/#sec-utf16decodestring module.exports = function UTF16DecodeString(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2020/UTF16DecodeSurrogatePair.js000066400000000000000000000014061516525472400233050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair module.exports = function UTF16DecodeSurrogatePair(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2020/UTF16Encoding.js000066400000000000000000000012721516525472400211410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/7.0/#sec-utf16encoding module.exports = function UTF16Encoding(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2020/UnicodeEscape.js000066400000000000000000000014161516525472400213740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2020/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2020/ValidateAtomicAccess.js000066400000000000000000000016041516525472400226740ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var isTypedArray = require('is-typed-array'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/8.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); // step 1 } var accessIndex = ToIndex(requestIndex); // step 2 var length = typedArrayLength(typedArray); // step 3 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 5 } return accessIndex; // step 6 }; ljharb-es-abstract-babee05/2020/ValidateTypedArray.js000066400000000000000000000014321516525472400224210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2020/WeekDay.js000066400000000000000000000003201516525472400202070ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2020/WordCharacters.js000066400000000000000000000026731516525472400216060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2020/YearFromTime.js000066400000000000000000000006161516525472400212310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2020/abs.js000066400000000000000000000003231516525472400174260ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2020/floor.js000066400000000000000000000004371516525472400200100ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2020/max.js000066400000000000000000000002061516525472400174460ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2020/min.js000066400000000000000000000002061516525472400174440ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2020/modulo.js000066400000000000000000000002501516525472400201570ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2020/msFromTime.js000066400000000000000000000003751516525472400207520ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2020/tables/000077500000000000000000000000001516525472400175775ustar00rootroot00000000000000ljharb-es-abstract-babee05/2020/tables/typed-array-objects.js000066400000000000000000000014061516525472400240260ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $BigInt64Array: 'BigInt64', $BigUint64Array: 'BigUint64', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $BigInt64: 8, $BigUint64: 8, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "BigInt64", "BigUint64", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2020/thisBigIntValue.js000066400000000000000000000007051516525472400217260ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/11.0/#sec-thisbigintvalue module.exports = function thisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2020/thisBooleanValue.js000066400000000000000000000005031516525472400221250ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2020/thisNumberValue.js000066400000000000000000000005321516525472400220000ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2020/thisStringValue.js000066400000000000000000000004751516525472400220240ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2020/thisSymbolValue.js000066400000000000000000000010161516525472400220130ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2020/thisTimeValue.js000066400000000000000000000003471516525472400214520ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2021/000077500000000000000000000000001516525472400163265ustar00rootroot00000000000000ljharb-es-abstract-babee05/2021/AbstractEqualityComparison.js000066400000000000000000000036431516525472400242060ustar00rootroot00000000000000'use strict'; var StrictEqualityComparison = require('./StrictEqualityComparison'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isNaN = require('math-intrinsics/isNaN'); var isObject = require('es-object-atoms/isObject'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/11.0/#sec-abstract-equality-comparison module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return StrictEqualityComparison(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (isNaN(n)) { return false; } return AbstractEqualityComparison(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return AbstractEqualityComparison(y, x); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'bigint' || typeof x === 'symbol') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'bigint' || typeof y === 'symbol')) { return AbstractEqualityComparison(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (isNaN(x) || isNaN(y) || x === Infinity || y === Infinity || x === -Infinity || y === -Infinity) { return false; } return x == y; // eslint-disable-line eqeqeq } return false; }; ljharb-es-abstract-babee05/2021/AbstractRelationalComparison.js000066400000000000000000000040541516525472400245000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var IsStringPrefix = require('./IsStringPrefix'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/11.0/#sec-abstract-relational-comparison // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { if (IsStringPrefix(py, px)) { return false; } if (IsStringPrefix(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if ($isNaN(ny)) { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if ($isNaN(nx)) { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (isSameType(nx, ny)) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both nonzero, finite, and not equal }; ljharb-es-abstract-babee05/2021/AddEntriesFromIterable.js000066400000000000000000000026101516525472400232010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2021/AddToKeptObjects.js000066400000000000000000000010251516525472400220130ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var ClearKeptObjects = require('./ClearKeptObjects'); // https://262.ecma-international.org/12.0/#sec-addtokeptobjects module.exports = function AddToKeptObjects(object) { if (!isObject(object)) { throw new $TypeError('Assertion failed: `object` must be an Object'); } var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'); arr[arr.length] = object; }; ljharb-es-abstract-babee05/2021/AdvanceStringIndex.js000066400000000000000000000016501516525472400224060ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/12.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2021/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000060721516525472400256520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasOwnProperty = require('./HasOwnProperty'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); var Type = require('./Type'); var NumberAdd = require('./Number/add'); var NumberBitwiseAND = require('./Number/bitwiseAND'); var NumberBitwiseOR = require('./Number/bitwiseOR'); var NumberBitwiseXOR = require('./Number/bitwiseXOR'); var NumberDivide = require('./Number/divide'); var NumberExponentiate = require('./Number/exponentiate'); var NumberLeftShift = require('./Number/leftShift'); var NumberMultiply = require('./Number/multiply'); var NumberRemainder = require('./Number/remainder'); var NumberSignedRightShift = require('./Number/signedRightShift'); var NumberSubtract = require('./Number/subtract'); var NumberUnsignedRightShift = require('./Number/unsignedRightShift'); var BigIntAdd = require('./BigInt/add'); var BigIntBitwiseAND = require('./BigInt/bitwiseAND'); var BigIntBitwiseOR = require('./BigInt/bitwiseOR'); var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR'); var BigIntDivide = require('./BigInt/divide'); var BigIntExponentiate = require('./BigInt/exponentiate'); var BigIntLeftShift = require('./BigInt/leftShift'); var BigIntMultiply = require('./BigInt/multiply'); var BigIntRemainder = require('./BigInt/remainder'); var BigIntSignedRightShift = require('./BigInt/signedRightShift'); var BigIntSubtract = require('./BigInt/subtract'); var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift'); // https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator // https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table var table = { '**': [NumberExponentiate, BigIntExponentiate], '*': [NumberMultiply, BigIntMultiply], '/': [NumberDivide, BigIntDivide], '%': [NumberRemainder, BigIntRemainder], '+': [NumberAdd, BigIntAdd], '-': [NumberSubtract, BigIntSubtract], '<<': [NumberLeftShift, BigIntLeftShift], '>>': [NumberSignedRightShift, BigIntSignedRightShift], '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift], '&': [NumberBitwiseAND, BigIntBitwiseAND], '^': [NumberBitwiseXOR, BigIntBitwiseXOR], '|': [NumberBitwiseOR, BigIntBitwiseOR] }; module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) { if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) { throw new $TypeError('Assertion failed: `opText` must be a valid operation string'); } if (opText === '+') { var lprim = ToPrimitive(lval); var rprim = ToPrimitive(rval); if (typeof lprim === 'string' || typeof rprim === 'string') { var lstr = ToString(lprim); var rstr = ToString(rprim); return lstr + rstr; } /* eslint no-param-reassign: 1 */ lval = lprim; rval = rprim; } var lnum = ToNumeric(lval); var rnum = ToNumeric(rval); if (Type(lnum) !== Type(rnum)) { throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ'); } var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0]; return Operation(lnum, rnum); }; ljharb-es-abstract-babee05/2021/ArrayCreate.js000066400000000000000000000026151516525472400210720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/12.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 3, 5 if (proto !== $ArrayPrototype) { // step 4 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 6 A.length = length; } /* step 6, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2021/ArraySetLength.js000066400000000000000000000045661516525472400215730ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2021/ArraySpeciesCreate.js000066400000000000000000000025311516525472400224030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var ArrayCreate = require('./ArrayCreate'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var isArray = IsArray(originalArray); if (!isArray) { return ArrayCreate(length); } var C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } if (typeof C === 'undefined') { return ArrayCreate(length); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(length); // Construct(C, length); }; ljharb-es-abstract-babee05/2021/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2021/AsyncIteratorClose.js000066400000000000000000000036211516525472400224430ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/12.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return $then( $then( $then( new $Promise(function (resolve) { resolve(GetMethod(iterator, 'return')); // step 4 // resolve(Call(ret, iterator, [])); // step 6 }), function (returnV) { // step 5.a if (typeof returnV === 'undefined') { return completion; // step 5.b } return Call(returnV, iterator); // step 5.c, 5.d. } ), null, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 6 } else { throw e; // step 7 } } ), function (innerResult) { // step 8 if (completion.type() === 'throw') { completion['?'](); // step 6 } if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; } ); }; ljharb-es-abstract-babee05/2021/BigInt/000077500000000000000000000000001516525472400175025ustar00rootroot00000000000000ljharb-es-abstract-babee05/2021/BigInt/add.js000066400000000000000000000005751516525472400205770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2021/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2021/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2021/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2021/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2021/BigInt/divide.js000066400000000000000000000011251516525472400213030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2021/BigInt/equal.js000066400000000000000000000006021516525472400211450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2021/BigInt/exponentiate.js000066400000000000000000000015251516525472400225460ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2021/BigInt/index.js000066400000000000000000000023721516525472400211530ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2021/BigInt/leftShift.js000066400000000000000000000006121516525472400217670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2021/BigInt/lessThan.js000066400000000000000000000006071516525472400216240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2021/BigInt/multiply.js000066400000000000000000000006071516525472400217220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2021/BigInt/remainder.js000066400000000000000000000012401516525472400220030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2021/BigInt/sameValue.js000066400000000000000000000006211516525472400217610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue module.exports = function BigIntSameValue(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2021/BigInt/sameValueZero.js000066400000000000000000000006311516525472400226220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero module.exports = function BigIntSameValueZero(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2021/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2021/BigInt/subtract.js000066400000000000000000000006071516525472400216720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2021/BigInt/toString.js000066400000000000000000000006121516525472400216500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } return $String(x); }; ljharb-es-abstract-babee05/2021/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2021/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2021/BigIntBitwiseOp.js000066400000000000000000000031771516525472400216760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2021/BinaryAnd.js000066400000000000000000000004741516525472400205400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2021/BinaryOr.js000066400000000000000000000004721516525472400204140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2021/BinaryXor.js000066400000000000000000000004741516525472400206060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2021/ByteListBitwiseOp.js000066400000000000000000000022371516525472400222550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) { if (op !== '&' && op !== '^' && op !== '|') { throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`'); } if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var result = []; for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var resultByte; if (op === '&') { resultByte = xByte & yByte; } else if (op === '^') { resultByte = xByte ^ yByte; } else { resultByte = xByte | yByte; } result[result.length] = resultByte; } return result; }; ljharb-es-abstract-babee05/2021/ByteListEqual.js000066400000000000000000000015341516525472400214160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistequal module.exports = function ByteListEqual(xBytes, yBytes) { if (!IsArray(xBytes) || !IsArray(yBytes)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xBytes.length !== yBytes.length) { return false; } for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xByte !== yByte) { return false; } } return true; }; ljharb-es-abstract-babee05/2021/Call.js000066400000000000000000000011351516525472400175370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2021/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2021/Canonicalize.js000066400000000000000000000022421516525472400212630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2021/CharacterRange.js000066400000000000000000000024751516525472400215450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2021/ClearKeptObjects.js000066400000000000000000000004511516525472400220500ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var keptObjects = []; // https://262.ecma-international.org/12.0/#sec-clear-kept-objects module.exports = function ClearKeptObjects() { keptObjects.length = 0; }; SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects); ljharb-es-abstract-babee05/2021/CloneArrayBuffer.js000066400000000000000000000035511516525472400220610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsConstructor = require('./IsConstructor'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf'); var isInteger = require('math-intrinsics/isInteger'); var isArrayBuffer = require('is-array-buffer'); var arrayBufferSlice = require('arraybuffer.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-clonearraybuffer module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) { if (!isArrayBuffer(srcBuffer)) { throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance'); } if (!isInteger(srcByteOffset) || srcByteOffset < 0) { throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer'); } if (!isInteger(srcLength) || srcLength < 0) { throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer'); } if (!IsConstructor(cloneConstructor)) { throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor'); } // 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4 } /* 5. Let srcBlock be srcBuffer.[[ArrayBufferData]]. 6. Let targetBlock be targetBuffer.[[ArrayBufferData]]. 7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength). */ var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7 OrdinarySetPrototypeOf(targetBuffer, proto); // step 3 return targetBuffer; // step 8 }; ljharb-es-abstract-babee05/2021/CodePointAt.js000066400000000000000000000031611516525472400210360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/12.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2021/CodePointsToString.js000066400000000000000000000013371516525472400224310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-codepointstostring module.exports = function CodePointsToString(text) { if (!IsArray(text)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } var result = ''; forEach(text, function (cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } result += UTF16EncodeCodePoint(cp); }); return result; }; ljharb-es-abstract-babee05/2021/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2021/CompletionRecord.js000066400000000000000000000025141516525472400221360ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2021/CopyDataProperties.js000066400000000000000000000037031516525472400224500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var forEach = require('../helpers/forEach'); var every = require('../helpers/every'); var some = require('../helpers/some'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var keys = OwnPropertyKeys(from); forEach(keys, function (nextKey) { var excluded = some(excludedItems, function (e) { return SameValue(e, nextKey) === true; }); /* var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); */ var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && isInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2021/CreateAsyncFromSyncIterator.js000066400000000000000000000107561516525472400242710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2021/CreateDataProperty.js000066400000000000000000000013231516525472400224250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2021/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2021/CreateHTML.js000066400000000000000000000015051516525472400205550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2021/CreateIterResultObject.js000066400000000000000000000005351516525472400232440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2021/CreateListFromArrayLike.js000066400000000000000000000025301516525472400233530ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object']; // https://262.ecma-international.org/11.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = LengthOfArrayLike(obj); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2021/CreateMethodProperty.js000066400000000000000000000016601516525472400230000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2021/CreateRegExpStringIterator.js000066400000000000000000000065301516525472400241070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIterResultObject = require('./CreateIterResultObject'); var CreateMethodProperty = require('./CreateMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIterResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIterResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(match, false); }; CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn); } } // https://262.ecma-international.org/11.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2021/DateFromTime.js000066400000000000000000000017341516525472400212110ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2021/DateString.js000066400000000000000000000017271516525472400207370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2021/Day.js000066400000000000000000000003521516525472400174010ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2021/DayFromYear.js000066400000000000000000000004001516525472400210400ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2021/DayWithinYear.js000066400000000000000000000004361516525472400214100ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2021/DaysInYear.js000066400000000000000000000004551516525472400207000ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2021/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2021/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2021/DetachArrayBuffer.js000066400000000000000000000032571516525472400222140ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2021/EnumerableOwnPropertyNames.js000066400000000000000000000017571516525472400241720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnPropertyNames(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2021/FlattenIntoArray.js000066400000000000000000000032201516525472400221070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2021/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2021/Get.js000066400000000000000000000010701516525472400174010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2021/GetGlobalObject.js000066400000000000000000000003061516525472400216520ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2021/GetIterator.js000066400000000000000000000032721516525472400211210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/9.0/#sec-getiterator module.exports = function GetIterator(obj, hint, method) { var actualHint = hint; if (arguments.length < 2) { actualHint = 'sync'; } if (actualHint !== 'sync' && actualHint !== 'async') { throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint)); } var actualMethod = method; if (arguments.length < 3) { if (actualHint === 'async') { if (hasSymbols && $asyncIterator) { actualMethod = GetMethod(obj, $asyncIterator); } if (typeof actualMethod === 'undefined') { throw new $SyntaxError("async from sync iterators aren't currently supported"); } } else { actualMethod = getIteratorMethod(ES, obj); } } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; // TODO: This should return an IteratorRecord /* var nextMethod = GetV(iterator, 'next'); return { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; */ }; ljharb-es-abstract-babee05/2021/GetMethod.js000066400000000000000000000012541516525472400205460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2021/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2021/GetPromiseResolve.js000066400000000000000000000011771516525472400223100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-getpromiseresolve module.exports = function GetPromiseResolve(promiseConstructor) { if (!IsConstructor(promiseConstructor)) { throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor'); } var promiseResolve = Get(promiseConstructor, 'resolve'); if (IsCallable(promiseResolve) === false) { throw new $TypeError('`resolve` method is not callable'); } return promiseResolve; }; ljharb-es-abstract-babee05/2021/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244270ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2021/GetSubstitution.js000066400000000000000000000077071516525472400220530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); var $strSlice = callBound('String.prototype.slice'); var $indexOf = callBound('String.prototype.indexOf'); var $parseInt = parseInt; var isDigit = regexTester(/^[0-9]$/); var inspect = require('object-inspect'); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); // http://www.ecma-international.org/ecma-262/12.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } var matchLength = matched.length; if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } var stringLength = str.length; if (!isInteger(position) || position < 0 || position > stringLength) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof replacement !== 'string') { throw new $TypeError('Assertion failed: `replacement` must be a String'); } var tailPos = position + matchLength; var m = captures.length; if (typeof namedCaptures !== 'undefined') { namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign } var result = ''; for (var i = 0; i < replacement.length; i += 1) { // if this is a $, and it's not the end of the replacement var current = $charAt(replacement, i); var isLast = (i + 1) >= replacement.length; var nextIsLast = (i + 2) >= replacement.length; if (current === '$' && !isLast) { var next = $charAt(replacement, i + 1); if (next === '$') { result += '$'; i += 1; } else if (next === '&') { result += matched; i += 1; } else if (next === '`') { result += position === 0 ? '' : $strSlice(str, 0, position - 1); i += 1; } else if (next === "'") { result += tailPos >= stringLength ? '' : $strSlice(str, tailPos); i += 1; } else { var nextNext = nextIsLast ? null : $charAt(replacement, i + 2); if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) { // $1 through $9, and not followed by a digit var n = $parseInt(next, 10); // if (n > m, impl-defined) result += n <= m && typeof captures[n - 1] === 'undefined' ? '' : captures[n - 1]; i += 1; } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) { // $00 through $99 var nn = next + nextNext; var nnI = $parseInt(nn, 10) - 1; // if nn === '00' or nn > m, impl-defined result += nn <= m && typeof captures[nnI] === 'undefined' ? '' : captures[nnI]; i += 2; } else if (next === '<') { if (typeof namedCaptures === 'undefined') { result += '$<'; i += 2; } else { var endIndex = $indexOf(replacement, '>', i); if (endIndex > -1) { var groupName = $strSlice(replacement, i + '$<'.length, endIndex); var capture = Get(namedCaptures, groupName); if (typeof capture !== 'undefined') { result += ToString(capture); } i += ('<' + groupName + '>').length; } } } else { result += '$'; } } } else { // the final $, or else not a $ result += $charAt(replacement, i); } } return result; }; ljharb-es-abstract-babee05/2021/GetV.js000066400000000000000000000007541516525472400175370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2021/GetValueFromBuffer.js000066400000000000000000000106561516525472400223660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered') { throw new $TypeError('Assertion failed: `order` must be either `SeqCst` or `Unordered`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2021/HasOwnProperty.js000066400000000000000000000010241516525472400216250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2021/HasProperty.js000066400000000000000000000007471516525472400211540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2021/HourFromTime.js000066400000000000000000000005761516525472400212540ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2021/InLeapYear.js000066400000000000000000000007161516525472400206610ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2021/InstanceofOperator.js000066400000000000000000000016371516525472400225000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2021/IntegerIndexedElementGet.js000066400000000000000000000023351516525472400235370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/12.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { var arrayTypeName = whichTypedArray(O); // step 4 if (!arrayTypeName) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); // step 1 } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 2 } var offset = typedArrayByteOffset(O); // step 3 var elementType = tableTAO.name['$' + arrayTypeName]; // step 7 var elementSize = tableTAO.size['$' + elementType]; // step 5 var indexedPosition = (index * elementSize) + offset; // step 6 return GetValueFromBuffer(typedArrayBuffer(O), indexedPosition, elementType, true, 'Unordered'); // step 11 }; ljharb-es-abstract-babee05/2021/IntegerIndexedElementSet.js000066400000000000000000000030351516525472400235510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/12.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } var arrayTypeName = whichTypedArray(O); // step 4.b if (!arrayTypeName) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); // step 1 } var contentType = arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array' ? 'BigInt' : 'Number'; var numValue = contentType === 'BigInt' ? ToBigInt(value) : ToNumber(value); // steps 2 - 3 if (IsValidIntegerIndex(O, index)) { // step 4 var offset = typedArrayByteOffset(O); // step 4.a var elementType = tableTAO.name['$' + arrayTypeName]; // step 4.e var elementSize = tableTAO.size['$' + elementType]; // step 4.c var indexedPosition = (index * elementSize) + offset; // step 4.d SetValueInBuffer(typedArrayBuffer(O), indexedPosition, elementType, numValue, true, 'Unordered'); // step 4.e } // 5. Return NormalCompletion(undefined) }; ljharb-es-abstract-babee05/2021/InternalizeJSONProperty.js000066400000000000000000000040721516525472400234120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/11.0/#sec-internalizejsonproperty module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val, 'length'); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2021/Invoke.js000066400000000000000000000012371516525472400201220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2021/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2021/IsArray.js000066400000000000000000000001661516525472400202410ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2021/IsBigIntElementType.js000066400000000000000000000003021516525472400225030ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BigUint64' || type === 'BigInt64'; }; ljharb-es-abstract-babee05/2021/IsCallable.js000066400000000000000000000001541516525472400206570ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2021/IsCompatiblePropertyDescriptor.js000066400000000000000000000006061516525472400250450ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, void undefined, Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2021/IsConcatSpreadable.js000066400000000000000000000011741516525472400223550ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2021/IsConstructor.js000066400000000000000000000021701516525472400215050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2021/IsDataDescriptor.js000066400000000000000000000010611516525472400220660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2021/IsDetachedBuffer.js000066400000000000000000000017461516525472400220230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2021/IsExtensible.js000066400000000000000000000007701516525472400212660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2021/IsGenericDescriptor.js000066400000000000000000000012201516525472400225660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2021/IsIntegralNumber.js000066400000000000000000000003301516525472400220720ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-isinteger module.exports = function IsIntegralNumber(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2021/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231020ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/11.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') { return true; } return false; }; ljharb-es-abstract-babee05/2021/IsPromise.js000066400000000000000000000007451516525472400206040ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2021/IsPropertyKey.js000066400000000000000000000003371516525472400214600ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2021/IsRegExp.js000066400000000000000000000010721516525472400203520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2021/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2021/IsStringPrefix.js000066400000000000000000000015261516525472400216100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPrefixOf = require('../helpers/isPrefixOf'); // var callBound = require('call-bound'); // var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/9.0/#sec-isstringprefix module.exports = function IsStringPrefix(p, q) { if (typeof p !== 'string') { throw new $TypeError('Assertion failed: "p" must be a String'); } if (typeof q !== 'string') { throw new $TypeError('Assertion failed: "q" must be a String'); } return isPrefixOf(p, q); /* if (p === q || p === '') { return true; } var pLength = p.length; var qLength = q.length; if (pLength >= qLength) { return false; } // assert: pLength < qLength for (var i = 0; i < pLength; i += 1) { if ($charAt(p, i) !== $charAt(q, i)) { return false; } } return true; */ }; ljharb-es-abstract-babee05/2021/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245630ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'Int8' || type === 'Uint8' || type === 'Int16' || type === 'Uint16' || type === 'Int32' || type === 'Uint32'; }; ljharb-es-abstract-babee05/2021/IsUnsignedElementType.js000066400000000000000000000004121516525472400231050ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'Uint8' || type === 'Uint8C' || type === 'Uint16' || type === 'Uint32' || type === 'BigUint64'; }; ljharb-es-abstract-babee05/2021/IsValidIntegerIndex.js000066400000000000000000000015641516525472400225330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isInteger = require('math-intrinsics/isInteger'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/12.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { // Assert: O is an Integer-Indexed exotic object. var buffer = typedArrayBuffer(O); // step 1 if (typeof index !== 'number') { throw new $TypeError('Assertion failed: Type(index) is not Number'); } if (IsDetachedBuffer(buffer)) { return false; } // step 2 if (!isInteger(index)) { return false; } // step 3 if (isNegativeZero(index)) { return false; } // step 4 if (index < 0 || index >= O.length) { return false; } // step 5 return true; // step 6 }; ljharb-es-abstract-babee05/2021/IsWordChar.js000066400000000000000000000025461516525472400207000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isInteger = require('math-intrinsics/isInteger'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/12.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!isInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!isInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2021/IterableToList.js000066400000000000000000000011601516525472400215500ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/12.0/#sec-iterabletolist module.exports = function IterableToList(items) { var iterator; if (arguments.length > 1) { iterator = GetIterator(items, 'sync', arguments[1]); } else { iterator = GetIterator(items, 'sync'); } var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2021/IteratorClose.js000066400000000000000000000033441516525472400214470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2021/IteratorComplete.js000066400000000000000000000007131516525472400221470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2021/IteratorNext.js000066400000000000000000000007061516525472400213170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2021/IteratorStep.js000066400000000000000000000005341516525472400213130ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2021/IteratorValue.js000066400000000000000000000006241516525472400214540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2021/LengthOfArrayLike.js000066400000000000000000000007151516525472400222010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2021/MakeDate.js000066400000000000000000000005161516525472400203410ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2021/MakeDay.js000066400000000000000000000017641516525472400202070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToIntegerOrInfinity(year); var m = ToIntegerOrInfinity(month); var dt = ToIntegerOrInfinity(date); var ym = y + floor(m / 12); if (!$isFinite(ym)) { return NaN; } var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2021/MakeTime.js000066400000000000000000000013731516525472400203640ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-maketime module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToIntegerOrInfinity(hour); var m = ToIntegerOrInfinity(min); var s = ToIntegerOrInfinity(sec); var milli = ToIntegerOrInfinity(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2021/MinFromTime.js000066400000000000000000000006141516525472400210530ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2021/MonthFromTime.js000066400000000000000000000021511516525472400214130ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2021/NewPromiseCapability.js000066400000000000000000000023141516525472400227560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2021/NormalCompletion.js000066400000000000000000000003551516525472400221510ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2021/Number/000077500000000000000000000000001516525472400175565ustar00rootroot00000000000000ljharb-es-abstract-babee05/2021/Number/add.js000066400000000000000000000014401516525472400206430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if (!isFinite(x)) { return x; } if (!isFinite(y)) { return y; } if (x === y && x === 0) { // both zeroes return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2021/Number/bitwiseAND.js000066400000000000000000000006521516525472400221100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2021/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2021/Number/bitwiseOR.js000066400000000000000000000006501516525472400220240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2021/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2021/Number/divide.js000066400000000000000000000010641516525472400213610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2021/Number/equal.js000066400000000000000000000007371516525472400212320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2021/Number/exponentiate.js000066400000000000000000000033141516525472400226200ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2021/Number/index.js000066400000000000000000000023721516525472400212270ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2021/Number/leftShift.js000066400000000000000000000010621516525472400220430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum << shiftCount; }; ljharb-es-abstract-babee05/2021/Number/lessThan.js000066400000000000000000000010641516525472400216760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2021/Number/multiply.js000066400000000000000000000014661516525472400220020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2021/Number/remainder.js000066400000000000000000000017511516525472400220660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || n === 0) { return n; } // In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved… return n % d; }; ljharb-es-abstract-babee05/2021/Number/sameValue.js000066400000000000000000000010711516525472400220350ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2021/Number/sameValueZero.js000066400000000000000000000007611516525472400227020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2021/Number/signedRightShift.js000066400000000000000000000011001516525472400233510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2021/Number/subtract.js000066400000000000000000000007121516525472400217430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberAdd = require('./add'); var NumberUnaryMinus = require('./unaryMinus'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberAdd(x, NumberUnaryMinus(y)); }; ljharb-es-abstract-babee05/2021/Number/toString.js000066400000000000000000000006121516525472400217240ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } return $String(x); }; ljharb-es-abstract-babee05/2021/Number/unaryMinus.js000066400000000000000000000006071516525472400222710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2021/Number/unsignedRightShift.js000066400000000000000000000011051516525472400237210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2021/NumberBitwiseOp.js000066400000000000000000000012511516525472400217410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2021/NumberToBigInt.js000066400000000000000000000014311516525472400215130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2021/NumericToRawBytes.js000066400000000000000000000037501516525472400222570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32, $BigInt64: ToBigInt64, $BigUint64: ToBigUint64 }; // https://262.ecma-international.org/11.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2021/ObjectDefineProperties.js000066400000000000000000000026331516525472400232660ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2021/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400246740ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2021/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240140ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2021/OrdinaryGetOwnProperty.js000066400000000000000000000022531516525472400233460ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var hasOwn = require('hasown'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2021/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2021/OrdinaryHasInstance.js000066400000000000000000000010731516525472400225750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2021/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2021/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227260ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2021/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2021/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2021/PromiseResolve.js000066400000000000000000000007721516525472400216500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2021/QuoteJSONString.js000066400000000000000000000026161516525472400216470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var hasOwn = require('hasown'); // https://262.ecma-international.org/12.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(StringToCodePoints(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16EncodeCodePoint(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2021/RawBytesToNumeric.js000066400000000000000000000045001516525472400222510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2021/RegExpCreate.js000066400000000000000000000012031516525472400211760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2021/RegExpExec.js000066400000000000000000000014761516525472400206730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2021/RequireObjectCoercible.js000066400000000000000000000001231516525472400232330ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2021/SameValue.js000066400000000000000000000004701516525472400205470ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2021/SameValueNonNumeric.js000066400000000000000000000010751516525472400225470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var Type = require('./Type'); // https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumeric(x, y) { if (typeof x === 'number' || typeof x === 'bigint') { throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values'); } if (Type(x) !== Type(y)) { throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2021/SameValueZero.js000066400000000000000000000003371516525472400214110ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2021/SecFromTime.js000066400000000000000000000006221516525472400210410ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2021/Set.js000066400000000000000000000023121516525472400174150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2021/SetFunctionLength.js000066400000000000000000000017721516525472400222760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/12.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length !== Infinity && (!isInteger(length) || length < 0)) { throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2021/SetFunctionName.js000066400000000000000000000024101516525472400217230ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2021/SetIntegrityLevel.js000066400000000000000000000034541516525472400223140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2021/SetTypedArrayFromArrayLike.js000066400000000000000000000060231516525472400240550ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var isInteger = require('math-intrinsics/isInteger'); var Get = require('./Get'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/12.0/#sec-settypedarrayfromarraylike module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } if (isTypedArray(source)) { throw new $TypeError('Assertion failed: source must not be a TypedArray instance'); // step 1 } var targetBuffer = typedArrayBuffer(target); // step 2 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 3 } var targetLength = typedArrayLength(target); // step 4 var targetName = whichTarget; // step 5 var targetType = tableTAO.name['$' + targetName]; // step 7 var targetElementSize = tableTAO.size['$' + targetType]; // step 6 var targetByteOffset = typedArrayByteOffset(target); // step 8 var src = ToObject(source); // step 9 var srcLength = LengthOfArrayLike(src); // step 10 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a finite integer'); // step 11 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 12 } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 13 var k = 0; // step 14 var limit = targetByteIndex + (targetElementSize * srcLength); // step 15 while (targetByteIndex < limit) { // step 16 var Pk = ToString(k); // step 16.a var value = Get(src, Pk); // step 16.b if (IsBigIntElementType(targetType)) { value = ToBigInt(value); // step 16.c } else { value = ToNumber(value); // step 16.d } if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 16.e } SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 16.f k += 1; // step 16.g targetByteIndex += targetElementSize; // step 16.h } }; ljharb-es-abstract-babee05/2021/SetTypedArrayFromTypedArray.js000066400000000000000000000120361516525472400242570ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteLength = require('typed-array-byte-length'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var isInteger = require('math-intrinsics/isInteger'); var CloneArrayBuffer = require('./CloneArrayBuffer'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); var SameValue = require('./SameValue'); var SetValueInBuffer = require('./SetValueInBuffer'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/12.0/#sec-settypedarrayfromtypedarray module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } var whichSource = whichTypedArray(source); if (!whichSource) { throw new $TypeError('Assertion failed: source must be a TypedArray instance'); // step 1 } var targetBuffer = typedArrayBuffer(target); // step 2 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 3 } var targetLength = typedArrayLength(target); // step 4 var srcBuffer = typedArrayBuffer(source); // step 5 if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('source’s buffer is detached'); // step 6 } var targetName = whichTarget; // step 7 var targetType = tableTAO.name['$' + targetName]; // step 8 var targetElementSize = tableTAO.size['$' + targetType]; // step 9 var targetByteOffset = typedArrayByteOffset(target); // step 10 var srcName = whichSource; // step 11 var srcType = tableTAO.name['$' + srcName]; // step 12 var srcElementSize = tableTAO.size['$' + srcType]; // step 13 var srcLength = typedArrayLength(source); // step 14 var srcByteOffset = typedArrayByteOffset(source); // step 15 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 16 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 17 } var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BigInt' : 'Number'; var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BigInt' : 'Number'; if (targetContentType !== sourceContentType) { throw new $TypeError('source and target must have the same content type'); // step 18 } var same; if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 19 // a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false. throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { same = SameValue(srcBuffer, targetBuffer); // step 20 } var srcByteIndex; if (same) { // step 21 var srcByteLength = typedArrayByteLength(source); // step 21.a srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 21.b // c. NOTE: %ArrayBuffer% is used to clone srcBuffer because is it known to not have any observable side-effects. srcByteIndex = 0; // step 21.d } else { srcByteIndex = srcByteOffset; // step 22 } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 23 var limit = targetByteIndex + (targetElementSize * srcLength); // step 24 var value; if (srcType === targetType) { // step 25 // a. NOTE: If srcType and targetType are the same, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. while (targetByteIndex < limit) { // step 25.b value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'Uint8', true, 'Unordered'); // step 25.b.i SetValueInBuffer(targetBuffer, targetByteIndex, 'Uint8', value, true, 'Unordered'); // step 25.b.ii srcByteIndex += 1; // step 25.b.iii targetByteIndex += 1; // step 25.b.iv } } else { // step 26 while (targetByteIndex < limit) { // step 26.a value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'Unordered'); // step 26.a.i SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 26.a.ii srcByteIndex += srcElementSize; // step 26.a.iii targetByteIndex += targetElementSize; // step 26.a.iv } } }; ljharb-es-abstract-babee05/2021/SetValueInBuffer.js000066400000000000000000000100701516525472400220330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/12.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex) || byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is BigInt64 or BigUint64, otherwise a Number'); } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 // 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7 if (isSAB) { // step 8 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 10. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2021/SpeciesConstructor.js000066400000000000000000000015131516525472400225250ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2021/SplitMatch.js000066400000000000000000000014641516525472400207410ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/12.0/#sec-splitmatch module.exports = function SplitMatch(S, q, R) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(q)) { throw new $TypeError('Assertion failed: `q` must be an integer'); } if (typeof R !== 'string') { throw new $TypeError('Assertion failed: `R` must be a String'); } var r = R.length; var s = S.length; if (q + r > s) { return 'not-matched'; } for (var i = 0; i < r; i += 1) { if ($charAt(S, q + i) !== $charAt(R, i)) { return 'not-matched'; } } return q + r; }; ljharb-es-abstract-babee05/2021/StrictEqualityComparison.js000066400000000000000000000004761516525472400237140ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/2021/StringCreate.js000066400000000000000000000020631516525472400212570ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2021/StringGetOwnProperty.js000066400000000000000000000025351516525472400230300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var isPropertyKey = require('../helpers/isPropertyKey'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2021/StringIndexOf.js000066400000000000000000000020001516525472400213770ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-stringindexof module.exports = function StringIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a String'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; if (searchValue === '' && fromIndex <= len) { return fromIndex; } var searchLen = searchValue.length; for (var i = fromIndex; i <= (len - searchLen); i += 1) { var candidate = $slice(string, i, i + searchLen); if (candidate === searchValue) { return i; } } return -1; }; ljharb-es-abstract-babee05/2021/StringPad.js000066400000000000000000000022661516525472400205650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/11.0/#sec-stringpad module.exports = function StringPad(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end') { throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); } var S = ToString(O); var intMaxLength = ToLength(maxLength); var stringLength = S.length; if (intMaxLength <= stringLength) { return S; } var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); if (filler === '') { return S; } var fillLen = intMaxLength - stringLength; // the String value consisting of repeated concatenations of filler truncated to length fillLen. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += filler; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start') { return truncatedStringFiller + S; } return S + truncatedStringFiller; }; ljharb-es-abstract-babee05/2021/StringToBigInt.js000066400000000000000000000011011516525472400215230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/11.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return NaN; } }; ljharb-es-abstract-babee05/2021/StringToCodePoints.js000066400000000000000000000011221516525472400224210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/12.0/#sec-stringtocodepoints module.exports = function StringToCodePoints(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2021/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2021/TestIntegrityLevel.js000066400000000000000000000022671516525472400225010ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2021/ThrowCompletion.js000066400000000000000000000003601516525472400220200ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2021/TimeClip.js000066400000000000000000000006671516525472400204030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2021/TimeFromYear.js000066400000000000000000000004051516525472400212260ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2021/TimeString.js000066400000000000000000000013401516525472400207470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); // https://262.ecma-international.org/9.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = HourFromTime(tv); var minute = MinFromTime(tv); var second = SecFromTime(tv); return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT'; }; ljharb-es-abstract-babee05/2021/TimeWithinDay.js000066400000000000000000000003671516525472400214110ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2021/TimeZoneString.js000066400000000000000000000034021516525472400216040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/12.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (typeof tv !== 'number' || isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); // steps 1 - 2 } // 3. Let offset be LocalTZA(tv, true). // 4. If offset ≥ +0𝔽, then // a. Let offsetSign be "+". // b. Let absOffset be offset. // 5. Else, // a. Let offsetSign be "-". // b. Let absOffset be -offset. // 6. Let offsetMin be the String representation of MinFromTime(absOffset), formatted as a two-digit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary. // 7. Let offsetHour be the String representation of HourFromTime(absOffset), formatted as a two-digit decimal number, padded to the left with the code unit 0x0030 (DIGIT ZERO) if necessary. // 8. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 9. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until LocalTZA, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2021/ToBigInt.js000066400000000000000000000024301516525472400203420ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (isNaN(n)) { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2021/ToBigInt64.js000066400000000000000000000016701516525472400205210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2021/ToBigUint64.js000066400000000000000000000013041516525472400207000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2021/ToBoolean.js000066400000000000000000000002021516525472400205400ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2021/ToDateString.js000066400000000000000000000010071516525472400212310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2021/ToIndex.js000066400000000000000000000011761516525472400202430ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var ToLength = require('./ToLength'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToIntegerOrInfinity(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValue(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2021/ToInt16.js000066400000000000000000000003771516525472400200770ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2021/ToInt32.js000066400000000000000000000002551516525472400200700ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2021/ToInt8.js000066400000000000000000000003621516525472400200120ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2021/ToIntegerOrInfinity.js000066400000000000000000000011471516525472400226020ustar00rootroot00000000000000'use strict'; var abs = require('./abs'); var floor = require('./floor'); var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // https://262.ecma-international.org/12.0/#sec-tointegerorinfinity module.exports = function ToIntegerOrInfinity(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0) { return 0; } if (!$isFinite(number)) { return number; } var integer = floor(abs(number)); if (integer === 0) { return 0; } return $sign(number) * integer; }; ljharb-es-abstract-babee05/2021/ToLength.js000066400000000000000000000006631516525472400204150ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToIntegerOrInfinity(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2021/ToNumber.js000066400000000000000000000031301516525472400204140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var $RegExp = GetIntrinsic('%RegExp%'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var isPrimitive = require('../helpers/isPrimitive'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/6.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { if (isBinary(value)) { return ToNumber($parseInteger($strSlice(value, 2), 2)); } else if (isOctal(value)) { return ToNumber($parseInteger($strSlice(value, 2), 8)); } else if (hasNonWS(value) || isInvalidHexLiteral(value)) { return NaN; } var trimmed = $trim(value); if (trimmed !== value) { return ToNumber(trimmed); } } return +value; }; ljharb-es-abstract-babee05/2021/ToNumeric.js000066400000000000000000000010131516525472400205640ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2021/ToObject.js000066400000000000000000000001761516525472400204010ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2021/ToPrimitive.js000066400000000000000000000004321516525472400211360ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2021/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230630ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2021/ToPropertyKey.js000066400000000000000000000006201516525472400214620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2021/ToString.js000066400000000000000000000006051516525472400204360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2021/ToUint16.js000066400000000000000000000011371516525472400202570ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2021/ToUint32.js000066400000000000000000000002571516525472400202570ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2021/ToUint8.js000066400000000000000000000011621516525472400201760ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2021/ToUint8Clamp.js000066400000000000000000000010101516525472400211430ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2021/TrimString.js000066400000000000000000000013641516525472400207720ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2021/Type.js000066400000000000000000000004511516525472400176050ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } if (typeof x === 'bigint') { return 'BigInt'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2021/TypedArrayCreate.js000066400000000000000000000032261516525472400220770ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2021/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234130ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2021/UTF16EncodeCodePoint.js000066400000000000000000000013021516525472400224100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-utf16encoding module.exports = function UTF16EncodeCodePoint(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2021/UTF16SurrogatePairToCodePoint.js000066400000000000000000000014131516525472400243100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2021/UnicodeEscape.js000066400000000000000000000014161516525472400213750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2021/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000116231516525472400256550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor // https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic. if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof O !== 'undefined' && !isPropertyKey(P)) { throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key'); } if (typeof current === 'undefined') { if (!extensible) { return false; } if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': Desc['[[Configurable]]'], '[[Enumerable]]': Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': Desc['[[Writable]]'] } ); } } else { if (!IsAccessorDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not an accessor descriptor'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } } return true; } if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) { return true; } if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) { return true; // removed by ES2017, but should still be correct } // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor if (!current['[[Configurable]]']) { if (Desc['[[Configurable]]']) { return false; } if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) { return false; } } if (IsGenericDescriptor(Desc)) { // no further validation is required. } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) { if (!current['[[Configurable]]']) { return false; } if (IsDataDescriptor(current)) { if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Get]]': void undefined } ); } } else if (typeof O !== 'undefined') { DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': current['[[Configurable]]'], '[[Enumerable]]': current['[[Enumerable]]'], '[[Value]]': void undefined } ); } } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) { if (!current['[[Configurable]]'] && !current['[[Writable]]']) { if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } return true; } } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) { if (!current['[[Configurable]]']) { if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } return true; } } else { throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.'); } if (typeof O !== 'undefined') { return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; }; ljharb-es-abstract-babee05/2021/ValidateAtomicAccess.js000066400000000000000000000024571516525472400227040ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var isTypedArray = require('is-typed-array'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/12.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); // step 1 } var length = typedArrayLength(typedArray); // step 2 var accessIndex = ToIndex(requestIndex); // step 3 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 5 } var arrayTypeName = whichTypedArray(typedArray); // step 6 var taType = tableTAO.name['$' + arrayTypeName]; var elementSize = tableTAO.size['$' + taType]; // step 7 var offset = typedArrayByteOffset(typedArray); // step 8 return (accessIndex * elementSize) + offset; // step 9 }; ljharb-es-abstract-babee05/2021/ValidateIntegerTypedArray.js000066400000000000000000000024401516525472400237400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var ValidateTypedArray = require('./ValidateTypedArray'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/12.0/#sec-validateintegertypedarray var tableTAO = require('./tables/typed-array-objects'); module.exports = function ValidateIntegerTypedArray(typedArray) { var waitable = arguments.length > 1 ? arguments[1] : false; // step 1 if (typeof waitable !== 'boolean') { throw new $TypeError('Assertion failed: `waitable` must be a Boolean'); } var buffer = ValidateTypedArray(typedArray); // step 2 var typeName = whichTypedArray(typedArray); // step 3 var type = tableTAO.name['$' + typeName]; // step 4 if (waitable) { // step 5 if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') { throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a } } else if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) { throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 6.a } return buffer; // step 7 }; ljharb-es-abstract-babee05/2021/ValidateTypedArray.js000066400000000000000000000014321516525472400224220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/6.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3 } var buffer = typedArrayBuffer(O); // step 4 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5 } return buffer; // step 6 }; ljharb-es-abstract-babee05/2021/WeakRefDeref.js000066400000000000000000000010641516525472400211570ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $deref = callBound('WeakRef.prototype.deref', true); var isWeakRef = require('is-weakref'); var AddToKeptObjects = require('./AddToKeptObjects'); // https://262.ecma-international.org/12.0/#sec-weakrefderef module.exports = function WeakRefDeref(weakRef) { if (!isWeakRef(weakRef)) { throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef'); } var target = $deref(weakRef); if (target) { AddToKeptObjects(target); } return target; }; ljharb-es-abstract-babee05/2021/WeekDay.js000066400000000000000000000003201516525472400202100ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2021/WordCharacters.js000066400000000000000000000026731516525472400216070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2021/YearFromTime.js000066400000000000000000000006161516525472400212320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2021/abs.js000066400000000000000000000003231516525472400174270ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2021/clamp.js000066400000000000000000000007741516525472400177700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var max = require('math-intrinsics/max'); var min = require('math-intrinsics/min'); // https://262.ecma-international.org/12.0/#clamping module.exports = function clamp(x, lower, upper) { if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) { throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`'); } return min(max(lower, x), upper); }; ljharb-es-abstract-babee05/2021/floor.js000066400000000000000000000004371516525472400200110ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2021/max.js000066400000000000000000000002061516525472400174470ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2021/min.js000066400000000000000000000002061516525472400174450ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2021/modulo.js000066400000000000000000000002501516525472400201600ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2021/msFromTime.js000066400000000000000000000003751516525472400207530ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2021/substring.js000066400000000000000000000011761516525472400207110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#substring module.exports = function substring(S, inclusiveStart, exclusiveEnd) { if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) { throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers'); } return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length); }; ljharb-es-abstract-babee05/2021/tables/000077500000000000000000000000001516525472400176005ustar00rootroot00000000000000ljharb-es-abstract-babee05/2021/tables/typed-array-objects.js000066400000000000000000000014061516525472400240270ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $BigInt64Array: 'BigInt64', $BigUint64Array: 'BigUint64', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $BigInt64: 8, $BigUint64: 8, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "BigInt64", "BigUint64", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2021/thisBigIntValue.js000066400000000000000000000007051516525472400217270ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/11.0/#sec-thisbigintvalue module.exports = function thisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2021/thisBooleanValue.js000066400000000000000000000005031516525472400221260ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2021/thisNumberValue.js000066400000000000000000000005321516525472400220010ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2021/thisStringValue.js000066400000000000000000000004751516525472400220250ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2021/thisSymbolValue.js000066400000000000000000000010161516525472400220140ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2021/thisTimeValue.js000066400000000000000000000003471516525472400214530ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2022/000077500000000000000000000000001516525472400163275ustar00rootroot00000000000000ljharb-es-abstract-babee05/2022/AddEntriesFromIterable.js000066400000000000000000000026101516525472400232020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2022/AddToKeptObjects.js000066400000000000000000000010251516525472400220140ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var ClearKeptObjects = require('./ClearKeptObjects'); // https://262.ecma-international.org/12.0/#sec-addtokeptobjects module.exports = function AddToKeptObjects(object) { if (!isObject(object)) { throw new $TypeError('Assertion failed: `object` must be an Object'); } var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'); arr[arr.length] = object; }; ljharb-es-abstract-babee05/2022/AdvanceStringIndex.js000066400000000000000000000016501516525472400224070ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/12.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2022/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000060721516525472400256530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasOwnProperty = require('./HasOwnProperty'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); var Type = require('./Type'); var NumberAdd = require('./Number/add'); var NumberBitwiseAND = require('./Number/bitwiseAND'); var NumberBitwiseOR = require('./Number/bitwiseOR'); var NumberBitwiseXOR = require('./Number/bitwiseXOR'); var NumberDivide = require('./Number/divide'); var NumberExponentiate = require('./Number/exponentiate'); var NumberLeftShift = require('./Number/leftShift'); var NumberMultiply = require('./Number/multiply'); var NumberRemainder = require('./Number/remainder'); var NumberSignedRightShift = require('./Number/signedRightShift'); var NumberSubtract = require('./Number/subtract'); var NumberUnsignedRightShift = require('./Number/unsignedRightShift'); var BigIntAdd = require('./BigInt/add'); var BigIntBitwiseAND = require('./BigInt/bitwiseAND'); var BigIntBitwiseOR = require('./BigInt/bitwiseOR'); var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR'); var BigIntDivide = require('./BigInt/divide'); var BigIntExponentiate = require('./BigInt/exponentiate'); var BigIntLeftShift = require('./BigInt/leftShift'); var BigIntMultiply = require('./BigInt/multiply'); var BigIntRemainder = require('./BigInt/remainder'); var BigIntSignedRightShift = require('./BigInt/signedRightShift'); var BigIntSubtract = require('./BigInt/subtract'); var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift'); // https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator // https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table var table = { '**': [NumberExponentiate, BigIntExponentiate], '*': [NumberMultiply, BigIntMultiply], '/': [NumberDivide, BigIntDivide], '%': [NumberRemainder, BigIntRemainder], '+': [NumberAdd, BigIntAdd], '-': [NumberSubtract, BigIntSubtract], '<<': [NumberLeftShift, BigIntLeftShift], '>>': [NumberSignedRightShift, BigIntSignedRightShift], '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift], '&': [NumberBitwiseAND, BigIntBitwiseAND], '^': [NumberBitwiseXOR, BigIntBitwiseXOR], '|': [NumberBitwiseOR, BigIntBitwiseOR] }; module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) { if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) { throw new $TypeError('Assertion failed: `opText` must be a valid operation string'); } if (opText === '+') { var lprim = ToPrimitive(lval); var rprim = ToPrimitive(rval); if (typeof lprim === 'string' || typeof rprim === 'string') { var lstr = ToString(lprim); var rstr = ToString(rprim); return lstr + rstr; } /* eslint no-param-reassign: 1 */ lval = lprim; rval = rprim; } var lnum = ToNumeric(lval); var rnum = ToNumeric(rval); if (Type(lnum) !== Type(rnum)) { throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ'); } var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0]; return Operation(lnum, rnum); }; ljharb-es-abstract-babee05/2022/ArrayCreate.js000066400000000000000000000026151516525472400210730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/12.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 3, 5 if (proto !== $ArrayPrototype) { // step 4 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 6 A.length = length; } /* step 6, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2022/ArraySetLength.js000066400000000000000000000045661516525472400215740ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2022/ArraySpeciesCreate.js000066400000000000000000000025311516525472400224040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var ArrayCreate = require('./ArrayCreate'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var isArray = IsArray(originalArray); if (!isArray) { return ArrayCreate(length); } var C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } if (typeof C === 'undefined') { return ArrayCreate(length); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(length); // Construct(C, length); }; ljharb-es-abstract-babee05/2022/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2022/AsyncIteratorClose.js000066400000000000000000000036211516525472400224440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/12.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return $then( $then( $then( new $Promise(function (resolve) { resolve(GetMethod(iterator, 'return')); // step 4 // resolve(Call(ret, iterator, [])); // step 6 }), function (returnV) { // step 5.a if (typeof returnV === 'undefined') { return completion; // step 5.b } return Call(returnV, iterator); // step 5.c, 5.d. } ), null, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 6 } else { throw e; // step 7 } } ), function (innerResult) { // step 8 if (completion.type() === 'throw') { completion['?'](); // step 6 } if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; } ); }; ljharb-es-abstract-babee05/2022/BigInt/000077500000000000000000000000001516525472400175035ustar00rootroot00000000000000ljharb-es-abstract-babee05/2022/BigInt/add.js000066400000000000000000000005751516525472400206000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2022/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2022/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2022/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2022/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2022/BigInt/divide.js000066400000000000000000000011251516525472400213040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2022/BigInt/equal.js000066400000000000000000000006021516525472400211460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2022/BigInt/exponentiate.js000066400000000000000000000015251516525472400225470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2022/BigInt/index.js000066400000000000000000000023721516525472400211540ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2022/BigInt/leftShift.js000066400000000000000000000006121516525472400217700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2022/BigInt/lessThan.js000066400000000000000000000006071516525472400216250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2022/BigInt/multiply.js000066400000000000000000000006071516525472400217230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2022/BigInt/remainder.js000066400000000000000000000012401516525472400220040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2022/BigInt/sameValue.js000066400000000000000000000006211516525472400217620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue module.exports = function BigIntSameValue(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2022/BigInt/sameValueZero.js000066400000000000000000000006311516525472400226230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntEqual = require('./equal'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero module.exports = function BigIntSameValueZero(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntEqual(x, y); }; ljharb-es-abstract-babee05/2022/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2022/BigInt/subtract.js000066400000000000000000000006071516525472400216730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2022/BigInt/toString.js000066400000000000000000000006121516525472400216510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } return $String(x); }; ljharb-es-abstract-babee05/2022/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2022/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2022/BigIntBitwiseOp.js000066400000000000000000000031771516525472400216770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2022/BinaryAnd.js000066400000000000000000000004741516525472400205410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2022/BinaryOr.js000066400000000000000000000004721516525472400204150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2022/BinaryXor.js000066400000000000000000000004741516525472400206070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2022/ByteListBitwiseOp.js000066400000000000000000000022371516525472400222560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) { if (op !== '&' && op !== '^' && op !== '|') { throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`'); } if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var result = []; for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var resultByte; if (op === '&') { resultByte = xByte & yByte; } else if (op === '^') { resultByte = xByte ^ yByte; } else { resultByte = xByte | yByte; } result[result.length] = resultByte; } return result; }; ljharb-es-abstract-babee05/2022/ByteListEqual.js000066400000000000000000000015341516525472400214170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistequal module.exports = function ByteListEqual(xBytes, yBytes) { if (!IsArray(xBytes) || !IsArray(yBytes)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xBytes.length !== yBytes.length) { return false; } for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xByte !== yByte) { return false; } } return true; }; ljharb-es-abstract-babee05/2022/Call.js000066400000000000000000000011351516525472400175400ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2022/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2022/Canonicalize.js000066400000000000000000000022421516525472400212640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(ch, IgnoreCase, Unicode) { if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be Booleans'); } if (!IgnoreCase) { return ch; // step 1 } if (Unicode) { // step 2 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 2.b } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/2022/CharacterRange.js000066400000000000000000000024751516525472400215460ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2022/ClearKeptObjects.js000066400000000000000000000004511516525472400220510ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var keptObjects = []; // https://262.ecma-international.org/12.0/#sec-clear-kept-objects module.exports = function ClearKeptObjects() { keptObjects.length = 0; }; SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects); ljharb-es-abstract-babee05/2022/CloneArrayBuffer.js000066400000000000000000000035511516525472400220620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsConstructor = require('./IsConstructor'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf'); var isInteger = require('math-intrinsics/isInteger'); var isArrayBuffer = require('is-array-buffer'); var arrayBufferSlice = require('arraybuffer.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-clonearraybuffer module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) { if (!isArrayBuffer(srcBuffer)) { throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance'); } if (!isInteger(srcByteOffset) || srcByteOffset < 0) { throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer'); } if (!isInteger(srcLength) || srcLength < 0) { throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer'); } if (!IsConstructor(cloneConstructor)) { throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor'); } // 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4 } /* 5. Let srcBlock be srcBuffer.[[ArrayBufferData]]. 6. Let targetBlock be targetBuffer.[[ArrayBufferData]]. 7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength). */ var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7 OrdinarySetPrototypeOf(targetBuffer, proto); // step 3 return targetBuffer; // step 8 }; ljharb-es-abstract-babee05/2022/CodePointAt.js000066400000000000000000000031611516525472400210370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/12.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2022/CodePointsToString.js000066400000000000000000000013371516525472400224320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-codepointstostring module.exports = function CodePointsToString(text) { if (!IsArray(text)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } var result = ''; forEach(text, function (cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } result += UTF16EncodeCodePoint(cp); }); return result; }; ljharb-es-abstract-babee05/2022/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2022/CompletionRecord.js000066400000000000000000000025141516525472400221370ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2022/CopyDataProperties.js000066400000000000000000000037031516525472400224510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var forEach = require('../helpers/forEach'); var every = require('../helpers/every'); var some = require('../helpers/some'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var keys = OwnPropertyKeys(from); forEach(keys, function (nextKey) { var excluded = some(excludedItems, function (e) { return SameValue(e, nextKey) === true; }); /* var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); */ var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && isInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2022/CreateAsyncFromSyncIterator.js000066400000000000000000000107561516525472400242720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord['[[Iterator]]'], value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord['[[Iterator]]']);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2022/CreateDataProperty.js000066400000000000000000000013231516525472400224260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2022/CreateDataPropertyOrThrow.js000066400000000000000000000012741516525472400237600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } return success; }; ljharb-es-abstract-babee05/2022/CreateHTML.js000066400000000000000000000015051516525472400205560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2022/CreateIterResultObject.js000066400000000000000000000005351516525472400232450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2022/CreateListFromArrayLike.js000066400000000000000000000025301516525472400233540ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object']; // https://262.ecma-international.org/11.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = LengthOfArrayLike(obj); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2022/CreateMethodProperty.js000066400000000000000000000016601516525472400230010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2022/CreateNonEnumerableDataPropertyOrThrow.js000066400000000000000000000013641516525472400264330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow module.exports = function CreateNonEnumerableDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefinePropertyOrThrow(O, P, newDesc); }; ljharb-es-abstract-babee05/2022/CreateRegExpStringIterator.js000066400000000000000000000065301516525472400241100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIterResultObject = require('./CreateIterResultObject'); var CreateMethodProperty = require('./CreateMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIterResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIterResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(match, false); }; CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn); } } // https://262.ecma-international.org/11.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2022/DateFromTime.js000066400000000000000000000017341516525472400212120ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2022/DateString.js000066400000000000000000000017271516525472400207400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2022/Day.js000066400000000000000000000003521516525472400174020ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2022/DayFromYear.js000066400000000000000000000004001516525472400210410ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2022/DayWithinYear.js000066400000000000000000000004361516525472400214110ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2022/DaysInYear.js000066400000000000000000000004551516525472400207010ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2022/DefineMethodProperty.js000066400000000000000000000027411516525472400227710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-definemethodproperty module.exports = function DefineMethodProperty(homeObject, key, closure, enumerable) { if (!isObject(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an Object'); } if (!isPropertyKey(key)) { throw new $TypeError('Assertion failed: `key` is not a Property Key or a Private Name'); } if (typeof closure !== 'function') { throw new $TypeError('Assertion failed: `closure` is not a function'); } if (typeof enumerable !== 'boolean') { throw new $TypeError('Assertion failed: `enumerable` is not a Boolean'); } // 1. Assert: homeObject is an ordinary, extensible object with no non-configurable properties. if (!IsExtensible(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an ordinary, extensible object, with no non-configurable properties'); } // 2. If key is a Private Name, then // a. Return PrivateElement { [[Key]]: key, [[Kind]]: method, [[Value]]: closure }. // 3. Else, var desc = { // step 3.a '[[Value]]': closure, '[[Writable]]': true, '[[Enumerable]]': enumerable, '[[Configurable]]': true }; DefinePropertyOrThrow(homeObject, key, desc); // step 3.b }; ljharb-es-abstract-babee05/2022/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2022/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2022/DetachArrayBuffer.js000066400000000000000000000032571516525472400222150ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2022/EnumerableOwnPropertyNames.js000066400000000000000000000017571516525472400241730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/8.0/#sec-enumerableownproperties module.exports = function EnumerableOwnPropertyNames(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2022/FlattenIntoArray.js000066400000000000000000000032201516525472400221100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2022/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2022/Get.js000066400000000000000000000010701516525472400174020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2022/GetGlobalObject.js000066400000000000000000000003061516525472400216530ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2022/GetIterator.js000066400000000000000000000032721516525472400211220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var getIteratorMethod = require('../helpers/getIteratorMethod'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/9.0/#sec-getiterator module.exports = function GetIterator(obj, hint, method) { var actualHint = hint; if (arguments.length < 2) { actualHint = 'sync'; } if (actualHint !== 'sync' && actualHint !== 'async') { throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint)); } var actualMethod = method; if (arguments.length < 3) { if (actualHint === 'async') { if (hasSymbols && $asyncIterator) { actualMethod = GetMethod(obj, $asyncIterator); } if (typeof actualMethod === 'undefined') { throw new $SyntaxError("async from sync iterators aren't currently supported"); } } else { actualMethod = getIteratorMethod(ES, obj); } } var iterator = Call(actualMethod, obj); if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); } return iterator; // TODO: This should return an IteratorRecord /* var nextMethod = GetV(iterator, 'next'); return { '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; */ }; ljharb-es-abstract-babee05/2022/GetMatchIndexPair.js000066400000000000000000000015051516525472400221660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function GetMatchIndexPair(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return [match['[[StartIndex]]'], match['[[EndIndex]]']]; }; ljharb-es-abstract-babee05/2022/GetMatchString.js000066400000000000000000000015641516525472400215560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchstring module.exports = function GetMatchString(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return substring(S, match['[[StartIndex]]'], match['[[EndIndex]]']); }; ljharb-es-abstract-babee05/2022/GetMethod.js000066400000000000000000000012541516525472400205470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2022/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2022/GetPromiseResolve.js000066400000000000000000000011771516525472400223110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-getpromiseresolve module.exports = function GetPromiseResolve(promiseConstructor) { if (!IsConstructor(promiseConstructor)) { throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor'); } var promiseResolve = Get(promiseConstructor, 'resolve'); if (IsCallable(promiseResolve) === false) { throw new $TypeError('`resolve` method is not callable'); } return promiseResolve; }; ljharb-es-abstract-babee05/2022/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2022/GetStringIndex.js000066400000000000000000000013701516525472400215640ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var StringToCodePoints = require('./StringToCodePoints'); var $indexOf = callBound('String.prototype.indexOf'); // https://262.ecma-international.org/13.0/#sec-getstringindex module.exports = function GetStringIndex(S, e) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(e) || e < 0) { throw new $TypeError('Assertion failed: `e` must be a non-negative integer'); } if (S === '') { return 0; } var codepoints = StringToCodePoints(S); var eUTF = e >= codepoints.length ? S.length : $indexOf(S, codepoints[e]); return eUTF; }; ljharb-es-abstract-babee05/2022/GetSubstitution.js000066400000000000000000000132041516525472400220410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexTester = require('safe-regex-test'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var Get = require('./Get'); var IsArray = require('./IsArray'); var min = require('./min'); var StringIndexOf = require('./StringIndexOf'); var StringToNumber = require('./StringToNumber'); var substring = require('./substring'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isPrefixOf = require('../helpers/isPrefixOf'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); var startsWithDollarDigit = regexTester(/^\$[0-9]/); // http://www.ecma-international.org/ecma-262/13.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacementTemplate) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof namedCaptures !== 'undefined' && !isObject(namedCaptures)) { throw new $TypeError('Assertion failed: `namedCaptures` must be `undefined` or an Object'); } if (typeof replacementTemplate !== 'string') { throw new $TypeError('Assertion failed: `replacementTemplate` must be a String'); } var stringLength = str.length; // step 1 if (position > stringLength) { throw new $TypeError('Assertion failed: position > stringLength, got ' + inspect(position)); // step 2 } var templateRemainder = replacementTemplate; // step 3 var result = ''; // step 4 while (templateRemainder !== '') { // step 5 // 5.a NOTE: The following steps isolate ref (a prefix of templateRemainder), determine refReplacement (its replacement), and then append that replacement to result. var ref, refReplacement, found, capture; if (isPrefixOf('$$', templateRemainder)) { // step 5.b ref = '$$'; // step 5.b.i refReplacement = '$'; // step 5.b.ii } else if (isPrefixOf('$`', templateRemainder)) { // step 5.c ref = '$`'; // step 5.c.i refReplacement = substring(str, 0, position); // step 5.c.ii } else if (isPrefixOf('$&', templateRemainder)) { // step 5.d ref = '$&'; // step 5.d.i refReplacement = matched; // step 5.d.ii } else if (isPrefixOf('$\'', templateRemainder)) { // step 5.e ref = '$\''; // step 5.e.i var matchLength = matched.length; // step 5.e.ii var tailPos = position + matchLength; // step 5.e.iii refReplacement = substring(str, min(tailPos, stringLength)); // step 5.e.iv // 5.e.v NOTE: tailPos can exceed stringLength only if this abstract operation was invoked by a call to the intrinsic @@replace method of %RegExp.prototype% on an object whose "exec" property is not the intrinsic %RegExp.prototype.exec%. } else if (startsWithDollarDigit(templateRemainder)) { // step 5.f found = false; // step 5.f.i for (var d = 2; d > 0; d -= 1) { // step 5.f.ii // If found is false and templateRemainder starts with "$" followed by d or more decimal digits, then if (!found) { // step 5.f.ii.1 found = true; // step 5.f.ii.1.a ref = substring(templateRemainder, 0, 1 + d); // step 5.f.ii.1.b var digits = substring(templateRemainder, 1, 1 + d); // step 5.f.ii.1.c var index = StringToNumber(digits); // step 5.f.ii.1.d if (index < 0 || index > 99) { throw new $TypeError('Assertion failed: `index` must be >= 0 and <= 99'); // step 5.f.ii.1.e } if (index === 0) { // step 5.f.ii.1.f refReplacement = ref; } else if (index <= captures.length) { // step 5.f.ii.1.g capture = captures[index - 1]; // step 5.f.ii.1.g.i if (typeof capture === 'undefined') { // step 5.f.ii.1.g.ii refReplacement = ''; // step 5.f.ii.1.g.ii.i } else { // step 5.f.ii.1.g.iii refReplacement = capture; // step 5.f.ii.1.g.iii.i } } else { // step 5.f.ii.1.h refReplacement = ref; // step 5.f.ii.1.h.i } } } } else if (isPrefixOf('$<', templateRemainder)) { // step 5.g var gtPos = StringIndexOf(templateRemainder, '>', 0); // step 5.g.i if (gtPos === -1 || typeof namedCaptures === 'undefined') { // step 5.g.ii ref = '$<'; // step 5.g.ii.1 refReplacement = ref; // step 5.g.ii.2 } else { // step 5.g.iii ref = substring(templateRemainder, 0, gtPos + 1); // step 5.g.iii.1 var groupName = substring(templateRemainder, 2, gtPos); // step 5.g.iii.2 if (!isObject(namedCaptures)) { throw new $TypeError('Assertion failed: Type(namedCaptures) is not Object'); // step 5.g.iii.3 } capture = Get(namedCaptures, groupName); // step 5.g.iii.4 if (typeof capture === 'undefined') { // step 5.g.iii.5 refReplacement = ''; // step 5.g.iii.5.a } else { // step 5.g.iii.6 refReplacement = ToString(capture); // step 5.g.iii.6.a } } } else { // step 5.h ref = substring(templateRemainder, 0, 1); // step 5.h.i refReplacement = ref; // step 5.h.ii } var refLength = ref.length; // step 5.i templateRemainder = substring(templateRemainder, refLength); // step 5.j result += refReplacement; // step 5.k } return result; // step 6 }; ljharb-es-abstract-babee05/2022/GetV.js000066400000000000000000000007541516525472400175400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2022/GetValueFromBuffer.js000066400000000000000000000106561516525472400223670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered') { throw new $TypeError('Assertion failed: `order` must be either `SeqCst` or `Unordered`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2022/HasOwnProperty.js000066400000000000000000000010241516525472400216260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2022/HasProperty.js000066400000000000000000000007471516525472400211550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2022/HourFromTime.js000066400000000000000000000005761516525472400212550ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2022/InLeapYear.js000066400000000000000000000007161516525472400206620ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2022/InstallErrorCause.js000066400000000000000000000012271516525472400222700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateNonEnumerableDataPropertyOrThrow = require('./CreateNonEnumerableDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); // https://262.ecma-international.org/13.0/#sec-installerrorcause module.exports = function InstallErrorCause(O, options) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (isObject(options) && HasProperty(options, 'cause')) { var cause = Get(options, 'cause'); CreateNonEnumerableDataPropertyOrThrow(O, 'cause', cause); } }; ljharb-es-abstract-babee05/2022/InstanceofOperator.js000066400000000000000000000016371516525472400225010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2022/IntegerIndexedElementGet.js000066400000000000000000000023211516525472400235330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/13.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 1 } var offset = typedArrayByteOffset(O); // step 2 var elementSize = TypedArrayElementSize(O); // step 3 var indexedPosition = (index * elementSize) + offset; // step 4 var elementType = TypedArrayElementType(O); // step 5 return GetValueFromBuffer(typedArrayBuffer(O), indexedPosition, elementType, true, 'Unordered'); // step 11 }; ljharb-es-abstract-babee05/2022/IntegerIndexedElementSet.js000066400000000000000000000030211516525472400235450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { var arrayTypeName = whichTypedArray(O); if (!arrayTypeName) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } var contentType = arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array' ? 'BigInt' : 'Number'; var numValue = contentType === 'BigInt' ? ToBigInt(value) : ToNumber(value); // steps 1 - 2 if (IsValidIntegerIndex(O, index)) { // step 3 var offset = typedArrayByteOffset(O); // step 3.a var elementSize = TypedArrayElementSize(O); // step 3.b var indexedPosition = (index * elementSize) + offset; // step 3.c var elementType = TypedArrayElementType(O); // step 3.d SetValueInBuffer(typedArrayBuffer(O), indexedPosition, elementType, numValue, true, 'Unordered'); // step 3.e } }; ljharb-es-abstract-babee05/2022/InternalizeJSONProperty.js000066400000000000000000000040721516525472400234130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnPropertyNames = require('./EnumerableOwnPropertyNames'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/11.0/#sec-internalizejsonproperty module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val, 'length'); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnPropertyNames(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2022/Invoke.js000066400000000000000000000012371516525472400201230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2022/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2022/IsArray.js000066400000000000000000000001661516525472400202420ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2022/IsBigIntElementType.js000066400000000000000000000003021516525472400225040ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BigUint64' || type === 'BigInt64'; }; ljharb-es-abstract-babee05/2022/IsCallable.js000066400000000000000000000001541516525472400206600ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2022/IsCompatiblePropertyDescriptor.js000066400000000000000000000005731516525472400250510ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, '', Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2022/IsConcatSpreadable.js000066400000000000000000000011741516525472400223560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2022/IsConstructor.js000066400000000000000000000021701516525472400215060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2022/IsDataDescriptor.js000066400000000000000000000010611516525472400220670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2022/IsDetachedBuffer.js000066400000000000000000000017461516525472400220240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2022/IsExtensible.js000066400000000000000000000007701516525472400212670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2022/IsGenericDescriptor.js000066400000000000000000000012201516525472400225670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2022/IsIntegralNumber.js000066400000000000000000000003301516525472400220730ustar00rootroot00000000000000'use strict'; var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-isinteger module.exports = function IsIntegralNumber(argument) { return isInteger(argument); }; ljharb-es-abstract-babee05/2022/IsLessThan.js000066400000000000000000000047021516525472400207050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var IsStringPrefix = require('./IsStringPrefix'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); // https://262.ecma-international.org/13.0/#sec-islessthan // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function IsLessThan(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { if (IsStringPrefix(py, px)) { return false; } if (IsStringPrefix(px, py)) { return true; } /* c. Let k be the smallest non-negative integer such that the code unit at index k within px is different from the code unit at index k within py. (There must be such a k, for neither String is a prefix of the other.) d. Let m be the integer that is the numeric value of the code unit at index k within px. e. Let n be the integer that is the numeric value of the code unit at index k within py. f. If m < n, return true. Otherwise, return false. */ return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if (typeof ny === 'undefined') { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if (typeof nx === 'undefined') { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (typeof nx === typeof ny) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both finite, and the same type }; ljharb-es-abstract-babee05/2022/IsLooselyEqual.js000066400000000000000000000034051516525472400216010ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var isObject = require('es-object-atoms/isObject'); var IsStrictlyEqual = require('./IsStrictlyEqual'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/13.0/#sec-islooselyequal module.exports = function IsLooselyEqual(x, y) { if (isSameType(x, y)) { return IsStrictlyEqual(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return IsLooselyEqual(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return IsLooselyEqual(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (typeof n === 'undefined') { return false; } return IsLooselyEqual(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return IsLooselyEqual(y, x); } if (typeof x === 'boolean') { return IsLooselyEqual(ToNumber(x), y); } if (typeof y === 'boolean') { return IsLooselyEqual(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol' || typeof x === 'bigint') && isObject(y)) { return IsLooselyEqual(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol' || typeof y === 'bigint')) { return IsLooselyEqual(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (!isFinite(x) || !isFinite(y)) { return false; } // eslint-disable-next-line eqeqeq return x == y; // shortcut for step 13.b. } return false; }; ljharb-es-abstract-babee05/2022/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231030ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/11.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') { return true; } return false; }; ljharb-es-abstract-babee05/2022/IsPromise.js000066400000000000000000000007451516525472400206050ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2022/IsPropertyKey.js000066400000000000000000000003371516525472400214610ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2022/IsRegExp.js000066400000000000000000000010721516525472400203530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2022/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2022/IsStrictlyEqual.js000066400000000000000000000010161516525472400217640ustar00rootroot00000000000000'use strict'; var SameValueNonNumeric = require('./SameValueNonNumeric'); var Type = require('./Type'); var BigIntEqual = require('./BigInt/equal'); var NumberEqual = require('./Number/equal'); // https://262.ecma-international.org/13.0/#sec-isstrictlyequal module.exports = function IsStrictlyEqual(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'number' || typeof x === 'bigint') { return typeof x === 'number' ? NumberEqual(x, y) : BigIntEqual(x, y); } return SameValueNonNumeric(x, y); }; ljharb-es-abstract-babee05/2022/IsStringPrefix.js000066400000000000000000000007171516525472400216120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var StringIndexOf = require('./StringIndexOf'); // https://262.ecma-international.org/13.0/#sec-isstringprefix module.exports = function IsStringPrefix(p, q) { if (typeof p !== 'string') { throw new $TypeError('Assertion failed: "p" must be a String'); } if (typeof q !== 'string') { throw new $TypeError('Assertion failed: "q" must be a String'); } return StringIndexOf(q, p, 0) === 0; }; ljharb-es-abstract-babee05/2022/IsStringWellFormedUnicode.js000066400000000000000000000011771516525472400237250ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/13.0/#sec-isstringwellformedunicode module.exports = function IsStringWellFormedUnicode(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var strLen = string.length; // step 1 var k = 0; // step 2 while (k !== strLen) { // step 3 var cp = CodePointAt(string, k); // step 3.a if (cp['[[IsUnpairedSurrogate]]']) { return false; // step 3.b } k += cp['[[CodeUnitCount]]']; // step 3.c } return true; // step 4 }; ljharb-es-abstract-babee05/2022/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245640ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'Int8' || type === 'Uint8' || type === 'Int16' || type === 'Uint16' || type === 'Int32' || type === 'Uint32'; }; ljharb-es-abstract-babee05/2022/IsUnsignedElementType.js000066400000000000000000000004121516525472400231060ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'Uint8' || type === 'Uint8C' || type === 'Uint16' || type === 'Uint32' || type === 'BigUint64'; }; ljharb-es-abstract-babee05/2022/IsValidIntegerIndex.js000066400000000000000000000015641516525472400225340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isInteger = require('math-intrinsics/isInteger'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/12.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { // Assert: O is an Integer-Indexed exotic object. var buffer = typedArrayBuffer(O); // step 1 if (typeof index !== 'number') { throw new $TypeError('Assertion failed: Type(index) is not Number'); } if (IsDetachedBuffer(buffer)) { return false; } // step 2 if (!isInteger(index)) { return false; } // step 3 if (isNegativeZero(index)) { return false; } // step 4 if (index < 0 || index >= O.length) { return false; } // step 5 return true; // step 6 }; ljharb-es-abstract-babee05/2022/IsWordChar.js000066400000000000000000000025461516525472400207010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isInteger = require('math-intrinsics/isInteger'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/12.0/#sec-runtime-semantics-iswordchar-abstract-operation // note: prior to ES2023, this AO erroneously omitted the latter of its arguments. module.exports = function IsWordChar(e, InputLength, Input, IgnoreCase, Unicode) { if (!isInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } if (!isInteger(InputLength)) { throw new $TypeError('Assertion failed: `InputLength` must be an integer'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } if (e === -1 || e === InputLength) { return false; // step 1 } var c = Input[e]; // step 2 var wordChars = WordCharacters(IgnoreCase, Unicode); return $indexOf(wordChars, c) > -1; // steps 3-4 }; ljharb-es-abstract-babee05/2022/IterableToList.js000066400000000000000000000011601516525472400215510ustar00rootroot00000000000000'use strict'; var GetIterator = require('./GetIterator'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); // https://262.ecma-international.org/12.0/#sec-iterabletolist module.exports = function IterableToList(items) { var iterator; if (arguments.length > 1) { iterator = GetIterator(items, 'sync', arguments[1]); } else { iterator = GetIterator(items, 'sync'); } var values = []; var next = true; while (next) { next = IteratorStep(iterator); if (next) { var nextValue = IteratorValue(next); values[values.length] = nextValue; } } return values; }; ljharb-es-abstract-babee05/2022/IteratorClose.js000066400000000000000000000033441516525472400214500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-iteratorclose module.exports = function IteratorClose(iterator, completion) { if (!isObject(iterator)) { throw new $TypeError('Assertion failed: Type(iterator) is not Object'); } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iteratorReturn = GetMethod(iterator, 'return'); if (typeof iteratorReturn === 'undefined') { return completionThunk(); } var completionRecord; try { var innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing // if the completion is of type "throw", this will throw. completionThunk(); // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; } completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2022/IteratorComplete.js000066400000000000000000000007131516525472400221500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2022/IteratorNext.js000066400000000000000000000007061516525472400213200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Invoke = require('./Invoke'); // https://262.ecma-international.org/6.0/#sec-iteratornext module.exports = function IteratorNext(iterator, value) { var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]); if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); } return result; }; ljharb-es-abstract-babee05/2022/IteratorStep.js000066400000000000000000000005341516525472400213140ustar00rootroot00000000000000'use strict'; var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); // https://262.ecma-international.org/6.0/#sec-iteratorstep module.exports = function IteratorStep(iterator) { var result = IteratorNext(iterator); var done = IteratorComplete(result); return done === true ? false : result; }; ljharb-es-abstract-babee05/2022/IteratorValue.js000066400000000000000000000006241516525472400214550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2022/LengthOfArrayLike.js000066400000000000000000000007151516525472400222020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2022/MakeDate.js000066400000000000000000000005161516525472400203420ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2022/MakeDay.js000066400000000000000000000017641516525472400202100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToIntegerOrInfinity(year); var m = ToIntegerOrInfinity(month); var dt = ToIntegerOrInfinity(date); var ym = y + floor(m / 12); if (!$isFinite(ym)) { return NaN; } var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2022/MakeMatchIndicesIndexPairArray.js000066400000000000000000000052261516525472400246260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayCreate = require('./ArrayCreate'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var GetMatchIndexPair = require('./GetMatchIndexPair'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isMatchRecord = require('../helpers/records/match-record'); var isStringOrUndefined = function isStringOrUndefined(s) { return typeof s === 'undefined' || typeof s === 'string'; }; var isMatchRecordOrUndefined = function isMatchRecordOrUndefined(m) { return typeof m === 'undefined' || isMatchRecord(m); }; var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function MakeMatchIndicesIndexPairArray(S, indices, groupNames, hasGroups) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!IsArray(indices) || !every(indices, isMatchRecordOrUndefined)) { throw new $TypeError('Assertion failed: `indices` must be a List of either Match Records or `undefined`'); } if (!IsArray(groupNames) || !every(groupNames, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `groupNames` must be a List of either Strings or `undefined`'); } if (typeof hasGroups !== 'boolean') { throw new $TypeError('Assertion failed: `hasGroups` must be a Boolean'); } var n = indices.length; // step 1 if (!(n < MAX_ARRAY_LENGTH)) { throw new $TypeError('Assertion failed: `indices` length must be less than the max array size, 2**32 - 1'); } if (groupNames.length !== n - 1) { throw new $TypeError('Assertion failed: `groupNames` must have exactly one fewer item than `indices`'); } var A = ArrayCreate(n); // step 5 var groups = hasGroups ? OrdinaryObjectCreate(null) : void undefined; // step 6-7 CreateDataPropertyOrThrow(A, 'groups', groups); // step 8 for (var i = 0; i < n; i += 1) { // step 9 var matchIndices = indices[i]; // step 9.a // eslint-disable-next-line no-negated-condition var matchIndexPair = typeof matchIndices !== 'undefined' ? GetMatchIndexPair(S, matchIndices) : void undefined; // step 9.b-9.c CreateDataPropertyOrThrow(A, ToString(i), matchIndexPair); // step 9.d if (i > 0 && typeof groupNames[i - 1] !== 'undefined') { // step 9.e if (!groups) { throw new $TypeError('if `hasGroups` is `false`, `groupNames` can only contain `undefined` values'); } CreateDataPropertyOrThrow(groups, groupNames[i - 1], matchIndexPair); // step 9.e.i } } return A; // step 10 }; ljharb-es-abstract-babee05/2022/MakeTime.js000066400000000000000000000013731516525472400203650ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-maketime module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToIntegerOrInfinity(hour); var m = ToIntegerOrInfinity(min); var s = ToIntegerOrInfinity(sec); var milli = ToIntegerOrInfinity(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2022/MinFromTime.js000066400000000000000000000006141516525472400210540ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2022/MonthFromTime.js000066400000000000000000000021511516525472400214140ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2022/NewPromiseCapability.js000066400000000000000000000023141516525472400227570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2022/NormalCompletion.js000066400000000000000000000003551516525472400221520ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2022/Number/000077500000000000000000000000001516525472400175575ustar00rootroot00000000000000ljharb-es-abstract-babee05/2022/Number/add.js000066400000000000000000000014401516525472400206440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if (!isFinite(x)) { return x; } if (!isFinite(y)) { return y; } if (x === y && x === 0) { // both zeroes return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2022/Number/bitwiseAND.js000066400000000000000000000006521516525472400221110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2022/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2022/Number/bitwiseOR.js000066400000000000000000000006501516525472400220250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2022/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2022/Number/divide.js000066400000000000000000000010641516525472400213620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2022/Number/equal.js000066400000000000000000000007371516525472400212330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2022/Number/exponentiate.js000066400000000000000000000033141516525472400226210ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2022/Number/index.js000066400000000000000000000023721516525472400212300ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2022/Number/leftShift.js000066400000000000000000000010621516525472400220440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum << shiftCount; }; ljharb-es-abstract-babee05/2022/Number/lessThan.js000066400000000000000000000010641516525472400216770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2022/Number/multiply.js000066400000000000000000000014661516525472400220030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2022/Number/remainder.js000066400000000000000000000017511516525472400220670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || n === 0) { return n; } // In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved… return n % d; }; ljharb-es-abstract-babee05/2022/Number/sameValue.js000066400000000000000000000010711516525472400220360ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2022/Number/sameValueZero.js000066400000000000000000000007611516525472400227030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2022/Number/signedRightShift.js000066400000000000000000000011001516525472400233520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2022/Number/subtract.js000066400000000000000000000007121516525472400217440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberAdd = require('./add'); var NumberUnaryMinus = require('./unaryMinus'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberAdd(x, NumberUnaryMinus(y)); }; ljharb-es-abstract-babee05/2022/Number/toString.js000066400000000000000000000006121516525472400217250ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } return $String(x); }; ljharb-es-abstract-babee05/2022/Number/unaryMinus.js000066400000000000000000000006071516525472400222720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2022/Number/unsignedRightShift.js000066400000000000000000000011051516525472400237220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2022/NumberBitwiseOp.js000066400000000000000000000012511516525472400217420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2022/NumberToBigInt.js000066400000000000000000000014311516525472400215140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2022/NumericToRawBytes.js000066400000000000000000000037501516525472400222600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32, $BigInt64: ToBigInt64, $BigUint64: ToBigUint64 }; // https://262.ecma-international.org/11.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2022/ObjectDefineProperties.js000066400000000000000000000026331516525472400232670ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2022/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400246750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2022/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240150ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2022/OrdinaryGetOwnProperty.js000066400000000000000000000022531516525472400233470ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var hasOwn = require('hasown'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2022/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2022/OrdinaryHasInstance.js000066400000000000000000000010731516525472400225760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2022/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2022/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227270ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2022/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2022/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2022/PromiseResolve.js000066400000000000000000000007721516525472400216510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2022/QuoteJSONString.js000066400000000000000000000026161516525472400216500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var hasOwn = require('hasown'); // https://262.ecma-international.org/12.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(StringToCodePoints(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16EncodeCodePoint(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2022/RawBytesToNumeric.js000066400000000000000000000045001516525472400222520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2022/RegExpCreate.js000066400000000000000000000012031516525472400211770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2022/RegExpExec.js000066400000000000000000000014761516525472400206740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2022/RegExpHasFlag.js000066400000000000000000000021211516525472400213010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $RegExpPrototype = GetIntrinsic('%RegExp.prototype%'); var SameValue = require('./SameValue'); var $indexOf = callBound('String.prototype.indexOf'); var hasRegExpMatcher = require('is-regex'); var getFlags = require('regexp.prototype.flags'); // https://262.ecma-international.org/13.0/#sec-regexphasflag module.exports = function RegExpHasFlag(R, codeUnit) { if (typeof codeUnit !== 'string' || codeUnit.length !== 1) { throw new $TypeError('Assertion failed: `string` must be a code unit - a String of length 1'); } if (!isObject(R)) { throw new $TypeError('Assertion failed: Type(R) is not Object'); } if (!hasRegExpMatcher(R)) { // step 2 if (SameValue(R, $RegExpPrototype)) { return void undefined; // step 2.a } throw new $TypeError('`R` must be a RegExp object'); // step 2.b } var flags = getFlags(R); // step 3 return $indexOf(flags, codeUnit) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2022/RequireObjectCoercible.js000066400000000000000000000001231516525472400232340ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2022/SameValue.js000066400000000000000000000004701516525472400205500ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2022/SameValueNonNumeric.js000066400000000000000000000010751516525472400225500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var Type = require('./Type'); // https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumeric(x, y) { if (typeof x === 'number' || typeof x === 'bigint') { throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values'); } if (Type(x) !== Type(y)) { throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2022/SameValueZero.js000066400000000000000000000003371516525472400214120ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2022/SecFromTime.js000066400000000000000000000006221516525472400210420ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2022/Set.js000066400000000000000000000023121516525472400174160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2022/SetFunctionLength.js000066400000000000000000000017721516525472400222770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/12.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length !== Infinity && (!isInteger(length) || length < 0)) { throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2022/SetFunctionName.js000066400000000000000000000024101516525472400217240ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2022/SetIntegrityLevel.js000066400000000000000000000034541516525472400223150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2022/SetTypedArrayFromArrayLike.js000066400000000000000000000060401516525472400240550ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var Get = require('./Get'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); // https://262.ecma-international.org/13.0/#sec-settypedarrayfromarraylike module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } if (isTypedArray(source)) { throw new $TypeError('Assertion failed: source must not be a TypedArray instance'); } var targetBuffer = typedArrayBuffer(target); // step 1 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 2 } var targetLength = typedArrayLength(target); // step 3 var targetElementSize = TypedArrayElementSize(target); // step 4 var targetType = TypedArrayElementType(target); // step 5 var targetByteOffset = typedArrayByteOffset(target); // step 6 var src = ToObject(source); // step 7 var srcLength = LengthOfArrayLike(src); // step 8 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a finite integer'); // step 9 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 10 } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 11 var k = 0; // step 12 var limit = targetByteIndex + (targetElementSize * srcLength); // step 13 while (targetByteIndex < limit) { // step 14 var Pk = ToString(k); // step 14.a var value = Get(src, Pk); // step 14.b if (IsBigIntElementType(targetType)) { value = ToBigInt(value); // step 14.c } else { value = ToNumber(value); // step 14.d } if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 14.e } SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 14.f k += 1; // step 14.g targetByteIndex += targetElementSize; // step 14.h } }; ljharb-es-abstract-babee05/2022/SetTypedArrayFromTypedArray.js000066400000000000000000000120051516525472400242540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteLength = require('typed-array-byte-length'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var isInteger = require('math-intrinsics/isInteger'); var CloneArrayBuffer = require('./CloneArrayBuffer'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); var SameValue = require('./SameValue'); var SetValueInBuffer = require('./SetValueInBuffer'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); // https://262.ecma-international.org/13.0/#sec-settypedarrayfromtypedarray module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } var whichSource = whichTypedArray(source); if (!whichSource) { throw new $TypeError('Assertion failed: source must be a TypedArray instance'); } var targetBuffer = typedArrayBuffer(target); // step 1 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 2 } var targetLength = typedArrayLength(target); // step 3 var srcBuffer = typedArrayBuffer(source); // step 4 if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('source’s buffer is detached'); // step 5 } var targetType = TypedArrayElementType(target); // step 6 var targetElementSize = TypedArrayElementSize(target); // step 7 var targetByteOffset = typedArrayByteOffset(target); // step 8 var srcType = TypedArrayElementType(source); // step 9 var srcElementSize = TypedArrayElementSize(source); // step 10 var srcLength = typedArrayLength(source); // step 11 var srcByteOffset = typedArrayByteOffset(source); // step 12 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 13 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 14 } var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BigInt' : 'Number'; var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BigInt' : 'Number'; if (targetContentType !== sourceContentType) { throw new $TypeError('source and target must have the same content type'); // step 15 } var same; if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 16 // a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false. throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { same = SameValue(srcBuffer, targetBuffer); // step 17 } var srcByteIndex; if (same) { // step 18 var srcByteLength = typedArrayByteLength(source); // step 18.a srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 18.b // c. NOTE: %ArrayBuffer% is used to clone srcBuffer because is it known to not have any observable side-effects. srcByteIndex = 0; // step 18.d } else { srcByteIndex = srcByteOffset; // step 19 } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 20 var limit = targetByteIndex + (targetElementSize * srcLength); // step 21 var value; if (srcType === targetType) { // step 22 // a. NOTE: If srcType and targetType are the same, the transfer must be performed in a manner that preserves the bit-level encoding of the source data. while (targetByteIndex < limit) { // step 22.b value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'Uint8', true, 'Unordered'); // step 22.b.i SetValueInBuffer(targetBuffer, targetByteIndex, 'Uint8', value, true, 'Unordered'); // step 22.b.ii srcByteIndex += 1; // step 22.b.iii targetByteIndex += 1; // step 22.b.iv } } else { // step 23 while (targetByteIndex < limit) { // step 23.a value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'Unordered'); // step 23.a.i SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 23.a.ii srcByteIndex += srcElementSize; // step 23.a.iii targetByteIndex += targetElementSize; // step 23.a.iv } } }; ljharb-es-abstract-babee05/2022/SetValueInBuffer.js000066400000000000000000000100701516525472400220340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/12.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex) || byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is BigInt64 or BigUint64, otherwise a Number'); } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 // 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7 if (isSAB) { // step 8 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 10. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2022/SortIndexedProperties.js000066400000000000000000000031001516525472400231640ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var DeletePropertyOrThrow = require('./DeletePropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var Set = require('./Set'); var ToString = require('./ToString'); var isAbstractClosure = require('../helpers/isAbstractClosure'); var $sort = callBound('Array.prototype.sort'); // https://262.ecma-international.org/13.0/#sec-sortindexedproperties module.exports = function SortIndexedProperties(obj, len, SortCompare) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(obj) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: `len` must be an integer >= 0'); } if (!isAbstractClosure(SortCompare) || SortCompare.length !== 2) { throw new $TypeError('Assertion failed: `SortCompare` must be an abstract closure taking 2 arguments'); } var items = []; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var Pk = ToString(k); var kPresent = HasProperty(obj, Pk); if (kPresent) { var kValue = Get(obj, Pk); items[items.length] = kValue; } k += 1; } var itemCount = items.length; // step 4 $sort(items, SortCompare); // step 5 var j = 0; // step 6 while (j < itemCount) { // step 7 Set(obj, ToString(j), items[j], true); j += 1; } while (j < len) { // step 8 DeletePropertyOrThrow(obj, ToString(j)); j += 1; } return obj; // step 9 }; ljharb-es-abstract-babee05/2022/SpeciesConstructor.js000066400000000000000000000015131516525472400225260ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2022/StringCreate.js000066400000000000000000000020631516525472400212600ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2022/StringGetOwnProperty.js000066400000000000000000000025351516525472400230310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var isPropertyKey = require('../helpers/isPropertyKey'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2022/StringIndexOf.js000066400000000000000000000020001516525472400214000ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-stringindexof module.exports = function StringIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a String'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; if (searchValue === '' && fromIndex <= len) { return fromIndex; } var searchLen = searchValue.length; for (var i = fromIndex; i <= (len - searchLen); i += 1) { var candidate = $slice(string, i, i + searchLen); if (candidate === searchValue) { return i; } } return -1; }; ljharb-es-abstract-babee05/2022/StringPad.js000066400000000000000000000022661516525472400205660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/11.0/#sec-stringpad module.exports = function StringPad(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end') { throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); } var S = ToString(O); var intMaxLength = ToLength(maxLength); var stringLength = S.length; if (intMaxLength <= stringLength) { return S; } var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); if (filler === '') { return S; } var fillLen = intMaxLength - stringLength; // the String value consisting of repeated concatenations of filler truncated to length fillLen. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += filler; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start') { return truncatedStringFiller + S; } return S + truncatedStringFiller; }; ljharb-es-abstract-babee05/2022/StringToBigInt.js000066400000000000000000000011141516525472400215300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/14.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return void undefined; } }; ljharb-es-abstract-babee05/2022/StringToCodePoints.js000066400000000000000000000011221516525472400224220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/12.0/#sec-stringtocodepoints module.exports = function StringToCodePoints(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2022/StringToNumber.js000066400000000000000000000023561516525472400216150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); var $TypeError = require('es-errors/type'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); // https://262.ecma-international.org/13.0/#sec-stringtonumber module.exports = function StringToNumber(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` is not a String'); } if (isBinary(argument)) { return +$parseInteger($strSlice(argument, 2), 2); } if (isOctal(argument)) { return +$parseInteger($strSlice(argument, 2), 8); } if (hasNonWS(argument) || isInvalidHexLiteral(argument)) { return NaN; } var trimmed = $trim(argument); if (trimmed !== argument) { return StringToNumber(trimmed); } return +argument; }; ljharb-es-abstract-babee05/2022/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2022/TestIntegrityLevel.js000066400000000000000000000022671516525472400225020ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2022/ThrowCompletion.js000066400000000000000000000003601516525472400220210ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2022/TimeClip.js000066400000000000000000000006671516525472400204040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2022/TimeFromYear.js000066400000000000000000000004051516525472400212270ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2022/TimeString.js000066400000000000000000000014671516525472400207620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); var ToZeroPaddedDecimalString = require('./ToZeroPaddedDecimalString'); // https://262.ecma-international.org/13.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = ToZeroPaddedDecimalString(HourFromTime(tv), 2); // step 1 var minute = ToZeroPaddedDecimalString(MinFromTime(tv), 2); // step 2 var second = ToZeroPaddedDecimalString(SecFromTime(tv), 2); // step 3 return hour + ':' + minute + ':' + second + ' GMT'; // step 4 }; ljharb-es-abstract-babee05/2022/TimeWithinDay.js000066400000000000000000000003671516525472400214120ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2022/TimeZoneString.js000066400000000000000000000030571516525472400216130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/13.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (typeof tv !== 'number' || isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } // 1. Let offset be LocalTZA(tv, true). // 2. If offset is +0𝔽 or offset > +0𝔽, then // a. Let offsetSign be "+". // b. Let absOffset be offset. // 3. Else, // a. Let offsetSign be "-". // b. Let absOffset be -offset. // 4. Let offsetMin be ToZeroPaddedDecimalString(ℝ(MinFromTime(absOffset)), 2). // 5. Let offsetHour be ToZeroPaddedDecimalString(ℝ(HourFromTime(absOffset)), 2). // 6. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 7. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until LocalTZA, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2022/ToBigInt.js000066400000000000000000000023711516525472400203470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/13.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (typeof n === 'undefined') { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2022/ToBigInt64.js000066400000000000000000000016701516525472400205220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2022/ToBigUint64.js000066400000000000000000000013041516525472400207010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2022/ToBoolean.js000066400000000000000000000002021516525472400205410ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2022/ToDateString.js000066400000000000000000000010071516525472400212320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2022/ToIndex.js000066400000000000000000000011761516525472400202440ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var ToLength = require('./ToLength'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToIntegerOrInfinity(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValue(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2022/ToInt16.js000066400000000000000000000003771516525472400201000ustar00rootroot00000000000000'use strict'; var ToUint16 = require('./ToUint16'); // https://262.ecma-international.org/6.0/#sec-toint16 module.exports = function ToInt16(argument) { var int16bit = ToUint16(argument); return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit; }; ljharb-es-abstract-babee05/2022/ToInt32.js000066400000000000000000000002551516525472400200710ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/2022/ToInt8.js000066400000000000000000000003621516525472400200130ustar00rootroot00000000000000'use strict'; var ToUint8 = require('./ToUint8'); // https://262.ecma-international.org/6.0/#sec-toint8 module.exports = function ToInt8(argument) { var int8bit = ToUint8(argument); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2022/ToIntegerOrInfinity.js000066400000000000000000000011471516525472400226030ustar00rootroot00000000000000'use strict'; var abs = require('./abs'); var floor = require('./floor'); var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // https://262.ecma-international.org/12.0/#sec-tointegerorinfinity module.exports = function ToIntegerOrInfinity(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0) { return 0; } if (!$isFinite(number)) { return number; } var integer = floor(abs(number)); if (integer === 0) { return 0; } return $sign(number) * integer; }; ljharb-es-abstract-babee05/2022/ToLength.js000066400000000000000000000006631516525472400204160ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToIntegerOrInfinity(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2022/ToNumber.js000066400000000000000000000014321516525472400204200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var StringToNumber = require('./StringToNumber'); // https://262.ecma-international.org/13.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { return StringToNumber(value); } return +value; }; ljharb-es-abstract-babee05/2022/ToNumeric.js000066400000000000000000000010131516525472400205650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2022/ToObject.js000066400000000000000000000001761516525472400204020ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2022/ToPrimitive.js000066400000000000000000000004321516525472400211370ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2022/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230640ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2022/ToPropertyKey.js000066400000000000000000000006201516525472400214630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2022/ToString.js000066400000000000000000000006051516525472400204370ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2022/ToUint16.js000066400000000000000000000011371516525472400202600ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/2022/ToUint32.js000066400000000000000000000002571516525472400202600ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/2022/ToUint8.js000066400000000000000000000011621516525472400201770ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var modulo = require('math-intrinsics/mod'); // https://262.ecma-international.org/6.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x100); }; ljharb-es-abstract-babee05/2022/ToUint8Clamp.js000066400000000000000000000010101516525472400211440ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2022/ToZeroPaddedDecimalString.js000066400000000000000000000010741516525472400236610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $RangeError = require('es-errors/range'); var isInteger = require('math-intrinsics/isInteger'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring module.exports = function ToZeroPaddedDecimalString(n, minLength) { if (!isInteger(n) || n < 0) { throw new $RangeError('Assertion failed: `q` must be a non-negative integer'); } var S = $String(n); return StringPad(S, minLength, '0', 'start'); }; ljharb-es-abstract-babee05/2022/TrimString.js000066400000000000000000000013641516525472400207730ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2022/Type.js000066400000000000000000000004511516525472400176060ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } if (typeof x === 'bigint') { return 'BigInt'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2022/TypedArrayCreate.js000066400000000000000000000032261516525472400221000ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2022/TypedArrayElementSize.js000066400000000000000000000013161516525472400231170ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementsize var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementSize(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var size = tableTAO.size['$' + tableTAO.name['$' + type]]; if (!isInteger(size) || size < 0) { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return size; }; ljharb-es-abstract-babee05/2022/TypedArrayElementType.js000066400000000000000000000012061516525472400231240ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementtype var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementType(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var result = tableTAO.name['$' + type]; if (typeof result !== 'string') { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return result; }; ljharb-es-abstract-babee05/2022/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234140ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2022/UTF16EncodeCodePoint.js000066400000000000000000000013021516525472400224110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-utf16encoding module.exports = function UTF16EncodeCodePoint(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2022/UTF16SurrogatePairToCodePoint.js000066400000000000000000000014131516525472400243110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2022/UnicodeEscape.js000066400000000000000000000014161516525472400213760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2022/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000131521516525472400256550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor // see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof current === 'undefined') { // step 2 if (!extensible) { return false; // step 2.a } if (typeof O === 'undefined') { return true; // step 2.b } if (IsAccessorDescriptor(Desc)) { // step 2.c return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } // step 2.d return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!Desc['[[Configurable]]'], '[[Enumerable]]': !!Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': !!Desc['[[Writable]]'] } ); } // 3. Assert: current is a fully populated Property Descriptor. if ( !isFullyPopulatedPropertyDescriptor( { IsAccessorDescriptor: IsAccessorDescriptor, IsDataDescriptor: IsDataDescriptor }, current ) ) { throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor'); } // 4. If every field in Desc is absent, return true. // this can't really match the assertion that it's a Property Descriptor in our JS implementation // 5. If current.[[Configurable]] is false, then if (!current['[[Configurable]]']) { if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) { // step 5.a return false; } if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) { // step 5.b return false; } if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) { // step 5.c return false; } if (IsAccessorDescriptor(current)) { // step 5.d if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } } else if (!current['[[Writable]]']) { // step 5.e if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } } } // 6. If O is not undefined, then if (typeof O !== 'undefined') { var configurable; var enumerable; if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'], '[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]'] } ); } else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) { configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'], '[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]'] } ); } // For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; // step 7 }; ljharb-es-abstract-babee05/2022/ValidateAtomicAccess.js000066400000000000000000000022171516525472400226770ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArray = require('is-typed-array'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/13.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); } var length = typedArrayLength(typedArray); // step 1 var accessIndex = ToIndex(requestIndex); // step 2 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 4 } var elementSize = TypedArrayElementSize(typedArray); // step 5 var offset = typedArrayByteOffset(typedArray); // step 6 return (accessIndex * elementSize) + offset; // step 7 }; ljharb-es-abstract-babee05/2022/ValidateIntegerTypedArray.js000066400000000000000000000026131516525472400237430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var TypedArrayElementType = require('./TypedArrayElementType'); var ValidateTypedArray = require('./ValidateTypedArray'); var whichTypedArray = require('which-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/13.0/#sec-validateintegertypedarray module.exports = function ValidateIntegerTypedArray(typedArray) { var waitable = arguments.length > 1 ? arguments[1] : false; // step 1 if (typeof waitable !== 'boolean') { throw new $TypeError('Assertion failed: `waitable` must be a Boolean'); } ValidateTypedArray(typedArray); // step 2 var buffer = typedArrayBuffer(typedArray); // step 3 if (waitable) { // step 5 var typeName = whichTypedArray(typedArray); if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') { throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a } } else { var type = TypedArrayElementType(typedArray); // step 5.a if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) { throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 5.b } } return buffer; // step 6 }; ljharb-es-abstract-babee05/2022/ValidateTypedArray.js000066400000000000000000000014001516525472400224160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/13.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2 } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 4 } }; ljharb-es-abstract-babee05/2022/WeakRefDeref.js000066400000000000000000000010641516525472400211600ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $deref = callBound('WeakRef.prototype.deref', true); var isWeakRef = require('is-weakref'); var AddToKeptObjects = require('./AddToKeptObjects'); // https://262.ecma-international.org/12.0/#sec-weakrefderef module.exports = function WeakRefDeref(weakRef) { if (!isWeakRef(weakRef)) { throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef'); } var target = $deref(weakRef); if (target) { AddToKeptObjects(target); } return target; }; ljharb-es-abstract-babee05/2022/WeekDay.js000066400000000000000000000003201516525472400202110ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2022/WordCharacters.js000066400000000000000000000026731516525472400216100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); var A = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(IgnoreCase, Unicode) { if (typeof IgnoreCase !== 'boolean' || typeof Unicode !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` and `Unicode` must be booleans'); } var U = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(A, c) === -1 // c not in A && $indexOf(A, Canonicalize(c, IgnoreCase, Unicode)) > -1 // canonicalized c IS in A ) { U += caseFolding.S[c]; // step 3 } }); if ((!Unicode || !IgnoreCase) && U.length > 0) { throw new $TypeError('Assertion failed: `U` must be empty when `IgnoreCase` and `Unicode` are not both true'); // step 4 } return A + U; // step 5, 6 }; ljharb-es-abstract-babee05/2022/YearFromTime.js000066400000000000000000000006161516525472400212330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2022/abs.js000066400000000000000000000003231516525472400174300ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2022/clamp.js000066400000000000000000000007741516525472400177710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var max = require('math-intrinsics/max'); var min = require('math-intrinsics/min'); // https://262.ecma-international.org/12.0/#clamping module.exports = function clamp(x, lower, upper) { if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) { throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`'); } return min(max(lower, x), upper); }; ljharb-es-abstract-babee05/2022/floor.js000066400000000000000000000004371516525472400200120ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2022/max.js000066400000000000000000000002061516525472400174500ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2022/min.js000066400000000000000000000002061516525472400174460ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2022/modulo.js000066400000000000000000000002501516525472400201610ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2022/msFromTime.js000066400000000000000000000003751516525472400207540ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2022/substring.js000066400000000000000000000011761516525472400207120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#substring module.exports = function substring(S, inclusiveStart, exclusiveEnd) { if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) { throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers'); } return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length); }; ljharb-es-abstract-babee05/2022/tables/000077500000000000000000000000001516525472400176015ustar00rootroot00000000000000ljharb-es-abstract-babee05/2022/tables/typed-array-objects.js000066400000000000000000000014061516525472400240300ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $BigInt64Array: 'BigInt64', $BigUint64Array: 'BigUint64', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $BigInt64: 8, $BigUint64: 8, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "BigInt64", "BigUint64", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2022/thisBigIntValue.js000066400000000000000000000007051516525472400217300ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/11.0/#sec-thisbigintvalue module.exports = function thisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2022/thisBooleanValue.js000066400000000000000000000005031516525472400221270ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2022/thisNumberValue.js000066400000000000000000000005321516525472400220020ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2022/thisStringValue.js000066400000000000000000000004751516525472400220260ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2022/thisSymbolValue.js000066400000000000000000000010161516525472400220150ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2022/thisTimeValue.js000066400000000000000000000003471516525472400214540ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2023/000077500000000000000000000000001516525472400163305ustar00rootroot00000000000000ljharb-es-abstract-babee05/2023/AddEntriesFromIterable.js000066400000000000000000000026201516525472400232040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/14.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable, 'sync'); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2023/AddToKeptObjects.js000066400000000000000000000010251516525472400220150ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var ClearKeptObjects = require('./ClearKeptObjects'); // https://262.ecma-international.org/12.0/#sec-addtokeptobjects module.exports = function AddToKeptObjects(object) { if (!isObject(object)) { throw new $TypeError('Assertion failed: `object` must be an Object'); } var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'); arr[arr.length] = object; }; ljharb-es-abstract-babee05/2023/AdvanceStringIndex.js000066400000000000000000000016501516525472400224100ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/12.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2023/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000060721516525472400256540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasOwnProperty = require('./HasOwnProperty'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); var Type = require('./Type'); var NumberAdd = require('./Number/add'); var NumberBitwiseAND = require('./Number/bitwiseAND'); var NumberBitwiseOR = require('./Number/bitwiseOR'); var NumberBitwiseXOR = require('./Number/bitwiseXOR'); var NumberDivide = require('./Number/divide'); var NumberExponentiate = require('./Number/exponentiate'); var NumberLeftShift = require('./Number/leftShift'); var NumberMultiply = require('./Number/multiply'); var NumberRemainder = require('./Number/remainder'); var NumberSignedRightShift = require('./Number/signedRightShift'); var NumberSubtract = require('./Number/subtract'); var NumberUnsignedRightShift = require('./Number/unsignedRightShift'); var BigIntAdd = require('./BigInt/add'); var BigIntBitwiseAND = require('./BigInt/bitwiseAND'); var BigIntBitwiseOR = require('./BigInt/bitwiseOR'); var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR'); var BigIntDivide = require('./BigInt/divide'); var BigIntExponentiate = require('./BigInt/exponentiate'); var BigIntLeftShift = require('./BigInt/leftShift'); var BigIntMultiply = require('./BigInt/multiply'); var BigIntRemainder = require('./BigInt/remainder'); var BigIntSignedRightShift = require('./BigInt/signedRightShift'); var BigIntSubtract = require('./BigInt/subtract'); var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift'); // https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator // https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table var table = { '**': [NumberExponentiate, BigIntExponentiate], '*': [NumberMultiply, BigIntMultiply], '/': [NumberDivide, BigIntDivide], '%': [NumberRemainder, BigIntRemainder], '+': [NumberAdd, BigIntAdd], '-': [NumberSubtract, BigIntSubtract], '<<': [NumberLeftShift, BigIntLeftShift], '>>': [NumberSignedRightShift, BigIntSignedRightShift], '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift], '&': [NumberBitwiseAND, BigIntBitwiseAND], '^': [NumberBitwiseXOR, BigIntBitwiseXOR], '|': [NumberBitwiseOR, BigIntBitwiseOR] }; module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) { if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) { throw new $TypeError('Assertion failed: `opText` must be a valid operation string'); } if (opText === '+') { var lprim = ToPrimitive(lval); var rprim = ToPrimitive(rval); if (typeof lprim === 'string' || typeof rprim === 'string') { var lstr = ToString(lprim); var rstr = ToString(rprim); return lstr + rstr; } /* eslint no-param-reassign: 1 */ lval = lprim; rval = rprim; } var lnum = ToNumeric(lval); var rnum = ToNumeric(rval); if (Type(lnum) !== Type(rnum)) { throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ'); } var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0]; return Operation(lnum, rnum); }; ljharb-es-abstract-babee05/2023/ArrayCreate.js000066400000000000000000000026151516525472400210740ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/12.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 3, 5 if (proto !== $ArrayPrototype) { // step 4 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 6 A.length = length; } /* step 6, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2023/ArraySetLength.js000066400000000000000000000045661516525472400215750ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2023/ArraySpeciesCreate.js000066400000000000000000000025311516525472400224050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var ArrayCreate = require('./ArrayCreate'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var isArray = IsArray(originalArray); if (!isArray) { return ArrayCreate(length); } var C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } if (typeof C === 'undefined') { return ArrayCreate(length); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(length); // Construct(C, length); }; ljharb-es-abstract-babee05/2023/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255400ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2023/AsyncIteratorClose.js000066400000000000000000000036211516525472400224450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/12.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return $then( $then( $then( new $Promise(function (resolve) { resolve(GetMethod(iterator, 'return')); // step 4 // resolve(Call(ret, iterator, [])); // step 6 }), function (returnV) { // step 5.a if (typeof returnV === 'undefined') { return completion; // step 5.b } return Call(returnV, iterator); // step 5.c, 5.d. } ), null, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 6 } else { throw e; // step 7 } } ), function (innerResult) { // step 8 if (completion.type() === 'throw') { completion['?'](); // step 6 } if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; } ); }; ljharb-es-abstract-babee05/2023/BigInt/000077500000000000000000000000001516525472400175045ustar00rootroot00000000000000ljharb-es-abstract-babee05/2023/BigInt/add.js000066400000000000000000000005751516525472400206010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2023/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2023/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2023/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2023/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2023/BigInt/divide.js000066400000000000000000000011251516525472400213050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2023/BigInt/equal.js000066400000000000000000000006021516525472400211470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2023/BigInt/exponentiate.js000066400000000000000000000015251516525472400225500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2023/BigInt/index.js000066400000000000000000000021541516525472400211530ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2023/BigInt/leftShift.js000066400000000000000000000006121516525472400217710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2023/BigInt/lessThan.js000066400000000000000000000006071516525472400216260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2023/BigInt/multiply.js000066400000000000000000000006071516525472400217240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2023/BigInt/remainder.js000066400000000000000000000012401516525472400220050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2023/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2023/BigInt/subtract.js000066400000000000000000000006071516525472400216740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2023/BigInt/toString.js000066400000000000000000000014161516525472400216550ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $BigIntToString = callBound('BigInt.prototype.toString', true); // https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x, radix) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } if (!$BigIntToString) { throw new $SyntaxError('BigInt is not supported'); } return $BigIntToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2023/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2023/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2023/BigIntBitwiseOp.js000066400000000000000000000031771516525472400217000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2023/BinaryAnd.js000066400000000000000000000004741516525472400205420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2023/BinaryOr.js000066400000000000000000000004721516525472400204160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2023/BinaryXor.js000066400000000000000000000004741516525472400206100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2023/ByteListBitwiseOp.js000066400000000000000000000022371516525472400222570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) { if (op !== '&' && op !== '^' && op !== '|') { throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`'); } if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var result = []; for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var resultByte; if (op === '&') { resultByte = xByte & yByte; } else if (op === '^') { resultByte = xByte ^ yByte; } else { resultByte = xByte | yByte; } result[result.length] = resultByte; } return result; }; ljharb-es-abstract-babee05/2023/ByteListEqual.js000066400000000000000000000015341516525472400214200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistequal module.exports = function ByteListEqual(xBytes, yBytes) { if (!IsArray(xBytes) || !IsArray(yBytes)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xBytes.length !== yBytes.length) { return false; } for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xByte !== yByte) { return false; } } return true; }; ljharb-es-abstract-babee05/2023/Call.js000066400000000000000000000011351516525472400175410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2023/CanBeHeldWeakly.js000066400000000000000000000006231516525472400216110ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var KeyForSymbol = require('./KeyForSymbol'); // https://262.ecma-international.org/14.0/#sec-canbeheldweakly module.exports = function CanBeHeldWeakly(v) { if (isObject(v)) { return true; // step 1 } if (typeof v === 'symbol' && typeof KeyForSymbol(v) === 'undefined') { return true; // step 2 } return false; // step 3 }; ljharb-es-abstract-babee05/2023/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2023/Canonicalize.js000066400000000000000000000023261516525472400212700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var isRegExpRecord = require('../helpers/records/regexp-record'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/14.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(rer, ch) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (rer['[[Unicode]]'] && rer['[[IgnoreCase]]']) { // step 1 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 1.b } if (!rer['[[IgnoreCase]]']) { return ch; // step 2 } var u = $toUpperCase(ch); // step 5 if (u.length !== 1) { return ch; // step 7 } var cu = u; // step 8 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 9 } return cu; // step 10 }; ljharb-es-abstract-babee05/2023/CharacterRange.js000066400000000000000000000024751516525472400215470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2023/ClearKeptObjects.js000066400000000000000000000004511516525472400220520ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var keptObjects = []; // https://262.ecma-international.org/12.0/#sec-clear-kept-objects module.exports = function ClearKeptObjects() { keptObjects.length = 0; }; SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects); ljharb-es-abstract-babee05/2023/CloneArrayBuffer.js000066400000000000000000000035511516525472400220630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsConstructor = require('./IsConstructor'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf'); var isInteger = require('math-intrinsics/isInteger'); var isArrayBuffer = require('is-array-buffer'); var arrayBufferSlice = require('arraybuffer.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-clonearraybuffer module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) { if (!isArrayBuffer(srcBuffer)) { throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance'); } if (!isInteger(srcByteOffset) || srcByteOffset < 0) { throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer'); } if (!isInteger(srcLength) || srcLength < 0) { throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer'); } if (!IsConstructor(cloneConstructor)) { throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor'); } // 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4 } /* 5. Let srcBlock be srcBuffer.[[ArrayBufferData]]. 6. Let targetBlock be targetBuffer.[[ArrayBufferData]]. 7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength). */ var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7 OrdinarySetPrototypeOf(targetBuffer, proto); // step 3 return targetBuffer; // step 8 }; ljharb-es-abstract-babee05/2023/CodePointAt.js000066400000000000000000000031611516525472400210400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/12.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2023/CodePointsToString.js000066400000000000000000000013371516525472400224330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-codepointstostring module.exports = function CodePointsToString(text) { if (!IsArray(text)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } var result = ''; forEach(text, function (cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } result += UTF16EncodeCodePoint(cp); }); return result; }; ljharb-es-abstract-babee05/2023/CompareArrayElements.js000066400000000000000000000023751516525472400227570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsLessThan = require('./IsLessThan'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparearrayelements module.exports = function CompareArrayElements(x, y, compareFn) { if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof x === 'undefined' && typeof y === 'undefined') { return 0; // step 1 } if (typeof x === 'undefined') { return 1; // step 2 } if (typeof y === 'undefined') { return -1; // step 3 } if (typeof compareFn !== 'undefined') { // step 4 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 4.a if (isNaN(v)) { return 0; // step 4.b } return v; // step 4.c } var xString = ToString(x); // step 5 var yString = ToString(y); // step 6 var xSmaller = IsLessThan(xString, yString, true); // step 7 if (xSmaller) { return -1; // step 8 } var ySmaller = IsLessThan(yString, xString, true); // step 9 if (ySmaller) { return 1; // step 10 } return 0; // step 11 }; ljharb-es-abstract-babee05/2023/CompareTypedArrayElements.js000066400000000000000000000025151516525472400237610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparetypedarrayelements module.exports = function CompareTypedArrayElements(x, y, compareFn) { if ((typeof x !== 'number' && typeof x !== 'bigint') || typeof x !== typeof y) { throw new $TypeError('Assertion failed: `x` and `y` must be either a BigInt or a Number, and both must be the same type'); } if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof compareFn !== 'undefined') { // step 2 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 2.a if (isNaN(v)) { return 0; // step 2.b } return v; // step 2.c } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN && yNaN) { return 0; // step 3 } if (xNaN) { return 1; // step 4 } if (yNaN) { return -1; // step 5 } if (x < y) { return -1; // step 6 } if (x > y) { return 1; // step 7 } if (SameValue(x, -0) && SameValue(y, 0)) { return -1; // step 8 } if (SameValue(x, 0) && SameValue(y, -0)) { return 1; // step 9 } return 0; // step 10 }; ljharb-es-abstract-babee05/2023/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2023/CompletionRecord.js000066400000000000000000000025141516525472400221400ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2023/CopyDataProperties.js000066400000000000000000000037031516525472400224520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var forEach = require('../helpers/forEach'); var every = require('../helpers/every'); var some = require('../helpers/some'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var keys = OwnPropertyKeys(from); forEach(keys, function (nextKey) { var excluded = some(excludedItems, function (e) { return SameValue(e, nextKey) === true; }); /* var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); */ var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && isInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2023/CreateAsyncFromSyncIterator.js000066400000000000000000000107161516525472400242670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord, value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/14.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2023/CreateDataProperty.js000066400000000000000000000013231516525472400224270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2023/CreateDataPropertyOrThrow.js000066400000000000000000000012541516525472400237570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/14.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } }; ljharb-es-abstract-babee05/2023/CreateHTML.js000066400000000000000000000015051516525472400205570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2023/CreateIterResultObject.js000066400000000000000000000005351516525472400232460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2023/CreateListFromArrayLike.js000066400000000000000000000025301516525472400233550ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object']; // https://262.ecma-international.org/11.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = LengthOfArrayLike(obj); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2023/CreateMethodProperty.js000066400000000000000000000016601516525472400230020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/6.0/#sec-createmethodproperty module.exports = function CreateMethodProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, newDesc ); }; ljharb-es-abstract-babee05/2023/CreateNonEnumerableDataPropertyOrThrow.js000066400000000000000000000013641516525472400264340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow module.exports = function CreateNonEnumerableDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefinePropertyOrThrow(O, P, newDesc); }; ljharb-es-abstract-babee05/2023/CreateRegExpStringIterator.js000066400000000000000000000065301516525472400241110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIterResultObject = require('./CreateIterResultObject'); var CreateMethodProperty = require('./CreateMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIterResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIterResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(match, false); }; CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn); } } // https://262.ecma-international.org/11.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2023/DateFromTime.js000066400000000000000000000017341516525472400212130ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2023/DateString.js000066400000000000000000000017271516525472400207410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2023/Day.js000066400000000000000000000003521516525472400174030ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2023/DayFromYear.js000066400000000000000000000004001516525472400210420ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2023/DayWithinYear.js000066400000000000000000000004361516525472400214120ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2023/DaysInYear.js000066400000000000000000000004551516525472400207020ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2023/DefaultTimeZone.js000066400000000000000000000010331516525472400217220ustar00rootroot00000000000000'use strict'; var callBind = require('call-bind'); var I402 = typeof Intl === 'undefined' ? null : Intl; var DateTimeFormat = !!I402 && I402.DateTimeFormat; var resolvedOptions = !!DateTimeFormat && callBind(DateTimeFormat.prototype.resolvedOptions); // https://262.ecma-international.org/14.0/#sec-defaulttimezone // https://tc39.es/ecma402/2023/#sup-defaulttimezone module.exports = function DefaultTimeZone() { if (DateTimeFormat && resolvedOptions) { return resolvedOptions(new DateTimeFormat()).timeZone; } return 'UTC'; }; ljharb-es-abstract-babee05/2023/DefineMethodProperty.js000066400000000000000000000027411516525472400227720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-definemethodproperty module.exports = function DefineMethodProperty(homeObject, key, closure, enumerable) { if (!isObject(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an Object'); } if (!isPropertyKey(key)) { throw new $TypeError('Assertion failed: `key` is not a Property Key or a Private Name'); } if (typeof closure !== 'function') { throw new $TypeError('Assertion failed: `closure` is not a function'); } if (typeof enumerable !== 'boolean') { throw new $TypeError('Assertion failed: `enumerable` is not a Boolean'); } // 1. Assert: homeObject is an ordinary, extensible object with no non-configurable properties. if (!IsExtensible(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an ordinary, extensible object, with no non-configurable properties'); } // 2. If key is a Private Name, then // a. Return PrivateElement { [[Key]]: key, [[Kind]]: method, [[Value]]: closure }. // 3. Else, var desc = { // step 3.a '[[Value]]': closure, '[[Writable]]': true, '[[Enumerable]]': enumerable, '[[Configurable]]': true }; DefinePropertyOrThrow(homeObject, key, desc); // step 3.b }; ljharb-es-abstract-babee05/2023/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2023/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2023/DetachArrayBuffer.js000066400000000000000000000032571516525472400222160ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2023/EnumerableOwnProperties.js000066400000000000000000000017541516525472400235150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-enumerableownproperties module.exports = function EnumerableOwnProperties(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2023/FindViaPredicate.js000066400000000000000000000026071516525472400220340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); var IsCallable = require('./IsCallable'); var ToString = require('./ToString'); // https://262.ecma-international.org/14.0/#sec-findviapredicate module.exports = function FindViaPredicate(O, len, direction, predicate, thisArg) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: len must be a non-negative integer'); } if (direction !== 'ascending' && direction !== 'descending') { throw new $TypeError('Assertion failed: direction must be "ascending" or "descending"'); } if (!IsCallable(predicate)) { throw new $TypeError('predicate must be callable'); // step 1 } for ( // steps 2-4 var k = direction === 'ascending' ? 0 : len - 1; direction === 'ascending' ? k < len : k >= 0; k += 1 ) { var Pk = ToString(k); // step 4.a var kValue = Get(O, Pk); // step 4.c var testResult = Call(predicate, thisArg, [kValue, k, O]); // step 4.d if (ToBoolean(testResult)) { return { '[[Index]]': k, '[[Value]]': kValue }; // step 4.e } } return { '[[Index]]': -1, '[[Value]]': void undefined }; // step 5 }; ljharb-es-abstract-babee05/2023/FlattenIntoArray.js000066400000000000000000000032201516525472400221110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2023/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2023/Get.js000066400000000000000000000010701516525472400174030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2023/GetGlobalObject.js000066400000000000000000000003061516525472400216540ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2023/GetIterator.js000066400000000000000000000033151516525472400211210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateAsyncFromSyncIterator = require('./CreateAsyncFromSyncIterator'); var GetIteratorFromMethod = require('./GetIteratorFromMethod'); var GetMethod = require('./GetMethod'); var getIteratorMethod = require('../helpers/getIteratorMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; // https://262.ecma-international.org/14.0/#sec-getiterator module.exports = function GetIterator(obj, kind) { if (kind !== 'sync' && kind !== 'async') { throw new $TypeError("Assertion failed: `kind` must be one of 'sync' or 'async', got " + inspect(kind)); } var method; if (kind === 'async') { // step 1 if (hasSymbols && $asyncIterator) { method = GetMethod(obj, $asyncIterator); // step 1.a } } if (typeof method === 'undefined') { // step 1.b // var syncMethod = GetMethod(obj, $iterator); // step 1.b.i var syncMethod = getIteratorMethod(ES, obj); if (kind === 'async') { if (typeof syncMethod === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 1.b.ii } var syncIteratorRecord = GetIteratorFromMethod(obj, syncMethod); // step 1.b.iii return CreateAsyncFromSyncIterator(syncIteratorRecord); // step 1.b.iv } method = syncMethod; // step 2, kind of } if (typeof method === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 3 } return GetIteratorFromMethod(obj, method); // step 4 }; ljharb-es-abstract-babee05/2023/GetIteratorFromMethod.js000066400000000000000000000013451516525472400231070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/14.0/#sec-getiteratorfrommethod module.exports = function GetIteratorFromMethod(obj, method) { if (!IsCallable(method)) { throw new $TypeError('method must be a function'); } var iterator = Call(method, obj); // step 1 if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); // step 2 } var nextMethod = GetV(iterator, 'next'); // step 3 return { // steps 4-5 '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2023/GetMatchIndexPair.js000066400000000000000000000015051516525472400221670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function GetMatchIndexPair(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return [match['[[StartIndex]]'], match['[[EndIndex]]']]; }; ljharb-es-abstract-babee05/2023/GetMatchString.js000066400000000000000000000015641516525472400215570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchstring module.exports = function GetMatchString(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return substring(S, match['[[StartIndex]]'], match['[[EndIndex]]']); }; ljharb-es-abstract-babee05/2023/GetMethod.js000066400000000000000000000012541516525472400205500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2023/GetNamedTimeZoneEpochNanoseconds.js000066400000000000000000000045721516525472400252070ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetUTCEpochNanoseconds = require('./GetUTCEpochNanoseconds'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/14.0/#sec-getnamedtimezoneepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetNamedTimeZoneEpochNanoseconds( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (typeof timeZoneIdentifier !== 'string') { throw new $TypeError('Assertion failed: `timeZoneIdentifier` must be a string'); } if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 999) { throw new $TypeError('Assertion failed: `second` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral number between 0 and 999, inclusive'); } if (timeZoneIdentifier !== 'UTC') { throw new $TypeError('Assertion failed: only UTC time zone is supported'); // step 1 } var epochNanoseconds = GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ); // step 2 return [epochNanoseconds]; // step 3 }; ljharb-es-abstract-babee05/2023/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2023/GetPromiseResolve.js000066400000000000000000000011771516525472400223120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-getpromiseresolve module.exports = function GetPromiseResolve(promiseConstructor) { if (!IsConstructor(promiseConstructor)) { throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor'); } var promiseResolve = Get(promiseConstructor, 'resolve'); if (IsCallable(promiseResolve) === false) { throw new $TypeError('`resolve` method is not callable'); } return promiseResolve; }; ljharb-es-abstract-babee05/2023/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2023/GetStringIndex.js000066400000000000000000000013701516525472400215650ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var StringToCodePoints = require('./StringToCodePoints'); var $indexOf = callBound('String.prototype.indexOf'); // https://262.ecma-international.org/13.0/#sec-getstringindex module.exports = function GetStringIndex(S, e) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(e) || e < 0) { throw new $TypeError('Assertion failed: `e` must be a non-negative integer'); } if (S === '') { return 0; } var codepoints = StringToCodePoints(S); var eUTF = e >= codepoints.length ? S.length : $indexOf(S, codepoints[e]); return eUTF; }; ljharb-es-abstract-babee05/2023/GetSubstitution.js000066400000000000000000000126741516525472400220540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var regexTester = require('safe-regex-test'); var Get = require('./Get'); var IsArray = require('./IsArray'); var min = require('./min'); var StringIndexOf = require('./StringIndexOf'); var StringToNumber = require('./StringToNumber'); var substring = require('./substring'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isPrefixOf = require('../helpers/isPrefixOf'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); var startsWithDollarDigit = regexTester(/^\$[0-9]/); var startsWithDollarTwoDigit = regexTester(/^\$[0-9][0-9]/); // http://www.ecma-international.org/ecma-262/14.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacementTemplate) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof namedCaptures !== 'undefined' && !isObject(namedCaptures)) { throw new $TypeError('Assertion failed: `namedCaptures` must be `undefined` or an Object'); } if (typeof replacementTemplate !== 'string') { throw new $TypeError('Assertion failed: `replacementTemplate` must be a String'); } var stringLength = str.length; // step 1 if (position > stringLength) { throw new $TypeError('Assertion failed: position > stringLength, got ' + inspect(position)); // step 2 } var templateRemainder = replacementTemplate; // step 3 var result = ''; // step 4 while (templateRemainder !== '') { // step 5 // 5.a NOTE: The following steps isolate ref (a prefix of templateRemainder), determine refReplacement (its replacement), and then append that replacement to result. var ref, refReplacement, capture; if (isPrefixOf('$$', templateRemainder)) { // step 5.b ref = '$$'; // step 5.b.i refReplacement = '$'; // step 5.b.ii } else if (isPrefixOf('$`', templateRemainder)) { // step 5.c ref = '$`'; // step 5.c.i refReplacement = substring(str, 0, position); // step 5.c.ii } else if (isPrefixOf('$&', templateRemainder)) { // step 5.d ref = '$&'; // step 5.d.i refReplacement = matched; // step 5.d.ii } else if (isPrefixOf('$\'', templateRemainder)) { // step 5.e ref = '$\''; // step 5.e.i var matchLength = matched.length; // step 5.e.ii var tailPos = position + matchLength; // step 5.e.iii refReplacement = substring(str, min(tailPos, stringLength)); // step 5.e.iv // 5.e.v NOTE: tailPos can exceed stringLength only if this abstract operation was invoked by a call to the intrinsic @@replace method of %RegExp.prototype% on an object whose "exec" property is not the intrinsic %RegExp.prototype.exec%. } else if (startsWithDollarDigit(templateRemainder)) { // step 5.f var digitCount = startsWithDollarTwoDigit(templateRemainder) ? 2 : 1; // step 5.f.i ref = substring(templateRemainder, 0, 1 + digitCount); // step 5.f.ii var digits = substring(templateRemainder, 1, 1 + digitCount); // step 5.f.iii var index = StringToNumber(digits); // step 5.f.iv if (index < 0 || index > 99) { throw new $TypeError('Assertion failed: `index` must be >= 0 and <= 99'); // step 5.f.v } var captureLen = captures.length; // step 5.f.vi if (1 <= index && index <= captureLen) { // step 5.f.vii capture = captures[index - 1]; // step 5.f.vii.1 if (typeof capture === 'undefined') { // step 5.f.vii.2 refReplacement = ''; // step 5.f.vii.2.a } else { // step 5.f.vii.3 refReplacement = capture; // step 5.f.vii.3.a } } else { // step 5.f.viii refReplacement = ref; // step 5.f.viii.1 } } else if (isPrefixOf('$<', templateRemainder)) { // step 5.g var gtPos = StringIndexOf(templateRemainder, '>', 0); // step 5.g.i if (gtPos === -1 || typeof namedCaptures === 'undefined') { // step 5.g.ii ref = '$<'; // step 5.g.ii.1 refReplacement = ref; // step 5.g.ii.2 } else { // step 5.g.iii ref = substring(templateRemainder, 0, gtPos + 1); // step 5.g.iii.1 var groupName = substring(templateRemainder, 2, gtPos); // step 5.g.iii.2 if (!isObject(namedCaptures)) { throw new $TypeError('Assertion failed: Type(namedCaptures) is not Object'); // step 5.g.iii.3 } capture = Get(namedCaptures, groupName); // step 5.g.iii.4 if (typeof capture === 'undefined') { // step 5.g.iii.5 refReplacement = ''; // step 5.g.iii.5.a } else { // step 5.g.iii.6 refReplacement = ToString(capture); // step 5.g.iii.6.a } } } else { // step 5.h ref = substring(templateRemainder, 0, 1); // step 5.h.i refReplacement = ref; // step 5.h.ii } var refLength = ref.length; // step 5.i templateRemainder = substring(templateRemainder, refLength); // step 5.j result += refReplacement; // step 5.k } return result; // step 6 }; ljharb-es-abstract-babee05/2023/GetUTCEpochNanoseconds.js000066400000000000000000000047761516525472400231510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var MakeDay = require('./MakeDay'); var MakeTime = require('./MakeTime'); var MakeDate = require('./MakeDate'); var isInteger = require('math-intrinsics/isInteger'); var $BigInt = GetIntrinsic('%BigInt%', true); var $SyntaxError = GetIntrinsic('%SyntaxError%'); var $TypeError = GetIntrinsic('%TypeError%'); // https://tc39.es/ecma262/#sec-getutcepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral Number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral Number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral Number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral Number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 59) { throw new $TypeError('Assertion failed: `second` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral Number between 0 and 999, inclusive'); } var date = MakeDay(year, month - 1, day); // step 1 var time = MakeTime(hour, minute, second, millisecond); // step 2 var ms = MakeDate(date, time); // step 3 if (!isInteger(ms)) { throw new $TypeError('Assertion failed: `ms` from MakeDate is not an integral Number'); // step 4 } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt((ms * 1e6) + (microsecond * 1e3) + nanosecond); // step 5 }; ljharb-es-abstract-babee05/2023/GetV.js000066400000000000000000000007541516525472400175410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2023/GetValueFromBuffer.js000066400000000000000000000106561516525472400223700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered') { throw new $TypeError('Assertion failed: `order` must be either `SeqCst` or `Unordered`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2023/HasOwnProperty.js000066400000000000000000000010241516525472400216270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2023/HasProperty.js000066400000000000000000000007471516525472400211560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2023/HourFromTime.js000066400000000000000000000005761516525472400212560ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2023/InLeapYear.js000066400000000000000000000007161516525472400206630ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2023/InstallErrorCause.js000066400000000000000000000012271516525472400222710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateNonEnumerableDataPropertyOrThrow = require('./CreateNonEnumerableDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); // https://262.ecma-international.org/13.0/#sec-installerrorcause module.exports = function InstallErrorCause(O, options) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (isObject(options) && HasProperty(options, 'cause')) { var cause = Get(options, 'cause'); CreateNonEnumerableDataPropertyOrThrow(O, 'cause', cause); } }; ljharb-es-abstract-babee05/2023/InstanceofOperator.js000066400000000000000000000016371516525472400225020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2023/IntegerIndexedElementGet.js000066400000000000000000000023211516525472400235340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/13.0/#sec-integerindexedelementget module.exports = function IntegerIndexedElementGet(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 1 } var offset = typedArrayByteOffset(O); // step 2 var elementSize = TypedArrayElementSize(O); // step 3 var indexedPosition = (index * elementSize) + offset; // step 4 var elementType = TypedArrayElementType(O); // step 5 return GetValueFromBuffer(typedArrayBuffer(O), indexedPosition, elementType, true, 'Unordered'); // step 11 }; ljharb-es-abstract-babee05/2023/IntegerIndexedElementSet.js000066400000000000000000000030211516525472400235460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-integerindexedelementset module.exports = function IntegerIndexedElementSet(O, index, value) { var arrayTypeName = whichTypedArray(O); if (!arrayTypeName) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } var contentType = arrayTypeName === 'BigInt64Array' || arrayTypeName === 'BigUint64Array' ? 'BigInt' : 'Number'; var numValue = contentType === 'BigInt' ? ToBigInt(value) : ToNumber(value); // steps 1 - 2 if (IsValidIntegerIndex(O, index)) { // step 3 var offset = typedArrayByteOffset(O); // step 3.a var elementSize = TypedArrayElementSize(O); // step 3.b var indexedPosition = (index * elementSize) + offset; // step 3.c var elementType = TypedArrayElementType(O); // step 3.d SetValueInBuffer(typedArrayBuffer(O), indexedPosition, elementType, numValue, true, 'Unordered'); // step 3.e } }; ljharb-es-abstract-babee05/2023/InternalizeJSONProperty.js000066400000000000000000000042061516525472400234130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnProperties = require('./EnumerableOwnProperties'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnProperties(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2023/Invoke.js000066400000000000000000000012371516525472400201240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2023/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2023/IsArray.js000066400000000000000000000001661516525472400202430ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2023/IsBigIntElementType.js000066400000000000000000000003021516525472400225050ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BigUint64' || type === 'BigInt64'; }; ljharb-es-abstract-babee05/2023/IsCallable.js000066400000000000000000000001541516525472400206610ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2023/IsCompatiblePropertyDescriptor.js000066400000000000000000000005731516525472400250520ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, '', Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2023/IsConcatSpreadable.js000066400000000000000000000011741516525472400223570ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2023/IsConstructor.js000066400000000000000000000021701516525472400215070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2023/IsDataDescriptor.js000066400000000000000000000010611516525472400220700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2023/IsDetachedBuffer.js000066400000000000000000000017461516525472400220250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2023/IsExtensible.js000066400000000000000000000007701516525472400212700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2023/IsGenericDescriptor.js000066400000000000000000000012201516525472400225700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2023/IsIntegralNumber.js000066400000000000000000000005411516525472400221000ustar00rootroot00000000000000'use strict'; var truncate = require('./truncate'); var $isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-isintegralnumber module.exports = function IsIntegralNumber(argument) { if (typeof argument !== 'number' || !$isFinite(argument)) { return false; } return truncate(argument) === argument; }; ljharb-es-abstract-babee05/2023/IsLessThan.js000066400000000000000000000053071516525472400207100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var min = require('math-intrinsics/min'); var $isNaN = require('math-intrinsics/isNaN'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); // https://262.ecma-international.org/14.0/#sec-islessthan // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function IsLessThan(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { // step 3 // a. Let lx be the length of px. // b. Let ly be the length of py. // c. For each integer i starting with 0 such that i < min(lx, ly), in ascending order, do // i. Let cx be the integer that is the numeric value of the code unit at index i within px. // ii. Let cy be the integer that is the numeric value of the code unit at index i within py. // iii. If cx < cy, return true. // iv. If cx > cy, return false. // d. If lx < ly, return true. Otherwise, return false. var lx = px.length; // step 3.a var ly = py.length; // step 3.b for (var i = 0; i < min(lx, ly); i++) { // step 3.c var cx = $charCodeAt(px, i); // step 3.c.i var cy = $charCodeAt(py, i); // step 3.c.ii if (cx < cy) { return true; // step 3.c.iii } if (cx > cy) { return false; // step 3.c.iv } } return lx < ly; // step 3.d } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if (typeof ny === 'undefined') { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if (typeof nx === 'undefined') { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (typeof nx === typeof ny) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both finite, and the same type }; ljharb-es-abstract-babee05/2023/IsLooselyEqual.js000066400000000000000000000034051516525472400216020ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var isObject = require('es-object-atoms/isObject'); var IsStrictlyEqual = require('./IsStrictlyEqual'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/13.0/#sec-islooselyequal module.exports = function IsLooselyEqual(x, y) { if (isSameType(x, y)) { return IsStrictlyEqual(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return IsLooselyEqual(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return IsLooselyEqual(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (typeof n === 'undefined') { return false; } return IsLooselyEqual(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return IsLooselyEqual(y, x); } if (typeof x === 'boolean') { return IsLooselyEqual(ToNumber(x), y); } if (typeof y === 'boolean') { return IsLooselyEqual(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol' || typeof x === 'bigint') && isObject(y)) { return IsLooselyEqual(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol' || typeof y === 'bigint')) { return IsLooselyEqual(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (!isFinite(x) || !isFinite(y)) { return false; } // eslint-disable-next-line eqeqeq return x == y; // shortcut for step 13.b. } return false; }; ljharb-es-abstract-babee05/2023/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231040ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/11.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') { return true; } return false; }; ljharb-es-abstract-babee05/2023/IsPromise.js000066400000000000000000000007451516525472400206060ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2023/IsPropertyKey.js000066400000000000000000000003371516525472400214620ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2023/IsRegExp.js000066400000000000000000000010721516525472400203540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2023/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2023/IsStrictlyEqual.js000066400000000000000000000006101516525472400217640ustar00rootroot00000000000000'use strict'; var SameValueNonNumber = require('./SameValueNonNumber'); var Type = require('./Type'); var NumberEqual = require('./Number/equal'); // https://262.ecma-international.org/14.0/#sec-isstrictlyequal module.exports = function IsStrictlyEqual(x, y) { if (Type(x) !== Type(y)) { return false; } return typeof x === 'number' ? NumberEqual(x, y) : SameValueNonNumber(x, y); }; ljharb-es-abstract-babee05/2023/IsStringWellFormedUnicode.js000066400000000000000000000011671516525472400237250ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#sec-isstringwellformedunicode module.exports = function IsStringWellFormedUnicode(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var len = string.length; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var cp = CodePointAt(string, k); // step 3.a if (cp['[[IsUnpairedSurrogate]]']) { return false; // step 3.b } k += cp['[[CodeUnitCount]]']; // step 3.c } return true; // step 4 }; ljharb-es-abstract-babee05/2023/IsTimeZoneOffsetString.js000066400000000000000000000012531516525472400232530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var regexTester = require('safe-regex-test'); // https://tc39.es/ecma262/#sec-istimezoneoffsetstring // implementation taken from https://github.com/tc39/proposal-temporal/blob/21ee5b13f0672990c807475ba094092d19dd6dc5/polyfill/lib/ecmascript.mjs#L2140 var OFFSET = /^([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?$/; var testOffset = regexTester(OFFSET); module.exports = function IsTimeZoneOffsetString(offsetString) { if (typeof offsetString !== 'string') { throw new $TypeError('Assertion failed: `offsetString` must be a String'); } return testOffset(offsetString); }; ljharb-es-abstract-babee05/2023/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245650ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'Int8' || type === 'Uint8' || type === 'Int16' || type === 'Uint16' || type === 'Int32' || type === 'Uint32'; }; ljharb-es-abstract-babee05/2023/IsUnsignedElementType.js000066400000000000000000000004121516525472400231070ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'Uint8' || type === 'Uint8C' || type === 'Uint16' || type === 'Uint32' || type === 'BigUint64'; }; ljharb-es-abstract-babee05/2023/IsValidIntegerIndex.js000066400000000000000000000015641516525472400225350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isInteger = require('math-intrinsics/isInteger'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/12.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { // Assert: O is an Integer-Indexed exotic object. var buffer = typedArrayBuffer(O); // step 1 if (typeof index !== 'number') { throw new $TypeError('Assertion failed: Type(index) is not Number'); } if (IsDetachedBuffer(buffer)) { return false; } // step 2 if (!isInteger(index)) { return false; } // step 3 if (isNegativeZero(index)) { return false; } // step 4 if (index < 0 || index >= O.length) { return false; } // step 5 return true; // step 6 }; ljharb-es-abstract-babee05/2023/IsWordChar.js000066400000000000000000000022141516525472400206720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isRegExpRecord = require('../helpers/records/regexp-record'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/14.0/#sec-runtime-semantics-iswordchar-abstract-operation module.exports = function IsWordChar(rer, Input, e) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (!isInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } var InputLength = Input.length; // step 1 if (e === -1 || e === InputLength) { return false; // step 2 } var c = Input[e]; // step 3 return $indexOf(WordCharacters(rer), c) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2023/IteratorClose.js000066400000000000000000000045321516525472400214510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratorclose module.exports = function IteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!isObject(iteratorRecord['[[Iterator]]'])) { throw new $TypeError('Assertion failed: iteratorRecord.[[Iterator]] must be an Object'); // step 1 } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { // step 2 throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iterator = iteratorRecord['[[Iterator]]']; // step 3 var iteratorReturn; try { iteratorReturn = GetMethod(iterator, 'return'); // step 4 } catch (e) { completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. throw e; // step 7 } if (typeof iteratorReturn === 'undefined') { return completionThunk(); // step 5.a - 5.b } var innerResult; try { innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; // step 7 } var completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2023/IteratorComplete.js000066400000000000000000000007131516525472400221510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2023/IteratorNext.js000066400000000000000000000016001516525472400213130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratornext module.exports = function IteratorNext(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result; if (arguments.length < 2) { // step 1 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]']); // step 1.a } else { // step 2 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]'], [arguments[1]]); // step 2.a } if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); // step 3 } return result; // step 4 }; ljharb-es-abstract-babee05/2023/IteratorStep.js000066400000000000000000000012241516525472400213120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratorstep module.exports = function IteratorStep(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result = IteratorNext(iteratorRecord); // step 1 var done = IteratorComplete(result); // step 2 return done === true ? false : result; // steps 3-4 }; ljharb-es-abstract-babee05/2023/IteratorToList.js000066400000000000000000000014251516525472400216200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var isIteratorRecord = require('../helpers/records/iterator-record-2023'); // https://262.ecma-international.org/14.0/#sec-iteratortolist module.exports = function IteratorToList(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var values = []; // step 1 var next = true; // step 2 while (next) { // step 3 next = IteratorStep(iteratorRecord); // step 3.a if (next) { var nextValue = IteratorValue(next); // step 3.b.i values[values.length] = nextValue; // step 3.b.ii } } return values; // step 4 }; ljharb-es-abstract-babee05/2023/IteratorValue.js000066400000000000000000000006241516525472400214560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2023/KeyForSymbol.js000066400000000000000000000006011516525472400212500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $keyFor = callBound('Symbol.keyFor', true); // https://262.ecma-international.org/14.0/#sec-keyforsymbol module.exports = function KeyForSymbol(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $keyFor(sym); }; ljharb-es-abstract-babee05/2023/LengthOfArrayLike.js000066400000000000000000000007151516525472400222030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2023/MakeDate.js000066400000000000000000000005161516525472400203430ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2023/MakeDay.js000066400000000000000000000017641516525472400202110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToIntegerOrInfinity(year); var m = ToIntegerOrInfinity(month); var dt = ToIntegerOrInfinity(date); var ym = y + floor(m / 12); if (!$isFinite(ym)) { return NaN; } var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2023/MakeMatchIndicesIndexPairArray.js000066400000000000000000000052261516525472400246270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayCreate = require('./ArrayCreate'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var GetMatchIndexPair = require('./GetMatchIndexPair'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isMatchRecord = require('../helpers/records/match-record'); var isStringOrUndefined = function isStringOrUndefined(s) { return typeof s === 'undefined' || typeof s === 'string'; }; var isMatchRecordOrUndefined = function isMatchRecordOrUndefined(m) { return typeof m === 'undefined' || isMatchRecord(m); }; var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function MakeMatchIndicesIndexPairArray(S, indices, groupNames, hasGroups) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!IsArray(indices) || !every(indices, isMatchRecordOrUndefined)) { throw new $TypeError('Assertion failed: `indices` must be a List of either Match Records or `undefined`'); } if (!IsArray(groupNames) || !every(groupNames, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `groupNames` must be a List of either Strings or `undefined`'); } if (typeof hasGroups !== 'boolean') { throw new $TypeError('Assertion failed: `hasGroups` must be a Boolean'); } var n = indices.length; // step 1 if (!(n < MAX_ARRAY_LENGTH)) { throw new $TypeError('Assertion failed: `indices` length must be less than the max array size, 2**32 - 1'); } if (groupNames.length !== n - 1) { throw new $TypeError('Assertion failed: `groupNames` must have exactly one fewer item than `indices`'); } var A = ArrayCreate(n); // step 5 var groups = hasGroups ? OrdinaryObjectCreate(null) : void undefined; // step 6-7 CreateDataPropertyOrThrow(A, 'groups', groups); // step 8 for (var i = 0; i < n; i += 1) { // step 9 var matchIndices = indices[i]; // step 9.a // eslint-disable-next-line no-negated-condition var matchIndexPair = typeof matchIndices !== 'undefined' ? GetMatchIndexPair(S, matchIndices) : void undefined; // step 9.b-9.c CreateDataPropertyOrThrow(A, ToString(i), matchIndexPair); // step 9.d if (i > 0 && typeof groupNames[i - 1] !== 'undefined') { // step 9.e if (!groups) { throw new $TypeError('if `hasGroups` is `false`, `groupNames` can only contain `undefined` values'); } CreateDataPropertyOrThrow(groups, groupNames[i - 1], matchIndexPair); // step 9.e.i } } return A; // step 10 }; ljharb-es-abstract-babee05/2023/MakeTime.js000066400000000000000000000013731516525472400203660ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-maketime module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToIntegerOrInfinity(hour); var m = ToIntegerOrInfinity(min); var s = ToIntegerOrInfinity(sec); var milli = ToIntegerOrInfinity(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2023/MinFromTime.js000066400000000000000000000006141516525472400210550ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2023/MonthFromTime.js000066400000000000000000000021511516525472400214150ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2023/NewPromiseCapability.js000066400000000000000000000023141516525472400227600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2023/NormalCompletion.js000066400000000000000000000003551516525472400221530ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2023/Number/000077500000000000000000000000001516525472400175605ustar00rootroot00000000000000ljharb-es-abstract-babee05/2023/Number/add.js000066400000000000000000000014401516525472400206450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if (!isFinite(x)) { return x; } if (!isFinite(y)) { return y; } if (x === y && x === 0) { // both zeroes return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2023/Number/bitwiseAND.js000066400000000000000000000006521516525472400221120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2023/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2023/Number/bitwiseOR.js000066400000000000000000000006501516525472400220260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2023/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2023/Number/divide.js000066400000000000000000000010641516525472400213630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2023/Number/equal.js000066400000000000000000000007371516525472400212340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2023/Number/exponentiate.js000066400000000000000000000033141516525472400226220ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2023/Number/index.js000066400000000000000000000023721516525472400212310ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2023/Number/leftShift.js000066400000000000000000000010621516525472400220450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum << shiftCount; }; ljharb-es-abstract-babee05/2023/Number/lessThan.js000066400000000000000000000010641516525472400217000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2023/Number/multiply.js000066400000000000000000000014661516525472400220040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2023/Number/remainder.js000066400000000000000000000023031516525472400220620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var isFinite = require('math-intrinsics/isFinite'); var truncate = require('../truncate'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || n === 0) { return n; } if (!isFinite(n) || !isFinite(d) || n === 0 || d === 0) { throw new $TypeError('Assertion failed: `n` and `d` arguments must be finite and nonzero'); } var quotient = n / d; var q = truncate(quotient); var r = n - (d * q); if (r === 0 && n < 0) { return -0; } return r; }; ljharb-es-abstract-babee05/2023/Number/sameValue.js000066400000000000000000000010711516525472400220370ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2023/Number/sameValueZero.js000066400000000000000000000007611516525472400227040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2023/Number/signedRightShift.js000066400000000000000000000011001516525472400233530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2023/Number/subtract.js000066400000000000000000000007121516525472400217450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberAdd = require('./add'); var NumberUnaryMinus = require('./unaryMinus'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberAdd(x, NumberUnaryMinus(y)); }; ljharb-es-abstract-babee05/2023/Number/toString.js000066400000000000000000000012051516525472400217250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $numberToString = callBound('Number.prototype.toString'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x, radix) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } return $numberToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2023/Number/unaryMinus.js000066400000000000000000000006071516525472400222730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2023/Number/unsignedRightShift.js000066400000000000000000000011051516525472400237230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2023/NumberBitwiseOp.js000066400000000000000000000012511516525472400217430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2023/NumberToBigInt.js000066400000000000000000000014311516525472400215150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2023/NumericToRawBytes.js000066400000000000000000000037501516525472400222610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $Int8: ToInt8, $Uint8: ToUint8, $Uint8C: ToUint8Clamp, $Int16: ToInt16, $Uint16: ToUint16, $Int32: ToInt32, $Uint32: ToUint32, $BigInt64: ToBigInt64, $BigUint64: ToBigUint64 }; // https://262.ecma-international.org/11.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'Float32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'Float64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2023/ObjectDefineProperties.js000066400000000000000000000026331516525472400232700ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/6.0/#sec-objectdefineproperties /** @type { = {}>(O: T, Properties: object) => T} */ module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 /** @type {[string | symbol, import('../types').Descriptor][]} */ var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = [nextKey, desc]; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 var P = pair[0]; // step 5.a var desc = pair[1]; // step 5.b DefinePropertyOrThrow(O, P, desc); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2023/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400246760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2023/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240160ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2023/OrdinaryGetOwnProperty.js000066400000000000000000000022531516525472400233500ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var hasOwn = require('hasown'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2023/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2023/OrdinaryHasInstance.js000066400000000000000000000010731516525472400225770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2023/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2023/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2023/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2023/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2023/ParseHexOctet.js000066400000000000000000000024601516525472400214060ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isInteger = require('math-intrinsics/isInteger'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-parsehexoctet module.exports = function ParseHexOctet(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer'); } var len = string.length; // step 1 if ((position + 2) > len) { // step 2 var error = new $SyntaxError('requested a position on a string that does not contain 2 characters at that position'); // step 2.a return [error]; // step 2.b } var hexDigits = substring(string, position, position + 2); // step 3 var n = +('0x' + hexDigits); if (isNaN(n)) { return [new $SyntaxError('Invalid hexadecimal characters')]; } return n; /* 4. Let _parseResult_ be ParseText(StringToCodePoints(_hexDigits_), |HexDigits[~Sep]|). 5. If _parseResult_ is not a Parse Node, return _parseResult_. 6. Let _n_ be the unsigned 8-bit value corresponding with the MV of _parseResult_. 7. Return _n_. */ }; ljharb-es-abstract-babee05/2023/PromiseResolve.js000066400000000000000000000007721516525472400216520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2023/QuoteJSONString.js000066400000000000000000000026161516525472400216510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var hasOwn = require('hasown'); // https://262.ecma-international.org/12.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(StringToCodePoints(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16EncodeCodePoint(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2023/RawBytesToNumeric.js000066400000000000000000000045001516525472400222530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/11.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'Float32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'Float64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2023/RegExpCreate.js000066400000000000000000000012031516525472400212000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2023/RegExpExec.js000066400000000000000000000014761516525472400206750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2023/RegExpHasFlag.js000066400000000000000000000021211516525472400213020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $RegExpPrototype = GetIntrinsic('%RegExp.prototype%'); var SameValue = require('./SameValue'); var $indexOf = callBound('String.prototype.indexOf'); var hasRegExpMatcher = require('is-regex'); var getFlags = require('regexp.prototype.flags'); // https://262.ecma-international.org/13.0/#sec-regexphasflag module.exports = function RegExpHasFlag(R, codeUnit) { if (typeof codeUnit !== 'string' || codeUnit.length !== 1) { throw new $TypeError('Assertion failed: `string` must be a code unit - a String of length 1'); } if (!isObject(R)) { throw new $TypeError('Assertion failed: Type(R) is not Object'); } if (!hasRegExpMatcher(R)) { // step 2 if (SameValue(R, $RegExpPrototype)) { return void undefined; // step 2.a } throw new $TypeError('`R` must be a RegExp object'); // step 2.b } var flags = getFlags(R); // step 3 return $indexOf(flags, codeUnit) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2023/RequireObjectCoercible.js000066400000000000000000000001231516525472400232350ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2023/SameValue.js000066400000000000000000000004701516525472400205510ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2023/SameValueNonNumber.js000066400000000000000000000010261516525472400223730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var Type = require('./Type'); // https://262.ecma-international.org/14.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number') { throw new $TypeError('Assertion failed: SameValueNonNumber does not accept Number values'); } if (Type(x) !== Type(y)) { throw new $TypeError('SameValueNonNumber requires two non-Number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2023/SameValueZero.js000066400000000000000000000003371516525472400214130ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2023/SecFromTime.js000066400000000000000000000006221516525472400210430ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2023/Set.js000066400000000000000000000023121516525472400174170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2023/SetFunctionLength.js000066400000000000000000000017721516525472400223000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/12.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length !== Infinity && (!isInteger(length) || length < 0)) { throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2023/SetFunctionName.js000066400000000000000000000024101516525472400217250ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2023/SetIntegrityLevel.js000066400000000000000000000034541516525472400223160ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2023/SetTypedArrayFromArrayLike.js000066400000000000000000000041171516525472400240610ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var Get = require('./Get'); var IntegerIndexedElementSet = require('./IntegerIndexedElementSet'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); // https://262.ecma-international.org/14.0/#sec-settypedarrayfromarraylike module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } if (isTypedArray(source)) { throw new $TypeError('Assertion failed: source must not be a TypedArray instance'); } var targetBuffer = typedArrayBuffer(target); // step 1 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 2 } var targetLength = typedArrayLength(target); // step 3 var src = ToObject(source); // step 4 var srcLength = LengthOfArrayLike(src); // step 5 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a finite integer'); // step 6 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 7 } var k = 0; // step 8 while (k < srcLength) { // step 9 var Pk = ToString(k); // step 9.a var value = Get(src, Pk); // step 9.b var targetIndex = targetOffset + k; // step 9.c IntegerIndexedElementSet(target, targetIndex, value); // step 9.d k += 1; // step 9.e } }; ljharb-es-abstract-babee05/2023/SetTypedArrayFromTypedArray.js000066400000000000000000000115651516525472400242670ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var GetIntrinsic = require('get-intrinsic'); var isInteger = require('math-intrinsics/isInteger'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteLength = require('typed-array-byte-length'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); var whichTypedArray = require('which-typed-array'); var CloneArrayBuffer = require('./CloneArrayBuffer'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); var SameValue = require('./SameValue'); var SetValueInBuffer = require('./SetValueInBuffer'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); // https://262.ecma-international.org/14.0/#sec-settypedarrayfromtypedarray module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: target must be a TypedArray instance'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: targetOffset must be a non-negative integer or +Infinity'); } var whichSource = whichTypedArray(source); if (!whichSource) { throw new $TypeError('Assertion failed: source must be a TypedArray instance'); } var targetBuffer = typedArrayBuffer(target); // step 1 if (IsDetachedBuffer(targetBuffer)) { throw new $TypeError('target’s buffer is detached'); // step 2 } var targetLength = typedArrayLength(target); // step 3 var srcBuffer = typedArrayBuffer(source); // step 4 if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('source’s buffer is detached'); // step 5 } var targetType = TypedArrayElementType(target); // step 6 var targetElementSize = TypedArrayElementSize(target); // step 7 var targetByteOffset = typedArrayByteOffset(target); // step 8 var srcType = TypedArrayElementType(source); // step 9 var srcElementSize = TypedArrayElementSize(source); // step 10 var srcLength = typedArrayLength(source); // step 11 var srcByteOffset = typedArrayByteOffset(source); // step 12 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 13 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 14 } var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BigInt' : 'Number'; var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BigInt' : 'Number'; if (targetContentType !== sourceContentType) { throw new $TypeError('source and target must have the same content type'); // step 15 } var sameSharedArrayBuffer = false; if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 16 // a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false. throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } var srcByteIndex; if (SameValue(srcBuffer, targetBuffer) || sameSharedArrayBuffer) { // step 17 var srcByteLength = typedArrayByteLength(source); // step 17.a srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 17.b srcByteIndex = 0; // step 17.c } else { srcByteIndex = srcByteOffset; // step 18 } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 19 var limit = targetByteIndex + (targetElementSize * srcLength); // step 20 var value; if (srcType === targetType) { // step 21 // a. NOTE: The transfer must be performed in a manner that preserves the bit-level encoding of the source data. while (targetByteIndex < limit) { // step 21.b value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'Uint8', true, 'Unordered'); // step 21.b.i SetValueInBuffer(targetBuffer, targetByteIndex, 'Uint8', value, true, 'Unordered'); // step 21.b.ii srcByteIndex += 1; // step 21.b.iii targetByteIndex += 1; // step 21.b.iv } } else { // step 22 while (targetByteIndex < limit) { // step 22.a value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'Unordered'); // step 22.a.i SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'Unordered'); // step 22.a.ii srcByteIndex += srcElementSize; // step 22.a.iii targetByteIndex += targetElementSize; // step 22.a.iv } } }; ljharb-es-abstract-babee05/2023/SetValueInBuffer.js000066400000000000000000000100701516525472400220350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/12.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex) || byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SeqCst' && order !== 'Unordered' && order !== 'Init') { throw new $TypeError('Assertion failed: `order` must be `"SeqCst"`, `"Unordered"`, or `"Init"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is BigInt64 or BigUint64, otherwise a Number'); } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 // 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7 if (isSAB) { // step 8 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 10. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2023/SortIndexedProperties.js000066400000000000000000000027551516525472400232040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var ToString = require('./ToString'); var isAbstractClosure = require('../helpers/isAbstractClosure'); var $sort = callBound('Array.prototype.sort'); // https://262.ecma-international.org/14.0/#sec-sortindexedproperties module.exports = function SortIndexedProperties(obj, len, SortCompare, holes) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(obj) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: `len` must be an integer >= 0'); } if (!isAbstractClosure(SortCompare) || SortCompare.length !== 2) { throw new $TypeError('Assertion failed: `SortCompare` must be an abstract closure taking 2 arguments'); } if (holes !== 'skip-holes' && holes !== 'read-through-holes') { throw new $TypeError('Assertion failed: `holes` must be either ~skip-holes~ or ~read-through-holes~'); } var items = []; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var Pk = ToString(k); var kRead = holes === 'skip-holes' ? HasProperty(obj, Pk) : true; // step 3.b - 3.c if (kRead) { // step 3.d var kValue = Get(obj, Pk); items[items.length] = kValue; } k += 1; // step 3.e } $sort(items, SortCompare); // step 4 return items; // step 5 }; ljharb-es-abstract-babee05/2023/SpeciesConstructor.js000066400000000000000000000015131516525472400225270ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2023/StringCreate.js000066400000000000000000000020631516525472400212610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2023/StringGetOwnProperty.js000066400000000000000000000025351516525472400230320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var isPropertyKey = require('../helpers/isPropertyKey'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2023/StringIndexOf.js000066400000000000000000000020001516525472400214010ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-stringindexof module.exports = function StringIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a String'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; if (searchValue === '' && fromIndex <= len) { return fromIndex; } var searchLen = searchValue.length; for (var i = fromIndex; i <= (len - searchLen); i += 1) { var candidate = $slice(string, i, i + searchLen); if (candidate === searchValue) { return i; } } return -1; }; ljharb-es-abstract-babee05/2023/StringPad.js000066400000000000000000000022661516525472400205670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/11.0/#sec-stringpad module.exports = function StringPad(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end') { throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); } var S = ToString(O); var intMaxLength = ToLength(maxLength); var stringLength = S.length; if (intMaxLength <= stringLength) { return S; } var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); if (filler === '') { return S; } var fillLen = intMaxLength - stringLength; // the String value consisting of repeated concatenations of filler truncated to length fillLen. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += filler; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start') { return truncatedStringFiller + S; } return S + truncatedStringFiller; }; ljharb-es-abstract-babee05/2023/StringToBigInt.js000066400000000000000000000011141516525472400215310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/14.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return void undefined; } }; ljharb-es-abstract-babee05/2023/StringToCodePoints.js000066400000000000000000000011221516525472400224230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/12.0/#sec-stringtocodepoints module.exports = function StringToCodePoints(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2023/StringToNumber.js000066400000000000000000000023561516525472400216160ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); var $TypeError = require('es-errors/type'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); // https://262.ecma-international.org/13.0/#sec-stringtonumber module.exports = function StringToNumber(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` is not a String'); } if (isBinary(argument)) { return +$parseInteger($strSlice(argument, 2), 2); } if (isOctal(argument)) { return +$parseInteger($strSlice(argument, 2), 8); } if (hasNonWS(argument) || isInvalidHexLiteral(argument)) { return NaN; } var trimmed = $trim(argument); if (trimmed !== argument) { return StringToNumber(trimmed); } return +argument; }; ljharb-es-abstract-babee05/2023/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2023/TestIntegrityLevel.js000066400000000000000000000022671516525472400225030ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2023/ThrowCompletion.js000066400000000000000000000003601516525472400220220ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2023/TimeClip.js000066400000000000000000000006671516525472400204050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2023/TimeFromYear.js000066400000000000000000000004051516525472400212300ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2023/TimeString.js000066400000000000000000000014671516525472400207630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); var ToZeroPaddedDecimalString = require('./ToZeroPaddedDecimalString'); // https://262.ecma-international.org/13.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = ToZeroPaddedDecimalString(HourFromTime(tv), 2); // step 1 var minute = ToZeroPaddedDecimalString(MinFromTime(tv), 2); // step 2 var second = ToZeroPaddedDecimalString(SecFromTime(tv), 2); // step 3 return hour + ':' + minute + ':' + second + ' GMT'; // step 4 }; ljharb-es-abstract-babee05/2023/TimeWithinDay.js000066400000000000000000000003671516525472400214130ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2023/TimeZoneString.js000066400000000000000000000036511516525472400216140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/14.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (!isInteger(tv)) { throw new $TypeError('Assertion failed: `tv` must be an integral Number'); } // 1. Let localTimeZone be DefaultTimeZone(). // 2. If IsTimeZoneOffsetString(localTimeZone) is true, then // a. Let offsetNs be ParseTimeZoneOffsetString(localTimeZone). // 3. Else, // a. Let offsetNs be GetNamedTimeZoneOffsetNanoseconds(localTimeZone, ℤ(ℝ(tv) × 106)). // 4. Let offset be 𝔽(truncate(offsetNs / 106)). // 5. If offset is +0𝔽 or offset > +0𝔽, then // a. Let offsetSign be "+". // b. Let absOffset be offset. // 6. Else, // a. Let offsetSign be "-". // b. Let absOffset be -offset. // 7. Let offsetMin be ToZeroPaddedDecimalString(ℝ(MinFromTime(absOffset)), 2). // 8. Let offsetHour be ToZeroPaddedDecimalString(ℝ(HourFromTime(absOffset)), 2). // 9. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 10. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until DefaultTimeZone, IsTimeZoneOffsetString, ParseTimeZoneOffsetString, GetNamedTimeZoneOffsetNanoseconds, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2023/ToBigInt.js000066400000000000000000000023711516525472400203500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/13.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (typeof n === 'undefined') { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2023/ToBigInt64.js000066400000000000000000000016701516525472400205230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2023/ToBigUint64.js000066400000000000000000000013041516525472400207020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2023/ToBoolean.js000066400000000000000000000002021516525472400205420ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2023/ToDateString.js000066400000000000000000000010071516525472400212330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2023/ToIndex.js000066400000000000000000000011761516525472400202450ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var ToLength = require('./ToLength'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/8.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integerIndex = ToIntegerOrInfinity(value); if (integerIndex < 0) { throw new $RangeError('index must be >= 0'); } var index = ToLength(integerIndex); if (!SameValue(integerIndex, index)) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return index; }; ljharb-es-abstract-babee05/2023/ToInt16.js000066400000000000000000000010351516525472400200710ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint16 var two16 = 0x10000; // Math.pow(2, 16); module.exports = function ToInt16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit >= 0x8000 ? int16bit - two16 : int16bit; }; ljharb-es-abstract-babee05/2023/ToInt32.js000066400000000000000000000012651516525472400200740ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint32 var two31 = 0x80000000; // Math.pow(2, 31); var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToInt32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); var result = int32bit >= two31 ? int32bit - two32 : int32bit; return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2023/ToInt8.js000066400000000000000000000007531516525472400200200ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint8 module.exports = function ToInt8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2023/ToIntegerOrInfinity.js000066400000000000000000000007301516525472400226010ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-tointegerorinfinity module.exports = function ToIntegerOrInfinity(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0) { return 0; } if (!$isFinite(number)) { return number; } return truncate(number); }; ljharb-es-abstract-babee05/2023/ToLength.js000066400000000000000000000006631516525472400204170ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToIntegerOrInfinity(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2023/ToNumber.js000066400000000000000000000014321516525472400204210ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var StringToNumber = require('./StringToNumber'); // https://262.ecma-international.org/13.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { return StringToNumber(value); } return +value; }; ljharb-es-abstract-babee05/2023/ToNumeric.js000066400000000000000000000010131516525472400205660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2023/ToObject.js000066400000000000000000000001761516525472400204030ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2023/ToPrimitive.js000066400000000000000000000004321516525472400211400ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2023/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230650ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2023/ToPropertyKey.js000066400000000000000000000006201516525472400214640ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2023/ToString.js000066400000000000000000000006051516525472400204400ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2023/ToUint16.js000066400000000000000000000011131516525472400202530ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint16 var two16 = 0x10000; // Math.pow(2, 16) module.exports = function ToUint16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit === 0 ? 0 : int16bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2023/ToUint32.js000066400000000000000000000011201516525472400202470ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint32 var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToUint32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); return int32bit === 0 ? 0 : int32bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2023/ToUint8.js000066400000000000000000000007111516525472400201770ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); // https://262.ecma-international.org/14.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit; }; ljharb-es-abstract-babee05/2023/ToUint8Clamp.js000066400000000000000000000010101516525472400211450ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); if ($isNaN(number) || number <= 0) { return 0; } if (number >= 0xFF) { return 0xFF; } var f = floor(number); if (f + 0.5 < number) { return f + 1; } if (number < f + 0.5) { return f; } if (f % 2 !== 0) { return f + 1; } return f; }; ljharb-es-abstract-babee05/2023/ToZeroPaddedDecimalString.js000066400000000000000000000010741516525472400236620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $RangeError = require('es-errors/range'); var isInteger = require('math-intrinsics/isInteger'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring module.exports = function ToZeroPaddedDecimalString(n, minLength) { if (!isInteger(n) || n < 0) { throw new $RangeError('Assertion failed: `q` must be a non-negative integer'); } var S = $String(n); return StringPad(S, minLength, '0', 'start'); }; ljharb-es-abstract-babee05/2023/TrimString.js000066400000000000000000000013641516525472400207740ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2023/Type.js000066400000000000000000000004511516525472400176070ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } if (typeof x === 'bigint') { return 'BigInt'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2023/TypedArrayCreate.js000066400000000000000000000032261516525472400221010ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/7.0/#typedarray-create module.exports = function TypedArrayCreate(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } ValidateTypedArray(newTypedArray); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (typedArrayLength(newTypedArray) < argumentList[0]) { throw new $TypeError('Assertion failed: `argumentList[0]` must be <= `newTypedArray.length`'); // step 3.a } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2023/TypedArrayCreateSameType.js000066400000000000000000000023211516525472400235440ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/14.0/#sec-typedarray-create-same-type module.exports = function TypedArrayCreateSameType(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var constructor = getConstructor(kind); // step 2 if (typeof constructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } return TypedArrayCreate(constructor, argumentList); // steps 3 - 6 }; ljharb-es-abstract-babee05/2023/TypedArrayElementSize.js000066400000000000000000000013161516525472400231200ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementsize var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementSize(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var size = tableTAO.size['$' + tableTAO.name['$' + type]]; if (!isInteger(size) || size < 0) { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return size; }; ljharb-es-abstract-babee05/2023/TypedArrayElementType.js000066400000000000000000000012061516525472400231250ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementtype var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementType(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var result = tableTAO.name['$' + type]; if (typeof result !== 'string') { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return result; }; ljharb-es-abstract-babee05/2023/TypedArraySpeciesCreate.js000066400000000000000000000025331516525472400234150ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreate = require('./TypedArrayCreate'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/7.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreate(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2023/UTF16EncodeCodePoint.js000066400000000000000000000013021516525472400224120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-utf16encoding module.exports = function UTF16EncodeCodePoint(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2023/UTF16SurrogatePairToCodePoint.js000066400000000000000000000014131516525472400243120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2023/UnicodeEscape.js000066400000000000000000000014161516525472400213770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2023/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000131521516525472400256560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor // see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof current === 'undefined') { // step 2 if (!extensible) { return false; // step 2.a } if (typeof O === 'undefined') { return true; // step 2.b } if (IsAccessorDescriptor(Desc)) { // step 2.c return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } // step 2.d return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!Desc['[[Configurable]]'], '[[Enumerable]]': !!Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': !!Desc['[[Writable]]'] } ); } // 3. Assert: current is a fully populated Property Descriptor. if ( !isFullyPopulatedPropertyDescriptor( { IsAccessorDescriptor: IsAccessorDescriptor, IsDataDescriptor: IsDataDescriptor }, current ) ) { throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor'); } // 4. If every field in Desc is absent, return true. // this can't really match the assertion that it's a Property Descriptor in our JS implementation // 5. If current.[[Configurable]] is false, then if (!current['[[Configurable]]']) { if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) { // step 5.a return false; } if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) { // step 5.b return false; } if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) { // step 5.c return false; } if (IsAccessorDescriptor(current)) { // step 5.d if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } } else if (!current['[[Writable]]']) { // step 5.e if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } } } // 6. If O is not undefined, then if (typeof O !== 'undefined') { var configurable; var enumerable; if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'], '[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]'] } ); } else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) { configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'], '[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]'] } ); } // For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; // step 7 }; ljharb-es-abstract-babee05/2023/ValidateAtomicAccess.js000066400000000000000000000022171516525472400227000ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArray = require('is-typed-array'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/13.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(typedArray, requestIndex) { if (!isTypedArray(typedArray)) { throw new $TypeError('Assertion failed: `typedArray` must be a TypedArray'); } var length = typedArrayLength(typedArray); // step 1 var accessIndex = ToIndex(requestIndex); // step 2 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 4 } var elementSize = TypedArrayElementSize(typedArray); // step 5 var offset = typedArrayByteOffset(typedArray); // step 6 return (accessIndex * elementSize) + offset; // step 7 }; ljharb-es-abstract-babee05/2023/ValidateIntegerTypedArray.js000066400000000000000000000026131516525472400237440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var TypedArrayElementType = require('./TypedArrayElementType'); var ValidateTypedArray = require('./ValidateTypedArray'); var whichTypedArray = require('which-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/13.0/#sec-validateintegertypedarray module.exports = function ValidateIntegerTypedArray(typedArray) { var waitable = arguments.length > 1 ? arguments[1] : false; // step 1 if (typeof waitable !== 'boolean') { throw new $TypeError('Assertion failed: `waitable` must be a Boolean'); } ValidateTypedArray(typedArray); // step 2 var buffer = typedArrayBuffer(typedArray); // step 3 if (waitable) { // step 5 var typeName = whichTypedArray(typedArray); if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') { throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a } } else { var type = TypedArrayElementType(typedArray); // step 5.a if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) { throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 5.b } } return buffer; // step 6 }; ljharb-es-abstract-babee05/2023/ValidateTypedArray.js000066400000000000000000000014001516525472400224170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/13.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2 } var buffer = typedArrayBuffer(O); // step 3 if (IsDetachedBuffer(buffer)) { throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 4 } }; ljharb-es-abstract-babee05/2023/WeakRefDeref.js000066400000000000000000000010641516525472400211610ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $deref = callBound('WeakRef.prototype.deref', true); var isWeakRef = require('is-weakref'); var AddToKeptObjects = require('./AddToKeptObjects'); // https://262.ecma-international.org/12.0/#sec-weakrefderef module.exports = function WeakRefDeref(weakRef) { if (!isWeakRef(weakRef)) { throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef'); } var target = $deref(weakRef); if (target) { AddToKeptObjects(target); } return target; }; ljharb-es-abstract-babee05/2023/WeekDay.js000066400000000000000000000003201516525472400202120ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2023/WordCharacters.js000066400000000000000000000031241516525472400216010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var isRegExpRecord = require('../helpers/records/regexp-record'); var OwnPropertyKeys = require('own-keys'); var basicWordChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/14.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } var extraWordChars = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.S[c]; // step 3 } }); if ((!rer['[[Unicode]]'] || !rer['[[IgnoreCase]]']) && extraWordChars.length > 0) { throw new $TypeError('Assertion failed: `extraWordChars` must be empty when `rer.[[IgnoreCase]]` and `rer.[[Unicode]]` are not both true'); // step 3 } return basicWordChars + extraWordChars; // step 4 }; ljharb-es-abstract-babee05/2023/YearFromTime.js000066400000000000000000000006161516525472400212340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2023/abs.js000066400000000000000000000003231516525472400174310ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2023/clamp.js000066400000000000000000000007741516525472400177720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var max = require('math-intrinsics/max'); var min = require('math-intrinsics/min'); // https://262.ecma-international.org/12.0/#clamping module.exports = function clamp(x, lower, upper) { if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) { throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`'); } return min(max(lower, x), upper); }; ljharb-es-abstract-babee05/2023/floor.js000066400000000000000000000004371516525472400200130ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2023/max.js000066400000000000000000000002061516525472400174510ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2023/min.js000066400000000000000000000002061516525472400174470ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2023/modulo.js000066400000000000000000000002501516525472400201620ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2023/msFromTime.js000066400000000000000000000003751516525472400207550ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2023/substring.js000066400000000000000000000011761516525472400207130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#substring module.exports = function substring(S, inclusiveStart, exclusiveEnd) { if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) { throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers'); } return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length); }; ljharb-es-abstract-babee05/2023/tables/000077500000000000000000000000001516525472400176025ustar00rootroot00000000000000ljharb-es-abstract-babee05/2023/tables/typed-array-objects.js000066400000000000000000000014061516525472400240310ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/11.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'Int8', $Uint8Array: 'Uint8', $Uint8ClampedArray: 'Uint8C', $Int16Array: 'Int16', $Uint16Array: 'Uint16', $Int32Array: 'Int32', $Uint32Array: 'Uint32', $BigInt64Array: 'BigInt64', $BigUint64Array: 'BigUint64', $Float32Array: 'Float32', $Float64Array: 'Float64' }, size: { __proto__: null, $Int8: 1, $Uint8: 1, $Uint8C: 1, $Int16: 2, $Uint16: 2, $Int32: 4, $Uint32: 4, $BigInt64: 8, $BigUint64: 8, $Float32: 4, $Float64: 8 }, choices: '"Int8", "Uint8", "Uint8C", "Int16", "Uint16", "Int32", "Uint32", "BigInt64", "BigUint64", "Float32", or "Float64"' }; ljharb-es-abstract-babee05/2023/thisBigIntValue.js000066400000000000000000000007051516525472400217310ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/11.0/#sec-thisbigintvalue module.exports = function thisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2023/thisBooleanValue.js000066400000000000000000000005031516525472400221300ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object module.exports = function thisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2023/thisNumberValue.js000066400000000000000000000005321516525472400220030ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object module.exports = function thisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2023/thisStringValue.js000066400000000000000000000004751516525472400220270ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object module.exports = function thisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2023/thisSymbolValue.js000066400000000000000000000010161516525472400220160ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/9.0/#sec-thissymbolvalue module.exports = function thisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2023/thisTimeValue.js000066400000000000000000000003471516525472400214550ustar00rootroot00000000000000'use strict'; var timeValue = require('../helpers/timeValue'); // https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object module.exports = function thisTimeValue(value) { return timeValue(value); }; ljharb-es-abstract-babee05/2023/truncate.js000066400000000000000000000007151516525472400205160ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#eqn-truncate module.exports = function truncate(x) { if (typeof x !== 'number' && typeof x !== 'bigint') { throw new $TypeError('argument must be a Number or a BigInt'); } var result = x < 0 ? -floor(-x) : floor(x); return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2024/000077500000000000000000000000001516525472400163315ustar00rootroot00000000000000ljharb-es-abstract-babee05/2024/AddEntriesFromIterable.js000066400000000000000000000026201516525472400232050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/15.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable, 'SYNC'); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2024/AddToKeptObjects.js000066400000000000000000000010251516525472400220160ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var ClearKeptObjects = require('./ClearKeptObjects'); // https://262.ecma-international.org/12.0/#sec-addtokeptobjects module.exports = function AddToKeptObjects(object) { if (!isObject(object)) { throw new $TypeError('Assertion failed: `object` must be an Object'); } var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'); arr[arr.length] = object; }; ljharb-es-abstract-babee05/2024/AddValueToKeyedGroup.js000066400000000000000000000024201516525472400226540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var IsArray = require('../helpers/IsArray'); var every = require('../helpers/every'); var forEach = require('../helpers/forEach'); var hasOwn = require('hasown'); var isKeyedGroup = function (group) { return hasOwn(group, '[[Key]]') && hasOwn(group, '[[Elements]]') && IsArray(group['[[Elements]]']); }; // https://262.ecma-international.org/15.0/#sec-add-value-to-keyed-group module.exports = function AddValueToKeyedGroup(groups, key, value) { if (!IsArray(groups) || (groups.length > 0 && !every(groups, isKeyedGroup))) { throw new $TypeError('Assertion failed: `groups` must be a List of Records with [[Key]] and [[Elements]]'); } var matched = 0; forEach(groups, function (g) { // step 1 if (SameValue(g['[[Key]]'], key)) { // step 2 matched += 1; if (matched > 1) { throw new $TypeError('Assertion failed: Exactly one element of groups meets this criterion'); // step 2.a } var arr = g['[[Elements]]']; arr[arr.length] = value; // step 2.b } }); if (matched === 0) { var group = { '[[Key]]': key, '[[Elements]]': [value] }; // step 2 // eslint-disable-next-line no-param-reassign groups[groups.length] = group; // step 3 } }; ljharb-es-abstract-babee05/2024/AdvanceStringIndex.js000066400000000000000000000016501516525472400224110ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/12.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2024/AllCharacters.js000066400000000000000000000021571516525472400214040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasEitherUnicodeFlag = require('./HasEitherUnicodeFlag'); var isRegExpRecord = require('../helpers/records/regexp-record'); var CharSet = require('../helpers/CharSet'); // https://262.ecma-international.org/15.0/#sec-allcharacters module.exports = function AllCharacters(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (rer['[[UnicodeSets]]'] && rer['[[IgnoreCase]]']) { // step 1 // 1. Return the CharSet containing all Unicode code points _c_ that do not have a Simple Case Folding mapping (that is, scf(_c_)=_c_). return CharSet.getNonSimpleCaseFoldingCodePoints(); // step 1.a } else if (HasEitherUnicodeFlag(rer)) { // step 2 // 1. Return the CharSet containing all code point values. return CharSet.getCodePoints(); // step 3.a // eslint-disable-next-line no-else-return } else { // step 3 // 1. Return the CharSet containing all code unit values. return CharSet.getCodeUnits(); // step 3.a } }; ljharb-es-abstract-babee05/2024/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000060721516525472400256550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasOwnProperty = require('./HasOwnProperty'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); var Type = require('./Type'); var NumberAdd = require('./Number/add'); var NumberBitwiseAND = require('./Number/bitwiseAND'); var NumberBitwiseOR = require('./Number/bitwiseOR'); var NumberBitwiseXOR = require('./Number/bitwiseXOR'); var NumberDivide = require('./Number/divide'); var NumberExponentiate = require('./Number/exponentiate'); var NumberLeftShift = require('./Number/leftShift'); var NumberMultiply = require('./Number/multiply'); var NumberRemainder = require('./Number/remainder'); var NumberSignedRightShift = require('./Number/signedRightShift'); var NumberSubtract = require('./Number/subtract'); var NumberUnsignedRightShift = require('./Number/unsignedRightShift'); var BigIntAdd = require('./BigInt/add'); var BigIntBitwiseAND = require('./BigInt/bitwiseAND'); var BigIntBitwiseOR = require('./BigInt/bitwiseOR'); var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR'); var BigIntDivide = require('./BigInt/divide'); var BigIntExponentiate = require('./BigInt/exponentiate'); var BigIntLeftShift = require('./BigInt/leftShift'); var BigIntMultiply = require('./BigInt/multiply'); var BigIntRemainder = require('./BigInt/remainder'); var BigIntSignedRightShift = require('./BigInt/signedRightShift'); var BigIntSubtract = require('./BigInt/subtract'); var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift'); // https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator // https://262.ecma-international.org/12.0/#step-applystringornumericbinaryoperator-operations-table var table = { '**': [NumberExponentiate, BigIntExponentiate], '*': [NumberMultiply, BigIntMultiply], '/': [NumberDivide, BigIntDivide], '%': [NumberRemainder, BigIntRemainder], '+': [NumberAdd, BigIntAdd], '-': [NumberSubtract, BigIntSubtract], '<<': [NumberLeftShift, BigIntLeftShift], '>>': [NumberSignedRightShift, BigIntSignedRightShift], '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift], '&': [NumberBitwiseAND, BigIntBitwiseAND], '^': [NumberBitwiseXOR, BigIntBitwiseXOR], '|': [NumberBitwiseOR, BigIntBitwiseOR] }; module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) { if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) { throw new $TypeError('Assertion failed: `opText` must be a valid operation string'); } if (opText === '+') { var lprim = ToPrimitive(lval); var rprim = ToPrimitive(rval); if (typeof lprim === 'string' || typeof rprim === 'string') { var lstr = ToString(lprim); var rstr = ToString(rprim); return lstr + rstr; } /* eslint no-param-reassign: 1 */ lval = lprim; rval = rprim; } var lnum = ToNumeric(lval); var rnum = ToNumeric(rval); if (Type(lnum) !== Type(rnum)) { throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ'); } var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0]; return Operation(lnum, rnum); }; ljharb-es-abstract-babee05/2024/ArrayBufferByteLength.js000066400000000000000000000033571516525472400230750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/15.0/#sec-arraybufferbytelength var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var arrayBufferByteLength = require('array-buffer-byte-length'); var callBound = require('call-bound'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); var isGrowable = false; // TODO: support this module.exports = function ArrayBufferByteLength(arrayBuffer, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } // 1. If IsSharedArrayBuffer(arrayBuffer) is true and arrayBuffer has an [[ArrayBufferByteLengthData]] internal slot, then // TODO: see if IsFixedLengthArrayBuffer can be used here in the spec instead if (isSAB && isGrowable) { // step 1 // a. Let bufferByteLengthBlock be arrayBuffer.[[ArrayBufferByteLengthData]]. // b. Let rawLength be GetRawBytesFromSharedBlock(bufferByteLengthBlock, 0, BIGUINT64, true, order). // c. Let isLittleEndian be the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. // d. Return ℝ(RawBytesToNumeric(BIGUINT64, rawLength, isLittleEndian)). } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must not be detached'); // step 2 } return isSAB ? $sabByteLength(arrayBuffer) : arrayBufferByteLength(arrayBuffer); }; ljharb-es-abstract-babee05/2024/ArrayBufferCopyAndDetach.js000066400000000000000000000075011516525472400234710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var min = require('math-intrinsics/min'); var $TypeError = require('es-errors/type'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var callBound = require('call-bound'); var byteLength = require('array-buffer-byte-length'); var $maxByteLength = callBound('%ArrayBuffer.prototype.maxByteLength%', true); var copy = function copyAB(src, start, end) { var that = new $Uint8Array(src); if (typeof end === 'undefined') { end = that.length; // eslint-disable-line no-param-reassign } var result = new $ArrayBuffer(end - start); var resultArray = new $Uint8Array(result); for (var i = 0; i < resultArray.length; i++) { resultArray[i] = that[i + start]; } return result; }; var $abSlice = callBound('%ArrayBuffer.prototype.slice%', true) || function slice(ab, a, b) { // in node < 0.11, slice is an own nonconfigurable property return ab.slice ? ab.slice(a, b) : copy(ab, a, b); // node 0.8 lacks `slice` }; var DetachArrayBuffer = require('./DetachArrayBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var ToIndex = require('./ToIndex'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/15.0/#sec-arraybuffercopyanddetach module.exports = function ArrayBufferCopyAndDetach(arrayBuffer, newLength, preserveResizability) { if (preserveResizability !== 'PRESERVE-RESIZABILITY' && preserveResizability !== 'FIXED-LENGTH') { throw new $TypeError('`preserveResizability` must be ~PRESERVE-RESIZABILITY~ or ~FIXED-LENGTH~'); } if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('`arrayBuffer` must be a non-shared ArrayBuffer'); // steps 1 - 2 } var abByteLength; var newByteLength; if (typeof newLength === 'undefined') { // step 3 newByteLength = byteLength(arrayBuffer); // step 3.a abByteLength = newByteLength; } else { // step 4 newByteLength = ToIndex(newLength); // step 4.a } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('`arrayBuffer` must not be detached'); // step 5 } var newMaxByteLength; if (preserveResizability === 'PRESERVE-RESIZABILITY' && !IsFixedLengthArrayBuffer(arrayBuffer)) { // step 6 newMaxByteLength = $maxByteLength(arrayBuffer); // step 6.a } else { // step 7 newMaxByteLength = 'EMPTY'; // step 7.a } // commented out since there's no way to set or access this key // 8. If arrayBuffer.[[ArrayBufferDetachKey]] is not undefined, throw a TypeError exception. // 9. Let newBuffer be ? AllocateArrayBuffer(%ArrayBuffer%, newByteLength, newMaxByteLength). var newBuffer = newMaxByteLength === 'EMPTY' ? new $ArrayBuffer(newByteLength) : new $ArrayBuffer(newByteLength, { maxByteLength: newMaxByteLength }); if (typeof abByteLength !== 'number') { abByteLength = byteLength(arrayBuffer); } var copyLength = min(newByteLength, abByteLength); // step 10 if (newByteLength > copyLength || newMaxByteLength !== 'EMPTY') { var taNew = new $Uint8Array(newBuffer); var taOld = new $Uint8Array(arrayBuffer); for (var i = 0; i < copyLength; i++) { taNew[i] = taOld[i]; } } else { newBuffer = $abSlice(arrayBuffer, 0, copyLength); // ? optimization for when the new buffer will not be larger than the old one } /* 11. Let fromBlock be arrayBuffer.[[ArrayBufferData]]. 12. Let toBlock be newBuffer.[[ArrayBufferData]]. 13. Perform CopyDataBlockBytes(toBlock, 0, fromBlock, 0, copyLength). 14. NOTE: Neither creation of the new Data Block nor copying from the old Data Block are observable. Implementations may implement this method as a zero-copy move or a realloc. */ DetachArrayBuffer(arrayBuffer); // step 15 return newBuffer; // step 16 }; ljharb-es-abstract-babee05/2024/ArrayCreate.js000066400000000000000000000026151516525472400210750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/12.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 3, 5 if (proto !== $ArrayPrototype) { // step 4 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 6 A.length = length; } /* step 6, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2024/ArraySetLength.js000066400000000000000000000045661516525472400215760ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2024/ArraySpeciesCreate.js000066400000000000000000000025311516525472400224060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var ArrayCreate = require('./ArrayCreate'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var isArray = IsArray(originalArray); if (!isArray) { return ArrayCreate(length); } var C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } if (typeof C === 'undefined') { return ArrayCreate(length); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(length); // Construct(C, length); }; ljharb-es-abstract-babee05/2024/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027621516525472400255410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIterResultObject = require('./CreateIterResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIterResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2024/AsyncIteratorClose.js000066400000000000000000000036141516525472400224500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/15.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return $then( $then( $then( new $Promise(function (resolve) { resolve(GetMethod(iterator, 'return')); // step 4 // resolve(Call(ret, iterator, [])); // step 6 }), function (returnV) { // step 5.a if (typeof returnV === 'undefined') { return completion; // step 5.b } return Call(returnV, iterator); // step 5.c, 5.d. } ), null, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 6 } else { throw e; // step 7 } } ), function (innerResult) { // step 8 if (completion.type() === 'throw') { completion['?'](); // step 6 } if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; } ); }; ljharb-es-abstract-babee05/2024/BigInt/000077500000000000000000000000001516525472400175055ustar00rootroot00000000000000ljharb-es-abstract-babee05/2024/BigInt/add.js000066400000000000000000000005751516525472400206020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2024/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220370ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2024/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2024/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2024/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2024/BigInt/divide.js000066400000000000000000000011251516525472400213060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2024/BigInt/equal.js000066400000000000000000000006021516525472400211500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2024/BigInt/exponentiate.js000066400000000000000000000015251516525472400225510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2024/BigInt/index.js000066400000000000000000000021541516525472400211540ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2024/BigInt/leftShift.js000066400000000000000000000006121516525472400217720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2024/BigInt/lessThan.js000066400000000000000000000006071516525472400216270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2024/BigInt/multiply.js000066400000000000000000000006071516525472400217250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2024/BigInt/remainder.js000066400000000000000000000012401516525472400220060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2024/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2024/BigInt/subtract.js000066400000000000000000000006071516525472400216750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2024/BigInt/toString.js000066400000000000000000000014161516525472400216560ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $BigIntToString = callBound('BigInt.prototype.toString', true); // https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x, radix) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } if (!$BigIntToString) { throw new $SyntaxError('BigInt is not supported'); } return $BigIntToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2024/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2024/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2024/BigIntBitwiseOp.js000066400000000000000000000031771516525472400217010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2024/BinaryAnd.js000066400000000000000000000004741516525472400205430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2024/BinaryOr.js000066400000000000000000000004721516525472400204170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2024/BinaryXor.js000066400000000000000000000004741516525472400206110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2024/ByteListBitwiseOp.js000066400000000000000000000022371516525472400222600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) { if (op !== '&' && op !== '^' && op !== '|') { throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`'); } if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var result = []; for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var resultByte; if (op === '&') { resultByte = xByte & yByte; } else if (op === '^') { resultByte = xByte ^ yByte; } else { resultByte = xByte | yByte; } result[result.length] = resultByte; } return result; }; ljharb-es-abstract-babee05/2024/ByteListEqual.js000066400000000000000000000015341516525472400214210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistequal module.exports = function ByteListEqual(xBytes, yBytes) { if (!IsArray(xBytes) || !IsArray(yBytes)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xBytes.length !== yBytes.length) { return false; } for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xByte !== yByte) { return false; } } return true; }; ljharb-es-abstract-babee05/2024/Call.js000066400000000000000000000011351516525472400175420ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2024/CanBeHeldWeakly.js000066400000000000000000000006231516525472400216120ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var KeyForSymbol = require('./KeyForSymbol'); // https://262.ecma-international.org/14.0/#sec-canbeheldweakly module.exports = function CanBeHeldWeakly(v) { if (isObject(v)) { return true; // step 1 } if (typeof v === 'symbol' && typeof KeyForSymbol(v) === 'undefined') { return true; // step 2 } return false; // step 3 }; ljharb-es-abstract-babee05/2024/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2024/Canonicalize.js000066400000000000000000000023261516525472400212710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var isRegExpRecord = require('../helpers/records/regexp-record'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/14.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(rer, ch) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (rer['[[Unicode]]'] && rer['[[IgnoreCase]]']) { // step 1 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 1.b } if (!rer['[[IgnoreCase]]']) { return ch; // step 2 } var u = $toUpperCase(ch); // step 5 if (u.length !== 1) { return ch; // step 7 } var cu = u; // step 8 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 9 } return cu; // step 10 }; ljharb-es-abstract-babee05/2024/CharacterComplement.js000066400000000000000000000015651516525472400226160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var AllCharacters = require('./AllCharacters'); var CharSet = require('../helpers/CharSet').CharSet; var isRegExpRecord = require('../helpers/records/regexp-record'); // https://262.ecma-international.org/15.0/#sec-charactercomplement module.exports = function CharacterComplement(rer, S) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (!(S instanceof CharSet)) { throw new $TypeError('Assertion failed: S must be a CharSet'); } var A = AllCharacters(rer); // step 1 // 2. Return the CharSet containing the CharSetElements of A which are not also CharSetElements of S. return new CharSet( function (x) { return !S.test(x) && A.test(x); }, function (emit) { A.yield(function (x) { if (!S.test(x)) { emit(x); } }); } ); }; ljharb-es-abstract-babee05/2024/CharacterRange.js000066400000000000000000000024751516525472400215500ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; module.exports = function CharacterRange(A, B) { var a; var b; if (A instanceof CharSet || B instanceof CharSet) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); } else { if (A.length !== 1 || B.length !== 1) { throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character'); } a = A[0]; b = B[0]; } var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2024/ClearKeptObjects.js000066400000000000000000000004511516525472400220530ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var keptObjects = []; // https://262.ecma-international.org/12.0/#sec-clear-kept-objects module.exports = function ClearKeptObjects() { keptObjects.length = 0; }; SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects); ljharb-es-abstract-babee05/2024/CloneArrayBuffer.js000066400000000000000000000035511516525472400220640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsConstructor = require('./IsConstructor'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf'); var isInteger = require('math-intrinsics/isInteger'); var isArrayBuffer = require('is-array-buffer'); var arrayBufferSlice = require('arraybuffer.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-clonearraybuffer module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) { if (!isArrayBuffer(srcBuffer)) { throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance'); } if (!isInteger(srcByteOffset) || srcByteOffset < 0) { throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer'); } if (!isInteger(srcLength) || srcLength < 0) { throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer'); } if (!IsConstructor(cloneConstructor)) { throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor'); } // 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4 } /* 5. Let srcBlock be srcBuffer.[[ArrayBufferData]]. 6. Let targetBlock be targetBuffer.[[ArrayBufferData]]. 7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength). */ var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7 OrdinarySetPrototypeOf(targetBuffer, proto); // step 3 return targetBuffer; // step 8 }; ljharb-es-abstract-babee05/2024/CodePointAt.js000066400000000000000000000031611516525472400210410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/12.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2024/CodePointsToString.js000066400000000000000000000013371516525472400224340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-codepointstostring module.exports = function CodePointsToString(text) { if (!IsArray(text)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } var result = ''; forEach(text, function (cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } result += UTF16EncodeCodePoint(cp); }); return result; }; ljharb-es-abstract-babee05/2024/CompareArrayElements.js000066400000000000000000000023751516525472400227600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsLessThan = require('./IsLessThan'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparearrayelements module.exports = function CompareArrayElements(x, y, compareFn) { if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof x === 'undefined' && typeof y === 'undefined') { return 0; // step 1 } if (typeof x === 'undefined') { return 1; // step 2 } if (typeof y === 'undefined') { return -1; // step 3 } if (typeof compareFn !== 'undefined') { // step 4 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 4.a if (isNaN(v)) { return 0; // step 4.b } return v; // step 4.c } var xString = ToString(x); // step 5 var yString = ToString(y); // step 6 var xSmaller = IsLessThan(xString, yString, true); // step 7 if (xSmaller) { return -1; // step 8 } var ySmaller = IsLessThan(yString, xString, true); // step 9 if (ySmaller) { return 1; // step 10 } return 0; // step 11 }; ljharb-es-abstract-babee05/2024/CompareTypedArrayElements.js000066400000000000000000000025151516525472400237620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparetypedarrayelements module.exports = function CompareTypedArrayElements(x, y, compareFn) { if ((typeof x !== 'number' && typeof x !== 'bigint') || typeof x !== typeof y) { throw new $TypeError('Assertion failed: `x` and `y` must be either a BigInt or a Number, and both must be the same type'); } if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof compareFn !== 'undefined') { // step 2 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 2.a if (isNaN(v)) { return 0; // step 2.b } return v; // step 2.c } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN && yNaN) { return 0; // step 3 } if (xNaN) { return 1; // step 4 } if (yNaN) { return -1; // step 5 } if (x < y) { return -1; // step 6 } if (x > y) { return 1; // step 7 } if (SameValue(x, -0) && SameValue(y, 0)) { return -1; // step 8 } if (SameValue(x, 0) && SameValue(y, -0)) { return 1; // step 9 } return 0; // step 10 }; ljharb-es-abstract-babee05/2024/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2024/CompletionRecord.js000066400000000000000000000025141516525472400221410ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2024/CopyDataProperties.js000066400000000000000000000037031516525472400224530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var forEach = require('../helpers/forEach'); var every = require('../helpers/every'); var some = require('../helpers/some'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var keys = OwnPropertyKeys(from); forEach(keys, function (nextKey) { var excluded = some(excludedItems, function (e) { return SameValue(e, nextKey) === true; }); /* var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); */ var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && isInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2024/CreateAsyncFromSyncIterator.js000066400000000000000000000107111516525472400242630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIterResultObject = require('./CreateIterResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord, value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIterResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/15.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2024/CreateDataProperty.js000066400000000000000000000013231516525472400224300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2024/CreateDataPropertyOrThrow.js000066400000000000000000000012541516525472400237600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/14.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } }; ljharb-es-abstract-babee05/2024/CreateHTML.js000066400000000000000000000015051516525472400205600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2024/CreateIterResultObject.js000066400000000000000000000005351516525472400232470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-createiterresultobject module.exports = function CreateIterResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2024/CreateListFromArrayLike.js000066400000000000000000000025301516525472400233560ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var Type = require('./Type'); var defaultElementTypes = ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'BigInt', 'Object']; // https://262.ecma-international.org/11.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var elementTypes = arguments.length > 1 ? arguments[1] : defaultElementTypes; if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } if (!IsArray(elementTypes)) { throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array'); } var len = LengthOfArrayLike(obj); var list = []; var index = 0; while (index < len) { var indexName = ToString(index); var next = Get(obj, indexName); var nextType = Type(next); if ($indexOf(elementTypes, nextType) < 0) { throw new $TypeError('item type ' + nextType + ' is not a valid elementType'); } list[list.length] = next; index += 1; } return list; }; ljharb-es-abstract-babee05/2024/CreateNonEnumerableDataPropertyOrThrow.js000066400000000000000000000013641516525472400264350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow module.exports = function CreateNonEnumerableDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefinePropertyOrThrow(O, P, newDesc); }; ljharb-es-abstract-babee05/2024/CreateRegExpStringIterator.js000066400000000000000000000065471516525472400241220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIterResultObject = require('./CreateIterResultObject'); var DefineMethodProperty = require('./DefineMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIterResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIterResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIterResultObject(match, false); }; DefineMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext, false); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; DefineMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn, false); } } // https://262.ecma-international.org/15.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2024/DateFromTime.js000066400000000000000000000017341516525472400212140ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2024/DateString.js000066400000000000000000000017271516525472400207420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2024/Day.js000066400000000000000000000003521516525472400174040ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2024/DayFromYear.js000066400000000000000000000004001516525472400210430ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2024/DayWithinYear.js000066400000000000000000000004361516525472400214130ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2024/DaysInYear.js000066400000000000000000000004551516525472400207030ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2024/DefineMethodProperty.js000066400000000000000000000027411516525472400227730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-definemethodproperty module.exports = function DefineMethodProperty(homeObject, key, closure, enumerable) { if (!isObject(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an Object'); } if (!isPropertyKey(key)) { throw new $TypeError('Assertion failed: `key` is not a Property Key or a Private Name'); } if (typeof closure !== 'function') { throw new $TypeError('Assertion failed: `closure` is not a function'); } if (typeof enumerable !== 'boolean') { throw new $TypeError('Assertion failed: `enumerable` is not a Boolean'); } // 1. Assert: homeObject is an ordinary, extensible object with no non-configurable properties. if (!IsExtensible(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an ordinary, extensible object, with no non-configurable properties'); } // 2. If key is a Private Name, then // a. Return PrivateElement { [[Key]]: key, [[Kind]]: method, [[Value]]: closure }. // 3. Else, var desc = { // step 3.a '[[Value]]': closure, '[[Writable]]': true, '[[Enumerable]]': enumerable, '[[Configurable]]': true }; DefinePropertyOrThrow(homeObject, key, desc); // step 3.b }; ljharb-es-abstract-babee05/2024/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2024/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2024/DetachArrayBuffer.js000066400000000000000000000032571516525472400222170ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2024/EnumerableOwnProperties.js000066400000000000000000000017541516525472400235160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-enumerableownproperties module.exports = function EnumerableOwnProperties(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2024/FindViaPredicate.js000066400000000000000000000027741516525472400220420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); var IsCallable = require('./IsCallable'); var ToString = require('./ToString'); // https://262.ecma-international.org/15.0/#sec-findviapredicate module.exports = function FindViaPredicate(O, len, direction, predicate, thisArg) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: len must be a non-negative integer'); } if (direction !== 'ascending' && direction !== 'descending' && direction !== 'DESCENDING' && direction !== 'ASCENDING') { throw new $TypeError('Assertion failed: direction must be ~ASCENDING~ or ~DESCENDING~'); } if (!IsCallable(predicate)) { throw new $TypeError('predicate must be callable'); // step 1 } for ( // steps 2-4 var k = direction === 'ascending' || direction === 'ASCENDING' ? 0 : len - 1; direction === 'ascending' || direction === 'ASCENDING' ? k < len : k >= 0; k += 1 ) { var Pk = ToString(k); // step 4.a var kValue = Get(O, Pk); // step 4.c var testResult = Call(predicate, thisArg, [kValue, k, O]); // step 4.d if (ToBoolean(testResult)) { return { '[[Index]]': k, '[[Value]]': kValue }; // step 4.e } } return { '[[Index]]': -1, '[[Value]]': void undefined }; // step 5 }; ljharb-es-abstract-babee05/2024/FlattenIntoArray.js000066400000000000000000000032201516525472400221120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2024/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2024/Get.js000066400000000000000000000010701516525472400174040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2024/GetArrayBufferMaxByteLengthOption.js000066400000000000000000000010231516525472400253600ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToIndex = require('./ToIndex'); // https://262.ecma-international.org/15.0/#sec-getarraybuffermaxbytelengthoption module.exports = function GetArrayBufferMaxByteLengthOption(options) { if (!isObject(options)) { return 'EMPTY'; // step 1 } var maxByteLength = Get(options, 'maxByteLength'); // step 2 if (typeof maxByteLength === 'undefined') { return 'EMPTY'; // step 3 } return ToIndex(maxByteLength); // step 4 }; ljharb-es-abstract-babee05/2024/GetGlobalObject.js000066400000000000000000000003061516525472400216550ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2024/GetIterator.js000066400000000000000000000033151516525472400211220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateAsyncFromSyncIterator = require('./CreateAsyncFromSyncIterator'); var GetIteratorFromMethod = require('./GetIteratorFromMethod'); var GetMethod = require('./GetMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; var getIteratorMethod = require('../helpers/getIteratorMethod'); // https://262.ecma-international.org/14.0/#sec-getiterator module.exports = function GetIterator(obj, kind) { if (kind !== 'SYNC' && kind !== 'ASYNC') { throw new $TypeError("Assertion failed: `kind` must be one of 'sync' or 'async', got " + inspect(kind)); } var method; if (kind === 'ASYNC') { // step 1 if (hasSymbols && $asyncIterator) { method = GetMethod(obj, $asyncIterator); // step 1.a } } if (typeof method === 'undefined') { // step 1.b // var syncMethod = GetMethod(obj, $iterator); // step 1.b.i var syncMethod = getIteratorMethod(ES, obj); if (kind === 'ASYNC') { if (typeof syncMethod === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 1.b.ii } var syncIteratorRecord = GetIteratorFromMethod(obj, syncMethod); // step 1.b.iii return CreateAsyncFromSyncIterator(syncIteratorRecord); // step 1.b.iv } method = syncMethod; // step 2, kind of } if (typeof method === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 3 } return GetIteratorFromMethod(obj, method); // step 4 }; ljharb-es-abstract-babee05/2024/GetIteratorFromMethod.js000066400000000000000000000013421516525472400231050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/15.0/#sec-getiteratorfrommethod module.exports = function GetIteratorFromMethod(obj, method) { if (!IsCallable(method)) { throw new $TypeError('method must be a function'); } var iterator = Call(method, obj); // step 1 if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); // step 2 } var nextMethod = Get(iterator, 'next'); // step 3 return { // steps 4-5 '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2024/GetMatchIndexPair.js000066400000000000000000000015051516525472400221700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function GetMatchIndexPair(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return [match['[[StartIndex]]'], match['[[EndIndex]]']]; }; ljharb-es-abstract-babee05/2024/GetMatchString.js000066400000000000000000000015641516525472400215600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchstring module.exports = function GetMatchString(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return substring(S, match['[[StartIndex]]'], match['[[EndIndex]]']); }; ljharb-es-abstract-babee05/2024/GetMethod.js000066400000000000000000000012541516525472400205510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2024/GetNamedTimeZoneEpochNanoseconds.js000066400000000000000000000045721516525472400252100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetUTCEpochNanoseconds = require('./GetUTCEpochNanoseconds'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/14.0/#sec-getnamedtimezoneepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetNamedTimeZoneEpochNanoseconds( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (typeof timeZoneIdentifier !== 'string') { throw new $TypeError('Assertion failed: `timeZoneIdentifier` must be a string'); } if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 999) { throw new $TypeError('Assertion failed: `second` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral number between 0 and 999, inclusive'); } if (timeZoneIdentifier !== 'UTC') { throw new $TypeError('Assertion failed: only UTC time zone is supported'); // step 1 } var epochNanoseconds = GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ); // step 2 return [epochNanoseconds]; // step 3 }; ljharb-es-abstract-babee05/2024/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2024/GetPromiseResolve.js000066400000000000000000000011771516525472400223130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-getpromiseresolve module.exports = function GetPromiseResolve(promiseConstructor) { if (!IsConstructor(promiseConstructor)) { throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor'); } var promiseResolve = Get(promiseConstructor, 'resolve'); if (IsCallable(promiseResolve) === false) { throw new $TypeError('`resolve` method is not callable'); } return promiseResolve; }; ljharb-es-abstract-babee05/2024/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2024/GetStringIndex.js000066400000000000000000000013701516525472400215660ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var StringToCodePoints = require('./StringToCodePoints'); var $indexOf = callBound('String.prototype.indexOf'); // https://262.ecma-international.org/13.0/#sec-getstringindex module.exports = function GetStringIndex(S, e) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(e) || e < 0) { throw new $TypeError('Assertion failed: `e` must be a non-negative integer'); } if (S === '') { return 0; } var codepoints = StringToCodePoints(S); var eUTF = e >= codepoints.length ? S.length : $indexOf(S, codepoints[e]); return eUTF; }; ljharb-es-abstract-babee05/2024/GetSubstitution.js000066400000000000000000000135321516525472400220470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var regexTester = require('safe-regex-test'); var Get = require('./Get'); var IsArray = require('./IsArray'); var min = require('./min'); var StringIndexOf = require('./StringIndexOf'); var StringToNumber = require('./StringToNumber'); var substring = require('./substring'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isPrefixOf = require('../helpers/isPrefixOf'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); var startsWithDollarDigit = regexTester(/^\$[0-9]/); var startsWithDollarTwoDigit = regexTester(/^\$[0-9][0-9]/); // http://www.ecma-international.org/ecma-262/15.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacementTemplate) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof namedCaptures !== 'undefined' && !isObject(namedCaptures)) { throw new $TypeError('Assertion failed: `namedCaptures` must be `undefined` or an Object'); } if (typeof replacementTemplate !== 'string') { throw new $TypeError('Assertion failed: `replacementTemplate` must be a String'); } var stringLength = str.length; // step 1 if (position > stringLength) { throw new $TypeError('Assertion failed: position > stringLength, got ' + inspect(position)); // step 2 } var templateRemainder = replacementTemplate; // step 3 var result = ''; // step 4 while (templateRemainder !== '') { // step 5 // 5.a NOTE: The following steps isolate ref (a prefix of templateRemainder), determine refReplacement (its replacement), and then append that replacement to result. var ref, refReplacement, capture; if (isPrefixOf('$$', templateRemainder)) { // step 5.b ref = '$$'; // step 5.b.i refReplacement = '$'; // step 5.b.ii } else if (isPrefixOf('$`', templateRemainder)) { // step 5.c ref = '$`'; // step 5.c.i refReplacement = substring(str, 0, position); // step 5.c.ii } else if (isPrefixOf('$&', templateRemainder)) { // step 5.d ref = '$&'; // step 5.d.i refReplacement = matched; // step 5.d.ii } else if (isPrefixOf('$\'', templateRemainder)) { // step 5.e ref = '$\''; // step 5.e.i var matchLength = matched.length; // step 5.e.ii var tailPos = position + matchLength; // step 5.e.iii refReplacement = substring(str, min(tailPos, stringLength)); // step 5.e.iv // 5.e.v NOTE: tailPos can exceed stringLength only if this abstract operation was invoked by a call to the intrinsic @@replace method of %RegExp.prototype% on an object whose "exec" property is not the intrinsic %RegExp.prototype.exec%. } else if (startsWithDollarDigit(templateRemainder)) { // step 5.f var digitCount = startsWithDollarTwoDigit(templateRemainder) ? 2 : 1; // step 5.f.i var digits = substring(templateRemainder, 1, 1 + digitCount); // step 5.f.ii var index = StringToNumber(digits); // step 5.f.iii if (index < 0 || index > 99) { throw new $TypeError('Assertion failed: `index` must be >= 0 and <= 99'); // step 5.f.iv } var captureLen = captures.length; // step 5.f.v if (index > captureLen && digitCount === 2) { // step 5.f.vi // 1. NOTE: When a two-digit replacement pattern specifies an index exceeding the count of capturing groups, it is treated as a one-digit replacement pattern followed by a literal digit. digitCount = 1; // step 5.f.vi.2 digits = substring(digits, 0, 1); // step 5.f.vi.3 index = StringToNumber(digits); // step 5.f.vi.4 } ref = substring(templateRemainder, 0, 1 + digitCount); // step 5.f.vii if (1 <= index && index <= captureLen) { // step 5.f.viii capture = captures[index - 1]; // step 5.f.viii.1 if (typeof capture === 'undefined') { // step 5.f.viii.2 refReplacement = ''; // step 5.f.viii.2.a } else { // step 5.f.viii.3 refReplacement = capture; // step 5.f.viii.3.a } } else { // step 5.f.ix refReplacement = ref; // step 5.f.ix.1 } } else if (isPrefixOf('$<', templateRemainder)) { // step 5.g var gtPos = StringIndexOf(templateRemainder, '>', 0); // step 5.g.i if (!(gtPos > -1) || typeof namedCaptures === 'undefined') { // step 5.g.ii ref = '$<'; // step 5.g.ii.1 refReplacement = ref; // step 5.g.ii.2 } else { // step 5.g.iii ref = substring(templateRemainder, 0, gtPos + 1); // step 5.g.iii.1 var groupName = substring(templateRemainder, 2, gtPos); // step 5.g.iii.2 if (!isObject(namedCaptures)) { throw new $TypeError('Assertion failed: Type(namedCaptures) is not Object'); // step 5.g.iii.3 } capture = Get(namedCaptures, groupName); // step 5.g.iii.4 if (typeof capture === 'undefined') { // step 5.g.iii.5 refReplacement = ''; // step 5.g.iii.5.a } else { // step 5.g.iii.6 refReplacement = ToString(capture); // step 5.g.iii.6.a } } } else { // step 5.h ref = substring(templateRemainder, 0, 1); // step 5.h.i refReplacement = ref; // step 5.h.ii } var refLength = ref.length; // step 5.i templateRemainder = substring(templateRemainder, refLength); // step 5.j result += refReplacement; // step 5.k } return result; // step 6 }; ljharb-es-abstract-babee05/2024/GetUTCEpochNanoseconds.js000066400000000000000000000047761516525472400231520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var MakeDay = require('./MakeDay'); var MakeTime = require('./MakeTime'); var MakeDate = require('./MakeDate'); var isInteger = require('math-intrinsics/isInteger'); var $BigInt = GetIntrinsic('%BigInt%', true); var $SyntaxError = GetIntrinsic('%SyntaxError%'); var $TypeError = GetIntrinsic('%TypeError%'); // https://tc39.es/ecma262/#sec-getutcepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral Number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral Number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral Number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral Number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 59) { throw new $TypeError('Assertion failed: `second` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral Number between 0 and 999, inclusive'); } var date = MakeDay(year, month - 1, day); // step 1 var time = MakeTime(hour, minute, second, millisecond); // step 2 var ms = MakeDate(date, time); // step 3 if (!isInteger(ms)) { throw new $TypeError('Assertion failed: `ms` from MakeDate is not an integral Number'); // step 4 } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt((ms * 1e6) + (microsecond * 1e3) + nanosecond); // step 5 }; ljharb-es-abstract-babee05/2024/GetV.js000066400000000000000000000007541516525472400175420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2024/GetValueFromBuffer.js000066400000000000000000000106571516525472400223720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/15.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be either `SEQ-CST` or `UNORDERED`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2024/GetViewByteLength.js000066400000000000000000000030521516525472400222270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsViewOutOfBounds = require('./IsViewOutOfBounds'); var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record'); var dataViewBuffer = require('data-view-buffer'); var dataViewByteLength = require('data-view-byte-length'); var dataViewByteOffset = require('data-view-byte-offset'); // https://262.ecma-international.org/15.0/#sec-getviewbytelength module.exports = function GetViewByteLength(viewRecord) { if (!isDataViewWithBufferWitnessRecord(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` must be a DataView with Buffer Witness Record'); } if (IsViewOutOfBounds(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` is out of bounds'); // step 1 } var view = viewRecord['[[Object]]']; // step 2 var isFixed = IsFixedLengthArrayBuffer(dataViewBuffer(view)); var viewByteLength = isFixed ? dataViewByteLength(view) : 'AUTO'; // view.[[ByteLength]] if (viewByteLength !== 'AUTO') { return viewByteLength; // step 3 } if (isFixed) { throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is not fixed length'); // step 4 } var byteOffset = dataViewByteOffset(view); // step 5 var byteLength = viewRecord['[[CachedBufferByteLength]]']; // step 6 if (byteLength === 'DETACHED') { throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is detached'); // step 7 } return byteLength - byteOffset; // step 8 }; ljharb-es-abstract-babee05/2024/GroupBy.js000066400000000000000000000044431516525472400202630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var AddValueToKeyedGroup = require('./AddValueToKeyedGroup'); var Call = require('./Call'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ThrowCompletion = require('./ThrowCompletion'); var ToPropertyKey = require('./ToPropertyKey'); // https://262.ecma-international.org/15.0/#sec-groupby module.exports = function GroupBy(items, callbackfn, keyCoercion) { if (keyCoercion !== 'PROPERTY' && keyCoercion !== 'ZERO') { throw new $TypeError('Assertion failed: `keyCoercion` must be `"PROPERTY"` or `"ZERO"`'); } RequireObjectCoercible(items); // step 1 if (!IsCallable(callbackfn)) { throw new $TypeError('callbackfn must be callable'); // step 2 } var groups = []; // step 3 var iteratorRecord = GetIterator(items, 'SYNC'); // step 4 var k = 0; // step 5 while (true) { // step 6 if (k >= MAX_SAFE_INTEGER) { // step 6.a var error = ThrowCompletion(new $TypeError('k must be less than 2 ** 53 - 1')); // step 6.a.i return void IteratorClose(iteratorRecord, error); // step 6.a.ii } var next = IteratorStep(iteratorRecord); // step 6.b if (!next) { // step 6.c return groups; // step 6.c.i } var value = IteratorValue(next); // step 6.dv var key; try { key = Call(callbackfn, void undefined, [value, k]); // step 6.e } catch (e) { return void IteratorClose(iteratorRecord, ThrowCompletion(e)); // step 6.f } if (keyCoercion === 'PROPERTY') { // step 6.g try { key = ToPropertyKey(key); // step 6.g.i } catch (e) { return void IteratorClose(iteratorRecord, ThrowCompletion(e)); // step 6.g.ii } } else { // step 6.h if (keyCoercion !== 'ZERO') { throw new $TypeError('Assertion failed: keyCoercion must be ~PROPERTY~ or ~ZERO~'); // step 6.h.i } if (isNegativeZero(key)) { key = +0; // step 6.h.ii } } AddValueToKeyedGroup(groups, key, value); // step 6.i k += 1; // step 6.j } }; ljharb-es-abstract-babee05/2024/HasEitherUnicodeFlag.js000066400000000000000000000010051516525472400226400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isRegExpRecord = require('../helpers/records/regexp-record'); // https://262.ecma-international.org/15.0/#sec-runtime-semantics-haseitherunicodeflag-abstract-operation module.exports = function HasEitherUnicodeFlag(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (rer['[[Unicode]]'] || rer['[[UnicodeSets]]']) { // step 1 return true; // step 1.a } return false; // step 2 }; ljharb-es-abstract-babee05/2024/HasOwnProperty.js000066400000000000000000000010241516525472400216300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2024/HasProperty.js000066400000000000000000000007471516525472400211570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2024/HourFromTime.js000066400000000000000000000005761516525472400212570ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2024/InLeapYear.js000066400000000000000000000007161516525472400206640ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2024/InstallErrorCause.js000066400000000000000000000012271516525472400222720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateNonEnumerableDataPropertyOrThrow = require('./CreateNonEnumerableDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); // https://262.ecma-international.org/13.0/#sec-installerrorcause module.exports = function InstallErrorCause(O, options) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (isObject(options) && HasProperty(options, 'cause')) { var cause = Get(options, 'cause'); CreateNonEnumerableDataPropertyOrThrow(O, 'cause', cause); } }; ljharb-es-abstract-babee05/2024/InstanceofOperator.js000066400000000000000000000016371516525472400225030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2024/InternalizeJSONProperty.js000066400000000000000000000042061516525472400234140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnProperties = require('./EnumerableOwnProperties'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnProperties(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2024/Invoke.js000066400000000000000000000012371516525472400201250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2024/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2024/IsArray.js000066400000000000000000000001661516525472400202440ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2024/IsArrayBufferViewOutOfBounds.js000066400000000000000000000020251516525472400243550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var IsViewOutOfBounds = require('./IsViewOutOfBounds'); var MakeDataViewWithBufferWitnessRecord = require('./MakeDataViewWithBufferWitnessRecord'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var isDataView = require('is-data-view'); var isTypedArray = require('is-typed-array'); // https://262.ecma-international.org/15.0/#sec-isarraybufferviewoutofbounds module.exports = function IsArrayBufferViewOutOfBounds(O) { var isDV = isDataView(O); if (!isTypedArray(O) && !isDV) { throw new $TypeError('Assertion failed: `O` must be a TypedArray or DataView'); } if (isDV) { // step 1 var viewRecord = MakeDataViewWithBufferWitnessRecord(O, 'SEQ-CST'); // step 1.a return IsViewOutOfBounds(viewRecord); // step 1.b } var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, 'SEQ-CST'); // step 2 return IsTypedArrayOutOfBounds(taRecord); // step 3 }; ljharb-es-abstract-babee05/2024/IsBigIntElementType.js000066400000000000000000000003021516525472400225060ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BIGUINT64' || type === 'BIGINT64'; }; ljharb-es-abstract-babee05/2024/IsCallable.js000066400000000000000000000001541516525472400206620ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2024/IsCompatiblePropertyDescriptor.js000066400000000000000000000005731516525472400250530ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, '', Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2024/IsConcatSpreadable.js000066400000000000000000000011741516525472400223600ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2024/IsConstructor.js000066400000000000000000000021701516525472400215100ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2024/IsDataDescriptor.js000066400000000000000000000010611516525472400220710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2024/IsDetachedBuffer.js000066400000000000000000000017461516525472400220260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2024/IsExtensible.js000066400000000000000000000007701516525472400212710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2024/IsFixedLengthArrayBuffer.js000066400000000000000000000016751516525472400235260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $arrayBufferResizable = callBound('%ArrayBuffer.prototype.resizable%', true); var $sharedArrayGrowable = callBound('%SharedArrayBuffer.prototype.growable%', true); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/15.0/#sec-isfixedlengtharraybuffer module.exports = function IsFixedLengthArrayBuffer(arrayBuffer) { var isAB = isArrayBuffer(arrayBuffer); var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isAB && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or SharedArrayBuffer'); } if (isAB && $arrayBufferResizable) { return !$arrayBufferResizable(arrayBuffer); // step 1 } if (isSAB && $sharedArrayGrowable) { return !$sharedArrayGrowable(arrayBuffer); // step 1 } return true; // step 2 }; ljharb-es-abstract-babee05/2024/IsGenericDescriptor.js000066400000000000000000000012201516525472400225710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2024/IsIntegralNumber.js000066400000000000000000000005411516525472400221010ustar00rootroot00000000000000'use strict'; var truncate = require('./truncate'); var $isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-isintegralnumber module.exports = function IsIntegralNumber(argument) { if (typeof argument !== 'number' || !$isFinite(argument)) { return false; } return truncate(argument) === argument; }; ljharb-es-abstract-babee05/2024/IsLessThan.js000066400000000000000000000053071516525472400207110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var min = require('math-intrinsics/min'); var $isNaN = require('math-intrinsics/isNaN'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); // https://262.ecma-international.org/14.0/#sec-islessthan // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function IsLessThan(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { // step 3 // a. Let lx be the length of px. // b. Let ly be the length of py. // c. For each integer i starting with 0 such that i < min(lx, ly), in ascending order, do // i. Let cx be the integer that is the numeric value of the code unit at index i within px. // ii. Let cy be the integer that is the numeric value of the code unit at index i within py. // iii. If cx < cy, return true. // iv. If cx > cy, return false. // d. If lx < ly, return true. Otherwise, return false. var lx = px.length; // step 3.a var ly = py.length; // step 3.b for (var i = 0; i < min(lx, ly); i++) { // step 3.c var cx = $charCodeAt(px, i); // step 3.c.i var cy = $charCodeAt(py, i); // step 3.c.ii if (cx < cy) { return true; // step 3.c.iii } if (cx > cy) { return false; // step 3.c.iv } } return lx < ly; // step 3.d } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if (typeof ny === 'undefined') { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if (typeof nx === 'undefined') { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (typeof nx === typeof ny) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both finite, and the same type }; ljharb-es-abstract-babee05/2024/IsLooselyEqual.js000066400000000000000000000034051516525472400216030ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var isObject = require('es-object-atoms/isObject'); var IsStrictlyEqual = require('./IsStrictlyEqual'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/13.0/#sec-islooselyequal module.exports = function IsLooselyEqual(x, y) { if (isSameType(x, y)) { return IsStrictlyEqual(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return IsLooselyEqual(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return IsLooselyEqual(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (typeof n === 'undefined') { return false; } return IsLooselyEqual(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return IsLooselyEqual(y, x); } if (typeof x === 'boolean') { return IsLooselyEqual(ToNumber(x), y); } if (typeof y === 'boolean') { return IsLooselyEqual(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol' || typeof x === 'bigint') && isObject(y)) { return IsLooselyEqual(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol' || typeof y === 'bigint')) { return IsLooselyEqual(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (!isFinite(x) || !isFinite(y)) { return false; } // eslint-disable-next-line eqeqeq return x == y; // shortcut for step 13.b. } return false; }; ljharb-es-abstract-babee05/2024/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231050ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/15.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'INIT' && order !== 'UNORDERED') { return true; } return false; }; ljharb-es-abstract-babee05/2024/IsPromise.js000066400000000000000000000007451516525472400206070ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2024/IsPropertyKey.js000066400000000000000000000003371516525472400214630ustar00rootroot00000000000000'use strict'; var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ispropertykey module.exports = function IsPropertyKey(argument) { return isPropertyKey(argument); }; ljharb-es-abstract-babee05/2024/IsRegExp.js000066400000000000000000000010721516525472400203550ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2024/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2024/IsStrictlyEqual.js000066400000000000000000000006101516525472400217650ustar00rootroot00000000000000'use strict'; var SameValueNonNumber = require('./SameValueNonNumber'); var Type = require('./Type'); var NumberEqual = require('./Number/equal'); // https://262.ecma-international.org/14.0/#sec-isstrictlyequal module.exports = function IsStrictlyEqual(x, y) { if (Type(x) !== Type(y)) { return false; } return typeof x === 'number' ? NumberEqual(x, y) : SameValueNonNumber(x, y); }; ljharb-es-abstract-babee05/2024/IsStringWellFormedUnicode.js000066400000000000000000000011671516525472400237260ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#sec-isstringwellformedunicode module.exports = function IsStringWellFormedUnicode(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var len = string.length; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var cp = CodePointAt(string, k); // step 3.a if (cp['[[IsUnpairedSurrogate]]']) { return false; // step 3.b } k += cp['[[CodeUnitCount]]']; // step 3.c } return true; // step 4 }; ljharb-es-abstract-babee05/2024/IsTimeZoneOffsetString.js000066400000000000000000000012531516525472400232540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var regexTester = require('safe-regex-test'); // https://tc39.es/ecma262/#sec-istimezoneoffsetstring // implementation taken from https://github.com/tc39/proposal-temporal/blob/21ee5b13f0672990c807475ba094092d19dd6dc5/polyfill/lib/ecmascript.mjs#L2140 var OFFSET = /^([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?$/; var testOffset = regexTester(OFFSET); module.exports = function IsTimeZoneOffsetString(offsetString) { if (typeof offsetString !== 'string') { throw new $TypeError('Assertion failed: `offsetString` must be a String'); } return testOffset(offsetString); }; ljharb-es-abstract-babee05/2024/IsTypedArrayOutOfBounds.js000066400000000000000000000036551516525472400234100ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/15.0/#sec-istypedarrayoutofbounds module.exports = function IsTypedArrayOutOfBounds(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } var O = taRecord['[[Object]]']; // step 1 var bufferByteLength = taRecord['[[CachedBufferByteLength]]']; // step 2 if (IsDetachedBuffer(typedArrayBuffer(O)) && bufferByteLength !== 'DETACHED') { throw new $TypeError('Assertion failed: typed array is detached only if the byte length is ~DETACHED~'); // step 3 } if (bufferByteLength === 'DETACHED') { return true; // step 4 } var byteOffsetStart = typedArrayByteOffset(O); // step 5 var isFixed = IsFixedLengthArrayBuffer(typedArrayBuffer(O)); var byteOffsetEnd; var length = isFixed ? typedArrayLength(O) : 'AUTO'; // TODO: probably use package for array length // seems to apply when TA is backed by a resizable/growable AB if (length === 'AUTO') { // step 6 byteOffsetEnd = bufferByteLength; // step 6.a } else { var elementSize = TypedArrayElementSize(O); // step 7.a byteOffsetEnd = byteOffsetStart + (length * elementSize); // step 7.b } if (byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength) { return true; // step 8 } // 9. NOTE: 0-length TypedArrays are not considered out-of-bounds. return false; // step 10 }; ljharb-es-abstract-babee05/2024/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245660ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'INT8' || type === 'UINT8' || type === 'INT16' || type === 'UINT16' || type === 'INT32' || type === 'UINT32'; }; ljharb-es-abstract-babee05/2024/IsUnsignedElementType.js000066400000000000000000000004121516525472400231100ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'UINT8' || type === 'UINT8C' || type === 'UINT16' || type === 'UINT32' || type === 'BIGUINT64'; }; ljharb-es-abstract-babee05/2024/IsValidIntegerIndex.js000066400000000000000000000025611516525472400225340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var TypedArrayLength = require('./TypedArrayLength'); var isInteger = require('math-intrinsics/isInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/15.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` is not a TypedArray object'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` is not a Number'); } var buffer = typedArrayBuffer(O); if (IsDetachedBuffer(buffer)) { return false; } // step 1 if (!isInteger(index)) { return false; } // step 2 if (isNegativeZero(index)) { return false; } // step 3 var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, 'UNORDERED'); // step 4 if (IsTypedArrayOutOfBounds(taRecord)) { return false; // step 6 } var length = TypedArrayLength(taRecord); // step 7 if (index < 0 || index >= length) { return false; } // step 8 return true; // step 9 }; ljharb-es-abstract-babee05/2024/IsViewOutOfBounds.js000066400000000000000000000033021516525472400222230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record'); var dataViewBuffer = require('data-view-buffer'); var dataViewByteLength = require('data-view-byte-length'); var dataViewByteOffset = require('data-view-byte-offset'); // https://262.ecma-international.org/15.0/#sec-isviewoutofbounds module.exports = function IsViewOutOfBounds(viewRecord) { if (!isDataViewWithBufferWitnessRecord(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` must be a DataView With Buffer Witness Record'); } var view = viewRecord['[[Object]]']; // step 1 var bufferByteLength = viewRecord['[[CachedBufferByteLength]]']; // step 2 if (IsDetachedBuffer(dataViewBuffer(view)) !== (bufferByteLength === 'DETACHED')) { // step 3 throw new $TypeError('Assertion failed: `IsDetachedBuffer(dataViewBuffer(view))` must be true if and only if `bufferByteLength === ~DETACHED~'); } if (bufferByteLength === 'DETACHED') { return true; // step 4 } var byteOffsetStart = dataViewByteOffset(view); // step 5 var isFixed = IsFixedLengthArrayBuffer(dataViewBuffer(view)); var viewByteLength = isFixed ? dataViewByteLength(view) : 'AUTO'; // view.[[ByteLength]] var byteOffsetEnd = viewByteLength === 'AUTO' ? bufferByteLength : byteOffsetStart + viewByteLength; // steps 6 - 7 if (byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength) { return true; // step 8 } // 9. NOTE: 0-length DataViews are not considered out-of-bounds. return false; // step 10 }; ljharb-es-abstract-babee05/2024/IsWordChar.js000066400000000000000000000022141516525472400206730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isRegExpRecord = require('../helpers/records/regexp-record'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/14.0/#sec-runtime-semantics-iswordchar-abstract-operation module.exports = function IsWordChar(rer, Input, e) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (!isInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } var InputLength = Input.length; // step 1 if (e === -1 || e === InputLength) { return false; // step 2 } var c = Input[e]; // step 3 return $indexOf(WordCharacters(rer), c) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2024/IteratorClose.js000066400000000000000000000045251516525472400214540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratorclose module.exports = function IteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!isObject(iteratorRecord['[[Iterator]]'])) { throw new $TypeError('Assertion failed: iteratorRecord.[[Iterator]] must be an Object'); // step 1 } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { // step 2 throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iterator = iteratorRecord['[[Iterator]]']; // step 3 var iteratorReturn; try { iteratorReturn = GetMethod(iterator, 'return'); // step 4 } catch (e) { completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. throw e; // step 7 } if (typeof iteratorReturn === 'undefined') { return completionThunk(); // step 5.a - 5.b } var innerResult; try { innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; // step 7 } var completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2024/IteratorComplete.js000066400000000000000000000007131516525472400221520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2024/IteratorNext.js000066400000000000000000000015731516525472400213250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratornext module.exports = function IteratorNext(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result; if (arguments.length < 2) { // step 1 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]']); // step 1.a } else { // step 2 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]'], [arguments[1]]); // step 2.a } if (!isObject(result)) { throw new $TypeError('iterator next must return an object'); // step 3 } return result; // step 4 }; ljharb-es-abstract-babee05/2024/IteratorStep.js000066400000000000000000000012171516525472400213150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratorstep module.exports = function IteratorStep(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result = IteratorNext(iteratorRecord); // step 1 var done = IteratorComplete(result); // step 2 return done === true ? false : result; // steps 3-4 }; ljharb-es-abstract-babee05/2024/IteratorStepValue.js000066400000000000000000000022461516525472400223150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratorstepvalue module.exports = function IteratorStepValue(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); } /* eslint no-param-reassign: 0 */ var result; try { result = IteratorNext(iteratorRecord); // step 1 } catch (e) { // step 2 iteratorRecord['[[Done]]'] = true; // step 2.a throw e; // step 2.b } var done; try { done = IteratorComplete(result); // step 4 } catch (e) { // step 5 iteratorRecord['[[Done]]'] = true; // step 5.a throw e; // step 5.b } if (done) { // step 7 iteratorRecord['[[Done]]'] = true; // step 7.a return 'DONE'; // step 7.b } var value; try { value = Get(result, 'value'); // step 8 } catch (e) { // step 9 iteratorRecord['[[Done]]'] = true; // step 9.a throw e; // step 10 } return value; // step 10 }; ljharb-es-abstract-babee05/2024/IteratorToList.js000066400000000000000000000014201516525472400216140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratortolist module.exports = function IteratorToList(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var values = []; // step 1 var next = true; // step 2 while (next) { // step 3 next = IteratorStep(iteratorRecord); // step 3.a if (next) { var nextValue = IteratorValue(next); // step 3.b.i values[values.length] = nextValue; // step 3.b.ii } } return values; // step 4 }; ljharb-es-abstract-babee05/2024/IteratorValue.js000066400000000000000000000006241516525472400214570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2024/KeyForSymbol.js000066400000000000000000000006011516525472400212510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $keyFor = callBound('Symbol.keyFor', true); // https://262.ecma-international.org/14.0/#sec-keyforsymbol module.exports = function KeyForSymbol(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $keyFor(sym); }; ljharb-es-abstract-babee05/2024/LengthOfArrayLike.js000066400000000000000000000007151516525472400222040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2024/MakeDataViewWithBufferWitnessRecord.js000066400000000000000000000016501516525472400256750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayBufferByteLength = require('./ArrayBufferByteLength'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var dataViewBuffer = require('data-view-buffer'); var isDataView = require('is-data-view'); // https://262.ecma-international.org/15.0/#sec-makedataviewwithbufferwitnessrecord module.exports = function MakeDataViewWithBufferWitnessRecord(obj, order) { if (!isDataView(obj)) { throw new $TypeError('MakeDataViewWithBufferWitnessRecord called with non-DataView'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } var buffer = dataViewBuffer(obj); // step 1 var byteLength = IsDetachedBuffer(buffer) ? 'DETACHED' : ArrayBufferByteLength(buffer, order); // steps 2 - 3 return { '[[Object]]': obj, '[[CachedBufferByteLength]]': byteLength }; // step 4 }; ljharb-es-abstract-babee05/2024/MakeDate.js000066400000000000000000000005161516525472400203440ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2024/MakeDay.js000066400000000000000000000017641516525472400202120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToIntegerOrInfinity(year); var m = ToIntegerOrInfinity(month); var dt = ToIntegerOrInfinity(date); var ym = y + floor(m / 12); if (!$isFinite(ym)) { return NaN; } var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2024/MakeFullYear.js000066400000000000000000000011301516525472400212030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/15.0/#sec-makefullyear module.exports = function MakeFullYear(year) { if (typeof year !== 'number') { throw new $TypeError('Assertion failed: `year` must be a Number'); } if (isNaN(year)) { return NaN; // step 1 } var truncated = ToIntegerOrInfinity(year); // step 2 if (0 <= truncated && truncated <= 99) { return 1900 + truncated; // step 3 } return truncated; // step 4 }; ljharb-es-abstract-babee05/2024/MakeMatchIndicesIndexPairArray.js000066400000000000000000000052261516525472400246300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayCreate = require('./ArrayCreate'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var GetMatchIndexPair = require('./GetMatchIndexPair'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isMatchRecord = require('../helpers/records/match-record'); var isStringOrUndefined = function isStringOrUndefined(s) { return typeof s === 'undefined' || typeof s === 'string'; }; var isMatchRecordOrUndefined = function isMatchRecordOrUndefined(m) { return typeof m === 'undefined' || isMatchRecord(m); }; var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function MakeMatchIndicesIndexPairArray(S, indices, groupNames, hasGroups) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!IsArray(indices) || !every(indices, isMatchRecordOrUndefined)) { throw new $TypeError('Assertion failed: `indices` must be a List of either Match Records or `undefined`'); } if (!IsArray(groupNames) || !every(groupNames, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `groupNames` must be a List of either Strings or `undefined`'); } if (typeof hasGroups !== 'boolean') { throw new $TypeError('Assertion failed: `hasGroups` must be a Boolean'); } var n = indices.length; // step 1 if (!(n < MAX_ARRAY_LENGTH)) { throw new $TypeError('Assertion failed: `indices` length must be less than the max array size, 2**32 - 1'); } if (groupNames.length !== n - 1) { throw new $TypeError('Assertion failed: `groupNames` must have exactly one fewer item than `indices`'); } var A = ArrayCreate(n); // step 5 var groups = hasGroups ? OrdinaryObjectCreate(null) : void undefined; // step 6-7 CreateDataPropertyOrThrow(A, 'groups', groups); // step 8 for (var i = 0; i < n; i += 1) { // step 9 var matchIndices = indices[i]; // step 9.a // eslint-disable-next-line no-negated-condition var matchIndexPair = typeof matchIndices !== 'undefined' ? GetMatchIndexPair(S, matchIndices) : void undefined; // step 9.b-9.c CreateDataPropertyOrThrow(A, ToString(i), matchIndexPair); // step 9.d if (i > 0 && typeof groupNames[i - 1] !== 'undefined') { // step 9.e if (!groups) { throw new $TypeError('if `hasGroups` is `false`, `groupNames` can only contain `undefined` values'); } CreateDataPropertyOrThrow(groups, groupNames[i - 1], matchIndexPair); // step 9.e.i } } return A; // step 10 }; ljharb-es-abstract-babee05/2024/MakeTime.js000066400000000000000000000013731516525472400203670ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-maketime module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToIntegerOrInfinity(hour); var m = ToIntegerOrInfinity(min); var s = ToIntegerOrInfinity(sec); var milli = ToIntegerOrInfinity(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2024/MakeTypedArrayWithBufferWitnessRecord.js000066400000000000000000000016511516525472400262560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayBufferByteLength = require('./ArrayBufferByteLength'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/15.0/#sec-maketypedarraywithbufferwitnessrecord module.exports = function MakeTypedArrayWithBufferWitnessRecord(obj, order) { if (!isTypedArray(obj)) { throw new $TypeError('Assertion failed: `obj` must be a Typed Array'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } var buffer = typedArrayBuffer(obj); // step 1 var byteLength = IsDetachedBuffer(buffer) ? 'DETACHED' : ArrayBufferByteLength(buffer, order); // steps 2 - 3 return { '[[Object]]': obj, '[[CachedBufferByteLength]]': byteLength }; // step 4 }; ljharb-es-abstract-babee05/2024/MinFromTime.js000066400000000000000000000006141516525472400210560ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2024/MonthFromTime.js000066400000000000000000000021511516525472400214160ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2024/NewPromiseCapability.js000066400000000000000000000023141516525472400227610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2024/NormalCompletion.js000066400000000000000000000003551516525472400221540ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2024/Number/000077500000000000000000000000001516525472400175615ustar00rootroot00000000000000ljharb-es-abstract-babee05/2024/Number/add.js000066400000000000000000000014401516525472400206460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if (!isFinite(x)) { return x; } if (!isFinite(y)) { return y; } if (x === y && x === 0) { // both zeroes return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2024/Number/bitwiseAND.js000066400000000000000000000006521516525472400221130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2024/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2024/Number/bitwiseOR.js000066400000000000000000000006501516525472400220270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2024/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2024/Number/divide.js000066400000000000000000000010641516525472400213640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2024/Number/equal.js000066400000000000000000000007371516525472400212350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2024/Number/exponentiate.js000066400000000000000000000033141516525472400226230ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2024/Number/index.js000066400000000000000000000023721516525472400212320ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2024/Number/leftShift.js000066400000000000000000000010621516525472400220460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum << shiftCount; }; ljharb-es-abstract-babee05/2024/Number/lessThan.js000066400000000000000000000010641516525472400217010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2024/Number/multiply.js000066400000000000000000000014661516525472400220050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2024/Number/remainder.js000066400000000000000000000023031516525472400220630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var isFinite = require('math-intrinsics/isFinite'); var truncate = require('../truncate'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || n === 0) { return n; } if (!isFinite(n) || !isFinite(d) || n === 0 || d === 0) { throw new $TypeError('Assertion failed: `n` and `d` arguments must be finite and nonzero'); } var quotient = n / d; var q = truncate(quotient); var r = n - (d * q); if (r === 0 && n < 0) { return -0; } return r; }; ljharb-es-abstract-babee05/2024/Number/sameValue.js000066400000000000000000000010711516525472400220400ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2024/Number/sameValueZero.js000066400000000000000000000007611516525472400227050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2024/Number/signedRightShift.js000066400000000000000000000011001516525472400233540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2024/Number/subtract.js000066400000000000000000000007121516525472400217460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberAdd = require('./add'); var NumberUnaryMinus = require('./unaryMinus'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberAdd(x, NumberUnaryMinus(y)); }; ljharb-es-abstract-babee05/2024/Number/toString.js000066400000000000000000000012051516525472400217260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $numberToString = callBound('Number.prototype.toString'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x, radix) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } return $numberToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2024/Number/unaryMinus.js000066400000000000000000000006071516525472400222740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2024/Number/unsignedRightShift.js000066400000000000000000000011051516525472400237240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2024/NumberBitwiseOp.js000066400000000000000000000012511516525472400217440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2024/NumberToBigInt.js000066400000000000000000000014311516525472400215160ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2024/NumericToRawBytes.js000066400000000000000000000037501516525472400222620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/15.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $INT8: ToInt8, $UINT8: ToUint8, $UINT8C: ToUint8Clamp, $INT16: ToInt16, $UINT16: ToUint16, $INT32: ToInt32, $UINT32: ToUint32, $BIGINT64: ToBigInt64, $BIGUINT64: ToBigUint64 }; // https://262.ecma-international.org/15.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'FLOAT32') { // step 1 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'FLOAT64') { // step 2 return valueToFloat64Bytes(value, isLittleEndian); } // step 3 var n = tableTAO.size['$' + type]; // step 3.a var convOp = TypeToAO['$' + type]; // step 3.b var intValue = convOp(value); // step 3.c return integerToNBytes(intValue, n, isLittleEndian); // step 3.d, 3.e, 4 }; ljharb-es-abstract-babee05/2024/ObjectDefineProperties.js000066400000000000000000000023731516525472400232720ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/15.0/#sec-objectdefineproperties module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = { '[[Key]]': nextKey, '[[Descriptor]]': desc }; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 DefinePropertyOrThrow(O, pair['[[Key]]'], pair['[[Descriptor]]']); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2024/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400246770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2024/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240170ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2024/OrdinaryGetOwnProperty.js000066400000000000000000000022531516525472400233510ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var hasOwn = require('hasown'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2024/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2024/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2024/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2024/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2024/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2024/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2024/ParseHexOctet.js000066400000000000000000000024601516525472400214070ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isInteger = require('math-intrinsics/isInteger'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-parsehexoctet module.exports = function ParseHexOctet(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer'); } var len = string.length; // step 1 if ((position + 2) > len) { // step 2 var error = new $SyntaxError('requested a position on a string that does not contain 2 characters at that position'); // step 2.a return [error]; // step 2.b } var hexDigits = substring(string, position, position + 2); // step 3 var n = +('0x' + hexDigits); if (isNaN(n)) { return [new $SyntaxError('Invalid hexadecimal characters')]; } return n; /* 4. Let _parseResult_ be ParseText(StringToCodePoints(_hexDigits_), |HexDigits[~Sep]|). 5. If _parseResult_ is not a Parse Node, return _parseResult_. 6. Let _n_ be the unsigned 8-bit value corresponding with the MV of _parseResult_. 7. Return _n_. */ }; ljharb-es-abstract-babee05/2024/PromiseResolve.js000066400000000000000000000007721516525472400216530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2024/QuoteJSONString.js000066400000000000000000000026161516525472400216520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var hasOwn = require('hasown'); // https://262.ecma-international.org/12.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(StringToCodePoints(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16EncodeCodePoint(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2024/RawBytesToNumeric.js000066400000000000000000000044441516525472400222630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/15.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (!hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'FLOAT32') { // step 3 return bytesAsFloat32(rawBytes); } if (type === 'FLOAT64') { // step 4 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2024/RegExpCreate.js000066400000000000000000000012031516525472400212010ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2024/RegExpExec.js000066400000000000000000000014761516525472400206760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2024/RegExpHasFlag.js000066400000000000000000000021211516525472400213030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $RegExpPrototype = GetIntrinsic('%RegExp.prototype%'); var SameValue = require('./SameValue'); var $indexOf = callBound('String.prototype.indexOf'); var hasRegExpMatcher = require('is-regex'); var getFlags = require('regexp.prototype.flags'); // https://262.ecma-international.org/13.0/#sec-regexphasflag module.exports = function RegExpHasFlag(R, codeUnit) { if (typeof codeUnit !== 'string' || codeUnit.length !== 1) { throw new $TypeError('Assertion failed: `string` must be a code unit - a String of length 1'); } if (!isObject(R)) { throw new $TypeError('Assertion failed: Type(R) is not Object'); } if (!hasRegExpMatcher(R)) { // step 2 if (SameValue(R, $RegExpPrototype)) { return void undefined; // step 2.a } throw new $TypeError('`R` must be a RegExp object'); // step 2.b } var flags = getFlags(R); // step 3 return $indexOf(flags, codeUnit) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2024/RequireObjectCoercible.js000066400000000000000000000001231516525472400232360ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2024/SameValue.js000066400000000000000000000004701516525472400205520ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2024/SameValueNonNumber.js000066400000000000000000000010261516525472400223740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var Type = require('./Type'); // https://262.ecma-international.org/14.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number') { throw new $TypeError('Assertion failed: SameValueNonNumber does not accept Number values'); } if (Type(x) !== Type(y)) { throw new $TypeError('SameValueNonNumber requires two non-Number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2024/SameValueZero.js000066400000000000000000000003371516525472400214140ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2024/SecFromTime.js000066400000000000000000000006221516525472400210440ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2024/Set.js000066400000000000000000000023121516525472400174200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2024/SetFunctionLength.js000066400000000000000000000017721516525472400223010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/12.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length !== Infinity && (!isInteger(length) || length < 0)) { throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2024/SetFunctionName.js000066400000000000000000000024101516525472400217260ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2024/SetIntegrityLevel.js000066400000000000000000000034541516525472400223170ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2024/SetTypedArrayFromArrayLike.js000066400000000000000000000042241516525472400240610ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isTypedArray = require('is-typed-array'); var whichTypedArray = require('which-typed-array'); var Get = require('./Get'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var TypedArrayLength = require('./TypedArrayLength'); var TypedArraySetElement = require('./TypedArraySetElement'); // https://262.ecma-international.org/15.0/#sec-settypedarrayfromarraylike module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: `target` must be a Typed Array'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: `targetOffset` must be a non-negative integer or +Infinity'); } if (isTypedArray(source)) { throw new $TypeError('Assertion failed: `source` must not be a Typed Array'); } var targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, 'SEQ-CST'); // step 1 if (IsTypedArrayOutOfBounds(targetRecord)) { throw new $TypeError('target is out of bounds'); // step 2 } var targetLength = TypedArrayLength(targetRecord); // step 3 var src = ToObject(source); // step 4 var srcLength = LengthOfArrayLike(src); // step 5 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a finite integer'); // step 6 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 7 } var k = 0; // step 8 while (k < srcLength) { // step 9 var Pk = ToString(k); // step 9.a var value = Get(src, Pk); // step 9.b var targetIndex = targetOffset + k; // step 9.c TypedArraySetElement(target, targetIndex, value); // step 9.d k += 1; // step 9.e } }; ljharb-es-abstract-babee05/2024/SetTypedArrayFromTypedArray.js000066400000000000000000000122401516525472400242570ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var CloneArrayBuffer = require('./CloneArrayBuffer'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var SameValue = require('./SameValue'); var SetValueInBuffer = require('./SetValueInBuffer'); var TypedArrayByteLength = require('./TypedArrayByteLength'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var TypedArrayLength = require('./TypedArrayLength'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var GetIntrinsic = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); // https://262.ecma-international.org/15.0/#sec-settypedarrayfromtypedarray module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: `target` must be a Typed Array'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: `targetOffset` must be a non-negative integer or +Infinity'); } var whichSource = whichTypedArray(source); if (!whichSource) { throw new $TypeError('Assertion failed: `source` must be a Typed Array'); } var targetBuffer = typedArrayBuffer(target); // step 1 var targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, 'SEQ-CST'); // step 2 if (IsTypedArrayOutOfBounds(targetRecord)) { throw new $TypeError('target is out of bounds'); // step 3 } var targetLength = TypedArrayLength(targetRecord); // step 4 var srcBuffer = typedArrayBuffer(source); // step 5 var srcRecord = MakeTypedArrayWithBufferWitnessRecord(source, 'SEQ-CST'); // step 6 if (IsTypedArrayOutOfBounds(srcRecord)) { throw new $TypeError('target is out of bounds'); // step 7 } var srcLength = TypedArrayLength(srcRecord); // step 8 var targetType = TypedArrayElementType(target); // step 9 var targetElementSize = TypedArrayElementSize(target); // step 10 var targetByteOffset = typedArrayByteOffset(target); // step 11 var srcType = TypedArrayElementType(source); // step 12 var srcElementSize = TypedArrayElementSize(source); // step 13 var srcByteOffset = typedArrayByteOffset(source); // step 14 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 15 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 16 } var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; if (targetContentType !== sourceContentType) { throw new $TypeError('source and target must have the same content type'); // step 17 } var sameSharedArrayBuffer = false; if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 18 // a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false. throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } var srcByteIndex; if (SameValue(srcBuffer, targetBuffer) || sameSharedArrayBuffer) { // step 19 var srcByteLength = TypedArrayByteLength(srcRecord); // step 19.a srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 19.b srcByteIndex = 0; // step 19.c } else { // step 20 srcByteIndex = srcByteOffset; // step 20.a } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 21 var limit = targetByteIndex + (targetElementSize * srcLength); // step 22 var value; if (srcType === targetType) { // step 23 // a. NOTE: The transfer must be performed in a manner that preserves the bit-level encoding of the source data. while (targetByteIndex < limit) { // step 23.b value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'UINT8', true, 'UNORDERED'); // step 23.b.i SetValueInBuffer(targetBuffer, targetByteIndex, 'UINT8', value, true, 'UNORDERED'); // step 23.b.ii srcByteIndex += 1; // step 23.b.iii targetByteIndex += 1; // step 23.b.iv } } else { // step 24 while (targetByteIndex < limit) { // step 24.a value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'UNORDERED'); // step 24.a.i SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'UNORDERED'); // step 24.a.ii srcByteIndex += srcElementSize; // step 24.a.iii targetByteIndex += targetElementSize; // step 24.a.iv } } }; ljharb-es-abstract-babee05/2024/SetValueInBuffer.js000066400000000000000000000100761516525472400220440ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/15.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex) || byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED' && order !== 'INIT') { throw new $TypeError('Assertion failed: `order` must be `"SEQ-CST"`, `"UNORDERED"`, or `"INIT"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is ~BIGINT64~ or ~BIGUINT64~, otherwise a Number'); } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 // 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7 if (isSAB) { // step 8 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 10. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2024/SortIndexedProperties.js000066400000000000000000000027551516525472400232050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var ToString = require('./ToString'); var isAbstractClosure = require('../helpers/isAbstractClosure'); var $sort = callBound('Array.prototype.sort'); // https://262.ecma-international.org/14.0/#sec-sortindexedproperties module.exports = function SortIndexedProperties(obj, len, SortCompare, holes) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(obj) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: `len` must be an integer >= 0'); } if (!isAbstractClosure(SortCompare) || SortCompare.length !== 2) { throw new $TypeError('Assertion failed: `SortCompare` must be an abstract closure taking 2 arguments'); } if (holes !== 'skip-holes' && holes !== 'read-through-holes') { throw new $TypeError('Assertion failed: `holes` must be either ~skip-holes~ or ~read-through-holes~'); } var items = []; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var Pk = ToString(k); var kRead = holes === 'skip-holes' ? HasProperty(obj, Pk) : true; // step 3.b - 3.c if (kRead) { // step 3.d var kValue = Get(obj, Pk); items[items.length] = kValue; } k += 1; // step 3.e } $sort(items, SortCompare); // step 4 return items; // step 5 }; ljharb-es-abstract-babee05/2024/SpeciesConstructor.js000066400000000000000000000015131516525472400225300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2024/StringCreate.js000066400000000000000000000020631516525472400212620ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2024/StringGetOwnProperty.js000066400000000000000000000025351516525472400230330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var isPropertyKey = require('../helpers/isPropertyKey'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2024/StringIndexOf.js000066400000000000000000000020001516525472400214020ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-stringindexof module.exports = function StringIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a String'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; if (searchValue === '' && fromIndex <= len) { return fromIndex; } var searchLen = searchValue.length; for (var i = fromIndex; i <= (len - searchLen); i += 1) { var candidate = $slice(string, i, i + searchLen); if (candidate === searchValue) { return i; } } return -1; }; ljharb-es-abstract-babee05/2024/StringPad.js000066400000000000000000000030401516525472400205570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/15.0/#sec-stringpad module.exports = function StringPad(S, maxLength, fillString, placement) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(maxLength) || maxLength < 0) { throw new $TypeError('Assertion failed: `maxLength` must be a non-negative integer'); } if (typeof fillString !== 'string') { throw new $TypeError('Assertion failed: `fillString` must be a String'); } if (placement !== 'start' && placement !== 'end' && placement !== 'START' && placement !== 'END') { throw new $TypeError('Assertion failed: `placement` must be ~START~ or ~END~'); } var stringLength = S.length; // step 1 if (maxLength <= stringLength) { return S; } // step 2 if (fillString === '') { return S; } // step 3 var fillLen = maxLength - stringLength; // step 4 // 5. Let _truncatedStringFiller_ be the String value consisting of repeated concatenations of _fillString_ truncated to length _fillLen_. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += fillString; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start' || placement === 'START') { return truncatedStringFiller + S; } // step 6 return S + truncatedStringFiller; // step 7 }; ljharb-es-abstract-babee05/2024/StringPaddingBuiltinsImpl.js000066400000000000000000000015541516525472400237650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var StringPad = require('./StringPad'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); // https://262.ecma-international.org/15.0/#sec-stringpaddingbuiltinsimpl module.exports = function StringPaddingBuiltinsImpl(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end' && placement !== 'START' && placement !== 'END') { throw new $TypeError('Assertion failed: `placement` must be ~START~ or ~END~'); } var S = ToString(O); // step 1 var intMaxLength = ToLength(maxLength); // step 2 var stringLength = S.length; // step 3 if (intMaxLength <= stringLength) { return S; } // step 4 var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); // steps 5-6 return StringPad(S, intMaxLength, filler, placement); // step 7 }; ljharb-es-abstract-babee05/2024/StringToBigInt.js000066400000000000000000000011141516525472400215320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/14.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return void undefined; } }; ljharb-es-abstract-babee05/2024/StringToCodePoints.js000066400000000000000000000011221516525472400224240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/12.0/#sec-stringtocodepoints module.exports = function StringToCodePoints(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2024/StringToNumber.js000066400000000000000000000023561516525472400216170ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); var $TypeError = require('es-errors/type'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); // https://262.ecma-international.org/13.0/#sec-stringtonumber module.exports = function StringToNumber(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` is not a String'); } if (isBinary(argument)) { return +$parseInteger($strSlice(argument, 2), 2); } if (isOctal(argument)) { return +$parseInteger($strSlice(argument, 2), 8); } if (hasNonWS(argument) || isInvalidHexLiteral(argument)) { return NaN; } var trimmed = $trim(argument); if (trimmed !== argument) { return StringToNumber(trimmed); } return +argument; }; ljharb-es-abstract-babee05/2024/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2024/SystemTimeZoneIdentifier.js000066400000000000000000000010221516525472400236240ustar00rootroot00000000000000'use strict'; var callBind = require('call-bind'); var I402 = typeof Intl === 'undefined' ? null : Intl; var DateTimeFormat = !!I402 && I402.DateTimeFormat; var resolvedOptions = !!DateTimeFormat && callBind(DateTimeFormat.prototype.resolvedOptions); // https://262.ecma-international.org/15.0/#sec-systemtimezoneidentifier module.exports = function SystemTimeZoneIdentifier() { if (DateTimeFormat && resolvedOptions) { return resolvedOptions(new DateTimeFormat()).timeZone; // steps 2 - 3 } return 'UTC'; // step 1 }; ljharb-es-abstract-babee05/2024/TestIntegrityLevel.js000066400000000000000000000022671516525472400225040ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2024/ThisBigIntValue.js000066400000000000000000000007071516525472400216740ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/15.0/#sec-thisbigintvalue module.exports = function ThisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2024/ThisBooleanValue.js000066400000000000000000000005041516525472400220720ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-properties-of-the-boolean-prototype-object module.exports = function ThisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2024/ThisNumberValue.js000066400000000000000000000005001516525472400217370ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-thisnumbervalue module.exports = function ThisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2024/ThisStringValue.js000066400000000000000000000004761516525472400217710ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-properties-of-the-string-prototype-object module.exports = function ThisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2024/ThisSymbolValue.js000066400000000000000000000010171516525472400217600ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/15.0/#sec-thissymbolvalue module.exports = function ThisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2024/ThrowCompletion.js000066400000000000000000000003601516525472400220230ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2024/TimeClip.js000066400000000000000000000006671516525472400204060ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2024/TimeFromYear.js000066400000000000000000000004051516525472400212310ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2024/TimeString.js000066400000000000000000000014671516525472400207640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); var ToZeroPaddedDecimalString = require('./ToZeroPaddedDecimalString'); // https://262.ecma-international.org/13.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = ToZeroPaddedDecimalString(HourFromTime(tv), 2); // step 1 var minute = ToZeroPaddedDecimalString(MinFromTime(tv), 2); // step 2 var second = ToZeroPaddedDecimalString(SecFromTime(tv), 2); // step 3 return hour + ':' + minute + ':' + second + ' GMT'; // step 4 }; ljharb-es-abstract-babee05/2024/TimeWithinDay.js000066400000000000000000000003671516525472400214140ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2024/TimeZoneString.js000066400000000000000000000036511516525472400216150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/14.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (!isInteger(tv)) { throw new $TypeError('Assertion failed: `tv` must be an integral Number'); } // 1. Let localTimeZone be DefaultTimeZone(). // 2. If IsTimeZoneOffsetString(localTimeZone) is true, then // a. Let offsetNs be ParseTimeZoneOffsetString(localTimeZone). // 3. Else, // a. Let offsetNs be GetNamedTimeZoneOffsetNanoseconds(localTimeZone, ℤ(ℝ(tv) × 106)). // 4. Let offset be 𝔽(truncate(offsetNs / 106)). // 5. If offset is +0𝔽 or offset > +0𝔽, then // a. Let offsetSign be "+". // b. Let absOffset be offset. // 6. Else, // a. Let offsetSign be "-". // b. Let absOffset be -offset. // 7. Let offsetMin be ToZeroPaddedDecimalString(ℝ(MinFromTime(absOffset)), 2). // 8. Let offsetHour be ToZeroPaddedDecimalString(ℝ(HourFromTime(absOffset)), 2). // 9. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 10. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until DefaultTimeZone, IsTimeZoneOffsetString, ParseTimeZoneOffsetString, GetNamedTimeZoneOffsetNanoseconds, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2024/ToBigInt.js000066400000000000000000000023711516525472400203510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/13.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (typeof n === 'undefined') { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2024/ToBigInt64.js000066400000000000000000000016701516525472400205240ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2024/ToBigUint64.js000066400000000000000000000013041516525472400207030ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2024/ToBoolean.js000066400000000000000000000002021516525472400205430ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2024/ToDateString.js000066400000000000000000000010071516525472400212340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2024/ToIndex.js000066400000000000000000000010261516525472400202400ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/15.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integer = ToIntegerOrInfinity(value); if (integer < 0 || integer >= MAX_SAFE_INTEGER) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return integer; }; ljharb-es-abstract-babee05/2024/ToInt16.js000066400000000000000000000010351516525472400200720ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint16 var two16 = 0x10000; // Math.pow(2, 16); module.exports = function ToInt16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit >= 0x8000 ? int16bit - two16 : int16bit; }; ljharb-es-abstract-babee05/2024/ToInt32.js000066400000000000000000000012651516525472400200750ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint32 var two31 = 0x80000000; // Math.pow(2, 31); var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToInt32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); var result = int32bit >= two31 ? int32bit - two32 : int32bit; return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2024/ToInt8.js000066400000000000000000000007531516525472400200210ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint8 module.exports = function ToInt8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2024/ToIntegerOrInfinity.js000066400000000000000000000007301516525472400226020ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-tointegerorinfinity module.exports = function ToIntegerOrInfinity(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0) { return 0; } if (!$isFinite(number)) { return number; } return truncate(number); }; ljharb-es-abstract-babee05/2024/ToLength.js000066400000000000000000000006631516525472400204200ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToIntegerOrInfinity(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2024/ToNumber.js000066400000000000000000000014321516525472400204220ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var StringToNumber = require('./StringToNumber'); // https://262.ecma-international.org/13.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { return StringToNumber(value); } return +value; }; ljharb-es-abstract-babee05/2024/ToNumeric.js000066400000000000000000000010131516525472400205670ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2024/ToObject.js000066400000000000000000000001761516525472400204040ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2024/ToPrimitive.js000066400000000000000000000004321516525472400211410ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2024/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230660ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2024/ToPropertyKey.js000066400000000000000000000006201516525472400214650ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2024/ToString.js000066400000000000000000000006051516525472400204410ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2024/ToUint16.js000066400000000000000000000011131516525472400202540ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint16 var two16 = 0x10000; // Math.pow(2, 16) module.exports = function ToUint16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit === 0 ? 0 : int16bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2024/ToUint32.js000066400000000000000000000011201516525472400202500ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint32 var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToUint32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); return int32bit === 0 ? 0 : int32bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2024/ToUint8.js000066400000000000000000000007111516525472400202000ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); // https://262.ecma-international.org/14.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit; }; ljharb-es-abstract-babee05/2024/ToUint8Clamp.js000066400000000000000000000011401516525472400211520ustar00rootroot00000000000000'use strict'; var clamp = require('./clamp'); var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/15.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); // step 1 if ($isNaN(number)) { return 0; } // step 2 var clamped = clamp(number, 0, 255); // step 4 var f = floor(clamped); // step 5 if (clamped < (f + 0.5)) { return f; } // step 6 if (clamped > (f + 0.5)) { return f + 1; } // step 7 return f % 2 === 0 ? f : f + 1; // step 8 }; ljharb-es-abstract-babee05/2024/ToZeroPaddedDecimalString.js000066400000000000000000000010741516525472400236630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $RangeError = require('es-errors/range'); var isInteger = require('math-intrinsics/isInteger'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring module.exports = function ToZeroPaddedDecimalString(n, minLength) { if (!isInteger(n) || n < 0) { throw new $RangeError('Assertion failed: `q` must be a non-negative integer'); } var S = $String(n); return StringPad(S, minLength, '0', 'start'); }; ljharb-es-abstract-babee05/2024/TrimString.js000066400000000000000000000013641516525472400207750ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2024/Type.js000066400000000000000000000004511516525472400176100ustar00rootroot00000000000000'use strict'; var ES5Type = require('../5/Type'); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values module.exports = function Type(x) { if (typeof x === 'symbol') { return 'Symbol'; } if (typeof x === 'bigint') { return 'BigInt'; } return ES5Type(x); }; ljharb-es-abstract-babee05/2024/TypedArrayByteLength.js000066400000000000000000000024741516525472400227500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayLength = require('./TypedArrayLength'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayByffer = require('typed-array-buffer'); var typedArrayByteLength = require('typed-array-byte-length'); // https://262.ecma-international.org/15.0/#sec-typedarraybytelength module.exports = function TypedArrayByteLength(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } if (IsTypedArrayOutOfBounds(taRecord)) { return 0; // step 1 } var length = TypedArrayLength(taRecord); // step 2 if (length === 0) { return 0; // step 3 } var O = taRecord['[[Object]]']; // step 4 var isFixed = IsFixedLengthArrayBuffer(typedArrayByffer(O)); var byteLength = isFixed ? typedArrayByteLength(O) : 'AUTO'; if (byteLength !== 'AUTO') { return byteLength; // step 5 } var elementSize = TypedArrayElementSize(O); // step 6 return length * elementSize; // step 7 }; ljharb-es-abstract-babee05/2024/TypedArrayCreateFromConstructor.js000066400000000000000000000036261516525472400252000ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayLength = require('./TypedArrayLength'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); // https://262.ecma-international.org/15.0/#typedarraycreatefromconstructor module.exports = function TypedArrayCreateFromConstructor(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } var taRecord = ValidateTypedArray(newTypedArray, 'SEQ-CST'); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('new Typed Array is out of bounds'); // step 3.a } var length = TypedArrayLength(taRecord); // step 3.b if (length < argumentList[0]) { throw new $TypeError('`argumentList[0]` must be <= `newTypedArray.length`'); // step 3.c } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2024/TypedArrayCreateSameType.js000066400000000000000000000023761516525472400235570ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var TypedArrayCreateFromConstructor = require('./TypedArrayCreateFromConstructor'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/15.0/#sec-typedarray-create-same-type module.exports = function TypedArrayCreateSameType(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var constructor = getConstructor(kind); // step 2 if (typeof constructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } return TypedArrayCreateFromConstructor(constructor, argumentList); // steps 3 - 6 }; ljharb-es-abstract-babee05/2024/TypedArrayElementSize.js000066400000000000000000000013161516525472400231210ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementsize var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementSize(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var size = tableTAO.size['$' + tableTAO.name['$' + type]]; if (!isInteger(size) || size < 0) { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return size; }; ljharb-es-abstract-babee05/2024/TypedArrayElementType.js000066400000000000000000000012061516525472400231260ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementtype var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementType(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var result = tableTAO.name['$' + type]; if (typeof result !== 'string') { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return result; }; ljharb-es-abstract-babee05/2024/TypedArrayGetElement.js000066400000000000000000000023241516525472400227260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/15.0/#sec-typedarraygetelement module.exports = function TypedArrayGetElement(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a TypedArray instance'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 1 } var offset = typedArrayByteOffset(O); // step 2 var elementSize = TypedArrayElementSize(O); // step 3 var byteIndexInBuffer = (index * elementSize) + offset; // step 4 var elementType = TypedArrayElementType(O); // step 5 return GetValueFromBuffer(typedArrayBuffer(O), byteIndexInBuffer, elementType, true, 'UNORDERED'); // step 6 }; ljharb-es-abstract-babee05/2024/TypedArrayLength.js000066400000000000000000000032351516525472400221200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var floor = require('./floor'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://www.ecma-international.org/ecma-262/15.0/#sec-typedarraylength module.exports = function TypedArrayLength(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` is out of bounds'); // step 1 } var O = taRecord['[[Object]]']; // step 2 var isFixed = IsFixedLengthArrayBuffer(typedArrayBuffer(O)); var length = isFixed ? typedArrayLength(O) : 'AUTO'; if (length !== 'AUTO') { return length; // step 3 } if (isFixed) { throw new $TypeError('Assertion failed: array buffer is not fixed length'); // step 4 } var byteOffset = typedArrayByteOffset(O); // step 5 var elementSize = TypedArrayElementSize(O); // step 6 var byteLength = taRecord['[[CachedBufferByteLength]]']; // step 7 if (byteLength === 'DETACHED') { throw new $TypeError('Assertion failed: typed array is detached'); // step 8 } return floor((byteLength - byteOffset) / elementSize); // step 9 }; ljharb-es-abstract-babee05/2024/TypedArraySetElement.js000066400000000000000000000027661516525472400227540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); // http://www.ecma-international.org/ecma-262/15.0/#sec-typedarraysetelement module.exports = function TypedArraySetElement(O, index, value) { var which = whichTypedArray(O); if (!which) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } var contentType = which === 'BigInt64Array' || which === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; var numValue = contentType === 'BIGINT' ? ToBigInt(value) : ToNumber(value); // steps 1 - 2 if (IsValidIntegerIndex(O, index)) { // step 3 var offset = typedArrayByteOffset(O); // step 3.a var elementSize = TypedArrayElementSize(O); // step 3.b var byteIndexInBuffer = (index * elementSize) + offset; // step 3.c var elementType = TypedArrayElementType(O); // step 3.d SetValueInBuffer(typedArrayBuffer(O), byteIndexInBuffer, elementType, numValue, true, 'UNORDERED'); // step 3.e } }; ljharb-es-abstract-babee05/2024/TypedArraySpeciesCreate.js000066400000000000000000000026111516525472400234130ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreateFromConstructor = require('./TypedArrayCreateFromConstructor'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/15.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreateFromConstructor(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2024/UTF16EncodeCodePoint.js000066400000000000000000000013021516525472400224130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-utf16encoding module.exports = function UTF16EncodeCodePoint(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2024/UTF16SurrogatePairToCodePoint.js000066400000000000000000000014131516525472400243130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2024/UnicodeEscape.js000066400000000000000000000014161516525472400214000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2024/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000131521516525472400256570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor // see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof current === 'undefined') { // step 2 if (!extensible) { return false; // step 2.a } if (typeof O === 'undefined') { return true; // step 2.b } if (IsAccessorDescriptor(Desc)) { // step 2.c return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } // step 2.d return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!Desc['[[Configurable]]'], '[[Enumerable]]': !!Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': !!Desc['[[Writable]]'] } ); } // 3. Assert: current is a fully populated Property Descriptor. if ( !isFullyPopulatedPropertyDescriptor( { IsAccessorDescriptor: IsAccessorDescriptor, IsDataDescriptor: IsDataDescriptor }, current ) ) { throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor'); } // 4. If every field in Desc is absent, return true. // this can't really match the assertion that it's a Property Descriptor in our JS implementation // 5. If current.[[Configurable]] is false, then if (!current['[[Configurable]]']) { if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) { // step 5.a return false; } if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) { // step 5.b return false; } if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) { // step 5.c return false; } if (IsAccessorDescriptor(current)) { // step 5.d if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } } else if (!current['[[Writable]]']) { // step 5.e if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } } } // 6. If O is not undefined, then if (typeof O !== 'undefined') { var configurable; var enumerable; if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'], '[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]'] } ); } else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) { configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'], '[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]'] } ); } // For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; // step 7 }; ljharb-es-abstract-babee05/2024/ValidateAtomicAccess.js000066400000000000000000000024611516525472400227020ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayLength = require('./TypedArrayLength'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/15.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(taRecord, requestIndex) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } var length = TypedArrayLength(taRecord); // step 1 var accessIndex = ToIndex(requestIndex); // step 2 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 4 } var typedArray = taRecord['[[Object]]']; // step 5 var elementSize = TypedArrayElementSize(typedArray); // step 6 var offset = typedArrayByteOffset(typedArray); // step 7 return (accessIndex * elementSize) + offset; // step 8 }; ljharb-es-abstract-babee05/2024/ValidateAtomicAccessOnIntegerTypedArray.js000066400000000000000000000012521516525472400265170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ValidateAtomicAccess = require('./ValidateAtomicAccess'); var ValidateIntegerTypedArray = require('./ValidateIntegerTypedArray'); // https://262.ecma-international.org/15.0/#sec-availablenamedtimezoneidentifiers module.exports = function ValidateAtomicAccessOnIntegerTypedArray(typedArray, requestIndex) { var waitable = arguments.length > 2 ? arguments[2] : false; // step 1 if (typeof waitable !== 'boolean') { throw new $TypeError('waitable must be a boolean'); } var taRecord = ValidateIntegerTypedArray(typedArray, waitable); // step 2 return ValidateAtomicAccess(taRecord, requestIndex); // step 3 }; ljharb-es-abstract-babee05/2024/ValidateIntegerTypedArray.js000066400000000000000000000024131516525472400237430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var TypedArrayElementType = require('./TypedArrayElementType'); var ValidateTypedArray = require('./ValidateTypedArray'); // https://262.ecma-international.org/15.0/#sec-validateintegertypedarray module.exports = function ValidateIntegerTypedArray(typedArray, waitable) { if (typeof waitable !== 'boolean') { throw new $TypeError('Assertion failed: `waitable` must be a Boolean'); } var taRecord = ValidateTypedArray(typedArray, 'UNORDERED'); // step 1 // 2. NOTE: Bounds checking is not a synchronizing operation when typedArray's backing buffer is a growable SharedArrayBuffer. var type = TypedArrayElementType(typedArray); // step 4.a if (waitable) { // step 3 if (type !== 'INT32' && type !== 'BIGINT64') { throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a } } else if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) { // step 4 throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 4.b } return taRecord; // step 5 }; ljharb-es-abstract-babee05/2024/ValidateTypedArray.js000066400000000000000000000020401516525472400224210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var isTypedArray = require('is-typed-array'); // https://262.ecma-international.org/15.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O, order) { if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2 } var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, order); // step 3 if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('`O` must be in-bounds and backed by a non-detached buffer'); // step 4 } return taRecord; // step 5 }; ljharb-es-abstract-babee05/2024/WeakRefDeref.js000066400000000000000000000010641516525472400211620ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $deref = callBound('WeakRef.prototype.deref', true); var isWeakRef = require('is-weakref'); var AddToKeptObjects = require('./AddToKeptObjects'); // https://262.ecma-international.org/12.0/#sec-weakrefderef module.exports = function WeakRefDeref(weakRef) { if (!isWeakRef(weakRef)) { throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef'); } var target = $deref(weakRef); if (target) { AddToKeptObjects(target); } return target; }; ljharb-es-abstract-babee05/2024/WeekDay.js000066400000000000000000000003201516525472400202130ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2024/WordCharacters.js000066400000000000000000000031241516525472400216020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var isRegExpRecord = require('../helpers/records/regexp-record'); var OwnPropertyKeys = require('own-keys'); var basicWordChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/14.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } var extraWordChars = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.S[c]; // step 3 } }); if ((!rer['[[Unicode]]'] || !rer['[[IgnoreCase]]']) && extraWordChars.length > 0) { throw new $TypeError('Assertion failed: `extraWordChars` must be empty when `rer.[[IgnoreCase]]` and `rer.[[Unicode]]` are not both true'); // step 3 } return basicWordChars + extraWordChars; // step 4 }; ljharb-es-abstract-babee05/2024/YearFromTime.js000066400000000000000000000006161516525472400212350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2024/abs.js000066400000000000000000000003231516525472400174320ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2024/clamp.js000066400000000000000000000007741516525472400177730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var max = require('math-intrinsics/max'); var min = require('math-intrinsics/min'); // https://262.ecma-international.org/12.0/#clamping module.exports = function clamp(x, lower, upper) { if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) { throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`'); } return min(max(lower, x), upper); }; ljharb-es-abstract-babee05/2024/floor.js000066400000000000000000000004371516525472400200140ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2024/max.js000066400000000000000000000002061516525472400174520ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2024/min.js000066400000000000000000000002061516525472400174500ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2024/modulo.js000066400000000000000000000002501516525472400201630ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2024/msFromTime.js000066400000000000000000000003751516525472400207560ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2024/substring.js000066400000000000000000000011761516525472400207140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#substring module.exports = function substring(S, inclusiveStart, exclusiveEnd) { if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) { throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers'); } return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length); }; ljharb-es-abstract-babee05/2024/tables/000077500000000000000000000000001516525472400176035ustar00rootroot00000000000000ljharb-es-abstract-babee05/2024/tables/typed-array-objects.js000066400000000000000000000014061516525472400240320ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'INT8', $Uint8Array: 'UINT8', $Uint8ClampedArray: 'UINT8C', $Int16Array: 'INT16', $Uint16Array: 'UINT16', $Int32Array: 'INT32', $Uint32Array: 'UINT32', $BigInt64Array: 'BIGINT64', $BigUint64Array: 'BIGUINT64', $Float32Array: 'FLOAT32', $Float64Array: 'FLOAT64' }, size: { __proto__: null, $INT8: 1, $UINT8: 1, $UINT8C: 1, $INT16: 2, $UINT16: 2, $INT32: 4, $UINT32: 4, $BIGINT64: 8, $BIGUINT64: 8, $FLOAT32: 4, $FLOAT64: 8 }, choices: '"INT8", "UINT8", "UINT8C", "INT16", "UINT16", "INT32", "UINT32", "BIGINT64", "BIGUINT64", "FLOAT32", or "FLOAT64"' }; ljharb-es-abstract-babee05/2024/truncate.js000066400000000000000000000007151516525472400205170ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#eqn-truncate module.exports = function truncate(x) { if (typeof x !== 'number' && typeof x !== 'bigint') { throw new $TypeError('argument must be a Number or a BigInt'); } var result = x < 0 ? -floor(-x) : floor(x); return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2025/000077500000000000000000000000001516525472400163325ustar00rootroot00000000000000ljharb-es-abstract-babee05/2025/AddEntriesFromIterable.js000066400000000000000000000026201516525472400232060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var inspect = require('object-inspect'); var Call = require('./Call'); var Get = require('./Get'); var GetIterator = require('./GetIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var ThrowCompletion = require('./ThrowCompletion'); // https://262.ecma-international.org/15.0/#sec-add-entries-from-iterable module.exports = function AddEntriesFromIterable(target, iterable, adder) { if (!IsCallable(adder)) { throw new $TypeError('Assertion failed: `adder` is not callable'); } if (iterable == null) { throw new $TypeError('Assertion failed: `iterable` is present, and not nullish'); } var iteratorRecord = GetIterator(iterable, 'SYNC'); while (true) { var next = IteratorStep(iteratorRecord); if (!next) { return target; } var nextItem = IteratorValue(next); if (!isObject(nextItem)) { var error = ThrowCompletion(new $TypeError('iterator next must return an Object, got ' + inspect(nextItem))); return IteratorClose(iteratorRecord, error); } try { var k = Get(nextItem, '0'); var v = Get(nextItem, '1'); Call(adder, target, [k, v]); } catch (e) { return IteratorClose(iteratorRecord, ThrowCompletion(e)); } } }; ljharb-es-abstract-babee05/2025/AddToKeptObjects.js000066400000000000000000000010251516525472400220170ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var ClearKeptObjects = require('./ClearKeptObjects'); // https://262.ecma-international.org/12.0/#sec-addtokeptobjects module.exports = function AddToKeptObjects(object) { if (!isObject(object)) { throw new $TypeError('Assertion failed: `object` must be an Object'); } var arr = SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'); arr[arr.length] = object; }; ljharb-es-abstract-babee05/2025/AddValueToKeyedGroup.js000066400000000000000000000024201516525472400226550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var IsArray = require('../helpers/IsArray'); var every = require('../helpers/every'); var forEach = require('../helpers/forEach'); var hasOwn = require('hasown'); var isKeyedGroup = function (group) { return hasOwn(group, '[[Key]]') && hasOwn(group, '[[Elements]]') && IsArray(group['[[Elements]]']); }; // https://262.ecma-international.org/15.0/#sec-add-value-to-keyed-group module.exports = function AddValueToKeyedGroup(groups, key, value) { if (!IsArray(groups) || (groups.length > 0 && !every(groups, isKeyedGroup))) { throw new $TypeError('Assertion failed: `groups` must be a List of Records with [[Key]] and [[Elements]]'); } var matched = 0; forEach(groups, function (g) { // step 1 if (SameValue(g['[[Key]]'], key)) { // step 2 matched += 1; if (matched > 1) { throw new $TypeError('Assertion failed: Exactly one element of groups meets this criterion'); // step 2.a } var arr = g['[[Elements]]']; arr[arr.length] = value; // step 2.b } }); if (matched === 0) { var group = { '[[Key]]': key, '[[Elements]]': [value] }; // step 2 // eslint-disable-next-line no-param-reassign groups[groups.length] = group; // step 3 } }; ljharb-es-abstract-babee05/2025/AdvanceStringIndex.js000066400000000000000000000016501516525472400224120ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/12.0/#sec-advancestringindex module.exports = function AdvanceStringIndex(S, index, unicode) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(index) || index < 0 || index > MAX_SAFE_INTEGER) { throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53'); } if (typeof unicode !== 'boolean') { throw new $TypeError('Assertion failed: `unicode` must be a Boolean'); } if (!unicode) { return index + 1; } var length = S.length; if ((index + 1) >= length) { return index + 1; } var cp = CodePointAt(S, index); return index + cp['[[CodeUnitCount]]']; }; ljharb-es-abstract-babee05/2025/AllCharacters.js000066400000000000000000000021571516525472400214050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasEitherUnicodeFlag = require('./HasEitherUnicodeFlag'); var isRegExpRecord = require('../helpers/records/regexp-record'); var CharSet = require('../helpers/CharSet'); // https://262.ecma-international.org/15.0/#sec-allcharacters module.exports = function AllCharacters(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (rer['[[UnicodeSets]]'] && rer['[[IgnoreCase]]']) { // step 1 // 1. Return the CharSet containing all Unicode code points _c_ that do not have a Simple Case Folding mapping (that is, scf(_c_)=_c_). return CharSet.getNonSimpleCaseFoldingCodePoints(); // step 1.a } else if (HasEitherUnicodeFlag(rer)) { // step 2 // 1. Return the CharSet containing all code point values. return CharSet.getCodePoints(); // step 3.a // eslint-disable-next-line no-else-return } else { // step 3 // 1. Return the CharSet containing all code unit values. return CharSet.getCodeUnits(); // step 3.a } }; ljharb-es-abstract-babee05/2025/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000060761516525472400256620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var HasOwnProperty = require('./HasOwnProperty'); var SameType = require('./SameType'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); var NumberAdd = require('./Number/add'); var NumberBitwiseAND = require('./Number/bitwiseAND'); var NumberBitwiseOR = require('./Number/bitwiseOR'); var NumberBitwiseXOR = require('./Number/bitwiseXOR'); var NumberDivide = require('./Number/divide'); var NumberExponentiate = require('./Number/exponentiate'); var NumberLeftShift = require('./Number/leftShift'); var NumberMultiply = require('./Number/multiply'); var NumberRemainder = require('./Number/remainder'); var NumberSignedRightShift = require('./Number/signedRightShift'); var NumberSubtract = require('./Number/subtract'); var NumberUnsignedRightShift = require('./Number/unsignedRightShift'); var BigIntAdd = require('./BigInt/add'); var BigIntBitwiseAND = require('./BigInt/bitwiseAND'); var BigIntBitwiseOR = require('./BigInt/bitwiseOR'); var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR'); var BigIntDivide = require('./BigInt/divide'); var BigIntExponentiate = require('./BigInt/exponentiate'); var BigIntLeftShift = require('./BigInt/leftShift'); var BigIntMultiply = require('./BigInt/multiply'); var BigIntRemainder = require('./BigInt/remainder'); var BigIntSignedRightShift = require('./BigInt/signedRightShift'); var BigIntSubtract = require('./BigInt/subtract'); var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift'); // https://262.ecma-international.org/16.0/#step-applystringornumericbinaryoperator-operations-table var table = { '**': [NumberExponentiate, BigIntExponentiate], '*': [NumberMultiply, BigIntMultiply], '/': [NumberDivide, BigIntDivide], '%': [NumberRemainder, BigIntRemainder], '+': [NumberAdd, BigIntAdd], '-': [NumberSubtract, BigIntSubtract], '<<': [NumberLeftShift, BigIntLeftShift], '>>': [NumberSignedRightShift, BigIntSignedRightShift], '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift], '&': [NumberBitwiseAND, BigIntBitwiseAND], '^': [NumberBitwiseXOR, BigIntBitwiseXOR], '|': [NumberBitwiseOR, BigIntBitwiseOR] }; // https://262.ecma-international.org/16.0/#sec-applystringornumericbinaryoperator module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) { if (typeof opText !== 'string' || !HasOwnProperty(table, opText)) { throw new $TypeError('Assertion failed: `opText` must be a valid operation string'); } if (opText === '+') { var lprim = ToPrimitive(lval); var rprim = ToPrimitive(rval); if (typeof lprim === 'string' || typeof rprim === 'string') { var lstr = ToString(lprim); var rstr = ToString(rprim); return lstr + rstr; } /* eslint no-param-reassign: 1 */ lval = lprim; rval = rprim; } var lnum = ToNumeric(lval); var rnum = ToNumeric(rval); if (!SameType(lnum, rnum)) { throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ'); } var Operation = table[opText][typeof lnum === 'bigint' ? 1 : 0]; return Operation(lnum, rnum); }; ljharb-es-abstract-babee05/2025/ArrayBufferByteLength.js000066400000000000000000000033571516525472400230760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/15.0/#sec-arraybufferbytelength var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var arrayBufferByteLength = require('array-buffer-byte-length'); var callBound = require('call-bound'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); var isGrowable = false; // TODO: support this module.exports = function ArrayBufferByteLength(arrayBuffer, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } // 1. If IsSharedArrayBuffer(arrayBuffer) is true and arrayBuffer has an [[ArrayBufferByteLengthData]] internal slot, then // TODO: see if IsFixedLengthArrayBuffer can be used here in the spec instead if (isSAB && isGrowable) { // step 1 // a. Let bufferByteLengthBlock be arrayBuffer.[[ArrayBufferByteLengthData]]. // b. Let rawLength be GetRawBytesFromSharedBlock(bufferByteLengthBlock, 0, BIGUINT64, true, order). // c. Let isLittleEndian be the value of the [[LittleEndian]] field of the surrounding agent's Agent Record. // d. Return ℝ(RawBytesToNumeric(BIGUINT64, rawLength, isLittleEndian)). } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must not be detached'); // step 2 } return isSAB ? $sabByteLength(arrayBuffer) : arrayBufferByteLength(arrayBuffer); }; ljharb-es-abstract-babee05/2025/ArrayBufferCopyAndDetach.js000066400000000000000000000075011516525472400234720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var min = require('math-intrinsics/min'); var $TypeError = require('es-errors/type'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var callBound = require('call-bound'); var byteLength = require('array-buffer-byte-length'); var $maxByteLength = callBound('%ArrayBuffer.prototype.maxByteLength%', true); var copy = function copyAB(src, start, end) { var that = new $Uint8Array(src); if (typeof end === 'undefined') { end = that.length; // eslint-disable-line no-param-reassign } var result = new $ArrayBuffer(end - start); var resultArray = new $Uint8Array(result); for (var i = 0; i < resultArray.length; i++) { resultArray[i] = that[i + start]; } return result; }; var $abSlice = callBound('%ArrayBuffer.prototype.slice%', true) || function slice(ab, a, b) { // in node < 0.11, slice is an own nonconfigurable property return ab.slice ? ab.slice(a, b) : copy(ab, a, b); // node 0.8 lacks `slice` }; var DetachArrayBuffer = require('./DetachArrayBuffer'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var ToIndex = require('./ToIndex'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/15.0/#sec-arraybuffercopyanddetach module.exports = function ArrayBufferCopyAndDetach(arrayBuffer, newLength, preserveResizability) { if (preserveResizability !== 'PRESERVE-RESIZABILITY' && preserveResizability !== 'FIXED-LENGTH') { throw new $TypeError('`preserveResizability` must be ~PRESERVE-RESIZABILITY~ or ~FIXED-LENGTH~'); } if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('`arrayBuffer` must be a non-shared ArrayBuffer'); // steps 1 - 2 } var abByteLength; var newByteLength; if (typeof newLength === 'undefined') { // step 3 newByteLength = byteLength(arrayBuffer); // step 3.a abByteLength = newByteLength; } else { // step 4 newByteLength = ToIndex(newLength); // step 4.a } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('`arrayBuffer` must not be detached'); // step 5 } var newMaxByteLength; if (preserveResizability === 'PRESERVE-RESIZABILITY' && !IsFixedLengthArrayBuffer(arrayBuffer)) { // step 6 newMaxByteLength = $maxByteLength(arrayBuffer); // step 6.a } else { // step 7 newMaxByteLength = 'EMPTY'; // step 7.a } // commented out since there's no way to set or access this key // 8. If arrayBuffer.[[ArrayBufferDetachKey]] is not undefined, throw a TypeError exception. // 9. Let newBuffer be ? AllocateArrayBuffer(%ArrayBuffer%, newByteLength, newMaxByteLength). var newBuffer = newMaxByteLength === 'EMPTY' ? new $ArrayBuffer(newByteLength) : new $ArrayBuffer(newByteLength, { maxByteLength: newMaxByteLength }); if (typeof abByteLength !== 'number') { abByteLength = byteLength(arrayBuffer); } var copyLength = min(newByteLength, abByteLength); // step 10 if (newByteLength > copyLength || newMaxByteLength !== 'EMPTY') { var taNew = new $Uint8Array(newBuffer); var taOld = new $Uint8Array(arrayBuffer); for (var i = 0; i < copyLength; i++) { taNew[i] = taOld[i]; } } else { newBuffer = $abSlice(arrayBuffer, 0, copyLength); // ? optimization for when the new buffer will not be larger than the old one } /* 11. Let fromBlock be arrayBuffer.[[ArrayBufferData]]. 12. Let toBlock be newBuffer.[[ArrayBufferData]]. 13. Perform CopyDataBlockBytes(toBlock, 0, fromBlock, 0, copyLength). 14. NOTE: Neither creation of the new Data Block nor copying from the old Data Block are observable. Implementations may implement this method as a zero-copy move or a realloc. */ DetachArrayBuffer(arrayBuffer); // step 15 return newBuffer; // step 16 }; ljharb-es-abstract-babee05/2025/ArrayCreate.js000066400000000000000000000026151516525472400210760ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ArrayPrototype = GetIntrinsic('%Array.prototype%'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); var $setProto = require('set-proto'); // https://262.ecma-international.org/12.0/#sec-arraycreate module.exports = function ArrayCreate(length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0'); } if (length > MAX_ARRAY_LENGTH) { throw new $RangeError('length is greater than (2**32 - 1)'); } var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype; var A = []; // steps 3, 5 if (proto !== $ArrayPrototype) { // step 4 if (!$setProto) { throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } $setProto(A, proto); } if (length !== 0) { // bypasses the need for step 6 A.length = length; } /* step 6, the above as a shortcut for the below OrdinaryDefineOwnProperty(A, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': true }); */ return A; }; ljharb-es-abstract-babee05/2025/ArraySetLength.js000066400000000000000000000045661516525472400215770ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var assign = require('object.assign'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsArray = require('./IsArray'); var IsDataDescriptor = require('./IsDataDescriptor'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/6.0/#sec-arraysetlength // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function ArraySetLength(A, Desc) { if (!IsArray(A)) { throw new $TypeError('Assertion failed: A must be an Array'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!('[[Value]]' in Desc)) { return OrdinaryDefineOwnProperty(A, 'length', Desc); } var newLenDesc = assign({}, Desc); var newLen = ToUint32(Desc['[[Value]]']); var numberLen = ToNumber(Desc['[[Value]]']); if (newLen !== numberLen) { throw new $RangeError('Invalid array length'); } newLenDesc['[[Value]]'] = newLen; var oldLenDesc = OrdinaryGetOwnProperty(A, 'length'); if (!IsDataDescriptor(oldLenDesc)) { throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`'); } var oldLen = oldLenDesc['[[Value]]']; if (newLen >= oldLen) { return OrdinaryDefineOwnProperty(A, 'length', newLenDesc); } if (!oldLenDesc['[[Writable]]']) { return false; } var newWritable; if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) { newWritable = true; } else { newWritable = false; newLenDesc['[[Writable]]'] = true; } var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc); if (!succeeded) { return false; } while (newLen < oldLen) { oldLen -= 1; // eslint-disable-next-line no-param-reassign var deleteSucceeded = delete A[ToString(oldLen)]; if (!deleteSucceeded) { newLenDesc['[[Value]]'] = oldLen + 1; if (!newWritable) { newLenDesc['[[Writable]]'] = false; OrdinaryDefineOwnProperty(A, 'length', newLenDesc); return false; } } } if (!newWritable) { return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false }); } return true; }; ljharb-es-abstract-babee05/2025/ArraySpeciesCreate.js000066400000000000000000000025311516525472400224070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var ArrayCreate = require('./ArrayCreate'); var Get = require('./Get'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-arrayspeciescreate module.exports = function ArraySpeciesCreate(originalArray, length) { if (!isInteger(length) || length < 0) { throw new $TypeError('Assertion failed: length must be an integer >= 0'); } var isArray = IsArray(originalArray); if (!isArray) { return ArrayCreate(length); } var C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array // if (IsConstructor(C)) { // if C is another realm's Array, C = undefined // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ? // } if ($species && isObject(C)) { C = Get(C, $species); if (C === null) { C = void 0; } } if (typeof C === 'undefined') { return ArrayCreate(length); } if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); } return new C(length); // Construct(C, length); }; ljharb-es-abstract-babee05/2025/AsyncFromSyncIteratorContinuation.js000066400000000000000000000027761516525472400255470ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var callBound = require('call-bound'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var IteratorComplete = require('./IteratorComplete'); var IteratorValue = require('./IteratorValue'); var PromiseResolve = require('./PromiseResolve'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/16.0/#sec-asyncfromsynciteratorcontinuation module.exports = function AsyncFromSyncIteratorContinuation(result) { if (!isObject(result)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (arguments.length > 1) { throw new $SyntaxError('although AsyncFromSyncIteratorContinuation should take a second argument, it is not used in this implementation'); } if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } return new $Promise(function (resolve) { var done = IteratorComplete(result); // step 2 var value = IteratorValue(result); // step 4 var valueWrapper = PromiseResolve($Promise, value); // step 6 // eslint-disable-next-line no-shadow var onFulfilled = function (value) { // steps 8-9 return CreateIteratorResultObject(value, done); // step 8.a }; resolve($then(valueWrapper, onFulfilled)); // step 11 }); // step 12 }; ljharb-es-abstract-babee05/2025/AsyncIteratorClose.js000066400000000000000000000036141516525472400224510ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var isIteratorRecord = require('../helpers/records/iterator-record'); var callBound = require('call-bound'); var $then = callBound('Promise.prototype.then', true); // https://262.ecma-international.org/15.0/#sec-asynciteratorclose module.exports = function AsyncIteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!(completion instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: completion is not a Completion Record instance'); // step 2 } if (!$then) { throw new $SyntaxError('This environment does not support Promises.'); } var iterator = iteratorRecord['[[Iterator]]']; // step 3 return $then( $then( $then( new $Promise(function (resolve) { resolve(GetMethod(iterator, 'return')); // step 4 // resolve(Call(ret, iterator, [])); // step 6 }), function (returnV) { // step 5.a if (typeof returnV === 'undefined') { return completion; // step 5.b } return Call(returnV, iterator); // step 5.c, 5.d. } ), null, function (e) { if (completion.type() === 'throw') { completion['?'](); // step 6 } else { throw e; // step 7 } } ), function (innerResult) { // step 8 if (completion.type() === 'throw') { completion['?'](); // step 6 } if (!isObject(innerResult)) { throw new $TypeError('`innerResult` must be an Object'); // step 10 } return completion; } ); }; ljharb-es-abstract-babee05/2025/BigInt/000077500000000000000000000000001516525472400175065ustar00rootroot00000000000000ljharb-es-abstract-babee05/2025/BigInt/add.js000066400000000000000000000005751516525472400206030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add module.exports = function BigIntAdd(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2025/BigInt/bitwiseAND.js000066400000000000000000000006521516525472400220400ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND module.exports = function BigIntBitwiseAND(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2025/BigInt/bitwiseNOT.js000066400000000000000000000006411516525472400220740ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT module.exports = function BigIntBitwiseNOT(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } return -x - $BigInt(1); }; ljharb-es-abstract-babee05/2025/BigInt/bitwiseOR.js000066400000000000000000000006501516525472400217540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR module.exports = function BigIntBitwiseOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2025/BigInt/bitwiseXOR.js000066400000000000000000000006521516525472400221060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntBitwiseOp = require('../BigIntBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR module.exports = function BigIntBitwiseXOR(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2025/BigInt/divide.js000066400000000000000000000011251516525472400213070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide module.exports = function BigIntDivide(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } if (y === $BigInt(0)) { throw new $RangeError('Division by zero'); } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2025/BigInt/equal.js000066400000000000000000000006021516525472400211510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal module.exports = function BigIntEqual(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2025/BigInt/exponentiate.js000066400000000000000000000015251516525472400225520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate module.exports = function BigIntExponentiate(base, exponent) { if (typeof base !== 'bigint' || typeof exponent !== 'bigint') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts'); } if (exponent < $BigInt(0)) { throw new $RangeError('Exponent must be positive'); } if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) { return $BigInt(1); } var square = base; var remaining = exponent; while (remaining > $BigInt(0)) { square += exponent; --remaining; // eslint-disable-line no-plusplus } return square; }; ljharb-es-abstract-babee05/2025/BigInt/index.js000066400000000000000000000021541516525472400211550ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2025/BigInt/leftShift.js000066400000000000000000000006121516525472400217730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift module.exports = function BigIntLeftShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x << y; }; ljharb-es-abstract-babee05/2025/BigInt/lessThan.js000066400000000000000000000006071516525472400216300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan module.exports = function BigIntLessThan(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2025/BigInt/multiply.js000066400000000000000000000006071516525472400217260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply module.exports = function BigIntMultiply(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2025/BigInt/remainder.js000066400000000000000000000012401516525472400220070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder module.exports = function BigIntRemainder(n, d) { if (typeof n !== 'bigint' || typeof d !== 'bigint') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts'); } if (d === zero) { throw new $RangeError('Division by zero'); } if (n === zero) { return zero; } // shortcut for the actual spec mechanics return n % d; }; ljharb-es-abstract-babee05/2025/BigInt/signedRightShift.js000066400000000000000000000006541516525472400233160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var BigIntLeftShift = require('./leftShift'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift module.exports = function BigIntSignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } return BigIntLeftShift(x, -y); }; ljharb-es-abstract-babee05/2025/BigInt/subtract.js000066400000000000000000000006071516525472400216760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract module.exports = function BigIntSubtract(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } // shortcut for the actual spec mechanics return x - y; }; ljharb-es-abstract-babee05/2025/BigInt/toString.js000066400000000000000000000014161516525472400216570ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $BigIntToString = callBound('BigInt.prototype.toString', true); // https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-tostring module.exports = function BigIntToString(x, radix) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` must be a BigInt'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } if (!$BigIntToString) { throw new $SyntaxError('BigInt is not supported'); } return $BigIntToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2025/BigInt/unaryMinus.js000066400000000000000000000007361516525472400222240ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var zero = $BigInt && $BigInt(0); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus module.exports = function BigIntUnaryMinus(x) { if (typeof x !== 'bigint') { throw new $TypeError('Assertion failed: `x` argument must be a BigInt'); } if (x === zero) { return zero; } return -x; }; ljharb-es-abstract-babee05/2025/BigInt/unsignedRightShift.js000066400000000000000000000006601516525472400236560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift module.exports = function BigIntUnsignedRightShift(x, y) { if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts'); } throw new $TypeError('BigInts have no unsigned right shift, use >> instead'); }; ljharb-es-abstract-babee05/2025/BigIntBitwiseOp.js000066400000000000000000000031771516525472400217020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // var $BigInt = GetIntrinsic('%BigInt%', true); // var $pow = require('math-intrinsics/pow'); // var BinaryAnd = require('./BinaryAnd'); // var BinaryOr = require('./BinaryOr'); // var BinaryXor = require('./BinaryXor'); // var modulo = require('./modulo'); // var zero = $BigInt && $BigInt(0); // var negOne = $BigInt && $BigInt(-1); // var two = $BigInt && $BigInt(2); // https://262.ecma-international.org/11.0/#sec-bigintbitwiseop module.exports = function BigIntBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'bigint' || typeof y !== 'bigint') { throw new $TypeError('`x` and `y` must be BigInts'); } if (op === '&') { return x & y; } if (op === '|') { return x | y; } return x ^ y; /* var result = zero; var shift = 0; while (x !== zero && x !== negOne && y !== zero && y !== negOne) { var xDigit = modulo(x, two); var yDigit = modulo(y, two); if (op === '&') { result += $pow(2, shift) * BinaryAnd(xDigit, yDigit); } else if (op === '|') { result += $pow(2, shift) * BinaryOr(xDigit, yDigit); } else if (op === '^') { result += $pow(2, shift) * BinaryXor(xDigit, yDigit); } shift += 1; x = (x - xDigit) / two; y = (y - yDigit) / two; } var tmp; if (op === '&') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else if (op === '|') { tmp = BinaryAnd(modulo(x, two), modulo(y, two)); } else { tmp = BinaryXor(modulo(x, two), modulo(y, two)); } if (tmp !== 0) { result -= $pow(2, shift); } return result; */ }; ljharb-es-abstract-babee05/2025/BinaryAnd.js000066400000000000000000000004741516525472400205440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryand module.exports = function BinaryAnd(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x & y; }; ljharb-es-abstract-babee05/2025/BinaryOr.js000066400000000000000000000004721516525472400204200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryor module.exports = function BinaryOr(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x | y; }; ljharb-es-abstract-babee05/2025/BinaryXor.js000066400000000000000000000004741516525472400206120ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/11.0/#sec-binaryxor module.exports = function BinaryXor(x, y) { if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) { throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1'); } return x ^ y; }; ljharb-es-abstract-babee05/2025/ByteListBitwiseOp.js000066400000000000000000000022371516525472400222610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) { if (op !== '&' && op !== '^' && op !== '|') { throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`'); } if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var result = []; for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)'); } var resultByte; if (op === '&') { resultByte = xByte & yByte; } else if (op === '^') { resultByte = xByte ^ yByte; } else { resultByte = xByte | yByte; } result[result.length] = resultByte; } return result; }; ljharb-es-abstract-babee05/2025/ByteListEqual.js000066400000000000000000000015341516525472400214220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var isByteValue = require('../helpers/isByteValue'); // https://262.ecma-international.org/12.0/#sec-bytelistequal module.exports = function ByteListEqual(xBytes, yBytes) { if (!IsArray(xBytes) || !IsArray(yBytes)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xBytes.length !== yBytes.length) { return false; } for (var i = 0; i < xBytes.length; i += 1) { var xByte = xBytes[i]; var yByte = yBytes[i]; if (!isByteValue(xByte) || !isByteValue(yByte)) { throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)'); } if (xByte !== yByte) { return false; } } return true; }; ljharb-es-abstract-babee05/2025/Call.js000066400000000000000000000011351516525472400175430ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('Function.prototype.apply'); // https://262.ecma-international.org/6.0/#sec-call module.exports = function Call(F, V) { var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } return $apply(F, V, argumentsList); }; ljharb-es-abstract-babee05/2025/CanBeHeldWeakly.js000066400000000000000000000006231516525472400216130ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var KeyForSymbol = require('./KeyForSymbol'); // https://262.ecma-international.org/14.0/#sec-canbeheldweakly module.exports = function CanBeHeldWeakly(v) { if (isObject(v)) { return true; // step 1 } if (typeof v === 'symbol' && typeof KeyForSymbol(v) === 'undefined') { return true; // step 2 } return false; // step 3 }; ljharb-es-abstract-babee05/2025/CanonicalNumericIndexString.js000066400000000000000000000010741516525472400242630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring module.exports = function CanonicalNumericIndexString(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` must be a String'); } if (argument === '-0') { return -0; } var n = ToNumber(argument); if (SameValue(ToString(n), argument)) { return n; } return void 0; }; ljharb-es-abstract-babee05/2025/Canonicalize.js000066400000000000000000000023261516525472400212720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); var isRegExpRecord = require('../helpers/records/regexp-record'); var caseFolding = require('../helpers/caseFolding.json'); // https://262.ecma-international.org/14.0/#sec-runtime-semantics-canonicalize-ch module.exports = function Canonicalize(rer, ch) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (typeof ch !== 'string') { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (rer['[[Unicode]]'] && rer['[[IgnoreCase]]']) { // step 1 if (hasOwn(caseFolding.C, ch)) { return caseFolding.C[ch]; } if (hasOwn(caseFolding.S, ch)) { return caseFolding.S[ch]; } return ch; // step 1.b } if (!rer['[[IgnoreCase]]']) { return ch; // step 2 } var u = $toUpperCase(ch); // step 5 if (u.length !== 1) { return ch; // step 7 } var cu = u; // step 8 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 9 } return cu; // step 10 }; ljharb-es-abstract-babee05/2025/CanonicalizeKeyedCollectionKey.js000066400000000000000000000003001516525472400247270ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/16.0/#sec-canonicalizekeyedcollectionkey module.exports = function CanonicalizeKeyedCollectionKey(key) { return key === 0 ? +0 : key; }; ljharb-es-abstract-babee05/2025/CharacterComplement.js000066400000000000000000000015651516525472400226170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var AllCharacters = require('./AllCharacters'); var CharSet = require('../helpers/CharSet').CharSet; var isRegExpRecord = require('../helpers/records/regexp-record'); // https://262.ecma-international.org/15.0/#sec-charactercomplement module.exports = function CharacterComplement(rer, S) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (!(S instanceof CharSet)) { throw new $TypeError('Assertion failed: S must be a CharSet'); } var A = AllCharacters(rer); // step 1 // 2. Return the CharSet containing the CharSetElements of A which are not also CharSetElements of S. return new CharSet( function (x) { return !S.test(x) && A.test(x); }, function (emit) { A.yield(function (x) { if (!S.test(x)) { emit(x); } }); } ); }; ljharb-es-abstract-babee05/2025/CharacterRange.js000066400000000000000000000022561516525472400215460ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var $TypeError = require('es-errors/type'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var CharSet = require('../helpers/CharSet').CharSet; // https://262.ecma-international.org/16.0/#sec-runtime-semantics-characterrange-abstract-operation module.exports = function CharacterRange(A, B) { if (!(A instanceof CharSet) || !(B instanceof CharSet)) { throw new $TypeError('Assertion failed: CharSets A and B are not both CharSets'); } var a; A.yield(function (c) { if (typeof a !== 'undefined') { throw new $TypeError('Assertion failed: CharSet A has more than one character'); } a = c; }); var b; B.yield(function (c) { if (typeof b !== 'undefined') { throw new $TypeError('Assertion failed: CharSet B has more than one character'); } b = c; }); var i = $charCodeAt(a, 0); var j = $charCodeAt(b, 0); if (!(i <= j)) { throw new $TypeError('Assertion failed: i is not <= j'); } var arr = []; for (var k = i; k <= j; k += 1) { arr[arr.length] = $fromCharCode(k); } return arr; }; ljharb-es-abstract-babee05/2025/ClearKeptObjects.js000066400000000000000000000004511516525472400220540ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); var keptObjects = []; // https://262.ecma-international.org/12.0/#sec-clear-kept-objects module.exports = function ClearKeptObjects() { keptObjects.length = 0; }; SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects); ljharb-es-abstract-babee05/2025/CloneArrayBuffer.js000066400000000000000000000035511516525472400220650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsConstructor = require('./IsConstructor'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var OrdinarySetPrototypeOf = require('./OrdinarySetPrototypeOf'); var isInteger = require('math-intrinsics/isInteger'); var isArrayBuffer = require('is-array-buffer'); var arrayBufferSlice = require('arraybuffer.prototype.slice'); // https://262.ecma-international.org/12.0/#sec-clonearraybuffer module.exports = function CloneArrayBuffer(srcBuffer, srcByteOffset, srcLength, cloneConstructor) { if (!isArrayBuffer(srcBuffer)) { throw new $TypeError('Assertion failed: `srcBuffer` must be an ArrayBuffer instance'); } if (!isInteger(srcByteOffset) || srcByteOffset < 0) { throw new $TypeError('Assertion failed: `srcByteOffset` must be a non-negative integer'); } if (!isInteger(srcLength) || srcLength < 0) { throw new $TypeError('Assertion failed: `srcLength` must be a non-negative integer'); } if (!IsConstructor(cloneConstructor)) { throw new $TypeError('Assertion failed: `cloneConstructor` must be a constructor'); } // 3. Let targetBuffer be ? AllocateArrayBuffer(cloneConstructor, srcLength). var proto = GetPrototypeFromConstructor(cloneConstructor, '%ArrayBufferPrototype%'); // step 3, kinda if (IsDetachedBuffer(srcBuffer)) { throw new $TypeError('`srcBuffer` must not be a detached ArrayBuffer'); // step 4 } /* 5. Let srcBlock be srcBuffer.[[ArrayBufferData]]. 6. Let targetBlock be targetBuffer.[[ArrayBufferData]]. 7. Perform CopyDataBlockBytes(targetBlock, 0, srcBlock, srcByteOffset, srcLength). */ var targetBuffer = arrayBufferSlice(srcBuffer, srcByteOffset, srcByteOffset + srcLength); // steps 5-7 OrdinarySetPrototypeOf(targetBuffer, proto); // step 3 return targetBuffer; // step 8 }; ljharb-es-abstract-babee05/2025/CodePointAt.js000066400000000000000000000031611516525472400210420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint'); var $charAt = callBound('String.prototype.charAt'); var $charCodeAt = callBound('String.prototype.charCodeAt'); // https://262.ecma-international.org/12.0/#sec-codepointat module.exports = function CodePointAt(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var size = string.length; if (position < 0 || position >= size) { throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`'); } var first = $charCodeAt(string, position); var cp = $charAt(string, position); var firstIsLeading = isLeadingSurrogate(first); var firstIsTrailing = isTrailingSurrogate(first); if (!firstIsLeading && !firstIsTrailing) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }; } if (firstIsTrailing || (position + 1 === size)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } var second = $charCodeAt(string, position + 1); if (!isTrailingSurrogate(second)) { return { '[[CodePoint]]': cp, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }; } return { '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second), '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }; }; ljharb-es-abstract-babee05/2025/CodePointsToString.js000066400000000000000000000013371516525472400224350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-codepointstostring module.exports = function CodePointsToString(text) { if (!IsArray(text)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } var result = ''; forEach(text, function (cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points'); } result += UTF16EncodeCodePoint(cp); }); return result; }; ljharb-es-abstract-babee05/2025/CompareArrayElements.js000066400000000000000000000023751516525472400227610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsLessThan = require('./IsLessThan'); var ToNumber = require('./ToNumber'); var ToString = require('./ToString'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparearrayelements module.exports = function CompareArrayElements(x, y, compareFn) { if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof x === 'undefined' && typeof y === 'undefined') { return 0; // step 1 } if (typeof x === 'undefined') { return 1; // step 2 } if (typeof y === 'undefined') { return -1; // step 3 } if (typeof compareFn !== 'undefined') { // step 4 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 4.a if (isNaN(v)) { return 0; // step 4.b } return v; // step 4.c } var xString = ToString(x); // step 5 var yString = ToString(y); // step 6 var xSmaller = IsLessThan(xString, yString, true); // step 7 if (xSmaller) { return -1; // step 8 } var ySmaller = IsLessThan(yString, xString, true); // step 9 if (ySmaller) { return 1; // step 10 } return 0; // step 11 }; ljharb-es-abstract-babee05/2025/CompareTypedArrayElements.js000066400000000000000000000025151516525472400237630ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-comparetypedarrayelements module.exports = function CompareTypedArrayElements(x, y, compareFn) { if ((typeof x !== 'number' && typeof x !== 'bigint') || typeof x !== typeof y) { throw new $TypeError('Assertion failed: `x` and `y` must be either a BigInt or a Number, and both must be the same type'); } if (typeof compareFn !== 'function' && typeof compareFn !== 'undefined') { throw new $TypeError('Assertion failed: `compareFn` must be a function or undefined'); } if (typeof compareFn !== 'undefined') { // step 2 var v = ToNumber(Call(compareFn, void undefined, [x, y])); // step 2.a if (isNaN(v)) { return 0; // step 2.b } return v; // step 2.c } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN && yNaN) { return 0; // step 3 } if (xNaN) { return 1; // step 4 } if (yNaN) { return -1; // step 5 } if (x < y) { return -1; // step 6 } if (x > y) { return 1; // step 7 } if (SameValue(x, -0) && SameValue(y, 0)) { return -1; // step 8 } if (SameValue(x, 0) && SameValue(y, -0)) { return 1; // step 9 } return 0; // step 10 }; ljharb-es-abstract-babee05/2025/CompletePropertyDescriptor.js000066400000000000000000000021261516525472400242450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-completepropertydescriptor module.exports = function CompletePropertyDescriptor(Desc) { if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } /* eslint no-param-reassign: 0 */ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) { if (!hasOwn(Desc, '[[Value]]')) { Desc['[[Value]]'] = void 0; } if (!hasOwn(Desc, '[[Writable]]')) { Desc['[[Writable]]'] = false; } } else { if (!hasOwn(Desc, '[[Get]]')) { Desc['[[Get]]'] = void 0; } if (!hasOwn(Desc, '[[Set]]')) { Desc['[[Set]]'] = void 0; } } if (!hasOwn(Desc, '[[Enumerable]]')) { Desc['[[Enumerable]]'] = false; } if (!hasOwn(Desc, '[[Configurable]]')) { Desc['[[Configurable]]'] = false; } return Desc; }; ljharb-es-abstract-babee05/2025/CompletionRecord.js000066400000000000000000000025141516525472400221420ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/7.0/#sec-completion-record-specification-type var CompletionRecord = function CompletionRecord(type, value) { if (!(this instanceof CompletionRecord)) { return new CompletionRecord(type, value); } if (type !== 'normal' && type !== 'break' && type !== 'continue' && type !== 'return' && type !== 'throw') { throw new $SyntaxError('Assertion failed: `type` must be one of "normal", "break", "continue", "return", or "throw"'); } SLOT.set(this, '[[Type]]', type); SLOT.set(this, '[[Value]]', value); // [[Target]] slot? }; CompletionRecord.prototype.type = function Type() { return SLOT.get(this, '[[Type]]'); }; CompletionRecord.prototype.value = function Value() { return SLOT.get(this, '[[Value]]'); }; CompletionRecord.prototype['?'] = function ReturnIfAbrupt() { var type = SLOT.get(this, '[[Type]]'); var value = SLOT.get(this, '[[Value]]'); if (type === 'throw') { throw value; } return value; }; CompletionRecord.prototype['!'] = function assert() { var type = SLOT.get(this, '[[Type]]'); if (type !== 'normal') { throw new $SyntaxError('Assertion failed: Completion Record is not of type "normal"'); } return SLOT.get(this, '[[Value]]'); }; module.exports = CompletionRecord; ljharb-es-abstract-babee05/2025/CopyDataProperties.js000066400000000000000000000037031516525472400224540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var OwnPropertyKeys = require('own-keys'); var forEach = require('../helpers/forEach'); var every = require('../helpers/every'); var some = require('../helpers/some'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToNumber = require('./ToNumber'); var ToObject = require('./ToObject'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-copydataproperties module.exports = function CopyDataProperties(target, source, excludedItems) { if (!isObject(target)) { throw new $TypeError('Assertion failed: "target" must be an Object'); } if (!IsArray(excludedItems) || !every(excludedItems, isPropertyKey)) { throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys'); } if (typeof source === 'undefined' || source === null) { return target; } var from = ToObject(source); var keys = OwnPropertyKeys(from); forEach(keys, function (nextKey) { var excluded = some(excludedItems, function (e) { return SameValue(e, nextKey) === true; }); /* var excluded = false; forEach(excludedItems, function (e) { if (SameValue(e, nextKey) === true) { excluded = true; } }); */ var enumerable = $isEnumerable(from, nextKey) || ( // this is to handle string keys being non-enumerable in older engines typeof source === 'string' && nextKey >= 0 && isInteger(ToNumber(nextKey)) ); if (excluded === false && enumerable) { var propValue = Get(from, nextKey); CreateDataPropertyOrThrow(target, nextKey, propValue); } }); return target; }; ljharb-es-abstract-babee05/2025/CreateAsyncFromSyncIterator.js000066400000000000000000000107251516525472400242710ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $Promise = GetIntrinsic('%Promise%', true); var AsyncFromSyncIteratorContinuation = require('./AsyncFromSyncIteratorContinuation'); var Call = require('./Call'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var Get = require('./Get'); var GetMethod = require('./GetMethod'); var IteratorNext = require('./IteratorNext'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var isIteratorRecord = require('../helpers/records/iterator-record'); var SLOT = require('internal-slot'); var $AsyncFromSyncIteratorPrototype = GetIntrinsic('%AsyncFromSyncIteratorPrototype%', true) || { next: function next(value) { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var argsLength = arguments.length; return new $Promise(function (resolve) { // step 3 var syncIteratorRecord = SLOT.get(O, '[[SyncIteratorRecord]]'); // step 4 var result; if (argsLength > 0) { result = IteratorNext(syncIteratorRecord, value); // step 5.a } else { // step 6 result = IteratorNext(syncIteratorRecord);// step 6.a } resolve(AsyncFromSyncIteratorContinuation(result)); // step 8 }); }, 'return': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var iteratorReturn = GetMethod(syncIterator, 'return'); // step 5 if (typeof iteratorReturn === 'undefined') { // step 7 var iterResult = CreateIteratorResultObject(value, true); // step 7.a Call(resolve, void undefined, [iterResult]); // step 7.b return; } var result; if (valueIsPresent) { // step 8 result = Call(iteratorReturn, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(iteratorReturn, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `return` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result)); // step 12 }); }, 'throw': function () { if (!$Promise) { throw new $SyntaxError('This environment does not support Promises.'); } var O = this; // step 1 SLOT.assert(O, '[[SyncIteratorRecord]]'); // step 2 var valueIsPresent = arguments.length > 0; var value = valueIsPresent ? arguments[0] : void undefined; return new $Promise(function (resolve, reject) { // step 3 var syncIterator = SLOT.get(O, '[[SyncIteratorRecord]]')['[[Iterator]]']; // step 4 var throwMethod = GetMethod(syncIterator, 'throw'); // step 5 if (typeof throwMethod === 'undefined') { // step 7 Call(reject, void undefined, [value]); // step 7.a return; } var result; if (valueIsPresent) { // step 8 result = Call(throwMethod, syncIterator, [value]); // step 8.a } else { // step 9 result = Call(throwMethod, syncIterator); // step 9.a } if (!isObject(result)) { // step 11 Call(reject, void undefined, [new $TypeError('Iterator `throw` method returned a non-object value.')]); // step 11.a return; } resolve(AsyncFromSyncIteratorContinuation(result/* , promiseCapability */)); // step 12 }); } }; // https://262.ecma-international.org/16.0/#sec-createasyncfromsynciterator module.exports = function CreateAsyncFromSyncIterator(syncIteratorRecord) { if (!isIteratorRecord(syncIteratorRecord)) { throw new $TypeError('Assertion failed: `syncIteratorRecord` must be an Iterator Record'); } // var asyncIterator = OrdinaryObjectCreate(%AsyncFromSyncIteratorPrototype%, « [[SyncIteratorRecord]] »); // step 1 var asyncIterator = OrdinaryObjectCreate($AsyncFromSyncIteratorPrototype); SLOT.set(asyncIterator, '[[SyncIteratorRecord]]', syncIteratorRecord); // step 2 var nextMethod = Get(asyncIterator, 'next'); // step 3 return { // steps 3-4 '[[Iterator]]': asyncIterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2025/CreateDataProperty.js000066400000000000000000000013231516525472400224310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty'); // https://262.ecma-international.org/6.0/#sec-createdataproperty module.exports = function CreateDataProperty(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': true, '[[Value]]': V, '[[Writable]]': true }; return OrdinaryDefineOwnProperty(O, P, newDesc); }; ljharb-es-abstract-babee05/2025/CreateDataPropertyOrThrow.js000066400000000000000000000012541516525472400237610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateDataProperty = require('./CreateDataProperty'); var isPropertyKey = require('../helpers/isPropertyKey'); // // https://262.ecma-international.org/14.0/#sec-createdatapropertyorthrow module.exports = function CreateDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var success = CreateDataProperty(O, P, V); if (!success) { throw new $TypeError('unable to create data property'); } }; ljharb-es-abstract-babee05/2025/CreateHTML.js000066400000000000000000000015051516525472400205610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-createhtml module.exports = function CreateHTML(string, tag, attribute, value) { if (typeof tag !== 'string' || typeof attribute !== 'string') { throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings'); } var str = RequireObjectCoercible(string); var S = ToString(str); var p1 = '<' + tag; if (attribute !== '') { var V = ToString(value); var escapedV = $replace(V, /\x22/g, '"'); p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22'; } return p1 + '>' + S + ''; }; ljharb-es-abstract-babee05/2025/CreateIteratorFromClosure.js000066400000000000000000000037501516525472400237730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GeneratorStart = require('./GeneratorStart'); var IsArray = require('./IsArray'); var IsCallable = require('./IsCallable'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var every = require('../helpers/every'); var SLOT = require('internal-slot'); var safeConcat = require('safe-array-concat'); var isObject = require('es-object-atoms/isObject'); var isString = function isString(slot) { return typeof slot === 'string'; }; // https://262.ecma-international.org/16.0/#sec-createiteratorfromclosure module.exports = function CreateIteratorFromClosure(closure, generatorBrand, generatorPrototype) { if (!IsCallable(closure)) { throw new $TypeError('`closure` must be a function'); } if (typeof generatorBrand !== 'string') { throw new $TypeError('`generatorBrand` must be a string'); } if (!isObject(generatorPrototype)) { throw new $TypeError('`generatorPrototype` must be an object'); } var extraSlots = arguments.length > 3 ? arguments[3] : []; // step 2 if (arguments.length > 3) { if (!IsArray(extraSlots) || !every(extraSlots, isString)) { throw new $TypeError('`extraSlots` must be a List of String internal slot names'); } } var internalSlotsList = safeConcat(extraSlots, ['[[GeneratorContext]]', '[[GeneratorBrand]]', '[[GeneratorState]]']); // step 3 var generator = OrdinaryObjectCreate(generatorPrototype, internalSlotsList); // steps 4, 6 SLOT.set(generator, '[[GeneratorBrand]]', generatorBrand); // step 5 SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-START'); // step 6 SLOT.assert(closure, '[[Sentinel]]'); // our userland slot SLOT.set(generator, '[[Sentinel]]', SLOT.get(closure, '[[Sentinel]]')); // our userland slot SLOT.assert(closure, '[[CloseIfAbrupt]]'); // our second userland slot SLOT.set(generator, '[[CloseIfAbrupt]]', SLOT.get(closure, '[[CloseIfAbrupt]]')); // our second userland slot GeneratorStart(generator, closure); // step 14 return generator; // step 16 }; ljharb-es-abstract-babee05/2025/CreateIteratorResultObject.js000066400000000000000000000005421516525472400241340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/16.0/#sec-createiterresultobject module.exports = function CreateIteratorResultObject(value, done) { if (typeof done !== 'boolean') { throw new $TypeError('Assertion failed: Type(done) is not Boolean'); } return { value: value, done: done }; }; ljharb-es-abstract-babee05/2025/CreateListFromArrayLike.js000066400000000000000000000023731516525472400233640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/16.0/#sec-createlistfromarraylike module.exports = function CreateListFromArrayLike(obj) { var validElementTypes = arguments.length > 1 ? arguments[1] : 'ALL'; // step 1 if (validElementTypes !== 'ALL' && validElementTypes !== 'PROPERTY-KEY') { throw new $TypeError('Assertion failed: `validElementType` must be ~ALL~ or ~PROPERTY-KEY~'); } if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); // step 2 } var len = LengthOfArrayLike(obj); // step 3 var list = []; // step 4 var index = 0; // step 5 while (index < len) { // step 6 var indexName = ToString(index); // step 6.a var next = Get(obj, indexName); // step 6.b if (validElementTypes === 'PROPERTY-KEY' && !isPropertyKey(next)) { throw new $TypeError('item ' + indexName + ' is not a valid property key'); // step 6.c } list[list.length] = next; // step 6.d index += 1; // step 6.e } return list; // step 7 }; ljharb-es-abstract-babee05/2025/CreateNonEnumerableDataPropertyOrThrow.js000066400000000000000000000013641516525472400264360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow module.exports = function CreateNonEnumerableDataPropertyOrThrow(O, P, V) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var newDesc = { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': V, '[[Writable]]': true }; return DefinePropertyOrThrow(O, P, newDesc); }; ljharb-es-abstract-babee05/2025/CreateRegExpStringIterator.js000066400000000000000000000065771516525472400241260ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var DefineMethodProperty = require('./DefineMethodProperty'); var Get = require('./Get'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var RegExpExec = require('./RegExpExec'); var Set = require('./Set'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var SLOT = require('internal-slot'); var setToStringTag = require('es-set-tostringtag'); var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) { if (typeof S !== 'string') { throw new $TypeError('`S` must be a string'); } if (typeof global !== 'boolean') { throw new $TypeError('`global` must be a boolean'); } if (typeof fullUnicode !== 'boolean') { throw new $TypeError('`fullUnicode` must be a boolean'); } SLOT.set(this, '[[IteratingRegExp]]', R); SLOT.set(this, '[[IteratedString]]', S); SLOT.set(this, '[[Global]]', global); SLOT.set(this, '[[Unicode]]', fullUnicode); SLOT.set(this, '[[Done]]', false); }; if (IteratorPrototype) { RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype); } var RegExpStringIteratorNext = function next() { var O = this; if (!isObject(O)) { throw new $TypeError('receiver must be an object'); } if ( !(O instanceof RegExpStringIterator) || !SLOT.has(O, '[[IteratingRegExp]]') || !SLOT.has(O, '[[IteratedString]]') || !SLOT.has(O, '[[Global]]') || !SLOT.has(O, '[[Unicode]]') || !SLOT.has(O, '[[Done]]') ) { throw new $TypeError('"this" value must be a RegExpStringIterator instance'); } if (SLOT.get(O, '[[Done]]')) { return CreateIteratorResultObject(void undefined, true); } var R = SLOT.get(O, '[[IteratingRegExp]]'); var S = SLOT.get(O, '[[IteratedString]]'); var global = SLOT.get(O, '[[Global]]'); var fullUnicode = SLOT.get(O, '[[Unicode]]'); var match = RegExpExec(R, S); if (match === null) { SLOT.set(O, '[[Done]]', true); return CreateIteratorResultObject(void undefined, true); } if (global) { var matchStr = ToString(Get(match, '0')); if (matchStr === '') { var thisIndex = ToLength(Get(R, 'lastIndex')); var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode); Set(R, 'lastIndex', nextIndex, true); } return CreateIteratorResultObject(match, false); } SLOT.set(O, '[[Done]]', true); return CreateIteratorResultObject(match, false); }; DefineMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext, false); if (hasSymbols) { setToStringTag(RegExpStringIterator.prototype, 'RegExp String Iterator'); if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') { var iteratorFn = function SymbolIterator() { return this; }; DefineMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn, false); } } // https://262.ecma-international.org/15.0/#sec-createregexpstringiterator module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) { // assert R.global === global && R.unicode === fullUnicode? return new RegExpStringIterator(R, S, global, fullUnicode); }; ljharb-es-abstract-babee05/2025/DateFromTime.js000066400000000000000000000017341516525472400212150ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/2025/DateString.js000066400000000000000000000017271516525472400207430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var $isNaN = require('math-intrinsics/isNaN'); var padTimeComponent = require('../helpers/padTimeComponent'); var DateFromTime = require('./DateFromTime'); var MonthFromTime = require('./MonthFromTime'); var WeekDay = require('./WeekDay'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/9.0/#sec-datestring module.exports = function DateString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var weekday = weekdays[WeekDay(tv)]; var month = months[MonthFromTime(tv)]; var day = padTimeComponent(DateFromTime(tv)); var year = padTimeComponent(YearFromTime(tv), 4); return weekday + '\x20' + month + '\x20' + day + '\x20' + year; }; ljharb-es-abstract-babee05/2025/Day.js000066400000000000000000000003521516525472400174050ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/2025/DayFromYear.js000066400000000000000000000004001516525472400210440ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/2025/DayWithinYear.js000066400000000000000000000004361516525472400214140ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/2025/DaysInYear.js000066400000000000000000000004551516525472400207040ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/2025/DefineMethodProperty.js000066400000000000000000000027411516525472400227740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/13.0/#sec-definemethodproperty module.exports = function DefineMethodProperty(homeObject, key, closure, enumerable) { if (!isObject(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an Object'); } if (!isPropertyKey(key)) { throw new $TypeError('Assertion failed: `key` is not a Property Key or a Private Name'); } if (typeof closure !== 'function') { throw new $TypeError('Assertion failed: `closure` is not a function'); } if (typeof enumerable !== 'boolean') { throw new $TypeError('Assertion failed: `enumerable` is not a Boolean'); } // 1. Assert: homeObject is an ordinary, extensible object with no non-configurable properties. if (!IsExtensible(homeObject)) { throw new $TypeError('Assertion failed: `homeObject` is not an ordinary, extensible object, with no non-configurable properties'); } // 2. If key is a Private Name, then // a. Return PrivateElement { [[Key]]: key, [[Kind]]: method, [[Value]]: closure }. // 3. Else, var desc = { // step 3.a '[[Value]]': closure, '[[Writable]]': true, '[[Enumerable]]': enumerable, '[[Configurable]]': true }; DefinePropertyOrThrow(homeObject, key, desc); // step 3.b }; ljharb-es-abstract-babee05/2025/DefinePropertyOrThrow.js000066400000000000000000000022221516525472400231520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-definepropertyorthrow module.exports = function DefinePropertyOrThrow(O, P, desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } var Desc = isPropertyDescriptor(desc) ? desc : ToPropertyDescriptor(desc); if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor'); } return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); }; ljharb-es-abstract-babee05/2025/DeletePropertyOrThrow.js000066400000000000000000000012301516525472400231600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow module.exports = function DeletePropertyOrThrow(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // eslint-disable-next-line no-param-reassign var success = delete O[P]; if (!success) { throw new $TypeError('Attempt to delete property failed.'); } return success; }; ljharb-es-abstract-babee05/2025/DetachArrayBuffer.js000066400000000000000000000032571516525472400222200ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var MessageChannel; try { // eslint-disable-next-line global-require MessageChannel = require('worker_threads').MessageChannel; } catch (e) { /**/ } // https://262.ecma-international.org/9.0/#sec-detacharraybuffer /* globals postMessage */ module.exports = function DetachArrayBuffer(arrayBuffer) { if (!isArrayBuffer(arrayBuffer) || isSharedArrayBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot, and not a Shared Array Buffer'); } // commented out since there's no way to set or access this key // var key = arguments.length > 1 ? arguments[1] : void undefined; // if (!SameValue(arrayBuffer[[ArrayBufferDetachKey]], key)) { // throw new $TypeError('Assertion failed: `key` must be the value of the [[ArrayBufferDetachKey]] internal slot of `arrayBuffer`'); // } if (!IsDetachedBuffer(arrayBuffer)) { // node v21.0.0+ throws when you structuredClone a detached buffer if (typeof structuredClone === 'function') { structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); } else if (typeof postMessage === 'function') { postMessage('', '/', [arrayBuffer]); // TODO: see if this might trigger listeners } else if (MessageChannel) { (new MessageChannel()).port1.postMessage(null, [arrayBuffer]); } else { throw new $SyntaxError('DetachArrayBuffer is not supported in this environment'); } } return null; }; ljharb-es-abstract-babee05/2025/EncodeForRegExpEscape.js000066400000000000000000000040571516525472400227760ustar00rootroot00000000000000'use strict'; var NumberToString = require('./Number/toString'); var StringIndexOf = require('./StringIndexOf'); var StringPad = require('./StringPad'); // var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $TypeError = require('es-errors/type'); var isCodePoint = require('../helpers/isCodePoint'); var forEach = require('for-each'); var regexTester = require('safe-regex-test'); var isWhiteSpace = regexTester(/^\s$/); var isLineTerminator = regexTester(/^[\n\r\u2028\u2029]$/); // var punctuators = "(){}[]|,.?*+-^$=<>/#&!%:;@~'`\"\\"; // step 1 var syntaxCharacter = '^$\\.*+?()[]{}|'; var otherPunctuators = ",-=<>#&!%:;@~'`\""; // step 3 // var toEscape = StringToCodePoints(otherPunctuators); // step 4 var table64 = { '\u0009': 't', '\u000a': 'n', '\u000b': 'v', '\u000c': 'f', '\u000d': 'r', __proto__: null }; module.exports = function EncodeForRegExpEscape(c) { if (!isCodePoint(c)) { throw new $TypeError('Assertion failed: `c` must be a valid Unicode code point'); } var encoded = UTF16EncodeCodePoint(c); if (StringIndexOf(syntaxCharacter, encoded, 0) > -1 || encoded === '\u002F') { // step 1 return '\\' + encoded; // step 1.a } else if (encoded in table64) { // step 2 return '\\' + table64[encoded]; // step 2.a } if ( StringIndexOf(otherPunctuators, encoded, 0) > -1 || isWhiteSpace(encoded) || isLineTerminator(encoded) || isLeadingSurrogate(c) || isTrailingSurrogate(c) ) { // step 5 if (c < 0xFF) { // step 5.a var hex = NumberToString(c, 16); // step 5.a.i return '\\x' + StringPad(hex, 2, '0', 'START'); // step 5.a.ii } var escaped = ''; // step 5.b var codeUnits = encoded; // step 5.c forEach(codeUnits, function (cu) { // step 5.d escaped += UnicodeEscape(cu); // step 5.d.i }); return escaped; // step 5.e } return encoded; // step 6 }; ljharb-es-abstract-babee05/2025/EnumerableOwnProperties.js000066400000000000000000000017541516525472400235170ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var objectKeys = require('object-keys'); var safePushApply = require('safe-push-apply'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-enumerableownproperties module.exports = function EnumerableOwnProperties(O, kind) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var keys = objectKeys(O); if (kind === 'key') { return keys; } if (kind === 'value' || kind === 'key+value') { var results = []; forEach(keys, function (key) { if ($isEnumerable(O, key)) { safePushApply(results, [ kind === 'value' ? O[key] : [key, O[key]] ]); } }); return results; } throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind); }; ljharb-es-abstract-babee05/2025/FindViaPredicate.js000066400000000000000000000027741516525472400220430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); var IsCallable = require('./IsCallable'); var ToString = require('./ToString'); // https://262.ecma-international.org/15.0/#sec-findviapredicate module.exports = function FindViaPredicate(O, len, direction, predicate, thisArg) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: len must be a non-negative integer'); } if (direction !== 'ascending' && direction !== 'descending' && direction !== 'DESCENDING' && direction !== 'ASCENDING') { throw new $TypeError('Assertion failed: direction must be ~ASCENDING~ or ~DESCENDING~'); } if (!IsCallable(predicate)) { throw new $TypeError('predicate must be callable'); // step 1 } for ( // steps 2-4 var k = direction === 'ascending' || direction === 'ASCENDING' ? 0 : len - 1; direction === 'ascending' || direction === 'ASCENDING' ? k < len : k >= 0; k += 1 ) { var Pk = ToString(k); // step 4.a var kValue = Get(O, Pk); // step 4.c var testResult = Call(predicate, thisArg, [kValue, k, O]); // step 4.d if (ToBoolean(testResult)) { return { '[[Index]]': k, '[[Value]]': kValue }; // step 4.e } } return { '[[Index]]': -1, '[[Value]]': void undefined }; // step 5 }; ljharb-es-abstract-babee05/2025/FlattenIntoArray.js000066400000000000000000000032201516525472400221130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var Call = require('./Call'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); // https://262.ecma-international.org/11.0/#sec-flattenintoarray module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) { var mapperFunction; if (arguments.length > 5) { mapperFunction = arguments[5]; } var targetIndex = start; var sourceIndex = 0; while (sourceIndex < sourceLen) { var P = ToString(sourceIndex); var exists = HasProperty(source, P); if (exists === true) { var element = Get(source, P); if (typeof mapperFunction !== 'undefined') { if (arguments.length <= 6) { throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided'); } element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]); } var shouldFlatten = false; if (depth > 0) { shouldFlatten = IsArray(element); } if (shouldFlatten) { var elementLen = LengthOfArrayLike(element); targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1); } else { if (targetIndex >= MAX_SAFE_INTEGER) { throw new $TypeError('index too large'); } CreateDataPropertyOrThrow(target, ToString(targetIndex), element); targetIndex += 1; } } sourceIndex += 1; } return targetIndex; }; ljharb-es-abstract-babee05/2025/FromPropertyDescriptor.js000066400000000000000000000010301516525472400233710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var fromPropertyDescriptor = require('../helpers/fromPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-frompropertydescriptor module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc !== 'undefined' && !isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } return fromPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/2025/GeneratorResume.js000066400000000000000000000016221516525472400220000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var GeneratorValidate = require('./GeneratorValidate'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/16.0/#sec-generatorresume module.exports = function GeneratorResume(generator, value, generatorBrand) { var state = GeneratorValidate(generator, generatorBrand); // step 1 if (state === 'COMPLETED') { return CreateIteratorResultObject(void undefined, true); // step 2 } if (state !== 'SUSPENDED-START' && state !== 'SUSPENDED-YIELD') { throw new $TypeError('Assertion failed: generator state is unexpected: ' + state); // step 3 } var genContext = SLOT.get(generator, '[[GeneratorContext]]'); SLOT.set(generator, '[[GeneratorState]]', 'EXECUTING'); // step 7 var result = genContext(value); // steps 5-6, 8-10 return result; }; ljharb-es-abstract-babee05/2025/GeneratorResumeAbrupt.js000066400000000000000000000036571516525472400231700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CompletionRecord = require('./CompletionRecord'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var GeneratorValidate = require('./GeneratorValidate'); var NormalCompletion = require('./NormalCompletion'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/16.0/#sec-generatorresumeabrupt module.exports = function GeneratorResumeAbrupt(generator, abruptCompletion, generatorBrand) { if ( !(abruptCompletion instanceof CompletionRecord) || (abruptCompletion.type() !== 'return' && abruptCompletion.type() !== 'throw') ) { throw new $TypeError('Assertion failed: abruptCompletion must be a `return` or `throw` Completion Record'); } var state = GeneratorValidate(generator, generatorBrand); // step 1 if (state === 'SUSPENDED-START') { // step 2 SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); // step 2.a SLOT.set(generator, '[[GeneratorContext]]', null); // step 2.b state = 'COMPLETED'; // step 2.c } var value = abruptCompletion.value(); if (state === 'COMPLETED') { // step 3 if (abruptCompletion.type() === 'return') { // step 3.a return CreateIteratorResultObject(value, true); // step 3.a.i } return abruptCompletion['?'](); // step 3.b } if (state !== 'SUSPENDED-YIELD') { throw new $TypeError('Assertion failed: generator state is unexpected: ' + state); // step 4 } var genContext = SLOT.get(generator, '[[GeneratorContext]]'); // step 5 SLOT.set(generator, '[[GeneratorState]]', 'EXECUTING'); // step 8 if (abruptCompletion.type() === 'return') { // due to representing `GeneratorContext` as a function, we can't safely re-invoke it, so we can't support sending it a return completion return CreateIteratorResultObject(SLOT.get(generator, '[[CloseIfAbrupt]]')(NormalCompletion(value)), true); } var result = genContext(value); // steps 6-7, 9-11 return result; // step 12 }; ljharb-es-abstract-babee05/2025/GeneratorStart.js000066400000000000000000000031301516525472400216310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CreateIteratorResultObject = require('./CreateIteratorResultObject'); var IsCallable = require('./IsCallable'); var SLOT = require('internal-slot'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/16.0/#sec-generatorstart module.exports = function GeneratorStart(generator, closure) { SLOT.assert(generator, '[[GeneratorState]]'); SLOT.assert(generator, '[[GeneratorContext]]'); SLOT.assert(generator, '[[GeneratorBrand]]'); SLOT.assert(generator, '[[Sentinel]]'); // our userland slot SLOT.assert(generator, '[[CloseIfAbrupt]]'); // our second userland slot if (!IsCallable(closure) || closure.length !== 0) { throw new $TypeError('`closure` must be a function that takes no arguments'); } var sentinel = SLOT.get(closure, '[[Sentinel]]'); if (!isObject(sentinel)) { throw new $TypeError('`closure.[[Sentinel]]` must be an object'); } SLOT.set(generator, '[[GeneratorContext]]', function () { // steps 2-5 try { var result = closure(); if (result === sentinel) { SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); SLOT.set(generator, '[[GeneratorContext]]', null); return CreateIteratorResultObject(void undefined, true); } SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-YIELD'); return CreateIteratorResultObject(result, false); } catch (e) { SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); SLOT.set(generator, '[[GeneratorContext]]', null); throw e; } }); SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-START'); // step 6 }; ljharb-es-abstract-babee05/2025/GeneratorValidate.js000066400000000000000000000013771516525472400223000ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SLOT = require('internal-slot'); // https://262.ecma-international.org/16.0/#sec-generatorvalidate module.exports = function GeneratorValidate(generator, generatorBrand) { SLOT.assert(generator, '[[GeneratorState]]'); // step 1 SLOT.assert(generator, '[[GeneratorBrand]]'); // step 2 var brand = SLOT.get(generator, '[[GeneratorBrand]]'); if (brand !== generatorBrand) { throw new $TypeError('Assertion failed: generator brand is unexpected: ' + brand); } SLOT.assert(generator, '[[GeneratorContext]]'); // step 4 var state = SLOT.get(generator, '[[GeneratorState]]'); // step 5 if (state === 'EXECUTING') { throw new $TypeError('generator is executing'); } return state; // step 7 }; ljharb-es-abstract-babee05/2025/Get.js000066400000000000000000000010701516525472400174050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-get-o-p module.exports = function Get(O, P) { // 7.3.1.1 if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } // 7.3.1.2 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.1.3 return O[P]; }; ljharb-es-abstract-babee05/2025/GetArrayBufferMaxByteLengthOption.js000066400000000000000000000010231516525472400253610ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToIndex = require('./ToIndex'); // https://262.ecma-international.org/15.0/#sec-getarraybuffermaxbytelengthoption module.exports = function GetArrayBufferMaxByteLengthOption(options) { if (!isObject(options)) { return 'EMPTY'; // step 1 } var maxByteLength = Get(options, 'maxByteLength'); // step 2 if (typeof maxByteLength === 'undefined') { return 'EMPTY'; // step 3 } return ToIndex(maxByteLength); // step 4 }; ljharb-es-abstract-babee05/2025/GetGlobalObject.js000066400000000000000000000003061516525472400216560ustar00rootroot00000000000000'use strict'; var getGlobal = require('globalthis/polyfill'); // https://262.ecma-international.org/6.0/#sec-getglobalobject module.exports = function GetGlobalObject() { return getGlobal(); }; ljharb-es-abstract-babee05/2025/GetIterator.js000066400000000000000000000033151516525472400211230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true); var inspect = require('object-inspect'); var hasSymbols = require('has-symbols')(); var AdvanceStringIndex = require('./AdvanceStringIndex'); var CreateAsyncFromSyncIterator = require('./CreateAsyncFromSyncIterator'); var GetIteratorFromMethod = require('./GetIteratorFromMethod'); var GetMethod = require('./GetMethod'); var ES = { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod }; var getIteratorMethod = require('../helpers/getIteratorMethod'); // https://262.ecma-international.org/14.0/#sec-getiterator module.exports = function GetIterator(obj, kind) { if (kind !== 'SYNC' && kind !== 'ASYNC') { throw new $TypeError("Assertion failed: `kind` must be one of 'sync' or 'async', got " + inspect(kind)); } var method; if (kind === 'ASYNC') { // step 1 if (hasSymbols && $asyncIterator) { method = GetMethod(obj, $asyncIterator); // step 1.a } } if (typeof method === 'undefined') { // step 1.b // var syncMethod = GetMethod(obj, $iterator); // step 1.b.i var syncMethod = getIteratorMethod(ES, obj); if (kind === 'ASYNC') { if (typeof syncMethod === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 1.b.ii } var syncIteratorRecord = GetIteratorFromMethod(obj, syncMethod); // step 1.b.iii return CreateAsyncFromSyncIterator(syncIteratorRecord); // step 1.b.iv } method = syncMethod; // step 2, kind of } if (typeof method === 'undefined') { throw new $TypeError('iterator method is `undefined`'); // step 3 } return GetIteratorFromMethod(obj, method); // step 4 }; ljharb-es-abstract-babee05/2025/GetIteratorDirect.js000066400000000000000000000010511516525472400222510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/16.0/#sec-getiteratordirect module.exports = function GetIteratorDirect(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } var nextMethod = Get(obj, 'next'); // step 1 var iteratorRecord = { '[[Iterator]]': obj, '[[NextMethod]]': nextMethod, '[[Done]]': false }; // step 2 return iteratorRecord; // step 3 }; ljharb-es-abstract-babee05/2025/GetIteratorFlattenable.js000066400000000000000000000026541516525472400232720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var AdvanceStringIndex = require('./AdvanceStringIndex'); var Call = require('./Call'); var GetIteratorDirect = require('./GetIteratorDirect'); var GetMethod = require('./GetMethod'); var IsArray = require('./IsArray'); var getIteratorMethod = require('../helpers/getIteratorMethod'); // https://262.ecma-international.org/16.0/#sec-getiteratorflattenable module.exports = function GetIteratorFlattenable(obj, primitiveHandling) { if (primitiveHandling !== 'REJECT-PRIMITIVES' && primitiveHandling !== 'ITERATE-STRING-PRIMITIVES') { throw new $TypeError('Assertion failed: `stringHandling` must be "REJECT-PRIMITIVES" or "ITERATE-STRING-PRIMITIVES"'); } if (!isObject(obj)) { if (primitiveHandling === 'REJECT-PRIMITIVES' || typeof obj !== 'string') { throw new $TypeError('obj must be an Object'); // step 1.a } } // var method = GetMethod(obj, Symbol.iterator); // step 2 var method = getIteratorMethod( { AdvanceStringIndex: AdvanceStringIndex, GetMethod: GetMethod, IsArray: IsArray }, obj ); var iterator; if (typeof method === 'undefined') { // step 3 iterator = obj; // step 3.a } else { // step 4 iterator = Call(method, obj); // step 4.a } if (!isObject(iterator)) { throw new $TypeError('iterator must be an Object'); // step 5 } return GetIteratorDirect(iterator); // step 6 }; ljharb-es-abstract-babee05/2025/GetIteratorFromMethod.js000066400000000000000000000013421516525472400231060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/15.0/#sec-getiteratorfrommethod module.exports = function GetIteratorFromMethod(obj, method) { if (!IsCallable(method)) { throw new $TypeError('method must be a function'); } var iterator = Call(method, obj); // step 1 if (!isObject(iterator)) { throw new $TypeError('iterator must return an object'); // step 2 } var nextMethod = Get(iterator, 'next'); // step 3 return { // steps 4-5 '[[Iterator]]': iterator, '[[NextMethod]]': nextMethod, '[[Done]]': false }; }; ljharb-es-abstract-babee05/2025/GetMatchIndexPair.js000066400000000000000000000015051516525472400221710ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function GetMatchIndexPair(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return [match['[[StartIndex]]'], match['[[EndIndex]]']]; }; ljharb-es-abstract-babee05/2025/GetMatchString.js000066400000000000000000000015641516525472400215610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isMatchRecord = require('../helpers/records/match-record'); // https://262.ecma-international.org/13.0/#sec-getmatchstring module.exports = function GetMatchString(S, match) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isMatchRecord(match)) { throw new $TypeError('Assertion failed: `match` must be a Match Record'); } if (!(match['[[StartIndex]]'] <= S.length)) { throw new $TypeError('`match` [[StartIndex]] must be a non-negative integer <= the length of S'); } if (!(match['[[EndIndex]]'] <= S.length)) { throw new $TypeError('`match` [[EndIndex]] must be an integer between [[StartIndex]] and the length of S, inclusive'); } return substring(S, match['[[StartIndex]]'], match['[[EndIndex]]']); }; ljharb-es-abstract-babee05/2025/GetMethod.js000066400000000000000000000012541516525472400205520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetV = require('./GetV'); var IsCallable = require('./IsCallable'); var isPropertyKey = require('../helpers/isPropertyKey'); var inspect = require('object-inspect'); // https://262.ecma-international.org/6.0/#sec-getmethod module.exports = function GetMethod(O, P) { // 7.3.9.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } // 7.3.9.2 var func = GetV(O, P); // 7.3.9.4 if (func == null) { return void 0; } // 7.3.9.5 if (!IsCallable(func)) { throw new $TypeError(inspect(P) + ' is not a function: ' + inspect(func)); } // 7.3.9.6 return func; }; ljharb-es-abstract-babee05/2025/GetNamedTimeZoneEpochNanoseconds.js000066400000000000000000000045721516525472400252110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetUTCEpochNanoseconds = require('./GetUTCEpochNanoseconds'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/14.0/#sec-getnamedtimezoneepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetNamedTimeZoneEpochNanoseconds( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (typeof timeZoneIdentifier !== 'string') { throw new $TypeError('Assertion failed: `timeZoneIdentifier` must be a string'); } if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 999) { throw new $TypeError('Assertion failed: `second` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral number between 0 and 999, inclusive'); } if (timeZoneIdentifier !== 'UTC') { throw new $TypeError('Assertion failed: only UTC time zone is supported'); // step 1 } var epochNanoseconds = GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ); // step 2 return [epochNanoseconds]; // step 3 }; ljharb-es-abstract-babee05/2025/GetOwnPropertyKeys.js000066400000000000000000000014771516525472400225050ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasSymbols = require('has-symbols')(); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%', true); var keys = require('object-keys'); // https://262.ecma-international.org/6.0/#sec-getownpropertykeys module.exports = function GetOwnPropertyKeys(O, Type) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (Type === 'Symbol') { return $gOPS ? $gOPS(O) : []; } if (Type === 'String') { if (!$gOPN) { return keys(O); } return $gOPN(O); } throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); }; ljharb-es-abstract-babee05/2025/GetPromiseResolve.js000066400000000000000000000011771516525472400223140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/12.0/#sec-getpromiseresolve module.exports = function GetPromiseResolve(promiseConstructor) { if (!IsConstructor(promiseConstructor)) { throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor'); } var promiseResolve = Get(promiseConstructor, 'resolve'); if (IsCallable(promiseResolve) === false) { throw new $TypeError('`resolve` method is not callable'); } return promiseResolve; }; ljharb-es-abstract-babee05/2025/GetPrototypeFromConstructor.js000066400000000000000000000020661516525472400244330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Function = GetIntrinsic('%Function%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var Get = require('./Get'); var IsConstructor = require('./IsConstructor'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) { var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic if (!isObject(intrinsic)) { throw new $TypeError('intrinsicDefaultProto must be an object'); } if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } var proto = Get(constructor, 'prototype'); if (!isObject(proto)) { if (!(constructor instanceof $Function)) { // ignore other realms, for now throw new $SyntaxError('cross-realm constructors not currently supported'); } proto = intrinsic; } return proto; }; ljharb-es-abstract-babee05/2025/GetSetRecord.js000066400000000000000000000032541516525472400212260ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var ToNumber = require('./ToNumber'); var isNaN = require('..//helpers/isNaN'); var isObject = require('es-object-atoms/isObject'); var callBind = require('call-bind'); var isSet = require('is-set'); var stopIterationIterator = require('stop-iteration-iterator'); // https://262.ecma-international.org/16.0/#sec-getsetrecord module.exports = function GetSetRecord(obj) { if (!isObject(obj)) { throw new $TypeError('obj is not an Object'); // step 1 } var rawSize = Get(obj, 'size'); // step 2 var numSize = ToNumber(rawSize); // step 3 // 4. NOTE: If rawSize is undefined, then numSize will be NaN. if (isNaN(numSize)) { throw new $TypeError('`size` is not a non-NaN Number'); // step 5 } var intSize = ToIntegerOrInfinity(numSize); // step 6 if (intSize < 0) { throw new $RangeError('set size must be non-negative'); // step 7 } var has = Get(obj, 'has'); // step 8 if (!IsCallable(has)) { throw new $TypeError('has is not a function'); // step 9 } var keys = Get(obj, 'keys'); // step 10 if (!IsCallable(keys)) { throw new $TypeError('keys is not a function'); // step 11 } /* globals StopIteration: false */ if (isSet(obj) && typeof StopIteration === 'object') { var boundKeys = callBind(keys); keys = function keys() { // eslint-disable-line no-shadow return stopIterationIterator(boundKeys(this)); }; } return { '[[SetObject]]': obj, '[[Size]]': intSize, '[[Has]]': has, '[[Keys]]': keys }; // step 12 }; ljharb-es-abstract-babee05/2025/GetStringIndex.js000066400000000000000000000013701516525472400215670ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var StringToCodePoints = require('./StringToCodePoints'); var $indexOf = callBound('String.prototype.indexOf'); // https://262.ecma-international.org/13.0/#sec-getstringindex module.exports = function GetStringIndex(S, e) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(e) || e < 0) { throw new $TypeError('Assertion failed: `e` must be a non-negative integer'); } if (S === '') { return 0; } var codepoints = StringToCodePoints(S); var eUTF = e >= codepoints.length ? S.length : $indexOf(S, codepoints[e]); return eUTF; }; ljharb-es-abstract-babee05/2025/GetSubstitution.js000066400000000000000000000135321516525472400220500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var regexTester = require('safe-regex-test'); var Get = require('./Get'); var IsArray = require('./IsArray'); var min = require('./min'); var StringIndexOf = require('./StringIndexOf'); var StringToNumber = require('./StringToNumber'); var substring = require('./substring'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isPrefixOf = require('../helpers/isPrefixOf'); var isStringOrUndefined = require('../helpers/isStringOrUndefined'); var startsWithDollarDigit = regexTester(/^\$[0-9]/); var startsWithDollarTwoDigit = regexTester(/^\$[0-9][0-9]/); // http://www.ecma-international.org/ecma-262/15.0/#sec-getsubstitution // eslint-disable-next-line max-statements, max-params, max-lines-per-function module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacementTemplate) { if (typeof matched !== 'string') { throw new $TypeError('Assertion failed: `matched` must be a String'); } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `str` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, got ' + inspect(position)); } if (!IsArray(captures) || !every(captures, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings or `undefined`, got ' + inspect(captures)); } if (typeof namedCaptures !== 'undefined' && !isObject(namedCaptures)) { throw new $TypeError('Assertion failed: `namedCaptures` must be `undefined` or an Object'); } if (typeof replacementTemplate !== 'string') { throw new $TypeError('Assertion failed: `replacementTemplate` must be a String'); } var stringLength = str.length; // step 1 if (position > stringLength) { throw new $TypeError('Assertion failed: position > stringLength, got ' + inspect(position)); // step 2 } var templateRemainder = replacementTemplate; // step 3 var result = ''; // step 4 while (templateRemainder !== '') { // step 5 // 5.a NOTE: The following steps isolate ref (a prefix of templateRemainder), determine refReplacement (its replacement), and then append that replacement to result. var ref, refReplacement, capture; if (isPrefixOf('$$', templateRemainder)) { // step 5.b ref = '$$'; // step 5.b.i refReplacement = '$'; // step 5.b.ii } else if (isPrefixOf('$`', templateRemainder)) { // step 5.c ref = '$`'; // step 5.c.i refReplacement = substring(str, 0, position); // step 5.c.ii } else if (isPrefixOf('$&', templateRemainder)) { // step 5.d ref = '$&'; // step 5.d.i refReplacement = matched; // step 5.d.ii } else if (isPrefixOf('$\'', templateRemainder)) { // step 5.e ref = '$\''; // step 5.e.i var matchLength = matched.length; // step 5.e.ii var tailPos = position + matchLength; // step 5.e.iii refReplacement = substring(str, min(tailPos, stringLength)); // step 5.e.iv // 5.e.v NOTE: tailPos can exceed stringLength only if this abstract operation was invoked by a call to the intrinsic @@replace method of %RegExp.prototype% on an object whose "exec" property is not the intrinsic %RegExp.prototype.exec%. } else if (startsWithDollarDigit(templateRemainder)) { // step 5.f var digitCount = startsWithDollarTwoDigit(templateRemainder) ? 2 : 1; // step 5.f.i var digits = substring(templateRemainder, 1, 1 + digitCount); // step 5.f.ii var index = StringToNumber(digits); // step 5.f.iii if (index < 0 || index > 99) { throw new $TypeError('Assertion failed: `index` must be >= 0 and <= 99'); // step 5.f.iv } var captureLen = captures.length; // step 5.f.v if (index > captureLen && digitCount === 2) { // step 5.f.vi // 1. NOTE: When a two-digit replacement pattern specifies an index exceeding the count of capturing groups, it is treated as a one-digit replacement pattern followed by a literal digit. digitCount = 1; // step 5.f.vi.2 digits = substring(digits, 0, 1); // step 5.f.vi.3 index = StringToNumber(digits); // step 5.f.vi.4 } ref = substring(templateRemainder, 0, 1 + digitCount); // step 5.f.vii if (1 <= index && index <= captureLen) { // step 5.f.viii capture = captures[index - 1]; // step 5.f.viii.1 if (typeof capture === 'undefined') { // step 5.f.viii.2 refReplacement = ''; // step 5.f.viii.2.a } else { // step 5.f.viii.3 refReplacement = capture; // step 5.f.viii.3.a } } else { // step 5.f.ix refReplacement = ref; // step 5.f.ix.1 } } else if (isPrefixOf('$<', templateRemainder)) { // step 5.g var gtPos = StringIndexOf(templateRemainder, '>', 0); // step 5.g.i if (!(gtPos > -1) || typeof namedCaptures === 'undefined') { // step 5.g.ii ref = '$<'; // step 5.g.ii.1 refReplacement = ref; // step 5.g.ii.2 } else { // step 5.g.iii ref = substring(templateRemainder, 0, gtPos + 1); // step 5.g.iii.1 var groupName = substring(templateRemainder, 2, gtPos); // step 5.g.iii.2 if (!isObject(namedCaptures)) { throw new $TypeError('Assertion failed: Type(namedCaptures) is not Object'); // step 5.g.iii.3 } capture = Get(namedCaptures, groupName); // step 5.g.iii.4 if (typeof capture === 'undefined') { // step 5.g.iii.5 refReplacement = ''; // step 5.g.iii.5.a } else { // step 5.g.iii.6 refReplacement = ToString(capture); // step 5.g.iii.6.a } } } else { // step 5.h ref = substring(templateRemainder, 0, 1); // step 5.h.i refReplacement = ref; // step 5.h.ii } var refLength = ref.length; // step 5.i templateRemainder = substring(templateRemainder, refLength); // step 5.j result += refReplacement; // step 5.k } return result; // step 6 }; ljharb-es-abstract-babee05/2025/GetUTCEpochNanoseconds.js000066400000000000000000000047761516525472400231530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var MakeDay = require('./MakeDay'); var MakeTime = require('./MakeTime'); var MakeDate = require('./MakeDate'); var isInteger = require('math-intrinsics/isInteger'); var $BigInt = GetIntrinsic('%BigInt%', true); var $SyntaxError = GetIntrinsic('%SyntaxError%'); var $TypeError = GetIntrinsic('%TypeError%'); // https://tc39.es/ecma262/#sec-getutcepochnanoseconds // eslint-disable-next-line max-params module.exports = function GetUTCEpochNanoseconds( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond ) { if (!isInteger(year)) { throw new $TypeError('Assertion failed: `year` must be an integral Number'); } if (!isInteger(month) || month < 1 || month > 12) { throw new $TypeError('Assertion failed: `month` must be an integral Number between 1 and 12, inclusive'); } if (!isInteger(day) || day < 1 || day > 31) { throw new $TypeError('Assertion failed: `day` must be an integral Number between 1 and 31, inclusive'); } if (!isInteger(hour) || hour < 0 || hour > 23) { throw new $TypeError('Assertion failed: `hour` must be an integral Number between 0 and 23, inclusive'); } if (!isInteger(minute) || minute < 0 || minute > 59) { throw new $TypeError('Assertion failed: `minute` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(second) || second < 0 || second > 59) { throw new $TypeError('Assertion failed: `second` must be an integral Number between 0 and 59, inclusive'); } if (!isInteger(millisecond) || millisecond < 0 || millisecond > 999) { throw new $TypeError('Assertion failed: `millisecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(microsecond) || microsecond < 0 || microsecond > 999) { throw new $TypeError('Assertion failed: `microsecond` must be an integral Number between 0 and 999, inclusive'); } if (!isInteger(nanosecond) || nanosecond < 0 || nanosecond > 999) { throw new $TypeError('Assertion failed: `nanosecond` must be an integral Number between 0 and 999, inclusive'); } var date = MakeDay(year, month - 1, day); // step 1 var time = MakeTime(hour, minute, second, millisecond); // step 2 var ms = MakeDate(date, time); // step 3 if (!isInteger(ms)) { throw new $TypeError('Assertion failed: `ms` from MakeDate is not an integral Number'); // step 4 } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt((ms * 1e6) + (microsecond * 1e3) + nanosecond); // step 5 }; ljharb-es-abstract-babee05/2025/GetV.js000066400000000000000000000007541516525472400175430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var inspect = require('object-inspect'); var isPropertyKey = require('../helpers/isPropertyKey'); // var ToObject = require('./ToObject'); // https://262.ecma-international.org/6.0/#sec-getv module.exports = function GetV(V, P) { // 7.3.2.1 if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key, got ' + inspect(P)); } // 7.3.2.2-3 // var O = ToObject(V); // 7.3.2.4 return V[P]; }; ljharb-es-abstract-babee05/2025/GetValueFromBuffer.js000066400000000000000000000106571516525472400223730ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var $slice = callBound('Array.prototype.slice'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var RawBytesToNumeric = require('./RawBytesToNumeric'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var safeConcat = require('safe-array-concat'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); // https://262.ecma-international.org/15.0/#sec-getvaluefrombuffer module.exports = function GetValueFromBuffer(arrayBuffer, byteIndex, type, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex)) { throw new $TypeError('Assertion failed: `byteIndex` must be an integer'); } if (typeof type !== 'string' || typeof tableTAO.size['$' + type] !== 'number') { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be either `SEQ-CST` or `UNORDERED`'); } if (arguments.length > 5 && typeof arguments[5] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: `arrayBuffer` is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be non-negative'); // step 3 } // 4. Let block be arrayBuffer.[[ArrayBufferData]]. var elementSize = tableTAO.size['$' + type]; // step 5 if (!elementSize) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } var rawValue; if (isSAB) { // step 6 /* a. Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. b. Let eventList be the [[EventList]] field of the element in execution.[[EventLists]] whose [[AgentSignifier]] is AgentSignifier(). c. If isTypedArray is true and type is "Int8", "Uint8", "Int16", "Uint16", "Int32", or "Uint32", let noTear be true; otherwise let noTear be false. d. Let rawValue be a List of length elementSize of nondeterministically chosen byte values. e. NOTE: In implementations, rawValue is the result of a non-atomic or atomic read instruction on the underlying hardware. The nondeterminism is a semantic prescription of the memory model to describe observable behaviour of hardware with weak consistency. f. Let readEvent be ReadSharedMemory{ [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize }. g. Append readEvent to eventList. h. Append Chosen Value Record { [[Event]]: readEvent, [[ChosenValue]]: rawValue } to execution.[[ChosenValues]]. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 7. Let rawValue be a List of elementSize containing, in order, the elementSize sequence of bytes starting with block[byteIndex]. rawValue = $slice(new $Uint8Array(arrayBuffer, byteIndex), 0, elementSize); // step 6 } // 8. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the SetValueInBuffer abstract operation. var isLittleEndian = arguments.length > 5 ? arguments[5] : defaultEndianness === 'little'; // step 8 var bytes = isLittleEndian ? $slice(safeConcat([0, 0, 0, 0, 0, 0, 0, 0], rawValue), -elementSize) : $slice(safeConcat(rawValue, [0, 0, 0, 0, 0, 0, 0, 0]), 0, elementSize); return RawBytesToNumeric(type, bytes, isLittleEndian); }; ljharb-es-abstract-babee05/2025/GetViewByteLength.js000066400000000000000000000030521516525472400222300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsViewOutOfBounds = require('./IsViewOutOfBounds'); var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record'); var dataViewBuffer = require('data-view-buffer'); var dataViewByteLength = require('data-view-byte-length'); var dataViewByteOffset = require('data-view-byte-offset'); // https://262.ecma-international.org/15.0/#sec-getviewbytelength module.exports = function GetViewByteLength(viewRecord) { if (!isDataViewWithBufferWitnessRecord(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` must be a DataView with Buffer Witness Record'); } if (IsViewOutOfBounds(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` is out of bounds'); // step 1 } var view = viewRecord['[[Object]]']; // step 2 var isFixed = IsFixedLengthArrayBuffer(dataViewBuffer(view)); var viewByteLength = isFixed ? dataViewByteLength(view) : 'AUTO'; // view.[[ByteLength]] if (viewByteLength !== 'AUTO') { return viewByteLength; // step 3 } if (isFixed) { throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is not fixed length'); // step 4 } var byteOffset = dataViewByteOffset(view); // step 5 var byteLength = viewRecord['[[CachedBufferByteLength]]']; // step 6 if (byteLength === 'DETACHED') { throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is detached'); // step 7 } return byteLength - byteOffset; // step 8 }; ljharb-es-abstract-babee05/2025/GroupBy.js000066400000000000000000000045311516525472400202620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var AddValueToKeyedGroup = require('./AddValueToKeyedGroup'); var Call = require('./Call'); var CanonicalizeKeyedCollectionKey = require('./CanonicalizeKeyedCollectionKey'); var GetIterator = require('./GetIterator'); var IfAbruptCloseIterator = require('./IfAbruptCloseIterator'); var IsCallable = require('./IsCallable'); var IteratorClose = require('./IteratorClose'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ThrowCompletion = require('./ThrowCompletion'); var ToPropertyKey = require('./ToPropertyKey'); var maxSafeInteger = require('../helpers/maxSafeInteger'); // https://262.ecma-international.org/16.0/#sec-groupby module.exports = function GroupBy(items, callbackfn, keyCoercion) { if (keyCoercion !== 'PROPERTY' && keyCoercion !== 'COLLECTION') { throw new $TypeError('Assertion failed: `keyCoercion` must be `"PROPERTY"` or `"COLLECTION"`'); } RequireObjectCoercible(items); // step 1 if (!IsCallable(callbackfn)) { throw new $TypeError('callbackfn must be callable'); // step 2 } var groups = []; // step 3 var iteratorRecord = GetIterator(items, 'SYNC'); // step 4 var k = 0; // step 5 while (true) { // step 6 if (k >= maxSafeInteger) { // step 6.a var error = ThrowCompletion(new $TypeError('k must be less than 2 ** 53 - 1')); // step 6.a.i return IteratorClose(iteratorRecord, error); // step 6.a.ii } var next = IteratorStep(iteratorRecord); // step 6.b if (!next) { // step 6.c return groups; // step 6.c.i } var value = IteratorValue(next); // step 6.dv var key; try { key = Call(callbackfn, void undefined, [value, k]); // step 6.e } catch (e) { IfAbruptCloseIterator(ThrowCompletion(e), iteratorRecord); // step 6.f } if (keyCoercion === 'PROPERTY') { // step 6.g try { key = ToPropertyKey(key); // step 6.g.i } catch (e) { IfAbruptCloseIterator(ThrowCompletion(e), iteratorRecord); // step 6.g.ii } } else { // step 6.h if (keyCoercion !== 'COLLECTION') { throw new $TypeError('keyCoercion must be ~PROPERTY~ or ~COLLECTION~'); // step 6.h.i } key = CanonicalizeKeyedCollectionKey(key); // step 6.h.ii } AddValueToKeyedGroup(groups, key, value); // step 6.i k += 1; // step 6.j } }; ljharb-es-abstract-babee05/2025/HasEitherUnicodeFlag.js000066400000000000000000000010051516525472400226410ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isRegExpRecord = require('../helpers/records/regexp-record'); // https://262.ecma-international.org/15.0/#sec-runtime-semantics-haseitherunicodeflag-abstract-operation module.exports = function HasEitherUnicodeFlag(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (rer['[[Unicode]]'] || rer['[[UnicodeSets]]']) { // step 1 return true; // step 1.a } return false; // step 2 }; ljharb-es-abstract-babee05/2025/HasOwnProperty.js000066400000000000000000000010241516525472400216310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasownproperty module.exports = function HasOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return hasOwn(O, P); }; ljharb-es-abstract-babee05/2025/HasProperty.js000066400000000000000000000007471516525472400211600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-hasproperty module.exports = function HasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2025/HourFromTime.js000066400000000000000000000005761516525472400212600ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/2025/IfAbruptCloseIterator.js000066400000000000000000000011001516525472400230740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CompletionRecord = require('./CompletionRecord'); var IteratorClose = require('./IteratorClose'); // https://262.ecma-international.org/16.0/#sec-ifabruptcloseiterator module.exports = function IfAbruptCloseIterator(value, iteratorRecord) { if (!(value instanceof CompletionRecord)) { throw new $TypeError('Assertion failed: `value` must be a Completion Record'); // step 1 } if (value.type() !== 'normal') { return IteratorClose(iteratorRecord, value); // step 2 } return value['!'](); // step 3 }; ljharb-es-abstract-babee05/2025/InLeapYear.js000066400000000000000000000007161516525472400206650ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/2025/InstallErrorCause.js000066400000000000000000000012271516525472400222730ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var CreateNonEnumerableDataPropertyOrThrow = require('./CreateNonEnumerableDataPropertyOrThrow'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); // https://262.ecma-international.org/13.0/#sec-installerrorcause module.exports = function InstallErrorCause(O, options) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (isObject(options) && HasProperty(options, 'cause')) { var cause = Get(options, 'cause'); CreateNonEnumerableDataPropertyOrThrow(O, 'cause', cause); } }; ljharb-es-abstract-babee05/2025/InstanceofOperator.js000066400000000000000000000016371516525472400225040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $hasInstance = GetIntrinsic('%Symbol.hasInstance%', true); var Call = require('./Call'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var OrdinaryHasInstance = require('./OrdinaryHasInstance'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-instanceofoperator module.exports = function InstanceofOperator(O, C) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0; if (typeof instOfHandler !== 'undefined') { return ToBoolean(Call(instOfHandler, C, [O])); } if (!IsCallable(C)) { throw new $TypeError('`C` is not Callable'); } return OrdinaryHasInstance(C, O); }; ljharb-es-abstract-babee05/2025/InternalizeJSONProperty.js000066400000000000000000000042061516525472400234150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CreateDataProperty = require('./CreateDataProperty'); var EnumerableOwnProperties = require('./EnumerableOwnProperties'); var Get = require('./Get'); var IsArray = require('./IsArray'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var ToString = require('./ToString'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/14.0/#sec-internalizejsonproperty // note: `reviver` was implicitly closed-over until ES2020, where it becomes a third argument module.exports = function InternalizeJSONProperty(holder, name, reviver) { if (!isObject(holder)) { throw new $TypeError('Assertion failed: `holder` is not an Object'); } if (typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` is not a String'); } if (typeof reviver !== 'function') { throw new $TypeError('Assertion failed: `reviver` is not a Function'); } var val = Get(holder, name); // step 1 if (isObject(val)) { // step 2 var isArray = IsArray(val); // step 2.a if (isArray) { // step 2.b var I = 0; // step 2.b.i var len = LengthOfArrayLike(val); // step 2.b.ii while (I < len) { // step 2.b.iii var newElement = InternalizeJSONProperty(val, ToString(I), reviver); // step 2.b.iv.1 if (typeof newElement === 'undefined') { // step 2.b.iii.2 delete val[ToString(I)]; // step 2.b.iii.2.a } else { // step 2.b.iii.3 CreateDataProperty(val, ToString(I), newElement); // step 2.b.iii.3.a } I += 1; // step 2.b.iii.4 } } else { // step 2.c var keys = EnumerableOwnProperties(val, 'key'); // step 2.c.i forEach(keys, function (P) { // step 2.c.ii // eslint-disable-next-line no-shadow var newElement = InternalizeJSONProperty(val, P, reviver); // step 2.c.ii.1 if (typeof newElement === 'undefined') { // step 2.c.ii.2 delete val[P]; // step 2.c.ii.2.a } else { // step 2.c.ii.3 CreateDataProperty(val, P, newElement); // step 2.c.ii.3.a } }); } } return Call(reviver, holder, [name, val]); // step 3 }; ljharb-es-abstract-babee05/2025/Invoke.js000066400000000000000000000012371516525472400201260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var Call = require('./Call'); var IsArray = require('./IsArray'); var GetV = require('./GetV'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-invoke module.exports = function Invoke(O, P) { if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } var argumentsList = arguments.length > 2 ? arguments[2] : []; if (!IsArray(argumentsList)) { throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List'); } var func = GetV(O, P); return Call(func, O, argumentsList); }; ljharb-es-abstract-babee05/2025/IsAccessorDescriptor.js000066400000000000000000000010561516525472400227670ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2025/IsArray.js000066400000000000000000000001661516525472400202450ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-isarray module.exports = require('../helpers/IsArray'); ljharb-es-abstract-babee05/2025/IsArrayBufferViewOutOfBounds.js000066400000000000000000000020251516525472400243560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var IsViewOutOfBounds = require('./IsViewOutOfBounds'); var MakeDataViewWithBufferWitnessRecord = require('./MakeDataViewWithBufferWitnessRecord'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var isDataView = require('is-data-view'); var isTypedArray = require('is-typed-array'); // https://262.ecma-international.org/15.0/#sec-isarraybufferviewoutofbounds module.exports = function IsArrayBufferViewOutOfBounds(O) { var isDV = isDataView(O); if (!isTypedArray(O) && !isDV) { throw new $TypeError('Assertion failed: `O` must be a TypedArray or DataView'); } if (isDV) { // step 1 var viewRecord = MakeDataViewWithBufferWitnessRecord(O, 'SEQ-CST'); // step 1.a return IsViewOutOfBounds(viewRecord); // step 1.b } var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, 'SEQ-CST'); // step 2 return IsTypedArrayOutOfBounds(taRecord); // step 3 }; ljharb-es-abstract-babee05/2025/IsBigIntElementType.js000066400000000000000000000003021516525472400225070ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isbigintelementtype module.exports = function IsBigIntElementType(type) { return type === 'BIGUINT64' || type === 'BIGINT64'; }; ljharb-es-abstract-babee05/2025/IsCallable.js000066400000000000000000000001541516525472400206630ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/2025/IsCompatiblePropertyDescriptor.js000066400000000000000000000005731516525472400250540ustar00rootroot00000000000000'use strict'; var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) { return ValidateAndApplyPropertyDescriptor( void undefined, '', Extensible, Desc, Current ); }; ljharb-es-abstract-babee05/2025/IsConcatSpreadable.js000066400000000000000000000011741516525472400223610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true); var Get = require('./Get'); var IsArray = require('./IsArray'); var ToBoolean = require('./ToBoolean'); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-isconcatspreadable module.exports = function IsConcatSpreadable(O) { if (!isObject(O)) { return false; } if ($isConcatSpreadable) { var spreadable = Get(O, $isConcatSpreadable); if (typeof spreadable !== 'undefined') { return ToBoolean(spreadable); } } return IsArray(O); }; ljharb-es-abstract-babee05/2025/IsConstructor.js000066400000000000000000000021701516525472400215110ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('../GetIntrinsic.js'); var $construct = GetIntrinsic('%Reflect.construct%', true); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); try { DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); } catch (e) { // Accessor properties aren't supported DefinePropertyOrThrow = null; } // https://262.ecma-international.org/6.0/#sec-isconstructor if (DefinePropertyOrThrow && $construct) { var isConstructorMarker = {}; var badArrayLike = {}; DefinePropertyOrThrow(badArrayLike, 'length', { '[[Get]]': function () { throw isConstructorMarker; }, '[[Enumerable]]': true }); module.exports = function IsConstructor(argument) { try { // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: $construct(argument, badArrayLike); } catch (err) { return err === isConstructorMarker; } }; } else { module.exports = function IsConstructor(argument) { // unfortunately there's no way to truly check this without try/catch `new argument` in old environments return typeof argument === 'function' && !!argument.prototype; }; } ljharb-es-abstract-babee05/2025/IsDataDescriptor.js000066400000000000000000000010611516525472400220720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/2025/IsDetachedBuffer.js000066400000000000000000000017461516525472400220270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $byteLength = require('array-buffer-byte-length'); var availableTypedArrays = require('available-typed-arrays')(); var callBound = require('call-bound'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var $sabByteLength = callBound('SharedArrayBuffer.prototype.byteLength', true); // https://262.ecma-international.org/8.0/#sec-isdetachedbuffer module.exports = function IsDetachedBuffer(arrayBuffer) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); } if ((isSAB ? $sabByteLength : $byteLength)(arrayBuffer) === 0) { try { new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new } catch (error) { return !!error && error.name === 'TypeError'; } } return false; }; ljharb-es-abstract-babee05/2025/IsExtensible.js000066400000000000000000000007701516525472400212720ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $isExtensible = GetIntrinsic('%Object.isExtensible%', true); var isPrimitive = require('../helpers/isPrimitive'); // https://262.ecma-international.org/6.0/#sec-isextensible-o module.exports = $preventExtensions ? function IsExtensible(obj) { return !isPrimitive(obj) && $isExtensible(obj); } : function IsExtensible(obj) { return !isPrimitive(obj); }; ljharb-es-abstract-babee05/2025/IsFixedLengthArrayBuffer.js000066400000000000000000000016751516525472400235270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $arrayBufferResizable = callBound('%ArrayBuffer.prototype.resizable%', true); var $sharedArrayGrowable = callBound('%SharedArrayBuffer.prototype.growable%', true); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/15.0/#sec-isfixedlengtharraybuffer module.exports = function IsFixedLengthArrayBuffer(arrayBuffer) { var isAB = isArrayBuffer(arrayBuffer); var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isAB && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or SharedArrayBuffer'); } if (isAB && $arrayBufferResizable) { return !$arrayBufferResizable(arrayBuffer); // step 1 } if (isSAB && $sharedArrayGrowable) { return !$sharedArrayGrowable(arrayBuffer); // step 1 } return true; // step 2 }; ljharb-es-abstract-babee05/2025/IsGenericDescriptor.js000066400000000000000000000012201516525472400225720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-isgenericdescriptor module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/2025/IsLessThan.js000066400000000000000000000053071516525472400207120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var min = require('math-intrinsics/min'); var $isNaN = require('math-intrinsics/isNaN'); var $charCodeAt = require('call-bound')('String.prototype.charCodeAt'); var StringToBigInt = require('./StringToBigInt'); var ToNumeric = require('./ToNumeric'); var ToPrimitive = require('./ToPrimitive'); var BigIntLessThan = require('./BigInt/lessThan'); var NumberLessThan = require('./Number/lessThan'); // https://262.ecma-international.org/14.0/#sec-islessthan // eslint-disable-next-line max-statements, max-lines-per-function module.exports = function IsLessThan(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } if (typeof px === 'string' && typeof py === 'string') { // step 3 // a. Let lx be the length of px. // b. Let ly be the length of py. // c. For each integer i starting with 0 such that i < min(lx, ly), in ascending order, do // i. Let cx be the integer that is the numeric value of the code unit at index i within px. // ii. Let cy be the integer that is the numeric value of the code unit at index i within py. // iii. If cx < cy, return true. // iv. If cx > cy, return false. // d. If lx < ly, return true. Otherwise, return false. var lx = px.length; // step 3.a var ly = py.length; // step 3.b for (var i = 0; i < min(lx, ly); i++) { // step 3.c var cx = $charCodeAt(px, i); // step 3.c.i var cy = $charCodeAt(py, i); // step 3.c.ii if (cx < cy) { return true; // step 3.c.iii } if (cx > cy) { return false; // step 3.c.iv } } return lx < ly; // step 3.d } var nx; var ny; if (typeof px === 'bigint' && typeof py === 'string') { ny = StringToBigInt(py); if (typeof ny === 'undefined') { return void undefined; } return BigIntLessThan(px, ny); } if (typeof px === 'string' && typeof py === 'bigint') { nx = StringToBigInt(px); if (typeof nx === 'undefined') { return void undefined; } return BigIntLessThan(nx, py); } nx = ToNumeric(px); ny = ToNumeric(py); if (typeof nx === typeof ny) { return typeof nx === 'number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny); } if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if (nx === -Infinity || ny === Infinity) { return true; } if (nx === Infinity || ny === -Infinity) { return false; } return nx < ny; // by now, these are both finite, and the same type }; ljharb-es-abstract-babee05/2025/IsLooselyEqual.js000066400000000000000000000034051516525472400216040ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var isObject = require('es-object-atoms/isObject'); var IsStrictlyEqual = require('./IsStrictlyEqual'); var StringToBigInt = require('./StringToBigInt'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/13.0/#sec-islooselyequal module.exports = function IsLooselyEqual(x, y) { if (isSameType(x, y)) { return IsStrictlyEqual(x, y); } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return IsLooselyEqual(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return IsLooselyEqual(ToNumber(x), y); } if (typeof x === 'bigint' && typeof y === 'string') { var n = StringToBigInt(y); if (typeof n === 'undefined') { return false; } return IsLooselyEqual(x, n); } if (typeof x === 'string' && typeof y === 'bigint') { return IsLooselyEqual(y, x); } if (typeof x === 'boolean') { return IsLooselyEqual(ToNumber(x), y); } if (typeof y === 'boolean') { return IsLooselyEqual(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number' || typeof x === 'symbol' || typeof x === 'bigint') && isObject(y)) { return IsLooselyEqual(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number' || typeof y === 'symbol' || typeof y === 'bigint')) { return IsLooselyEqual(ToPrimitive(x), y); } if ((typeof x === 'bigint' && typeof y === 'number') || (typeof x === 'number' && typeof y === 'bigint')) { if (!isFinite(x) || !isFinite(y)) { return false; } // eslint-disable-next-line eqeqeq return x == y; // shortcut for step 13.b. } return false; }; ljharb-es-abstract-babee05/2025/IsNoTearConfiguration.js000066400000000000000000000007231516525472400231060ustar00rootroot00000000000000'use strict'; var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var IsBigIntElementType = require('./IsBigIntElementType'); // https://262.ecma-international.org/15.0/#sec-isnotearconfiguration module.exports = function IsNoTearConfiguration(type, order) { if (IsUnclampedIntegerElementType(type)) { return true; } if (IsBigIntElementType(type) && order !== 'INIT' && order !== 'UNORDERED') { return true; } return false; }; ljharb-es-abstract-babee05/2025/IsPromise.js000066400000000000000000000007451516525472400206100ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $PromiseThen = callBound('Promise.prototype.then', true); var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/6.0/#sec-ispromise module.exports = function IsPromise(x) { if (!isObject(x)) { return false; } if (!$PromiseThen) { // Promises are not supported return false; } try { $PromiseThen(x); // throws if not a promise } catch (e) { return false; } return true; }; ljharb-es-abstract-babee05/2025/IsRegExp.js000066400000000000000000000010721516525472400203560ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $match = GetIntrinsic('%Symbol.match%', true); var hasRegExpMatcher = require('is-regex'); var isObject = require('es-object-atoms/isObject'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-isregexp module.exports = function IsRegExp(argument) { if (!isObject(argument)) { return false; } if ($match) { var isRegExp = argument[$match]; if (typeof isRegExp !== 'undefined') { return ToBoolean(isRegExp); } } return hasRegExpMatcher(argument); }; ljharb-es-abstract-babee05/2025/IsSharedArrayBuffer.js000066400000000000000000000006521516525472400225260ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isSharedArrayBuffer = require('is-shared-array-buffer'); // https://262.ecma-international.org/8.0/#sec-issharedarraybuffer module.exports = function IsSharedArrayBuffer(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } return isSharedArrayBuffer(obj); }; ljharb-es-abstract-babee05/2025/IsStrictlyEqual.js000066400000000000000000000006141516525472400217720ustar00rootroot00000000000000'use strict'; var SameValueNonNumber = require('./SameValueNonNumber'); var NumberEqual = require('./Number/equal'); var SameType = require('./SameType'); // https://262.ecma-international.org/16.0/#sec-isstrictlyequal module.exports = function IsStrictlyEqual(x, y) { if (!SameType(x, y)) { return false; } return typeof x === 'number' ? NumberEqual(x, y) : SameValueNonNumber(x, y); }; ljharb-es-abstract-babee05/2025/IsStringWellFormedUnicode.js000066400000000000000000000011671516525472400237270ustar00rootroot00000000000000'use strict'; var CodePointAt = require('./CodePointAt'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#sec-isstringwellformedunicode module.exports = function IsStringWellFormedUnicode(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var len = string.length; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var cp = CodePointAt(string, k); // step 3.a if (cp['[[IsUnpairedSurrogate]]']) { return false; // step 3.b } k += cp['[[CodeUnitCount]]']; // step 3.c } return true; // step 4 }; ljharb-es-abstract-babee05/2025/IsTimeZoneOffsetString.js000066400000000000000000000012531516525472400232550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var regexTester = require('safe-regex-test'); // https://tc39.es/ecma262/#sec-istimezoneoffsetstring // implementation taken from https://github.com/tc39/proposal-temporal/blob/21ee5b13f0672990c807475ba094092d19dd6dc5/polyfill/lib/ecmascript.mjs#L2140 var OFFSET = /^([+\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\d{1,9}))?)?)?$/; var testOffset = regexTester(OFFSET); module.exports = function IsTimeZoneOffsetString(offsetString) { if (typeof offsetString !== 'string') { throw new $TypeError('Assertion failed: `offsetString` must be a String'); } return testOffset(offsetString); }; ljharb-es-abstract-babee05/2025/IsTypedArrayFixedLength.js000066400000000000000000000016461516525472400234010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayLength = require('typed-array-length'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); // https://262.ecma-international.org/16.0/#sec-istypedarrayfixedlength module.exports = function IsTypedArrayFixedLength(O) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `obj` must be a Typed Array'); } // 2. Let buffer be O.[[ViewedArrayBuffer]]. var buffer = typedArrayBuffer(O); // step 2 var isFixed = IsFixedLengthArrayBuffer(buffer); var length = isFixed ? typedArrayLength(O) : 'AUTO'; if (length === 'AUTO') { return false; // step 1 } if (!isFixed && !IsSharedArrayBuffer(buffer)) { return false; // step 3 } return true; // step 4 }; ljharb-es-abstract-babee05/2025/IsTypedArrayOutOfBounds.js000066400000000000000000000036551516525472400234110ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://262.ecma-international.org/15.0/#sec-istypedarrayoutofbounds module.exports = function IsTypedArrayOutOfBounds(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } var O = taRecord['[[Object]]']; // step 1 var bufferByteLength = taRecord['[[CachedBufferByteLength]]']; // step 2 if (IsDetachedBuffer(typedArrayBuffer(O)) && bufferByteLength !== 'DETACHED') { throw new $TypeError('Assertion failed: typed array is detached only if the byte length is ~DETACHED~'); // step 3 } if (bufferByteLength === 'DETACHED') { return true; // step 4 } var byteOffsetStart = typedArrayByteOffset(O); // step 5 var isFixed = IsFixedLengthArrayBuffer(typedArrayBuffer(O)); var byteOffsetEnd; var length = isFixed ? typedArrayLength(O) : 'AUTO'; // TODO: probably use package for array length // seems to apply when TA is backed by a resizable/growable AB if (length === 'AUTO') { // step 6 byteOffsetEnd = bufferByteLength; // step 6.a } else { var elementSize = TypedArrayElementSize(O); // step 7.a byteOffsetEnd = byteOffsetStart + (length * elementSize); // step 7.b } if (byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength) { return true; // step 8 } // 9. NOTE: 0-length TypedArrays are not considered out-of-bounds. return false; // step 10 }; ljharb-es-abstract-babee05/2025/IsUnclampedIntegerElementType.js000066400000000000000000000004521516525472400245670ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isunclampedintegerelementtype module.exports = function IsUnclampedIntegerElementType(type) { return type === 'INT8' || type === 'UINT8' || type === 'INT16' || type === 'UINT16' || type === 'INT32' || type === 'UINT32'; }; ljharb-es-abstract-babee05/2025/IsUnsignedElementType.js000066400000000000000000000004121516525472400231110ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/15.0/#sec-isunsignedelementtype module.exports = function IsUnsignedElementType(type) { return type === 'UINT8' || type === 'UINT8C' || type === 'UINT16' || type === 'UINT32' || type === 'BIGUINT64'; }; ljharb-es-abstract-babee05/2025/IsValidIntegerIndex.js000066400000000000000000000025611516525472400225350ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var TypedArrayLength = require('./TypedArrayLength'); var isInteger = require('math-intrinsics/isInteger'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/15.0/#sec-isvalidintegerindex module.exports = function IsValidIntegerIndex(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` is not a TypedArray object'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` is not a Number'); } var buffer = typedArrayBuffer(O); if (IsDetachedBuffer(buffer)) { return false; } // step 1 if (!isInteger(index)) { return false; } // step 2 if (isNegativeZero(index)) { return false; } // step 3 var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, 'UNORDERED'); // step 4 if (IsTypedArrayOutOfBounds(taRecord)) { return false; // step 6 } var length = TypedArrayLength(taRecord); // step 7 if (index < 0 || index >= length) { return false; } // step 8 return true; // step 9 }; ljharb-es-abstract-babee05/2025/IsViewOutOfBounds.js000066400000000000000000000033021516525472400222240ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record'); var dataViewBuffer = require('data-view-buffer'); var dataViewByteLength = require('data-view-byte-length'); var dataViewByteOffset = require('data-view-byte-offset'); // https://262.ecma-international.org/15.0/#sec-isviewoutofbounds module.exports = function IsViewOutOfBounds(viewRecord) { if (!isDataViewWithBufferWitnessRecord(viewRecord)) { throw new $TypeError('Assertion failed: `viewRecord` must be a DataView With Buffer Witness Record'); } var view = viewRecord['[[Object]]']; // step 1 var bufferByteLength = viewRecord['[[CachedBufferByteLength]]']; // step 2 if (IsDetachedBuffer(dataViewBuffer(view)) !== (bufferByteLength === 'DETACHED')) { // step 3 throw new $TypeError('Assertion failed: `IsDetachedBuffer(dataViewBuffer(view))` must be true if and only if `bufferByteLength === ~DETACHED~'); } if (bufferByteLength === 'DETACHED') { return true; // step 4 } var byteOffsetStart = dataViewByteOffset(view); // step 5 var isFixed = IsFixedLengthArrayBuffer(dataViewBuffer(view)); var viewByteLength = isFixed ? dataViewByteLength(view) : 'AUTO'; // view.[[ByteLength]] var byteOffsetEnd = viewByteLength === 'AUTO' ? bufferByteLength : byteOffsetStart + viewByteLength; // steps 6 - 7 if (byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength) { return true; // step 8 } // 9. NOTE: 0-length DataViews are not considered out-of-bounds. return false; // step 10 }; ljharb-es-abstract-babee05/2025/IsWordChar.js000066400000000000000000000022141516525472400206740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var IsArray = require('./IsArray'); var WordCharacters = require('./WordCharacters'); var every = require('../helpers/every'); var isRegExpRecord = require('../helpers/records/regexp-record'); var isChar = function isChar(c) { return typeof c === 'string'; }; // https://262.ecma-international.org/14.0/#sec-runtime-semantics-iswordchar-abstract-operation module.exports = function IsWordChar(rer, Input, e) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (!IsArray(Input) || !every(Input, isChar)) { throw new $TypeError('Assertion failed: `Input` must be a List of characters'); } if (!isInteger(e)) { throw new $TypeError('Assertion failed: `e` must be an integer'); } var InputLength = Input.length; // step 1 if (e === -1 || e === InputLength) { return false; // step 2 } var c = Input[e]; // step 3 return $indexOf(WordCharacters(rer), c) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2025/IteratorClose.js000066400000000000000000000045251516525472400214550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var CompletionRecord = require('./CompletionRecord'); var GetMethod = require('./GetMethod'); var IsCallable = require('./IsCallable'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratorclose module.exports = function IteratorClose(iteratorRecord, completion) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } if (!isObject(iteratorRecord['[[Iterator]]'])) { throw new $TypeError('Assertion failed: iteratorRecord.[[Iterator]] must be an Object'); // step 1 } if (!IsCallable(completion) && !(completion instanceof CompletionRecord)) { // step 2 throw new $TypeError('Assertion failed: completion is not a thunk representing a Completion Record, nor a Completion Record instance'); } var completionThunk = completion instanceof CompletionRecord ? function () { return completion['?'](); } : completion; var iterator = iteratorRecord['[[Iterator]]']; // step 3 var iteratorReturn; try { iteratorReturn = GetMethod(iterator, 'return'); // step 4 } catch (e) { completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. throw e; // step 7 } if (typeof iteratorReturn === 'undefined') { return completionThunk(); // step 5.a - 5.b } var innerResult; try { innerResult = Call(iteratorReturn, iterator, []); } catch (e) { // if we hit here, then "e" is the innerResult completion that needs re-throwing completionThunk(); // throws if `completion` is a throw completion // step 6 // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. // if not, then return the innerResult completion throw e; // step 7 } var completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does // eslint-disable-next-line no-useless-assignment completionThunk = null; // ensure it's not called twice. if (!isObject(innerResult)) { throw new $TypeError('iterator .return must return an object'); } return completionRecord; }; ljharb-es-abstract-babee05/2025/IteratorComplete.js000066400000000000000000000007131516525472400221530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/6.0/#sec-iteratorcomplete module.exports = function IteratorComplete(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return ToBoolean(Get(iterResult, 'done')); }; ljharb-es-abstract-babee05/2025/IteratorNext.js000066400000000000000000000022101516525472400213130ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/16.0/#sec-iteratornext module.exports = function IteratorNext(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result; try { if (arguments.length < 2) { // step 1 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]']); // step 1.a } else { // step 2 result = Call(iteratorRecord['[[NextMethod]]'], iteratorRecord['[[Iterator]]'], [arguments[1]]); // step 2.a } } catch (e) { // step 3 // eslint-disable-next-line no-param-reassign iteratorRecord['[[Done]]'] = true; // step 3.a throw e; // step 3.b } if (!isObject(result)) { // step 5 // eslint-disable-next-line no-param-reassign iteratorRecord['[[Done]]'] = true; // step 5.a throw new $TypeError('iterator next must return an object'); // step 5.b } return result; // step 6 }; ljharb-es-abstract-babee05/2025/IteratorStep.js000066400000000000000000000017441516525472400213230ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorComplete = require('./IteratorComplete'); var IteratorNext = require('./IteratorNext'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/16.0/#sec-iteratorstep module.exports = function IteratorStep(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var result = IteratorNext(iteratorRecord); // step 1 try { var done = IteratorComplete(result); // step 2 } catch (e) { // step 3 // eslint-disable-next-line no-param-reassign iteratorRecord['[[Done]]'] = true; // step 3.a throw e; // step 3.b } if (done) { // step 5 // eslint-disable-next-line no-param-reassign iteratorRecord['[[Done]]'] = true; // step 5.a return false; // step 5.b. should be `~done~` but `false` is more convenient here. } return result; // steps 6 }; ljharb-es-abstract-babee05/2025/IteratorStepValue.js000066400000000000000000000015351516525472400223160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/16.0/#sec-iteratorstepvalue module.exports = function IteratorStepValue(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); } var result = IteratorStep(iteratorRecord); // step 1 if (!result || result === 'DONE') { // step 2 return result; // step 2.a } var value; try { value = IteratorValue(result); // step 3 } catch (e) { // step 4 // eslint-disable-next-line no-param-reassign iteratorRecord['[[Done]]'] = true; // step 4.a throw e; // step 5 } return value; // step 5 }; ljharb-es-abstract-babee05/2025/IteratorToList.js000066400000000000000000000014201516525472400216150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IteratorStep = require('./IteratorStep'); var IteratorValue = require('./IteratorValue'); var isIteratorRecord = require('../helpers/records/iterator-record'); // https://262.ecma-international.org/15.0/#sec-iteratortolist module.exports = function IteratorToList(iteratorRecord) { if (!isIteratorRecord(iteratorRecord)) { throw new $TypeError('Assertion failed: `iteratorRecord` must be an Iterator Record'); // step 1 } var values = []; // step 1 var next = true; // step 2 while (next) { // step 3 next = IteratorStep(iteratorRecord); // step 3.a if (next) { var nextValue = IteratorValue(next); // step 3.b.i values[values.length] = nextValue; // step 3.b.ii } } return values; // step 4 }; ljharb-es-abstract-babee05/2025/IteratorValue.js000066400000000000000000000006241516525472400214600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); // https://262.ecma-international.org/6.0/#sec-iteratorvalue module.exports = function IteratorValue(iterResult) { if (!isObject(iterResult)) { throw new $TypeError('Assertion failed: Type(iterResult) is not Object'); } return Get(iterResult, 'value'); }; ljharb-es-abstract-babee05/2025/KeyForSymbol.js000066400000000000000000000006011516525472400212520ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $keyFor = callBound('Symbol.keyFor', true); // https://262.ecma-international.org/14.0/#sec-keyforsymbol module.exports = function KeyForSymbol(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $keyFor(sym); }; ljharb-es-abstract-babee05/2025/LengthOfArrayLike.js000066400000000000000000000007151516525472400222050ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var ToLength = require('./ToLength'); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike module.exports = function LengthOfArrayLike(obj) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: `obj` must be an Object'); } return ToLength(Get(obj, 'length')); }; // TODO: use this all over ljharb-es-abstract-babee05/2025/MakeDataViewWithBufferWitnessRecord.js000066400000000000000000000016501516525472400256760ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayBufferByteLength = require('./ArrayBufferByteLength'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var dataViewBuffer = require('data-view-buffer'); var isDataView = require('is-data-view'); // https://262.ecma-international.org/15.0/#sec-makedataviewwithbufferwitnessrecord module.exports = function MakeDataViewWithBufferWitnessRecord(obj, order) { if (!isDataView(obj)) { throw new $TypeError('MakeDataViewWithBufferWitnessRecord called with non-DataView'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } var buffer = dataViewBuffer(obj); // step 1 var byteLength = IsDetachedBuffer(buffer) ? 'DETACHED' : ArrayBufferByteLength(buffer, order); // steps 2 - 3 return { '[[Object]]': obj, '[[CachedBufferByteLength]]': byteLength }; // step 4 }; ljharb-es-abstract-babee05/2025/MakeDate.js000066400000000000000000000005161516525472400203450ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/2025/MakeDay.js000066400000000000000000000017641516525472400202130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToIntegerOrInfinity(year); var m = ToIntegerOrInfinity(month); var dt = ToIntegerOrInfinity(date); var ym = y + floor(m / 12); if (!$isFinite(ym)) { return NaN; } var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/2025/MakeFullYear.js000066400000000000000000000011301516525472400212040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/15.0/#sec-makefullyear module.exports = function MakeFullYear(year) { if (typeof year !== 'number') { throw new $TypeError('Assertion failed: `year` must be a Number'); } if (isNaN(year)) { return NaN; // step 1 } var truncated = ToIntegerOrInfinity(year); // step 2 if (0 <= truncated && truncated <= 99) { return 1900 + truncated; // step 3 } return truncated; // step 4 }; ljharb-es-abstract-babee05/2025/MakeMatchIndicesIndexPairArray.js000066400000000000000000000052261516525472400246310ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayCreate = require('./ArrayCreate'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var GetMatchIndexPair = require('./GetMatchIndexPair'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); var ToString = require('./ToString'); var every = require('../helpers/every'); var isMatchRecord = require('../helpers/records/match-record'); var isStringOrUndefined = function isStringOrUndefined(s) { return typeof s === 'undefined' || typeof s === 'string'; }; var isMatchRecordOrUndefined = function isMatchRecordOrUndefined(m) { return typeof m === 'undefined' || isMatchRecord(m); }; var MAX_ARRAY_LENGTH = require('math-intrinsics/constants/maxArrayLength'); // https://262.ecma-international.org/13.0/#sec-getmatchindexpair module.exports = function MakeMatchIndicesIndexPairArray(S, indices, groupNames, hasGroups) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!IsArray(indices) || !every(indices, isMatchRecordOrUndefined)) { throw new $TypeError('Assertion failed: `indices` must be a List of either Match Records or `undefined`'); } if (!IsArray(groupNames) || !every(groupNames, isStringOrUndefined)) { throw new $TypeError('Assertion failed: `groupNames` must be a List of either Strings or `undefined`'); } if (typeof hasGroups !== 'boolean') { throw new $TypeError('Assertion failed: `hasGroups` must be a Boolean'); } var n = indices.length; // step 1 if (!(n < MAX_ARRAY_LENGTH)) { throw new $TypeError('Assertion failed: `indices` length must be less than the max array size, 2**32 - 1'); } if (groupNames.length !== n - 1) { throw new $TypeError('Assertion failed: `groupNames` must have exactly one fewer item than `indices`'); } var A = ArrayCreate(n); // step 5 var groups = hasGroups ? OrdinaryObjectCreate(null) : void undefined; // step 6-7 CreateDataPropertyOrThrow(A, 'groups', groups); // step 8 for (var i = 0; i < n; i += 1) { // step 9 var matchIndices = indices[i]; // step 9.a // eslint-disable-next-line no-negated-condition var matchIndexPair = typeof matchIndices !== 'undefined' ? GetMatchIndexPair(S, matchIndices) : void undefined; // step 9.b-9.c CreateDataPropertyOrThrow(A, ToString(i), matchIndexPair); // step 9.d if (i > 0 && typeof groupNames[i - 1] !== 'undefined') { // step 9.e if (!groups) { throw new $TypeError('if `hasGroups` is `false`, `groupNames` can only contain `undefined` values'); } CreateDataPropertyOrThrow(groups, groupNames[i - 1], matchIndexPair); // step 9.e.i } } return A; // step 10 }; ljharb-es-abstract-babee05/2025/MakeTime.js000066400000000000000000000013731516525472400203700ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-maketime module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToIntegerOrInfinity(hour); var m = ToIntegerOrInfinity(min); var s = ToIntegerOrInfinity(sec); var milli = ToIntegerOrInfinity(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/2025/MakeTypedArrayWithBufferWitnessRecord.js000066400000000000000000000016511516525472400262570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ArrayBufferByteLength = require('./ArrayBufferByteLength'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); // https://262.ecma-international.org/15.0/#sec-maketypedarraywithbufferwitnessrecord module.exports = function MakeTypedArrayWithBufferWitnessRecord(obj, order) { if (!isTypedArray(obj)) { throw new $TypeError('Assertion failed: `obj` must be a Typed Array'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } var buffer = typedArrayBuffer(obj); // step 1 var byteLength = IsDetachedBuffer(buffer) ? 'DETACHED' : ArrayBufferByteLength(buffer, order); // steps 2 - 3 return { '[[Object]]': obj, '[[CachedBufferByteLength]]': byteLength }; // step 4 }; ljharb-es-abstract-babee05/2025/MinFromTime.js000066400000000000000000000006141516525472400210570ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/2025/MonthFromTime.js000066400000000000000000000021511516525472400214170ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/2025/NewPromiseCapability.js000066400000000000000000000023141516525472400227620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsCallable = require('./IsCallable'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-newpromisecapability module.exports = function NewPromiseCapability(C) { if (!IsConstructor(C)) { throw new $TypeError('C must be a constructor'); // step 1 } var resolvingFunctions = { '[[Resolve]]': void undefined, '[[Reject]]': void undefined }; // step 3 var promise = new C(function (resolve, reject) { // steps 4-5 if (typeof resolvingFunctions['[[Resolve]]'] !== 'undefined' || typeof resolvingFunctions['[[Reject]]'] !== 'undefined') { throw new $TypeError('executor has already been called'); // step 4.a, 4.b } resolvingFunctions['[[Resolve]]'] = resolve; // step 4.c resolvingFunctions['[[Reject]]'] = reject; // step 4.d }); // step 4-6 if (!IsCallable(resolvingFunctions['[[Resolve]]']) || !IsCallable(resolvingFunctions['[[Reject]]'])) { throw new $TypeError('executor must provide valid resolve and reject functions'); // steps 7-8 } return { '[[Promise]]': promise, '[[Resolve]]': resolvingFunctions['[[Resolve]]'], '[[Reject]]': resolvingFunctions['[[Reject]]'] }; // step 9 }; ljharb-es-abstract-babee05/2025/NormalCompletion.js000066400000000000000000000003551516525472400221550ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/6.0/#sec-normalcompletion module.exports = function NormalCompletion(value) { return new CompletionRecord('normal', value); }; ljharb-es-abstract-babee05/2025/Number/000077500000000000000000000000001516525472400175625ustar00rootroot00000000000000ljharb-es-abstract-babee05/2025/Number/add.js000066400000000000000000000014401516525472400206470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-add module.exports = function NumberAdd(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) { return NaN; } if (!isFinite(x)) { return x; } if (!isFinite(y)) { return y; } if (x === y && x === 0) { // both zeroes return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0; } // shortcut for the actual spec mechanics return x + y; }; ljharb-es-abstract-babee05/2025/Number/bitwiseAND.js000066400000000000000000000006521516525472400221140ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND module.exports = function NumberBitwiseAND(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('&', x, y); }; ljharb-es-abstract-babee05/2025/Number/bitwiseNOT.js000066400000000000000000000007641516525472400221560ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT module.exports = function NumberBitwiseNOT(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } var oldValue = ToInt32(x); // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer. return ~oldValue; }; ljharb-es-abstract-babee05/2025/Number/bitwiseOR.js000066400000000000000000000006501516525472400220300ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR module.exports = function NumberBitwiseOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('|', x, y); }; ljharb-es-abstract-babee05/2025/Number/bitwiseXOR.js000066400000000000000000000006521516525472400221620ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberBitwiseOp = require('../NumberBitwiseOp'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR module.exports = function NumberBitwiseXOR(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberBitwiseOp('^', x, y); }; ljharb-es-abstract-babee05/2025/Number/divide.js000066400000000000000000000010641516525472400213650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide module.exports = function NumberDivide(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) { return NaN; } // shortcut for the actual spec mechanics return x / y; }; ljharb-es-abstract-babee05/2025/Number/equal.js000066400000000000000000000007371516525472400212360ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal module.exports = function NumberEqual(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y)) { return false; } // shortcut for the actual spec mechanics return x === y; }; ljharb-es-abstract-babee05/2025/Number/exponentiate.js000066400000000000000000000033141516525472400226240ustar00rootroot00000000000000'use strict'; // var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $pow = require('math-intrinsics/pow'); var $TypeError = require('es-errors/type'); /* var abs = require('math-intrinsics/abs'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var IsInteger = require('math-intrinsics/isInteger'); */ // https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate /* eslint max-lines-per-function: 0, max-statements: 0 */ module.exports = function NumberExponentiate(base, exponent) { if (typeof base !== 'number' || typeof exponent !== 'number') { throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers'); } return $pow(base, exponent); /* if (isNaN(exponent)) { return NaN; } if (exponent === 0) { return 1; } if (isNaN(base)) { return NaN; } var aB = abs(base); if (aB > 1 && exponent === Infinity) { return Infinity; } if (aB > 1 && exponent === -Infinity) { return 0; } if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) { return NaN; } if (aB < 1 && exponent === Infinity) { return +0; } if (aB < 1 && exponent === -Infinity) { return Infinity; } if (base === Infinity) { return exponent > 0 ? Infinity : 0; } if (base === -Infinity) { var isOdd = true; if (exponent > 0) { return isOdd ? -Infinity : Infinity; } return isOdd ? -0 : 0; } if (exponent > 0) { return isNegativeZero(base) ? Infinity : 0; } if (isNegativeZero(base)) { if (exponent > 0) { return isOdd ? -0 : 0; } return isOdd ? -Infinity : Infinity; } if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) { return NaN; } */ }; ljharb-es-abstract-babee05/2025/Number/index.js000066400000000000000000000023721516525472400212330ustar00rootroot00000000000000'use strict'; var add = require('./add'); var bitwiseAND = require('./bitwiseAND'); var bitwiseNOT = require('./bitwiseNOT'); var bitwiseOR = require('./bitwiseOR'); var bitwiseXOR = require('./bitwiseXOR'); var divide = require('./divide'); var equal = require('./equal'); var exponentiate = require('./exponentiate'); var leftShift = require('./leftShift'); var lessThan = require('./lessThan'); var multiply = require('./multiply'); var remainder = require('./remainder'); var sameValue = require('./sameValue'); var sameValueZero = require('./sameValueZero'); var signedRightShift = require('./signedRightShift'); var subtract = require('./subtract'); var toString = require('./toString'); var unaryMinus = require('./unaryMinus'); var unsignedRightShift = require('./unsignedRightShift'); module.exports = { add: add, bitwiseAND: bitwiseAND, bitwiseNOT: bitwiseNOT, bitwiseOR: bitwiseOR, bitwiseXOR: bitwiseXOR, divide: divide, equal: equal, exponentiate: exponentiate, leftShift: leftShift, lessThan: lessThan, multiply: multiply, remainder: remainder, sameValue: sameValue, sameValueZero: sameValueZero, signedRightShift: signedRightShift, subtract: subtract, toString: toString, unaryMinus: unaryMinus, unsignedRightShift: unsignedRightShift }; ljharb-es-abstract-babee05/2025/Number/leftShift.js000066400000000000000000000010621516525472400220470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift module.exports = function NumberLeftShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum << shiftCount; }; ljharb-es-abstract-babee05/2025/Number/lessThan.js000066400000000000000000000010641516525472400217020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan module.exports = function NumberLessThan(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } // If x is NaN, return undefined. // If y is NaN, return undefined. if (isNaN(x) || isNaN(y)) { return void undefined; } // shortcut for the actual spec mechanics return x < y; }; ljharb-es-abstract-babee05/2025/Number/multiply.js000066400000000000000000000014661516525472400220060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply module.exports = function NumberMultiply(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) { return NaN; } if (!isFinite(x) && !isFinite(y)) { return x === y ? Infinity : -Infinity; } if (!isFinite(x) && y !== 0) { return x > 0 ? Infinity : -Infinity; } if (!isFinite(y) && x !== 0) { return y > 0 ? Infinity : -Infinity; } // shortcut for the actual spec mechanics return x * y; }; ljharb-es-abstract-babee05/2025/Number/remainder.js000066400000000000000000000023031516525472400220640ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('math-intrinsics/isNaN'); var isFinite = require('math-intrinsics/isFinite'); var truncate = require('../truncate'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-remainder module.exports = function NumberRemainder(n, d) { if (typeof n !== 'number' || typeof d !== 'number') { throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers'); } // If either operand is NaN, the result is NaN. // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) { return NaN; } // If the dividend is finite and the divisor is an infinity, the result equals the dividend. // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend. if (!isFinite(d) || n === 0) { return n; } if (!isFinite(n) || !isFinite(d) || n === 0 || d === 0) { throw new $TypeError('Assertion failed: `n` and `d` arguments must be finite and nonzero'); } var quotient = n / d; var q = truncate(quotient); var r = n - (d * q); if (r === 0 && n < 0) { return -0; } return r; }; ljharb-es-abstract-babee05/2025/Number/sameValue.js000066400000000000000000000010711516525472400220410ustar00rootroot00000000000000'use strict'; var isNegativeZero = require('math-intrinsics/isNegativeZero'); var $TypeError = require('es-errors/type'); var NumberSameValueZero = require('./sameValueZero'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue module.exports = function NumberSameValue(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } if (x === 0 && y === 0) { return !(isNegativeZero(x) ^ isNegativeZero(y)); } return NumberSameValueZero(x, y); }; ljharb-es-abstract-babee05/2025/Number/sameValueZero.js000066400000000000000000000007611516525472400227060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero module.exports = function NumberSameValueZero(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var xNaN = isNaN(x); var yNaN = isNaN(y); if (xNaN || yNaN) { return xNaN === yNaN; } return x === y; }; ljharb-es-abstract-babee05/2025/Number/signedRightShift.js000066400000000000000000000011001516525472400233550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift module.exports = function NumberSignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >> shiftCount; }; ljharb-es-abstract-babee05/2025/Number/subtract.js000066400000000000000000000007121516525472400217470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var NumberAdd = require('./add'); var NumberUnaryMinus = require('./unaryMinus'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract module.exports = function NumberSubtract(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } return NumberAdd(x, NumberUnaryMinus(y)); }; ljharb-es-abstract-babee05/2025/Number/toString.js000066400000000000000000000012051516525472400217270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $numberToString = callBound('Number.prototype.toString'); // https://262.ecma-international.org/14.0/#sec-numeric-types-number-tostring module.exports = function NumberToString(x, radix) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` must be a Number'); } if (!isInteger(radix) || radix < 2 || radix > 36) { throw new $TypeError('Assertion failed: `radix` must be an integer >= 2 and <= 36'); } return $numberToString(x, radix); // steps 1 - 12 }; ljharb-es-abstract-babee05/2025/Number/unaryMinus.js000066400000000000000000000006071516525472400222750ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNaN = require('../../helpers/isNaN'); // https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus module.exports = function NumberUnaryMinus(x) { if (typeof x !== 'number') { throw new $TypeError('Assertion failed: `x` argument must be a Number'); } if (isNaN(x)) { return NaN; } return -x; }; ljharb-es-abstract-babee05/2025/Number/unsignedRightShift.js000066400000000000000000000011051516525472400237250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('../ToInt32'); var ToUint32 = require('../ToUint32'); var modulo = require('../modulo'); // https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift module.exports = function NumberUnsignedRightShift(x, y) { if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); var shiftCount = modulo(rnum, 32); return lnum >>> shiftCount; }; ljharb-es-abstract-babee05/2025/NumberBitwiseOp.js000066400000000000000000000012511516525472400217450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ToInt32 = require('./ToInt32'); var ToUint32 = require('./ToUint32'); // https://262.ecma-international.org/11.0/#sec-numberbitwiseop module.exports = function NumberBitwiseOp(op, x, y) { if (op !== '&' && op !== '|' && op !== '^') { throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`'); } if (typeof x !== 'number' || typeof y !== 'number') { throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers'); } var lnum = ToInt32(x); var rnum = ToUint32(y); if (op === '&') { return lnum & rnum; } if (op === '|') { return lnum | rnum; } return lnum ^ rnum; }; ljharb-es-abstract-babee05/2025/NumberToBigInt.js000066400000000000000000000014311516525472400215170ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-numbertobigint module.exports = function NumberToBigInt(number) { if (typeof number !== 'number') { throw new $TypeError('Assertion failed: `number` must be a String'); } if (!isInteger(number)) { throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } return $BigInt(number); }; ljharb-es-abstract-babee05/2025/NumericToRawBytes.js000066400000000000000000000042161516525472400222610ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwnProperty = require('./HasOwnProperty'); var ToBigInt64 = require('./ToBigInt64'); var ToBigUint64 = require('./ToBigUint64'); var ToInt16 = require('./ToInt16'); var ToInt32 = require('./ToInt32'); var ToInt8 = require('./ToInt8'); var ToUint16 = require('./ToUint16'); var ToUint32 = require('./ToUint32'); var ToUint8 = require('./ToUint8'); var ToUint8Clamp = require('./ToUint8Clamp'); var valueToFloat16Bytes = require('../helpers/valueToFloat16Bytes'); var valueToFloat32Bytes = require('../helpers/valueToFloat32Bytes'); var valueToFloat64Bytes = require('../helpers/valueToFloat64Bytes'); var integerToNBytes = require('../helpers/integerToNBytes'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/15.0/#table-the-typedarray-constructors var TypeToAO = { __proto__: null, $INT8: ToInt8, $UINT8: ToUint8, $UINT8C: ToUint8Clamp, $INT16: ToInt16, $UINT16: ToUint16, $INT32: ToInt32, $UINT32: ToUint32, $BIGINT64: ToBigInt64, $BIGUINT64: ToBigUint64 }; // https://262.ecma-international.org/16.0/#sec-numerictorawbytes module.exports = function NumericToRawBytes(type, value, isLittleEndian) { if (typeof type !== 'string' || !hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } if (type === 'FLOAT16') { // step 1 return valueToFloat16Bytes(value, isLittleEndian); } else if (type === 'FLOAT32') { // step 2 return valueToFloat32Bytes(value, isLittleEndian); } else if (type === 'FLOAT64') { // step 3 return valueToFloat64Bytes(value, isLittleEndian); } // step 4 var n = tableTAO.size['$' + type]; // step 4.a var convOp = TypeToAO['$' + type]; // step 4.b var intValue = convOp(value); // step 4.c return integerToNBytes(intValue, n, isLittleEndian); // step 4.d, 4.e, 5 }; ljharb-es-abstract-babee05/2025/ObjectDefineProperties.js000066400000000000000000000023731516525472400232730ustar00rootroot00000000000000'use strict'; var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var Get = require('./Get'); var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty'); var ToObject = require('./ToObject'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var forEach = require('../helpers/forEach'); var OwnPropertyKeys = require('own-keys'); // https://262.ecma-international.org/15.0/#sec-objectdefineproperties module.exports = function ObjectDefineProperties(O, Properties) { var props = ToObject(Properties); // step 1 var keys = OwnPropertyKeys(props); // step 2 var descriptors = []; // step 3 forEach(keys, function (nextKey) { // step 4 var propDesc = OrdinaryGetOwnProperty(props, nextKey); // ToPropertyDescriptor(getOwnPropertyDescriptor(props, nextKey)); // step 4.a if (typeof propDesc !== 'undefined' && propDesc['[[Enumerable]]']) { // step 4.b var descObj = Get(props, nextKey); // step 4.b.i var desc = ToPropertyDescriptor(descObj); // step 4.b.ii descriptors[descriptors.length] = { '[[Key]]': nextKey, '[[Descriptor]]': desc }; // step 4.b.iii } }); forEach(descriptors, function (pair) { // step 5 DefinePropertyOrThrow(O, pair['[[Key]]'], pair['[[Descriptor]]']); // step 5.c }); return O; // step 6 }; ljharb-es-abstract-babee05/2025/OrdinaryCreateFromConstructor.js000066400000000000000000000014711516525472400247000ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor'); var IsArray = require('./IsArray'); var OrdinaryObjectCreate = require('./OrdinaryObjectCreate'); // https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) { GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto); var slots = arguments.length < 3 ? [] : arguments[2]; if (!IsArray(slots)) { throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List'); } return OrdinaryObjectCreate(proto, slots); }; ljharb-es-abstract-babee05/2025/OrdinaryDefineOwnProperty.js000066400000000000000000000042011516525472400240200ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsExtensible = require('./IsExtensible'); var isPropertyKey = require('../helpers/isPropertyKey'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); var SameValue = require('./SameValue'); var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (!$gOPD) { // ES3/IE 8 fallback if (IsAccessorDescriptor(Desc)) { throw new $SyntaxError('This environment does not support accessor property descriptors.'); } var creatingNormalDataProperty = !(P in O) && Desc['[[Writable]]'] && Desc['[[Enumerable]]'] && Desc['[[Configurable]]'] && '[[Value]]' in Desc; var settingExistingDataProperty = (P in O) && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]']) && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]']) && (!('[[Writable]]' in Desc) || Desc['[[Writable]]']) && '[[Value]]' in Desc; if (creatingNormalDataProperty || settingExistingDataProperty) { O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign return SameValue(O[P], Desc['[[Value]]']); } throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties'); } var desc = $gOPD(O, P); var current = desc && ToPropertyDescriptor(desc); var extensible = IsExtensible(O); return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current); }; ljharb-es-abstract-babee05/2025/OrdinaryGetOwnProperty.js000066400000000000000000000022531516525472400233520ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); var hasOwn = require('hasown'); var IsArray = require('./IsArray'); var isPropertyKey = require('../helpers/isPropertyKey'); var IsRegExp = require('./IsRegExp'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty module.exports = function OrdinaryGetOwnProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (!hasOwn(O, P)) { return void 0; } if (!$gOPD) { // ES3 / IE 8 fallback var arrayLength = IsArray(O) && P === 'length'; var regexLastIndex = IsRegExp(O) && P === 'lastIndex'; return { '[[Configurable]]': !(arrayLength || regexLastIndex), '[[Enumerable]]': $isEnumerable(O, P), '[[Value]]': O[P], '[[Writable]]': true }; } return ToPropertyDescriptor($gOPD(O, P)); }; ljharb-es-abstract-babee05/2025/OrdinaryGetPrototypeOf.js000066400000000000000000000007561516525472400233420ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $getProto = require('get-proto'); // https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof module.exports = function OrdinaryGetPrototypeOf(O) { if (!isObject(O)) { throw new $TypeError('Assertion failed: O must be an Object'); } if (!$getProto) { throw new $TypeError('This environment does not support fetching prototypes.'); } return $getProto(O); }; ljharb-es-abstract-babee05/2025/OrdinaryHasInstance.js000066400000000000000000000010731516525472400226010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance module.exports = function OrdinaryHasInstance(C, O) { if (!IsCallable(C)) { return false; } if (!isObject(O)) { return false; } var P = Get(C, 'prototype'); if (!isObject(P)) { throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.'); } return O instanceof C; }; ljharb-es-abstract-babee05/2025/OrdinaryHasProperty.js000066400000000000000000000007651516525472400226700ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); // https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty module.exports = function OrdinaryHasProperty(O, P) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } return P in O; }; ljharb-es-abstract-babee05/2025/OrdinaryObjectCreate.js000066400000000000000000000031331516525472400227320ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $ObjectCreate = GetIntrinsic('%Object.create%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isObject = require('es-object-atoms/isObject'); var IsArray = require('./IsArray'); var forEach = require('../helpers/forEach'); var SLOT = require('internal-slot'); var hasProto = require('has-proto')(); // https://262.ecma-international.org/11.0/#sec-objectcreate module.exports = function OrdinaryObjectCreate(proto) { if (proto !== null && !isObject(proto)) { throw new $TypeError('Assertion failed: `proto` must be null or an object'); } var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; if (!IsArray(additionalInternalSlotsList)) { throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); } // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 // internalSlotsList.push(...additionalInternalSlotsList); // step 2 // var O = MakeBasicObject(internalSlotsList); // step 3 // setProto(O, proto); // step 4 // return O; // step 5 var O; if (hasProto) { O = { __proto__: proto }; } else if ($ObjectCreate) { O = $ObjectCreate(proto); } else { if (proto === null) { throw new $SyntaxError('native Object.create support is required to create null objects'); } var T = function T() {}; T.prototype = proto; O = new T(); } if (additionalInternalSlotsList.length > 0) { forEach(additionalInternalSlotsList, function (slot) { SLOT.set(O, slot, void undefined); }); } return O; }; ljharb-es-abstract-babee05/2025/OrdinarySetPrototypeOf.js000066400000000000000000000017451516525472400233550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $setProto = require('set-proto'); var isObject = require('es-object-atoms/isObject'); var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf'); // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof module.exports = function OrdinarySetPrototypeOf(O, V) { if (V !== null && !isObject(V)) { throw new $TypeError('Assertion failed: V must be Object or Null'); } /* var extensible = IsExtensible(O); var current = OrdinaryGetPrototypeOf(O); if (SameValue(V, current)) { return true; } if (!extensible) { return false; } */ try { $setProto(O, V); } catch (e) { return false; } return OrdinaryGetPrototypeOf(O) === V; /* var p = V; var done = false; while (!done) { if (p === null) { done = true; } else if (SameValue(p, O)) { return false; } else { if (wat) { done = true; } else { p = p.[[Prototype]]; } } } O.[[Prototype]] = V; return true; */ }; ljharb-es-abstract-babee05/2025/OrdinaryToPrimitive.js000066400000000000000000000020001516525472400226430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); var inspect = require('object-inspect'); // https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive module.exports = function OrdinaryToPrimitive(O, hint) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (/* typeof hint !== 'string' || */ hint !== 'string' && hint !== 'number') { throw new $TypeError('Assertion failed: `hint` must be "string" or "number"'); } var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString']; for (var i = 0; i < methodNames.length; i += 1) { var name = methodNames[i]; var method = Get(O, name); if (IsCallable(method)) { var result = Call(method, O); if (!isObject(result)) { return result; } } } throw new $TypeError('No primitive value for ' + inspect(O)); }; ljharb-es-abstract-babee05/2025/ParseHexOctet.js000066400000000000000000000024601516525472400214100ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isInteger = require('math-intrinsics/isInteger'); var isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/14.0/#sec-parsehexoctet module.exports = function ParseHexOctet(string, position) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (!isInteger(position) || position < 0) { throw new $TypeError('Assertion failed: `position` must be a nonnegative integer'); } var len = string.length; // step 1 if ((position + 2) > len) { // step 2 var error = new $SyntaxError('requested a position on a string that does not contain 2 characters at that position'); // step 2.a return [error]; // step 2.b } var hexDigits = substring(string, position, position + 2); // step 3 var n = +('0x' + hexDigits); if (isNaN(n)) { return [new $SyntaxError('Invalid hexadecimal characters')]; } return n; /* 4. Let _parseResult_ be ParseText(StringToCodePoints(_hexDigits_), |HexDigits[~Sep]|). 5. If _parseResult_ is not a Parse Node, return _parseResult_. 6. Let _n_ be the unsigned 8-bit value corresponding with the MV of _parseResult_. 7. Return _n_. */ }; ljharb-es-abstract-babee05/2025/PromiseResolve.js000066400000000000000000000007721516525472400216540ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBind = require('call-bind'); var $SyntaxError = require('es-errors/syntax'); var $resolve = GetIntrinsic('%Promise.resolve%', true); var $PromiseResolve = $resolve && callBind($resolve); // https://262.ecma-international.org/9.0/#sec-promise-resolve module.exports = function PromiseResolve(C, x) { if (!$PromiseResolve) { throw new $SyntaxError('This environment does not support Promises.'); } return $PromiseResolve(C, x); }; ljharb-es-abstract-babee05/2025/QuoteJSONString.js000066400000000000000000000026161516525472400216530ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var forEach = require('../helpers/forEach'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $strSplit = callBound('String.prototype.split'); var StringToCodePoints = require('./StringToCodePoints'); var UnicodeEscape = require('./UnicodeEscape'); var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint'); var hasOwn = require('hasown'); // https://262.ecma-international.org/12.0/#sec-quotejsonstring var escapes = { '\u0008': '\\b', '\u0009': '\\t', '\u000A': '\\n', '\u000C': '\\f', '\u000D': '\\r', '\u0022': '\\"', '\u005c': '\\\\' }; module.exports = function QuoteJSONString(value) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `value` must be a String'); } var product = '"'; if (value) { forEach($strSplit(StringToCodePoints(value), ''), function (C) { if (hasOwn(escapes, C)) { product += escapes[C]; } else { var cCharCode = $charCodeAt(C, 0); if (cCharCode < 0x20 || isLeadingSurrogate(cCharCode) || isTrailingSurrogate(cCharCode)) { product += UnicodeEscape(C); } else { product += UTF16EncodeCodePoint(cCharCode); } } }); } product += '"'; return product; }; ljharb-es-abstract-babee05/2025/RawBytesToNumeric.js000066400000000000000000000046531516525472400222660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var $BigInt = GetIntrinsic('%BigInt%', true); var hasOwnProperty = require('./HasOwnProperty'); var IsArray = require('./IsArray'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnsignedElementType = require('./IsUnsignedElementType'); var bytesAsFloat16 = require('../helpers/bytesAsFloat16'); var bytesAsFloat32 = require('../helpers/bytesAsFloat32'); var bytesAsFloat64 = require('../helpers/bytesAsFloat64'); var bytesAsInteger = require('../helpers/bytesAsInteger'); var every = require('../helpers/every'); var isByteValue = require('../helpers/isByteValue'); var $reverse = callBound('Array.prototype.reverse'); var $slice = callBound('Array.prototype.slice'); var tableTAO = require('./tables/typed-array-objects'); // https://262.ecma-international.org/15.0/#sec-rawbytestonumeric module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) { if (!hasOwnProperty(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be a TypedArray element type'); } if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) { throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes'); } if (typeof isLittleEndian !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean'); } var elementSize = tableTAO.size['$' + type]; // step 1 if (rawBytes.length !== elementSize) { // this assertion is not in the spec, but it'd be an editorial error if it were ever violated throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type); } var isBigInt = IsBigIntElementType(type); if (isBigInt && !$BigInt) { throw new $SyntaxError('this environment does not support BigInts'); } // eslint-disable-next-line no-param-reassign rawBytes = $slice(rawBytes, 0, elementSize); if (!isLittleEndian) { $reverse(rawBytes); // step 2 } if (type === 'FLOAT16') { // step 3 return bytesAsFloat16(rawBytes); } if (type === 'FLOAT32') { // step 4 return bytesAsFloat32(rawBytes); } if (type === 'FLOAT64') { // step 5 return bytesAsFloat64(rawBytes); } return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt); }; ljharb-es-abstract-babee05/2025/RegExpCreate.js000066400000000000000000000012031516525472400212020ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); // var RegExpAlloc = require('./RegExpAlloc'); // var RegExpInitialize = require('./RegExpInitialize'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-regexpcreate module.exports = function RegExpCreate(P, F) { // var obj = RegExpAlloc($RegExp); // return RegExpInitialize(obj, P, F); // covers spec mechanics; bypass regex brand checking var pattern = typeof P === 'undefined' ? '' : ToString(P); var flags = typeof F === 'undefined' ? '' : ToString(F); return new $RegExp(pattern, flags); }; ljharb-es-abstract-babee05/2025/RegExpExec.js000066400000000000000000000014761516525472400206770ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var regexExec = require('call-bound')('RegExp.prototype.exec'); var Call = require('./Call'); var Get = require('./Get'); var IsCallable = require('./IsCallable'); // https://262.ecma-international.org/6.0/#sec-regexpexec module.exports = function RegExpExec(R, S) { if (!isObject(R)) { throw new $TypeError('Assertion failed: `R` must be an Object'); } if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var exec = Get(R, 'exec'); if (IsCallable(exec)) { var result = Call(exec, R, [S]); if (result === null || isObject(result)) { return result; } throw new $TypeError('"exec" method must return `null` or an Object'); } return regexExec(R, S); }; ljharb-es-abstract-babee05/2025/RegExpHasFlag.js000066400000000000000000000021211516525472400213040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $RegExpPrototype = GetIntrinsic('%RegExp.prototype%'); var SameValue = require('./SameValue'); var $indexOf = callBound('String.prototype.indexOf'); var hasRegExpMatcher = require('is-regex'); var getFlags = require('regexp.prototype.flags'); // https://262.ecma-international.org/13.0/#sec-regexphasflag module.exports = function RegExpHasFlag(R, codeUnit) { if (typeof codeUnit !== 'string' || codeUnit.length !== 1) { throw new $TypeError('Assertion failed: `string` must be a code unit - a String of length 1'); } if (!isObject(R)) { throw new $TypeError('Assertion failed: Type(R) is not Object'); } if (!hasRegExpMatcher(R)) { // step 2 if (SameValue(R, $RegExpPrototype)) { return void undefined; // step 2.a } throw new $TypeError('`R` must be a RegExp object'); // step 2.b } var flags = getFlags(R); // step 3 return $indexOf(flags, codeUnit) > -1; // steps 4-5 }; ljharb-es-abstract-babee05/2025/RequireObjectCoercible.js000066400000000000000000000001231516525472400232370ustar00rootroot00000000000000'use strict'; module.exports = require('es-object-atoms/RequireObjectCoercible'); ljharb-es-abstract-babee05/2025/ReturnCompletion.js000066400000000000000000000003361516525472400222030ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://tc39.es/ecma262/#sec-returncompletion module.exports = function ReturnCompletion(value) { return new CompletionRecord('return', value); }; ljharb-es-abstract-babee05/2025/SameType.js000066400000000000000000000004311516525472400204150ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/16.0/#sec-sametype module.exports = function SameType(x, y) { if (x === y) { return true; } if ( (x === null && y !== null) || (x !== null && y === null) ) { return false; } return typeof x === typeof y; }; ljharb-es-abstract-babee05/2025/SameValue.js000066400000000000000000000004701516525472400205530ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/2025/SameValueNonNumber.js000066400000000000000000000010321516525472400223720ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var SameValue = require('./SameValue'); var SameType = require('./SameType'); // https://262.ecma-international.org/16.0/#sec-samevaluenonnumeric module.exports = function SameValueNonNumber(x, y) { if (typeof x === 'number') { throw new $TypeError('Assertion failed: SameValueNonNumber does not accept Number values'); } if (!SameType(x, y)) { throw new $TypeError('SameValueNonNumber requires two non-Number values of the same type.'); } return SameValue(x, y); }; ljharb-es-abstract-babee05/2025/SameValueZero.js000066400000000000000000000003371516525472400214150ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-samevaluezero module.exports = function SameValueZero(x, y) { return (x === y) || ($isNaN(x) && $isNaN(y)); }; ljharb-es-abstract-babee05/2025/SecFromTime.js000066400000000000000000000006221516525472400210450ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/2025/Set.js000066400000000000000000000023121516525472400174210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { return false; } }()); // https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw module.exports = function Set(O, P, V, Throw) { if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: `P` must be a Property Key'); } if (typeof Throw !== 'boolean') { throw new $TypeError('Assertion failed: `Throw` must be a Boolean'); } if (Throw) { O[P] = V; // eslint-disable-line no-param-reassign if (noThrowOnStrictViolation && !SameValue(O[P], V)) { throw new $TypeError('Attempted to assign to readonly property.'); } return true; } try { O[P] = V; // eslint-disable-line no-param-reassign return noThrowOnStrictViolation ? SameValue(O[P], V) : true; } catch (e) { return false; } }; ljharb-es-abstract-babee05/2025/SetDataHas.js000066400000000000000000000013641516525472400206550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CanonicalizeKeyedCollectionKey = require('./CanonicalizeKeyedCollectionKey'); var IsArray = require('./IsArray'); var SameValue = require('./SameValue'); var some = require('../helpers/some'); // https://262.ecma-international.org/16.0/#sec-setdatahas module.exports = function SetDataHas(setData, value) { if (!IsArray(setData) && setData !== 'EMPTY') { throw new $TypeError('Assertion failed: `setData` must be a List or ~EMPTY~'); } // if (SetDataIndex(setData, value) === 'NOT-FOUND') { return false; } // step 1 // return true; // step 2 var canonValue = CanonicalizeKeyedCollectionKey(value); return some(setData, function (e) { return SameValue(e, canonValue); }); }; ljharb-es-abstract-babee05/2025/SetDataIndex.js000066400000000000000000000015301516525472400212040ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CanonicalizeKeyedCollectionKey = require('./CanonicalizeKeyedCollectionKey'); var SameValue = require('./SameValue'); var isArray = require('../helpers/IsArray'); // https://262.ecma-international.org/16.0/#sec-setdataindex module.exports = function SetDataIndex(setData, value) { if (!isArray(setData) && setData !== 'EMPTY') { throw new $TypeError('Assertion failed: `setData` must be a List or ~EMPTY~'); } var canonValue = CanonicalizeKeyedCollectionKey(value); // step 1 var size = setData.length; // step 2 var index = 0; // step 3 while (index < size) { // step 4 var e = setData[index]; // step 4.a if (/* e !== ~EMPTY~ && */ SameValue(e, canonValue)) { // step 4.b return index; // step 4.b.i } index += 1; // step 4.c } return 'NOT-FOUND'; // step 5 }; ljharb-es-abstract-babee05/2025/SetDataSize.js000066400000000000000000000012611516525472400210500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var forEach = require('../helpers/forEach'); var isArray = require('../helpers/IsArray'); // https://262.ecma-international.org/16.0/#sec-setdatasize // TODO: when spec enums are unforgeable, uncomment ~EMPTY~ check module.exports = function SetDataSize(setData) { if (!isArray(setData) && setData !== 'EMPTY') { throw new $TypeError('Assertion failed: `setData` must be a List or ~EMPTY~'); } if (setData === 'EMPTY') { return 0; } var count = 0; // step 1 forEach(setData, function (e, i) { // step 2 if (i in setData /* && e !== ~EMPTY~ */) { count += 1; // step 2.a } }); return count; // step 3 }; ljharb-es-abstract-babee05/2025/SetFunctionLength.js000066400000000000000000000017721516525472400223020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var HasOwnProperty = require('./HasOwnProperty'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/12.0/#sec-setfunctionlength module.exports = function SetFunctionLength(F, length) { if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) { throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property'); } if (typeof length !== 'number') { throw new $TypeError('Assertion failed: `length` must be a Number'); } if (length !== Infinity && (!isInteger(length) || length < 0)) { throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0'); } return DefinePropertyOrThrow(F, 'length', { '[[Configurable]]': true, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); }; ljharb-es-abstract-babee05/2025/SetFunctionName.js000066400000000000000000000024101516525472400217270ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var getSymbolDescription = require('get-symbol-description'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsExtensible = require('./IsExtensible'); // https://262.ecma-international.org/6.0/#sec-setfunctionname module.exports = function SetFunctionName(F, name) { if (typeof F !== 'function') { throw new $TypeError('Assertion failed: `F` must be a function'); } if (!IsExtensible(F) || hasOwn(F, 'name')) { throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); } if (typeof name !== 'symbol' && typeof name !== 'string') { throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); } if (typeof name === 'symbol') { var description = getSymbolDescription(name); // eslint-disable-next-line no-param-reassign name = typeof description === 'undefined' ? '' : '[' + description + ']'; } if (arguments.length > 2) { var prefix = arguments[2]; // eslint-disable-next-line no-param-reassign name = prefix + ' ' + name; } return DefinePropertyOrThrow(F, 'name', { '[[Value]]': name, '[[Writable]]': false, '[[Enumerable]]': false, '[[Configurable]]': true }); }; ljharb-es-abstract-babee05/2025/SetIntegrityLevel.js000066400000000000000000000034541516525472400223200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var $gOPD = require('gopd'); var $preventExtensions = GetIntrinsic('%Object.preventExtensions%', true); var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%', true); var forEach = require('../helpers/forEach'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-setintegritylevel module.exports = function SetIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } if (!$preventExtensions) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support'); } var status = $preventExtensions(O); if (!status) { return false; } if (!$gOPN) { throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support'); } var theKeys = $gOPN(O); if (level === 'sealed') { forEach(theKeys, function (k) { DefinePropertyOrThrow(O, k, { configurable: false }); }); } else if (level === 'frozen') { forEach(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { var desc; if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) { desc = { configurable: false }; } else { desc = { configurable: false, writable: false }; } DefinePropertyOrThrow(O, k, desc); } }); } return true; }; ljharb-es-abstract-babee05/2025/SetTypedArrayFromArrayLike.js000066400000000000000000000042241516525472400240620ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var isTypedArray = require('is-typed-array'); var whichTypedArray = require('which-typed-array'); var Get = require('./Get'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var LengthOfArrayLike = require('./LengthOfArrayLike'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var ToObject = require('./ToObject'); var ToString = require('./ToString'); var TypedArrayLength = require('./TypedArrayLength'); var TypedArraySetElement = require('./TypedArraySetElement'); // https://262.ecma-international.org/15.0/#sec-settypedarrayfromarraylike module.exports = function SetTypedArrayFromArrayLike(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: `target` must be a Typed Array'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: `targetOffset` must be a non-negative integer or +Infinity'); } if (isTypedArray(source)) { throw new $TypeError('Assertion failed: `source` must not be a Typed Array'); } var targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, 'SEQ-CST'); // step 1 if (IsTypedArrayOutOfBounds(targetRecord)) { throw new $TypeError('target is out of bounds'); // step 2 } var targetLength = TypedArrayLength(targetRecord); // step 3 var src = ToObject(source); // step 4 var srcLength = LengthOfArrayLike(src); // step 5 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a finite integer'); // step 6 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + srcLength must be <= target.length'); // step 7 } var k = 0; // step 8 while (k < srcLength) { // step 9 var Pk = ToString(k); // step 9.a var value = Get(src, Pk); // step 9.b var targetIndex = targetOffset + k; // step 9.c TypedArraySetElement(target, targetIndex, value); // step 9.d k += 1; // step 9.e } }; ljharb-es-abstract-babee05/2025/SetTypedArrayFromTypedArray.js000066400000000000000000000122401516525472400242600ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var CloneArrayBuffer = require('./CloneArrayBuffer'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsSharedArrayBuffer = require('./IsSharedArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var SameValue = require('./SameValue'); var SetValueInBuffer = require('./SetValueInBuffer'); var TypedArrayByteLength = require('./TypedArrayByteLength'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var TypedArrayLength = require('./TypedArrayLength'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); var GetIntrinsic = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $ArrayBuffer = GetIntrinsic('%ArrayBuffer%', true); // https://262.ecma-international.org/15.0/#sec-settypedarrayfromtypedarray module.exports = function SetTypedArrayFromTypedArray(target, targetOffset, source) { var whichTarget = whichTypedArray(target); if (!whichTarget) { throw new $TypeError('Assertion failed: `target` must be a Typed Array'); } if (targetOffset !== Infinity && (!isInteger(targetOffset) || targetOffset < 0)) { throw new $TypeError('Assertion failed: `targetOffset` must be a non-negative integer or +Infinity'); } var whichSource = whichTypedArray(source); if (!whichSource) { throw new $TypeError('Assertion failed: `source` must be a Typed Array'); } var targetBuffer = typedArrayBuffer(target); // step 1 var targetRecord = MakeTypedArrayWithBufferWitnessRecord(target, 'SEQ-CST'); // step 2 if (IsTypedArrayOutOfBounds(targetRecord)) { throw new $TypeError('target is out of bounds'); // step 3 } var targetLength = TypedArrayLength(targetRecord); // step 4 var srcBuffer = typedArrayBuffer(source); // step 5 var srcRecord = MakeTypedArrayWithBufferWitnessRecord(source, 'SEQ-CST'); // step 6 if (IsTypedArrayOutOfBounds(srcRecord)) { throw new $TypeError('target is out of bounds'); // step 7 } var srcLength = TypedArrayLength(srcRecord); // step 8 var targetType = TypedArrayElementType(target); // step 9 var targetElementSize = TypedArrayElementSize(target); // step 10 var targetByteOffset = typedArrayByteOffset(target); // step 11 var srcType = TypedArrayElementType(source); // step 12 var srcElementSize = TypedArrayElementSize(source); // step 13 var srcByteOffset = typedArrayByteOffset(source); // step 14 if (targetOffset === Infinity) { throw new $RangeError('targetOffset must be a non-negative integer or +Infinity'); // step 15 } if (srcLength + targetOffset > targetLength) { throw new $RangeError('targetOffset + source.length must not be greater than target.length'); // step 16 } var targetContentType = whichTarget === 'BigInt64Array' || whichTarget === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; var sourceContentType = whichSource === 'BigInt64Array' || whichSource === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; if (targetContentType !== sourceContentType) { throw new $TypeError('source and target must have the same content type'); // step 17 } var sameSharedArrayBuffer = false; if (IsSharedArrayBuffer(srcBuffer) && IsSharedArrayBuffer(targetBuffer)) { // step 18 // a. If srcBuffer.[[ArrayBufferData]] and targetBuffer.[[ArrayBufferData]] are the same Shared Data Block values, let same be true; else let same be false. throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } var srcByteIndex; if (SameValue(srcBuffer, targetBuffer) || sameSharedArrayBuffer) { // step 19 var srcByteLength = TypedArrayByteLength(srcRecord); // step 19.a srcBuffer = CloneArrayBuffer(srcBuffer, srcByteOffset, srcByteLength, $ArrayBuffer); // step 19.b srcByteIndex = 0; // step 19.c } else { // step 20 srcByteIndex = srcByteOffset; // step 20.a } var targetByteIndex = (targetOffset * targetElementSize) + targetByteOffset; // step 21 var limit = targetByteIndex + (targetElementSize * srcLength); // step 22 var value; if (srcType === targetType) { // step 23 // a. NOTE: The transfer must be performed in a manner that preserves the bit-level encoding of the source data. while (targetByteIndex < limit) { // step 23.b value = GetValueFromBuffer(srcBuffer, srcByteIndex, 'UINT8', true, 'UNORDERED'); // step 23.b.i SetValueInBuffer(targetBuffer, targetByteIndex, 'UINT8', value, true, 'UNORDERED'); // step 23.b.ii srcByteIndex += 1; // step 23.b.iii targetByteIndex += 1; // step 23.b.iv } } else { // step 24 while (targetByteIndex < limit) { // step 24.a value = GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, 'UNORDERED'); // step 24.a.i SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, 'UNORDERED'); // step 24.a.ii srcByteIndex += srcElementSize; // step 24.a.iii targetByteIndex += targetElementSize; // step 24.a.iv } } }; ljharb-es-abstract-babee05/2025/SetValueInBuffer.js000066400000000000000000000100761516525472400220450ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var IsBigIntElementType = require('./IsBigIntElementType'); var IsDetachedBuffer = require('./IsDetachedBuffer'); var NumericToRawBytes = require('./NumericToRawBytes'); var isArrayBuffer = require('is-array-buffer'); var isSharedArrayBuffer = require('is-shared-array-buffer'); var hasOwn = require('hasown'); var tableTAO = require('./tables/typed-array-objects'); var defaultEndianness = require('../helpers/defaultEndianness'); var forEach = require('../helpers/forEach'); // https://262.ecma-international.org/15.0/#sec-setvalueinbuffer /* eslint max-params: 0 */ module.exports = function SetValueInBuffer(arrayBuffer, byteIndex, type, value, isTypedArray, order) { var isSAB = isSharedArrayBuffer(arrayBuffer); if (!isArrayBuffer(arrayBuffer) && !isSAB) { throw new $TypeError('Assertion failed: `arrayBuffer` must be an ArrayBuffer or a SharedArrayBuffer'); } if (!isInteger(byteIndex) || byteIndex < 0) { throw new $TypeError('Assertion failed: `byteIndex` must be a non-negative integer'); } if (typeof type !== 'string' || !hasOwn(tableTAO.size, '$' + type)) { throw new $TypeError('Assertion failed: `type` must be one of ' + tableTAO.choices); } if (typeof value !== 'number' && typeof value !== 'bigint') { throw new $TypeError('Assertion failed: `value` must be a Number or a BigInt'); } if (typeof isTypedArray !== 'boolean') { throw new $TypeError('Assertion failed: `isTypedArray` must be a boolean'); } if (order !== 'SEQ-CST' && order !== 'UNORDERED' && order !== 'INIT') { throw new $TypeError('Assertion failed: `order` must be `"SEQ-CST"`, `"UNORDERED"`, or `"INIT"`'); } if (arguments.length > 6 && typeof arguments[6] !== 'boolean') { throw new $TypeError('Assertion failed: `isLittleEndian` must be a boolean, if present'); } if (IsDetachedBuffer(arrayBuffer)) { throw new $TypeError('Assertion failed: ArrayBuffer is detached'); // step 1 } // 2. Assert: There are sufficient bytes in arrayBuffer starting at byteIndex to represent a value of type. if (IsBigIntElementType(type) ? typeof value !== 'bigint' : typeof value !== 'number') { // step 3 throw new $TypeError('Assertion failed: `value` must be a BigInt if type is ~BIGINT64~ or ~BIGUINT64~, otherwise a Number'); } // 4. Let block be arrayBuffer’s [[ArrayBufferData]] internal slot. var elementSize = tableTAO.size['$' + type]; // step 5 // 6. If isLittleEndian is not present, set isLittleEndian to either true or false. The choice is implementation dependent and should be the alternative that is most efficient for the implementation. An implementation must use the same value each time this step is executed and the same value must be used for the corresponding step in the GetValueFromBuffer abstract operation. var isLittleEndian = arguments.length > 6 ? arguments[6] : defaultEndianness === 'little'; // step 6 var rawBytes = NumericToRawBytes(type, value, isLittleEndian); // step 7 if (isSAB) { // step 8 /* Let execution be the [[CandidateExecution]] field of the surrounding agent's Agent Record. Let eventList be the [[EventList]] field of the element in execution.[[EventsRecords]] whose [[AgentSignifier]] is AgentSignifier(). If isTypedArray is true and IsNoTearConfiguration(type, order) is true, let noTear be true; otherwise let noTear be false. Append WriteSharedMemory { [[Order]]: order, [[NoTear]]: noTear, [[Block]]: block, [[ByteIndex]]: byteIndex, [[ElementSize]]: elementSize, [[Payload]]: rawBytes } to eventList. */ throw new $SyntaxError('SharedArrayBuffer is not supported by this implementation'); } else { // 9. Store the individual bytes of rawBytes into block, in order, starting at block[byteIndex]. var arr = new $Uint8Array(arrayBuffer, byteIndex, elementSize); forEach(rawBytes, function (rawByte, i) { arr[i] = rawByte; }); } // 10. Return NormalCompletion(undefined). }; ljharb-es-abstract-babee05/2025/SetterThatIgnoresPrototypeProperties.js000066400000000000000000000023371516525472400263160ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var gOPD = require('gopd'); var isObject = require('../helpers/isObject'); var isPropertyKey = require('../helpers/isPropertyKey'); var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow'); var SameValue = require('./SameValue'); var Set = require('./Set'); // https://262.ecma-international.org/16.0/#sec-SetterThatIgnoresPrototypeProperties module.exports = function SetterThatIgnoresPrototypeProperties(thisValue, home, p, v) { if (!isObject(home)) { throw new $TypeError('Assertion failed: `home` must be an object'); } if (!isPropertyKey(p)) { throw new $TypeError('Assertion failed: `p` must be a Property Key'); } if (!isObject(thisValue)) { // step 1 throw new $TypeError('Assertion failed: `thisValue` must be an Object'); // step 1.a } if (SameValue(thisValue, home)) { // step 2 throw new $TypeError('Throwing here emulates assignment to a non-writable data property on the `home` object in strict mode code'); // step 2.b } var desc = gOPD(thisValue, p); // step 3 if (typeof desc === 'undefined') { // step 4 CreateDataPropertyOrThrow(thisValue, p, v); // step 4.a } else { // step 5 Set(thisValue, p, v, true); // step 5.a } }; ljharb-es-abstract-babee05/2025/SortIndexedProperties.js000066400000000000000000000027551516525472400232060ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var isObject = require('es-object-atoms/isObject'); var Get = require('./Get'); var HasProperty = require('./HasProperty'); var ToString = require('./ToString'); var isAbstractClosure = require('../helpers/isAbstractClosure'); var $sort = callBound('Array.prototype.sort'); // https://262.ecma-international.org/14.0/#sec-sortindexedproperties module.exports = function SortIndexedProperties(obj, len, SortCompare, holes) { if (!isObject(obj)) { throw new $TypeError('Assertion failed: Type(obj) is not Object'); } if (!isInteger(len) || len < 0) { throw new $TypeError('Assertion failed: `len` must be an integer >= 0'); } if (!isAbstractClosure(SortCompare) || SortCompare.length !== 2) { throw new $TypeError('Assertion failed: `SortCompare` must be an abstract closure taking 2 arguments'); } if (holes !== 'skip-holes' && holes !== 'read-through-holes') { throw new $TypeError('Assertion failed: `holes` must be either ~skip-holes~ or ~read-through-holes~'); } var items = []; // step 1 var k = 0; // step 2 while (k < len) { // step 3 var Pk = ToString(k); var kRead = holes === 'skip-holes' ? HasProperty(obj, Pk) : true; // step 3.b - 3.c if (kRead) { // step 3.d var kValue = Get(obj, Pk); items[items.length] = kValue; } k += 1; // step 3.e } $sort(items, SortCompare); // step 4 return items; // step 5 }; ljharb-es-abstract-babee05/2025/SpeciesConstructor.js000066400000000000000000000015131516525472400225310ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $species = GetIntrinsic('%Symbol.species%', true); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsConstructor = require('./IsConstructor'); // https://262.ecma-international.org/6.0/#sec-speciesconstructor module.exports = function SpeciesConstructor(O, defaultConstructor) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } var C = O.constructor; if (typeof C === 'undefined') { return defaultConstructor; } if (!isObject(C)) { throw new $TypeError('O.constructor is not an Object'); } var S = $species ? C[$species] : void 0; if (S == null) { return defaultConstructor; } if (IsConstructor(S)) { return S; } throw new $TypeError('no constructor found'); }; ljharb-es-abstract-babee05/2025/StringCreate.js000066400000000000000000000020631516525472400212630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Object = require('es-object-atoms'); var $StringPrototype = GetIntrinsic('%String.prototype%'); var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var setProto = require('set-proto'); var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); // https://262.ecma-international.org/6.0/#sec-stringcreate module.exports = function StringCreate(value, prototype) { if (typeof value !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } var S = $Object(value); if (prototype !== $StringPrototype) { if (setProto) { setProto(S, prototype); } else { throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]'); } } var length = value.length; DefinePropertyOrThrow(S, 'length', { '[[Configurable]]': false, '[[Enumerable]]': false, '[[Value]]': length, '[[Writable]]': false }); return S; }; ljharb-es-abstract-babee05/2025/StringGetOwnProperty.js000066400000000000000000000025351516525472400230340ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var isObject = require('es-object-atoms/isObject'); var callBound = require('call-bound'); var $charAt = callBound('String.prototype.charAt'); var $stringToString = callBound('String.prototype.toString'); var CanonicalNumericIndexString = require('./CanonicalNumericIndexString'); var isPropertyKey = require('../helpers/isPropertyKey'); var isInteger = require('math-intrinsics/isInteger'); // https://262.ecma-international.org/12.0/#sec-stringgetownproperty module.exports = function StringGetOwnProperty(S, P) { var str; if (isObject(S)) { try { str = $stringToString(S); } catch (e) { /**/ } } if (typeof str !== 'string') { throw new $TypeError('Assertion failed: `S` must be a boxed string object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P is not a Property Key'); } if (typeof P !== 'string') { return void undefined; } var index = CanonicalNumericIndexString(P); var len = str.length; if (typeof index === 'undefined' || !isInteger(index) || isNegativeZero(index) || index < 0 || len <= index) { return void undefined; } var resultStr = $charAt(S, index); return { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': resultStr, '[[Writable]]': false }; }; ljharb-es-abstract-babee05/2025/StringIndexOf.js000066400000000000000000000021231516525472400214110ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/16.0/#sec-stringindexof module.exports = function StringIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a String'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; // step 1 if (searchValue === '' && fromIndex <= len) { return fromIndex; // step 2 } var searchLen = searchValue.length; // step 3 for (var i = fromIndex; i <= (len - searchLen); i += 1) { // step 4 var candidate = $slice(string, i, i + searchLen); // step 4.a if (candidate === searchValue) { return i; // step 4.b } } return 'NOT-FOUND'; // step 5 }; ljharb-es-abstract-babee05/2025/StringLastIndexOf.js000066400000000000000000000021121516525472400222330ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var substring = require('./substring'); var isInteger = require('../helpers/isInteger'); // https://262.ecma-international.org/16.0/#sec-stringlastindexof module.exports = function StringLastIndexOf(string, searchValue, fromIndex) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a string'); } if (typeof searchValue !== 'string') { throw new $TypeError('Assertion failed: `searchValue` must be a string'); } if (!isInteger(fromIndex) || fromIndex < 0) { throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer'); } var len = string.length; // step 1 var searchLen = searchValue.length; // step 2 if (!((fromIndex + searchLen) <= len)) { throw new $TypeError('Assertion failed: fromIndex + searchLen ≤ len'); // step 3 } for (var i = fromIndex; i >= 0; i--) { // step 4 var candidate = substring(string, i, i + searchLen); // step 4.a if (candidate === searchValue) { return i; // step 4.b } } return 'NOT-FOUND'; // step 5 }; ljharb-es-abstract-babee05/2025/StringPad.js000066400000000000000000000030401516525472400205600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $strSlice = callBound('String.prototype.slice'); // https://262.ecma-international.org/15.0/#sec-stringpad module.exports = function StringPad(S, maxLength, fillString, placement) { if (typeof S !== 'string') { throw new $TypeError('Assertion failed: `S` must be a String'); } if (!isInteger(maxLength) || maxLength < 0) { throw new $TypeError('Assertion failed: `maxLength` must be a non-negative integer'); } if (typeof fillString !== 'string') { throw new $TypeError('Assertion failed: `fillString` must be a String'); } if (placement !== 'start' && placement !== 'end' && placement !== 'START' && placement !== 'END') { throw new $TypeError('Assertion failed: `placement` must be ~START~ or ~END~'); } var stringLength = S.length; // step 1 if (maxLength <= stringLength) { return S; } // step 2 if (fillString === '') { return S; } // step 3 var fillLen = maxLength - stringLength; // step 4 // 5. Let _truncatedStringFiller_ be the String value consisting of repeated concatenations of _fillString_ truncated to length _fillLen_. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += fillString; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start' || placement === 'START') { return truncatedStringFiller + S; } // step 6 return S + truncatedStringFiller; // step 7 }; ljharb-es-abstract-babee05/2025/StringPaddingBuiltinsImpl.js000066400000000000000000000015541516525472400237660ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var StringPad = require('./StringPad'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); // https://262.ecma-international.org/15.0/#sec-stringpaddingbuiltinsimpl module.exports = function StringPaddingBuiltinsImpl(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end' && placement !== 'START' && placement !== 'END') { throw new $TypeError('Assertion failed: `placement` must be ~START~ or ~END~'); } var S = ToString(O); // step 1 var intMaxLength = ToLength(maxLength); // step 2 var stringLength = S.length; // step 3 if (intMaxLength <= stringLength) { return S; } // step 4 var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); // steps 5-6 return StringPad(S, intMaxLength, filler, placement); // step 7 }; ljharb-es-abstract-babee05/2025/StringToBigInt.js000066400000000000000000000011141516525472400215330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); // https://262.ecma-international.org/14.0/#sec-stringtobigint module.exports = function StringToBigInt(argument) { if (typeof argument !== 'string') { throw new $TypeError('`argument` must be a string'); } if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } try { return $BigInt(argument); } catch (e) { return void undefined; } }; ljharb-es-abstract-babee05/2025/StringToCodePoints.js000066400000000000000000000011221516525472400224250ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var CodePointAt = require('./CodePointAt'); // https://262.ecma-international.org/12.0/#sec-stringtocodepoints module.exports = function StringToCodePoints(string) { if (typeof string !== 'string') { throw new $TypeError('Assertion failed: `string` must be a String'); } var codePoints = []; var size = string.length; var position = 0; while (position < size) { var cp = CodePointAt(string, position); codePoints[codePoints.length] = cp['[[CodePoint]]']; position += cp['[[CodeUnitCount]]']; } return codePoints; }; ljharb-es-abstract-babee05/2025/StringToNumber.js000066400000000000000000000023561516525472400216200ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $RegExp = GetIntrinsic('%RegExp%'); var $TypeError = require('es-errors/type'); var $parseInteger = GetIntrinsic('%parseInt%'); var callBound = require('call-bound'); var regexTester = require('safe-regex-test'); var $strSlice = callBound('String.prototype.slice'); var isBinary = regexTester(/^0b[01]+$/i); var isOctal = regexTester(/^0o[0-7]+$/i); var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i); var nonWS = ['\u0085', '\u200b', '\ufffe'].join(''); var nonWSregex = new $RegExp('[' + nonWS + ']', 'g'); var hasNonWS = regexTester(nonWSregex); var $trim = require('string.prototype.trim'); // https://262.ecma-international.org/13.0/#sec-stringtonumber module.exports = function StringToNumber(argument) { if (typeof argument !== 'string') { throw new $TypeError('Assertion failed: `argument` is not a String'); } if (isBinary(argument)) { return +$parseInteger($strSlice(argument, 2), 2); } if (isOctal(argument)) { return +$parseInteger($strSlice(argument, 2), 8); } if (hasNonWS(argument) || isInvalidHexLiteral(argument)) { return NaN; } var trimmed = $trim(argument); if (trimmed !== argument) { return StringToNumber(trimmed); } return +argument; }; ljharb-es-abstract-babee05/2025/SymbolDescriptiveString.js000066400000000000000000000006621516525472400235320ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $SymbolToString = callBound('Symbol.prototype.toString', true); // https://262.ecma-international.org/6.0/#sec-symboldescriptivestring module.exports = function SymbolDescriptiveString(sym) { if (typeof sym !== 'symbol') { throw new $TypeError('Assertion failed: `sym` must be a Symbol'); } return $SymbolToString(sym); }; ljharb-es-abstract-babee05/2025/SystemTimeZoneIdentifier.js000066400000000000000000000010221516525472400236250ustar00rootroot00000000000000'use strict'; var callBind = require('call-bind'); var I402 = typeof Intl === 'undefined' ? null : Intl; var DateTimeFormat = !!I402 && I402.DateTimeFormat; var resolvedOptions = !!DateTimeFormat && callBind(DateTimeFormat.prototype.resolvedOptions); // https://262.ecma-international.org/15.0/#sec-systemtimezoneidentifier module.exports = function SystemTimeZoneIdentifier() { if (DateTimeFormat && resolvedOptions) { return resolvedOptions(new DateTimeFormat()).timeZone; // steps 2 - 3 } return 'UTC'; // step 1 }; ljharb-es-abstract-babee05/2025/TestIntegrityLevel.js000066400000000000000000000022671516525472400225050ustar00rootroot00000000000000'use strict'; var $gOPD = require('gopd'); var $TypeError = require('es-errors/type'); var every = require('../helpers/every'); var OwnPropertyKeys = require('own-keys'); var isObject = require('es-object-atoms/isObject'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsExtensible = require('./IsExtensible'); var ToPropertyDescriptor = require('./ToPropertyDescriptor'); // https://262.ecma-international.org/6.0/#sec-testintegritylevel module.exports = function TestIntegrityLevel(O, level) { if (!isObject(O)) { throw new $TypeError('Assertion failed: Type(O) is not Object'); } if (level !== 'sealed' && level !== 'frozen') { throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`'); } var status = IsExtensible(O); if (status || !$gOPD) { return false; } var theKeys = OwnPropertyKeys(O); return theKeys.length === 0 || every(theKeys, function (k) { var currentDesc = $gOPD(O, k); if (typeof currentDesc !== 'undefined') { if (currentDesc.configurable) { return false; } if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) { return false; } } return true; }); }; ljharb-es-abstract-babee05/2025/ThisBigIntValue.js000066400000000000000000000007071516525472400216750ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $SyntaxError = require('es-errors/syntax'); var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true); // https://262.ecma-international.org/15.0/#sec-thisbigintvalue module.exports = function ThisBigIntValue(value) { if (typeof value === 'bigint') { return value; } if (!$bigIntValueOf) { throw new $SyntaxError('BigInt is not supported'); } return $bigIntValueOf(value); }; ljharb-es-abstract-babee05/2025/ThisBooleanValue.js000066400000000000000000000005041516525472400220730ustar00rootroot00000000000000'use strict'; var $BooleanValueOf = require('call-bound')('Boolean.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-properties-of-the-boolean-prototype-object module.exports = function ThisBooleanValue(value) { if (typeof value === 'boolean') { return value; } return $BooleanValueOf(value); }; ljharb-es-abstract-babee05/2025/ThisNumberValue.js000066400000000000000000000005001516525472400217400ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $NumberValueOf = callBound('Number.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-thisnumbervalue module.exports = function ThisNumberValue(value) { if (typeof value === 'number') { return value; } return $NumberValueOf(value); }; ljharb-es-abstract-babee05/2025/ThisStringValue.js000066400000000000000000000004761516525472400217720ustar00rootroot00000000000000'use strict'; var $StringValueOf = require('call-bound')('String.prototype.valueOf'); // https://262.ecma-international.org/15.0/#sec-properties-of-the-string-prototype-object module.exports = function ThisStringValue(value) { if (typeof value === 'string') { return value; } return $StringValueOf(value); }; ljharb-es-abstract-babee05/2025/ThisSymbolValue.js000066400000000000000000000010171516525472400217610ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var callBound = require('call-bound'); var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true); // https://262.ecma-international.org/15.0/#sec-thissymbolvalue module.exports = function ThisSymbolValue(value) { if (typeof value === 'symbol') { return value; } if (!$SymbolValueOf) { throw new $SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object'); } return $SymbolValueOf(value); }; ljharb-es-abstract-babee05/2025/ThrowCompletion.js000066400000000000000000000003601516525472400220240ustar00rootroot00000000000000'use strict'; var CompletionRecord = require('./CompletionRecord'); // https://262.ecma-international.org/9.0/#sec-throwcompletion module.exports = function ThrowCompletion(argument) { return new CompletionRecord('throw', argument); }; ljharb-es-abstract-babee05/2025/TimeClip.js000066400000000000000000000006671516525472400204070ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/2025/TimeFromYear.js000066400000000000000000000004051516525472400212320ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/2025/TimeString.js000066400000000000000000000014671516525472400207650ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var HourFromTime = require('./HourFromTime'); var MinFromTime = require('./MinFromTime'); var SecFromTime = require('./SecFromTime'); var ToZeroPaddedDecimalString = require('./ToZeroPaddedDecimalString'); // https://262.ecma-international.org/13.0/#sec-timestring module.exports = function TimeString(tv) { if (typeof tv !== 'number' || $isNaN(tv)) { throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number'); } var hour = ToZeroPaddedDecimalString(HourFromTime(tv), 2); // step 1 var minute = ToZeroPaddedDecimalString(MinFromTime(tv), 2); // step 2 var second = ToZeroPaddedDecimalString(SecFromTime(tv), 2); // step 3 return hour + ':' + minute + ':' + second + ' GMT'; // step 4 }; ljharb-es-abstract-babee05/2025/TimeWithinDay.js000066400000000000000000000003671516525472400214150ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/2025/TimeZoneString.js000066400000000000000000000036511516525472400216160ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var isInteger = require('math-intrinsics/isInteger'); var $indexOf = callBound('String.prototype.indexOf'); var $slice = callBound('String.prototype.slice'); var $toTimeString = callBound('Date.prototype.toTimeString'); // https://262.ecma-international.org/14.0/#sec-timezoneestring module.exports = function TimeZoneString(tv) { if (!isInteger(tv)) { throw new $TypeError('Assertion failed: `tv` must be an integral Number'); } // 1. Let localTimeZone be DefaultTimeZone(). // 2. If IsTimeZoneOffsetString(localTimeZone) is true, then // a. Let offsetNs be ParseTimeZoneOffsetString(localTimeZone). // 3. Else, // a. Let offsetNs be GetNamedTimeZoneOffsetNanoseconds(localTimeZone, ℤ(ℝ(tv) × 106)). // 4. Let offset be 𝔽(truncate(offsetNs / 106)). // 5. If offset is +0𝔽 or offset > +0𝔽, then // a. Let offsetSign be "+". // b. Let absOffset be offset. // 6. Else, // a. Let offsetSign be "-". // b. Let absOffset be -offset. // 7. Let offsetMin be ToZeroPaddedDecimalString(ℝ(MinFromTime(absOffset)), 2). // 8. Let offsetHour be ToZeroPaddedDecimalString(ℝ(HourFromTime(absOffset)), 2). // 9. Let tzName be an implementation-defined string that is either the empty String or the string-concatenation of the code unit 0x0020 (SPACE), the code unit 0x0028 (LEFT PARENTHESIS), an implementation-defined timezone name, and the code unit 0x0029 (RIGHT PARENTHESIS). // 10. Return the string-concatenation of offsetSign, offsetHour, offsetMin, and tzName. // hack until DefaultTimeZone, IsTimeZoneOffsetString, ParseTimeZoneOffsetString, GetNamedTimeZoneOffsetNanoseconds, and "implementation-defined string" are available var ts = $toTimeString(new $Date(tv)); return $slice(ts, $indexOf(ts, '(') + 1, $indexOf(ts, ')')); }; ljharb-es-abstract-babee05/2025/ToBigInt.js000066400000000000000000000023711516525472400203520ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var StringToBigInt = require('./StringToBigInt'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/13.0/#sec-tobigint module.exports = function ToBigInt(argument) { if (!$BigInt) { throw new $SyntaxError('BigInts are not supported in this environment'); } var prim = ToPrimitive(argument, $Number); if (prim == null) { throw new $TypeError('Cannot convert null or undefined to a BigInt'); } if (typeof prim === 'boolean') { return prim ? $BigInt(1) : $BigInt(0); } if (typeof prim === 'number') { throw new $TypeError('Cannot convert a Number value to a BigInt'); } if (typeof prim === 'string') { var n = StringToBigInt(prim); if (typeof n === 'undefined') { throw new $TypeError('Failed to parse String to BigInt'); } return n; } if (typeof prim === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a BigInt'); } if (typeof prim !== 'bigint') { throw new $SyntaxError('Assertion failed: unknown primitive type'); } return prim; }; ljharb-es-abstract-babee05/2025/ToBigInt64.js000066400000000000000000000016701516525472400205250ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31))); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobigint64 module.exports = function ToBigInt64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit; }; ljharb-es-abstract-babee05/2025/ToBigUint64.js000066400000000000000000000013041516525472400207040ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $BigInt = GetIntrinsic('%BigInt%', true); var $pow = require('math-intrinsics/pow'); var ToBigInt = require('./ToBigInt'); var BigIntRemainder = require('./BigInt/remainder'); var modBigInt = require('../helpers/modBigInt'); // BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32))); // https://262.ecma-international.org/11.0/#sec-tobiguint64 module.exports = function ToBigUint64(argument) { var n = ToBigInt(argument); var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour); return int64bit; }; ljharb-es-abstract-babee05/2025/ToBoolean.js000066400000000000000000000002021516525472400205440ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/2025/ToDateString.js000066400000000000000000000010071516525472400212350ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Date = GetIntrinsic('%Date%'); var $String = GetIntrinsic('%String%'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/6.0/#sec-todatestring module.exports = function ToDateString(tv) { if (typeof tv !== 'number') { throw new $TypeError('Assertion failed: `tv` must be a Number'); } if ($isNaN(tv)) { return 'Invalid Date'; } return $String(new $Date(tv)); }; ljharb-es-abstract-babee05/2025/ToIndex.js000066400000000000000000000010261516525472400202410ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); // https://262.ecma-international.org/15.0/#sec-toindex module.exports = function ToIndex(value) { if (typeof value === 'undefined') { return 0; } var integer = ToIntegerOrInfinity(value); if (integer < 0 || integer >= MAX_SAFE_INTEGER) { throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1'); } return integer; }; ljharb-es-abstract-babee05/2025/ToInt16.js000066400000000000000000000010351516525472400200730ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint16 var two16 = 0x10000; // Math.pow(2, 16); module.exports = function ToInt16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit >= 0x8000 ? int16bit - two16 : int16bit; }; ljharb-es-abstract-babee05/2025/ToInt32.js000066400000000000000000000012651516525472400200760ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint32 var two31 = 0x80000000; // Math.pow(2, 31); var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToInt32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); var result = int32bit >= two31 ? int32bit - two32 : int32bit; return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2025/ToInt8.js000066400000000000000000000007531516525472400200220ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-toint8 module.exports = function ToInt8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit >= 0x80 ? int8bit - 0x100 : int8bit; }; ljharb-es-abstract-babee05/2025/ToIntegerOrInfinity.js000066400000000000000000000007301516525472400226030ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-tointegerorinfinity module.exports = function ToIntegerOrInfinity(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0) { return 0; } if (!$isFinite(number)) { return number; } return truncate(number); }; ljharb-es-abstract-babee05/2025/ToLength.js000066400000000000000000000006631516525472400204210ustar00rootroot00000000000000'use strict'; var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); var ToIntegerOrInfinity = require('./ToIntegerOrInfinity'); // https://262.ecma-international.org/12.0/#sec-tolength module.exports = function ToLength(argument) { var len = ToIntegerOrInfinity(argument); if (len <= 0) { return 0; } // includes converting -0 to +0 if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; } return len; }; ljharb-es-abstract-babee05/2025/ToNumber.js000066400000000000000000000014321516525472400204230ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var StringToNumber = require('./StringToNumber'); // https://262.ecma-international.org/13.0/#sec-tonumber module.exports = function ToNumber(argument) { var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof value === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a number'); } if (typeof value === 'bigint') { throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.'); } if (typeof value === 'string') { return StringToNumber(value); } return +value; }; ljharb-es-abstract-babee05/2025/ToNumeric.js000066400000000000000000000010131516525472400205700ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var isPrimitive = require('../helpers/isPrimitive'); var ToPrimitive = require('./ToPrimitive'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/11.0/#sec-tonumeric module.exports = function ToNumeric(argument) { var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number); if (typeof primValue === 'bigint') { return primValue; } return ToNumber(primValue); }; ljharb-es-abstract-babee05/2025/ToObject.js000066400000000000000000000001761516525472400204050ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-toobject module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/2025/ToPrimitive.js000066400000000000000000000004321516525472400211420ustar00rootroot00000000000000'use strict'; var toPrimitive = require('es-to-primitive/es2015'); // https://262.ecma-international.org/6.0/#sec-toprimitive module.exports = function ToPrimitive(input) { if (arguments.length > 1) { return toPrimitive(input, arguments[1]); } return toPrimitive(input); }; ljharb-es-abstract-babee05/2025/ToPropertyDescriptor.js000066400000000000000000000026561516525472400230670ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/2025/ToPropertyKey.js000066400000000000000000000006201516525472400214660ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var ToPrimitive = require('./ToPrimitive'); var ToString = require('./ToString'); // https://262.ecma-international.org/6.0/#sec-topropertykey module.exports = function ToPropertyKey(argument) { var key = ToPrimitive(argument, $String); return typeof key === 'symbol' ? key : ToString(key); }; ljharb-es-abstract-babee05/2025/ToString.js000066400000000000000000000006051516525472400204420ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/6.0/#sec-tostring module.exports = function ToString(argument) { if (typeof argument === 'symbol') { throw new $TypeError('Cannot convert a Symbol value to a string'); } return $String(argument); }; ljharb-es-abstract-babee05/2025/ToUint16.js000066400000000000000000000011131516525472400202550ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint16 var two16 = 0x10000; // Math.pow(2, 16) module.exports = function ToUint16(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int16bit = modulo(int, two16); return int16bit === 0 ? 0 : int16bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2025/ToUint32.js000066400000000000000000000011201516525472400202510ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); var isFinite = require('math-intrinsics/isFinite'); // https://262.ecma-international.org/14.0/#sec-touint32 var two32 = 0x100000000; // Math.pow(2, 32); module.exports = function ToUint32(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int32bit = modulo(int, two32); return int32bit === 0 ? 0 : int32bit; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/2025/ToUint8.js000066400000000000000000000007111516525472400202010ustar00rootroot00000000000000'use strict'; var isFinite = require('math-intrinsics/isFinite'); var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var truncate = require('./truncate'); // https://262.ecma-international.org/14.0/#sec-touint8 module.exports = function ToUint8(argument) { var number = ToNumber(argument); if (!isFinite(number) || number === 0) { return 0; } var int = truncate(number); var int8bit = modulo(int, 0x100); return int8bit; }; ljharb-es-abstract-babee05/2025/ToUint8Clamp.js000066400000000000000000000011401516525472400211530ustar00rootroot00000000000000'use strict'; var clamp = require('./clamp'); var ToNumber = require('./ToNumber'); var floor = require('./floor'); var $isNaN = require('math-intrinsics/isNaN'); // https://262.ecma-international.org/15.0/#sec-touint8clamp module.exports = function ToUint8Clamp(argument) { var number = ToNumber(argument); // step 1 if ($isNaN(number)) { return 0; } // step 2 var clamped = clamp(number, 0, 255); // step 4 var f = floor(clamped); // step 5 if (clamped < (f + 0.5)) { return f; } // step 6 if (clamped > (f + 0.5)) { return f + 1; } // step 7 return f % 2 === 0 ? f : f + 1; // step 8 }; ljharb-es-abstract-babee05/2025/ToZeroPaddedDecimalString.js000066400000000000000000000010741516525472400236640ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); var $RangeError = require('es-errors/range'); var isInteger = require('math-intrinsics/isInteger'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring module.exports = function ToZeroPaddedDecimalString(n, minLength) { if (!isInteger(n) || n < 0) { throw new $RangeError('Assertion failed: `q` must be a non-negative integer'); } var S = $String(n); return StringPad(S, minLength, '0', 'start'); }; ljharb-es-abstract-babee05/2025/TrimString.js000066400000000000000000000013641516525472400207760ustar00rootroot00000000000000'use strict'; var trimStart = require('string.prototype.trimstart'); var trimEnd = require('string.prototype.trimend'); var $TypeError = require('es-errors/type'); var RequireObjectCoercible = require('./RequireObjectCoercible'); var ToString = require('./ToString'); // https://262.ecma-international.org/10.0/#sec-trimstring module.exports = function TrimString(string, where) { var str = RequireObjectCoercible(string); var S = ToString(str); var T; if (where === 'start') { T = trimStart(S); } else if (where === 'end') { T = trimEnd(S); } else if (where === 'start+end') { T = trimStart(trimEnd(S)); } else { throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"'); } return T; }; ljharb-es-abstract-babee05/2025/TypedArrayByteLength.js000066400000000000000000000024741516525472400227510ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayLength = require('./TypedArrayLength'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayByffer = require('typed-array-buffer'); var typedArrayByteLength = require('typed-array-byte-length'); // https://262.ecma-international.org/15.0/#sec-typedarraybytelength module.exports = function TypedArrayByteLength(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } if (IsTypedArrayOutOfBounds(taRecord)) { return 0; // step 1 } var length = TypedArrayLength(taRecord); // step 2 if (length === 0) { return 0; // step 3 } var O = taRecord['[[Object]]']; // step 4 var isFixed = IsFixedLengthArrayBuffer(typedArrayByffer(O)); var byteLength = isFixed ? typedArrayByteLength(O) : 'AUTO'; if (byteLength !== 'AUTO') { return byteLength; // step 5 } var elementSize = TypedArrayElementSize(O); // step 6 return length * elementSize; // step 7 }; ljharb-es-abstract-babee05/2025/TypedArrayCreateFromConstructor.js000066400000000000000000000036261516525472400252010ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var IsArray = require('./IsArray'); var IsConstructor = require('./IsConstructor'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayLength = require('./TypedArrayLength'); var ValidateTypedArray = require('./ValidateTypedArray'); var availableTypedArrays = require('available-typed-arrays')(); // https://262.ecma-international.org/15.0/#typedarraycreatefromconstructor module.exports = function TypedArrayCreateFromConstructor(constructor, argumentList) { if (!IsConstructor(constructor)) { throw new $TypeError('Assertion failed: `constructor` must be a constructor'); } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); } if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } // var newTypedArray = Construct(constructor, argumentList); // step 1 var newTypedArray; if (argumentList.length === 0) { newTypedArray = new constructor(); } else if (argumentList.length === 1) { newTypedArray = new constructor(argumentList[0]); } else if (argumentList.length === 2) { newTypedArray = new constructor(argumentList[0], argumentList[1]); } else { newTypedArray = new constructor(argumentList[0], argumentList[1], argumentList[2]); } var taRecord = ValidateTypedArray(newTypedArray, 'SEQ-CST'); // step 2 if (argumentList.length === 1 && typeof argumentList[0] === 'number') { // step 3 if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('new Typed Array is out of bounds'); // step 3.a } var length = TypedArrayLength(taRecord); // step 3.b if (length < argumentList[0]) { throw new $TypeError('`argumentList[0]` must be <= `newTypedArray.length`'); // step 3.c } } return newTypedArray; // step 4 }; ljharb-es-abstract-babee05/2025/TypedArrayCreateSameType.js000066400000000000000000000023761516525472400235600ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var TypedArrayCreateFromConstructor = require('./TypedArrayCreateFromConstructor'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/15.0/#sec-typedarray-create-same-type module.exports = function TypedArrayCreateSameType(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var constructor = getConstructor(kind); // step 2 if (typeof constructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } return TypedArrayCreateFromConstructor(constructor, argumentList); // steps 3 - 6 }; ljharb-es-abstract-babee05/2025/TypedArrayElementSize.js000066400000000000000000000013161516525472400231220ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementsize var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementSize(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var size = tableTAO.size['$' + tableTAO.name['$' + type]]; if (!isInteger(size) || size < 0) { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return size; }; ljharb-es-abstract-babee05/2025/TypedArrayElementType.js000066400000000000000000000012061516525472400231270ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); // https://262.ecma-international.org/13.0/#sec-typedarrayelementtype var tableTAO = require('./tables/typed-array-objects'); module.exports = function TypedArrayElementType(O) { var type = whichTypedArray(O); if (!type) { throw new $TypeError('Assertion failed: `O` must be a TypedArray'); } var result = tableTAO.name['$' + type]; if (typeof result !== 'string') { throw new $SyntaxError('Assertion failed: Unknown TypedArray type `' + type + '`'); } return result; }; ljharb-es-abstract-babee05/2025/TypedArrayGetElement.js000066400000000000000000000023241516525472400227270ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetValueFromBuffer = require('./GetValueFromBuffer'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var isTypedArray = require('is-typed-array'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/15.0/#sec-typedarraygetelement module.exports = function TypedArrayGetElement(O, index) { if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a TypedArray instance'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } if (!IsValidIntegerIndex(O, index)) { return void undefined; // step 1 } var offset = typedArrayByteOffset(O); // step 2 var elementSize = TypedArrayElementSize(O); // step 3 var byteIndexInBuffer = (index * elementSize) + offset; // step 4 var elementType = TypedArrayElementType(O); // step 5 return GetValueFromBuffer(typedArrayBuffer(O), byteIndexInBuffer, elementType, true, 'UNORDERED'); // step 6 }; ljharb-es-abstract-babee05/2025/TypedArrayLength.js000066400000000000000000000032351516525472400221210ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var floor = require('./floor'); var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var typedArrayLength = require('typed-array-length'); // https://www.ecma-international.org/ecma-262/15.0/#sec-typedarraylength module.exports = function TypedArrayLength(taRecord) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` is out of bounds'); // step 1 } var O = taRecord['[[Object]]']; // step 2 var isFixed = IsFixedLengthArrayBuffer(typedArrayBuffer(O)); var length = isFixed ? typedArrayLength(O) : 'AUTO'; if (length !== 'AUTO') { return length; // step 3 } if (isFixed) { throw new $TypeError('Assertion failed: array buffer is not fixed length'); // step 4 } var byteOffset = typedArrayByteOffset(O); // step 5 var elementSize = TypedArrayElementSize(O); // step 6 var byteLength = taRecord['[[CachedBufferByteLength]]']; // step 7 if (byteLength === 'DETACHED') { throw new $TypeError('Assertion failed: typed array is detached'); // step 8 } return floor((byteLength - byteOffset) / elementSize); // step 9 }; ljharb-es-abstract-babee05/2025/TypedArraySetElement.js000066400000000000000000000027661516525472400227550ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsValidIntegerIndex = require('./IsValidIntegerIndex'); var SetValueInBuffer = require('./SetValueInBuffer'); var ToBigInt = require('./ToBigInt'); var ToNumber = require('./ToNumber'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayElementType = require('./TypedArrayElementType'); var typedArrayBuffer = require('typed-array-buffer'); var typedArrayByteOffset = require('typed-array-byte-offset'); var whichTypedArray = require('which-typed-array'); // http://www.ecma-international.org/ecma-262/15.0/#sec-typedarraysetelement module.exports = function TypedArraySetElement(O, index, value) { var which = whichTypedArray(O); if (!which) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); } if (typeof index !== 'number') { throw new $TypeError('Assertion failed: `index` must be a Number'); } var contentType = which === 'BigInt64Array' || which === 'BigUint64Array' ? 'BIGINT' : 'NUMBER'; var numValue = contentType === 'BIGINT' ? ToBigInt(value) : ToNumber(value); // steps 1 - 2 if (IsValidIntegerIndex(O, index)) { // step 3 var offset = typedArrayByteOffset(O); // step 3.a var elementSize = TypedArrayElementSize(O); // step 3.b var byteIndexInBuffer = (index * elementSize) + offset; // step 3.c var elementType = TypedArrayElementType(O); // step 3.d SetValueInBuffer(typedArrayBuffer(O), byteIndexInBuffer, elementType, numValue, true, 'UNORDERED'); // step 3.e } }; ljharb-es-abstract-babee05/2025/TypedArraySpeciesCreate.js000066400000000000000000000026111516525472400234140ustar00rootroot00000000000000'use strict'; var $SyntaxError = require('es-errors/syntax'); var $TypeError = require('es-errors/type'); var whichTypedArray = require('which-typed-array'); var availableTypedArrays = require('available-typed-arrays')(); var IsArray = require('./IsArray'); var SpeciesConstructor = require('./SpeciesConstructor'); var TypedArrayCreateFromConstructor = require('./TypedArrayCreateFromConstructor'); var getConstructor = require('../helpers/typedArrayConstructors'); // https://262.ecma-international.org/15.0/#typedarray-species-create module.exports = function TypedArraySpeciesCreate(exemplar, argumentList) { if (availableTypedArrays.length === 0) { throw new $SyntaxError('Assertion failed: Typed Arrays are not supported in this environment'); } var kind = whichTypedArray(exemplar); if (!kind) { throw new $TypeError('Assertion failed: exemplar must be a TypedArray'); // step 1 } if (!IsArray(argumentList)) { throw new $TypeError('Assertion failed: `argumentList` must be a List'); // step 1 } var defaultConstructor = getConstructor(kind); // step 2 if (typeof defaultConstructor !== 'function') { throw new $SyntaxError('Assertion failed: `constructor` of `exemplar` (' + kind + ') must exist. Please report this!'); } var constructor = SpeciesConstructor(exemplar, defaultConstructor); // step 3 return TypedArrayCreateFromConstructor(constructor, argumentList); // step 4 }; ljharb-es-abstract-babee05/2025/UTF16EncodeCodePoint.js000066400000000000000000000013021516525472400224140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var floor = require('./floor'); var modulo = require('./modulo'); var isCodePoint = require('../helpers/isCodePoint'); // https://262.ecma-international.org/12.0/#sec-utf16encoding module.exports = function UTF16EncodeCodePoint(cp) { if (!isCodePoint(cp)) { throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF'); } if (cp <= 65535) { return $fromCharCode(cp); } var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800); var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00); return cu1 + cu2; }; ljharb-es-abstract-babee05/2025/UTF16SurrogatePairToCodePoint.js000066400000000000000000000014131516525472400243140ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $TypeError = require('es-errors/type'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); var isLeadingSurrogate = require('../helpers/isLeadingSurrogate'); var isTrailingSurrogate = require('../helpers/isTrailingSurrogate'); // https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair module.exports = function UTF16SurrogatePairToCodePoint(lead, trail) { if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) { throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code'); } // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; return $fromCharCode(lead) + $fromCharCode(trail); }; ljharb-es-abstract-babee05/2025/UnicodeEscape.js000066400000000000000000000014161516525472400214010ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $numberToString = callBound('Number.prototype.toString'); var $toLowerCase = callBound('String.prototype.toLowerCase'); var StringPad = require('./StringPad'); // https://262.ecma-international.org/11.0/#sec-unicodeescape module.exports = function UnicodeEscape(C) { if (typeof C !== 'string' || C.length !== 1) { throw new $TypeError('Assertion failed: `C` must be a single code unit'); } var n = $charCodeAt(C, 0); if (n > 0xFFFF) { throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF'); } return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start'); }; ljharb-es-abstract-babee05/2025/UpdateModifiers.js000066400000000000000000000040541516525472400217570ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var isRegExpRecord = require('../helpers/records/regexp-record'); var $charAt = callBound('String.prototype.charAt'); // https://262.ecma-international.org/16.0/#sec-updatemodifiers module.exports = function UpdateModifiers(rer, add, remove) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } if (typeof add !== 'string') { throw new $TypeError('Assertion failed: `add` must be a string'); } if (typeof remove !== 'string') { throw new $TypeError('Assertion failed: `remove` must be a string'); } // 1. Assert: add and remove have no elements in common. var adds = { __proto__: null }; var removes = { __proto__: null }; for (var i = 0; i < add.length; i++) { var toAdd = $charAt(add, i); adds[toAdd] = true; } for (var j = 0; j < remove.length; j++) { var toRemove = $charAt(remove, j); if (hasOwn(adds, toRemove)) { throw new $TypeError('Assertion failed: `add` and `remove` have elements in common'); } removes[toRemove] = true; } var ignoreCase = rer['[[IgnoreCase]]']; // step 2 var multiline = rer['[[Multiline]]']; // step 3 var dotAll = rer['[[DotAll]]']; // step 4 var unicode = rer['[[Unicode]]']; // step 5 var unicodeSets = rer['[[UnicodeSets]]']; // step 6 var capturingGroupsCount = rer['[[CapturingGroupsCount]]']; // step 7 if (hasOwn(removes, 'i')) { ignoreCase = false; // step 8 } else if (hasOwn(adds, 'i')) { ignoreCase = true; // step 9 } if (hasOwn(removes, 'm')) { multiline = false; // step 10 } else if (hasOwn(adds, 'm')) { multiline = true; // step 11 } if (hasOwn(removes, 's')) { dotAll = false; // step 12 } else if (hasOwn(adds, 's')) { dotAll = true; // step 13 } return { '[[IgnoreCase]]': !!ignoreCase, '[[Multiline]]': !!multiline, '[[DotAll]]': !!dotAll, '[[Unicode]]': !!unicode, '[[UnicodeSets]]': !!unicodeSets, '[[CapturingGroupsCount]]': capturingGroupsCount }; // step 14 }; ljharb-es-abstract-babee05/2025/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000131521516525472400256600ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var DefineOwnProperty = require('../helpers/DefineOwnProperty'); var isFullyPopulatedPropertyDescriptor = require('../helpers/isFullyPopulatedPropertyDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); var FromPropertyDescriptor = require('./FromPropertyDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsGenericDescriptor = require('./IsGenericDescriptor'); var isPropertyKey = require('../helpers/isPropertyKey'); var SameValue = require('./SameValue'); // https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor // see https://github.com/tc39/ecma262/pull/2468 for ES2022 changes // eslint-disable-next-line max-lines-per-function, max-statements module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) { if (typeof O !== 'undefined' && !isObject(O)) { throw new $TypeError('Assertion failed: O must be undefined or an Object'); } if (!isPropertyKey(P)) { throw new $TypeError('Assertion failed: P must be a Property Key'); } if (typeof extensible !== 'boolean') { throw new $TypeError('Assertion failed: extensible must be a Boolean'); } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: Desc must be a Property Descriptor'); } if (typeof current !== 'undefined' && !isPropertyDescriptor(current)) { throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined'); } if (typeof current === 'undefined') { // step 2 if (!extensible) { return false; // step 2.a } if (typeof O === 'undefined') { return true; // step 2.b } if (IsAccessorDescriptor(Desc)) { // step 2.c return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } // step 2.d return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!Desc['[[Configurable]]'], '[[Enumerable]]': !!Desc['[[Enumerable]]'], '[[Value]]': Desc['[[Value]]'], '[[Writable]]': !!Desc['[[Writable]]'] } ); } // 3. Assert: current is a fully populated Property Descriptor. if ( !isFullyPopulatedPropertyDescriptor( { IsAccessorDescriptor: IsAccessorDescriptor, IsDataDescriptor: IsDataDescriptor }, current ) ) { throw new $TypeError('`current`, when present, must be a fully populated and valid Property Descriptor'); } // 4. If every field in Desc is absent, return true. // this can't really match the assertion that it's a Property Descriptor in our JS implementation // 5. If current.[[Configurable]] is false, then if (!current['[[Configurable]]']) { if ('[[Configurable]]' in Desc && Desc['[[Configurable]]']) { // step 5.a return false; } if ('[[Enumerable]]' in Desc && !SameValue(Desc['[[Enumerable]]'], current['[[Enumerable]]'])) { // step 5.b return false; } if (!IsGenericDescriptor(Desc) && !SameValue(IsAccessorDescriptor(Desc), IsAccessorDescriptor(current))) { // step 5.c return false; } if (IsAccessorDescriptor(current)) { // step 5.d if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) { return false; } if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) { return false; } } else if (!current['[[Writable]]']) { // step 5.e if ('[[Writable]]' in Desc && Desc['[[Writable]]']) { return false; } if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) { return false; } } } // 6. If O is not undefined, then if (typeof O !== 'undefined') { var configurable; var enumerable; if (IsDataDescriptor(current) && IsAccessorDescriptor(Desc)) { // step 6.a configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // Replace the property named P of object O with an accessor property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Get]]': ('[[Get]]' in Desc ? Desc : current)['[[Get]]'], '[[Set]]': ('[[Set]]' in Desc ? Desc : current)['[[Set]]'] } ); } else if (IsAccessorDescriptor(current) && IsDataDescriptor(Desc)) { configurable = ('[[Configurable]]' in Desc ? Desc : current)['[[Configurable]]']; enumerable = ('[[Enumerable]]' in Desc ? Desc : current)['[[Enumerable]]']; // i. Replace the property named P of object O with a data property having [[Configurable]] and [[Enumerable]] attributes as described by current and each other attribute set to its default value. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, { '[[Configurable]]': !!configurable, '[[Enumerable]]': !!enumerable, '[[Value]]': ('[[Value]]' in Desc ? Desc : current)['[[Value]]'], '[[Writable]]': !!('[[Writable]]' in Desc ? Desc : current)['[[Writable]]'] } ); } // For each field of Desc that is present, set the corresponding attribute of the property named P of object O to the value of the field. return DefineOwnProperty( IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc ); } return true; // step 7 }; ljharb-es-abstract-babee05/2025/ValidateAtomicAccess.js000066400000000000000000000024611516525472400227030ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var $TypeError = require('es-errors/type'); var ToIndex = require('./ToIndex'); var TypedArrayElementSize = require('./TypedArrayElementSize'); var TypedArrayLength = require('./TypedArrayLength'); var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record'); var typedArrayByteOffset = require('typed-array-byte-offset'); // https://262.ecma-international.org/15.0/#sec-validateatomicaccess module.exports = function ValidateAtomicAccess(taRecord, requestIndex) { if (!isTypedArrayWithBufferWitnessRecord(taRecord)) { throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record'); } var length = TypedArrayLength(taRecord); // step 1 var accessIndex = ToIndex(requestIndex); // step 2 /* // this assertion can never be reached if (!(accessIndex >= 0)) { throw new $TypeError('Assertion failed: accessIndex >= 0'); // step 4 } */ if (accessIndex >= length) { throw new $RangeError('index out of range'); // step 4 } var typedArray = taRecord['[[Object]]']; // step 5 var elementSize = TypedArrayElementSize(typedArray); // step 6 var offset = typedArrayByteOffset(typedArray); // step 7 return (accessIndex * elementSize) + offset; // step 8 }; ljharb-es-abstract-babee05/2025/ValidateAtomicAccessOnIntegerTypedArray.js000066400000000000000000000012521516525472400265200ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var ValidateAtomicAccess = require('./ValidateAtomicAccess'); var ValidateIntegerTypedArray = require('./ValidateIntegerTypedArray'); // https://262.ecma-international.org/15.0/#sec-availablenamedtimezoneidentifiers module.exports = function ValidateAtomicAccessOnIntegerTypedArray(typedArray, requestIndex) { var waitable = arguments.length > 2 ? arguments[2] : false; // step 1 if (typeof waitable !== 'boolean') { throw new $TypeError('waitable must be a boolean'); } var taRecord = ValidateIntegerTypedArray(typedArray, waitable); // step 2 return ValidateAtomicAccess(taRecord, requestIndex); // step 3 }; ljharb-es-abstract-babee05/2025/ValidateIntegerTypedArray.js000066400000000000000000000024131516525472400237440ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsBigIntElementType = require('./IsBigIntElementType'); var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType'); var TypedArrayElementType = require('./TypedArrayElementType'); var ValidateTypedArray = require('./ValidateTypedArray'); // https://262.ecma-international.org/15.0/#sec-validateintegertypedarray module.exports = function ValidateIntegerTypedArray(typedArray, waitable) { if (typeof waitable !== 'boolean') { throw new $TypeError('Assertion failed: `waitable` must be a Boolean'); } var taRecord = ValidateTypedArray(typedArray, 'UNORDERED'); // step 1 // 2. NOTE: Bounds checking is not a synchronizing operation when typedArray's backing buffer is a growable SharedArrayBuffer. var type = TypedArrayElementType(typedArray); // step 4.a if (waitable) { // step 3 if (type !== 'INT32' && type !== 'BIGINT64') { throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a } } else if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) { // step 4 throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 4.b } return taRecord; // step 5 }; ljharb-es-abstract-babee05/2025/ValidateTypedArray.js000066400000000000000000000020401516525472400224220ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds'); var MakeTypedArrayWithBufferWitnessRecord = require('./MakeTypedArrayWithBufferWitnessRecord'); var isTypedArray = require('is-typed-array'); // https://262.ecma-international.org/15.0/#sec-validatetypedarray module.exports = function ValidateTypedArray(O, order) { if (order !== 'SEQ-CST' && order !== 'UNORDERED') { throw new $TypeError('Assertion failed: `order` must be ~SEQ-CST~ or ~UNORDERED~'); } if (!isObject(O)) { throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1 } if (!isTypedArray(O)) { throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2 } var taRecord = MakeTypedArrayWithBufferWitnessRecord(O, order); // step 3 if (IsTypedArrayOutOfBounds(taRecord)) { throw new $TypeError('`O` must be in-bounds and backed by a non-detached buffer'); // step 4 } return taRecord; // step 5 }; ljharb-es-abstract-babee05/2025/WeakRefDeref.js000066400000000000000000000010641516525472400211630ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $TypeError = require('es-errors/type'); var $deref = callBound('WeakRef.prototype.deref', true); var isWeakRef = require('is-weakref'); var AddToKeptObjects = require('./AddToKeptObjects'); // https://262.ecma-international.org/12.0/#sec-weakrefderef module.exports = function WeakRefDeref(weakRef) { if (!isWeakRef(weakRef)) { throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef'); } var target = $deref(weakRef); if (target) { AddToKeptObjects(target); } return target; }; ljharb-es-abstract-babee05/2025/WeekDay.js000066400000000000000000000003201516525472400202140ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/2025/WordCharacters.js000066400000000000000000000031241516525472400216030ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $indexOf = callBound('String.prototype.indexOf'); var Canonicalize = require('./Canonicalize'); var caseFolding = require('../helpers/caseFolding.json'); var forEach = require('../helpers/forEach'); var isRegExpRecord = require('../helpers/records/regexp-record'); var OwnPropertyKeys = require('own-keys'); var basicWordChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; // step 1 // https://262.ecma-international.org/14.0/#sec-runtime-semantics-wordcharacters-abstract-operation module.exports = function WordCharacters(rer) { if (!isRegExpRecord(rer)) { throw new $TypeError('Assertion failed: `rer` must be a RegExp Record'); } var extraWordChars = ''; forEach(OwnPropertyKeys(caseFolding.C), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.C[c]; // step 3 } }); forEach(OwnPropertyKeys(caseFolding.S), function (c) { if ( $indexOf(basicWordChars, c) === -1 // c not in A && $indexOf(basicWordChars, Canonicalize(rer, c)) > -1 // canonicalized c IS in A ) { extraWordChars += caseFolding.S[c]; // step 3 } }); if ((!rer['[[Unicode]]'] || !rer['[[IgnoreCase]]']) && extraWordChars.length > 0) { throw new $TypeError('Assertion failed: `extraWordChars` must be empty when `rer.[[IgnoreCase]]` and `rer.[[Unicode]]` are not both true'); // step 3 } return basicWordChars + extraWordChars; // step 4 }; ljharb-es-abstract-babee05/2025/YearFromTime.js000066400000000000000000000006161516525472400212360ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/2025/abs.js000066400000000000000000000003231516525472400174330ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/11.0/#eqn-abs module.exports = function abs(x) { return typeof x === 'bigint' ? (x >= 0 ? x : -x) : $abs(x); }; ljharb-es-abstract-babee05/2025/clamp.js000066400000000000000000000007741516525472400177740ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var max = require('math-intrinsics/max'); var min = require('math-intrinsics/min'); // https://262.ecma-international.org/12.0/#clamping module.exports = function clamp(x, lower, upper) { if (typeof x !== 'number' || typeof lower !== 'number' || typeof upper !== 'number' || !(lower <= upper)) { throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`'); } return min(max(lower, x), upper); }; ljharb-es-abstract-babee05/2025/floor.js000066400000000000000000000004371516525472400200150ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/11.0/#eqn-floor module.exports = function floor(x) { // return x - modulo(x, 1); if (typeof x === 'bigint') { return x; } return $floor(x); }; ljharb-es-abstract-babee05/2025/max.js000066400000000000000000000002061516525472400174530ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/max'); ljharb-es-abstract-babee05/2025/min.js000066400000000000000000000002061516525472400174510ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/6.0/#sec-algorithm-conventions module.exports = require('math-intrinsics/min'); ljharb-es-abstract-babee05/2025/modulo.js000066400000000000000000000002501516525472400201640ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/2025/msFromTime.js000066400000000000000000000003751516525472400207570ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/2025/substring.js000066400000000000000000000011761516525472400207150ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var isInteger = require('math-intrinsics/isInteger'); var callBound = require('call-bound'); var $slice = callBound('String.prototype.slice'); // https://262.ecma-international.org/12.0/#substring module.exports = function substring(S, inclusiveStart, exclusiveEnd) { if (typeof S !== 'string' || !isInteger(inclusiveStart) || (arguments.length > 2 && !isInteger(exclusiveEnd))) { throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers'); } return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length); }; ljharb-es-abstract-babee05/2025/tables/000077500000000000000000000000001516525472400176045ustar00rootroot00000000000000ljharb-es-abstract-babee05/2025/tables/typed-array-objects.js000066400000000000000000000014741516525472400240400ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/16.0/#table-the-typedarray-constructors module.exports = { __proto__: null, name: { __proto__: null, $Int8Array: 'INT8', $Uint8Array: 'UINT8', $Uint8ClampedArray: 'UINT8C', $Int16Array: 'INT16', $Uint16Array: 'UINT16', $Int32Array: 'INT32', $Uint32Array: 'UINT32', $BigInt64Array: 'BIGINT64', $BigUint64Array: 'BIGUINT64', $Float16Array: 'FLOAT16', $Float32Array: 'FLOAT32', $Float64Array: 'FLOAT64' }, size: { __proto__: null, $INT8: 1, $UINT8: 1, $UINT8C: 1, $INT16: 2, $UINT16: 2, $INT32: 4, $UINT32: 4, $BIGINT64: 8, $BIGUINT64: 8, $FLOAT16: 2, $FLOAT32: 4, $FLOAT64: 8 }, choices: '"INT8", "UINT8", "UINT8C", "INT16", "UINT16", "INT32", "UINT32", "BIGINT64", "BIGUINT64", "FLOAT16", "FLOAT32", or "FLOAT64"' }; ljharb-es-abstract-babee05/2025/truncate.js000066400000000000000000000007151516525472400205200ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var $TypeError = require('es-errors/type'); // https://262.ecma-international.org/14.0/#eqn-truncate module.exports = function truncate(x) { if (typeof x !== 'number' && typeof x !== 'bigint') { throw new $TypeError('argument must be a Number or a BigInt'); } var result = x < 0 ? -floor(-x) : floor(x); return result === 0 ? 0 : result; // in the spec, these are math values, so we filter out -0 here }; ljharb-es-abstract-babee05/5/000077500000000000000000000000001516525472400161065ustar00rootroot00000000000000ljharb-es-abstract-babee05/5/AbstractEqualityComparison.js000066400000000000000000000021531516525472400237610ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); var isSameType = require('../helpers/isSameType'); // https://262.ecma-international.org/5.1/#sec-11.9.3 module.exports = function AbstractEqualityComparison(x, y) { if (isSameType(x, y)) { return x === y; // ES6+ specified this shortcut anyways. } if (x == null && y == null) { return true; } if (typeof x === 'number' && typeof y === 'string') { return AbstractEqualityComparison(x, ToNumber(y)); } if (typeof x === 'string' && typeof y === 'number') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof x === 'boolean') { return AbstractEqualityComparison(ToNumber(x), y); } if (typeof y === 'boolean') { return AbstractEqualityComparison(x, ToNumber(y)); } if ((typeof x === 'string' || typeof x === 'number') && isObject(y)) { return AbstractEqualityComparison(x, ToPrimitive(y)); } if (isObject(x) && (typeof y === 'string' || typeof y === 'number')) { return AbstractEqualityComparison(ToPrimitive(x), y); } return false; }; ljharb-es-abstract-babee05/5/AbstractRelationalComparison.js000066400000000000000000000030501516525472400242530ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $TypeError = require('es-errors/type'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var isPrefixOf = require('../helpers/isPrefixOf'); var ToNumber = require('./ToNumber'); var ToPrimitive = require('./ToPrimitive'); // https://262.ecma-international.org/5.1/#sec-11.8.5 // eslint-disable-next-line max-statements module.exports = function AbstractRelationalComparison(x, y, LeftFirst) { if (typeof LeftFirst !== 'boolean') { throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean'); } var px; var py; if (LeftFirst) { px = ToPrimitive(x, $Number); py = ToPrimitive(y, $Number); } else { py = ToPrimitive(y, $Number); px = ToPrimitive(x, $Number); } var bothStrings = typeof px === 'string' && typeof py === 'string'; if (!bothStrings) { var nx = ToNumber(px); var ny = ToNumber(py); if ($isNaN(nx) || $isNaN(ny)) { return void undefined; } if ($isFinite(nx) && $isFinite(ny) && nx === ny) { return false; } if (nx === Infinity) { return false; } if (ny === Infinity) { return true; } if (ny === -Infinity) { return false; } if (nx === -Infinity) { return true; } return nx < ny; // by now, these are both nonzero, finite, and not equal } if (isPrefixOf(py, px)) { return false; } if (isPrefixOf(px, py)) { return true; } return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f }; ljharb-es-abstract-babee05/5/Canonicalize.js000066400000000000000000000015151516525472400210450ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var callBound = require('call-bound'); var $charCodeAt = callBound('String.prototype.charCodeAt'); var $toUpperCase = callBound('String.prototype.toUpperCase'); // https://262.ecma-international.org/5.1/#sec-15.10.2.8 module.exports = function Canonicalize(ch, IgnoreCase) { if (typeof ch !== 'string' || ch.length !== 1) { throw new $TypeError('Assertion failed: `ch` must be a character'); } if (typeof IgnoreCase !== 'boolean') { throw new $TypeError('Assertion failed: `IgnoreCase` must be a Boolean'); } if (!IgnoreCase) { return ch; // step 1 } var u = $toUpperCase(ch); // step 2 if (u.length !== 1) { return ch; // step 3 } var cu = u; // step 4 if ($charCodeAt(ch, 0) >= 128 && $charCodeAt(cu, 0) < 128) { return ch; // step 5 } return cu; }; ljharb-es-abstract-babee05/5/CheckObjectCoercible.js000066400000000000000000000004541516525472400224230ustar00rootroot00000000000000'use strict'; var RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); // http://262.ecma-international.org/5.1/#sec-9.10 module.exports = function CheckObjectCoercible(value) { return RequireObjectCoercible(value, arguments.length > 1 ? arguments[1] : void undefined); }; ljharb-es-abstract-babee05/5/DateFromTime.js000066400000000000000000000017341516525472400207710ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); var MonthFromTime = require('./MonthFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.5 module.exports = function DateFromTime(t) { var m = MonthFromTime(t); var d = DayWithinYear(t); if (m === 0) { return d + 1; } if (m === 1) { return d - 30; } var leap = InLeapYear(t); if (m === 2) { return d - 58 - leap; } if (m === 3) { return d - 89 - leap; } if (m === 4) { return d - 119 - leap; } if (m === 5) { return d - 150 - leap; } if (m === 6) { return d - 180 - leap; } if (m === 7) { return d - 211 - leap; } if (m === 8) { return d - 242 - leap; } if (m === 9) { return d - 272 - leap; } if (m === 10) { return d - 303 - leap; } if (m === 11) { return d - 333 - leap; } throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m); }; ljharb-es-abstract-babee05/5/Day.js000066400000000000000000000003521516525472400171610ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function Day(t) { return floor(t / msPerDay); }; ljharb-es-abstract-babee05/5/DayFromYear.js000066400000000000000000000004001516525472400206200ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DayFromYear(y) { return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400); }; ljharb-es-abstract-babee05/5/DayWithinYear.js000066400000000000000000000004361516525472400211700ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var DayFromYear = require('./DayFromYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function DayWithinYear(t) { return Day(t) - DayFromYear(YearFromTime(t)); }; ljharb-es-abstract-babee05/5/DaysInYear.js000066400000000000000000000004551516525472400204600ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function DaysInYear(y) { if (modulo(y, 4) !== 0) { return 365; } if (modulo(y, 100) !== 0) { return 366; } if (modulo(y, 400) !== 0) { return 365; } return 366; }; ljharb-es-abstract-babee05/5/FromPropertyDescriptor.js000066400000000000000000000020321516525472400231500ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsDataDescriptor = require('./IsDataDescriptor'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.4 module.exports = function FromPropertyDescriptor(Desc) { if (typeof Desc === 'undefined') { return Desc; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (IsDataDescriptor(Desc)) { return { value: Desc['[[Value]]'], writable: !!Desc['[[Writable]]'], enumerable: !!Desc['[[Enumerable]]'], configurable: !!Desc['[[Configurable]]'] }; } else if (IsAccessorDescriptor(Desc)) { return { get: Desc['[[Get]]'], set: Desc['[[Set]]'], enumerable: !!Desc['[[Enumerable]]'], configurable: !!Desc['[[Configurable]]'] }; } throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor'); }; ljharb-es-abstract-babee05/5/HourFromTime.js000066400000000000000000000005761516525472400210340ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerHour = timeConstants.msPerHour; var HoursPerDay = timeConstants.HoursPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function HourFromTime(t) { return modulo(floor(t / msPerHour), HoursPerDay); }; ljharb-es-abstract-babee05/5/InLeapYear.js000066400000000000000000000007161516525472400204410ustar00rootroot00000000000000'use strict'; var $EvalError = require('es-errors/eval'); var DaysInYear = require('./DaysInYear'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function InLeapYear(t) { var days = DaysInYear(YearFromTime(t)); if (days === 365) { return 0; } if (days === 366) { return 1; } throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days); }; ljharb-es-abstract-babee05/5/IsAccessorDescriptor.js000066400000000000000000000010561516525472400225430ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.1 module.exports = function IsAccessorDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Get]]') && !hasOwn(Desc, '[[Set]]')) { return false; } return true; }; ljharb-es-abstract-babee05/5/IsCallable.js000066400000000000000000000001541516525472400204370ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.11 module.exports = require('is-callable'); ljharb-es-abstract-babee05/5/IsDataDescriptor.js000066400000000000000000000010611516525472400216460ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.2 module.exports = function IsDataDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!hasOwn(Desc, '[[Value]]') && !hasOwn(Desc, '[[Writable]]')) { return false; } return true; }; ljharb-es-abstract-babee05/5/IsGenericDescriptor.js000066400000000000000000000011631516525472400223540ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var IsAccessorDescriptor = require('./IsAccessorDescriptor'); var IsDataDescriptor = require('./IsDataDescriptor'); var isPropertyDescriptor = require('./IsPropertyDescriptor'); // https://262.ecma-international.org/5.1/#sec-8.10.3 module.exports = function IsGenericDescriptor(Desc) { if (typeof Desc === 'undefined') { return false; } if (!isPropertyDescriptor(Desc)) { throw new $TypeError('Assertion failed: `Desc` must be a Property Descriptor'); } if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) { return true; } return false; }; ljharb-es-abstract-babee05/5/IsPropertyDescriptor.js000066400000000000000000000004671516525472400226320ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete this var isPropertyDescriptor = require('../helpers/records/property-descriptor'); // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type module.exports = function IsPropertyDescriptor(Desc) { return isPropertyDescriptor(Desc); }; ljharb-es-abstract-babee05/5/MakeDate.js000066400000000000000000000005161516525472400201210ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.13 module.exports = function MakeDate(day, time) { if (!$isFinite(day) || !$isFinite(time)) { return NaN; } return (day * msPerDay) + time; }; ljharb-es-abstract-babee05/5/MakeDay.js000066400000000000000000000016321516525472400177610ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $DateUTC = GetIntrinsic('%Date.UTC%'); var $isFinite = require('math-intrinsics/isFinite'); var DateFromTime = require('./DateFromTime'); var Day = require('./Day'); var floor = require('./floor'); var modulo = require('./modulo'); var MonthFromTime = require('./MonthFromTime'); var ToInteger = require('./ToInteger'); var YearFromTime = require('./YearFromTime'); // https://262.ecma-international.org/5.1/#sec-15.9.1.12 module.exports = function MakeDay(year, month, date) { if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) { return NaN; } var y = ToInteger(year); var m = ToInteger(month); var dt = ToInteger(date); var ym = y + floor(m / 12); var mn = modulo(m, 12); var t = $DateUTC(ym, mn, 1); if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) { return NaN; } return Day(t) + dt - 1; }; ljharb-es-abstract-babee05/5/MakeTime.js000066400000000000000000000013001516525472400201320ustar00rootroot00000000000000'use strict'; var $isFinite = require('math-intrinsics/isFinite'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var msPerMinute = timeConstants.msPerMinute; var msPerHour = timeConstants.msPerHour; var ToInteger = require('./ToInteger'); // https://262.ecma-international.org/5.1/#sec-15.9.1.11 module.exports = function MakeTime(hour, min, sec, ms) { if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) { return NaN; } var h = ToInteger(hour); var m = ToInteger(min); var s = ToInteger(sec); var milli = ToInteger(ms); var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli; return t; }; ljharb-es-abstract-babee05/5/MinFromTime.js000066400000000000000000000006141516525472400206330ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerMinute = timeConstants.msPerMinute; var MinutesPerHour = timeConstants.MinutesPerHour; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function MinFromTime(t) { return modulo(floor(t / msPerMinute), MinutesPerHour); }; ljharb-es-abstract-babee05/5/MonthFromTime.js000066400000000000000000000021511516525472400211730ustar00rootroot00000000000000'use strict'; var $RangeError = require('es-errors/range'); var DayWithinYear = require('./DayWithinYear'); var InLeapYear = require('./InLeapYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.4 module.exports = function MonthFromTime(t) { var day = DayWithinYear(t); if (0 <= day && day < 31) { return 0; } var leap = InLeapYear(t); if (31 <= day && day < (59 + leap)) { return 1; } if ((59 + leap) <= day && day < (90 + leap)) { return 2; } if ((90 + leap) <= day && day < (120 + leap)) { return 3; } if ((120 + leap) <= day && day < (151 + leap)) { return 4; } if ((151 + leap) <= day && day < (181 + leap)) { return 5; } if ((181 + leap) <= day && day < (212 + leap)) { return 6; } if ((212 + leap) <= day && day < (243 + leap)) { return 7; } if ((243 + leap) <= day && day < (273 + leap)) { return 8; } if ((273 + leap) <= day && day < (304 + leap)) { return 9; } if ((304 + leap) <= day && day < (334 + leap)) { return 10; } if ((334 + leap) <= day && day < (365 + leap)) { return 11; } throw new $RangeError('Assertion failed: `day` is out of range'); }; ljharb-es-abstract-babee05/5/SameValue.js000066400000000000000000000004701516525472400203270ustar00rootroot00000000000000'use strict'; var $isNaN = require('math-intrinsics/isNaN'); // http://262.ecma-international.org/5.1/#sec-9.12 module.exports = function SameValue(x, y) { if (x === y) { // 0 === -0, but they are not identical. if (x === 0) { return 1 / x === 1 / y; } return true; } return $isNaN(x) && $isNaN(y); }; ljharb-es-abstract-babee05/5/SecFromTime.js000066400000000000000000000006221516525472400206210ustar00rootroot00000000000000'use strict'; var floor = require('./floor'); var modulo = require('./modulo'); var timeConstants = require('../helpers/timeConstants'); var msPerSecond = timeConstants.msPerSecond; var SecondsPerMinute = timeConstants.SecondsPerMinute; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function SecFromTime(t) { return modulo(floor(t / msPerSecond), SecondsPerMinute); }; ljharb-es-abstract-babee05/5/StrictEqualityComparison.js000066400000000000000000000004761516525472400234740ustar00rootroot00000000000000'use strict'; var Type = require('./Type'); // https://262.ecma-international.org/5.1/#sec-11.9.6 module.exports = function StrictEqualityComparison(x, y) { if (Type(x) !== Type(y)) { return false; } if (typeof x === 'undefined' || x === null) { return true; } return x === y; // shortcut for steps 4-7 }; ljharb-es-abstract-babee05/5/TimeClip.js000066400000000000000000000006671516525472400201630ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var $isFinite = require('math-intrinsics/isFinite'); var abs = require('math-intrinsics/abs'); var ToNumber = require('./ToNumber'); // https://262.ecma-international.org/5.1/#sec-15.9.1.14 module.exports = function TimeClip(time) { if (!$isFinite(time) || abs(time) > 8.64e15) { return NaN; } return +new $Date(ToNumber(time)); }; ljharb-es-abstract-babee05/5/TimeFromYear.js000066400000000000000000000004051516525472400210060ustar00rootroot00000000000000'use strict'; var msPerDay = require('../helpers/timeConstants').msPerDay; var DayFromYear = require('./DayFromYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function TimeFromYear(y) { return msPerDay * DayFromYear(y); }; ljharb-es-abstract-babee05/5/TimeWithinDay.js000066400000000000000000000003671516525472400211710ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerDay = require('../helpers/timeConstants').msPerDay; // https://262.ecma-international.org/5.1/#sec-15.9.1.2 module.exports = function TimeWithinDay(t) { return modulo(t, msPerDay); }; ljharb-es-abstract-babee05/5/ToBoolean.js000066400000000000000000000002021516525472400203200ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.2 module.exports = function ToBoolean(value) { return !!value; }; ljharb-es-abstract-babee05/5/ToInt32.js000066400000000000000000000002551516525472400176500ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.5 module.exports = function ToInt32(x) { return ToNumber(x) >> 0; }; ljharb-es-abstract-babee05/5/ToInteger.js000066400000000000000000000010551516525472400203450ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.4 module.exports = function ToInteger(value) { var number = ToNumber(value); if ($isNaN(number)) { return 0; } if (number === 0 || !$isFinite(number)) { return number; } return $sign(number) * floor(abs(number)); }; ljharb-es-abstract-babee05/5/ToNumber.js000066400000000000000000000016411516525472400202010ustar00rootroot00000000000000'use strict'; var ToPrimitive = require('./ToPrimitive'); var callBound = require('call-bound'); var $replace = callBound('String.prototype.replace'); var safeRegexTester = require('safe-regex-test'); var isNonDecimal = safeRegexTester(/^0[ob]|^[+-]0x/); var $Number = Number; // http://262.ecma-international.org/5.1/#sec-9.3 module.exports = function ToNumber(value) { var prim = ToPrimitive(value, $Number); if (typeof prim !== 'string') { return $Number(prim); } var trimmed = $replace( prim, // eslint-disable-next-line no-control-regex /^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g, '' ); if (isNonDecimal(trimmed)) { return NaN; } return +trimmed; }; ljharb-es-abstract-babee05/5/ToObject.js000066400000000000000000000001701516525472400201530ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.9 module.exports = require('es-object-atoms/ToObject'); ljharb-es-abstract-babee05/5/ToPrimitive.js000066400000000000000000000001631516525472400207170ustar00rootroot00000000000000'use strict'; // http://262.ecma-international.org/5.1/#sec-9.1 module.exports = require('es-to-primitive/es5'); ljharb-es-abstract-babee05/5/ToPropertyDescriptor.js000066400000000000000000000026561516525472400226430ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var $TypeError = require('es-errors/type'); var isObject = require('es-object-atoms/isObject'); var IsCallable = require('./IsCallable'); var ToBoolean = require('./ToBoolean'); // https://262.ecma-international.org/5.1/#sec-8.10.5 module.exports = function ToPropertyDescriptor(Obj) { if (!isObject(Obj)) { throw new $TypeError('ToPropertyDescriptor requires an object'); } var desc = {}; if (hasOwn(Obj, 'enumerable')) { desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable); } if (hasOwn(Obj, 'configurable')) { desc['[[Configurable]]'] = ToBoolean(Obj.configurable); } if (hasOwn(Obj, 'value')) { desc['[[Value]]'] = Obj.value; } if (hasOwn(Obj, 'writable')) { desc['[[Writable]]'] = ToBoolean(Obj.writable); } if (hasOwn(Obj, 'get')) { var getter = Obj.get; if (typeof getter !== 'undefined' && !IsCallable(getter)) { throw new $TypeError('getter must be a function'); } desc['[[Get]]'] = getter; } if (hasOwn(Obj, 'set')) { var setter = Obj.set; if (typeof setter !== 'undefined' && !IsCallable(setter)) { throw new $TypeError('setter must be a function'); } desc['[[Set]]'] = setter; } if ((hasOwn(desc, '[[Get]]') || hasOwn(desc, '[[Set]]')) && (hasOwn(desc, '[[Value]]') || hasOwn(desc, '[[Writable]]'))) { throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); } return desc; }; ljharb-es-abstract-babee05/5/ToString.js000066400000000000000000000003411516525472400202130ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $String = GetIntrinsic('%String%'); // http://262.ecma-international.org/5.1/#sec-9.8 module.exports = function ToString(value) { return $String(value); }; ljharb-es-abstract-babee05/5/ToUint16.js000066400000000000000000000011371516525472400200370ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var ToNumber = require('./ToNumber'); var abs = require('math-intrinsics/abs'); var floor = require('math-intrinsics/floor'); var $isNaN = require('math-intrinsics/isNaN'); var $isFinite = require('math-intrinsics/isFinite'); var $sign = require('math-intrinsics/sign'); // http://262.ecma-international.org/5.1/#sec-9.7 module.exports = function ToUint16(value) { var number = ToNumber(value); if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } var posInt = $sign(number) * floor(abs(number)); return modulo(posInt, 0x10000); }; ljharb-es-abstract-babee05/5/ToUint32.js000066400000000000000000000002571516525472400200370ustar00rootroot00000000000000'use strict'; var ToNumber = require('./ToNumber'); // http://262.ecma-international.org/5.1/#sec-9.6 module.exports = function ToUint32(x) { return ToNumber(x) >>> 0; }; ljharb-es-abstract-babee05/5/Type.js000066400000000000000000000007061516525472400173700ustar00rootroot00000000000000'use strict'; var isObject = require('es-object-atoms/isObject'); // https://262.ecma-international.org/5.1/#sec-8 module.exports = function Type(x) { if (x === null) { return 'Null'; } if (typeof x === 'undefined') { return 'Undefined'; } if (isObject(x)) { return 'Object'; } if (typeof x === 'number') { return 'Number'; } if (typeof x === 'boolean') { return 'Boolean'; } if (typeof x === 'string') { return 'String'; } }; ljharb-es-abstract-babee05/5/WeekDay.js000066400000000000000000000003201516525472400177700ustar00rootroot00000000000000'use strict'; var Day = require('./Day'); var modulo = require('./modulo'); // https://262.ecma-international.org/5.1/#sec-15.9.1.6 module.exports = function WeekDay(t) { return modulo(Day(t) + 4, 7); }; ljharb-es-abstract-babee05/5/YearFromTime.js000066400000000000000000000006161516525472400210120ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Date = GetIntrinsic('%Date%'); var callBound = require('call-bound'); var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear'); // https://262.ecma-international.org/5.1/#sec-15.9.1.3 module.exports = function YearFromTime(t) { // largest y such that this.TimeFromYear(y) <= t return $getUTCFullYear(new $Date(t)); }; ljharb-es-abstract-babee05/5/abs.js000066400000000000000000000002461516525472400172130ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function abs(x) { return $abs(x); }; ljharb-es-abstract-babee05/5/floor.js000066400000000000000000000003571516525472400175720ustar00rootroot00000000000000'use strict'; // var modulo = require('./modulo'); var $floor = require('math-intrinsics/floor'); // http://262.ecma-international.org/5.1/#sec-5.2 module.exports = function floor(x) { // return x - modulo(x, 1); return $floor(x); }; ljharb-es-abstract-babee05/5/modulo.js000066400000000000000000000002501516525472400177400ustar00rootroot00000000000000'use strict'; var mod = require('../helpers/mod'); // https://262.ecma-international.org/5.1/#sec-5.2 module.exports = function modulo(x, y) { return mod(x, y); }; ljharb-es-abstract-babee05/5/msFromTime.js000066400000000000000000000003751516525472400205330ustar00rootroot00000000000000'use strict'; var modulo = require('./modulo'); var msPerSecond = require('../helpers/timeConstants').msPerSecond; // https://262.ecma-international.org/5.1/#sec-15.9.1.10 module.exports = function msFromTime(t) { return modulo(t, msPerSecond); }; ljharb-es-abstract-babee05/CHANGELOG.md000066400000000000000000001402571516525472400175640ustar00rootroot000000000000001.24.2 / 2026-04-07 ================= - [Fix] `IfAbruptCloseIterator`: handle all abrupt completions, not just throw - [Robustness] use `+x` instead of `Number(x)` - [Robustness] use `isFinite`/`parseInt` intrinsics, and isNaN helper - [Robustness] ensure `undefined` is `undefined` - [patch] add a TODO to remove an unused helper - [Dev Deps] update `@ljharb/eslint-config`, `npmignore` 1.24.1 / 2025-12-12 ================= - [Fix] `ES2025`+: `GeneratorResumeAbrupt`: properly handle return completions - [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@unicode/unicode-15.0.0`, `make-generator-function`, `npmignore`, `ses` 1.24.0 / 2025-05-28 ================= - [New] add `ES2025` (#159) - [New] `ES2023`+: add `GetNamedTimeZoneEpochNanoseconds`, `GetUTCEpochNanoseconds`, `IsTimeZoneOffsetString` - [New] `ES2015`+: `CharacterRange`: also accept CharSets - [New] `ES2024`+: add `AllCharacters`, `CharacterComplement` - [Refactor] StringIndexOf: anticipate ES2025 not found sentinel change - [Deps] update `stop-iteration-iterator` - [Tests] increase coverage 1.23.10 / 2025-05-21 ================= - [Fix] properly handle Float16Array - [Fix] `ES2024`+: `IsViewOutOfBounds`: properly handle resizable array buffers - [Fix] `ES2024`+: `IsTypedArrayOutOfBounds`: properly handle resizable arrays - [Fix] `ES2024`+: `GetViewByteLength`, `TypedArrayByteLength`, `TypedArrayLength`: properly handle resizable arrays - [Fix] `ES2020`+: `abs` should accept bigints too - [Fix] `ES2024`+: `ArrayBufferByteLength`: return the byte length for SABs, not NaN - [Fix] `ES2024`+: `ArrayBufferCopyAndDetach`: properly handle resizable ArrayBuffers; add tests - [Fix] `ES2021`: `SetTypedArrayFromTypedArray`: get proper source element size - [Fix] `ES2023`+: `SetTypedArrayFromTypedArray`: ArrayBuffer shouldn‘t be bound - [Fix] `ES2022`,`ES2023`: `ValidateIntegerTypedArray`: return the buffer - [patch] `ES2023`+: `SortIndexedProperties`: improve error message - [patch] clean up some comments - [patch] `ES2023`+: `InternalizeJSONProperty`: remove extra argument - [patch] `ES2020`+`: `GetIterator`: fix comment to indicate that it changed in ES2018 - [Refactor] Typed Array stuff: store "choices" string in the table file - [Refactor] `ES2021`+: use isInteger directly in a few AOs - [Refactor] `ES2022`+: `ValidateAndApplyPropertyDescriptor`: use `typeof` over `Type()` - [Refactor] `helpers/getIteratorMethod`: no longer require a passed-in `IsArray` - [Refactor] `ES2017`+: `Num{ber,eric}ToRawBytes`, `RawBytesToNum{ber,eric}`: use TAO table sizes - [Refactor] `ES2015`+: `{,Ordinary}ObjectCreate`: prefer `__proto__` syntax over `Object.create` - [Refactor] `CopyDataProperties` tests are the same in ES2020 as in ES2018 - [Refactor] `ES2016` - `ES2020`: `UTF16Encoding`: match `UTF16EncodeCodePoint` - [Refactor] use `es-object-atoms/isObject` directly - [Refactor] add `isSameType` helper, and use it - [Refactor] `ES2017`+: `WordCharacters`: `String.prototype.indexOf` should always be present - [Refactor] use `arr[arr.length] = x` instead of `$push(arr, x)` - [Robustness] `ES2015`+: `ObjectDefineProperties`: use `OrdinaryGetOwnProperty` to handle a missing `gOPD` - [meta] add missing comments - [meta] fix operations npmignores - [meta] fix URL in comment - [meta] note `isNegativeZero` helper is slated for removal (#155) - [Deps] update `call-bound`, `which-typed-array`, `es-object-atoms`, `get-intrinsic`, `get-proto`, `regexp.prototype.flags`, `is-weakref`, `object-inspect` - [Dev Deps] pin `glob` to v7 - [Dev Deps] update `@unicode/unicode-15.0.0`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `ses` - [Tests] avoid an OOM in node 20 on SES tests - [Tests] compare correct TA type - [Tests] consolidate map of AO property names to prose names - [Tests] extract common helpers - [Tests] increase coverage - [Tests] increase coverage - [Tests] node 20 throws with RABs that are not a multiple of 4 and 8 - [Tests] refactor TA types arrays to year-taking functions - [Tests] refactor test megafile into file-per-method tests - [Tests] remove now-unused test mega-file - [Tests] some cleanups - [Tests] use proper import 1.23.9 / 2025-01-02 ================= * [Refactor] use `get-proto` directly * [Refactor] use `set-proto` directly * [Refactor] use `Reflect.setPrototypeOf` and `dunder-proto` in `setProto` helper * [Refactor] `ES2015`+: `ArrayCreate`: use `setProto` helper * [Deps] update `es-set-tostringtag`, `own-keys` * [Dev Deps] update `is-core-module` * [Tests] use `own-keys` directly 1.23.8 / 2024-12-28 ================= * [Refactor] use `own-keys` * [Refactor] use `safe-push-apply` 1.23.7 / 2024-12-20 ================= * [Refactor] create and use `helpers/isPropertyKey` * [Refactor] add `timeValue` helper, use it * [Deps] update `array-buffer-byte-length`, `data-view-buffer`, `data-view-byte-length`, `data-view-byte-offset`, `function.prototype.name`, `get-symbol-description`, `is-array-buffer`, `is-shared-array-buffer`, `is-typed-array`, `math-intrinsics`, `object.assign`, `typed-array-buffer`, `typed-array-byte-length`, `typed-array-byte-offset`, `unbox-primitive`, `which-typed-array` * [Deps] remove unused dep * [Dev Deps] update `array.prototype.indexof`, `has-bigints`, `is-registered-symbol`, `safe-bigint` 1.23.6 / 2024-12-15 ================= * [Fix] `ES2015` - `ES2019`: `IntegerIndexedElementSet`: reject BigInt Typed Arrays prior to ES2020 * [Fix] `ES2023`+: `SetTypedArrayFromTypedArray`: provide missing `cloneConstructor` argument to `CloneArrayBuffer` * [Fix] `ES2024`+: `FindViaPredicate`: spec enums are uppercase now * [Fix] `ES2017` - `ES2019`: `SetValueInBuffer`: handle proper number of arguments * [Fix] `ES2015`+: `QuoteJSONString`: properly handle surrogates * [Fix] `ES2015`+: `TestIntegrityLevel`: properly handle envs without property descriptors * [patch] `ES2018` - `ES2023`: `thisSymbolValue`: only require `Symbol.prototype.valueOf` for boxed Symbols * [Robustness] `ES2015` - `ES2016`: `SetValueInBuffer`: salt dictionary keys in case of pre-proto envs * [Refactor] use `math-intrinsics` * [Refactor] use `call-bound` directly * [Refactor] `ES2015`+: `GetIterator`: hoist an object to module scope * [Refactor] use `typeof` over `Type()` when possible * [Refactor] `ES2015` - `ES2016`: `GetValueFromBuffer`: remove unnecessary extra helper argument * [Refactor] misc cleanups * [Refactor] make and use `isObject` helper * [Refactor] `ES5`+: `MonthFromTime`: throw a `RangeError` for an out of range timestamp * [Refactor] use `+` over `Number()` * [Deps] update `arraybuffer.prototype.slice`, `call-bind`, `es-define-property`, `es-to-primitive`, `function.prototype.name`, `get-intrinsic`, `gopd`, `has-proto`, `has-symbols`, `internal-slot`, `is-data-view`, `is-regex`, `is-string`, `which-typed-array`, `is-weakref`, `safe-array-concat`, `safe-regex-test`, `string.prototype.trim`, `string.prototype.trimend`, `typed-array-byte-offset`, `typed-array-length` * [meta] remove unnecessary unspackles * [Tests] `isStringOrUndefined`: increase coverage * [Tests] bigint tests are ES2020+ only * [Dev Deps] update `array.prototype.flatmap`, `is-core-module`, `is-registered-symbol` 1.23.5 / 2024-11-14 ================= * [Fix] `ES2015`+: `CompletionRecord`: ensure `?` works on any non-abrupt completion 1.23.4 / 2024-11-12 ================= * [Fix] `ES2024`+: Iterator Records can now have non-functions in `[[NextMethod]]` * [meta] update spec URL comments * [Deps] update `globalthis`, `object-inspect`, `regexp.prototype.flags` * [Dev Deps] update `@ljharb/eslint-config`, `@unicode/unicode-15.0.0`, `diff`, `es-value-fixtures`, `is-core-module`, `mock-property`, `ses`, `tape` * [actions] split out node 10-20, and 20+ * [Tests] switch to `npm audit` from `aud` * [Tests] use `.assertion` instead of monkeypatching tape * [Tests] increase coverage 1.23.3 / 2024-03-29 ================= * [Fix] `ES2024`: `StringPad`, `StringPaddingBuiltinsImpl`: prefer uppercase spec enums * [Fix] `helpers/bytesAsInteger`: avoid a crash in node 10.4 - 10.8 * [Fix] `ES5`: `CheckObjectCoercible`: restore `optMessage` optional arg * [Refactor] `ES2022`+: update `TimeString` to use `ToZeroPaddedDecimalString` * [Robustness] use cached copies of builtins * [Deps] update `string.prototype.trimstart`, `typed-array-length` * [Dev Deps] update `array.from`, `array.prototype.filter`, `array.prototype.indexof`, `object.fromentries`, `safe-bigint` 1.23.2 / 2024-03-17 ================= * [Fix] `records/regexp-record`: add optional `[[UnicodeSets]]` boolean field * [Fix] `ES2024`+: `AddValueToKeyedGroup`: avoid adding matched values twice * [Fix] `ES5`: `CheckObjectCoercible`: use the right function name * [Fix] `ES2024`+: `AddEntriesFromIterable`, `GetIterator`, `GroupBy`: properly capitalize spec enums * [Deps] update `string.prototype.trim`, `string.prototype.trimend` * [Tests] increase coverage 1.23.1 / 2024-03-16 ================= * [Refactor] use `es-object-atoms` * [Deps] update `hasown`, `which-typed-array`, `data-view-byte-length`, `safe-array-concat` * [Dev Deps] update `diff` 1.23.0 / 2024-03-04 ================= * [New] add `ES2024` * [New] `ES2015`+: add `InternalizeJSONProperty` * [New] `ES2015`+: add `IntegerIndexedElement{Get,Set}` * [New] `ES2018`+: add `TimeZoneString` * [New] `ES2022`+: add `DefineMethodProperty` * [New] `ES2023`: add `DefaultTimeZone` * [Fix] `ES2023`+: `SetTypedArrayFrom{TypedArray,ArrayLike}`: match engine reality * [Fix] `ES2024`+: `GetViewByteLength`, `IsViewOutOfBounds`: support engines with only own DV properties * [Tests] use `safe-bigint` 1.22.5 / 2024-02-28 ================= * [Fix] `ES2015`+: `DetachArrayBuffer`: node v21.0.0+ structuredClone throws with an already-detached ArrayBuffer * [Fix] `helpers/assertRecord`: partial revert of 87c340d2; unintentional breaking change * [patch] records: fix indentation, improve object checks * [Refactor] extract TA tables to separate files * [meta] extract "list spackled files" to separate run-script * [Deps] update `available-typed-arrays`, `es-set-tostringtag`, `has-proto`, `is-negative-zero`, `is-shared-array-buffer`, `typed-array-buffer`, `typed-array-byte-length`, `typed-array-byte-offset`, `typed-array-length` * [Dev Deps] update `available-regexp-flags`, `tape` * [Dev Deps] pin `jackspeak` and `glob`, since v2.1.2+ and v10.3.8+ respectively depend on npm aliases, which kill the install process in npm < 6 * [Tests] use `define-{accessor,data}-property` * [Tests] fix some test cases * [Tests] use `safeBigInt` for `Z()` pattern to handle node 10.4 - 10.8 1.22.4 / 2024-02-13 ================= * [Fix] `ES2017`+: `IsDetachedBuffer`: properly allow SABs * [Fix] `ES2022`+: `ToBigInt`: properly throw on an unparseable string * [Fix] `ES2015`+: `ValidateTypedArray`: proper detachment check and return value * [Fix] `ES2022`+: `GetSubstitution`: match updated semantics * [Refactor] prefer `typeof` over `Type()`, except for Object, where possible * [Refactor] use `es-errors` instead of `get-intrinsic` where possible * [Refactor] use `es-define-property` * [Refactor] records: extract predicates to individual files * [Refactor] `ES2015`+: `Canonicalize`, `WordCharacters`: use explicit `.json` extension for imports * [Deps] update `array-buffer-byte-length`, `arraybuffer.prototype.slice`, `available-typed-arrays`, `call-bind`, `es-set-tostringtag`, `get-intrinsic`, `get-symbol-description`, `has-proper ty-descriptors`, `has-property-descriptors`, `hasown`, `internal-slot`, `is-array-buffer`, `is-typed-array`, `object.assign`, `regexp.prototype.flags`, `safe-array-concat`, `safe-regex-test`, `typed-array-buffer`, `which-typed-array` * [eslint] remove unused overrides * [Tests] increase/fix coverage * [Dev Deps] update `aud`, `npmignore`, `mock-property`, `tape` 1.22.3 / 2023-10-20 ================= * [Fix] `ES2015`+: `GetSubstitution`: accept `undefined` instead of a hole * [Refactor] use `hasown` instead of `has` * [Deps] update `call-bind`, `get-intrinsic`, `object-inspect`, `which-typed-array` * [Dev Deps] update `function-bind`, `is-core-module`, `mock-property`, `tape` 1.22.2 / 2023-09-14 ================= * [Fix] `ES2015`+: `NewPromiseCapability`: use AOs from the current year, not 2022 * [Refactor] `ES2021`+: `SetTypedArrayFromArrayLike`: use `IsBigIntElementType` * [Refactor] properly name `helpers/typedArrayConstructors` * [Refactor] simplify helpers * [Deps] update `arraybuffer.prototype.slice`, `function.prototype.name`, `is-typed-array`, `regexp.prototype.flags`, `safe-array-concat`, `string.prototype.trim`, `string.prototype.trimend`, `string.prototype.trimstart`, `which-typed-array` * [actions] update actions * [Tests] run SES tests on more node versions * [Dev Deps] update `@unicode/unicode-15.0.0`, `array.from`, `array.prototype.filter`, `array.prototype.flatmap`, `array.prototype.indexof`, `is-core-module`, `object.fromentries`, `ses`, `tape` 1.22.1 / 2023-07-15 ================= * [Deps] add missing `safe-array-concat` dep 1.22.0 / 2023-07-15 ================= * [New] add `ES2023` * [New] `ES2021+`: add `SetTypedArrayFromArrayLike`, `SetTypedArrayFromTypedArray` * [New] `ES2021`+: add `CloneArrayBuffer` * [New] `ES2020`+: add `IsValidIntegerIndex` * [New] `ES2015`+: add `GetValueFromBuffer`, `SetValueInBuffer` * [New] `ES2016`+: add `TypedArrayCreate`, `TypedArraySpeciesCreate` * [New] `ES2015`+: add `IsWordChar` * [New] `ES2017`+ add `WordCharacters` * [New] `ES2015`+: add `Canonicalize` * [New] `ES2015`+: add `NewPromiseCapability` * [Fix] `ES2017+`: `NumberToRawBytes`, `NumericToRawBytes`: reimplement Float64, fix integer scenarios * [Refactor] add `helpers/isLineTerminator` * [Refactor] add `isInteger` helper, and use it * [Refactor] extract `isStringOrHole` to a helper * [Refactor] `ES2017`+: `RawBytesToNumber`, `RawBytesToNumeric`: extract common code to helpers * [Refactor] make a `MAX_VALUE` helper * [Tests] fix RawBytesToNumeric tests in node v10.4-10.8 * [Tests] fix buffer test cases in node v10.4-v10.8 1.21.3 / 2023-07-12 ================= * [Fix] `ES2017+`: `RawBytesToNumber`, `RawBytesToNumeric`: properly handle some scenarios * [Fix] `ES2015`+: `GetV`: the receiver is `V`, not `O` * [Fix] `ES2017`+: `RawBytesToNumber`, `RawBytesToNumeric`: fix exponent calculation for Float64, improve tests * [Fix] `ES2017`+: `RawBytesToNumber`, `RawBytesToNumeric`: fix logic, improve tests * [Fix] `ES2019`+: `thisTimeValue`: fix spackling * [Robustness] `ES2017`+: `NumberToRawBytes`, `NumericToRawBytes`: use `SameValue` instead of `Object.is` * [Refactor] `ES2021`+: `ValidateAtomicAccess`: use `typed-array-byte-offset` * [Refactor] `ES2019`+: `AddEntriesFromIterable`: use `ThrowCompletion` * [patch] `ES2015`+: `ObjectDefineProperties`: satisfy TODO * [patch] `ES2015`+: `GetV`: improve error message * [patch] fix spec URLs * [Deps] update `get-intrinsic`, `regexp.prototype.flags`, `which-typed-array` * [actions] fix permissions * [Tests] add buffer test case fixtures + tests * [Tests] skip test that modifies the env in SES * [Tests] fix regex flags tests for node 20 * [Dev Deps] update `@ljharb/eslint-config`, `aud`, `available-regexp-flags`, `is-core-module`, `tape` 1.21.2 / 2023-03-12 ================= * [Fix] `ES2015`+: `CreateDataProperty`: use `OrdinaryDefineOwnProperty` * [Fix] `ES2015`+: `CreateDataProperty`: use `OrdinaryDefineOwnProperty` * [Fix] `ES2015`+: `GetPrototypeFromConstructor`: add missing assertion that `intrinsicDefaultProto` is an object * [Fix] `ES2015`+: `IsDetachedBuffer`: ensure a nullish error does not crash * [Fix] `ES2015`+: `ToDateString`: properly handle time values that aren’t "now" * [Fix] `ES2015`+: `ToUint8Clamp`: avoid an extra observable ToNumber * [Fix] `ES2015`+`: `GetMethod`: when `func` is not callable and `P` is a symbol, avoid the wrong TypeError * [Fix] `ES2020`+: `ToBigInt`: properly throw on anything besides string, bigint, boolean * [Fix] `ES2021`+: `SplitMatch`: instead of `false`, return `'not-matched'` * [Fix] `helpers/assertRecord`: handle nullish input * [Fix] `helpers/isFullyPopulatedPropertyDescriptor`: handle primitive inputs * [Robustness] `ES5`: `ToNumber`: avoid relying on runtime `.test` and `.replace` * [Refactor] `ES2015`: mark `IsDataDescriptor` and `IsAccessorDescriptor` as spackled * [Refactor] `ES2015`+: `IsDetachedBuffer`: use `array-buffer-byte-length` package * [Refactor] `ES2015`+: `OrdinaryHasInstance`: rely on falsiness * [Refactor] `ES2016`+: `CreateListFromArrayLike`: hoist default element types to module level * [Refactor] `ES2022`+: `StringToNumber`, `ToNumber`: use `string.prototype.trim` * [patch] `ES2022`+: `IsLessThan`: fix a comment * [patch] `ES2022`+: `TypedArrayElementSize`, `TypedArrayElementType`: throw a SyntaxError with an unknown TA type * [patch] `ES2022`+: `IsLessThan`: fix a comment * [patch] `ES2020`+: `thisBigIntValue`: throw a SyntaxError, not TypeError, for unsupported features * [patch] `helpers/getIteratorMethod`: `String` is always available * [patch] fix commented spec URLs * [patch] omit `%` for `callBound` * [meta] fix spec URLs * [meta] fix spackle metadata, comments * [Deps] update `get-intrinsic`, `internal-slot`, `is-array-buffer`, `object-inspect` * [Deps] move `function-bind` to dev deps * [Tests] String.fromCharCode takes numbers, not strings * [Tests] use `makeIteratorRecord` helper * [Tests] increase coverage * [Tests] fix tests that throw a sentinel * [Dev Deps] update `array.from`, `available-regexp-flags`, `tape` 1.21.1 / 2023-01-10 ================= * [Fix] move `available-typed-arrays` to runtime deps * [Fix] `ES2021`+: `NumberToBigInt`: throw the proper error on an env without BigInts * [Fix] `ES2018`+: `CreateAsyncFromSyncIterator`: properly check `next` method args length * [Fix] `ES2020`-`ES2021`: Abstract Relational Comparison: handle BigInts properly * [Fix] `ES2022`+: `StringToBigInt`: invalid BigInts should be `undefined`, not `NaN` as in previous years * [Fix] `helpers/isFinite`: properly handle BigInt values * [Fix] `ES2020`+: `CreateListFromArrayLike`: accept BigInts * [Fix] `ES2019`+: `AsyncFromSyncIteratorContinuation`: throw a SyntaxError when > 1 arg is passed * [patch] `ES2020`+: `GetIterator`: use SyntaxError for intentionally unsupported * [patch] `ES2015`+: `GetPrototypeFromContructor`: use SyntaxError for intentionally unsupported * [patch] `ES2022`+: `StringToNumber`: fix non-string assertion failure message * [Deps] update `es-set-tostringtag`, `is-array-buffer` * [Tests] increase coverage * [Tests] exclude coverage from files that have been replaced by an extracted package 1.21.0 / 2023-01-04 ================= * [New] `ES2015`+: add `IsDetachedBuffer` * [New] `ES2015+`: add `DetachArrayBuffer` * [New] `ES2020`+: add `NumericToRawBytes` * [New] `ES2017` - `ES2019`: add `NumberToRawBytes` * [New] `ES2020+`: add `RawBytesToNumeric` * [New] `ES2017-ES2019`: add `RawBytesToNumber` * [New] `ES2017`+: add `ValidateAtomicAccess` * [New] `ES2021`+: add `ValidateIntegerTypedArray` * [New] `ES2015`+: add `ValidateTypedArray` * [New] `ES2015`+: add `GetGlobalObject` * [New] `ES2022`+: add `TypedArrayElementSize`, `TypedArrayElementType` * [New] `ES2015`+: add `max`, `min` * [New] `helpers/assertRecord`: add predicates for PromiseCapability and AsyncGeneratorRequest Records * [New] `ES2018`+: add `AsyncIteratorClose` * [New] `ES2015`+: `IteratorClose`: also accept a Completion Record instance instead of a completion thunk * [New] `ES2015`+ (CompletionRecord, NormalCompletion), `ES2018`+ (ThrowCompletion): add new AOs * [New] `ES2015`+ (`ObjectCreate`) and `ES2020`+ (`OrdinaryObjectCreate`): use `internal-slot` to support additional slots * [New] `ES2018`+: add `CreateAsyncFromSyncIterator` * [patch] `ES2015`+: `GetMethod`: better failure message * [Refactor] use `es-set-tostringtag` package * [Refactor] use `has-proto` package * [Deps] update `has-proto`, `es-set-tostringtag`, `internal-slot` * [meta] fix spackle script to `git add` after all writing is done * [meta] autogenerate esX entry points * [meta] use a leading slash in gitattributes for proper spackle matching * [Tests] fix comments on missing AOs * [Tests] filter out host-defined AOs * [Dev Deps] update `@ljharb/eslint-config`, `aud` 1.20.5 / 2022-12-07 ================= * [Fix] `ES2020+`: `floor`: make it work with BigInts as well * [Refactor] use `gopd` * [Tests] add `mod` helper tests (#147) * [Deps] update `string.prototype.trimend`, `string.prototype.trimstart` * [Dev Deps] update `array.prototype.filter`, `array.prototype.flatmap`, `array.prototype.indexof`, `object.fromentries` 1.20.4 / 2022-10-06 ================= * [Fix] `ES2021+`: values that truncate to -0 in `ToIntegerOrInfinity` (#146) * [Deps] update `is-callable` 1.20.3 / 2022-09-22 ================= * [Refactor] extract regex tester to `safe-regex-test` package * [Deps] update `get-intrinsic`, `is-callable` * [Dev Deps] update `aud`, `tape` 1.20.2 / 2022-09-01 ================= * [Fix] `ES2020+`: `SameValueNonNumeric`: properly throw on BigInt values * [Deps] update `object.assign`, `get-intrinsic`, `object-inspect` * [Dev Deps] update `array.prototype.indexof`, `diff`, `es-value-fixtures`, `tape` * [meta] `spackle`: always mkdirp new files to be written * [Tests] fix vscode auto-const from 8fc256d 1.20.1 / 2022-05-16 ================= * [Fix] `thisTimeValue`: use `getTime`, not `valueOf`, to get the time value * [Refactor] create `IsArray` helper * [Deps] update `regexp.prototype.flags` * [Dev Deps] use `for-each` instead of `foreach` 1.20.0 / 2022-05-05 ================= * [New] add ES2022 * [New] `ES2015+`: add `ObjectDefineProperties` * [Refactor] create `fromPropertyDescriptor` helper * [Refactor] use `has-property-descriptors` * [Deps] update `string.prototype.trimend`, `string.prototype.trimstart`, `unbox-primitive` * [meta] use `npmignore` to autogenerate an npmignore file * [Dev Deps] update `es-value-fixtures`, `has-bigints`, `functions-have-names` * [Tests] copy GetIntrinsic tests over from `get-intrinsic` 1.19.5 / 2022-04-13 ================= * [Fix] `DefineOwnProperty`: FF 4-22 throws an exception when defining length of an array * [Dev Deps] update `@ljharb/eslint-config` 1.19.4 / 2022-04-12 ================= * [Fix] `ES2015+`: `CreateDataProperty`: a nonwritable but configurable property is still converted to a data property 1.19.3 / 2022-04-11 ================= * [Fix] `ES2015+`: `GetIterator`, `IterableToArrayLike`: in Symbol-less envs, handle boxed string objects * [Robustness] use `exec` instead of `test`, since the latter observably looks up `exec` * [Deps] update `is-shared-array-buffer` * [actions] restrict permissions * [Dev Deps] update `tape` * [Tests] add test coverage * [Tests] avoid a bug in node v4.0 with bound function names 1.19.2 / 2022-03-28 ================= * [Fix] `ES2018+`: `EnumerableOwnPropertyNames`, `ToIntegerOrInfinity`, `UTF16SurrogatePairToCodePoint`: proper function names * [Fix] `ES2015+`: `GetOwnPropertyKeys`/`IsExtensible`/`{Set,Test}IntegrityLevel`: avoid a crash in IE 8 on missing ES5 intrinsics * [Fix] `helpers/DefineOwnProperty`: avoid a crash in IE 8 * [Fix] `ES2015+`: `StringCreate`: properly check for `prototype` being `String.prototype` * [Docs] `ES2015+`: `GetV`: Fix spec URL * [meta] operations: use a URL object instead of a URL string * [meta] remove defunct greenkeeper config * [meta] better `eccheck` command; fix indentation * [Tests] node v0.6 lacks `RegExp.prototype.source` * [Tests] remove a stray `console.log` * [Tests] properly set the lastIndex in IE 8 * [Tests] skip test due to IE 6-8 sparse/undefined bug * [Tests] in IE 8, an empty regex is `` and not `(?:)` * [Tests] ES3 engines don’t have `.bind` * [Tests] avoid needless failures in ES3 engines that don't support descriptors * [Tests] add test to cover https://github.com/tc39/ecma262/issues/2611 * [Deps] update `has-symbols`, `is-negative-zero`, `is-weakref`, `object-inspect` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object.fromentries`, `safe-publish-latest`, `tape` * [actions] reuse common workflows * [actions] update codecov uploader 1.19.1 / 2021-10-02 ================= * [Fix] `ES2020+`: `CreateRegExpStringIterator`: should not have enumerable methods * [Dev Deps] update `array.prototype.filter`, `array.prototype.indexof` 1.19.0 / 2021-09-30 ================= * [New] `ES2021+`: `IterableToList`: make `method` parameter optional (#61) * [New] add ES2021 * [New] `ES2020+`: add `StringToBigInt`, `ToBigInt`, `ToBigInt64`, `ToBigUint64` * [New] `ES2017`+: add `IsSharedArrayBuffer`, `OrdinaryToPrimitive` * [New] `ES2015+`: add `CharacterRange`, `IsCompatiblePropertyDescriptor` * [New] `ES2020+`: add `CreateRegExpStringIterator` * [Fix] `ES2020+`: `ToBigInt64`/`ToBigUint64`: avoid node v10.4-v10.8 bug with limited BigInt range * [Fix] `ES2020+`: `AbstractRelationalComparison`, `AbstractEqualityComparison`: support BigInt * [Fix] `ES2020+`: `ToBigInt64`/`ToBigUint64`: Improve the definitions of twoSixtyThree and twoSixtyFour (#140) * [meta] do not publish .gitattributes * [Tests] Correct the behavior of `safeBigInt` * [Tests] Exclude dotfiles from the testing sweep (#141) 1.18.7 / 2021-09-28 ================= * [Fix] `getOwnPropertyDescriptor` helper: avoid crashing in IE < 9 * [Fix] `ArraySetLength`: `node` `v0.6` has a bug where array lengths can be Set but not Defined * [eslint] remove unused directive * [Tests] fix spelling 1.18.6 / 2021-09-07 ================= * [Fix] `ES2020+`: `NumberToBigInt`: throw a SyntaxError when BigInts are not supported * [Refactor] extract getSymbolDescription logic to `get-symbol-description` * [Refactor] `ES2018+`: `AbstractRelationalComparison`: use `IsStringPrefix` * [Deps] update `is-callable`, `is-regex`, `is-string` * [Dev Deps] update `@ljharb/eslint-config`, `tape` * [Tests] `GetSubstitution`: add cases 1.18.5 / 2021-08-01 ================= * [meta] remove "exports" (#133) * [Dev Deps] update `eslint` 1.18.4 / 2021-07-29 ================= * [meta] partial revert of b54cfe8525faff482450e843a49d43be3a086225 * [Deps] update `internal-slot`, `object-inspect` * [Dev Deps] update `eslint`, `tape` * [Tests] `ArraySetLength`: increase coverage 1.18.3 / 2021-05-27 ================= * [Fix] `ES2020+`: `ToNumber`: ensure it throws on a BigInt (#130) 1.18.2 / 2021-05-25 ================= * [meta] add `helpers` to "exports" field, for back compat 1.18.1 / 2021-05-25 ================= * [readme] update and clarify entry points * [meta] add "exports" field, with escape hatch * [meta] add `sideEffects` field * [meta] use `prepublishOnly`, for npm 7+ * [eslint] clean up eslint rules * [Deps] update `is-regex`, `is-string`, `object-inspect`, `unbox-primitive` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` * [actions] disable fail-fast on matrix jobs * [actions] use `node/install` action instead of `node/run` * [actions] update codeql-analysis to new best practices 1.18.0 / 2021-03-03 ================= * [New] add `ES2020`, and a number of additional AOs: See the changelog entries for the prereleases for more information: - [next.3](./CHANGELOG.md#1180-next3--2021-03-01) - [next.2](./CHANGELOG.md#1180-next2--2021-01-17) - [next.1](./CHANGELOG.md#1180-next1--2020-09-30) - [next.0](./CHANGELOG.md#1180-next0--2020-08-14) * [Refactor] `ES5+`: `Abstract Relational Comparison`: increase coverage * [Tests] increase coverage * [Tests] do not run coverage on node 0.6 1.18.0-next.3 / 2021-03-01 ================= * [New] `ES2015`: add `StringGetIndexProperty` * [New] `ES2015+`: add `RegExpCreate`, `SplitMatch`, `StringCreate` * [New] `ES2016-ES2019`: add `UTF16Decode` * [New] `ES2020+`: add `NumberToBigInt` * [New] `ES2020+: add `BigInt::`/`Number::` methods: * [Fix] `ES5`: `ToNumber`: properly refuse to parse ES6+ forms * [Fix] `ES2015+`: `Invoke`: optional argumentsList must be a List of arguments, not a list of arguments * [Fix] `ES2016+`: `UTF16Encoding`: properly return a string code point instead of a numeric code point * [Fix] `ES2020`: `NumberBitwiseOp`: assert that x and y are Numbers * [readme] remove travis/testling badge, fix repo URLs * [meta] `ES2015`: add missing `CreateArrayIterator` AO * [meta] `ES2015-ES2017`: add missing `DaylightSavingTA` AO * [meta] rerun `npm run spackle` to update URLs left after 11d8c8df11c0d15d094a6035afed662e22b440ef * [meta] update ecma URLs * [meta] unignore 2020 operations list * [meta] update operations scripts linting * [meta] refactor getOps script to fetch all years at once * [meta] refactor operations script to keep years in one place * [meta] fix ES2015 spec URL * [Deps] update `has-symbols`, `string.prototype.trimend`, `string.prototype.trimstart`, `get-intrinsic`, `is-callable`, `is-regex` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.indexof`, `aud`, `es-value-fixtures`, `object.fromentries`, `tape`, `diff` * [operations] detect ES2020+ style `T::` numeric operations * [Tests] increase coverage * [Tests] `BigInt(1e17)` throws on node v10.4-v10.6 * [Tests] improve coverage on `Number::` methods * [Tests] `tape` v5 `.equal` now uses strict equality, so no more need for `is()` * [Tests] improve BigInt:: and Number:: coverage * [Tests] actually run all the helpers tests * [Tests] ensure "expected missing" ops list is accurate * [Tests] abstract away per-operation skips * [Tests] skip BigInt:: tests on envs without BigInts * [Tests] use `es-value-fixtures` * [actions] update workflows 1.18.0-next.2 / 2021-01-17 ================= * [New] `helpers`: add `isByteValue`, `isCodePoint`, `some` * [Fix] `ES2018+`: fix `GetSubstitution` with named captures * [Fix] `ES2020`: `GetIterator`: add omitted `hint` parameter * [Fix] `ES2018`/`ES2019`: `SetFunctionLength`: Infinities should throw * [Fix] `ES2020`: `ToIndex` uses `SameValue` instead of `SameValueZero` * [Fix] `ES2020`: `CopyDataProperties` uses `CreateDataPropertyOrThrow` instead of `CreateDataProperty` * [Refactor] use extracted `call-bind` instead of local helpers * [Refactor] use extracted `get-intrinsic` package * [Deps] update `call-bind`, `get-intrinsic`, `is-callable`, `is-negative-zero`, `is-regex`, `object-inspect`, `object.assign`, `string.prototype.trimend`, `string.prototype.trimstart` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `array.prototype.indexof`, `aud`, `diff`, `functions-have-names`, `has-bigints`, `has-strict-mode`, `object-is`, `object.fromentries`, `tape` * [actions] switch Automatic Rebase workflow to `pull_request_target` event * [actions] add "Allow Edits" workflow * [meta] pin cheerio to v1.0.0-rc.3, to fix getOps * [meta] make all URLs consistent, and point to spec artifacts * [meta] refactor `deltas` script; update eslint on operations scripts * [meta] do not publish .github dir (#123) * [Tests] add `v.notNonNegativeIntegers`, `v.nonConstructorFunctions` * [Tests] migrate tests to Github Actions * [Tests] run coverage on all tests * [Tests] add `npm run test:ses` 1.18.0-next.1 / 2020-09-30 ================= * [Fix] `ES2020`: `ToInteger`: `-0` should always be normalized to `+0` (#116) * [patch] `GetIntrinsic`: Adapt to override-mistake-fix pattern (#115) * [Fix] `callBind`: ensure compatibility with SES * [Deps] update `is-callable`, `object.assign` * [Dev Deps] update `eslint`, `@ljharb/eslint-config` * [eslint] fix warning * [Tests] temporarily allow SES tests to fail (#115) * [Tests] ses-compat - initialize module after ses lockdown (#113) * [Tests] [Refactor] use defineProperty helper rather than assignment * [Tests] [Refactor] clean up defineProperty test helper 1.18.0-next.0 / 2020-08-14 ================= * [New] add `ES2020` * [New] `GetIntrinsic`: add `%AggregateError%`, `%FinalizationRegistry%`, and `%WeakRef%` * [New] `ES5`+: add `abs`, `floor`; use `modulo` consistently * [New] `GetIntrinsic`: Cache accessed intrinsics (#98) * [New] `GetIntrinsic`: Add ES201x function intrinsics (#97) * [New] `ES2015`+: add `QuoteJSONString`, `OrdinaryCreateFromConstructor` * [New] `ES2017`+: add `StringGetOwnProperty` * [New] `ES2016`+: add `UTF16Encoding` * [New] `ES2018`+: add `SetFunctionLength`, `UnicodeEscape` * [New] add `isLeadingSurrogate`/`isTrailingSurrogate` helpers * [Fix] `ES5`+: `ToPropertyDescriptor`: use intrinsic TypeError * [Fix] `ES2018+`: `CopyDataProperties`/`NumberToString`: use intrinsic TypeError * [Deps] update `is-regex`, `object-inspect` * [Dev Deps] update `eslint` 1.17.7 / 2020-09-30 ================= * [Fix] `ES2020`: `ToInteger`: `-0` should always be normalized to `+0` (#116) * [patch] `GetIntrinsic`: Adapt to override-mistake-fix pattern (#115) * [Fix] `callBind`: ensure compatibility with SES * [Deps] update `is-callable`, `is-regex`, `object-inspect`, `object.assign` * [Dev Deps] update `eslint`, `@ljharb/eslint-config` 1.17.6 / 2020-06-13 ================= * [Fix] `helpers/getSymbolDescription`: use the global Symbol registry when available (#92) * [Fix] `ES2015+`: `IsConstructor`: when `Reflect.construct` is available, be spec-accurate (#93) * [Fix] `ES2015+`: `Set`: Always return boolean value (#101) * [Fix] `ES2015+`: `Set`: ensure exceptions are thrown in IE 9 when requested * [Fix] Use `Reflect.apply(…)` if available (#99) * [Fix] `helpers/floor`: module-cache `Math.floor` * [Fix] `helpers/getSymbolDescription`: Prefer bound `description` getter when present * [Fix] `2016`: Use `getIteratorMethod` in `IterableToArrayLike` (#94) * [Fix] `helpers/OwnPropertyKeys`: Use `Reflect.ownKeys(…)` if available (#91) * [Fix] `2018+`: Fix `CopyDataProperties` depending on `this` (#95) * [meta] mark spackled files as autogenerated * [meta] `Type`: fix spec URL * [meta] `ES2015`: complete ops list * [Deps] update `is‑callable`, `is‑regex` * [Deps] switch from `string.prototype.trimleft`/`string.prototype.trimright` to `string.prototype.trimstart`/`string.prototype.trimend` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `in-publish`, `object-is`, `tape`; add `aud` * [eslint] `helpers/isPropertyDescriptor`: fix indentation * [Tests] `helpers/getSymbolDescription`: add test cases; some envs have `Symbol.for` but can not infer a name (#92) * [Tests] try out CodeQL analysis * [Tests] reformat expected missing ops * [Tests] Run tests with `undefined` this (#96) 1.17.5 / 2020-03-22 ================= * [Fix] `CreateDataProperty`: update an existing property * [Fix] run missing spackle from cd7504701879ddea0f5981e99cbcf93bfea9171d * [Dev Deps] update `make-arrow-function`, `tape`, `@ljharb/eslint-config` 1.17.4 / 2020-01-21 ================= * [Fix] `2015+`: add code to handle IE 8’s problems * [Tests] fix tests for IE 8 1.17.3 / 2020-01-19 ================= * [Fix] `ObjectCreate` `2015+`: Fall back to `__proto__` and normal `new` in older browsers * [Fix] `GetIntrinsic`: ensure the `allowMissing` property actually works on dotted intrinsics 1.17.2 / 2020-01-14 ================= * [Fix] `helpers/OwnPropertyKeys`: include non-enumerables too 1.17.1 / 2020-01-14 ================= * [Refactor] add `OwnPropertyKeys` helper, use it in `CopyDataProperties` * [Refactor] `IteratorClose`: remove useless assignment * [Dev Deps] update `eslint`, `tape`, `diff` 1.17.0 / 2019-12-20 ================= * [New] Split up each operation into its own file (prereleased) * [Fix] `GetIntrinsic`: IE 8 has a broken `Object.getOwnPropertyDescriptor` * [Fix] `object.assign` is a runtime dep (prereleased) * [Refactor] `GetIntrinsic`: remove the internal property salts, since % already handles that * [Refactor] `GetIntrinsic`: further simplification * [Deps] update `is-callable`, `string.prototype.trimleft`, `string.prototype.trimright`, `is-regex` * [Dev Deps] update `@ljharb/eslint-config`, `object-is`, `object.fromentries`, `tape` * [Tests] add `.eslintignore` * [meta] remove unused Makefile and associated utils * [meta] only run spackle script in publish (#78) (prereleased) 1.17.0-next.1 / 2019-12-11 ================= * [Fix] `object.assign` is a runtime dep * [meta] only run spackle script in publish (#78) 1.17.0-next.0 / 2019-12-11 ================= * [New] Split up each operation into its own file 1.16.3 / 2019-12-04 ================= * [Fix] `GetIntrinsic`: when given a path to a getter, return the actual getter * [Dev Deps] update `eslint` 1.16.2 / 2019-11-24 ================= * [Fix] IE 6-7 lack JSON * [Fix] IE 6-8 strings can’t use array slice, they need string slice * [Dev Deps] update `eslint` 1.16.1 / 2019-11-24 ================= * [Fix] `GetIntrinsics`: turns out IE 8 throws when `Object.getOwnPropertyDescriptor(arguments);`, and does not throw on `callee` anyways * [Deps] update `es-to-primitive`, `has-symbols`, `object-inspect` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` * [meta] re-include year files inside `operations` * [meta] add `funding` field * [actions] add Automatic Rebase github action * [Tests] use shared travis-ci config * [Tests] disable `check-coverage`, and let codecov do it 1.16.0 / 2019-10-18 ================= * [New] `ES2015+`: add `SetFunctionName` * [New] `ES2015+`: add `GetPrototypeFromConstructor`, with caveats * [New] `ES2015+`: add `CreateListFromArrayLike` * [New] `ES2016+`: add `OrdinarySetPrototypeOf` * [New] `ES2016+`: add `OrdinaryGetPrototypeOf` * [New] add `getSymbolDescription` and `getInferredName` helpers * [Fix] `GetIterator`: add fallback for pre-Symbol environments, tests * [Dev Deps] update `object.fromentries` * [Tests] add `node` `v12.2` 1.15.0 / 2019-10-02 ================= * [New] `ES2018`+: add `DateString`, `TimeString` * [New] `ES2015`+: add `ToDateString` * [New] `ES5`+: add `msFromTime`, `SecFromTime`, `MinFromTime`, `HourFromTime`, `TimeWithinDay`, `Day`, `DayFromYear`, `TimeFromYear`, `YearFromTime`, `WeekDay`, `DaysInYear`, `InLeapYear`, `DayWithinYear`, `MonthFromTime`, `DateFromTime`, `MakeDay`, `MakeDate`, `MakeTime`, `TimeClip`, `modulo` * [New] add `regexTester` helper * [New] add `callBound` helper * [New] add ES2020’s intrinsic dot notation * [New] add `isPrefixOf` helper * [New] add `maxSafeInteger` helper * [Deps] update `string.prototype.trimleft`, `string.prototype.trimright` * [Dev Deps] update `eslint` * [Tests] on `node` `v12.11` * [meta] npmignore operations scripts; add "deltas" 1.14.2 / 2019-09-08 ================= * [Fix] `ES2016`: `IterableToArrayLike`: add proper fallback for strings, pre-Symbols * [Tests] on `node` `v12.10` 1.14.1 / 2019-09-03 ================= * [meta] republish with some extra files removed 1.14.0 / 2019-09-02 ================= * [New] add ES2019 * [New] `ES2017+`: add `IterableToList` * [New] `ES2016`: add `IterableToArrayLike` * [New] `ES2015+`: add `ArrayCreate`, `ArraySetLength`, `OrdinaryDefineOwnProperty`, `OrdinaryGetOwnProperty`, `OrdinaryHasProperty`, `CreateHTML`, `GetOwnPropertyKeys`, `InstanceofOperator`, `SymbolDescriptiveString`, `GetSubstitution`, `ValidateAndApplyPropertyDescriptor`, `IsPromise`, `OrdinaryHasInstance`, `TestIntegrityLevel`, `SetIntegrityLevel` * [New] add `callBind` helper, and use it * [New] add helpers: `isPropertyDescriptor`, `every` * [New] ES5+: add `Abstract Relational Comparison` * [New] ES5+: add `Abstract Equality Comparison`, `Strict Equality Comparison` * [Fix] `ES2015+`: `GetIterator`: only require native Symbols when `method` is omitted * [Fix] `ES2015`: `Call`: error message now properly displays Symbols using `object-inspect` * [Fix] `ES2015+`: `ValidateAndApplyPropertyDescriptor`: use ES2017 logic to bypass spec bugs * [Fix] `ES2015+`: `CreateDataProperty`, `DefinePropertyOrThrow`, `ValidateAndApplyPropertyDescriptor`: add fallbacks for ES3 * [Fix] `ES2015+`: `FromPropertyDescriptor`: no longer requires a fully complete Property Descriptor * [Fix] `ES5`: `IsPropertyDescriptor`: call into `IsDataDescriptor` and `IsAccessorDescriptor` * [Refactor] use `has-symbols` for Symbol detection * [Fix] `helpers/assertRecord`: remove `console.log` * [Deps] update `object-keys` * [readme] add security note * [meta] change http URLs to https * [meta] linter cleanup * [meta] fix getOps script * [meta] add FUNDING.yml * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `semver`, `replace`, `cheerio`, `tape` * [Tests] up to `node` `v12.9`, `v11.15`, `v10.16`, `v8.16`, `v6.17` * [Tests] temporarily allow node 0.6 to fail; segfaulting in travis * [Tests] use the values helper more in es5 tests * [Tests] fix linting to apply to all files * [Tests] run `npx aud` only on prod deps * [Tests] add v.descriptors helpers * [Tests] use `npx aud` instead of `npm audit` with hoops * [Tests] use `eclint` instead of `editorconfig-tools` * [Tests] some intrinsic cleanup * [Tests] migrate es5 tests to use values helper * [Tests] add some missing ES2015 ops 1.13.0 / 2019-01-02 ================= * [New] add ES2018 * [New] add ES2015/ES2016: EnumerableOwnNames; ES2017: EnumerableOwnProperties * [New] `ES2015+`: add `thisBooleanValue`, `thisNumberValue`, `thisStringValue`, `thisTimeValue` * [New] `ES2015+`: add `DefinePropertyOrThrow`, `DeletePropertyOrThrow`, `CreateMethodProperty` * [New] add `assertRecord` helper * [Deps] update `is-callable`, `has`, `object-keys`, `es-to-primitive` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`, `semver`, `safe-publish-latest`, `replace` * [Tests] use `npm audit` instead of `nsp` * [Tests] remove `jscs` * [Tests] up to `node` `v11.6`, `v10.15`, `v8.15`, `v6.16` * [Tests] move descriptor factories to `values` helper * [Tests] add `getOps` to programmatically fetch abstract operation names 1.12.0 / 2018-05-31 ================= * [New] add `GetIntrinsic` entry point * [New] `ES2015`+: add `ObjectCreate` * [Robustness]: `ES2015+`: ensure `Math.{abs,floor}` and `Function.call` are cached 1.11.0 / 2018-03-21 ================= * [New] `ES2015+`: add iterator abstract ops * [Dev Deps] update `eslint`, `nsp`, `object.assign`, `semver`, `tape` * [Tests] up to `node` `v9.8`, `v8.10`, `v6.13` 1.10.0 / 2017-11-24 ================= * [New] ES2015+: `AdvanceStringIndex` * [Dev Deps] update `eslint`, `nsp` * [Tests] require node 0.6 to pass again * [Tests] up to `node` `v9.2`, `v8.9`, `v6.12`; use `nvm install-latest-npm`; pin included builds to LTS 1.9.0 / 2017-09-30 ================= * [New] `es2015+`: add `ArraySpeciesCreate` * [New] ES2015+: add `CreateDataProperty` and `CreateDataPropertyOrThrow` * [Tests] consolidate duplicated tests * [Tests] increase coverage * [Dev Deps] update `nsp`, `eslint` 1.8.2 / 2017-09-03 ================= * [Fix] `es2015`+: `ToNumber`: provide the proper hint for Date objects (#27) * [Dev Deps] update `eslint` 1.8.1 / 2017-08-30 ================= * [Fix] ES2015+: `ToPropertyKey`: should return a symbol for Symbols (#26) * [Deps] update `function-bind` * [Dev Deps] update `eslint`, `@ljharb/eslint-config` * [Docs] github broke markdown parsing 1.8.0 / 2017-08-04 ================= * [New] add ES2017 * [New] move es6+ to es2015+; leave es6/es7 as aliases * [New] ES5+: add `IsPropertyDescriptor`, `IsAccessorDescriptor`, `IsDataDescriptor`, `IsGenericDescriptor`, `FromPropertyDescriptor`, `ToPropertyDescriptor` * [New] ES2015+: add `CompletePropertyDescriptor`, `Set`, `HasOwnProperty`, `HasProperty`, `IsConcatSpreadable`, `Invoke`, `CreateIterResultObject`, `RegExpExec` * [Fix] es7/es2016: do not mutate ES6 * [Fix] assign helper only supports one source * [Deps] update `is-regex` * [Dev Deps] update `nsp`, `eslint`, `@ljharb/eslint-config` * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `semver`, `tape` * [Tests] add tests for missing and excess operations * [Tests] add codecov for coverage * [Tests] up to `node` `v8.2`, `v7.10`, `v6.11`, `v4.8`; newer npm breaks on older node * [Tests] use same lists of value types across tests; ensure tests are the same when ops are the same * [Tests] ES2015: add ToNumber symbol tests * [Tests] switch to `nyc` for code coverage * [Tests] make IsRegExp tests consistent across editions 1.7.0 / 2017-01-22 ================= * [New] ES6: Add `GetMethod` (#16) * [New] ES6: Add `GetV` (#16) * [New] ES6: Add `Get` (#17) * [Tests] up to `node` `v7.4`, `v6.9`, `v4.6`; improve test matrix * [Dev Deps] update `tape`, `nsp`, `eslint`, `@ljharb/eslint-config`, `safe-publish-latest` 1.6.1 / 2016-08-21 ================= * [Fix] ES6: IsConstructor should return true for `class` constructors. 1.6.0 / 2016-08-20 ================= * [New] ES5 / ES6: add `Type` * [New] ES6: `SpeciesConstructor` * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`; add `safe-publish-latest` * [Tests] up to `node` `v6.4`, `v5.12`, `v4.5` 1.5.1 / 2016-05-30 ================= * [Fix] `ES.IsRegExp`: actually look up `Symbol.match` on the argument * [Refactor] create `isNaN` helper * [Deps] update `is-callable`, `function-bind` * [Deps] update `es-to-primitive`, fix ES5 tests * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape`, `nsp` * [Tests] up to `node` `v6.2`, `v5.11`, `v4.4` * [Tests] use pretest/posttest for linting/security 1.5.0 / 2015-12-27 ================= * [New] adds `Symbol.toPrimitive` support via `es-to-primitive` * [Deps] update `is-callable`, `es-to-primitive` * [Dev Deps] update `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver`, `tape` * [Tests] up to `node` `v5.3` 1.4.3 / 2015-11-04 ================= * [Fix] `ES6.ToNumber`: should give `NaN` for explicitly signed hex strings (#4) * [Refactor] `ES6.ToNumber`: No need to double-trim * [Refactor] group tests better * [Tests] should still pass on `node` `v0.8` 1.4.2 / 2015-11-02 ================= * [Fix] ensure `ES.ToNumber` trims whitespace, and does not trim non-whitespace (#3) 1.4.1 / 2015-10-31 ================= * [Fix] ensure only 0-1 are valid binary and 0-7 are valid octal digits (#2) * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config` * [Tests] on `node` `v5.0` * [Tests] fix npm upgrades for older node versions * package.json: use object form of "authors", add "contributors" 1.4.0 / 2015-09-26 ================= * [Deps] update `is-callable` * [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` * [Tests] on `node` `v4.2` * [New] Add `SameValueNonNumber` to ES7 1.3.2 / 2015-09-26 ================= * [Fix] Fix `ES6.IsRegExp` to properly handle `Symbol.match`, per spec. * [Tests] up to `io.js` `v3.3`, `node` `v4.1` * [Dev Deps] update `tape`, `jscs`, `nsp`, `eslint`, `@ljharb/eslint-config`, `semver` 1.3.1 / 2015-08-15 ================= * [Fix] Ensure that objects that `toString` to a binary or octal literal also convert properly 1.3.0 / 2015-08-15 ================= * [New] ES6’s ToNumber now supports binary and octal literals. * [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config`, `tape` * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG * [Tests] up to `io.js` `v3.0` 1.2.2 / 2015-07-28 ================= * [Fix] Both `ES5.CheckObjectCoercible` and `ES6.RequireObjectCoercible` return the value if they don't throw. * [Tests] Test on latest `io.js` versions. * [Dev Deps] Update `eslint`, `jscs`, `tape`, `semver`, `covert`, `nsp` 1.2.1 / 2015-03-20 ================= * Fix `isFinite` helper. 1.2.0 / 2015-03-19 ================= * Use `es-to-primitive` for ToPrimitive methods. * Test on latest `io.js` versions; allow failures on all but 2 latest `node`/`io.js` versions. 1.1.2 / 2015-03-20 ================= * Fix isFinite helper. 1.1.1 / 2015-03-19 ================= * Fix isPrimitive check for functions * Update `eslint`, `editorconfig-tools`, `semver`, `nsp` 1.1.0 / 2015-02-17 ================= * Add ES7 export (non-default). * All grade A-supported `node`/`iojs` versions now ship with an `npm` that understands `^`. * Test on `iojs-v1.2`. 1.0.1 / 2015-01-30 ================= * Use `is-callable` instead of an internal function. * Update `tape`, `jscs`, `nsp`, `eslint` 1.0.0 / 2015-01-10 ================= * v1.0.0 ljharb-es-abstract-babee05/GetIntrinsic.js000066400000000000000000000001311516525472400206750ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('get-intrinsic'); ljharb-es-abstract-babee05/LICENSE000066400000000000000000000020711516525472400167470ustar00rootroot00000000000000The MIT License (MIT) Copyright (C) 2015 Jordan Harband Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ljharb-es-abstract-babee05/README.md000066400000000000000000000036211516525472400172230ustar00rootroot00000000000000# es-abstract [![Version Badge][npm-version-svg]][package-url] [![dependency status][deps-svg]][deps-url] [![dev dependency status][dev-deps-svg]][dev-deps-url] [![License][license-image]][license-url] [![Downloads][downloads-image]][downloads-url] [![npm badge][npm-badge-png]][package-url] ECMAScript spec abstract operations. Every operation is available by edition/year and by name - for example, `es-abstract/2020/Call` gives you the `Call` operation from ES2020, `es-abstract/5/Type` gives you the `Type` operation from ES5. All abstract operations are also available under an `es5`/`es2015`/`es2016`/`es2017`/`es2018`/`es2019`/`es2020`/`es2021` entry point, and as a property on the `main` export, but using deep imports is highly encouraged for bundle size and performance reasons. Non-deep entry points will be removed in the next semver-major release. ## Example ```js var ES = require('es-abstract'); var assert = require('assert'); assert(ES.isCallable(function () {})); assert(!ES.isCallable(/a/g)); ``` ## Tests Simply clone the repo, `npm install`, and run `npm test` ## Security Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. [package-url]: https://npmjs.org/package/es-abstract [npm-version-svg]: https://versionbadg.es/ljharb/es-abstract.svg [deps-svg]: https://david-dm.org/ljharb/es-abstract.svg [deps-url]: https://david-dm.org/ljharb/es-abstract [dev-deps-svg]: https://david-dm.org/ljharb/es-abstract/dev-status.svg [dev-deps-url]: https://david-dm.org/ljharb/es-abstract#info=devDependencies [npm-badge-png]: https://nodei.co/npm/es-abstract.png?downloads=true&stars=true [license-image]: https://img.shields.io/npm/l/es-abstract.svg [license-url]: LICENSE [downloads-image]: https://img.shields.io/npm/dm/es-abstract.svg [downloads-url]: https://npm-stat.com/charts.html?package=es-abstract ljharb-es-abstract-babee05/es2015.js000066400000000000000000000156041516525472400172250ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/6.0/#sec-abstract-operations var ES2015 = { 'Abstract Equality Comparison': require('./2015/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2015/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2015/StrictEqualityComparison'), abs: require('./2015/abs'), AdvanceStringIndex: require('./2015/AdvanceStringIndex'), ArrayCreate: require('./2015/ArrayCreate'), ArraySetLength: require('./2015/ArraySetLength'), ArraySpeciesCreate: require('./2015/ArraySpeciesCreate'), Call: require('./2015/Call'), Canonicalize: require('./2015/Canonicalize'), CanonicalNumericIndexString: require('./2015/CanonicalNumericIndexString'), CharacterRange: require('./2015/CharacterRange'), CompletePropertyDescriptor: require('./2015/CompletePropertyDescriptor'), CompletionRecord: require('./2015/CompletionRecord'), CreateDataProperty: require('./2015/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2015/CreateDataPropertyOrThrow'), CreateHTML: require('./2015/CreateHTML'), CreateIterResultObject: require('./2015/CreateIterResultObject'), CreateListFromArrayLike: require('./2015/CreateListFromArrayLike'), CreateMethodProperty: require('./2015/CreateMethodProperty'), DateFromTime: require('./2015/DateFromTime'), Day: require('./2015/Day'), DayFromYear: require('./2015/DayFromYear'), DaysInYear: require('./2015/DaysInYear'), DayWithinYear: require('./2015/DayWithinYear'), DefinePropertyOrThrow: require('./2015/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2015/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2015/DetachArrayBuffer'), EnumerableOwnNames: require('./2015/EnumerableOwnNames'), floor: require('./2015/floor'), FromPropertyDescriptor: require('./2015/FromPropertyDescriptor'), Get: require('./2015/Get'), GetGlobalObject: require('./2015/GetGlobalObject'), GetIterator: require('./2015/GetIterator'), GetMethod: require('./2015/GetMethod'), GetOwnPropertyKeys: require('./2015/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2015/GetPrototypeFromConstructor'), GetSubstitution: require('./2015/GetSubstitution'), GetV: require('./2015/GetV'), GetValueFromBuffer: require('./2015/GetValueFromBuffer'), HasOwnProperty: require('./2015/HasOwnProperty'), HasProperty: require('./2015/HasProperty'), HourFromTime: require('./2015/HourFromTime'), InLeapYear: require('./2015/InLeapYear'), InstanceofOperator: require('./2015/InstanceofOperator'), IntegerIndexedElementGet: require('./2015/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2015/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2015/InternalizeJSONProperty'), Invoke: require('./2015/Invoke'), IsAccessorDescriptor: require('./2015/IsAccessorDescriptor'), IsArray: require('./2015/IsArray'), IsCallable: require('./2015/IsCallable'), IsCompatiblePropertyDescriptor: require('./2015/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2015/IsConcatSpreadable'), IsConstructor: require('./2015/IsConstructor'), IsDataDescriptor: require('./2015/IsDataDescriptor'), IsDetachedBuffer: require('./2015/IsDetachedBuffer'), IsExtensible: require('./2015/IsExtensible'), IsGenericDescriptor: require('./2015/IsGenericDescriptor'), IsInteger: require('./2015/IsInteger'), IsPromise: require('./2015/IsPromise'), IsPropertyDescriptor: require('./2015/IsPropertyDescriptor'), IsPropertyKey: require('./2015/IsPropertyKey'), IsRegExp: require('./2015/IsRegExp'), IsWordChar: require('./2015/IsWordChar'), IteratorClose: require('./2015/IteratorClose'), IteratorComplete: require('./2015/IteratorComplete'), IteratorNext: require('./2015/IteratorNext'), IteratorStep: require('./2015/IteratorStep'), IteratorValue: require('./2015/IteratorValue'), MakeDate: require('./2015/MakeDate'), MakeDay: require('./2015/MakeDay'), MakeTime: require('./2015/MakeTime'), max: require('./2015/max'), min: require('./2015/min'), MinFromTime: require('./2015/MinFromTime'), modulo: require('./2015/modulo'), MonthFromTime: require('./2015/MonthFromTime'), msFromTime: require('./2015/msFromTime'), NewPromiseCapability: require('./2015/NewPromiseCapability'), NormalCompletion: require('./2015/NormalCompletion'), ObjectCreate: require('./2015/ObjectCreate'), ObjectDefineProperties: require('./2015/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2015/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2015/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2015/OrdinaryGetOwnProperty'), OrdinaryHasInstance: require('./2015/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2015/OrdinaryHasProperty'), QuoteJSONString: require('./2015/QuoteJSONString'), RegExpCreate: require('./2015/RegExpCreate'), RegExpExec: require('./2015/RegExpExec'), RequireObjectCoercible: require('./2015/RequireObjectCoercible'), SameValue: require('./2015/SameValue'), SameValueZero: require('./2015/SameValueZero'), SecFromTime: require('./2015/SecFromTime'), Set: require('./2015/Set'), SetFunctionName: require('./2015/SetFunctionName'), SetIntegrityLevel: require('./2015/SetIntegrityLevel'), SetValueInBuffer: require('./2015/SetValueInBuffer'), SpeciesConstructor: require('./2015/SpeciesConstructor'), SplitMatch: require('./2015/SplitMatch'), StringCreate: require('./2015/StringCreate'), StringGetIndexProperty: require('./2015/StringGetIndexProperty'), SymbolDescriptiveString: require('./2015/SymbolDescriptiveString'), TestIntegrityLevel: require('./2015/TestIntegrityLevel'), thisBooleanValue: require('./2015/thisBooleanValue'), thisNumberValue: require('./2015/thisNumberValue'), thisStringValue: require('./2015/thisStringValue'), thisTimeValue: require('./2015/thisTimeValue'), TimeClip: require('./2015/TimeClip'), TimeFromYear: require('./2015/TimeFromYear'), TimeWithinDay: require('./2015/TimeWithinDay'), ToBoolean: require('./2015/ToBoolean'), ToDateString: require('./2015/ToDateString'), ToInt16: require('./2015/ToInt16'), ToInt32: require('./2015/ToInt32'), ToInt8: require('./2015/ToInt8'), ToInteger: require('./2015/ToInteger'), ToLength: require('./2015/ToLength'), ToNumber: require('./2015/ToNumber'), ToObject: require('./2015/ToObject'), ToPrimitive: require('./2015/ToPrimitive'), ToPropertyDescriptor: require('./2015/ToPropertyDescriptor'), ToPropertyKey: require('./2015/ToPropertyKey'), ToString: require('./2015/ToString'), ToUint16: require('./2015/ToUint16'), ToUint32: require('./2015/ToUint32'), ToUint8: require('./2015/ToUint8'), ToUint8Clamp: require('./2015/ToUint8Clamp'), Type: require('./2015/Type'), ValidateAndApplyPropertyDescriptor: require('./2015/ValidateAndApplyPropertyDescriptor'), ValidateTypedArray: require('./2015/ValidateTypedArray'), WeekDay: require('./2015/WeekDay'), YearFromTime: require('./2015/YearFromTime') }; module.exports = ES2015; ljharb-es-abstract-babee05/es2016.js000066400000000000000000000164311516525472400172250ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/7.0/#sec-abstract-operations var ES2016 = { 'Abstract Equality Comparison': require('./2016/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2016/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2016/StrictEqualityComparison'), abs: require('./2016/abs'), AdvanceStringIndex: require('./2016/AdvanceStringIndex'), ArrayCreate: require('./2016/ArrayCreate'), ArraySetLength: require('./2016/ArraySetLength'), ArraySpeciesCreate: require('./2016/ArraySpeciesCreate'), Call: require('./2016/Call'), Canonicalize: require('./2016/Canonicalize'), CanonicalNumericIndexString: require('./2016/CanonicalNumericIndexString'), CharacterRange: require('./2016/CharacterRange'), CompletePropertyDescriptor: require('./2016/CompletePropertyDescriptor'), CompletionRecord: require('./2016/CompletionRecord'), CreateDataProperty: require('./2016/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2016/CreateDataPropertyOrThrow'), CreateHTML: require('./2016/CreateHTML'), CreateIterResultObject: require('./2016/CreateIterResultObject'), CreateListFromArrayLike: require('./2016/CreateListFromArrayLike'), CreateMethodProperty: require('./2016/CreateMethodProperty'), DateFromTime: require('./2016/DateFromTime'), Day: require('./2016/Day'), DayFromYear: require('./2016/DayFromYear'), DaysInYear: require('./2016/DaysInYear'), DayWithinYear: require('./2016/DayWithinYear'), DefinePropertyOrThrow: require('./2016/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2016/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2016/DetachArrayBuffer'), EnumerableOwnNames: require('./2016/EnumerableOwnNames'), floor: require('./2016/floor'), FromPropertyDescriptor: require('./2016/FromPropertyDescriptor'), Get: require('./2016/Get'), GetGlobalObject: require('./2016/GetGlobalObject'), GetIterator: require('./2016/GetIterator'), GetMethod: require('./2016/GetMethod'), GetOwnPropertyKeys: require('./2016/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2016/GetPrototypeFromConstructor'), GetSubstitution: require('./2016/GetSubstitution'), GetV: require('./2016/GetV'), GetValueFromBuffer: require('./2016/GetValueFromBuffer'), HasOwnProperty: require('./2016/HasOwnProperty'), HasProperty: require('./2016/HasProperty'), HourFromTime: require('./2016/HourFromTime'), InLeapYear: require('./2016/InLeapYear'), InstanceofOperator: require('./2016/InstanceofOperator'), IntegerIndexedElementGet: require('./2016/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2016/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2016/InternalizeJSONProperty'), Invoke: require('./2016/Invoke'), IsAccessorDescriptor: require('./2016/IsAccessorDescriptor'), IsArray: require('./2016/IsArray'), IsCallable: require('./2016/IsCallable'), IsCompatiblePropertyDescriptor: require('./2016/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2016/IsConcatSpreadable'), IsConstructor: require('./2016/IsConstructor'), IsDataDescriptor: require('./2016/IsDataDescriptor'), IsDetachedBuffer: require('./2016/IsDetachedBuffer'), IsExtensible: require('./2016/IsExtensible'), IsGenericDescriptor: require('./2016/IsGenericDescriptor'), IsInteger: require('./2016/IsInteger'), IsPromise: require('./2016/IsPromise'), IsPropertyDescriptor: require('./2016/IsPropertyDescriptor'), IsPropertyKey: require('./2016/IsPropertyKey'), IsRegExp: require('./2016/IsRegExp'), IsWordChar: require('./2016/IsWordChar'), IterableToArrayLike: require('./2016/IterableToArrayLike'), IteratorClose: require('./2016/IteratorClose'), IteratorComplete: require('./2016/IteratorComplete'), IteratorNext: require('./2016/IteratorNext'), IteratorStep: require('./2016/IteratorStep'), IteratorValue: require('./2016/IteratorValue'), MakeDate: require('./2016/MakeDate'), MakeDay: require('./2016/MakeDay'), MakeTime: require('./2016/MakeTime'), max: require('./2016/max'), min: require('./2016/min'), MinFromTime: require('./2016/MinFromTime'), modulo: require('./2016/modulo'), MonthFromTime: require('./2016/MonthFromTime'), msFromTime: require('./2016/msFromTime'), NewPromiseCapability: require('./2016/NewPromiseCapability'), NormalCompletion: require('./2016/NormalCompletion'), ObjectCreate: require('./2016/ObjectCreate'), ObjectDefineProperties: require('./2016/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2016/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2016/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2016/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2016/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2016/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2016/OrdinaryHasProperty'), OrdinarySetPrototypeOf: require('./2016/OrdinarySetPrototypeOf'), QuoteJSONString: require('./2016/QuoteJSONString'), RegExpCreate: require('./2016/RegExpCreate'), RegExpExec: require('./2016/RegExpExec'), RequireObjectCoercible: require('./2016/RequireObjectCoercible'), SameValue: require('./2016/SameValue'), SameValueNonNumber: require('./2016/SameValueNonNumber'), SameValueZero: require('./2016/SameValueZero'), SecFromTime: require('./2016/SecFromTime'), Set: require('./2016/Set'), SetFunctionName: require('./2016/SetFunctionName'), SetIntegrityLevel: require('./2016/SetIntegrityLevel'), SetValueInBuffer: require('./2016/SetValueInBuffer'), SpeciesConstructor: require('./2016/SpeciesConstructor'), SplitMatch: require('./2016/SplitMatch'), StringCreate: require('./2016/StringCreate'), SymbolDescriptiveString: require('./2016/SymbolDescriptiveString'), TestIntegrityLevel: require('./2016/TestIntegrityLevel'), thisBooleanValue: require('./2016/thisBooleanValue'), thisNumberValue: require('./2016/thisNumberValue'), thisStringValue: require('./2016/thisStringValue'), thisTimeValue: require('./2016/thisTimeValue'), TimeClip: require('./2016/TimeClip'), TimeFromYear: require('./2016/TimeFromYear'), TimeWithinDay: require('./2016/TimeWithinDay'), ToBoolean: require('./2016/ToBoolean'), ToDateString: require('./2016/ToDateString'), ToInt16: require('./2016/ToInt16'), ToInt32: require('./2016/ToInt32'), ToInt8: require('./2016/ToInt8'), ToInteger: require('./2016/ToInteger'), ToLength: require('./2016/ToLength'), ToNumber: require('./2016/ToNumber'), ToObject: require('./2016/ToObject'), ToPrimitive: require('./2016/ToPrimitive'), ToPropertyDescriptor: require('./2016/ToPropertyDescriptor'), ToPropertyKey: require('./2016/ToPropertyKey'), ToString: require('./2016/ToString'), ToUint16: require('./2016/ToUint16'), ToUint32: require('./2016/ToUint32'), ToUint8: require('./2016/ToUint8'), ToUint8Clamp: require('./2016/ToUint8Clamp'), Type: require('./2016/Type'), TypedArrayCreate: require('./2016/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2016/TypedArraySpeciesCreate'), UTF16Decode: require('./2016/UTF16Decode'), UTF16Encoding: require('./2016/UTF16Encoding'), ValidateAndApplyPropertyDescriptor: require('./2016/ValidateAndApplyPropertyDescriptor'), ValidateTypedArray: require('./2016/ValidateTypedArray'), WeekDay: require('./2016/WeekDay'), YearFromTime: require('./2016/YearFromTime') }; module.exports = ES2016; ljharb-es-abstract-babee05/es2017.js000066400000000000000000000173271516525472400172330ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/8.0/#sec-abstract-operations var ES2017 = { 'Abstract Equality Comparison': require('./2017/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2017/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2017/StrictEqualityComparison'), abs: require('./2017/abs'), AdvanceStringIndex: require('./2017/AdvanceStringIndex'), ArrayCreate: require('./2017/ArrayCreate'), ArraySetLength: require('./2017/ArraySetLength'), ArraySpeciesCreate: require('./2017/ArraySpeciesCreate'), Call: require('./2017/Call'), Canonicalize: require('./2017/Canonicalize'), CanonicalNumericIndexString: require('./2017/CanonicalNumericIndexString'), CharacterRange: require('./2017/CharacterRange'), CompletePropertyDescriptor: require('./2017/CompletePropertyDescriptor'), CompletionRecord: require('./2017/CompletionRecord'), CreateDataProperty: require('./2017/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2017/CreateDataPropertyOrThrow'), CreateHTML: require('./2017/CreateHTML'), CreateIterResultObject: require('./2017/CreateIterResultObject'), CreateListFromArrayLike: require('./2017/CreateListFromArrayLike'), CreateMethodProperty: require('./2017/CreateMethodProperty'), DateFromTime: require('./2017/DateFromTime'), Day: require('./2017/Day'), DayFromYear: require('./2017/DayFromYear'), DaysInYear: require('./2017/DaysInYear'), DayWithinYear: require('./2017/DayWithinYear'), DefinePropertyOrThrow: require('./2017/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2017/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2017/DetachArrayBuffer'), EnumerableOwnProperties: require('./2017/EnumerableOwnProperties'), floor: require('./2017/floor'), FromPropertyDescriptor: require('./2017/FromPropertyDescriptor'), Get: require('./2017/Get'), GetGlobalObject: require('./2017/GetGlobalObject'), GetIterator: require('./2017/GetIterator'), GetMethod: require('./2017/GetMethod'), GetOwnPropertyKeys: require('./2017/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2017/GetPrototypeFromConstructor'), GetSubstitution: require('./2017/GetSubstitution'), GetV: require('./2017/GetV'), GetValueFromBuffer: require('./2017/GetValueFromBuffer'), HasOwnProperty: require('./2017/HasOwnProperty'), HasProperty: require('./2017/HasProperty'), HourFromTime: require('./2017/HourFromTime'), InLeapYear: require('./2017/InLeapYear'), InstanceofOperator: require('./2017/InstanceofOperator'), IntegerIndexedElementGet: require('./2017/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2017/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2017/InternalizeJSONProperty'), Invoke: require('./2017/Invoke'), IsAccessorDescriptor: require('./2017/IsAccessorDescriptor'), IsArray: require('./2017/IsArray'), IsCallable: require('./2017/IsCallable'), IsCompatiblePropertyDescriptor: require('./2017/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2017/IsConcatSpreadable'), IsConstructor: require('./2017/IsConstructor'), IsDataDescriptor: require('./2017/IsDataDescriptor'), IsDetachedBuffer: require('./2017/IsDetachedBuffer'), IsExtensible: require('./2017/IsExtensible'), IsGenericDescriptor: require('./2017/IsGenericDescriptor'), IsInteger: require('./2017/IsInteger'), IsPromise: require('./2017/IsPromise'), IsPropertyDescriptor: require('./2017/IsPropertyDescriptor'), IsPropertyKey: require('./2017/IsPropertyKey'), IsRegExp: require('./2017/IsRegExp'), IsSharedArrayBuffer: require('./2017/IsSharedArrayBuffer'), IsWordChar: require('./2017/IsWordChar'), IterableToList: require('./2017/IterableToList'), IteratorClose: require('./2017/IteratorClose'), IteratorComplete: require('./2017/IteratorComplete'), IteratorNext: require('./2017/IteratorNext'), IteratorStep: require('./2017/IteratorStep'), IteratorValue: require('./2017/IteratorValue'), MakeDate: require('./2017/MakeDate'), MakeDay: require('./2017/MakeDay'), MakeTime: require('./2017/MakeTime'), max: require('./2017/max'), min: require('./2017/min'), MinFromTime: require('./2017/MinFromTime'), modulo: require('./2017/modulo'), MonthFromTime: require('./2017/MonthFromTime'), msFromTime: require('./2017/msFromTime'), NewPromiseCapability: require('./2017/NewPromiseCapability'), NormalCompletion: require('./2017/NormalCompletion'), NumberToRawBytes: require('./2017/NumberToRawBytes'), ObjectCreate: require('./2017/ObjectCreate'), ObjectDefineProperties: require('./2017/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2017/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2017/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2017/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2017/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2017/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2017/OrdinaryHasProperty'), OrdinarySetPrototypeOf: require('./2017/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2017/OrdinaryToPrimitive'), QuoteJSONString: require('./2017/QuoteJSONString'), RawBytesToNumber: require('./2017/RawBytesToNumber'), RegExpCreate: require('./2017/RegExpCreate'), RegExpExec: require('./2017/RegExpExec'), RequireObjectCoercible: require('./2017/RequireObjectCoercible'), SameValue: require('./2017/SameValue'), SameValueNonNumber: require('./2017/SameValueNonNumber'), SameValueZero: require('./2017/SameValueZero'), SecFromTime: require('./2017/SecFromTime'), Set: require('./2017/Set'), SetFunctionName: require('./2017/SetFunctionName'), SetIntegrityLevel: require('./2017/SetIntegrityLevel'), SetValueInBuffer: require('./2017/SetValueInBuffer'), SpeciesConstructor: require('./2017/SpeciesConstructor'), SplitMatch: require('./2017/SplitMatch'), StringCreate: require('./2017/StringCreate'), StringGetOwnProperty: require('./2017/StringGetOwnProperty'), SymbolDescriptiveString: require('./2017/SymbolDescriptiveString'), TestIntegrityLevel: require('./2017/TestIntegrityLevel'), thisBooleanValue: require('./2017/thisBooleanValue'), thisNumberValue: require('./2017/thisNumberValue'), thisStringValue: require('./2017/thisStringValue'), thisTimeValue: require('./2017/thisTimeValue'), TimeClip: require('./2017/TimeClip'), TimeFromYear: require('./2017/TimeFromYear'), TimeWithinDay: require('./2017/TimeWithinDay'), ToBoolean: require('./2017/ToBoolean'), ToDateString: require('./2017/ToDateString'), ToIndex: require('./2017/ToIndex'), ToInt16: require('./2017/ToInt16'), ToInt32: require('./2017/ToInt32'), ToInt8: require('./2017/ToInt8'), ToInteger: require('./2017/ToInteger'), ToLength: require('./2017/ToLength'), ToNumber: require('./2017/ToNumber'), ToObject: require('./2017/ToObject'), ToPrimitive: require('./2017/ToPrimitive'), ToPropertyDescriptor: require('./2017/ToPropertyDescriptor'), ToPropertyKey: require('./2017/ToPropertyKey'), ToString: require('./2017/ToString'), ToUint16: require('./2017/ToUint16'), ToUint32: require('./2017/ToUint32'), ToUint8: require('./2017/ToUint8'), ToUint8Clamp: require('./2017/ToUint8Clamp'), Type: require('./2017/Type'), TypedArrayCreate: require('./2017/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2017/TypedArraySpeciesCreate'), UTF16Decode: require('./2017/UTF16Decode'), UTF16Encoding: require('./2017/UTF16Encoding'), ValidateAndApplyPropertyDescriptor: require('./2017/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2017/ValidateAtomicAccess'), ValidateTypedArray: require('./2017/ValidateTypedArray'), WeekDay: require('./2017/WeekDay'), WordCharacters: require('./2017/WordCharacters'), YearFromTime: require('./2017/YearFromTime') }; module.exports = ES2017; ljharb-es-abstract-babee05/es2018.js000066400000000000000000000205271516525472400172300ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/9.0/#sec-abstract-operations var ES2018 = { 'Abstract Equality Comparison': require('./2018/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2018/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2018/StrictEqualityComparison'), abs: require('./2018/abs'), AdvanceStringIndex: require('./2018/AdvanceStringIndex'), ArrayCreate: require('./2018/ArrayCreate'), ArraySetLength: require('./2018/ArraySetLength'), ArraySpeciesCreate: require('./2018/ArraySpeciesCreate'), AsyncIteratorClose: require('./2018/AsyncIteratorClose'), Call: require('./2018/Call'), Canonicalize: require('./2018/Canonicalize'), CanonicalNumericIndexString: require('./2018/CanonicalNumericIndexString'), CharacterRange: require('./2018/CharacterRange'), CompletePropertyDescriptor: require('./2018/CompletePropertyDescriptor'), CompletionRecord: require('./2018/CompletionRecord'), CopyDataProperties: require('./2018/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2018/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2018/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2018/CreateDataPropertyOrThrow'), CreateHTML: require('./2018/CreateHTML'), CreateIterResultObject: require('./2018/CreateIterResultObject'), CreateListFromArrayLike: require('./2018/CreateListFromArrayLike'), CreateMethodProperty: require('./2018/CreateMethodProperty'), DateFromTime: require('./2018/DateFromTime'), DateString: require('./2018/DateString'), Day: require('./2018/Day'), DayFromYear: require('./2018/DayFromYear'), DaysInYear: require('./2018/DaysInYear'), DayWithinYear: require('./2018/DayWithinYear'), DefinePropertyOrThrow: require('./2018/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2018/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2018/DetachArrayBuffer'), EnumerableOwnPropertyNames: require('./2018/EnumerableOwnPropertyNames'), floor: require('./2018/floor'), FromPropertyDescriptor: require('./2018/FromPropertyDescriptor'), Get: require('./2018/Get'), GetGlobalObject: require('./2018/GetGlobalObject'), GetIterator: require('./2018/GetIterator'), GetMethod: require('./2018/GetMethod'), GetOwnPropertyKeys: require('./2018/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2018/GetPrototypeFromConstructor'), GetSubstitution: require('./2018/GetSubstitution'), GetV: require('./2018/GetV'), GetValueFromBuffer: require('./2018/GetValueFromBuffer'), HasOwnProperty: require('./2018/HasOwnProperty'), HasProperty: require('./2018/HasProperty'), HourFromTime: require('./2018/HourFromTime'), InLeapYear: require('./2018/InLeapYear'), InstanceofOperator: require('./2018/InstanceofOperator'), IntegerIndexedElementGet: require('./2018/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2018/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2018/InternalizeJSONProperty'), Invoke: require('./2018/Invoke'), IsAccessorDescriptor: require('./2018/IsAccessorDescriptor'), IsArray: require('./2018/IsArray'), IsCallable: require('./2018/IsCallable'), IsCompatiblePropertyDescriptor: require('./2018/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2018/IsConcatSpreadable'), IsConstructor: require('./2018/IsConstructor'), IsDataDescriptor: require('./2018/IsDataDescriptor'), IsDetachedBuffer: require('./2018/IsDetachedBuffer'), IsExtensible: require('./2018/IsExtensible'), IsGenericDescriptor: require('./2018/IsGenericDescriptor'), IsInteger: require('./2018/IsInteger'), IsPromise: require('./2018/IsPromise'), IsPropertyKey: require('./2018/IsPropertyKey'), IsRegExp: require('./2018/IsRegExp'), IsSharedArrayBuffer: require('./2018/IsSharedArrayBuffer'), IsStringPrefix: require('./2018/IsStringPrefix'), IsWordChar: require('./2018/IsWordChar'), IterableToList: require('./2018/IterableToList'), IteratorClose: require('./2018/IteratorClose'), IteratorComplete: require('./2018/IteratorComplete'), IteratorNext: require('./2018/IteratorNext'), IteratorStep: require('./2018/IteratorStep'), IteratorValue: require('./2018/IteratorValue'), MakeDate: require('./2018/MakeDate'), MakeDay: require('./2018/MakeDay'), MakeTime: require('./2018/MakeTime'), max: require('./2018/max'), min: require('./2018/min'), MinFromTime: require('./2018/MinFromTime'), modulo: require('./2018/modulo'), MonthFromTime: require('./2018/MonthFromTime'), msFromTime: require('./2018/msFromTime'), NewPromiseCapability: require('./2018/NewPromiseCapability'), NormalCompletion: require('./2018/NormalCompletion'), NumberToRawBytes: require('./2018/NumberToRawBytes'), NumberToString: require('./2018/NumberToString'), ObjectCreate: require('./2018/ObjectCreate'), ObjectDefineProperties: require('./2018/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2018/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2018/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2018/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2018/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2018/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2018/OrdinaryHasProperty'), OrdinarySetPrototypeOf: require('./2018/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2018/OrdinaryToPrimitive'), PromiseResolve: require('./2018/PromiseResolve'), QuoteJSONString: require('./2018/QuoteJSONString'), RawBytesToNumber: require('./2018/RawBytesToNumber'), RegExpCreate: require('./2018/RegExpCreate'), RegExpExec: require('./2018/RegExpExec'), RequireObjectCoercible: require('./2018/RequireObjectCoercible'), SameValue: require('./2018/SameValue'), SameValueNonNumber: require('./2018/SameValueNonNumber'), SameValueZero: require('./2018/SameValueZero'), SecFromTime: require('./2018/SecFromTime'), Set: require('./2018/Set'), SetFunctionLength: require('./2018/SetFunctionLength'), SetFunctionName: require('./2018/SetFunctionName'), SetIntegrityLevel: require('./2018/SetIntegrityLevel'), SetValueInBuffer: require('./2018/SetValueInBuffer'), SpeciesConstructor: require('./2018/SpeciesConstructor'), SplitMatch: require('./2018/SplitMatch'), StringCreate: require('./2018/StringCreate'), StringGetOwnProperty: require('./2018/StringGetOwnProperty'), SymbolDescriptiveString: require('./2018/SymbolDescriptiveString'), TestIntegrityLevel: require('./2018/TestIntegrityLevel'), thisBooleanValue: require('./2018/thisBooleanValue'), thisNumberValue: require('./2018/thisNumberValue'), thisStringValue: require('./2018/thisStringValue'), thisSymbolValue: require('./2018/thisSymbolValue'), thisTimeValue: require('./2018/thisTimeValue'), ThrowCompletion: require('./2018/ThrowCompletion'), TimeClip: require('./2018/TimeClip'), TimeFromYear: require('./2018/TimeFromYear'), TimeString: require('./2018/TimeString'), TimeWithinDay: require('./2018/TimeWithinDay'), TimeZoneString: require('./2018/TimeZoneString'), ToBoolean: require('./2018/ToBoolean'), ToDateString: require('./2018/ToDateString'), ToIndex: require('./2018/ToIndex'), ToInt16: require('./2018/ToInt16'), ToInt32: require('./2018/ToInt32'), ToInt8: require('./2018/ToInt8'), ToInteger: require('./2018/ToInteger'), ToLength: require('./2018/ToLength'), ToNumber: require('./2018/ToNumber'), ToObject: require('./2018/ToObject'), ToPrimitive: require('./2018/ToPrimitive'), ToPropertyDescriptor: require('./2018/ToPropertyDescriptor'), ToPropertyKey: require('./2018/ToPropertyKey'), ToString: require('./2018/ToString'), ToUint16: require('./2018/ToUint16'), ToUint32: require('./2018/ToUint32'), ToUint8: require('./2018/ToUint8'), ToUint8Clamp: require('./2018/ToUint8Clamp'), Type: require('./2018/Type'), TypedArrayCreate: require('./2018/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2018/TypedArraySpeciesCreate'), UnicodeEscape: require('./2018/UnicodeEscape'), UTF16Decode: require('./2018/UTF16Decode'), UTF16Encoding: require('./2018/UTF16Encoding'), ValidateAndApplyPropertyDescriptor: require('./2018/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2018/ValidateAtomicAccess'), ValidateTypedArray: require('./2018/ValidateTypedArray'), WeekDay: require('./2018/WeekDay'), WordCharacters: require('./2018/WordCharacters'), YearFromTime: require('./2018/YearFromTime') }; module.exports = ES2018; ljharb-es-abstract-babee05/es2019.js000066400000000000000000000211261516525472400172250ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/10.0/#sec-abstract-operations var ES2019 = { 'Abstract Equality Comparison': require('./2019/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2019/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2019/StrictEqualityComparison'), abs: require('./2019/abs'), AddEntriesFromIterable: require('./2019/AddEntriesFromIterable'), AdvanceStringIndex: require('./2019/AdvanceStringIndex'), ArrayCreate: require('./2019/ArrayCreate'), ArraySetLength: require('./2019/ArraySetLength'), ArraySpeciesCreate: require('./2019/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2019/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2019/AsyncIteratorClose'), Call: require('./2019/Call'), Canonicalize: require('./2019/Canonicalize'), CanonicalNumericIndexString: require('./2019/CanonicalNumericIndexString'), CharacterRange: require('./2019/CharacterRange'), CompletePropertyDescriptor: require('./2019/CompletePropertyDescriptor'), CompletionRecord: require('./2019/CompletionRecord'), CopyDataProperties: require('./2019/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2019/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2019/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2019/CreateDataPropertyOrThrow'), CreateHTML: require('./2019/CreateHTML'), CreateIterResultObject: require('./2019/CreateIterResultObject'), CreateListFromArrayLike: require('./2019/CreateListFromArrayLike'), CreateMethodProperty: require('./2019/CreateMethodProperty'), DateFromTime: require('./2019/DateFromTime'), DateString: require('./2019/DateString'), Day: require('./2019/Day'), DayFromYear: require('./2019/DayFromYear'), DaysInYear: require('./2019/DaysInYear'), DayWithinYear: require('./2019/DayWithinYear'), DefinePropertyOrThrow: require('./2019/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2019/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2019/DetachArrayBuffer'), EnumerableOwnPropertyNames: require('./2019/EnumerableOwnPropertyNames'), FlattenIntoArray: require('./2019/FlattenIntoArray'), floor: require('./2019/floor'), FromPropertyDescriptor: require('./2019/FromPropertyDescriptor'), Get: require('./2019/Get'), GetGlobalObject: require('./2019/GetGlobalObject'), GetIterator: require('./2019/GetIterator'), GetMethod: require('./2019/GetMethod'), GetOwnPropertyKeys: require('./2019/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2019/GetPrototypeFromConstructor'), GetSubstitution: require('./2019/GetSubstitution'), GetV: require('./2019/GetV'), GetValueFromBuffer: require('./2019/GetValueFromBuffer'), HasOwnProperty: require('./2019/HasOwnProperty'), HasProperty: require('./2019/HasProperty'), HourFromTime: require('./2019/HourFromTime'), InLeapYear: require('./2019/InLeapYear'), InstanceofOperator: require('./2019/InstanceofOperator'), IntegerIndexedElementGet: require('./2019/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2019/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2019/InternalizeJSONProperty'), Invoke: require('./2019/Invoke'), IsAccessorDescriptor: require('./2019/IsAccessorDescriptor'), IsArray: require('./2019/IsArray'), IsCallable: require('./2019/IsCallable'), IsCompatiblePropertyDescriptor: require('./2019/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2019/IsConcatSpreadable'), IsConstructor: require('./2019/IsConstructor'), IsDataDescriptor: require('./2019/IsDataDescriptor'), IsDetachedBuffer: require('./2019/IsDetachedBuffer'), IsExtensible: require('./2019/IsExtensible'), IsGenericDescriptor: require('./2019/IsGenericDescriptor'), IsInteger: require('./2019/IsInteger'), IsPromise: require('./2019/IsPromise'), IsPropertyKey: require('./2019/IsPropertyKey'), IsRegExp: require('./2019/IsRegExp'), IsSharedArrayBuffer: require('./2019/IsSharedArrayBuffer'), IsStringPrefix: require('./2019/IsStringPrefix'), IsWordChar: require('./2019/IsWordChar'), IterableToList: require('./2019/IterableToList'), IteratorClose: require('./2019/IteratorClose'), IteratorComplete: require('./2019/IteratorComplete'), IteratorNext: require('./2019/IteratorNext'), IteratorStep: require('./2019/IteratorStep'), IteratorValue: require('./2019/IteratorValue'), MakeDate: require('./2019/MakeDate'), MakeDay: require('./2019/MakeDay'), MakeTime: require('./2019/MakeTime'), max: require('./2019/max'), min: require('./2019/min'), MinFromTime: require('./2019/MinFromTime'), modulo: require('./2019/modulo'), MonthFromTime: require('./2019/MonthFromTime'), msFromTime: require('./2019/msFromTime'), NewPromiseCapability: require('./2019/NewPromiseCapability'), NormalCompletion: require('./2019/NormalCompletion'), NumberToRawBytes: require('./2019/NumberToRawBytes'), NumberToString: require('./2019/NumberToString'), ObjectCreate: require('./2019/ObjectCreate'), ObjectDefineProperties: require('./2019/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2019/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2019/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2019/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2019/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2019/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2019/OrdinaryHasProperty'), OrdinarySetPrototypeOf: require('./2019/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2019/OrdinaryToPrimitive'), PromiseResolve: require('./2019/PromiseResolve'), QuoteJSONString: require('./2019/QuoteJSONString'), RawBytesToNumber: require('./2019/RawBytesToNumber'), RegExpCreate: require('./2019/RegExpCreate'), RegExpExec: require('./2019/RegExpExec'), RequireObjectCoercible: require('./2019/RequireObjectCoercible'), SameValue: require('./2019/SameValue'), SameValueNonNumber: require('./2019/SameValueNonNumber'), SameValueZero: require('./2019/SameValueZero'), SecFromTime: require('./2019/SecFromTime'), Set: require('./2019/Set'), SetFunctionLength: require('./2019/SetFunctionLength'), SetFunctionName: require('./2019/SetFunctionName'), SetIntegrityLevel: require('./2019/SetIntegrityLevel'), SetValueInBuffer: require('./2019/SetValueInBuffer'), SpeciesConstructor: require('./2019/SpeciesConstructor'), SplitMatch: require('./2019/SplitMatch'), StringCreate: require('./2019/StringCreate'), StringGetOwnProperty: require('./2019/StringGetOwnProperty'), SymbolDescriptiveString: require('./2019/SymbolDescriptiveString'), TestIntegrityLevel: require('./2019/TestIntegrityLevel'), thisBooleanValue: require('./2019/thisBooleanValue'), thisNumberValue: require('./2019/thisNumberValue'), thisStringValue: require('./2019/thisStringValue'), thisSymbolValue: require('./2019/thisSymbolValue'), thisTimeValue: require('./2019/thisTimeValue'), ThrowCompletion: require('./2019/ThrowCompletion'), TimeClip: require('./2019/TimeClip'), TimeFromYear: require('./2019/TimeFromYear'), TimeString: require('./2019/TimeString'), TimeWithinDay: require('./2019/TimeWithinDay'), TimeZoneString: require('./2019/TimeZoneString'), ToBoolean: require('./2019/ToBoolean'), ToDateString: require('./2019/ToDateString'), ToIndex: require('./2019/ToIndex'), ToInt16: require('./2019/ToInt16'), ToInt32: require('./2019/ToInt32'), ToInt8: require('./2019/ToInt8'), ToInteger: require('./2019/ToInteger'), ToLength: require('./2019/ToLength'), ToNumber: require('./2019/ToNumber'), ToObject: require('./2019/ToObject'), ToPrimitive: require('./2019/ToPrimitive'), ToPropertyDescriptor: require('./2019/ToPropertyDescriptor'), ToPropertyKey: require('./2019/ToPropertyKey'), ToString: require('./2019/ToString'), ToUint16: require('./2019/ToUint16'), ToUint32: require('./2019/ToUint32'), ToUint8: require('./2019/ToUint8'), ToUint8Clamp: require('./2019/ToUint8Clamp'), TrimString: require('./2019/TrimString'), Type: require('./2019/Type'), TypedArrayCreate: require('./2019/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2019/TypedArraySpeciesCreate'), UnicodeEscape: require('./2019/UnicodeEscape'), UTF16Decode: require('./2019/UTF16Decode'), UTF16Encoding: require('./2019/UTF16Encoding'), ValidateAndApplyPropertyDescriptor: require('./2019/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2019/ValidateAtomicAccess'), ValidateTypedArray: require('./2019/ValidateTypedArray'), WeekDay: require('./2019/WeekDay'), WordCharacters: require('./2019/WordCharacters'), YearFromTime: require('./2019/YearFromTime') }; module.exports = ES2019; ljharb-es-abstract-babee05/es2020.js000066400000000000000000000235361516525472400172240ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/11.0/#sec-abstract-operations var ES2020 = { 'Abstract Equality Comparison': require('./2020/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2020/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2020/StrictEqualityComparison'), abs: require('./2020/abs'), AddEntriesFromIterable: require('./2020/AddEntriesFromIterable'), AdvanceStringIndex: require('./2020/AdvanceStringIndex'), ArrayCreate: require('./2020/ArrayCreate'), ArraySetLength: require('./2020/ArraySetLength'), ArraySpeciesCreate: require('./2020/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2020/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2020/AsyncIteratorClose'), BigInt: require('./2020/BigInt'), BigIntBitwiseOp: require('./2020/BigIntBitwiseOp'), BinaryAnd: require('./2020/BinaryAnd'), BinaryOr: require('./2020/BinaryOr'), BinaryXor: require('./2020/BinaryXor'), Call: require('./2020/Call'), Canonicalize: require('./2020/Canonicalize'), CanonicalNumericIndexString: require('./2020/CanonicalNumericIndexString'), CharacterRange: require('./2020/CharacterRange'), CodePointAt: require('./2020/CodePointAt'), CompletePropertyDescriptor: require('./2020/CompletePropertyDescriptor'), CompletionRecord: require('./2020/CompletionRecord'), CopyDataProperties: require('./2020/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2020/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2020/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2020/CreateDataPropertyOrThrow'), CreateHTML: require('./2020/CreateHTML'), CreateIterResultObject: require('./2020/CreateIterResultObject'), CreateListFromArrayLike: require('./2020/CreateListFromArrayLike'), CreateMethodProperty: require('./2020/CreateMethodProperty'), CreateRegExpStringIterator: require('./2020/CreateRegExpStringIterator'), DateFromTime: require('./2020/DateFromTime'), DateString: require('./2020/DateString'), Day: require('./2020/Day'), DayFromYear: require('./2020/DayFromYear'), DaysInYear: require('./2020/DaysInYear'), DayWithinYear: require('./2020/DayWithinYear'), DefinePropertyOrThrow: require('./2020/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2020/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2020/DetachArrayBuffer'), EnumerableOwnPropertyNames: require('./2020/EnumerableOwnPropertyNames'), FlattenIntoArray: require('./2020/FlattenIntoArray'), floor: require('./2020/floor'), FromPropertyDescriptor: require('./2020/FromPropertyDescriptor'), Get: require('./2020/Get'), GetGlobalObject: require('./2020/GetGlobalObject'), GetIterator: require('./2020/GetIterator'), GetMethod: require('./2020/GetMethod'), GetOwnPropertyKeys: require('./2020/GetOwnPropertyKeys'), GetPrototypeFromConstructor: require('./2020/GetPrototypeFromConstructor'), GetSubstitution: require('./2020/GetSubstitution'), GetV: require('./2020/GetV'), GetValueFromBuffer: require('./2020/GetValueFromBuffer'), HasOwnProperty: require('./2020/HasOwnProperty'), HasProperty: require('./2020/HasProperty'), HourFromTime: require('./2020/HourFromTime'), InLeapYear: require('./2020/InLeapYear'), InstanceofOperator: require('./2020/InstanceofOperator'), IntegerIndexedElementGet: require('./2020/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2020/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2020/InternalizeJSONProperty'), Invoke: require('./2020/Invoke'), IsAccessorDescriptor: require('./2020/IsAccessorDescriptor'), IsArray: require('./2020/IsArray'), IsBigIntElementType: require('./2020/IsBigIntElementType'), IsCallable: require('./2020/IsCallable'), IsCompatiblePropertyDescriptor: require('./2020/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2020/IsConcatSpreadable'), IsConstructor: require('./2020/IsConstructor'), IsDataDescriptor: require('./2020/IsDataDescriptor'), IsDetachedBuffer: require('./2020/IsDetachedBuffer'), IsExtensible: require('./2020/IsExtensible'), IsGenericDescriptor: require('./2020/IsGenericDescriptor'), IsInteger: require('./2020/IsInteger'), IsNonNegativeInteger: require('./2020/IsNonNegativeInteger'), IsNoTearConfiguration: require('./2020/IsNoTearConfiguration'), IsPromise: require('./2020/IsPromise'), IsPropertyKey: require('./2020/IsPropertyKey'), IsRegExp: require('./2020/IsRegExp'), IsSharedArrayBuffer: require('./2020/IsSharedArrayBuffer'), IsStringPrefix: require('./2020/IsStringPrefix'), IsUnclampedIntegerElementType: require('./2020/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2020/IsUnsignedElementType'), IsValidIntegerIndex: require('./2020/IsValidIntegerIndex'), IsWordChar: require('./2020/IsWordChar'), IterableToList: require('./2020/IterableToList'), IteratorClose: require('./2020/IteratorClose'), IteratorComplete: require('./2020/IteratorComplete'), IteratorNext: require('./2020/IteratorNext'), IteratorStep: require('./2020/IteratorStep'), IteratorValue: require('./2020/IteratorValue'), LengthOfArrayLike: require('./2020/LengthOfArrayLike'), MakeDate: require('./2020/MakeDate'), MakeDay: require('./2020/MakeDay'), MakeTime: require('./2020/MakeTime'), max: require('./2020/max'), min: require('./2020/min'), MinFromTime: require('./2020/MinFromTime'), modulo: require('./2020/modulo'), MonthFromTime: require('./2020/MonthFromTime'), msFromTime: require('./2020/msFromTime'), NewPromiseCapability: require('./2020/NewPromiseCapability'), NormalCompletion: require('./2020/NormalCompletion'), Number: require('./2020/Number'), NumberBitwiseOp: require('./2020/NumberBitwiseOp'), NumberToBigInt: require('./2020/NumberToBigInt'), NumericToRawBytes: require('./2020/NumericToRawBytes'), ObjectDefineProperties: require('./2020/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2020/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2020/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2020/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2020/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2020/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2020/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2020/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2020/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2020/OrdinaryToPrimitive'), PromiseResolve: require('./2020/PromiseResolve'), QuoteJSONString: require('./2020/QuoteJSONString'), RawBytesToNumeric: require('./2020/RawBytesToNumeric'), RegExpCreate: require('./2020/RegExpCreate'), RegExpExec: require('./2020/RegExpExec'), RequireObjectCoercible: require('./2020/RequireObjectCoercible'), SameValue: require('./2020/SameValue'), SameValueNonNumeric: require('./2020/SameValueNonNumeric'), SameValueZero: require('./2020/SameValueZero'), SecFromTime: require('./2020/SecFromTime'), Set: require('./2020/Set'), SetFunctionLength: require('./2020/SetFunctionLength'), SetFunctionName: require('./2020/SetFunctionName'), SetIntegrityLevel: require('./2020/SetIntegrityLevel'), SetValueInBuffer: require('./2020/SetValueInBuffer'), SpeciesConstructor: require('./2020/SpeciesConstructor'), SplitMatch: require('./2020/SplitMatch'), StringCreate: require('./2020/StringCreate'), StringGetOwnProperty: require('./2020/StringGetOwnProperty'), StringPad: require('./2020/StringPad'), StringToBigInt: require('./2020/StringToBigInt'), SymbolDescriptiveString: require('./2020/SymbolDescriptiveString'), TestIntegrityLevel: require('./2020/TestIntegrityLevel'), thisBigIntValue: require('./2020/thisBigIntValue'), thisBooleanValue: require('./2020/thisBooleanValue'), thisNumberValue: require('./2020/thisNumberValue'), thisStringValue: require('./2020/thisStringValue'), thisSymbolValue: require('./2020/thisSymbolValue'), thisTimeValue: require('./2020/thisTimeValue'), ThrowCompletion: require('./2020/ThrowCompletion'), TimeClip: require('./2020/TimeClip'), TimeFromYear: require('./2020/TimeFromYear'), TimeString: require('./2020/TimeString'), TimeWithinDay: require('./2020/TimeWithinDay'), TimeZoneString: require('./2020/TimeZoneString'), ToBigInt: require('./2020/ToBigInt'), ToBigInt64: require('./2020/ToBigInt64'), ToBigUint64: require('./2020/ToBigUint64'), ToBoolean: require('./2020/ToBoolean'), ToDateString: require('./2020/ToDateString'), ToIndex: require('./2020/ToIndex'), ToInt16: require('./2020/ToInt16'), ToInt32: require('./2020/ToInt32'), ToInt8: require('./2020/ToInt8'), ToInteger: require('./2020/ToInteger'), ToLength: require('./2020/ToLength'), ToNumber: require('./2020/ToNumber'), ToNumeric: require('./2020/ToNumeric'), ToObject: require('./2020/ToObject'), ToPrimitive: require('./2020/ToPrimitive'), ToPropertyDescriptor: require('./2020/ToPropertyDescriptor'), ToPropertyKey: require('./2020/ToPropertyKey'), ToString: require('./2020/ToString'), ToUint16: require('./2020/ToUint16'), ToUint32: require('./2020/ToUint32'), ToUint8: require('./2020/ToUint8'), ToUint8Clamp: require('./2020/ToUint8Clamp'), TrimString: require('./2020/TrimString'), Type: require('./2020/Type'), TypedArrayCreate: require('./2020/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2020/TypedArraySpeciesCreate'), UnicodeEscape: require('./2020/UnicodeEscape'), UTF16DecodeString: require('./2020/UTF16DecodeString'), UTF16DecodeSurrogatePair: require('./2020/UTF16DecodeSurrogatePair'), UTF16Encoding: require('./2020/UTF16Encoding'), ValidateAndApplyPropertyDescriptor: require('./2020/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2020/ValidateAtomicAccess'), ValidateTypedArray: require('./2020/ValidateTypedArray'), WeekDay: require('./2020/WeekDay'), WordCharacters: require('./2020/WordCharacters'), YearFromTime: require('./2020/YearFromTime') }; module.exports = ES2020; ljharb-es-abstract-babee05/es2021.js000066400000000000000000000253041516525472400172200ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/12.0/#sec-abstract-operations var ES2021 = { 'Abstract Equality Comparison': require('./2021/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./2021/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./2021/StrictEqualityComparison'), abs: require('./2021/abs'), AddEntriesFromIterable: require('./2021/AddEntriesFromIterable'), AddToKeptObjects: require('./2021/AddToKeptObjects'), AdvanceStringIndex: require('./2021/AdvanceStringIndex'), ApplyStringOrNumericBinaryOperator: require('./2021/ApplyStringOrNumericBinaryOperator'), ArrayCreate: require('./2021/ArrayCreate'), ArraySetLength: require('./2021/ArraySetLength'), ArraySpeciesCreate: require('./2021/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2021/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2021/AsyncIteratorClose'), BigInt: require('./2021/BigInt'), BigIntBitwiseOp: require('./2021/BigIntBitwiseOp'), BinaryAnd: require('./2021/BinaryAnd'), BinaryOr: require('./2021/BinaryOr'), BinaryXor: require('./2021/BinaryXor'), ByteListBitwiseOp: require('./2021/ByteListBitwiseOp'), ByteListEqual: require('./2021/ByteListEqual'), Call: require('./2021/Call'), Canonicalize: require('./2021/Canonicalize'), CanonicalNumericIndexString: require('./2021/CanonicalNumericIndexString'), CharacterRange: require('./2021/CharacterRange'), clamp: require('./2021/clamp'), ClearKeptObjects: require('./2021/ClearKeptObjects'), CloneArrayBuffer: require('./2021/CloneArrayBuffer'), CodePointAt: require('./2021/CodePointAt'), CodePointsToString: require('./2021/CodePointsToString'), CompletePropertyDescriptor: require('./2021/CompletePropertyDescriptor'), CompletionRecord: require('./2021/CompletionRecord'), CopyDataProperties: require('./2021/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2021/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2021/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2021/CreateDataPropertyOrThrow'), CreateHTML: require('./2021/CreateHTML'), CreateIterResultObject: require('./2021/CreateIterResultObject'), CreateListFromArrayLike: require('./2021/CreateListFromArrayLike'), CreateMethodProperty: require('./2021/CreateMethodProperty'), CreateRegExpStringIterator: require('./2021/CreateRegExpStringIterator'), DateFromTime: require('./2021/DateFromTime'), DateString: require('./2021/DateString'), Day: require('./2021/Day'), DayFromYear: require('./2021/DayFromYear'), DaysInYear: require('./2021/DaysInYear'), DayWithinYear: require('./2021/DayWithinYear'), DefinePropertyOrThrow: require('./2021/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2021/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2021/DetachArrayBuffer'), EnumerableOwnPropertyNames: require('./2021/EnumerableOwnPropertyNames'), FlattenIntoArray: require('./2021/FlattenIntoArray'), floor: require('./2021/floor'), FromPropertyDescriptor: require('./2021/FromPropertyDescriptor'), Get: require('./2021/Get'), GetGlobalObject: require('./2021/GetGlobalObject'), GetIterator: require('./2021/GetIterator'), GetMethod: require('./2021/GetMethod'), GetOwnPropertyKeys: require('./2021/GetOwnPropertyKeys'), GetPromiseResolve: require('./2021/GetPromiseResolve'), GetPrototypeFromConstructor: require('./2021/GetPrototypeFromConstructor'), GetSubstitution: require('./2021/GetSubstitution'), GetV: require('./2021/GetV'), GetValueFromBuffer: require('./2021/GetValueFromBuffer'), HasOwnProperty: require('./2021/HasOwnProperty'), HasProperty: require('./2021/HasProperty'), HourFromTime: require('./2021/HourFromTime'), InLeapYear: require('./2021/InLeapYear'), InstanceofOperator: require('./2021/InstanceofOperator'), IntegerIndexedElementGet: require('./2021/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2021/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2021/InternalizeJSONProperty'), Invoke: require('./2021/Invoke'), IsAccessorDescriptor: require('./2021/IsAccessorDescriptor'), IsArray: require('./2021/IsArray'), IsBigIntElementType: require('./2021/IsBigIntElementType'), IsCallable: require('./2021/IsCallable'), IsCompatiblePropertyDescriptor: require('./2021/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2021/IsConcatSpreadable'), IsConstructor: require('./2021/IsConstructor'), IsDataDescriptor: require('./2021/IsDataDescriptor'), IsDetachedBuffer: require('./2021/IsDetachedBuffer'), IsExtensible: require('./2021/IsExtensible'), IsGenericDescriptor: require('./2021/IsGenericDescriptor'), IsIntegralNumber: require('./2021/IsIntegralNumber'), IsNoTearConfiguration: require('./2021/IsNoTearConfiguration'), IsPromise: require('./2021/IsPromise'), IsPropertyKey: require('./2021/IsPropertyKey'), IsRegExp: require('./2021/IsRegExp'), IsSharedArrayBuffer: require('./2021/IsSharedArrayBuffer'), IsStringPrefix: require('./2021/IsStringPrefix'), IsUnclampedIntegerElementType: require('./2021/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2021/IsUnsignedElementType'), IsValidIntegerIndex: require('./2021/IsValidIntegerIndex'), IsWordChar: require('./2021/IsWordChar'), IterableToList: require('./2021/IterableToList'), IteratorClose: require('./2021/IteratorClose'), IteratorComplete: require('./2021/IteratorComplete'), IteratorNext: require('./2021/IteratorNext'), IteratorStep: require('./2021/IteratorStep'), IteratorValue: require('./2021/IteratorValue'), LengthOfArrayLike: require('./2021/LengthOfArrayLike'), MakeDate: require('./2021/MakeDate'), MakeDay: require('./2021/MakeDay'), MakeTime: require('./2021/MakeTime'), max: require('./2021/max'), min: require('./2021/min'), MinFromTime: require('./2021/MinFromTime'), modulo: require('./2021/modulo'), MonthFromTime: require('./2021/MonthFromTime'), msFromTime: require('./2021/msFromTime'), NewPromiseCapability: require('./2021/NewPromiseCapability'), NormalCompletion: require('./2021/NormalCompletion'), Number: require('./2021/Number'), NumberBitwiseOp: require('./2021/NumberBitwiseOp'), NumberToBigInt: require('./2021/NumberToBigInt'), NumericToRawBytes: require('./2021/NumericToRawBytes'), ObjectDefineProperties: require('./2021/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2021/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2021/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2021/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2021/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2021/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2021/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2021/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2021/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2021/OrdinaryToPrimitive'), PromiseResolve: require('./2021/PromiseResolve'), QuoteJSONString: require('./2021/QuoteJSONString'), RawBytesToNumeric: require('./2021/RawBytesToNumeric'), RegExpCreate: require('./2021/RegExpCreate'), RegExpExec: require('./2021/RegExpExec'), RequireObjectCoercible: require('./2021/RequireObjectCoercible'), SameValue: require('./2021/SameValue'), SameValueNonNumeric: require('./2021/SameValueNonNumeric'), SameValueZero: require('./2021/SameValueZero'), SecFromTime: require('./2021/SecFromTime'), Set: require('./2021/Set'), SetFunctionLength: require('./2021/SetFunctionLength'), SetFunctionName: require('./2021/SetFunctionName'), SetIntegrityLevel: require('./2021/SetIntegrityLevel'), SetTypedArrayFromArrayLike: require('./2021/SetTypedArrayFromArrayLike'), SetTypedArrayFromTypedArray: require('./2021/SetTypedArrayFromTypedArray'), SetValueInBuffer: require('./2021/SetValueInBuffer'), SpeciesConstructor: require('./2021/SpeciesConstructor'), SplitMatch: require('./2021/SplitMatch'), StringCreate: require('./2021/StringCreate'), StringGetOwnProperty: require('./2021/StringGetOwnProperty'), StringIndexOf: require('./2021/StringIndexOf'), StringPad: require('./2021/StringPad'), StringToBigInt: require('./2021/StringToBigInt'), StringToCodePoints: require('./2021/StringToCodePoints'), substring: require('./2021/substring'), SymbolDescriptiveString: require('./2021/SymbolDescriptiveString'), TestIntegrityLevel: require('./2021/TestIntegrityLevel'), thisBigIntValue: require('./2021/thisBigIntValue'), thisBooleanValue: require('./2021/thisBooleanValue'), thisNumberValue: require('./2021/thisNumberValue'), thisStringValue: require('./2021/thisStringValue'), thisSymbolValue: require('./2021/thisSymbolValue'), thisTimeValue: require('./2021/thisTimeValue'), ThrowCompletion: require('./2021/ThrowCompletion'), TimeClip: require('./2021/TimeClip'), TimeFromYear: require('./2021/TimeFromYear'), TimeString: require('./2021/TimeString'), TimeWithinDay: require('./2021/TimeWithinDay'), TimeZoneString: require('./2021/TimeZoneString'), ToBigInt: require('./2021/ToBigInt'), ToBigInt64: require('./2021/ToBigInt64'), ToBigUint64: require('./2021/ToBigUint64'), ToBoolean: require('./2021/ToBoolean'), ToDateString: require('./2021/ToDateString'), ToIndex: require('./2021/ToIndex'), ToInt16: require('./2021/ToInt16'), ToInt32: require('./2021/ToInt32'), ToInt8: require('./2021/ToInt8'), ToIntegerOrInfinity: require('./2021/ToIntegerOrInfinity'), ToLength: require('./2021/ToLength'), ToNumber: require('./2021/ToNumber'), ToNumeric: require('./2021/ToNumeric'), ToObject: require('./2021/ToObject'), ToPrimitive: require('./2021/ToPrimitive'), ToPropertyDescriptor: require('./2021/ToPropertyDescriptor'), ToPropertyKey: require('./2021/ToPropertyKey'), ToString: require('./2021/ToString'), ToUint16: require('./2021/ToUint16'), ToUint32: require('./2021/ToUint32'), ToUint8: require('./2021/ToUint8'), ToUint8Clamp: require('./2021/ToUint8Clamp'), TrimString: require('./2021/TrimString'), Type: require('./2021/Type'), TypedArrayCreate: require('./2021/TypedArrayCreate'), TypedArraySpeciesCreate: require('./2021/TypedArraySpeciesCreate'), UnicodeEscape: require('./2021/UnicodeEscape'), UTF16EncodeCodePoint: require('./2021/UTF16EncodeCodePoint'), UTF16SurrogatePairToCodePoint: require('./2021/UTF16SurrogatePairToCodePoint'), ValidateAndApplyPropertyDescriptor: require('./2021/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2021/ValidateAtomicAccess'), ValidateIntegerTypedArray: require('./2021/ValidateIntegerTypedArray'), ValidateTypedArray: require('./2021/ValidateTypedArray'), WeakRefDeref: require('./2021/WeakRefDeref'), WeekDay: require('./2021/WeekDay'), WordCharacters: require('./2021/WordCharacters'), YearFromTime: require('./2021/YearFromTime') }; module.exports = ES2021; ljharb-es-abstract-babee05/es2022.js000066400000000000000000000267051516525472400172270ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/13.0/#sec-abstract-operations var ES2022 = { abs: require('./2022/abs'), AddEntriesFromIterable: require('./2022/AddEntriesFromIterable'), AddToKeptObjects: require('./2022/AddToKeptObjects'), AdvanceStringIndex: require('./2022/AdvanceStringIndex'), ApplyStringOrNumericBinaryOperator: require('./2022/ApplyStringOrNumericBinaryOperator'), ArrayCreate: require('./2022/ArrayCreate'), ArraySetLength: require('./2022/ArraySetLength'), ArraySpeciesCreate: require('./2022/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2022/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2022/AsyncIteratorClose'), BigInt: require('./2022/BigInt'), BigIntBitwiseOp: require('./2022/BigIntBitwiseOp'), BinaryAnd: require('./2022/BinaryAnd'), BinaryOr: require('./2022/BinaryOr'), BinaryXor: require('./2022/BinaryXor'), ByteListBitwiseOp: require('./2022/ByteListBitwiseOp'), ByteListEqual: require('./2022/ByteListEqual'), Call: require('./2022/Call'), Canonicalize: require('./2022/Canonicalize'), CanonicalNumericIndexString: require('./2022/CanonicalNumericIndexString'), CharacterRange: require('./2022/CharacterRange'), clamp: require('./2022/clamp'), ClearKeptObjects: require('./2022/ClearKeptObjects'), CloneArrayBuffer: require('./2022/CloneArrayBuffer'), CodePointAt: require('./2022/CodePointAt'), CodePointsToString: require('./2022/CodePointsToString'), CompletePropertyDescriptor: require('./2022/CompletePropertyDescriptor'), CompletionRecord: require('./2022/CompletionRecord'), CopyDataProperties: require('./2022/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2022/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2022/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2022/CreateDataPropertyOrThrow'), CreateHTML: require('./2022/CreateHTML'), CreateIterResultObject: require('./2022/CreateIterResultObject'), CreateListFromArrayLike: require('./2022/CreateListFromArrayLike'), CreateMethodProperty: require('./2022/CreateMethodProperty'), CreateNonEnumerableDataPropertyOrThrow: require('./2022/CreateNonEnumerableDataPropertyOrThrow'), CreateRegExpStringIterator: require('./2022/CreateRegExpStringIterator'), DateFromTime: require('./2022/DateFromTime'), DateString: require('./2022/DateString'), Day: require('./2022/Day'), DayFromYear: require('./2022/DayFromYear'), DaysInYear: require('./2022/DaysInYear'), DayWithinYear: require('./2022/DayWithinYear'), DefineMethodProperty: require('./2022/DefineMethodProperty'), DefinePropertyOrThrow: require('./2022/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2022/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2022/DetachArrayBuffer'), EnumerableOwnPropertyNames: require('./2022/EnumerableOwnPropertyNames'), FlattenIntoArray: require('./2022/FlattenIntoArray'), floor: require('./2022/floor'), FromPropertyDescriptor: require('./2022/FromPropertyDescriptor'), Get: require('./2022/Get'), GetGlobalObject: require('./2022/GetGlobalObject'), GetIterator: require('./2022/GetIterator'), GetMatchIndexPair: require('./2022/GetMatchIndexPair'), GetMatchString: require('./2022/GetMatchString'), GetMethod: require('./2022/GetMethod'), GetOwnPropertyKeys: require('./2022/GetOwnPropertyKeys'), GetPromiseResolve: require('./2022/GetPromiseResolve'), GetPrototypeFromConstructor: require('./2022/GetPrototypeFromConstructor'), GetStringIndex: require('./2022/GetStringIndex'), GetSubstitution: require('./2022/GetSubstitution'), GetV: require('./2022/GetV'), GetValueFromBuffer: require('./2022/GetValueFromBuffer'), HasOwnProperty: require('./2022/HasOwnProperty'), HasProperty: require('./2022/HasProperty'), HourFromTime: require('./2022/HourFromTime'), InLeapYear: require('./2022/InLeapYear'), InstallErrorCause: require('./2022/InstallErrorCause'), InstanceofOperator: require('./2022/InstanceofOperator'), IntegerIndexedElementGet: require('./2022/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2022/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2022/InternalizeJSONProperty'), Invoke: require('./2022/Invoke'), IsAccessorDescriptor: require('./2022/IsAccessorDescriptor'), IsArray: require('./2022/IsArray'), IsBigIntElementType: require('./2022/IsBigIntElementType'), IsCallable: require('./2022/IsCallable'), IsCompatiblePropertyDescriptor: require('./2022/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2022/IsConcatSpreadable'), IsConstructor: require('./2022/IsConstructor'), IsDataDescriptor: require('./2022/IsDataDescriptor'), IsDetachedBuffer: require('./2022/IsDetachedBuffer'), IsExtensible: require('./2022/IsExtensible'), IsGenericDescriptor: require('./2022/IsGenericDescriptor'), IsIntegralNumber: require('./2022/IsIntegralNumber'), IsLessThan: require('./2022/IsLessThan'), IsLooselyEqual: require('./2022/IsLooselyEqual'), IsNoTearConfiguration: require('./2022/IsNoTearConfiguration'), IsPromise: require('./2022/IsPromise'), IsPropertyKey: require('./2022/IsPropertyKey'), IsRegExp: require('./2022/IsRegExp'), IsSharedArrayBuffer: require('./2022/IsSharedArrayBuffer'), IsStrictlyEqual: require('./2022/IsStrictlyEqual'), IsStringPrefix: require('./2022/IsStringPrefix'), IsStringWellFormedUnicode: require('./2022/IsStringWellFormedUnicode'), IsUnclampedIntegerElementType: require('./2022/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2022/IsUnsignedElementType'), IsValidIntegerIndex: require('./2022/IsValidIntegerIndex'), IsWordChar: require('./2022/IsWordChar'), IterableToList: require('./2022/IterableToList'), IteratorClose: require('./2022/IteratorClose'), IteratorComplete: require('./2022/IteratorComplete'), IteratorNext: require('./2022/IteratorNext'), IteratorStep: require('./2022/IteratorStep'), IteratorValue: require('./2022/IteratorValue'), LengthOfArrayLike: require('./2022/LengthOfArrayLike'), MakeDate: require('./2022/MakeDate'), MakeDay: require('./2022/MakeDay'), MakeMatchIndicesIndexPairArray: require('./2022/MakeMatchIndicesIndexPairArray'), MakeTime: require('./2022/MakeTime'), max: require('./2022/max'), min: require('./2022/min'), MinFromTime: require('./2022/MinFromTime'), modulo: require('./2022/modulo'), MonthFromTime: require('./2022/MonthFromTime'), msFromTime: require('./2022/msFromTime'), NewPromiseCapability: require('./2022/NewPromiseCapability'), NormalCompletion: require('./2022/NormalCompletion'), Number: require('./2022/Number'), NumberBitwiseOp: require('./2022/NumberBitwiseOp'), NumberToBigInt: require('./2022/NumberToBigInt'), NumericToRawBytes: require('./2022/NumericToRawBytes'), ObjectDefineProperties: require('./2022/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2022/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2022/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2022/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2022/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2022/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2022/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2022/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2022/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2022/OrdinaryToPrimitive'), PromiseResolve: require('./2022/PromiseResolve'), QuoteJSONString: require('./2022/QuoteJSONString'), RawBytesToNumeric: require('./2022/RawBytesToNumeric'), RegExpCreate: require('./2022/RegExpCreate'), RegExpExec: require('./2022/RegExpExec'), RegExpHasFlag: require('./2022/RegExpHasFlag'), RequireObjectCoercible: require('./2022/RequireObjectCoercible'), SameValue: require('./2022/SameValue'), SameValueNonNumeric: require('./2022/SameValueNonNumeric'), SameValueZero: require('./2022/SameValueZero'), SecFromTime: require('./2022/SecFromTime'), Set: require('./2022/Set'), SetFunctionLength: require('./2022/SetFunctionLength'), SetFunctionName: require('./2022/SetFunctionName'), SetIntegrityLevel: require('./2022/SetIntegrityLevel'), SetTypedArrayFromArrayLike: require('./2022/SetTypedArrayFromArrayLike'), SetTypedArrayFromTypedArray: require('./2022/SetTypedArrayFromTypedArray'), SetValueInBuffer: require('./2022/SetValueInBuffer'), SortIndexedProperties: require('./2022/SortIndexedProperties'), SpeciesConstructor: require('./2022/SpeciesConstructor'), StringCreate: require('./2022/StringCreate'), StringGetOwnProperty: require('./2022/StringGetOwnProperty'), StringIndexOf: require('./2022/StringIndexOf'), StringPad: require('./2022/StringPad'), StringToBigInt: require('./2022/StringToBigInt'), StringToCodePoints: require('./2022/StringToCodePoints'), StringToNumber: require('./2022/StringToNumber'), substring: require('./2022/substring'), SymbolDescriptiveString: require('./2022/SymbolDescriptiveString'), TestIntegrityLevel: require('./2022/TestIntegrityLevel'), thisBigIntValue: require('./2022/thisBigIntValue'), thisBooleanValue: require('./2022/thisBooleanValue'), thisNumberValue: require('./2022/thisNumberValue'), thisStringValue: require('./2022/thisStringValue'), thisSymbolValue: require('./2022/thisSymbolValue'), thisTimeValue: require('./2022/thisTimeValue'), ThrowCompletion: require('./2022/ThrowCompletion'), TimeClip: require('./2022/TimeClip'), TimeFromYear: require('./2022/TimeFromYear'), TimeString: require('./2022/TimeString'), TimeWithinDay: require('./2022/TimeWithinDay'), TimeZoneString: require('./2022/TimeZoneString'), ToBigInt: require('./2022/ToBigInt'), ToBigInt64: require('./2022/ToBigInt64'), ToBigUint64: require('./2022/ToBigUint64'), ToBoolean: require('./2022/ToBoolean'), ToDateString: require('./2022/ToDateString'), ToIndex: require('./2022/ToIndex'), ToInt16: require('./2022/ToInt16'), ToInt32: require('./2022/ToInt32'), ToInt8: require('./2022/ToInt8'), ToIntegerOrInfinity: require('./2022/ToIntegerOrInfinity'), ToLength: require('./2022/ToLength'), ToNumber: require('./2022/ToNumber'), ToNumeric: require('./2022/ToNumeric'), ToObject: require('./2022/ToObject'), ToPrimitive: require('./2022/ToPrimitive'), ToPropertyDescriptor: require('./2022/ToPropertyDescriptor'), ToPropertyKey: require('./2022/ToPropertyKey'), ToString: require('./2022/ToString'), ToUint16: require('./2022/ToUint16'), ToUint32: require('./2022/ToUint32'), ToUint8: require('./2022/ToUint8'), ToUint8Clamp: require('./2022/ToUint8Clamp'), ToZeroPaddedDecimalString: require('./2022/ToZeroPaddedDecimalString'), TrimString: require('./2022/TrimString'), Type: require('./2022/Type'), TypedArrayCreate: require('./2022/TypedArrayCreate'), TypedArrayElementSize: require('./2022/TypedArrayElementSize'), TypedArrayElementType: require('./2022/TypedArrayElementType'), TypedArraySpeciesCreate: require('./2022/TypedArraySpeciesCreate'), UnicodeEscape: require('./2022/UnicodeEscape'), UTF16EncodeCodePoint: require('./2022/UTF16EncodeCodePoint'), UTF16SurrogatePairToCodePoint: require('./2022/UTF16SurrogatePairToCodePoint'), ValidateAndApplyPropertyDescriptor: require('./2022/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2022/ValidateAtomicAccess'), ValidateIntegerTypedArray: require('./2022/ValidateIntegerTypedArray'), ValidateTypedArray: require('./2022/ValidateTypedArray'), WeakRefDeref: require('./2022/WeakRefDeref'), WeekDay: require('./2022/WeekDay'), WordCharacters: require('./2022/WordCharacters'), YearFromTime: require('./2022/YearFromTime') }; module.exports = ES2022; ljharb-es-abstract-babee05/es2023.js000066400000000000000000000302371516525472400172230ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/14.0/#sec-abstract-operations var ES2023 = { abs: require('./2023/abs'), AddEntriesFromIterable: require('./2023/AddEntriesFromIterable'), AddToKeptObjects: require('./2023/AddToKeptObjects'), AdvanceStringIndex: require('./2023/AdvanceStringIndex'), ApplyStringOrNumericBinaryOperator: require('./2023/ApplyStringOrNumericBinaryOperator'), ArrayCreate: require('./2023/ArrayCreate'), ArraySetLength: require('./2023/ArraySetLength'), ArraySpeciesCreate: require('./2023/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2023/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2023/AsyncIteratorClose'), BigInt: require('./2023/BigInt'), BigIntBitwiseOp: require('./2023/BigIntBitwiseOp'), BinaryAnd: require('./2023/BinaryAnd'), BinaryOr: require('./2023/BinaryOr'), BinaryXor: require('./2023/BinaryXor'), ByteListBitwiseOp: require('./2023/ByteListBitwiseOp'), ByteListEqual: require('./2023/ByteListEqual'), Call: require('./2023/Call'), CanBeHeldWeakly: require('./2023/CanBeHeldWeakly'), Canonicalize: require('./2023/Canonicalize'), CanonicalNumericIndexString: require('./2023/CanonicalNumericIndexString'), CharacterRange: require('./2023/CharacterRange'), clamp: require('./2023/clamp'), ClearKeptObjects: require('./2023/ClearKeptObjects'), CloneArrayBuffer: require('./2023/CloneArrayBuffer'), CodePointAt: require('./2023/CodePointAt'), CodePointsToString: require('./2023/CodePointsToString'), CompareArrayElements: require('./2023/CompareArrayElements'), CompareTypedArrayElements: require('./2023/CompareTypedArrayElements'), CompletePropertyDescriptor: require('./2023/CompletePropertyDescriptor'), CompletionRecord: require('./2023/CompletionRecord'), CopyDataProperties: require('./2023/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2023/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2023/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2023/CreateDataPropertyOrThrow'), CreateHTML: require('./2023/CreateHTML'), CreateIterResultObject: require('./2023/CreateIterResultObject'), CreateListFromArrayLike: require('./2023/CreateListFromArrayLike'), CreateMethodProperty: require('./2023/CreateMethodProperty'), CreateNonEnumerableDataPropertyOrThrow: require('./2023/CreateNonEnumerableDataPropertyOrThrow'), CreateRegExpStringIterator: require('./2023/CreateRegExpStringIterator'), DateFromTime: require('./2023/DateFromTime'), DateString: require('./2023/DateString'), Day: require('./2023/Day'), DayFromYear: require('./2023/DayFromYear'), DaysInYear: require('./2023/DaysInYear'), DayWithinYear: require('./2023/DayWithinYear'), DefaultTimeZone: require('./2023/DefaultTimeZone'), DefineMethodProperty: require('./2023/DefineMethodProperty'), DefinePropertyOrThrow: require('./2023/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2023/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2023/DetachArrayBuffer'), EnumerableOwnProperties: require('./2023/EnumerableOwnProperties'), FindViaPredicate: require('./2023/FindViaPredicate'), FlattenIntoArray: require('./2023/FlattenIntoArray'), floor: require('./2023/floor'), FromPropertyDescriptor: require('./2023/FromPropertyDescriptor'), Get: require('./2023/Get'), GetGlobalObject: require('./2023/GetGlobalObject'), GetIterator: require('./2023/GetIterator'), GetIteratorFromMethod: require('./2023/GetIteratorFromMethod'), GetMatchIndexPair: require('./2023/GetMatchIndexPair'), GetMatchString: require('./2023/GetMatchString'), GetMethod: require('./2023/GetMethod'), GetNamedTimeZoneEpochNanoseconds: require('./2023/GetNamedTimeZoneEpochNanoseconds'), GetOwnPropertyKeys: require('./2023/GetOwnPropertyKeys'), GetPromiseResolve: require('./2023/GetPromiseResolve'), GetPrototypeFromConstructor: require('./2023/GetPrototypeFromConstructor'), GetStringIndex: require('./2023/GetStringIndex'), GetSubstitution: require('./2023/GetSubstitution'), GetUTCEpochNanoseconds: require('./2023/GetUTCEpochNanoseconds'), GetV: require('./2023/GetV'), GetValueFromBuffer: require('./2023/GetValueFromBuffer'), HasOwnProperty: require('./2023/HasOwnProperty'), HasProperty: require('./2023/HasProperty'), HourFromTime: require('./2023/HourFromTime'), InLeapYear: require('./2023/InLeapYear'), InstallErrorCause: require('./2023/InstallErrorCause'), InstanceofOperator: require('./2023/InstanceofOperator'), IntegerIndexedElementGet: require('./2023/IntegerIndexedElementGet'), IntegerIndexedElementSet: require('./2023/IntegerIndexedElementSet'), InternalizeJSONProperty: require('./2023/InternalizeJSONProperty'), Invoke: require('./2023/Invoke'), IsAccessorDescriptor: require('./2023/IsAccessorDescriptor'), IsArray: require('./2023/IsArray'), IsBigIntElementType: require('./2023/IsBigIntElementType'), IsCallable: require('./2023/IsCallable'), IsCompatiblePropertyDescriptor: require('./2023/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2023/IsConcatSpreadable'), IsConstructor: require('./2023/IsConstructor'), IsDataDescriptor: require('./2023/IsDataDescriptor'), IsDetachedBuffer: require('./2023/IsDetachedBuffer'), IsExtensible: require('./2023/IsExtensible'), IsGenericDescriptor: require('./2023/IsGenericDescriptor'), IsIntegralNumber: require('./2023/IsIntegralNumber'), IsLessThan: require('./2023/IsLessThan'), IsLooselyEqual: require('./2023/IsLooselyEqual'), IsNoTearConfiguration: require('./2023/IsNoTearConfiguration'), IsPromise: require('./2023/IsPromise'), IsPropertyKey: require('./2023/IsPropertyKey'), IsRegExp: require('./2023/IsRegExp'), IsSharedArrayBuffer: require('./2023/IsSharedArrayBuffer'), IsStrictlyEqual: require('./2023/IsStrictlyEqual'), IsStringWellFormedUnicode: require('./2023/IsStringWellFormedUnicode'), IsTimeZoneOffsetString: require('./2023/IsTimeZoneOffsetString'), IsUnclampedIntegerElementType: require('./2023/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2023/IsUnsignedElementType'), IsValidIntegerIndex: require('./2023/IsValidIntegerIndex'), IsWordChar: require('./2023/IsWordChar'), IteratorClose: require('./2023/IteratorClose'), IteratorComplete: require('./2023/IteratorComplete'), IteratorNext: require('./2023/IteratorNext'), IteratorStep: require('./2023/IteratorStep'), IteratorToList: require('./2023/IteratorToList'), IteratorValue: require('./2023/IteratorValue'), KeyForSymbol: require('./2023/KeyForSymbol'), LengthOfArrayLike: require('./2023/LengthOfArrayLike'), MakeDate: require('./2023/MakeDate'), MakeDay: require('./2023/MakeDay'), MakeMatchIndicesIndexPairArray: require('./2023/MakeMatchIndicesIndexPairArray'), MakeTime: require('./2023/MakeTime'), max: require('./2023/max'), min: require('./2023/min'), MinFromTime: require('./2023/MinFromTime'), modulo: require('./2023/modulo'), MonthFromTime: require('./2023/MonthFromTime'), msFromTime: require('./2023/msFromTime'), NewPromiseCapability: require('./2023/NewPromiseCapability'), NormalCompletion: require('./2023/NormalCompletion'), Number: require('./2023/Number'), NumberBitwiseOp: require('./2023/NumberBitwiseOp'), NumberToBigInt: require('./2023/NumberToBigInt'), NumericToRawBytes: require('./2023/NumericToRawBytes'), ObjectDefineProperties: require('./2023/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2023/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2023/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2023/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2023/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2023/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2023/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2023/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2023/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2023/OrdinaryToPrimitive'), ParseHexOctet: require('./2023/ParseHexOctet'), PromiseResolve: require('./2023/PromiseResolve'), QuoteJSONString: require('./2023/QuoteJSONString'), RawBytesToNumeric: require('./2023/RawBytesToNumeric'), RegExpCreate: require('./2023/RegExpCreate'), RegExpExec: require('./2023/RegExpExec'), RegExpHasFlag: require('./2023/RegExpHasFlag'), RequireObjectCoercible: require('./2023/RequireObjectCoercible'), SameValue: require('./2023/SameValue'), SameValueNonNumber: require('./2023/SameValueNonNumber'), SameValueZero: require('./2023/SameValueZero'), SecFromTime: require('./2023/SecFromTime'), Set: require('./2023/Set'), SetFunctionLength: require('./2023/SetFunctionLength'), SetFunctionName: require('./2023/SetFunctionName'), SetIntegrityLevel: require('./2023/SetIntegrityLevel'), SetTypedArrayFromArrayLike: require('./2023/SetTypedArrayFromArrayLike'), SetTypedArrayFromTypedArray: require('./2023/SetTypedArrayFromTypedArray'), SetValueInBuffer: require('./2023/SetValueInBuffer'), SortIndexedProperties: require('./2023/SortIndexedProperties'), SpeciesConstructor: require('./2023/SpeciesConstructor'), StringCreate: require('./2023/StringCreate'), StringGetOwnProperty: require('./2023/StringGetOwnProperty'), StringIndexOf: require('./2023/StringIndexOf'), StringPad: require('./2023/StringPad'), StringToBigInt: require('./2023/StringToBigInt'), StringToCodePoints: require('./2023/StringToCodePoints'), StringToNumber: require('./2023/StringToNumber'), substring: require('./2023/substring'), SymbolDescriptiveString: require('./2023/SymbolDescriptiveString'), TestIntegrityLevel: require('./2023/TestIntegrityLevel'), thisBigIntValue: require('./2023/thisBigIntValue'), thisBooleanValue: require('./2023/thisBooleanValue'), thisNumberValue: require('./2023/thisNumberValue'), thisStringValue: require('./2023/thisStringValue'), thisSymbolValue: require('./2023/thisSymbolValue'), thisTimeValue: require('./2023/thisTimeValue'), ThrowCompletion: require('./2023/ThrowCompletion'), TimeClip: require('./2023/TimeClip'), TimeFromYear: require('./2023/TimeFromYear'), TimeString: require('./2023/TimeString'), TimeWithinDay: require('./2023/TimeWithinDay'), TimeZoneString: require('./2023/TimeZoneString'), ToBigInt: require('./2023/ToBigInt'), ToBigInt64: require('./2023/ToBigInt64'), ToBigUint64: require('./2023/ToBigUint64'), ToBoolean: require('./2023/ToBoolean'), ToDateString: require('./2023/ToDateString'), ToIndex: require('./2023/ToIndex'), ToInt16: require('./2023/ToInt16'), ToInt32: require('./2023/ToInt32'), ToInt8: require('./2023/ToInt8'), ToIntegerOrInfinity: require('./2023/ToIntegerOrInfinity'), ToLength: require('./2023/ToLength'), ToNumber: require('./2023/ToNumber'), ToNumeric: require('./2023/ToNumeric'), ToObject: require('./2023/ToObject'), ToPrimitive: require('./2023/ToPrimitive'), ToPropertyDescriptor: require('./2023/ToPropertyDescriptor'), ToPropertyKey: require('./2023/ToPropertyKey'), ToString: require('./2023/ToString'), ToUint16: require('./2023/ToUint16'), ToUint32: require('./2023/ToUint32'), ToUint8: require('./2023/ToUint8'), ToUint8Clamp: require('./2023/ToUint8Clamp'), ToZeroPaddedDecimalString: require('./2023/ToZeroPaddedDecimalString'), TrimString: require('./2023/TrimString'), truncate: require('./2023/truncate'), Type: require('./2023/Type'), TypedArrayCreate: require('./2023/TypedArrayCreate'), TypedArrayCreateSameType: require('./2023/TypedArrayCreateSameType'), TypedArrayElementSize: require('./2023/TypedArrayElementSize'), TypedArrayElementType: require('./2023/TypedArrayElementType'), TypedArraySpeciesCreate: require('./2023/TypedArraySpeciesCreate'), UnicodeEscape: require('./2023/UnicodeEscape'), UTF16EncodeCodePoint: require('./2023/UTF16EncodeCodePoint'), UTF16SurrogatePairToCodePoint: require('./2023/UTF16SurrogatePairToCodePoint'), ValidateAndApplyPropertyDescriptor: require('./2023/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2023/ValidateAtomicAccess'), ValidateIntegerTypedArray: require('./2023/ValidateIntegerTypedArray'), ValidateTypedArray: require('./2023/ValidateTypedArray'), WeakRefDeref: require('./2023/WeakRefDeref'), WeekDay: require('./2023/WeekDay'), WordCharacters: require('./2023/WordCharacters'), YearFromTime: require('./2023/YearFromTime') }; module.exports = ES2023; ljharb-es-abstract-babee05/es2024.js000066400000000000000000000327301516525472400172240ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/15.0/#sec-abstract-operations var ES2024 = { abs: require('./2024/abs'), AddEntriesFromIterable: require('./2024/AddEntriesFromIterable'), AddToKeptObjects: require('./2024/AddToKeptObjects'), AddValueToKeyedGroup: require('./2024/AddValueToKeyedGroup'), AdvanceStringIndex: require('./2024/AdvanceStringIndex'), AllCharacters: require('./2024/AllCharacters'), ApplyStringOrNumericBinaryOperator: require('./2024/ApplyStringOrNumericBinaryOperator'), ArrayBufferByteLength: require('./2024/ArrayBufferByteLength'), ArrayBufferCopyAndDetach: require('./2024/ArrayBufferCopyAndDetach'), ArrayCreate: require('./2024/ArrayCreate'), ArraySetLength: require('./2024/ArraySetLength'), ArraySpeciesCreate: require('./2024/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2024/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2024/AsyncIteratorClose'), BigInt: require('./2024/BigInt'), BigIntBitwiseOp: require('./2024/BigIntBitwiseOp'), BinaryAnd: require('./2024/BinaryAnd'), BinaryOr: require('./2024/BinaryOr'), BinaryXor: require('./2024/BinaryXor'), ByteListBitwiseOp: require('./2024/ByteListBitwiseOp'), ByteListEqual: require('./2024/ByteListEqual'), Call: require('./2024/Call'), CanBeHeldWeakly: require('./2024/CanBeHeldWeakly'), Canonicalize: require('./2024/Canonicalize'), CanonicalNumericIndexString: require('./2024/CanonicalNumericIndexString'), CharacterComplement: require('./2024/CharacterComplement'), CharacterRange: require('./2024/CharacterRange'), clamp: require('./2024/clamp'), ClearKeptObjects: require('./2024/ClearKeptObjects'), CloneArrayBuffer: require('./2024/CloneArrayBuffer'), CodePointAt: require('./2024/CodePointAt'), CodePointsToString: require('./2024/CodePointsToString'), CompareArrayElements: require('./2024/CompareArrayElements'), CompareTypedArrayElements: require('./2024/CompareTypedArrayElements'), CompletePropertyDescriptor: require('./2024/CompletePropertyDescriptor'), CompletionRecord: require('./2024/CompletionRecord'), CopyDataProperties: require('./2024/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2024/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2024/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2024/CreateDataPropertyOrThrow'), CreateHTML: require('./2024/CreateHTML'), CreateIterResultObject: require('./2024/CreateIterResultObject'), CreateListFromArrayLike: require('./2024/CreateListFromArrayLike'), CreateNonEnumerableDataPropertyOrThrow: require('./2024/CreateNonEnumerableDataPropertyOrThrow'), CreateRegExpStringIterator: require('./2024/CreateRegExpStringIterator'), DateFromTime: require('./2024/DateFromTime'), DateString: require('./2024/DateString'), Day: require('./2024/Day'), DayFromYear: require('./2024/DayFromYear'), DaysInYear: require('./2024/DaysInYear'), DayWithinYear: require('./2024/DayWithinYear'), DefineMethodProperty: require('./2024/DefineMethodProperty'), DefinePropertyOrThrow: require('./2024/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2024/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2024/DetachArrayBuffer'), EnumerableOwnProperties: require('./2024/EnumerableOwnProperties'), FindViaPredicate: require('./2024/FindViaPredicate'), FlattenIntoArray: require('./2024/FlattenIntoArray'), floor: require('./2024/floor'), FromPropertyDescriptor: require('./2024/FromPropertyDescriptor'), Get: require('./2024/Get'), GetArrayBufferMaxByteLengthOption: require('./2024/GetArrayBufferMaxByteLengthOption'), GetGlobalObject: require('./2024/GetGlobalObject'), GetIterator: require('./2024/GetIterator'), GetIteratorFromMethod: require('./2024/GetIteratorFromMethod'), GetMatchIndexPair: require('./2024/GetMatchIndexPair'), GetMatchString: require('./2024/GetMatchString'), GetMethod: require('./2024/GetMethod'), GetNamedTimeZoneEpochNanoseconds: require('./2024/GetNamedTimeZoneEpochNanoseconds'), GetOwnPropertyKeys: require('./2024/GetOwnPropertyKeys'), GetPromiseResolve: require('./2024/GetPromiseResolve'), GetPrototypeFromConstructor: require('./2024/GetPrototypeFromConstructor'), GetStringIndex: require('./2024/GetStringIndex'), GetSubstitution: require('./2024/GetSubstitution'), GetUTCEpochNanoseconds: require('./2024/GetUTCEpochNanoseconds'), GetV: require('./2024/GetV'), GetValueFromBuffer: require('./2024/GetValueFromBuffer'), GetViewByteLength: require('./2024/GetViewByteLength'), GroupBy: require('./2024/GroupBy'), HasEitherUnicodeFlag: require('./2024/HasEitherUnicodeFlag'), HasOwnProperty: require('./2024/HasOwnProperty'), HasProperty: require('./2024/HasProperty'), HourFromTime: require('./2024/HourFromTime'), InLeapYear: require('./2024/InLeapYear'), InstallErrorCause: require('./2024/InstallErrorCause'), InstanceofOperator: require('./2024/InstanceofOperator'), InternalizeJSONProperty: require('./2024/InternalizeJSONProperty'), Invoke: require('./2024/Invoke'), IsAccessorDescriptor: require('./2024/IsAccessorDescriptor'), IsArray: require('./2024/IsArray'), IsArrayBufferViewOutOfBounds: require('./2024/IsArrayBufferViewOutOfBounds'), IsBigIntElementType: require('./2024/IsBigIntElementType'), IsCallable: require('./2024/IsCallable'), IsCompatiblePropertyDescriptor: require('./2024/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2024/IsConcatSpreadable'), IsConstructor: require('./2024/IsConstructor'), IsDataDescriptor: require('./2024/IsDataDescriptor'), IsDetachedBuffer: require('./2024/IsDetachedBuffer'), IsExtensible: require('./2024/IsExtensible'), IsFixedLengthArrayBuffer: require('./2024/IsFixedLengthArrayBuffer'), IsGenericDescriptor: require('./2024/IsGenericDescriptor'), IsIntegralNumber: require('./2024/IsIntegralNumber'), IsLessThan: require('./2024/IsLessThan'), IsLooselyEqual: require('./2024/IsLooselyEqual'), IsNoTearConfiguration: require('./2024/IsNoTearConfiguration'), IsPromise: require('./2024/IsPromise'), IsPropertyKey: require('./2024/IsPropertyKey'), IsRegExp: require('./2024/IsRegExp'), IsSharedArrayBuffer: require('./2024/IsSharedArrayBuffer'), IsStrictlyEqual: require('./2024/IsStrictlyEqual'), IsStringWellFormedUnicode: require('./2024/IsStringWellFormedUnicode'), IsTimeZoneOffsetString: require('./2024/IsTimeZoneOffsetString'), IsTypedArrayOutOfBounds: require('./2024/IsTypedArrayOutOfBounds'), IsUnclampedIntegerElementType: require('./2024/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2024/IsUnsignedElementType'), IsValidIntegerIndex: require('./2024/IsValidIntegerIndex'), IsViewOutOfBounds: require('./2024/IsViewOutOfBounds'), IsWordChar: require('./2024/IsWordChar'), IteratorClose: require('./2024/IteratorClose'), IteratorComplete: require('./2024/IteratorComplete'), IteratorNext: require('./2024/IteratorNext'), IteratorStep: require('./2024/IteratorStep'), IteratorStepValue: require('./2024/IteratorStepValue'), IteratorToList: require('./2024/IteratorToList'), IteratorValue: require('./2024/IteratorValue'), KeyForSymbol: require('./2024/KeyForSymbol'), LengthOfArrayLike: require('./2024/LengthOfArrayLike'), MakeDataViewWithBufferWitnessRecord: require('./2024/MakeDataViewWithBufferWitnessRecord'), MakeDate: require('./2024/MakeDate'), MakeDay: require('./2024/MakeDay'), MakeFullYear: require('./2024/MakeFullYear'), MakeMatchIndicesIndexPairArray: require('./2024/MakeMatchIndicesIndexPairArray'), MakeTime: require('./2024/MakeTime'), MakeTypedArrayWithBufferWitnessRecord: require('./2024/MakeTypedArrayWithBufferWitnessRecord'), max: require('./2024/max'), min: require('./2024/min'), MinFromTime: require('./2024/MinFromTime'), modulo: require('./2024/modulo'), MonthFromTime: require('./2024/MonthFromTime'), msFromTime: require('./2024/msFromTime'), NewPromiseCapability: require('./2024/NewPromiseCapability'), NormalCompletion: require('./2024/NormalCompletion'), Number: require('./2024/Number'), NumberBitwiseOp: require('./2024/NumberBitwiseOp'), NumberToBigInt: require('./2024/NumberToBigInt'), NumericToRawBytes: require('./2024/NumericToRawBytes'), ObjectDefineProperties: require('./2024/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2024/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2024/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2024/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2024/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2024/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2024/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2024/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2024/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2024/OrdinaryToPrimitive'), ParseHexOctet: require('./2024/ParseHexOctet'), PromiseResolve: require('./2024/PromiseResolve'), QuoteJSONString: require('./2024/QuoteJSONString'), RawBytesToNumeric: require('./2024/RawBytesToNumeric'), RegExpCreate: require('./2024/RegExpCreate'), RegExpExec: require('./2024/RegExpExec'), RegExpHasFlag: require('./2024/RegExpHasFlag'), RequireObjectCoercible: require('./2024/RequireObjectCoercible'), SameValue: require('./2024/SameValue'), SameValueNonNumber: require('./2024/SameValueNonNumber'), SameValueZero: require('./2024/SameValueZero'), SecFromTime: require('./2024/SecFromTime'), Set: require('./2024/Set'), SetFunctionLength: require('./2024/SetFunctionLength'), SetFunctionName: require('./2024/SetFunctionName'), SetIntegrityLevel: require('./2024/SetIntegrityLevel'), SetTypedArrayFromArrayLike: require('./2024/SetTypedArrayFromArrayLike'), SetTypedArrayFromTypedArray: require('./2024/SetTypedArrayFromTypedArray'), SetValueInBuffer: require('./2024/SetValueInBuffer'), SortIndexedProperties: require('./2024/SortIndexedProperties'), SpeciesConstructor: require('./2024/SpeciesConstructor'), StringCreate: require('./2024/StringCreate'), StringGetOwnProperty: require('./2024/StringGetOwnProperty'), StringIndexOf: require('./2024/StringIndexOf'), StringPad: require('./2024/StringPad'), StringPaddingBuiltinsImpl: require('./2024/StringPaddingBuiltinsImpl'), StringToBigInt: require('./2024/StringToBigInt'), StringToCodePoints: require('./2024/StringToCodePoints'), StringToNumber: require('./2024/StringToNumber'), substring: require('./2024/substring'), SymbolDescriptiveString: require('./2024/SymbolDescriptiveString'), SystemTimeZoneIdentifier: require('./2024/SystemTimeZoneIdentifier'), TestIntegrityLevel: require('./2024/TestIntegrityLevel'), ThisBigIntValue: require('./2024/ThisBigIntValue'), ThisBooleanValue: require('./2024/ThisBooleanValue'), ThisNumberValue: require('./2024/ThisNumberValue'), ThisStringValue: require('./2024/ThisStringValue'), ThisSymbolValue: require('./2024/ThisSymbolValue'), ThrowCompletion: require('./2024/ThrowCompletion'), TimeClip: require('./2024/TimeClip'), TimeFromYear: require('./2024/TimeFromYear'), TimeString: require('./2024/TimeString'), TimeWithinDay: require('./2024/TimeWithinDay'), TimeZoneString: require('./2024/TimeZoneString'), ToBigInt: require('./2024/ToBigInt'), ToBigInt64: require('./2024/ToBigInt64'), ToBigUint64: require('./2024/ToBigUint64'), ToBoolean: require('./2024/ToBoolean'), ToDateString: require('./2024/ToDateString'), ToIndex: require('./2024/ToIndex'), ToInt16: require('./2024/ToInt16'), ToInt32: require('./2024/ToInt32'), ToInt8: require('./2024/ToInt8'), ToIntegerOrInfinity: require('./2024/ToIntegerOrInfinity'), ToLength: require('./2024/ToLength'), ToNumber: require('./2024/ToNumber'), ToNumeric: require('./2024/ToNumeric'), ToObject: require('./2024/ToObject'), ToPrimitive: require('./2024/ToPrimitive'), ToPropertyDescriptor: require('./2024/ToPropertyDescriptor'), ToPropertyKey: require('./2024/ToPropertyKey'), ToString: require('./2024/ToString'), ToUint16: require('./2024/ToUint16'), ToUint32: require('./2024/ToUint32'), ToUint8: require('./2024/ToUint8'), ToUint8Clamp: require('./2024/ToUint8Clamp'), ToZeroPaddedDecimalString: require('./2024/ToZeroPaddedDecimalString'), TrimString: require('./2024/TrimString'), truncate: require('./2024/truncate'), Type: require('./2024/Type'), TypedArrayByteLength: require('./2024/TypedArrayByteLength'), TypedArrayCreateFromConstructor: require('./2024/TypedArrayCreateFromConstructor'), TypedArrayCreateSameType: require('./2024/TypedArrayCreateSameType'), TypedArrayElementSize: require('./2024/TypedArrayElementSize'), TypedArrayElementType: require('./2024/TypedArrayElementType'), TypedArrayGetElement: require('./2024/TypedArrayGetElement'), TypedArrayLength: require('./2024/TypedArrayLength'), TypedArraySetElement: require('./2024/TypedArraySetElement'), TypedArraySpeciesCreate: require('./2024/TypedArraySpeciesCreate'), UnicodeEscape: require('./2024/UnicodeEscape'), UTF16EncodeCodePoint: require('./2024/UTF16EncodeCodePoint'), UTF16SurrogatePairToCodePoint: require('./2024/UTF16SurrogatePairToCodePoint'), ValidateAndApplyPropertyDescriptor: require('./2024/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2024/ValidateAtomicAccess'), ValidateAtomicAccessOnIntegerTypedArray: require('./2024/ValidateAtomicAccessOnIntegerTypedArray'), ValidateIntegerTypedArray: require('./2024/ValidateIntegerTypedArray'), ValidateTypedArray: require('./2024/ValidateTypedArray'), WeakRefDeref: require('./2024/WeakRefDeref'), WeekDay: require('./2024/WeekDay'), WordCharacters: require('./2024/WordCharacters'), YearFromTime: require('./2024/YearFromTime') }; module.exports = ES2024; ljharb-es-abstract-babee05/es2025.js000066400000000000000000000347731516525472400172360ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/16.0/#sec-abstract-operations var ES2025 = { abs: require('./2025/abs'), AddEntriesFromIterable: require('./2025/AddEntriesFromIterable'), AddToKeptObjects: require('./2025/AddToKeptObjects'), AddValueToKeyedGroup: require('./2025/AddValueToKeyedGroup'), AdvanceStringIndex: require('./2025/AdvanceStringIndex'), AllCharacters: require('./2025/AllCharacters'), ApplyStringOrNumericBinaryOperator: require('./2025/ApplyStringOrNumericBinaryOperator'), ArrayBufferByteLength: require('./2025/ArrayBufferByteLength'), ArrayBufferCopyAndDetach: require('./2025/ArrayBufferCopyAndDetach'), ArrayCreate: require('./2025/ArrayCreate'), ArraySetLength: require('./2025/ArraySetLength'), ArraySpeciesCreate: require('./2025/ArraySpeciesCreate'), AsyncFromSyncIteratorContinuation: require('./2025/AsyncFromSyncIteratorContinuation'), AsyncIteratorClose: require('./2025/AsyncIteratorClose'), BigInt: require('./2025/BigInt'), BigIntBitwiseOp: require('./2025/BigIntBitwiseOp'), BinaryAnd: require('./2025/BinaryAnd'), BinaryOr: require('./2025/BinaryOr'), BinaryXor: require('./2025/BinaryXor'), ByteListBitwiseOp: require('./2025/ByteListBitwiseOp'), ByteListEqual: require('./2025/ByteListEqual'), Call: require('./2025/Call'), CanBeHeldWeakly: require('./2025/CanBeHeldWeakly'), Canonicalize: require('./2025/Canonicalize'), CanonicalizeKeyedCollectionKey: require('./2025/CanonicalizeKeyedCollectionKey'), CanonicalNumericIndexString: require('./2025/CanonicalNumericIndexString'), CharacterComplement: require('./2025/CharacterComplement'), CharacterRange: require('./2025/CharacterRange'), clamp: require('./2025/clamp'), ClearKeptObjects: require('./2025/ClearKeptObjects'), CloneArrayBuffer: require('./2025/CloneArrayBuffer'), CodePointAt: require('./2025/CodePointAt'), CodePointsToString: require('./2025/CodePointsToString'), CompareArrayElements: require('./2025/CompareArrayElements'), CompareTypedArrayElements: require('./2025/CompareTypedArrayElements'), CompletePropertyDescriptor: require('./2025/CompletePropertyDescriptor'), CompletionRecord: require('./2025/CompletionRecord'), CopyDataProperties: require('./2025/CopyDataProperties'), CreateAsyncFromSyncIterator: require('./2025/CreateAsyncFromSyncIterator'), CreateDataProperty: require('./2025/CreateDataProperty'), CreateDataPropertyOrThrow: require('./2025/CreateDataPropertyOrThrow'), CreateHTML: require('./2025/CreateHTML'), CreateIteratorFromClosure: require('./2025/CreateIteratorFromClosure'), CreateIteratorResultObject: require('./2025/CreateIteratorResultObject'), CreateListFromArrayLike: require('./2025/CreateListFromArrayLike'), CreateNonEnumerableDataPropertyOrThrow: require('./2025/CreateNonEnumerableDataPropertyOrThrow'), CreateRegExpStringIterator: require('./2025/CreateRegExpStringIterator'), DateFromTime: require('./2025/DateFromTime'), DateString: require('./2025/DateString'), Day: require('./2025/Day'), DayFromYear: require('./2025/DayFromYear'), DaysInYear: require('./2025/DaysInYear'), DayWithinYear: require('./2025/DayWithinYear'), DefineMethodProperty: require('./2025/DefineMethodProperty'), DefinePropertyOrThrow: require('./2025/DefinePropertyOrThrow'), DeletePropertyOrThrow: require('./2025/DeletePropertyOrThrow'), DetachArrayBuffer: require('./2025/DetachArrayBuffer'), EncodeForRegExpEscape: require('./2025/EncodeForRegExpEscape'), EnumerableOwnProperties: require('./2025/EnumerableOwnProperties'), FindViaPredicate: require('./2025/FindViaPredicate'), FlattenIntoArray: require('./2025/FlattenIntoArray'), floor: require('./2025/floor'), FromPropertyDescriptor: require('./2025/FromPropertyDescriptor'), GeneratorResume: require('./2025/GeneratorResume'), GeneratorResumeAbrupt: require('./2025/GeneratorResumeAbrupt'), GeneratorStart: require('./2025/GeneratorStart'), GeneratorValidate: require('./2025/GeneratorValidate'), Get: require('./2025/Get'), GetArrayBufferMaxByteLengthOption: require('./2025/GetArrayBufferMaxByteLengthOption'), GetGlobalObject: require('./2025/GetGlobalObject'), GetIterator: require('./2025/GetIterator'), GetIteratorDirect: require('./2025/GetIteratorDirect'), GetIteratorFlattenable: require('./2025/GetIteratorFlattenable'), GetIteratorFromMethod: require('./2025/GetIteratorFromMethod'), GetMatchIndexPair: require('./2025/GetMatchIndexPair'), GetMatchString: require('./2025/GetMatchString'), GetMethod: require('./2025/GetMethod'), GetNamedTimeZoneEpochNanoseconds: require('./2025/GetNamedTimeZoneEpochNanoseconds'), GetOwnPropertyKeys: require('./2025/GetOwnPropertyKeys'), GetPromiseResolve: require('./2025/GetPromiseResolve'), GetPrototypeFromConstructor: require('./2025/GetPrototypeFromConstructor'), GetSetRecord: require('./2025/GetSetRecord'), GetStringIndex: require('./2025/GetStringIndex'), GetSubstitution: require('./2025/GetSubstitution'), GetUTCEpochNanoseconds: require('./2025/GetUTCEpochNanoseconds'), GetV: require('./2025/GetV'), GetValueFromBuffer: require('./2025/GetValueFromBuffer'), GetViewByteLength: require('./2025/GetViewByteLength'), GroupBy: require('./2025/GroupBy'), HasEitherUnicodeFlag: require('./2025/HasEitherUnicodeFlag'), HasOwnProperty: require('./2025/HasOwnProperty'), HasProperty: require('./2025/HasProperty'), HourFromTime: require('./2025/HourFromTime'), IfAbruptCloseIterator: require('./2025/IfAbruptCloseIterator'), InLeapYear: require('./2025/InLeapYear'), InstallErrorCause: require('./2025/InstallErrorCause'), InstanceofOperator: require('./2025/InstanceofOperator'), InternalizeJSONProperty: require('./2025/InternalizeJSONProperty'), Invoke: require('./2025/Invoke'), IsAccessorDescriptor: require('./2025/IsAccessorDescriptor'), IsArray: require('./2025/IsArray'), IsArrayBufferViewOutOfBounds: require('./2025/IsArrayBufferViewOutOfBounds'), IsBigIntElementType: require('./2025/IsBigIntElementType'), IsCallable: require('./2025/IsCallable'), IsCompatiblePropertyDescriptor: require('./2025/IsCompatiblePropertyDescriptor'), IsConcatSpreadable: require('./2025/IsConcatSpreadable'), IsConstructor: require('./2025/IsConstructor'), IsDataDescriptor: require('./2025/IsDataDescriptor'), IsDetachedBuffer: require('./2025/IsDetachedBuffer'), IsExtensible: require('./2025/IsExtensible'), IsFixedLengthArrayBuffer: require('./2025/IsFixedLengthArrayBuffer'), IsGenericDescriptor: require('./2025/IsGenericDescriptor'), IsLessThan: require('./2025/IsLessThan'), IsLooselyEqual: require('./2025/IsLooselyEqual'), IsNoTearConfiguration: require('./2025/IsNoTearConfiguration'), IsPromise: require('./2025/IsPromise'), IsRegExp: require('./2025/IsRegExp'), IsSharedArrayBuffer: require('./2025/IsSharedArrayBuffer'), IsStrictlyEqual: require('./2025/IsStrictlyEqual'), IsStringWellFormedUnicode: require('./2025/IsStringWellFormedUnicode'), IsTimeZoneOffsetString: require('./2025/IsTimeZoneOffsetString'), IsTypedArrayFixedLength: require('./2025/IsTypedArrayFixedLength'), IsTypedArrayOutOfBounds: require('./2025/IsTypedArrayOutOfBounds'), IsUnclampedIntegerElementType: require('./2025/IsUnclampedIntegerElementType'), IsUnsignedElementType: require('./2025/IsUnsignedElementType'), IsValidIntegerIndex: require('./2025/IsValidIntegerIndex'), IsViewOutOfBounds: require('./2025/IsViewOutOfBounds'), IsWordChar: require('./2025/IsWordChar'), IteratorClose: require('./2025/IteratorClose'), IteratorComplete: require('./2025/IteratorComplete'), IteratorNext: require('./2025/IteratorNext'), IteratorStep: require('./2025/IteratorStep'), IteratorStepValue: require('./2025/IteratorStepValue'), IteratorToList: require('./2025/IteratorToList'), IteratorValue: require('./2025/IteratorValue'), KeyForSymbol: require('./2025/KeyForSymbol'), LengthOfArrayLike: require('./2025/LengthOfArrayLike'), MakeDataViewWithBufferWitnessRecord: require('./2025/MakeDataViewWithBufferWitnessRecord'), MakeDate: require('./2025/MakeDate'), MakeDay: require('./2025/MakeDay'), MakeFullYear: require('./2025/MakeFullYear'), MakeMatchIndicesIndexPairArray: require('./2025/MakeMatchIndicesIndexPairArray'), MakeTime: require('./2025/MakeTime'), MakeTypedArrayWithBufferWitnessRecord: require('./2025/MakeTypedArrayWithBufferWitnessRecord'), max: require('./2025/max'), min: require('./2025/min'), MinFromTime: require('./2025/MinFromTime'), modulo: require('./2025/modulo'), MonthFromTime: require('./2025/MonthFromTime'), msFromTime: require('./2025/msFromTime'), NewPromiseCapability: require('./2025/NewPromiseCapability'), NormalCompletion: require('./2025/NormalCompletion'), Number: require('./2025/Number'), NumberBitwiseOp: require('./2025/NumberBitwiseOp'), NumberToBigInt: require('./2025/NumberToBigInt'), NumericToRawBytes: require('./2025/NumericToRawBytes'), ObjectDefineProperties: require('./2025/ObjectDefineProperties'), OrdinaryCreateFromConstructor: require('./2025/OrdinaryCreateFromConstructor'), OrdinaryDefineOwnProperty: require('./2025/OrdinaryDefineOwnProperty'), OrdinaryGetOwnProperty: require('./2025/OrdinaryGetOwnProperty'), OrdinaryGetPrototypeOf: require('./2025/OrdinaryGetPrototypeOf'), OrdinaryHasInstance: require('./2025/OrdinaryHasInstance'), OrdinaryHasProperty: require('./2025/OrdinaryHasProperty'), OrdinaryObjectCreate: require('./2025/OrdinaryObjectCreate'), OrdinarySetPrototypeOf: require('./2025/OrdinarySetPrototypeOf'), OrdinaryToPrimitive: require('./2025/OrdinaryToPrimitive'), ParseHexOctet: require('./2025/ParseHexOctet'), PromiseResolve: require('./2025/PromiseResolve'), QuoteJSONString: require('./2025/QuoteJSONString'), RawBytesToNumeric: require('./2025/RawBytesToNumeric'), RegExpCreate: require('./2025/RegExpCreate'), RegExpExec: require('./2025/RegExpExec'), RegExpHasFlag: require('./2025/RegExpHasFlag'), RequireObjectCoercible: require('./2025/RequireObjectCoercible'), ReturnCompletion: require('./2025/ReturnCompletion'), SameType: require('./2025/SameType'), SameValue: require('./2025/SameValue'), SameValueNonNumber: require('./2025/SameValueNonNumber'), SameValueZero: require('./2025/SameValueZero'), SecFromTime: require('./2025/SecFromTime'), Set: require('./2025/Set'), SetDataHas: require('./2025/SetDataHas'), SetDataIndex: require('./2025/SetDataIndex'), SetDataSize: require('./2025/SetDataSize'), SetFunctionLength: require('./2025/SetFunctionLength'), SetFunctionName: require('./2025/SetFunctionName'), SetIntegrityLevel: require('./2025/SetIntegrityLevel'), SetterThatIgnoresPrototypeProperties: require('./2025/SetterThatIgnoresPrototypeProperties'), SetTypedArrayFromArrayLike: require('./2025/SetTypedArrayFromArrayLike'), SetTypedArrayFromTypedArray: require('./2025/SetTypedArrayFromTypedArray'), SetValueInBuffer: require('./2025/SetValueInBuffer'), SortIndexedProperties: require('./2025/SortIndexedProperties'), SpeciesConstructor: require('./2025/SpeciesConstructor'), StringCreate: require('./2025/StringCreate'), StringGetOwnProperty: require('./2025/StringGetOwnProperty'), StringIndexOf: require('./2025/StringIndexOf'), StringLastIndexOf: require('./2025/StringLastIndexOf'), StringPad: require('./2025/StringPad'), StringPaddingBuiltinsImpl: require('./2025/StringPaddingBuiltinsImpl'), StringToBigInt: require('./2025/StringToBigInt'), StringToCodePoints: require('./2025/StringToCodePoints'), StringToNumber: require('./2025/StringToNumber'), substring: require('./2025/substring'), SymbolDescriptiveString: require('./2025/SymbolDescriptiveString'), SystemTimeZoneIdentifier: require('./2025/SystemTimeZoneIdentifier'), TestIntegrityLevel: require('./2025/TestIntegrityLevel'), ThisBigIntValue: require('./2025/ThisBigIntValue'), ThisBooleanValue: require('./2025/ThisBooleanValue'), ThisNumberValue: require('./2025/ThisNumberValue'), ThisStringValue: require('./2025/ThisStringValue'), ThisSymbolValue: require('./2025/ThisSymbolValue'), ThrowCompletion: require('./2025/ThrowCompletion'), TimeClip: require('./2025/TimeClip'), TimeFromYear: require('./2025/TimeFromYear'), TimeString: require('./2025/TimeString'), TimeWithinDay: require('./2025/TimeWithinDay'), TimeZoneString: require('./2025/TimeZoneString'), ToBigInt: require('./2025/ToBigInt'), ToBigInt64: require('./2025/ToBigInt64'), ToBigUint64: require('./2025/ToBigUint64'), ToBoolean: require('./2025/ToBoolean'), ToDateString: require('./2025/ToDateString'), ToIndex: require('./2025/ToIndex'), ToInt16: require('./2025/ToInt16'), ToInt32: require('./2025/ToInt32'), ToInt8: require('./2025/ToInt8'), ToIntegerOrInfinity: require('./2025/ToIntegerOrInfinity'), ToLength: require('./2025/ToLength'), ToNumber: require('./2025/ToNumber'), ToNumeric: require('./2025/ToNumeric'), ToObject: require('./2025/ToObject'), ToPrimitive: require('./2025/ToPrimitive'), ToPropertyDescriptor: require('./2025/ToPropertyDescriptor'), ToPropertyKey: require('./2025/ToPropertyKey'), ToString: require('./2025/ToString'), ToUint16: require('./2025/ToUint16'), ToUint32: require('./2025/ToUint32'), ToUint8: require('./2025/ToUint8'), ToUint8Clamp: require('./2025/ToUint8Clamp'), ToZeroPaddedDecimalString: require('./2025/ToZeroPaddedDecimalString'), TrimString: require('./2025/TrimString'), truncate: require('./2025/truncate'), TypedArrayByteLength: require('./2025/TypedArrayByteLength'), TypedArrayCreateFromConstructor: require('./2025/TypedArrayCreateFromConstructor'), TypedArrayCreateSameType: require('./2025/TypedArrayCreateSameType'), TypedArrayElementSize: require('./2025/TypedArrayElementSize'), TypedArrayElementType: require('./2025/TypedArrayElementType'), TypedArrayGetElement: require('./2025/TypedArrayGetElement'), TypedArrayLength: require('./2025/TypedArrayLength'), TypedArraySetElement: require('./2025/TypedArraySetElement'), TypedArraySpeciesCreate: require('./2025/TypedArraySpeciesCreate'), UnicodeEscape: require('./2025/UnicodeEscape'), UpdateModifiers: require('./2025/UpdateModifiers'), UTF16EncodeCodePoint: require('./2025/UTF16EncodeCodePoint'), UTF16SurrogatePairToCodePoint: require('./2025/UTF16SurrogatePairToCodePoint'), ValidateAndApplyPropertyDescriptor: require('./2025/ValidateAndApplyPropertyDescriptor'), ValidateAtomicAccess: require('./2025/ValidateAtomicAccess'), ValidateAtomicAccessOnIntegerTypedArray: require('./2025/ValidateAtomicAccessOnIntegerTypedArray'), ValidateIntegerTypedArray: require('./2025/ValidateIntegerTypedArray'), ValidateTypedArray: require('./2025/ValidateTypedArray'), WeakRefDeref: require('./2025/WeakRefDeref'), WeekDay: require('./2025/WeekDay'), WordCharacters: require('./2025/WordCharacters'), YearFromTime: require('./2025/YearFromTime') }; module.exports = ES2025; ljharb-es-abstract-babee05/es5.js000066400000000000000000000040271516525472400167770ustar00rootroot00000000000000'use strict'; /* eslint global-require: 0 */ // https://es5.github.io/#x9 module.exports = { 'Abstract Equality Comparison': require('./5/AbstractEqualityComparison'), 'Abstract Relational Comparison': require('./5/AbstractRelationalComparison'), 'Strict Equality Comparison': require('./5/StrictEqualityComparison'), abs: require('./5/abs'), Canonicalize: require('./5/Canonicalize'), CheckObjectCoercible: require('./5/CheckObjectCoercible'), DateFromTime: require('./5/DateFromTime'), Day: require('./5/Day'), DayFromYear: require('./5/DayFromYear'), DaysInYear: require('./5/DaysInYear'), DayWithinYear: require('./5/DayWithinYear'), floor: require('./5/floor'), FromPropertyDescriptor: require('./5/FromPropertyDescriptor'), HourFromTime: require('./5/HourFromTime'), InLeapYear: require('./5/InLeapYear'), IsAccessorDescriptor: require('./5/IsAccessorDescriptor'), IsCallable: require('./5/IsCallable'), IsDataDescriptor: require('./5/IsDataDescriptor'), IsGenericDescriptor: require('./5/IsGenericDescriptor'), IsPropertyDescriptor: require('./5/IsPropertyDescriptor'), MakeDate: require('./5/MakeDate'), MakeDay: require('./5/MakeDay'), MakeTime: require('./5/MakeTime'), MinFromTime: require('./5/MinFromTime'), modulo: require('./5/modulo'), MonthFromTime: require('./5/MonthFromTime'), msFromTime: require('./5/msFromTime'), SameValue: require('./5/SameValue'), SecFromTime: require('./5/SecFromTime'), TimeClip: require('./5/TimeClip'), TimeFromYear: require('./5/TimeFromYear'), TimeWithinDay: require('./5/TimeWithinDay'), ToBoolean: require('./5/ToBoolean'), ToInt32: require('./5/ToInt32'), ToInteger: require('./5/ToInteger'), ToNumber: require('./5/ToNumber'), ToObject: require('./5/ToObject'), ToPrimitive: require('./5/ToPrimitive'), ToPropertyDescriptor: require('./5/ToPropertyDescriptor'), ToString: require('./5/ToString'), ToUint16: require('./5/ToUint16'), ToUint32: require('./5/ToUint32'), Type: require('./5/Type'), WeekDay: require('./5/WeekDay'), YearFromTime: require('./5/YearFromTime') }; ljharb-es-abstract-babee05/es6.js000066400000000000000000000000651516525472400167760ustar00rootroot00000000000000'use strict'; module.exports = require('./es2015'); ljharb-es-abstract-babee05/es7.js000066400000000000000000000000651516525472400167770ustar00rootroot00000000000000'use strict'; module.exports = require('./es2016'); ljharb-es-abstract-babee05/eslint.config.mjs000066400000000000000000000051161516525472400212220ustar00rootroot00000000000000import ljharb from '@ljharb/eslint-config/flat'; import ljharbNodeLatest from '@ljharb/eslint-config/flat/node/latest'; import ljharbTests from '@ljharb/eslint-config/flat/tests'; export default [ { ignores: [ '.nyc_output', ], }, ...ljharb, { languageOptions: { globals: { DataView: false, Float16Array: false, Float32Array: false, Float64Array: false, Int8Array: false, Int16Array: false, Int32Array: false, Intl: false, Uint8Array: false, Uint8ClampedArray: false, Uint16Array: false, Uint32Array: false, }, }, rules: { 'array-bracket-newline': 'off', complexity: 'off', eqeqeq: ['error', 'allow-null'], 'func-name-matching': 'off', 'id-length': ['error', { min: 1, max: 40 }], 'max-lines-per-function': 'warn', 'max-params': ['error', 5], 'max-statements': 'warn', 'max-statements-per-line': ['error', { max: 2 }], 'multiline-comment-style': 'off', 'new-cap': 'off', 'no-extra-parens': 'warn', 'no-implicit-coercion': ['error', { boolean: false, number: false, string: true, }], 'no-magic-numbers': 'off', 'sort-keys': 'off', }, }, { files: ['GetIntrinsic.js'], rules: { 'max-statements': 'off', }, }, { files: ['operations/*'], rules: { 'max-lines': 'off', }, }, ...ljharbNodeLatest .filter((c) => !c.files?.some((f) => typeof f === 'function' || f === '**/*.mjs')) .map((c) => ({ ...c, files: [ 'operations/deltas.js', 'operations/getOps.js', 'operations/spackle.js', 'operations/years.js', ], })), { files: [ 'operations/deltas.js', 'operations/getOps.js', 'operations/spackle.js', 'operations/years.js', ], rules: { complexity: 'off', 'func-style': 'off', 'max-lines-per-function': 'off', 'max-nested-callbacks': 'off', 'max-statements': 'off', 'no-magic-numbers': 'off', 'no-throw-literal': 'off', }, }, ...ljharbTests.map((c) => ({ ...c, files: ['test/**'], })), { files: ['test/**'], rules: { 'max-len': 'off', 'max-lines-per-function': 'off', 'no-implicit-coercion': 'off', 'no-invalid-this': 'warn', 'prefer-promise-reject-errors': 'off', }, }, { files: [ '*/Num*ToRawBytes.js', '*/RawBytesToNum*.js', 'helpers/bytesAs*.js', 'helpers/valueToFloat*.js', ], rules: { 'max-lines-per-function': 'off', 'max-statements': 'off', 'no-redeclare': 'warn', 'operator-linebreak': ['error', 'before', { overrides: { '=': 'none', }, }], }, }, { files: ['*/GetSubstitution.js'], rules: { 'max-depth': 'off', }, }, ]; ljharb-es-abstract-babee05/helpers/000077500000000000000000000000001516525472400174045ustar00rootroot00000000000000ljharb-es-abstract-babee05/helpers/CharSet.js000066400000000000000000000064251516525472400213020ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var hasOwn = require('hasown'); var caseFolding = require('./caseFolding.json'); var IsArray = require('./IsArray'); var isLeadingSurrogate = require('./isLeadingSurrogate'); var isTrailingSurrogate = require('./isTrailingSurrogate'); var $charCodeAt = callBound('%String.prototype.charCodeAt%'); var $fromCharCode = GetIntrinsic('%String.fromCharCode%'); /* eslint func-style: 0 */ function CharSet(test, yieldCh) { if (typeof test !== 'function') { throw new $TypeError('Assertion failed: `test` must be a function'); } if (typeof yieldCh !== 'function') { throw new $TypeError('Assertion failed: `yield` must be a function'); } this.test = test; this.yield = yieldCh; } CharSet.prototype.count = function () { var count = 0; this.yield(function () { count += 1; }); return count; }; function testCodeUnits(CharSetElement) { if (typeof CharSetElement !== 'string') { throw new $TypeError('Assertion failed: `CharSetElement` must be a string'); } return CharSetElement.length !== 1; } function yieldCodeUnits(emit) { for (var i = 0; i <= 0xDFFF; i += 1) { emit($fromCharCode(i)); } } function testCodePoints(CharSetElement) { if (typeof CharSetElement !== 'string') { throw new $TypeError('Assertion failed: `CharSetElement` must be a string'); } if (CharSetElement.length === 1) { return true; } if (CharSetElement.length === 2) { var hi = $charCodeAt(CharSetElement, 0); var lo = $charCodeAt(CharSetElement, 1); return isLeadingSurrogate(hi) && isTrailingSurrogate(lo); } return false; } function yieldCodePoints(emit) { for (var i = 0; i <= 0xDFFF; i += 1) { emit($fromCharCode(i)); } for (var u = 0x10000; u <= 0x10FFFF; u += 1) { var cp = u - 0x10000; var high = (cp >> 10) + 0xD800; var low = (cp & 0x3FF) + 0xDC00; emit($fromCharCode(high, low)); } } function charsToMap(chars) { if (!IsArray(chars)) { throw new $TypeError('Assertion failed: `chars` must be an array'); } var map = { __proto__: null }; for (var i = 0; i < chars.length; i += 1) { var char = chars[i]; if (typeof char !== 'string' || (char.length !== 1 && char.length !== 2)) { throw new $TypeError('Assertion failed: `chars` must be an array of strings of length 1'); } map[char] = true; } return map; } module.exports = { CharSet: CharSet, from: function from(chars) { var map = charsToMap(chars); return new CharSet( function test(CharSetElement) { return hasOwn(map, CharSetElement); }, function yieldChar(emit) { // eslint-disable-next-line no-restricted-syntax for (var k in map) { if (hasOwn(map, k)) { emit(k); } } } ); }, getCodeUnits: function () { return new CharSet(testCodeUnits, yieldCodeUnits); }, getCodePoints: function () { return new CharSet(testCodePoints, yieldCodePoints); }, getNonSimpleCaseFoldingCodePoints: function () { return new CharSet( function test(CharSetElement) { return testCodePoints(CharSetElement) && !hasOwn(caseFolding.S, CharSetElement); }, function yieldChar(emit) { yieldCodePoints(function (CharSetElement) { if (!hasOwn(caseFolding.S, CharSetElement)) { emit(CharSetElement); } }); } ); } }; ljharb-es-abstract-babee05/helpers/DefineOwnProperty.js000066400000000000000000000027241516525472400233720ustar00rootroot00000000000000'use strict'; var hasPropertyDescriptors = require('has-property-descriptors'); var $defineProperty = require('es-define-property'); var hasArrayLengthDefineBug = hasPropertyDescriptors.hasArrayLengthDefineBug(); // eslint-disable-next-line global-require var isArray = hasArrayLengthDefineBug && require('../helpers/IsArray'); var callBound = require('call-bound'); var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); // eslint-disable-next-line max-params module.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; }; ljharb-es-abstract-babee05/helpers/IsArray.js000066400000000000000000000005241516525472400213150ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Array = GetIntrinsic('%Array%'); // eslint-disable-next-line global-require var toStr = !$Array.isArray && require('call-bound')('Object.prototype.toString'); module.exports = $Array.isArray || function IsArray(argument) { return toStr(argument) === '[object Array]'; }; ljharb-es-abstract-babee05/helpers/OwnPropertyKeys.js000066400000000000000000000001231516525472400231020ustar00rootroot00000000000000'use strict'; // TODO, semver-major: remove module.exports = require('own-keys'); ljharb-es-abstract-babee05/helpers/assertRecord.js000066400000000000000000000022341516525472400224030ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete this var $TypeError = require('es-errors/type'); var $SyntaxError = require('es-errors/syntax'); var isMatchRecord = require('./records/match-record'); var isPropertyDescriptor = require('./records/property-descriptor'); var isIteratorRecord = require('./records/iterator-record-2023'); var isPromiseCapabilityRecord = require('./records/promise-capability-record'); var isAsyncGeneratorRequestRecord = require('./records/async-generator-request-record'); var isRegExpRecord = require('./records/regexp-record'); var predicates = { 'Property Descriptor': isPropertyDescriptor, 'Match Record': isMatchRecord, 'Iterator Record': isIteratorRecord, 'PromiseCapability Record': isPromiseCapabilityRecord, 'AsyncGeneratorRequest Record': isAsyncGeneratorRequestRecord, 'RegExp Record': isRegExpRecord }; module.exports = function assertRecord(Type, recordType, argumentName, value) { var predicate = predicates[recordType]; if (typeof predicate !== 'function') { throw new $SyntaxError('unknown record type: ' + recordType); } if (!predicate(value)) { throw new $TypeError(argumentName + ' must be a ' + recordType); } }; ljharb-es-abstract-babee05/helpers/assign.js000066400000000000000000000007201516525472400212250ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var hasOwn = require('hasown'); var $assign = GetIntrinsic('%Object.assign%', true); module.exports = function assign(target, source) { if ($assign) { return $assign(target, source); } // eslint-disable-next-line no-restricted-syntax for (var key in source) { if (hasOwn(source, key)) { // eslint-disable-next-line no-param-reassign target[key] = source[key]; } } return target; }; ljharb-es-abstract-babee05/helpers/bytesAsFloat16.js000066400000000000000000000023201516525472400225060ustar00rootroot00000000000000'use strict'; var $pow = require('math-intrinsics/pow'); module.exports = function bytesAsFloat32(rawBytes) { // return new $Float16Array(new $Uint8Array(rawBytes).buffer)[0]; /* Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2019 binary16 value. If value is a NaN, return NaN. Return the Number value that corresponds to value. */ var bits = (rawBytes[1] << 8) | rawBytes[0]; // extract sign, exponent, mantissa var sign = bits & 0x8000 ? -1 : 1; var exponent = (bits & 0x7C00) >> 10; var mantissa = bits & 0x03FF; // zero (±0) if (exponent === 0 && mantissa === 0) { return sign === 1 ? 0 : -0; } // infinities if (exponent === 0x1F && mantissa === 0) { return sign === 1 ? Infinity : -Infinity; } // NaN if (exponent === 0x1F && mantissa !== 0) { return NaN; } // remove bias (15) exponent -= 15; // subnormals if (exponent === -15) { // value = sign * (mantissa) * 2^(1-bias-10) = mantissa * 2^(-14-10) return sign * mantissa * $pow(2, -24); } // normals // value = sign * (1 + mantissa/2^10) * 2^exponent return sign * (1 + (mantissa * $pow(2, -10))) * $pow(2, exponent); }; ljharb-es-abstract-babee05/helpers/bytesAsFloat32.js000066400000000000000000000022201516525472400225030ustar00rootroot00000000000000'use strict'; var $pow = require('math-intrinsics/pow'); module.exports = function bytesAsFloat32(rawBytes) { // return new $Float32Array(new $Uint8Array(rawBytes).buffer)[0]; /* Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2008 binary32 value. If value is an IEEE 754-2008 binary32 NaN value, return the NaN Number value. Return the Number value that corresponds to value. */ var sign = rawBytes[3] & 0x80 ? -1 : 1; // Check the sign bit var exponent = ((rawBytes[3] & 0x7F) << 1) | (rawBytes[2] >> 7); // Combine bits for exponent var mantissa = ((rawBytes[2] & 0x7F) << 16) | (rawBytes[1] << 8) | rawBytes[0]; // Combine bits for mantissa if (exponent === 0 && mantissa === 0) { return sign === 1 ? 0 : -0; } if (exponent === 0xFF && mantissa === 0) { return sign === 1 ? Infinity : -Infinity; } if (exponent === 0xFF && mantissa !== 0) { return NaN; } exponent -= 127; // subtract the bias if (exponent === -127) { return sign * mantissa * $pow(2, -126 - 23); } return sign * (1 + (mantissa * $pow(2, -23))) * $pow(2, exponent); }; ljharb-es-abstract-babee05/helpers/bytesAsFloat64.js000066400000000000000000000027461516525472400225250ustar00rootroot00000000000000'use strict'; var $pow = require('math-intrinsics/pow'); module.exports = function bytesAsFloat64(rawBytes) { // return new $Float64Array(new $Uint8Array(rawBytes).buffer)[0]; /* Let value be the byte elements of rawBytes concatenated and interpreted as a little-endian bit string encoding of an IEEE 754-2008 binary64 value. If value is an IEEE 754-2008 binary64 NaN value, return the NaN Number value. Return the Number value that corresponds to value. */ var sign = rawBytes[7] & 0x80 ? -1 : 1; // first bit var exponent = ((rawBytes[7] & 0x7F) << 4) // 7 bits from index 7 | ((rawBytes[6] & 0xF0) >> 4); // 4 bits from index 6 var mantissa = ((rawBytes[6] & 0x0F) * 0x1000000000000) // 4 bits from index 6 + (rawBytes[5] * 0x10000000000) // 8 bits from index 5 + (rawBytes[4] * 0x100000000) // 8 bits from index 4 + (rawBytes[3] * 0x1000000) // 8 bits from index 3 + (rawBytes[2] * 0x10000) // 8 bits from index 2 + (rawBytes[1] * 0x100) // 8 bits from index 1 + rawBytes[0]; // 8 bits from index 0 if (exponent === 0 && mantissa === 0) { return sign * 0; } if (exponent === 0x7FF && mantissa !== 0) { return NaN; } if (exponent === 0x7FF && mantissa === 0) { return sign * Infinity; } exponent -= 1023; // subtract the bias // Handle subnormal numbers if (exponent === -1023) { return sign * mantissa * 5e-324; // $pow(2, -1022 - 52) } return sign * (1 + (mantissa / 0x10000000000000)) * $pow(2, exponent); }; ljharb-es-abstract-babee05/helpers/bytesAsInteger.js000066400000000000000000000017501516525472400226750ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $pow = require('math-intrinsics/pow'); var $Number = GetIntrinsic('%Number%'); var $BigInt = GetIntrinsic('%BigInt%', true); module.exports = function bytesAsInteger(rawBytes, elementSize, isUnsigned, isBigInt) { var Z = isBigInt ? $BigInt : $Number; // this is common to both branches var intValue = Z(0); for (var i = 0; i < rawBytes.length; i++) { intValue += Z(rawBytes[i] * $pow(2, 8 * i)); } /* Let intValue be the byte elements of rawBytes concatenated and interpreted as a bit string encoding of an unsigned little-endian binary number. */ if (!isUnsigned) { // steps 5-6 // Let intValue be the byte elements of rawBytes concatenated and interpreted as a bit string encoding of a binary little-endian 2's complement number of bit length elementSize × 8. var bitLength = elementSize * 8; if (rawBytes[elementSize - 1] & 0x80) { intValue -= Z($pow(2, bitLength)); } } return intValue; // step 7 }; ljharb-es-abstract-babee05/helpers/callBind.js000066400000000000000000000001251516525472400214500ustar00rootroot00000000000000'use strict'; // TODO; semver-major: remove module.exports = require('call-bind'); ljharb-es-abstract-babee05/helpers/callBound.js000066400000000000000000000001261516525472400216440ustar00rootroot00000000000000'use strict'; // TODO; semver-major: remove module.exports = require('call-bound'); ljharb-es-abstract-babee05/helpers/caseFolding.json000066400000000000000000000535121516525472400225230ustar00rootroot00000000000000{ "C": { "a": "A", "b": "B", "c": "C", "d": "D", "e": "E", "f": "F", "g": "G", "h": "H", "i": "I", "j": "J", "k": "K", "l": "L", "m": "M", "n": "N", "o": "O", "p": "P", "q": "Q", "r": "R", "s": "ſ", "t": "T", "u": "U", "v": "V", "w": "W", "x": "X", "y": "Y", "z": "Z", "μ": "Μ", "à": "À", "á": "Á", "â": "Â", "ã": "Ã", "ä": "Ä", "å": "Å", "æ": "Æ", "ç": "Ç", "è": "È", "é": "É", "ê": "Ê", "ë": "Ë", "ì": "Ì", "í": "Í", "î": "Î", "ï": "Ï", "ð": "Ð", "ñ": "Ñ", "ò": "Ò", "ó": "Ó", "ô": "Ô", "õ": "Õ", "ö": "Ö", "ø": "Ø", "ù": "Ù", "ú": "Ú", "û": "Û", "ü": "Ü", "ý": "Ý", "þ": "Þ", "ā": "Ā", "ă": "Ă", "ą": "Ą", "ć": "Ć", "ĉ": "Ĉ", "ċ": "Ċ", "č": "Č", "ď": "Ď", "đ": "Đ", "ē": "Ē", "ĕ": "Ĕ", "ė": "Ė", "ę": "Ę", "ě": "Ě", "ĝ": "Ĝ", "ğ": "Ğ", "ġ": "Ġ", "ģ": "Ģ", "ĥ": "Ĥ", "ħ": "Ħ", "ĩ": "Ĩ", "ī": "Ī", "ĭ": "Ĭ", "į": "Į", "ij": "IJ", "ĵ": "Ĵ", "ķ": "Ķ", "ĺ": "Ĺ", "ļ": "Ļ", "ľ": "Ľ", "ŀ": "Ŀ", "ł": "Ł", "ń": "Ń", "ņ": "Ņ", "ň": "Ň", "ŋ": "Ŋ", "ō": "Ō", "ŏ": "Ŏ", "ő": "Ő", "œ": "Œ", "ŕ": "Ŕ", "ŗ": "Ŗ", "ř": "Ř", "ś": "Ś", "ŝ": "Ŝ", "ş": "Ş", "š": "Š", "ţ": "Ţ", "ť": "Ť", "ŧ": "Ŧ", "ũ": "Ũ", "ū": "Ū", "ŭ": "Ŭ", "ů": "Ů", "ű": "Ű", "ų": "Ų", "ŵ": "Ŵ", "ŷ": "Ŷ", "ÿ": "Ÿ", "ź": "Ź", "ż": "Ż", "ž": "Ž", "ɓ": "Ɓ", "ƃ": "Ƃ", "ƅ": "Ƅ", "ɔ": "Ɔ", "ƈ": "Ƈ", "ɖ": "Ɖ", "ɗ": "Ɗ", "ƌ": "Ƌ", "ǝ": "Ǝ", "ə": "Ə", "ɛ": "Ɛ", "ƒ": "Ƒ", "ɠ": "Ɠ", "ɣ": "Ɣ", "ɩ": "Ɩ", "ɨ": "Ɨ", "ƙ": "Ƙ", "ɯ": "Ɯ", "ɲ": "Ɲ", "ɵ": "Ɵ", "ơ": "Ơ", "ƣ": "Ƣ", "ƥ": "Ƥ", "ʀ": "Ʀ", "ƨ": "Ƨ", "ʃ": "Ʃ", "ƭ": "Ƭ", "ʈ": "Ʈ", "ư": "Ư", "ʊ": "Ʊ", "ʋ": "Ʋ", "ƴ": "Ƴ", "ƶ": "Ƶ", "ʒ": "Ʒ", "ƹ": "Ƹ", "ƽ": "Ƽ", "dž": "Dž", "lj": "Lj", "nj": "Nj", "ǎ": "Ǎ", "ǐ": "Ǐ", "ǒ": "Ǒ", "ǔ": "Ǔ", "ǖ": "Ǖ", "ǘ": "Ǘ", "ǚ": "Ǚ", "ǜ": "Ǜ", "ǟ": "Ǟ", "ǡ": "Ǡ", "ǣ": "Ǣ", "ǥ": "Ǥ", "ǧ": "Ǧ", "ǩ": "Ǩ", "ǫ": "Ǫ", "ǭ": "Ǭ", "ǯ": "Ǯ", "dz": "Dz", "ǵ": "Ǵ", "ƕ": "Ƕ", "ƿ": "Ƿ", "ǹ": "Ǹ", "ǻ": "Ǻ", "ǽ": "Ǽ", "ǿ": "Ǿ", "ȁ": "Ȁ", "ȃ": "Ȃ", "ȅ": "Ȅ", "ȇ": "Ȇ", "ȉ": "Ȉ", "ȋ": "Ȋ", "ȍ": "Ȍ", "ȏ": "Ȏ", "ȑ": "Ȑ", "ȓ": "Ȓ", "ȕ": "Ȕ", "ȗ": "Ȗ", "ș": "Ș", "ț": "Ț", "ȝ": "Ȝ", "ȟ": "Ȟ", "ƞ": "Ƞ", "ȣ": "Ȣ", "ȥ": "Ȥ", "ȧ": "Ȧ", "ȩ": "Ȩ", "ȫ": "Ȫ", "ȭ": "Ȭ", "ȯ": "Ȯ", "ȱ": "Ȱ", "ȳ": "Ȳ", "ⱥ": "Ⱥ", "ȼ": "Ȼ", "ƚ": "Ƚ", "ⱦ": "Ⱦ", "ɂ": "Ɂ", "ƀ": "Ƀ", "ʉ": "Ʉ", "ʌ": "Ʌ", "ɇ": "Ɇ", "ɉ": "Ɉ", "ɋ": "Ɋ", "ɍ": "Ɍ", "ɏ": "Ɏ", "ι": "ι", "ͱ": "Ͱ", "ͳ": "Ͳ", "ͷ": "Ͷ", "ϳ": "Ϳ", "ά": "Ά", "έ": "Έ", "ή": "Ή", "ί": "Ί", "ό": "Ό", "ύ": "Ύ", "ώ": "Ώ", "α": "Α", "β": "ϐ", "γ": "Γ", "δ": "Δ", "ε": "ϵ", "ζ": "Ζ", "η": "Η", "θ": "ϴ", "κ": "ϰ", "λ": "Λ", "ν": "Ν", "ξ": "Ξ", "ο": "Ο", "π": "ϖ", "ρ": "ϱ", "σ": "ς", "τ": "Τ", "υ": "Υ", "φ": "ϕ", "χ": "Χ", "ψ": "Ψ", "ω": "Ω", "ϊ": "Ϊ", "ϋ": "Ϋ", "ϗ": "Ϗ", "ϙ": "Ϙ", "ϛ": "Ϛ", "ϝ": "Ϝ", "ϟ": "Ϟ", "ϡ": "Ϡ", "ϣ": "Ϣ", "ϥ": "Ϥ", "ϧ": "Ϧ", "ϩ": "Ϩ", "ϫ": "Ϫ", "ϭ": "Ϭ", "ϯ": "Ϯ", "ϸ": "Ϸ", "ϲ": "Ϲ", "ϻ": "Ϻ", "ͻ": "Ͻ", "ͼ": "Ͼ", "ͽ": "Ͽ", "ѐ": "Ѐ", "ё": "Ё", "ђ": "Ђ", "ѓ": "Ѓ", "є": "Є", "ѕ": "Ѕ", "і": "І", "ї": "Ї", "ј": "Ј", "љ": "Љ", "њ": "Њ", "ћ": "Ћ", "ќ": "Ќ", "ѝ": "Ѝ", "ў": "Ў", "џ": "Џ", "а": "А", "б": "Б", "в": "ᲀ", "г": "Г", "д": "ᲁ", "е": "Е", "ж": "Ж", "з": "З", "и": "И", "й": "Й", "к": "К", "л": "Л", "м": "М", "н": "Н", "о": "ᲂ", "п": "П", "р": "Р", "с": "ᲃ", "т": "ᲅ", "у": "У", "ф": "Ф", "х": "Х", "ц": "Ц", "ч": "Ч", "ш": "Ш", "щ": "Щ", "ъ": "ᲆ", "ы": "Ы", "ь": "Ь", "э": "Э", "ю": "Ю", "я": "Я", "ѡ": "Ѡ", "ѣ": "ᲇ", "ѥ": "Ѥ", "ѧ": "Ѧ", "ѩ": "Ѩ", "ѫ": "Ѫ", "ѭ": "Ѭ", "ѯ": "Ѯ", "ѱ": "Ѱ", "ѳ": "Ѳ", "ѵ": "Ѵ", "ѷ": "Ѷ", "ѹ": "Ѹ", "ѻ": "Ѻ", "ѽ": "Ѽ", "ѿ": "Ѿ", "ҁ": "Ҁ", "ҋ": "Ҋ", "ҍ": "Ҍ", "ҏ": "Ҏ", "ґ": "Ґ", "ғ": "Ғ", "ҕ": "Ҕ", "җ": "Җ", "ҙ": "Ҙ", "қ": "Қ", "ҝ": "Ҝ", "ҟ": "Ҟ", "ҡ": "Ҡ", "ң": "Ң", "ҥ": "Ҥ", "ҧ": "Ҧ", "ҩ": "Ҩ", "ҫ": "Ҫ", "ҭ": "Ҭ", "ү": "Ү", "ұ": "Ұ", "ҳ": "Ҳ", "ҵ": "Ҵ", "ҷ": "Ҷ", "ҹ": "Ҹ", "һ": "Һ", "ҽ": "Ҽ", "ҿ": "Ҿ", "ӏ": "Ӏ", "ӂ": "Ӂ", "ӄ": "Ӄ", "ӆ": "Ӆ", "ӈ": "Ӈ", "ӊ": "Ӊ", "ӌ": "Ӌ", "ӎ": "Ӎ", "ӑ": "Ӑ", "ӓ": "Ӓ", "ӕ": "Ӕ", "ӗ": "Ӗ", "ә": "Ә", "ӛ": "Ӛ", "ӝ": "Ӝ", "ӟ": "Ӟ", "ӡ": "Ӡ", "ӣ": "Ӣ", "ӥ": "Ӥ", "ӧ": "Ӧ", "ө": "Ө", "ӫ": "Ӫ", "ӭ": "Ӭ", "ӯ": "Ӯ", "ӱ": "Ӱ", "ӳ": "Ӳ", "ӵ": "Ӵ", "ӷ": "Ӷ", "ӹ": "Ӹ", "ӻ": "Ӻ", "ӽ": "Ӽ", "ӿ": "Ӿ", "ԁ": "Ԁ", "ԃ": "Ԃ", "ԅ": "Ԅ", "ԇ": "Ԇ", "ԉ": "Ԉ", "ԋ": "Ԋ", "ԍ": "Ԍ", "ԏ": "Ԏ", "ԑ": "Ԑ", "ԓ": "Ԓ", "ԕ": "Ԕ", "ԗ": "Ԗ", "ԙ": "Ԙ", "ԛ": "Ԛ", "ԝ": "Ԝ", "ԟ": "Ԟ", "ԡ": "Ԡ", "ԣ": "Ԣ", "ԥ": "Ԥ", "ԧ": "Ԧ", "ԩ": "Ԩ", "ԫ": "Ԫ", "ԭ": "Ԭ", "ԯ": "Ԯ", "ա": "Ա", "բ": "Բ", "գ": "Գ", "դ": "Դ", "ե": "Ե", "զ": "Զ", "է": "Է", "ը": "Ը", "թ": "Թ", "ժ": "Ժ", "ի": "Ի", "լ": "Լ", "խ": "Խ", "ծ": "Ծ", "կ": "Կ", "հ": "Հ", "ձ": "Ձ", "ղ": "Ղ", "ճ": "Ճ", "մ": "Մ", "յ": "Յ", "ն": "Ն", "շ": "Շ", "ո": "Ո", "չ": "Չ", "պ": "Պ", "ջ": "Ջ", "ռ": "Ռ", "ս": "Ս", "վ": "Վ", "տ": "Տ", "ր": "Ր", "ց": "Ց", "ւ": "Ւ", "փ": "Փ", "ք": "Ք", "օ": "Օ", "ֆ": "Ֆ", "ⴀ": "Ⴀ", "ⴁ": "Ⴁ", "ⴂ": "Ⴂ", "ⴃ": "Ⴃ", "ⴄ": "Ⴄ", "ⴅ": "Ⴅ", "ⴆ": "Ⴆ", "ⴇ": "Ⴇ", "ⴈ": "Ⴈ", "ⴉ": "Ⴉ", "ⴊ": "Ⴊ", "ⴋ": "Ⴋ", "ⴌ": "Ⴌ", "ⴍ": "Ⴍ", "ⴎ": "Ⴎ", "ⴏ": "Ⴏ", "ⴐ": "Ⴐ", "ⴑ": "Ⴑ", "ⴒ": "Ⴒ", "ⴓ": "Ⴓ", "ⴔ": "Ⴔ", "ⴕ": "Ⴕ", "ⴖ": "Ⴖ", "ⴗ": "Ⴗ", "ⴘ": "Ⴘ", "ⴙ": "Ⴙ", "ⴚ": "Ⴚ", "ⴛ": "Ⴛ", "ⴜ": "Ⴜ", "ⴝ": "Ⴝ", "ⴞ": "Ⴞ", "ⴟ": "Ⴟ", "ⴠ": "Ⴠ", "ⴡ": "Ⴡ", "ⴢ": "Ⴢ", "ⴣ": "Ⴣ", "ⴤ": "Ⴤ", "ⴥ": "Ⴥ", "ⴧ": "Ⴧ", "ⴭ": "Ⴭ", "Ᏸ": "ᏸ", "Ᏹ": "ᏹ", "Ᏺ": "ᏺ", "Ᏻ": "ᏻ", "Ᏼ": "ᏼ", "Ᏽ": "ᏽ", "ꙋ": "Ꙋ", "ა": "Ა", "ბ": "Ბ", "გ": "Გ", "დ": "Დ", "ე": "Ე", "ვ": "Ვ", "ზ": "Ზ", "თ": "Თ", "ი": "Ი", "კ": "Კ", "ლ": "Ლ", "მ": "Მ", "ნ": "Ნ", "ო": "Ო", "პ": "Პ", "ჟ": "Ჟ", "რ": "Რ", "ს": "Ს", "ტ": "Ტ", "უ": "Უ", "ფ": "Ფ", "ქ": "Ქ", "ღ": "Ღ", "ყ": "Ყ", "შ": "Შ", "ჩ": "Ჩ", "ც": "Ც", "ძ": "Ძ", "წ": "Წ", "ჭ": "Ჭ", "ხ": "Ხ", "ჯ": "Ჯ", "ჰ": "Ჰ", "ჱ": "Ჱ", "ჲ": "Ჲ", "ჳ": "Ჳ", "ჴ": "Ჴ", "ჵ": "Ჵ", "ჶ": "Ჶ", "ჷ": "Ჷ", "ჸ": "Ჸ", "ჹ": "Ჹ", "ჺ": "Ჺ", "ჽ": "Ჽ", "ჾ": "Ჾ", "ჿ": "Ჿ", "ḁ": "Ḁ", "ḃ": "Ḃ", "ḅ": "Ḅ", "ḇ": "Ḇ", "ḉ": "Ḉ", "ḋ": "Ḋ", "ḍ": "Ḍ", "ḏ": "Ḏ", "ḑ": "Ḑ", "ḓ": "Ḓ", "ḕ": "Ḕ", "ḗ": "Ḗ", "ḙ": "Ḙ", "ḛ": "Ḛ", "ḝ": "Ḝ", "ḟ": "Ḟ", "ḡ": "Ḡ", "ḣ": "Ḣ", "ḥ": "Ḥ", "ḧ": "Ḧ", "ḩ": "Ḩ", "ḫ": "Ḫ", "ḭ": "Ḭ", "ḯ": "Ḯ", "ḱ": "Ḱ", "ḳ": "Ḳ", "ḵ": "Ḵ", "ḷ": "Ḷ", "ḹ": "Ḹ", "ḻ": "Ḻ", "ḽ": "Ḽ", "ḿ": "Ḿ", "ṁ": "Ṁ", "ṃ": "Ṃ", "ṅ": "Ṅ", "ṇ": "Ṇ", "ṉ": "Ṉ", "ṋ": "Ṋ", "ṍ": "Ṍ", "ṏ": "Ṏ", "ṑ": "Ṑ", "ṓ": "Ṓ", "ṕ": "Ṕ", "ṗ": "Ṗ", "ṙ": "Ṙ", "ṛ": "Ṛ", "ṝ": "Ṝ", "ṟ": "Ṟ", "ṡ": "ẛ", "ṣ": "Ṣ", "ṥ": "Ṥ", "ṧ": "Ṧ", "ṩ": "Ṩ", "ṫ": "Ṫ", "ṭ": "Ṭ", "ṯ": "Ṯ", "ṱ": "Ṱ", "ṳ": "Ṳ", "ṵ": "Ṵ", "ṷ": "Ṷ", "ṹ": "Ṹ", "ṻ": "Ṻ", "ṽ": "Ṽ", "ṿ": "Ṿ", "ẁ": "Ẁ", "ẃ": "Ẃ", "ẅ": "Ẅ", "ẇ": "Ẇ", "ẉ": "Ẉ", "ẋ": "Ẋ", "ẍ": "Ẍ", "ẏ": "Ẏ", "ẑ": "Ẑ", "ẓ": "Ẓ", "ẕ": "Ẕ", "ạ": "Ạ", "ả": "Ả", "ấ": "Ấ", "ầ": "Ầ", "ẩ": "Ẩ", "ẫ": "Ẫ", "ậ": "Ậ", "ắ": "Ắ", "ằ": "Ằ", "ẳ": "Ẳ", "ẵ": "Ẵ", "ặ": "Ặ", "ẹ": "Ẹ", "ẻ": "Ẻ", "ẽ": "Ẽ", "ế": "Ế", "ề": "Ề", "ể": "Ể", "ễ": "Ễ", "ệ": "Ệ", "ỉ": "Ỉ", "ị": "Ị", "ọ": "Ọ", "ỏ": "Ỏ", "ố": "Ố", "ồ": "Ồ", "ổ": "Ổ", "ỗ": "Ỗ", "ộ": "Ộ", "ớ": "Ớ", "ờ": "Ờ", "ở": "Ở", "ỡ": "Ỡ", "ợ": "Ợ", "ụ": "Ụ", "ủ": "Ủ", "ứ": "Ứ", "ừ": "Ừ", "ử": "Ử", "ữ": "Ữ", "ự": "Ự", "ỳ": "Ỳ", "ỵ": "Ỵ", "ỷ": "Ỷ", "ỹ": "Ỹ", "ỻ": "Ỻ", "ỽ": "Ỽ", "ỿ": "Ỿ", "ἀ": "Ἀ", "ἁ": "Ἁ", "ἂ": "Ἂ", "ἃ": "Ἃ", "ἄ": "Ἄ", "ἅ": "Ἅ", "ἆ": "Ἆ", "ἇ": "Ἇ", "ἐ": "Ἐ", "ἑ": "Ἑ", "ἒ": "Ἒ", "ἓ": "Ἓ", "ἔ": "Ἔ", "ἕ": "Ἕ", "ἠ": "Ἠ", "ἡ": "Ἡ", "ἢ": "Ἢ", "ἣ": "Ἣ", "ἤ": "Ἤ", "ἥ": "Ἥ", "ἦ": "Ἦ", "ἧ": "Ἧ", "ἰ": "Ἰ", "ἱ": "Ἱ", "ἲ": "Ἲ", "ἳ": "Ἳ", "ἴ": "Ἴ", "ἵ": "Ἵ", "ἶ": "Ἶ", "ἷ": "Ἷ", "ὀ": "Ὀ", "ὁ": "Ὁ", "ὂ": "Ὂ", "ὃ": "Ὃ", "ὄ": "Ὄ", "ὅ": "Ὅ", "ὑ": "Ὑ", "ὓ": "Ὓ", "ὕ": "Ὕ", "ὗ": "Ὗ", "ὠ": "Ὠ", "ὡ": "Ὡ", "ὢ": "Ὢ", "ὣ": "Ὣ", "ὤ": "Ὤ", "ὥ": "Ὥ", "ὦ": "Ὦ", "ὧ": "Ὧ", "ᾰ": "Ᾰ", "ᾱ": "Ᾱ", "ὰ": "Ὰ", "ά": "Ά", "ὲ": "Ὲ", "έ": "Έ", "ὴ": "Ὴ", "ή": "Ή", "ῐ": "Ῐ", "ῑ": "Ῑ", "ὶ": "Ὶ", "ί": "Ί", "ῠ": "Ῠ", "ῡ": "Ῡ", "ὺ": "Ὺ", "ύ": "Ύ", "ῥ": "Ῥ", "ὸ": "Ὸ", "ό": "Ό", "ὼ": "Ὼ", "ώ": "Ώ", "ⅎ": "Ⅎ", "ⅰ": "Ⅰ", "ⅱ": "Ⅱ", "ⅲ": "Ⅲ", "ⅳ": "Ⅳ", "ⅴ": "Ⅴ", "ⅵ": "Ⅵ", "ⅶ": "Ⅶ", "ⅷ": "Ⅷ", "ⅸ": "Ⅸ", "ⅹ": "Ⅹ", "ⅺ": "Ⅺ", "ⅻ": "Ⅻ", "ⅼ": "Ⅼ", "ⅽ": "Ⅽ", "ⅾ": "Ⅾ", "ⅿ": "Ⅿ", "ↄ": "Ↄ", "ⓐ": "Ⓐ", "ⓑ": "Ⓑ", "ⓒ": "Ⓒ", "ⓓ": "Ⓓ", "ⓔ": "Ⓔ", "ⓕ": "Ⓕ", "ⓖ": "Ⓖ", "ⓗ": "Ⓗ", "ⓘ": "Ⓘ", "ⓙ": "Ⓙ", "ⓚ": "Ⓚ", "ⓛ": "Ⓛ", "ⓜ": "Ⓜ", "ⓝ": "Ⓝ", "ⓞ": "Ⓞ", "ⓟ": "Ⓟ", "ⓠ": "Ⓠ", "ⓡ": "Ⓡ", "ⓢ": "Ⓢ", "ⓣ": "Ⓣ", "ⓤ": "Ⓤ", "ⓥ": "Ⓥ", "ⓦ": "Ⓦ", "ⓧ": "Ⓧ", "ⓨ": "Ⓨ", "ⓩ": "Ⓩ", "ⰰ": "Ⰰ", "ⰱ": "Ⰱ", "ⰲ": "Ⰲ", "ⰳ": "Ⰳ", "ⰴ": "Ⰴ", "ⰵ": "Ⰵ", "ⰶ": "Ⰶ", "ⰷ": "Ⰷ", "ⰸ": "Ⰸ", "ⰹ": "Ⰹ", "ⰺ": "Ⰺ", "ⰻ": "Ⰻ", "ⰼ": "Ⰼ", "ⰽ": "Ⰽ", "ⰾ": "Ⰾ", "ⰿ": "Ⰿ", "ⱀ": "Ⱀ", "ⱁ": "Ⱁ", "ⱂ": "Ⱂ", "ⱃ": "Ⱃ", "ⱄ": "Ⱄ", "ⱅ": "Ⱅ", "ⱆ": "Ⱆ", "ⱇ": "Ⱇ", "ⱈ": "Ⱈ", "ⱉ": "Ⱉ", "ⱊ": "Ⱊ", "ⱋ": "Ⱋ", "ⱌ": "Ⱌ", "ⱍ": "Ⱍ", "ⱎ": "Ⱎ", "ⱏ": "Ⱏ", "ⱐ": "Ⱐ", "ⱑ": "Ⱑ", "ⱒ": "Ⱒ", "ⱓ": "Ⱓ", "ⱔ": "Ⱔ", "ⱕ": "Ⱕ", "ⱖ": "Ⱖ", "ⱗ": "Ⱗ", "ⱘ": "Ⱘ", "ⱙ": "Ⱙ", "ⱚ": "Ⱚ", "ⱛ": "Ⱛ", "ⱜ": "Ⱜ", "ⱝ": "Ⱝ", "ⱞ": "Ⱞ", "ⱟ": "Ⱟ", "ⱡ": "Ⱡ", "ɫ": "Ɫ", "ᵽ": "Ᵽ", "ɽ": "Ɽ", "ⱨ": "Ⱨ", "ⱪ": "Ⱪ", "ⱬ": "Ⱬ", "ɑ": "Ɑ", "ɱ": "Ɱ", "ɐ": "Ɐ", "ɒ": "Ɒ", "ⱳ": "Ⱳ", "ⱶ": "Ⱶ", "ȿ": "Ȿ", "ɀ": "Ɀ", "ⲁ": "Ⲁ", "ⲃ": "Ⲃ", "ⲅ": "Ⲅ", "ⲇ": "Ⲇ", "ⲉ": "Ⲉ", "ⲋ": "Ⲋ", "ⲍ": "Ⲍ", "ⲏ": "Ⲏ", "ⲑ": "Ⲑ", "ⲓ": "Ⲓ", "ⲕ": "Ⲕ", "ⲗ": "Ⲗ", "ⲙ": "Ⲙ", "ⲛ": "Ⲛ", "ⲝ": "Ⲝ", "ⲟ": "Ⲟ", "ⲡ": "Ⲡ", "ⲣ": "Ⲣ", "ⲥ": "Ⲥ", "ⲧ": "Ⲧ", "ⲩ": "Ⲩ", "ⲫ": "Ⲫ", "ⲭ": "Ⲭ", "ⲯ": "Ⲯ", "ⲱ": "Ⲱ", "ⲳ": "Ⲳ", "ⲵ": "Ⲵ", "ⲷ": "Ⲷ", "ⲹ": "Ⲹ", "ⲻ": "Ⲻ", "ⲽ": "Ⲽ", "ⲿ": "Ⲿ", "ⳁ": "Ⳁ", "ⳃ": "Ⳃ", "ⳅ": "Ⳅ", "ⳇ": "Ⳇ", "ⳉ": "Ⳉ", "ⳋ": "Ⳋ", "ⳍ": "Ⳍ", "ⳏ": "Ⳏ", "ⳑ": "Ⳑ", "ⳓ": "Ⳓ", "ⳕ": "Ⳕ", "ⳗ": "Ⳗ", "ⳙ": "Ⳙ", "ⳛ": "Ⳛ", "ⳝ": "Ⳝ", "ⳟ": "Ⳟ", "ⳡ": "Ⳡ", "ⳣ": "Ⳣ", "ⳬ": "Ⳬ", "ⳮ": "Ⳮ", "ⳳ": "Ⳳ", "ꙁ": "Ꙁ", "ꙃ": "Ꙃ", "ꙅ": "Ꙅ", "ꙇ": "Ꙇ", "ꙉ": "Ꙉ", "ꙍ": "Ꙍ", "ꙏ": "Ꙏ", "ꙑ": "Ꙑ", "ꙓ": "Ꙓ", "ꙕ": "Ꙕ", "ꙗ": "Ꙗ", "ꙙ": "Ꙙ", "ꙛ": "Ꙛ", "ꙝ": "Ꙝ", "ꙟ": "Ꙟ", "ꙡ": "Ꙡ", "ꙣ": "Ꙣ", "ꙥ": "Ꙥ", "ꙧ": "Ꙧ", "ꙩ": "Ꙩ", "ꙫ": "Ꙫ", "ꙭ": "Ꙭ", "ꚁ": "Ꚁ", "ꚃ": "Ꚃ", "ꚅ": "Ꚅ", "ꚇ": "Ꚇ", "ꚉ": "Ꚉ", "ꚋ": "Ꚋ", "ꚍ": "Ꚍ", "ꚏ": "Ꚏ", "ꚑ": "Ꚑ", "ꚓ": "Ꚓ", "ꚕ": "Ꚕ", "ꚗ": "Ꚗ", "ꚙ": "Ꚙ", "ꚛ": "Ꚛ", "ꜣ": "Ꜣ", "ꜥ": "Ꜥ", "ꜧ": "Ꜧ", "ꜩ": "Ꜩ", "ꜫ": "Ꜫ", "ꜭ": "Ꜭ", "ꜯ": "Ꜯ", "ꜳ": "Ꜳ", "ꜵ": "Ꜵ", "ꜷ": "Ꜷ", "ꜹ": "Ꜹ", "ꜻ": "Ꜻ", "ꜽ": "Ꜽ", "ꜿ": "Ꜿ", "ꝁ": "Ꝁ", "ꝃ": "Ꝃ", "ꝅ": "Ꝅ", "ꝇ": "Ꝇ", "ꝉ": "Ꝉ", "ꝋ": "Ꝋ", "ꝍ": "Ꝍ", "ꝏ": "Ꝏ", "ꝑ": "Ꝑ", "ꝓ": "Ꝓ", "ꝕ": "Ꝕ", "ꝗ": "Ꝗ", "ꝙ": "Ꝙ", "ꝛ": "Ꝛ", "ꝝ": "Ꝝ", "ꝟ": "Ꝟ", "ꝡ": "Ꝡ", "ꝣ": "Ꝣ", "ꝥ": "Ꝥ", "ꝧ": "Ꝧ", "ꝩ": "Ꝩ", "ꝫ": "Ꝫ", "ꝭ": "Ꝭ", "ꝯ": "Ꝯ", "ꝺ": "Ꝺ", "ꝼ": "Ꝼ", "ᵹ": "Ᵹ", "ꝿ": "Ꝿ", "ꞁ": "Ꞁ", "ꞃ": "Ꞃ", "ꞅ": "Ꞅ", "ꞇ": "Ꞇ", "ꞌ": "Ꞌ", "ɥ": "Ɥ", "ꞑ": "Ꞑ", "ꞓ": "Ꞓ", "ꞗ": "Ꞗ", "ꞙ": "Ꞙ", "ꞛ": "Ꞛ", "ꞝ": "Ꞝ", "ꞟ": "Ꞟ", "ꞡ": "Ꞡ", "ꞣ": "Ꞣ", "ꞥ": "Ꞥ", "ꞧ": "Ꞧ", "ꞩ": "Ꞩ", "ɦ": "Ɦ", "ɜ": "Ɜ", "ɡ": "Ɡ", "ɬ": "Ɬ", "ɪ": "Ɪ", "ʞ": "Ʞ", "ʇ": "Ʇ", "ʝ": "Ʝ", "ꭓ": "Ꭓ", "ꞵ": "Ꞵ", "ꞷ": "Ꞷ", "ꞹ": "Ꞹ", "ꞻ": "Ꞻ", "ꞽ": "Ꞽ", "ꞿ": "Ꞿ", "ꟁ": "Ꟁ", "ꟃ": "Ꟃ", "ꞔ": "Ꞔ", "ʂ": "Ʂ", "ᶎ": "Ᶎ", "ꟈ": "Ꟈ", "ꟊ": "Ꟊ", "ꟑ": "Ꟑ", "ꟗ": "Ꟗ", "ꟙ": "Ꟙ", "ꟶ": "Ꟶ", "Ꭰ": "ꭰ", "Ꭱ": "ꭱ", "Ꭲ": "ꭲ", "Ꭳ": "ꭳ", "Ꭴ": "ꭴ", "Ꭵ": "ꭵ", "Ꭶ": "ꭶ", "Ꭷ": "ꭷ", "Ꭸ": "ꭸ", "Ꭹ": "ꭹ", "Ꭺ": "ꭺ", "Ꭻ": "ꭻ", "Ꭼ": "ꭼ", "Ꭽ": "ꭽ", "Ꭾ": "ꭾ", "Ꭿ": "ꭿ", "Ꮀ": "ꮀ", "Ꮁ": "ꮁ", "Ꮂ": "ꮂ", "Ꮃ": "ꮃ", "Ꮄ": "ꮄ", "Ꮅ": "ꮅ", "Ꮆ": "ꮆ", "Ꮇ": "ꮇ", "Ꮈ": "ꮈ", "Ꮉ": "ꮉ", "Ꮊ": "ꮊ", "Ꮋ": "ꮋ", "Ꮌ": "ꮌ", "Ꮍ": "ꮍ", "Ꮎ": "ꮎ", "Ꮏ": "ꮏ", "Ꮐ": "ꮐ", "Ꮑ": "ꮑ", "Ꮒ": "ꮒ", "Ꮓ": "ꮓ", "Ꮔ": "ꮔ", "Ꮕ": "ꮕ", "Ꮖ": "ꮖ", "Ꮗ": "ꮗ", "Ꮘ": "ꮘ", "Ꮙ": "ꮙ", "Ꮚ": "ꮚ", "Ꮛ": "ꮛ", "Ꮜ": "ꮜ", "Ꮝ": "ꮝ", "Ꮞ": "ꮞ", "Ꮟ": "ꮟ", "Ꮠ": "ꮠ", "Ꮡ": "ꮡ", "Ꮢ": "ꮢ", "Ꮣ": "ꮣ", "Ꮤ": "ꮤ", "Ꮥ": "ꮥ", "Ꮦ": "ꮦ", "Ꮧ": "ꮧ", "Ꮨ": "ꮨ", "Ꮩ": "ꮩ", "Ꮪ": "ꮪ", "Ꮫ": "ꮫ", "Ꮬ": "ꮬ", "Ꮭ": "ꮭ", "Ꮮ": "ꮮ", "Ꮯ": "ꮯ", "Ꮰ": "ꮰ", "Ꮱ": "ꮱ", "Ꮲ": "ꮲ", "Ꮳ": "ꮳ", "Ꮴ": "ꮴ", "Ꮵ": "ꮵ", "Ꮶ": "ꮶ", "Ꮷ": "ꮷ", "Ꮸ": "ꮸ", "Ꮹ": "ꮹ", "Ꮺ": "ꮺ", "Ꮻ": "ꮻ", "Ꮼ": "ꮼ", "Ꮽ": "ꮽ", "Ꮾ": "ꮾ", "Ꮿ": "ꮿ", "a": "A", "b": "B", "c": "C", "d": "D", "e": "E", "f": "F", "g": "G", "h": "H", "i": "I", "j": "J", "k": "K", "l": "L", "m": "M", "n": "N", "o": "O", "p": "P", "q": "Q", "r": "R", "s": "S", "t": "T", "u": "U", "v": "V", "w": "W", "x": "X", "y": "Y", "z": "Z", "𐐨": "𐐀", "𐐩": "𐐁", "𐐪": "𐐂", "𐐫": "𐐃", "𐐬": "𐐄", "𐐭": "𐐅", "𐐮": "𐐆", "𐐯": "𐐇", "𐐰": "𐐈", "𐐱": "𐐉", "𐐲": "𐐊", "𐐳": "𐐋", "𐐴": "𐐌", "𐐵": "𐐍", "𐐶": "𐐎", "𐐷": "𐐏", "𐐸": "𐐐", "𐐹": "𐐑", "𐐺": "𐐒", "𐐻": "𐐓", "𐐼": "𐐔", "𐐽": "𐐕", "𐐾": "𐐖", "𐐿": "𐐗", "𐑀": "𐐘", "𐑁": "𐐙", "𐑂": "𐐚", "𐑃": "𐐛", "𐑄": "𐐜", "𐑅": "𐐝", "𐑆": "𐐞", "𐑇": "𐐟", "𐑈": "𐐠", "𐑉": "𐐡", "𐑊": "𐐢", "𐑋": "𐐣", "𐑌": "𐐤", "𐑍": "𐐥", "𐑎": "𐐦", "𐑏": "𐐧", "𐓘": "𐒰", "𐓙": "𐒱", "𐓚": "𐒲", "𐓛": "𐒳", "𐓜": "𐒴", "𐓝": "𐒵", "𐓞": "𐒶", "𐓟": "𐒷", "𐓠": "𐒸", "𐓡": "𐒹", "𐓢": "𐒺", "𐓣": "𐒻", "𐓤": "𐒼", "𐓥": "𐒽", "𐓦": "𐒾", "𐓧": "𐒿", "𐓨": "𐓀", "𐓩": "𐓁", "𐓪": "𐓂", "𐓫": "𐓃", "𐓬": "𐓄", "𐓭": "𐓅", "𐓮": "𐓆", "𐓯": "𐓇", "𐓰": "𐓈", "𐓱": "𐓉", "𐓲": "𐓊", "𐓳": "𐓋", "𐓴": "𐓌", "𐓵": "𐓍", "𐓶": "𐓎", "𐓷": "𐓏", "𐓸": "𐓐", "𐓹": "𐓑", "𐓺": "𐓒", "𐓻": "𐓓", "𐖗": "𐕰", "𐖘": "𐕱", "𐖙": "𐕲", "𐖚": "𐕳", "𐖛": "𐕴", "𐖜": "𐕵", "𐖝": "𐕶", "𐖞": "𐕷", "𐖟": "𐕸", "𐖠": "𐕹", "𐖡": "𐕺", "𐖣": "𐕼", "𐖤": "𐕽", "𐖥": "𐕾", "𐖦": "𐕿", "𐖧": "𐖀", "𐖨": "𐖁", "𐖩": "𐖂", "𐖪": "𐖃", "𐖫": "𐖄", "𐖬": "𐖅", "𐖭": "𐖆", "𐖮": "𐖇", "𐖯": "𐖈", "𐖰": "𐖉", "𐖱": "𐖊", "𐖳": "𐖌", "𐖴": "𐖍", "𐖵": "𐖎", "𐖶": "𐖏", "𐖷": "𐖐", "𐖸": "𐖑", "𐖹": "𐖒", "𐖻": "𐖔", "𐖼": "𐖕", "𐳀": "𐲀", "𐳁": "𐲁", "𐳂": "𐲂", "𐳃": "𐲃", "𐳄": "𐲄", "𐳅": "𐲅", "𐳆": "𐲆", "𐳇": "𐲇", "𐳈": "𐲈", "𐳉": "𐲉", "𐳊": "𐲊", "𐳋": "𐲋", "𐳌": "𐲌", "𐳍": "𐲍", "𐳎": "𐲎", "𐳏": "𐲏", "𐳐": "𐲐", "𐳑": "𐲑", "𐳒": "𐲒", "𐳓": "𐲓", "𐳔": "𐲔", "𐳕": "𐲕", "𐳖": "𐲖", "𐳗": "𐲗", "𐳘": "𐲘", "𐳙": "𐲙", "𐳚": "𐲚", "𐳛": "𐲛", "𐳜": "𐲜", "𐳝": "𐲝", "𐳞": "𐲞", "𐳟": "𐲟", "𐳠": "𐲠", "𐳡": "𐲡", "𐳢": "𐲢", "𐳣": "𐲣", "𐳤": "𐲤", "𐳥": "𐲥", "𐳦": "𐲦", "𐳧": "𐲧", "𐳨": "𐲨", "𐳩": "𐲩", "𐳪": "𐲪", "𐳫": "𐲫", "𐳬": "𐲬", "𐳭": "𐲭", "𐳮": "𐲮", "𐳯": "𐲯", "𐳰": "𐲰", "𐳱": "𐲱", "𐳲": "𐲲", "𑣀": "𑢠", "𑣁": "𑢡", "𑣂": "𑢢", "𑣃": "𑢣", "𑣄": "𑢤", "𑣅": "𑢥", "𑣆": "𑢦", "𑣇": "𑢧", "𑣈": "𑢨", "𑣉": "𑢩", "𑣊": "𑢪", "𑣋": "𑢫", "𑣌": "𑢬", "𑣍": "𑢭", "𑣎": "𑢮", "𑣏": "𑢯", "𑣐": "𑢰", "𑣑": "𑢱", "𑣒": "𑢲", "𑣓": "𑢳", "𑣔": "𑢴", "𑣕": "𑢵", "𑣖": "𑢶", "𑣗": "𑢷", "𑣘": "𑢸", "𑣙": "𑢹", "𑣚": "𑢺", "𑣛": "𑢻", "𑣜": "𑢼", "𑣝": "𑢽", "𑣞": "𑢾", "𑣟": "𑢿", "𖹠": "𖹀", "𖹡": "𖹁", "𖹢": "𖹂", "𖹣": "𖹃", "𖹤": "𖹄", "𖹥": "𖹅", "𖹦": "𖹆", "𖹧": "𖹇", "𖹨": "𖹈", "𖹩": "𖹉", "𖹪": "𖹊", "𖹫": "𖹋", "𖹬": "𖹌", "𖹭": "𖹍", "𖹮": "𖹎", "𖹯": "𖹏", "𖹰": "𖹐", "𖹱": "𖹑", "𖹲": "𖹒", "𖹳": "𖹓", "𖹴": "𖹔", "𖹵": "𖹕", "𖹶": "𖹖", "𖹷": "𖹗", "𖹸": "𖹘", "𖹹": "𖹙", "𖹺": "𖹚", "𖹻": "𖹛", "𖹼": "𖹜", "𖹽": "𖹝", "𖹾": "𖹞", "𖹿": "𖹟", "𞤢": "𞤀", "𞤣": "𞤁", "𞤤": "𞤂", "𞤥": "𞤃", "𞤦": "𞤄", "𞤧": "𞤅", "𞤨": "𞤆", "𞤩": "𞤇", "𞤪": "𞤈", "𞤫": "𞤉", "𞤬": "𞤊", "𞤭": "𞤋", "𞤮": "𞤌", "𞤯": "𞤍", "𞤰": "𞤎", "𞤱": "𞤏", "𞤲": "𞤐", "𞤳": "𞤑", "𞤴": "𞤒", "𞤵": "𞤓", "𞤶": "𞤔", "𞤷": "𞤕", "𞤸": "𞤖", "𞤹": "𞤗", "𞤺": "𞤘", "𞤻": "𞤙", "𞤼": "𞤚", "𞤽": "𞤛", "𞤾": "𞤜", "𞤿": "𞤝", "𞥀": "𞤞", "𞥁": "𞤟", "𞥂": "𞤠", "𞥃": "𞤡" }, "S": { "ß": "ẞ", "ᾀ": "ᾈ", "ᾁ": "ᾉ", "ᾂ": "ᾊ", "ᾃ": "ᾋ", "ᾄ": "ᾌ", "ᾅ": "ᾍ", "ᾆ": "ᾎ", "ᾇ": "ᾏ", "ᾐ": "ᾘ", "ᾑ": "ᾙ", "ᾒ": "ᾚ", "ᾓ": "ᾛ", "ᾔ": "ᾜ", "ᾕ": "ᾝ", "ᾖ": "ᾞ", "ᾗ": "ᾟ", "ᾠ": "ᾨ", "ᾡ": "ᾩ", "ᾢ": "ᾪ", "ᾣ": "ᾫ", "ᾤ": "ᾬ", "ᾥ": "ᾭ", "ᾦ": "ᾮ", "ᾧ": "ᾯ", "ᾳ": "ᾼ", "ῃ": "ῌ", "ῳ": "ῼ" } }ljharb-es-abstract-babee05/helpers/defaultEndianness.js000066400000000000000000000011361516525472400233770ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Uint8Array = GetIntrinsic('%Uint8Array%', true); var $Uint32Array = GetIntrinsic('%Uint32Array%', true); var typedArrayBuffer = require('typed-array-buffer'); var uInt32 = $Uint32Array && new $Uint32Array([0x12345678]); var uInt8 = uInt32 && new $Uint8Array(typedArrayBuffer(uInt32)); module.exports = uInt8 ? uInt8[0] === 0x78 ? 'little' : uInt8[0] === 0x12 ? 'big' : uInt8[0] === 0x34 ? 'mixed' // https://developer.mozilla.org/en-US/docs/Glossary/Endianness : 'unknown' // ??? : 'indeterminate'; // no way to know ljharb-es-abstract-babee05/helpers/every.js000066400000000000000000000003011516525472400210660ustar00rootroot00000000000000'use strict'; module.exports = function every(array, predicate) { for (var i = 0; i < array.length; i += 1) { if (!predicate(array[i], i, array)) { return false; } } return true; }; ljharb-es-abstract-babee05/helpers/forEach.js000066400000000000000000000002761516525472400213160ustar00rootroot00000000000000'use strict'; module.exports = function forEach(array, callback) { for (var i = 0; i < array.length; i += 1) { callback(array[i], i, array); // eslint-disable-line callback-return } }; ljharb-es-abstract-babee05/helpers/fractionToBinaryString.js000066400000000000000000000015151516525472400244100ustar00rootroot00000000000000'use strict'; var MAX_ITER = 1075; // 1023+52 (subnormals) => BIAS+NUM_SIGNFICAND_BITS-1 var maxBits = 54; // only 53 bits for fraction module.exports = function fractionToBitString(x) { var str = ''; if (x === 0) { return str; } var j = MAX_ITER; var y; // Each time we multiply by 2 and find a ones digit, add a '1'; otherwise, add a '0'.. for (var i = 0; i < MAX_ITER; i += 1) { y = x * 2; if (y >= 1) { x = y - 1; // eslint-disable-line no-param-reassign str += '1'; if (j === MAX_ITER) { j = i; // first 1 } } else { x = y; // eslint-disable-line no-param-reassign str += '0'; } // Stop when we have no more decimals to process or in the event we found a fraction which cannot be represented in a finite number of bits... if (y === 1 || i - j > maxBits) { return str; } } return str; }; ljharb-es-abstract-babee05/helpers/fromPropertyDescriptor.js000066400000000000000000000011041516525472400245050ustar00rootroot00000000000000'use strict'; module.exports = function fromPropertyDescriptor(Desc) { if (typeof Desc === 'undefined') { return Desc; } var obj = {}; if ('[[Value]]' in Desc) { obj.value = Desc['[[Value]]']; } if ('[[Writable]]' in Desc) { obj.writable = !!Desc['[[Writable]]']; } if ('[[Get]]' in Desc) { obj.get = Desc['[[Get]]']; } if ('[[Set]]' in Desc) { obj.set = Desc['[[Set]]']; } if ('[[Enumerable]]' in Desc) { obj.enumerable = !!Desc['[[Enumerable]]']; } if ('[[Configurable]]' in Desc) { obj.configurable = !!Desc['[[Configurable]]']; } return obj; }; ljharb-es-abstract-babee05/helpers/getInferredName.js000066400000000000000000000001611516525472400227770ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('get-symbol-description/getInferredName'); ljharb-es-abstract-babee05/helpers/getIteratorMethod.js000066400000000000000000000022541516525472400233770ustar00rootroot00000000000000'use strict'; var hasSymbols = require('has-symbols')(); var GetIntrinsic = require('get-intrinsic'); var callBound = require('call-bound'); var isString = require('is-string'); var $iterator = GetIntrinsic('%Symbol.iterator%', true); var $stringSlice = callBound('String.prototype.slice'); var $String = GetIntrinsic('%String%'); var IsArray = require('./IsArray'); module.exports = function getIteratorMethod(ES, iterable) { var usingIterator; if (hasSymbols) { usingIterator = ES.GetMethod(iterable, $iterator); } else if (IsArray(iterable)) { usingIterator = function () { var i = -1; var arr = this; return { next: function () { i += 1; return { done: i >= arr.length, value: arr[i] }; } }; }; } else if (isString(iterable)) { usingIterator = function () { var i = 0; return { next: function () { var nextIndex = ES.AdvanceStringIndex($String(iterable), i, true); var value = $stringSlice(iterable, i, nextIndex); i = nextIndex; var done = nextIndex > iterable.length; return { done: done, value: done ? void undefined : value }; } }; }; } return usingIterator; }; ljharb-es-abstract-babee05/helpers/getOwnPropertyDescriptor.js000066400000000000000000000001201516525472400250020ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('gopd'); ljharb-es-abstract-babee05/helpers/getProto.js000066400000000000000000000001241516525472400215420ustar00rootroot00000000000000'use strict'; // TODO, semver-major: remove module.exports = require('get-proto'); ljharb-es-abstract-babee05/helpers/getSymbolDescription.js000066400000000000000000000001411516525472400241070ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('get-symbol-description'); ljharb-es-abstract-babee05/helpers/intToBinaryString.js000066400000000000000000000007621516525472400234000ustar00rootroot00000000000000'use strict'; var $floor = require('math-intrinsics/floor'); // https://runestone.academy/ns/books/published/pythonds/BasicDS/ConvertingDecimalNumberstoBinaryNumbers.html#:~:text=The%20Divide%20by%202%20algorithm,have%20a%20remainder%20of%200 module.exports = function intToBinaryString(x) { var str = ''; var y; while (x > 0) { y = x / 2; x = $floor(y); // eslint-disable-line no-param-reassign if (y === x) { str = '0' + str; } else { str = '1' + str; } } return str; }; ljharb-es-abstract-babee05/helpers/integerToNBytes.js000066400000000000000000000020761516525472400230340ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $Number = GetIntrinsic('%Number%'); var $BigInt = GetIntrinsic('%BigInt%', true); module.exports = function integerToNBytes(intValue, n, isLittleEndian) { var Z = typeof intValue === 'bigint' ? $BigInt : $Number; /* if (intValue >= 0) { // step 3.d // Let rawBytes be a List containing the n-byte binary encoding of intValue. If isLittleEndian is false, the bytes are ordered in big endian order. Otherwise, the bytes are ordered in little endian order. } else { // step 3.e // Let rawBytes be a List containing the n-byte binary 2's complement encoding of intValue. If isLittleEndian is false, the bytes are ordered in big endian order. Otherwise, the bytes are ordered in little endian order. } */ if (intValue < 0) { intValue >>>= 0; // eslint-disable-line no-param-reassign } var rawBytes = []; for (var i = 0; i < n; i++) { rawBytes[isLittleEndian ? i : n - 1 - i] = $Number(intValue & Z(0xFF)); intValue >>= Z(8); // eslint-disable-line no-param-reassign } return rawBytes; // step 4 }; ljharb-es-abstract-babee05/helpers/isAbstractClosure.js000066400000000000000000000003641516525472400234010ustar00rootroot00000000000000'use strict'; var functionName = require('function.prototype.name'); var anon = functionName(function () {}); module.exports = function isAbstractClosure(x) { return typeof x === 'function' && (!x.prototype || functionName(x) === anon); }; ljharb-es-abstract-babee05/helpers/isByteValue.js000066400000000000000000000002331516525472400221740ustar00rootroot00000000000000'use strict'; module.exports = function isByteValue(value) { return typeof value === 'number' && value >= 0 && value <= 255 && (value | 0) === value; }; ljharb-es-abstract-babee05/helpers/isCodePoint.js000066400000000000000000000002161516525472400221610ustar00rootroot00000000000000'use strict'; module.exports = function isCodePoint(cp) { return typeof cp === 'number' && cp >= 0 && cp <= 0x10FFFF && (cp | 0) === cp; }; ljharb-es-abstract-babee05/helpers/isFinite.js000066400000000000000000000001431516525472400215120ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/isFinite'); ljharb-es-abstract-babee05/helpers/isFullyPopulatedPropertyDescriptor.js000066400000000000000000000005051516525472400270530ustar00rootroot00000000000000'use strict'; var isPropertyDescriptor = require('./records/property-descriptor'); module.exports = function isFullyPopulatedPropertyDescriptor(ES, Desc) { return isPropertyDescriptor(Desc) && '[[Enumerable]]' in Desc && '[[Configurable]]' in Desc && (ES.IsAccessorDescriptor(Desc) || ES.IsDataDescriptor(Desc)); }; ljharb-es-abstract-babee05/helpers/isInteger.js000066400000000000000000000001441516525472400216720ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/isInteger'); ljharb-es-abstract-babee05/helpers/isLeadingSurrogate.js000066400000000000000000000002351516525472400235350ustar00rootroot00000000000000'use strict'; module.exports = function isLeadingSurrogate(charCode) { return typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF; }; ljharb-es-abstract-babee05/helpers/isLineTerminator.js000066400000000000000000000002741516525472400232350ustar00rootroot00000000000000'use strict'; // https://262.ecma-international.org/5.1/#sec-7.3 module.exports = function isLineTerminator(c) { return c === '\n' || c === '\r' || c === '\u2028' || c === '\u2029'; }; ljharb-es-abstract-babee05/helpers/isNaN.js000066400000000000000000000001301516525472400207440ustar00rootroot00000000000000'use strict'; module.exports = Number.isNaN || function isNaN(a) { return a !== a; }; ljharb-es-abstract-babee05/helpers/isNegativeZero.js000066400000000000000000000002031516525472400226730ustar00rootroot00000000000000'use strict'; // TODO, semver-major: remove module.exports = function isNegativeZero(x) { return x === 0 && 1 / x === 1 / -0; }; ljharb-es-abstract-babee05/helpers/isObject.js000066400000000000000000000001441516525472400215030ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('es-object-atoms/isObject'); ljharb-es-abstract-babee05/helpers/isPrefixOf.js000066400000000000000000000004501516525472400220170ustar00rootroot00000000000000'use strict'; var $strSlice = require('call-bound')('String.prototype.slice'); module.exports = function isPrefixOf(prefix, string) { if (prefix === string) { return true; } if (prefix.length > string.length) { return false; } return $strSlice(string, 0, prefix.length) === prefix; }; ljharb-es-abstract-babee05/helpers/isPrimitive.js000066400000000000000000000002271516525472400222470ustar00rootroot00000000000000'use strict'; module.exports = function isPrimitive(value) { return value === null || (typeof value !== 'function' && typeof value !== 'object'); }; ljharb-es-abstract-babee05/helpers/isPropertyKey.js000066400000000000000000000002141516525472400225700ustar00rootroot00000000000000'use strict'; module.exports = function isPropertyKey(argument) { return typeof argument === 'string' || typeof argument === 'symbol'; }; ljharb-es-abstract-babee05/helpers/isSamePropertyDescriptor.js000066400000000000000000000006051516525472400247700ustar00rootroot00000000000000'use strict'; var every = require('./every'); module.exports = function isSamePropertyDescriptor(ES, D1, D2) { var fields = [ '[[Configurable]]', '[[Enumerable]]', '[[Get]]', '[[Set]]', '[[Value]]', '[[Writable]]' ]; return every(fields, function (field) { if ((field in D1) !== (field in D2)) { return false; } return ES.SameValue(D1[field], D2[field]); }); }; ljharb-es-abstract-babee05/helpers/isSameType.js000066400000000000000000000003651516525472400220310ustar00rootroot00000000000000'use strict'; module.exports = function isSameType(x, y) { if (x === y) { return true; } if (typeof x === typeof y) { if (typeof x !== 'object' || typeof y !== 'object') { return true; } return !!x === !!y; } return false; }; ljharb-es-abstract-babee05/helpers/isStringOrHole.js000066400000000000000000000005221516525472400226540ustar00rootroot00000000000000'use strict'; // TODO: semver-major: remove var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false module.exports = function isStringOrHole(item, index, arr) { return typeof item === 'string' || (canDistinguishSparseFromUndefined ? !(index in arr) : typeof item === 'undefined'); }; ljharb-es-abstract-babee05/helpers/isStringOrUndefined.js000066400000000000000000000002111516525472400236610ustar00rootroot00000000000000'use strict'; module.exports = function isStringOrUndefined(item) { return typeof item === 'string' || typeof item === 'undefined'; }; ljharb-es-abstract-babee05/helpers/isTrailingSurrogate.js000066400000000000000000000002361516525472400237440ustar00rootroot00000000000000'use strict'; module.exports = function isTrailingSurrogate(charCode) { return typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF; }; ljharb-es-abstract-babee05/helpers/maxSafeInteger.js000066400000000000000000000001631516525472400226440ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/constants/maxSafeInteger'); ljharb-es-abstract-babee05/helpers/maxValue.js000066400000000000000000000001551516525472400215250ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/constants/maxValue'); ljharb-es-abstract-babee05/helpers/mod.js000066400000000000000000000001361516525472400205210ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/mod'); ljharb-es-abstract-babee05/helpers/modBigInt.js000066400000000000000000000002701516525472400216150ustar00rootroot00000000000000'use strict'; module.exports = function bigIntMod(BigIntRemainder, bigint, modulo) { var remain = BigIntRemainder(bigint, modulo); return remain >= 0 ? remain : remain + modulo; }; ljharb-es-abstract-babee05/helpers/padTimeComponent.js000066400000000000000000000003231516525472400232060ustar00rootroot00000000000000'use strict'; var callBound = require('call-bound'); var $strSlice = callBound('String.prototype.slice'); module.exports = function padTimeComponent(c, count) { return $strSlice('00' + c, -(count || 2)); }; ljharb-es-abstract-babee05/helpers/records/000077500000000000000000000000001516525472400210455ustar00rootroot00000000000000ljharb-es-abstract-babee05/helpers/records/async-generator-request-record.js000066400000000000000000000006271516525472400274530ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var isPromiseCapabilityRecord = require('./promise-capability-record'); module.exports = function isAsyncGeneratorRequestRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[Completion]]') // TODO: confirm is a completion record && hasOwn(value, '[[Capability]]') && isPromiseCapabilityRecord(value['[[Capability]]']); }; ljharb-es-abstract-babee05/helpers/records/data-view-with-buffer-witness-record.js000066400000000000000000000010271516525472400304520ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var isDataView = require('is-data-view'); var isInteger = require('../isInteger'); module.exports = function isDataViewWithBufferWitnessRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[Object]]') && hasOwn(value, '[[CachedBufferByteLength]]') && ( (isInteger(value['[[CachedBufferByteLength]]']) && value['[[CachedBufferByteLength]]'] >= 0) || value['[[CachedBufferByteLength]]'] === 'DETACHED' ) && isDataView(value['[[Object]]']); }; ljharb-es-abstract-babee05/helpers/records/iterator-record-2023.js000066400000000000000000000003241516525472400250730ustar00rootroot00000000000000'use strict'; var isIteratorRecordNew = require('./iterator-record'); module.exports = function isIteratorRecord(value) { return isIteratorRecordNew(value) && typeof value['[[NextMethod]]'] === 'function'; }; ljharb-es-abstract-babee05/helpers/records/iterator-record.js000066400000000000000000000004521516525472400245110ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); module.exports = function isIteratorRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[Iterator]]') && hasOwn(value, '[[NextMethod]]') && hasOwn(value, '[[Done]]') && typeof value['[[Done]]'] === 'boolean'; }; ljharb-es-abstract-babee05/helpers/records/match-record.js000066400000000000000000000012141516525472400237510ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var GetIntrinsic = require('get-intrinsic'); var $parseInt = GetIntrinsic('%parseInt%'); // https://262.ecma-international.org/13.0/#sec-match-records module.exports = function isMatchRecord(record) { return ( !!record && typeof record === 'object' && hasOwn(record, '[[StartIndex]]') && hasOwn(record, '[[EndIndex]]') && record['[[StartIndex]]'] >= 0 && record['[[EndIndex]]'] >= record['[[StartIndex]]'] && String($parseInt(record['[[StartIndex]]'], 10)) === String(record['[[StartIndex]]']) && String($parseInt(record['[[EndIndex]]'], 10)) === String(record['[[EndIndex]]']) ); }; ljharb-es-abstract-babee05/helpers/records/promise-capability-record.js000066400000000000000000000007571516525472400264650ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); module.exports = function isPromiseCapabilityRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[Resolve]]') && typeof value['[[Resolve]]'] === 'function' && hasOwn(value, '[[Reject]]') && typeof value['[[Reject]]'] === 'function' && hasOwn(value, '[[Promise]]') && !!value['[[Promise]]'] && typeof value['[[Promise]]'] === 'object' && typeof value['[[Promise]]'].then === 'function'; }; ljharb-es-abstract-babee05/helpers/records/property-descriptor.js000066400000000000000000000015441516525472400254470ustar00rootroot00000000000000'use strict'; var $TypeError = require('es-errors/type'); var hasOwn = require('hasown'); var allowed = { __proto__: null, '[[Configurable]]': true, '[[Enumerable]]': true, '[[Get]]': true, '[[Set]]': true, '[[Value]]': true, '[[Writable]]': true }; // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type module.exports = function isPropertyDescriptor(Desc) { if (!Desc || typeof Desc !== 'object') { return false; } for (var key in Desc) { // eslint-disable-line if (hasOwn(Desc, key) && !allowed[key]) { return false; } } var isData = hasOwn(Desc, '[[Value]]') || hasOwn(Desc, '[[Writable]]'); var IsAccessor = hasOwn(Desc, '[[Get]]') || hasOwn(Desc, '[[Set]]'); if (isData && IsAccessor) { throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); } return true; }; ljharb-es-abstract-babee05/helpers/records/regexp-record.js000066400000000000000000000015221516525472400241510ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var isInteger = require('../isInteger'); module.exports = function isRegExpRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[IgnoreCase]]') && typeof value['[[IgnoreCase]]'] === 'boolean' && hasOwn(value, '[[Multiline]]') && typeof value['[[Multiline]]'] === 'boolean' && hasOwn(value, '[[DotAll]]') && typeof value['[[DotAll]]'] === 'boolean' && hasOwn(value, '[[Unicode]]') && typeof value['[[Unicode]]'] === 'boolean' && hasOwn(value, '[[CapturingGroupsCount]]') && typeof value['[[CapturingGroupsCount]]'] === 'number' && isInteger(value['[[CapturingGroupsCount]]']) && value['[[CapturingGroupsCount]]'] >= 0 && (!hasOwn(value, '[[UnicodeSets]]') || typeof value['[[UnicodeSets]]'] === 'boolean'); // optional since it was added later }; ljharb-es-abstract-babee05/helpers/records/set-record.js000066400000000000000000000011141516525472400234470ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var isInteger = require('../isInteger'); module.exports = function isSetRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[SetObject]]') && value['[[SetObject]]'] && typeof value['[[SetObject]]'] === 'object' && hasOwn(value, '[[Size]]') && ( value['[[Size]]'] === Infinity || (isInteger(value['[[Size]]']) && value['[[Size]]'] >= 0) ) && hasOwn(value, '[[Has]]') && typeof value['[[Has]]'] === 'function' && hasOwn(value, '[[Keys]]') && typeof value['[[Keys]]'] === 'function'; }; ljharb-es-abstract-babee05/helpers/records/typed-array-with-buffer-witness-record.js000066400000000000000000000010371516525472400310330ustar00rootroot00000000000000'use strict'; var hasOwn = require('hasown'); var isTypedArray = require('is-typed-array'); var isInteger = require('../isInteger'); module.exports = function isTypedArrayWithBufferWitnessRecord(value) { return !!value && typeof value === 'object' && hasOwn(value, '[[Object]]') && hasOwn(value, '[[CachedBufferByteLength]]') && ( (isInteger(value['[[CachedBufferByteLength]]']) && value['[[CachedBufferByteLength]]'] >= 0) || value['[[CachedBufferByteLength]]'] === 'DETACHED' ) && isTypedArray(value['[[Object]]']); }; ljharb-es-abstract-babee05/helpers/reduce.js000066400000000000000000000002541516525472400212120ustar00rootroot00000000000000'use strict'; module.exports = function reduce(arr, fn, init) { var acc = init; for (var i = 0; i < arr.length; i += 1) { acc = fn(acc, arr[i], i); } return acc; }; ljharb-es-abstract-babee05/helpers/regexTester.js000066400000000000000000000001331516525472400222400ustar00rootroot00000000000000'use strict'; // TODO: remove, semver-major module.exports = require('safe-regex-test'); ljharb-es-abstract-babee05/helpers/setProto.js000066400000000000000000000001241516525472400215560ustar00rootroot00000000000000'use strict'; // TODO, semver-major: remove module.exports = require('set-proto'); ljharb-es-abstract-babee05/helpers/sign.js000066400000000000000000000001371516525472400207030ustar00rootroot00000000000000'use strict'; // TODO, semver-major: delete module.exports = require('math-intrinsics/sign'); ljharb-es-abstract-babee05/helpers/some.js000066400000000000000000000002771516525472400207130ustar00rootroot00000000000000'use strict'; module.exports = function some(array, predicate) { for (var i = 0; i < array.length; i += 1) { if (predicate(array[i], i, array)) { return true; } } return false; }; ljharb-es-abstract-babee05/helpers/timeConstants.js000066400000000000000000000007021516525472400225740ustar00rootroot00000000000000'use strict'; var HoursPerDay = 24; var MinutesPerHour = 60; var SecondsPerMinute = 60; var msPerSecond = 1e3; var msPerMinute = msPerSecond * SecondsPerMinute; var msPerHour = msPerMinute * MinutesPerHour; var msPerDay = 86400000; module.exports = { HoursPerDay: HoursPerDay, MinutesPerHour: MinutesPerHour, SecondsPerMinute: SecondsPerMinute, msPerSecond: msPerSecond, msPerMinute: msPerMinute, msPerHour: msPerHour, msPerDay: msPerDay }; ljharb-es-abstract-babee05/helpers/timeValue.js000066400000000000000000000002311516525472400216710ustar00rootroot00000000000000'use strict'; var $DateGetTime = require('call-bound')('Date.prototype.getTime'); module.exports = function timeValue(x) { return $DateGetTime(x); }; ljharb-es-abstract-babee05/helpers/typedArrayConstructors.js000066400000000000000000000014771516525472400245300ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var constructors = { __proto__: null, $Int8Array: GetIntrinsic('%Int8Array%', true), $Uint8Array: GetIntrinsic('%Uint8Array%', true), $Uint8ClampedArray: GetIntrinsic('%Uint8ClampedArray%', true), $Int16Array: GetIntrinsic('%Int16Array%', true), $Uint16Array: GetIntrinsic('%Uint16Array%', true), $Int32Array: GetIntrinsic('%Int32Array%', true), $Uint32Array: GetIntrinsic('%Uint32Array%', true), $BigInt64Array: GetIntrinsic('%BigInt64Array%', true), $BigUint64Array: GetIntrinsic('%BigUint64Array%', true), $Float16Array: GetIntrinsic('%Float16Array%', true), $Float32Array: GetIntrinsic('%Float32Array%', true), $Float64Array: GetIntrinsic('%Float64Array%', true) }; module.exports = function getConstructor(kind) { return constructors['$' + kind]; }; ljharb-es-abstract-babee05/helpers/valueToFloat16Bytes.js000066400000000000000000000033531516525472400235310ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); var $floor = require('math-intrinsics/floor'); var $pow = require('math-intrinsics/pow'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var maxFiniteFloat16 = 65504; // 2**16 - 2**5 module.exports = function valueToFloat16Bytes(value, isLittleEndian) { // NaN → exponent=all-ones, mantissa MSB=1 → 0x7e00 if (isNaN(value)) { return isLittleEndian ? [0x00, 0x7e] : [0x7e, 0x00]; } var leastSig; // ±0 → just the sign bit if (value === 0) { leastSig = isNegativeZero(value) ? 0x80 : 0x00; return isLittleEndian ? [0x00, leastSig] : [leastSig, 0x00]; } // ±∞ → exponent=all-ones, mantissa=0 → 0x7c00 or 0xfc00 if ($abs(value) > maxFiniteFloat16 || !isFinite(value)) { leastSig = value < 0 ? 0xfc : 0x7c; return isLittleEndian ? [0x00, leastSig] : [leastSig, 0x00]; } var sign = value < 0 ? 1 : 0; value = $abs(value); // eslint-disable-line no-param-reassign // normalize to [1,2) var exponent = 0; while (value >= 2) { exponent += 1; value /= 2; // eslint-disable-line no-param-reassign } while (value < 1) { exponent -= 1; value *= 2; // eslint-disable-line no-param-reassign } // build mantissa (10 bits) var mantissa = value - 1; mantissa *= $pow(2, 10) + 0.5; mantissa = $floor(mantissa); // apply bias (15) and shift into place exponent += 15; exponent <<= 10; // pack sign, exponent, mantissa var result = (sign << 15) | exponent | mantissa; // split into two bytes var byte0 = result & 0xFF; result >>= 8; var byte1 = result & 0xFF; return isLittleEndian ? [byte0, byte1] : [byte1, byte0]; }; ljharb-es-abstract-babee05/helpers/valueToFloat32Bytes.js000066400000000000000000000031571516525472400235310ustar00rootroot00000000000000'use strict'; var $abs = require('math-intrinsics/abs'); var $floor = require('math-intrinsics/floor'); var $pow = require('math-intrinsics/pow'); var isFinite = require('math-intrinsics/isFinite'); var isNaN = require('math-intrinsics/isNaN'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var maxFiniteFloat32 = 3.4028234663852886e+38; // roughly 2 ** 128 - 1 module.exports = function valueToFloat32Bytes(value, isLittleEndian) { if (isNaN(value)) { return isLittleEndian ? [0, 0, 192, 127] : [127, 192, 0, 0]; // hardcoded } var leastSig; if (value === 0) { leastSig = isNegativeZero(value) ? 0x80 : 0; return isLittleEndian ? [0, 0, 0, leastSig] : [leastSig, 0, 0, 0]; } if ($abs(value) > maxFiniteFloat32 || !isFinite(value)) { leastSig = value < 0 ? 255 : 127; return isLittleEndian ? [0, 0, 128, leastSig] : [leastSig, 128, 0, 0]; } var sign = value < 0 ? 1 : 0; value = $abs(value); // eslint-disable-line no-param-reassign var exponent = 0; while (value >= 2) { exponent += 1; value /= 2; // eslint-disable-line no-param-reassign } while (value < 1) { exponent -= 1; value *= 2; // eslint-disable-line no-param-reassign } var mantissa = value - 1; mantissa *= $pow(2, 23) + 0.5; mantissa = $floor(mantissa); exponent += 127; exponent <<= 23; var result = (sign << 31) | exponent | mantissa; var byte0 = result & 255; result >>= 8; var byte1 = result & 255; result >>= 8; var byte2 = result & 255; result >>= 8; var byte3 = result & 255; if (isLittleEndian) { return [byte0, byte1, byte2, byte3]; } return [byte3, byte2, byte1, byte0]; }; ljharb-es-abstract-babee05/helpers/valueToFloat64Bytes.js000066400000000000000000000060071516525472400235330ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var $parseInt = GetIntrinsic('%parseInt%'); var $abs = require('math-intrinsics/abs'); var $floor = require('math-intrinsics/floor'); var isFinite = require('math-intrinsics/isFinite'); var isNegativeZero = require('math-intrinsics/isNegativeZero'); var callBound = require('call-bound'); var $strIndexOf = callBound('String.prototype.indexOf'); var $strSlice = callBound('String.prototype.slice'); var fractionToBitString = require('../helpers/fractionToBinaryString'); var intToBinString = require('../helpers/intToBinaryString'); var isNaN = require('../helpers/isNaN'); var float64bias = 1023; var elevenOnes = '11111111111'; var elevenZeroes = '00000000000'; var fiftyOneZeroes = elevenZeroes + elevenZeroes + elevenZeroes + elevenZeroes + '0000000'; // IEEE 754-1985 module.exports = function valueToFloat64Bytes(value, isLittleEndian) { var signBit = value < 0 || isNegativeZero(value) ? '1' : '0'; var exponentBits; var significandBits; if (isNaN(value)) { exponentBits = elevenOnes; significandBits = '1' + fiftyOneZeroes; } else if (!isFinite(value)) { exponentBits = elevenOnes; significandBits = '0' + fiftyOneZeroes; } else if (value === 0) { exponentBits = elevenZeroes; significandBits = '0' + fiftyOneZeroes; } else { value = $abs(value); // eslint-disable-line no-param-reassign // Isolate the integer part (digits before the decimal): var integerPart = $floor(value); var intBinString = intToBinString(integerPart); // bit string for integer part var fracBinString = fractionToBitString(value - integerPart); // bit string for fractional part var numberOfBits; // find exponent needed to normalize integer+fractional parts if (intBinString) { exponentBits = intBinString.length - 1; // move the decimal to the left } else { var first1 = $strIndexOf(fracBinString, '1'); if (first1 > -1) { numberOfBits = first1 + 1; } exponentBits = -numberOfBits; // move the decimal to the right } significandBits = intBinString + fracBinString; if (exponentBits < 0) { // subnormals if (exponentBits <= -float64bias) { numberOfBits = float64bias - 1; // limit number of removed bits } significandBits = $strSlice(significandBits, numberOfBits); // remove all leading 0s and the first 1 for normal values; for subnormals, remove up to `float64bias - 1` leading bits } else { significandBits = $strSlice(significandBits, 1); // remove the leading '1' (implicit/hidden bit) } exponentBits = $strSlice(elevenZeroes + intToBinString(exponentBits + float64bias), -11); // Convert the exponent to a bit string significandBits = $strSlice(significandBits + fiftyOneZeroes + '0', 0, 52); // fill in any trailing zeros and ensure we have only 52 fraction bits } var bits = signBit + exponentBits + significandBits; var rawBytes = []; for (var i = 0; i < 8; i++) { var targetIndex = isLittleEndian ? 8 - i - 1 : i; rawBytes[targetIndex] = $parseInt($strSlice(bits, i * 8, (i + 1) * 8), 2); } return rawBytes; }; ljharb-es-abstract-babee05/index.js000066400000000000000000000015031516525472400174060ustar00rootroot00000000000000'use strict'; var assign = require('./helpers/assign'); var ES5 = require('./es5'); var ES2015 = require('./es2015'); var ES2016 = require('./es2016'); var ES2017 = require('./es2017'); var ES2018 = require('./es2018'); var ES2019 = require('./es2019'); var ES2020 = require('./es2020'); var ES2021 = require('./es2021'); var ES2022 = require('./es2022'); var ES2023 = require('./es2023'); var ES2024 = require('./es2024'); var ES2025 = require('./es2025'); var ES = { ES5: ES5, ES6: ES2015, ES2015: ES2015, ES7: ES2016, ES2016: ES2016, ES2017: ES2017, ES2018: ES2018, ES2019: ES2019, ES2020: ES2020, ES2021: ES2021, ES2022: ES2022, ES2023: ES2023, ES2024: ES2024, ES2025: ES2025 }; assign(ES, ES5); delete ES.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible assign(ES, ES2015); module.exports = ES; ljharb-es-abstract-babee05/operations/000077500000000000000000000000001516525472400201255ustar00rootroot00000000000000ljharb-es-abstract-babee05/operations/.eslintrc000066400000000000000000000000461516525472400217510ustar00rootroot00000000000000{ "rules": { "id-length": 0, }, } ljharb-es-abstract-babee05/operations/2015.js000066400000000000000000000567701516525472400210710ustar00rootroot00000000000000'use strict'; module.exports = { IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op abs: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/6.0/#sec-abstract-relational-comparison' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/6.0/#sec-addrestrictedfunctionproperties' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/6.0/#sec-advancestringindex' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-allocatearraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/6.0/#sec-allocatetypedarray' }, ArrayCreate: { url: 'https://262.ecma-international.org/6.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/6.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/6.0/#sec-arrayspeciescreate' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/6.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/6.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/6.0/#sec-canonicalnumericindexstring' }, CharacterRange: { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-clonearraybuffer' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/6.0/#sec-implicit-completion-values' }, CompletionRecord: { url: 'https://262.ecma-international.org/6.0/#sec-completion-record-specification-type' }, Construct: { url: 'https://262.ecma-international.org/6.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/6.0/#sec-copydatablockbytes' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/6.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/6.0/#sec-createarrayiterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/6.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/6.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/6.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/6.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/6.0/#sec-createdynamicfunction' }, CreateHTML: { url: 'https://262.ecma-international.org/6.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/6.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/6.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/6.0/#sec-createlistfromarraylike' }, CreateListIterator: { url: 'https://262.ecma-international.org/6.0/#sec-createlistiterator' }, CreateMapIterator: { url: 'https://262.ecma-international.org/6.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/6.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/6.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/6.0/#sec-createrealm' }, CreateSetIterator: { url: 'https://262.ecma-international.org/6.0/#sec-createsetiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/6.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-date-number' }, Day: { url: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day' }, DayFromYear: { url: 'https://262.ecma-international.org/6.0/#sec-year-number' }, DaylightSavingTA: { url: 'https://262.ecma-international.org/6.0/#sec-daylight-saving-time-adjustment' }, DaysInYear: { url: 'https://262.ecma-international.org/6.0/#sec-year-number' }, DayWithinYear: { url: 'https://262.ecma-international.org/6.0/#sec-month-number' }, Decode: { url: 'https://262.ecma-international.org/6.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/6.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/6.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/6.0/#sec-encode' }, EnqueueJob: { url: 'https://262.ecma-international.org/6.0/#sec-enqueuejob' }, EnumerableOwnNames: { url: 'https://262.ecma-international.org/6.0/#sec-enumerableownnames' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/6.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/6.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/6.0/#sec-evaluatecall' }, EvaluateDirectCall: { url: 'https://262.ecma-international.org/6.0/#sec-evaluatedirectcall' }, EvaluateNew: { url: 'https://262.ecma-international.org/6.0/#sec-evaluatenew' }, floor: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/6.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/6.0/#sec-fulfillpromise' }, FunctionAllocate: { url: 'https://262.ecma-international.org/6.0/#sec-functionallocate' }, FunctionCreate: { url: 'https://262.ecma-international.org/6.0/#sec-functioncreate' }, FunctionInitialize: { url: 'https://262.ecma-international.org/6.0/#sec-functioninitialize' }, GeneratorFunctionCreate: { url: 'https://262.ecma-international.org/6.0/#sec-generatorfunctioncreate' }, GeneratorResume: { url: 'https://262.ecma-international.org/6.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/6.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/6.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/6.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/6.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/6.0/#sec-get-o-p' }, GetBase: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/6.0/#sec-getfunctionrealm' }, GetGlobalObject: { url: 'https://262.ecma-international.org/6.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/6.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/6.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/6.0/#sec-getmethod' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/6.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/6.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/6.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-getprototypefromconstructor' }, GetReferencedName: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, GetSubstitution: { url: 'https://262.ecma-international.org/6.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/6.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/6.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/6.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/6.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/6.0/#sec-getviewvalue' }, HasOwnProperty: { url: 'https://262.ecma-international.org/6.0/#sec-hasownproperty' }, HasPrimitiveBase: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, HasProperty: { url: 'https://262.ecma-international.org/6.0/#sec-hasproperty' }, HourFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/6.0/#sec-importedlocalnames' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/6.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/6.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/6.0/#sec-year-number' }, InstanceofOperator: { url: 'https://262.ecma-international.org/6.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/6.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/6.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/6.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/6.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/6.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/6.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/6.0/#sec-isarray' }, IsCallable: { url: 'https://262.ecma-international.org/6.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/6.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/6.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/6.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/6.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/6.0/#sec-islabelledfunction' }, IsPromise: { url: 'https://262.ecma-international.org/6.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/6.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, IsRegExp: { url: 'https://262.ecma-international.org/6.0/#sec-isregexp' }, IsStrictReference: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, IsSuperReference: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues' }, IsWordChar: { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IteratorClose: { url: 'https://262.ecma-international.org/6.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/6.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/6.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/6.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/6.0/#sec-iteratorvalue' }, LocalTime: { url: 'https://262.ecma-international.org/6.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/6.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/6.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/6.0/#sec-makeargsetter' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/6.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/6.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/6.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/6.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/6.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, min: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, MinFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/6.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, MonthFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-month-number' }, msFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds' }, msPerDay: { url: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/6.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/6.0/#sec-newpromisecapability' }, NormalCompletion: { url: 'https://262.ecma-international.org/6.0/#sec-normalcompletion' }, ObjectCreate: { url: 'https://262.ecma-international.org/6.0/#sec-objectcreate' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/6.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/6.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/6.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/6.0/#sec-ordinarydefineownproperty' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/6.0/#sec-ordinarygetownproperty' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/6.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/6.0/#sec-ordinaryhasproperty' }, ParseModule: { url: 'https://262.ecma-international.org/6.0/#sec-parsemodule' }, PerformEval: { url: 'https://262.ecma-international.org/6.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/6.0/#sec-performpromiseall' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/6.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/6.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/6.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/6.0/#sec-preparefortailcall' }, ProxyCreate: { url: 'https://262.ecma-international.org/6.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/6.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/6.0/#sec-quotejsonstring' }, RegExpAlloc: { url: 'https://262.ecma-international.org/6.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/6.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/6.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/6.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/6.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/6.0/#sec-rejectpromise' }, RepeatMatcher: { url: 'https://262.ecma-international.org/6.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/6.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/6.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/6.0/#sec-resolvethisbinding' }, SameValue: { url: 'https://262.ecma-international.org/6.0/#sec-samevalue' }, SameValueZero: { url: 'https://262.ecma-international.org/6.0/#sec-samevaluezero' }, SecFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/6.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/6.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/6.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/6.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/6.0/#sec-setdefaultglobalbindings' }, SetFunctionName: { url: 'https://262.ecma-international.org/6.0/#sec-setfunctionname' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/6.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/6.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/6.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/6.0/#sec-setviewvalue' }, sign: { url: 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions' }, SortCompare: { url: 'https://262.ecma-international.org/6.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/6.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/6.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/6.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/6.0/#sec-stringcreate' }, StringGetIndexProperty: { url: 'https://262.ecma-international.org/6.0/#sec-stringgetindexproperty' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/6.0/#sec-symboldescriptivestring' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/6.0/#sec-testintegritylevel' }, thisBooleanValue: { url: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object' }, thisNumberValue: { url: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object' }, thisStringValue: { url: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object' }, thisTimeValue: { url: 'https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object' }, TimeClip: { url: 'https://262.ecma-international.org/6.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/6.0/#sec-year-number' }, TimeWithinDay: { url: 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day' }, ToBoolean: { url: 'https://262.ecma-international.org/6.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/6.0/#sec-todatestring' }, ToInt16: { url: 'https://262.ecma-international.org/6.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/6.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/6.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/6.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/6.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/6.0/#sec-tonumber' }, ToObject: { url: 'https://262.ecma-international.org/6.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/6.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/6.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/6.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/6.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/6.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/6.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/6.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/6.0/#sec-triggerpromisereactions' }, Type: { url: 'https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values' }, TypedArrayFrom: { url: 'https://262.ecma-international.org/6.0/#sec-typedarrayfrom' }, UpdateEmpty: { url: 'https://262.ecma-international.org/6.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/6.0/#sec-utc-t' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/6.0/#sec-validateandapplypropertydescriptor' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/6.0/#sec-validatetypedarray' }, WeekDay: { url: 'https://262.ecma-international.org/6.0/#sec-week-day' }, YearFromTime: { url: 'https://262.ecma-international.org/6.0/#sec-year-number' } }; ljharb-es-abstract-babee05/operations/2016.js000066400000000000000000000636601516525472400210660ustar00rootroot00000000000000'use strict'; module.exports = { IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op abs: { url: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/7.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/7.0/#sec-abstract-relational-comparison' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/7.0/#sec-addrestrictedfunctionproperties' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/7.0/#sec-advancestringindex' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-allocatearraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/7.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-allocatetypedarraybuffer' }, ArrayCreate: { url: 'https://262.ecma-international.org/7.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/7.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/7.0/#sec-arrayspeciescreate' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/7.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/7.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/7.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/7.0/#sec-canonicalnumericindexstring' }, CharacterRange: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-clonearraybuffer' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/7.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/7.0/#sec-completion-record-specification-type' }, Construct: { url: 'https://262.ecma-international.org/7.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/7.0/#sec-copydatablockbytes' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/7.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/7.0/#sec-createarrayiterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/7.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/7.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/7.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/7.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/7.0/#sec-createdynamicfunction' }, CreateHTML: { url: 'https://262.ecma-international.org/7.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/7.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/7.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/7.0/#sec-createlistfromarraylike' }, CreateListIterator: { url: 'https://262.ecma-international.org/7.0/#sec-createlistiterator' }, CreateMapIterator: { url: 'https://262.ecma-international.org/7.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/7.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/7.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/7.0/#sec-createrealm' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/7.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/7.0/#sec-createsetiterator' }, CreateStringIterator: { url: 'https://262.ecma-international.org/7.0/#sec-createstringiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/7.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-date-number' }, Day: { url: 'https://262.ecma-international.org/7.0/#sec-day-number-and-time-within-day' }, DayFromYear: { url: 'https://262.ecma-international.org/7.0/#sec-year-number' }, DaylightSavingTA: { url: 'https://262.ecma-international.org/7.0/#sec-daylight-saving-time-adjustment' }, DaysInYear: { url: 'https://262.ecma-international.org/7.0/#sec-year-number' }, DayWithinYear: { url: 'https://262.ecma-international.org/7.0/#sec-month-number' }, Decode: { url: 'https://262.ecma-international.org/7.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/7.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/7.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/7.0/#sec-encode' }, EnqueueJob: { url: 'https://262.ecma-international.org/7.0/#sec-enqueuejob' }, EnumerableOwnNames: { url: 'https://262.ecma-international.org/7.0/#sec-enumerableownnames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/7.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/7.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/7.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/7.0/#sec-evaluatecall' }, EvaluateDirectCall: { url: 'https://262.ecma-international.org/7.0/#sec-evaluatedirectcall' }, EvaluateNew: { url: 'https://262.ecma-international.org/7.0/#sec-evaluatenew' }, floor: { url: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/7.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/7.0/#sec-fulfillpromise' }, FunctionAllocate: { url: 'https://262.ecma-international.org/7.0/#sec-functionallocate' }, FunctionCreate: { url: 'https://262.ecma-international.org/7.0/#sec-functioncreate' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/7.0/#sec-functiondeclarationinstantiation' }, FunctionInitialize: { url: 'https://262.ecma-international.org/7.0/#sec-functioninitialize' }, GeneratorFunctionCreate: { url: 'https://262.ecma-international.org/7.0/#sec-generatorfunctioncreate' }, GeneratorResume: { url: 'https://262.ecma-international.org/7.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/7.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/7.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/7.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/7.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/7.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/7.0/#sec-getactivescriptormodule' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/7.0/#sec-getfunctionrealm' }, GetGlobalObject: { url: 'https://262.ecma-international.org/7.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/7.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/7.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/7.0/#sec-getmethod' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/7.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/7.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/7.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-getprototypefromconstructor' }, GetSubstitution: { url: 'https://262.ecma-international.org/7.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/7.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/7.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/7.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/7.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/7.0/#sec-getviewvalue' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/7.0/#sec-globaldeclarationinstantiation' }, HasOwnProperty: { url: 'https://262.ecma-international.org/7.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/7.0/#sec-hasproperty' }, HourFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/7.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/7.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/7.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/7.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/7.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/7.0/#sec-year-number' }, InstanceofOperator: { url: 'https://262.ecma-international.org/7.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/7.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/7.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/7.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/7.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/7.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/7.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/7.0/#sec-isarray' }, IsCallable: { url: 'https://262.ecma-international.org/7.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/7.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/7.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/7.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/7.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/7.0/#sec-islabelledfunction' }, IsPromise: { url: 'https://262.ecma-international.org/7.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/7.0/#sec-ispropertykey' }, IsRegExp: { url: 'https://262.ecma-international.org/7.0/#sec-isregexp' }, IsWordChar: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToArrayLike: { url: 'https://262.ecma-international.org/7.0/#sec-iterabletoarraylike' }, IteratorClose: { url: 'https://262.ecma-international.org/7.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/7.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/7.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/7.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/7.0/#sec-iteratorvalue' }, LocalTime: { url: 'https://262.ecma-international.org/7.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/7.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/7.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/7.0/#sec-makeargsetter' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/7.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/7.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/7.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/7.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/7.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions' }, min: { url: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions' }, MinFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/7.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/7.0/#sec-algorithm-conventions' }, MonthFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-month-number' }, msFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/7.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/7.0/#sec-newpromisecapability' }, NextJob: { url: 'https://262.ecma-international.org/7.0/#sec-nextjob-result' }, NormalCompletion: { url: 'https://262.ecma-international.org/7.0/#sec-normalcompletion' }, ObjectCreate: { url: 'https://262.ecma-international.org/7.0/#sec-objectcreate' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/7.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarydelete' }, OrdinaryGet: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryisextensible' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/7.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof' }, ParseModule: { url: 'https://262.ecma-international.org/7.0/#sec-parsemodule' }, ParseScript: { url: 'https://262.ecma-international.org/7.0/#sec-parse-script' }, PerformEval: { url: 'https://262.ecma-international.org/7.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/7.0/#sec-performpromiseall' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/7.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/7.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/7.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/7.0/#sec-preparefortailcall' }, PromiseReactionJob: { url: 'https://262.ecma-international.org/7.0/#sec-promisereactionjob' }, PromiseResolveThenableJob: { url: 'https://262.ecma-international.org/7.0/#sec-promiseresolvethenablejob' }, ProxyCreate: { url: 'https://262.ecma-international.org/7.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/7.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/7.0/#sec-quotejsonstring' }, RegExpAlloc: { url: 'https://262.ecma-international.org/7.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/7.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/7.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/7.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/7.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/7.0/#sec-rejectpromise' }, RepeatMatcher: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/7.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/7.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/7.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/7.0/#sec-returnifabrupt' }, SameValue: { url: 'https://262.ecma-international.org/7.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/7.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/7.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/7.0/#sec-runtime-semantics-scriptevaluation' }, ScriptEvaluationJob: { url: 'https://262.ecma-international.org/7.0/#sec-scriptevaluationjob' }, SecFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-hours-minutes-second-and-milliseconds' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/7.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/7.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/7.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/7.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/7.0/#sec-setdefaultglobalbindings' }, SetFunctionName: { url: 'https://262.ecma-international.org/7.0/#sec-setfunctionname' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/7.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/7.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/7.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/7.0/#sec-setviewvalue' }, SortCompare: { url: 'https://262.ecma-international.org/7.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/7.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/7.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/7.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/7.0/#sec-stringcreate' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/7.0/#sec-symboldescriptivestring' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/7.0/#sec-testintegritylevel' }, thisBooleanValue: { url: 'https://262.ecma-international.org/7.0/#sec-thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-number-prototype-object' }, thisStringValue: { url: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-string-prototype-object' }, thisTimeValue: { url: 'https://262.ecma-international.org/7.0/#sec-properties-of-the-date-prototype-object' }, TimeClip: { url: 'https://262.ecma-international.org/7.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/7.0/#sec-year-number' }, TimeWithinDay: { url: 'https://262.ecma-international.org/7.0/#sec-day-number-and-time-within-day' }, ToBoolean: { url: 'https://262.ecma-international.org/7.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/7.0/#sec-todatestring' }, ToInt16: { url: 'https://262.ecma-international.org/7.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/7.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/7.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/7.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/7.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/7.0/#sec-tonumber' }, ToObject: { url: 'https://262.ecma-international.org/7.0/#sec-toobject' }, TopLevelModuleEvaluationJob: { url: 'https://262.ecma-international.org/7.0/#sec-toplevelmoduleevaluationjob' }, ToPrimitive: { url: 'https://262.ecma-international.org/7.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/7.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/7.0/#sec-tostring' }, 'ToString Applied to the Number Type': { url: 'https://262.ecma-international.org/7.0/#sec-tostring-applied-to-the-number-type' }, ToUint16: { url: 'https://262.ecma-international.org/7.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/7.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/7.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/7.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/7.0/#sec-triggerpromisereactions' }, Type: { url: 'https://262.ecma-international.org/7.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/7.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/7.0/#typedarray-species-create' }, UpdateEmpty: { url: 'https://262.ecma-international.org/7.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/7.0/#sec-utc-t' }, UTF16Decode: { url: 'https://262.ecma-international.org/7.0/#sec-utf16decode' }, UTF16Encoding: { url: 'https://262.ecma-international.org/7.0/#sec-utf16encoding' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/7.0/#sec-validateandapplypropertydescriptor' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/7.0/#sec-validatetypedarray' }, WeekDay: { url: 'https://262.ecma-international.org/7.0/#sec-week-day' }, YearFromTime: { url: 'https://262.ecma-international.org/7.0/#sec-year-number' } }; ljharb-es-abstract-babee05/operations/2017.js000066400000000000000000000742641516525472400210710ustar00rootroot00000000000000'use strict'; module.exports = { IsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op abs: { url: 'https://262.ecma-international.org/8.0/#eqn-abs' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/8.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/8.0/#sec-abstract-relational-comparison' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/8.0/#sec-addrestrictedfunctionproperties' }, AddWaiter: { url: 'https://262.ecma-international.org/8.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/8.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/8.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/8.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/8.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/8.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-allocatetypedarraybuffer' }, ArrayCreate: { url: 'https://262.ecma-international.org/8.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/8.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/8.0/#sec-arrayspeciescreate' }, AsyncFunctionAwait: { url: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-await' }, AsyncFunctionCreate: { url: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-create' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/8.0/#sec-async-functions-abstract-operations-async-function-start' }, AtomicLoad: { url: 'https://262.ecma-international.org/8.0/#sec-atomicload' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/8.0/#sec-atomicreadmodifywrite' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/8.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/8.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/8.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/8.0/#sec-canonicalnumericindexstring' }, CharacterRange: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-clonearraybuffer' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/8.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/8.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/8.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/8.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/8.0/#sec-copydatablockbytes' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/8.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/8.0/#sec-createarrayiterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/8.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/8.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/8.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/8.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/8.0/#sec-createdynamicfunction' }, CreateHTML: { url: 'https://262.ecma-international.org/8.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/8.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/8.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/8.0/#sec-createlistfromarraylike' }, CreateListIterator: { url: 'https://262.ecma-international.org/8.0/#sec-createlistiterator' }, CreateMapIterator: { url: 'https://262.ecma-international.org/8.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/8.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/8.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/8.0/#sec-createrealm' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/8.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/8.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/8.0/#sec-createsharedbytedatablock' }, CreateStringIterator: { url: 'https://262.ecma-international.org/8.0/#sec-createstringiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/8.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/8.0/#sec-date-number' }, Day: { url: 'https://262.ecma-international.org/8.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/8.0/#eqn-DaysFromYear' }, DaylightSavingTA: { url: 'https://262.ecma-international.org/8.0/#sec-daylight-saving-time-adjustment' }, DaysInYear: { url: 'https://262.ecma-international.org/8.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/8.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/8.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/8.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/8.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/8.0/#sec-encode' }, EnqueueJob: { url: 'https://262.ecma-international.org/8.0/#sec-enqueuejob' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/8.0/#sec-entercriticalsection' }, EnumerableOwnProperties: { url: 'https://262.ecma-international.org/8.0/#sec-enumerableownproperties' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/8.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/8.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/8.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/8.0/#sec-evaluatecall' }, EvaluateDirectCall: { url: 'https://262.ecma-international.org/8.0/#sec-evaluatedirectcall' }, EvaluateNew: { url: 'https://262.ecma-international.org/8.0/#sec-evaluatenew' }, EventSet: { url: 'https://262.ecma-international.org/8.0/#sec-event-set' }, floor: { url: 'https://262.ecma-international.org/8.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/8.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/8.0/#sec-fulfillpromise' }, FunctionAllocate: { url: 'https://262.ecma-international.org/8.0/#sec-functionallocate' }, FunctionCreate: { url: 'https://262.ecma-international.org/8.0/#sec-functioncreate' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/8.0/#sec-functiondeclarationinstantiation' }, FunctionInitialize: { url: 'https://262.ecma-international.org/8.0/#sec-functioninitialize' }, GeneratorFunctionCreate: { url: 'https://262.ecma-international.org/8.0/#sec-generatorfunctioncreate' }, GeneratorResume: { url: 'https://262.ecma-international.org/8.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/8.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/8.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/8.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/8.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/8.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/8.0/#sec-getactivescriptormodule' }, GetBase: { url: 'https://262.ecma-international.org/8.0/#ao-getbase' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/8.0/#sec-getfunctionrealm' }, GetGlobalObject: { url: 'https://262.ecma-international.org/8.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/8.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/8.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/8.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/8.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/8.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/8.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-getprototypefromconstructor' }, GetReferencedName: { url: 'https://262.ecma-international.org/8.0/#ao-getreferencedname' }, GetSubstitution: { url: 'https://262.ecma-international.org/8.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/8.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/8.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/8.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/8.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/8.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/8.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/8.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/8.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/8.0/#sec-hasownproperty' }, HasPrimitiveBase: { url: 'https://262.ecma-international.org/8.0/#ao-hasprimitivebase' }, HasProperty: { url: 'https://262.ecma-international.org/8.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/8.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/8.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-HourFromTime' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/8.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/8.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/8.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/8.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/8.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/8.0/#eqn-InLeapYear' }, InstanceofOperator: { url: 'https://262.ecma-international.org/8.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/8.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/8.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/8.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/8.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/8.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/8.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/8.0/#sec-isarray' }, IsCallable: { url: 'https://262.ecma-international.org/8.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/8.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/8.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/8.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/8.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/8.0/#sec-islabelledfunction' }, IsPromise: { url: 'https://262.ecma-international.org/8.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/8.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/8.0/#ao-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/8.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-issharedarraybuffer' }, IsStrictReference: { url: 'https://262.ecma-international.org/8.0/#ao-isstrictreference' }, IsSuperReference: { url: 'https://262.ecma-international.org/8.0/#ao-issuperreference' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/8.0/#ao-isunresolvablereference' }, IsWordChar: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/8.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/8.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/8.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/8.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/8.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/8.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/8.0/#sec-leavecriticalsection' }, LocalTime: { url: 'https://262.ecma-international.org/8.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/8.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/8.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/8.0/#sec-makeargsetter' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/8.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/8.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/8.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/8.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/8.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/8.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/8.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/8.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/8.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/8.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/8.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/8.0/#sec-newpromisecapability' }, NormalCompletion: { url: 'https://262.ecma-international.org/8.0/#sec-normalcompletion' }, NumberToRawBytes: { url: 'https://262.ecma-international.org/8.0/#sec-numbertorawbytes' }, ObjectCreate: { url: 'https://262.ecma-international.org/8.0/#sec-objectcreate' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/8.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarydelete' }, OrdinaryGet: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryisextensible' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/8.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarysetprototypeof' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/8.0/#sec-parsemodule' }, ParseScript: { url: 'https://262.ecma-international.org/8.0/#sec-parse-script' }, PerformEval: { url: 'https://262.ecma-international.org/8.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/8.0/#sec-performpromiseall' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/8.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/8.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/8.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/8.0/#sec-preparefortailcall' }, PromiseReactionJob: { url: 'https://262.ecma-international.org/8.0/#sec-promisereactionjob' }, PromiseResolveThenableJob: { url: 'https://262.ecma-international.org/8.0/#sec-promiseresolvethenablejob' }, ProxyCreate: { url: 'https://262.ecma-international.org/8.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/8.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/8.0/#sec-quotejsonstring' }, RawBytesToNumber: { url: 'https://262.ecma-international.org/8.0/#sec-rawbytestonumber' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/8.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/8.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/8.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/8.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/8.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/8.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/8.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/8.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/8.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/8.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/8.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/8.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/8.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/8.0/#sec-returnifabrupt' }, RunJobs: { url: 'https://262.ecma-international.org/8.0/#sec-runjobs' }, SameValue: { url: 'https://262.ecma-international.org/8.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/8.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/8.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-scriptevaluation' }, ScriptEvaluationJob: { url: 'https://262.ecma-international.org/8.0/#sec-scriptevaluationjob' }, SecFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/8.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/8.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/8.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/8.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/8.0/#sec-setdefaultglobalbindings' }, SetFunctionName: { url: 'https://262.ecma-international.org/8.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/8.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/8.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/8.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/8.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/8.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/8.0/#sec-sharedatablockeventset' }, SortCompare: { url: 'https://262.ecma-international.org/8.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/8.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/8.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/8.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/8.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/8.0/#sec-stringgetownproperty' }, Suspend: { url: 'https://262.ecma-international.org/8.0/#sec-suspend' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/8.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/8.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/8.0/#sec-testintegritylevel' }, thisBooleanValue: { url: 'https://262.ecma-international.org/8.0/#sec-thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/8.0/#sec-thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/8.0/#sec-thisstringvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/8.0/#sec-thistimevalue' }, TimeClip: { url: 'https://262.ecma-international.org/8.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/8.0/#eqn-TimeFromYear' }, TimeWithinDay: { url: 'https://262.ecma-international.org/8.0/#eqn-TimeWithinDay' }, ToBoolean: { url: 'https://262.ecma-international.org/8.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/8.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/8.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/8.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/8.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/8.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/8.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/8.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/8.0/#sec-tonumber' }, ToObject: { url: 'https://262.ecma-international.org/8.0/#sec-toobject' }, TopLevelModuleEvaluationJob: { url: 'https://262.ecma-international.org/8.0/#sec-toplevelmoduleevaluationjob' }, ToPrimitive: { url: 'https://262.ecma-international.org/8.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/8.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/8.0/#sec-tostring' }, 'ToString Applied to the Number Type': { url: 'https://262.ecma-international.org/8.0/#sec-tostring-applied-to-the-number-type' }, ToUint16: { url: 'https://262.ecma-international.org/8.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/8.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/8.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/8.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/8.0/#sec-triggerpromisereactions' }, Type: { url: 'https://262.ecma-international.org/8.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/8.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/8.0/#typedarray-species-create' }, UpdateEmpty: { url: 'https://262.ecma-international.org/8.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/8.0/#sec-utc-t' }, UTF16Decode: { url: 'https://262.ecma-international.org/8.0/#sec-utf16decode' }, UTF16Encoding: { url: 'https://262.ecma-international.org/8.0/#sec-utf16encoding' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/8.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/8.0/#sec-validateatomicaccess' }, ValidateSharedIntegerTypedArray: { url: 'https://262.ecma-international.org/8.0/#sec-validatesharedintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/8.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/8.0/#sec-valueofreadevent' }, WakeWaiter: { url: 'https://262.ecma-international.org/8.0/#sec-wakewaiter' }, WeekDay: { url: 'https://262.ecma-international.org/8.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/8.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/8.0/#eqn-YearFromTime' } }; ljharb-es-abstract-babee05/operations/2018.js000066400000000000000000001013241516525472400210560ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/9.0/#eqn-abs' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/9.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/9.0/#sec-addrestrictedfunctionproperties' }, AddWaiter: { url: 'https://262.ecma-international.org/9.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/9.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/9.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/9.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/9.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/9.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-allocatetypedarraybuffer' }, ArrayCreate: { url: 'https://262.ecma-international.org/9.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/9.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/9.0/#sec-arrayspeciescreate' }, AsyncFunctionCreate: { url: 'https://262.ecma-international.org/9.0/#sec-async-functions-abstract-operations-async-function-create' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/9.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorFunctionCreate: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorfunctioncreate' }, AsyncGeneratorReject: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorreject' }, AsyncGeneratorResolve: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorresolve' }, AsyncGeneratorResumeNext: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorresumenext' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratorstart' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/9.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/9.0/#sec-asynciteratorclose' }, AtomicLoad: { url: 'https://262.ecma-international.org/9.0/#sec-atomicload' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/9.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/9.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/9.0/#sec-backreference-matcher' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/9.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/9.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/9.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/9.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-clonearraybuffer' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/9.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/9.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/9.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/9.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/9.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/9.0/#sec-copydataproperties' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/9.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/9.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/9.0/#sec-createasyncfromsynciterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/9.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/9.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/9.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/9.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/9.0/#sec-createdynamicfunction' }, CreateHTML: { url: 'https://262.ecma-international.org/9.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/9.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/9.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/9.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/9.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/9.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/9.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/9.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/9.0/#sec-createrealm' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/9.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/9.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/9.0/#sec-createsharedbytedatablock' }, CreateStringIterator: { url: 'https://262.ecma-international.org/9.0/#sec-createstringiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/9.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/9.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/9.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/9.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/9.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/9.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/9.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/9.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/9.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/9.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/9.0/#sec-encode' }, EnqueueJob: { url: 'https://262.ecma-international.org/9.0/#sec-enqueuejob' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/9.0/#sec-entercriticalsection' }, EnumerableOwnPropertyNames: { url: 'https://262.ecma-international.org/9.0/#sec-enumerableownpropertynames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/9.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/9.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/9.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/9.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/9.0/#sec-evaluatenew' }, EventSet: { url: 'https://262.ecma-international.org/9.0/#sec-event-set' }, floor: { url: 'https://262.ecma-international.org/9.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/9.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/9.0/#sec-fulfillpromise' }, FunctionAllocate: { url: 'https://262.ecma-international.org/9.0/#sec-functionallocate' }, FunctionCreate: { url: 'https://262.ecma-international.org/9.0/#sec-functioncreate' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/9.0/#sec-functiondeclarationinstantiation' }, FunctionInitialize: { url: 'https://262.ecma-international.org/9.0/#sec-functioninitialize' }, GeneratorFunctionCreate: { url: 'https://262.ecma-international.org/9.0/#sec-generatorfunctioncreate' }, GeneratorResume: { url: 'https://262.ecma-international.org/9.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/9.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/9.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/9.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/9.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/9.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/9.0/#sec-getactivescriptormodule' }, GetBase: { url: 'https://262.ecma-international.org/9.0/#sec-getbase' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/9.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/9.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/9.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/9.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/9.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/9.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/9.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/9.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/9.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-getprototypefromconstructor' }, GetReferencedName: { url: 'https://262.ecma-international.org/9.0/#sec-getreferencedname' }, GetSubstitution: { url: 'https://262.ecma-international.org/9.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/9.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/9.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/9.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/9.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/9.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/9.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/9.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/9.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/9.0/#sec-hasownproperty' }, HasPrimitiveBase: { url: 'https://262.ecma-international.org/9.0/#sec-hasprimitivebase' }, HasProperty: { url: 'https://262.ecma-international.org/9.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/9.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/9.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-HourFromTime' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/9.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/9.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/9.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/9.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/9.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/9.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/9.0/#sec-innermoduleevaluation' }, InnerModuleInstantiation: { url: 'https://262.ecma-international.org/9.0/#sec-innermoduleinstantiation' }, InstanceofOperator: { url: 'https://262.ecma-international.org/9.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/9.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/9.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/9.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/9.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/9.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/9.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/9.0/#sec-isarray' }, IsCallable: { url: 'https://262.ecma-international.org/9.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/9.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/9.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/9.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/9.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/9.0/#sec-islabelledfunction' }, IsPromise: { url: 'https://262.ecma-international.org/9.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/9.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/9.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/9.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-issharedarraybuffer' }, IsStrictReference: { url: 'https://262.ecma-international.org/9.0/#sec-isstrictreference' }, IsStringPrefix: { url: 'https://262.ecma-international.org/9.0/#sec-isstringprefix' }, IsSuperReference: { url: 'https://262.ecma-international.org/9.0/#sec-issuperreference' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/9.0/#sec-isunresolvablereference' }, IsWordChar: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/9.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/9.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/9.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/9.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/9.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/9.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/9.0/#sec-leavecriticalsection' }, LocalTime: { url: 'https://262.ecma-international.org/9.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/9.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/9.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/9.0/#sec-makeargsetter' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/9.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/9.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/9.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/9.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/9.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/9.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/9.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/9.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-MinFromTime' }, ModuleDeclarationEnvironmentSetup: { url: 'https://262.ecma-international.org/9.0/#sec-moduledeclarationenvironmentsetup' }, ModuleExecution: { url: 'https://262.ecma-international.org/9.0/#sec-moduleexecution' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/9.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/9.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/9.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/9.0/#sec-newpromisecapability' }, NormalCompletion: { url: 'https://262.ecma-international.org/9.0/#sec-normalcompletion' }, NumberToRawBytes: { url: 'https://262.ecma-international.org/9.0/#sec-numbertorawbytes' }, NumberToString: { url: 'https://262.ecma-international.org/9.0/#sec-tostring-applied-to-the-number-type' }, ObjectCreate: { url: 'https://262.ecma-international.org/9.0/#sec-objectcreate' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/9.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarydelete' }, OrdinaryGet: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryisextensible' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/9.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/9.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/9.0/#sec-parsemodule' }, ParseScript: { url: 'https://262.ecma-international.org/9.0/#sec-parse-script' }, PerformEval: { url: 'https://262.ecma-international.org/9.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/9.0/#sec-performpromiseall' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/9.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/9.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/9.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/9.0/#sec-preparefortailcall' }, PromiseReactionJob: { url: 'https://262.ecma-international.org/9.0/#sec-promisereactionjob' }, PromiseResolve: { url: 'https://262.ecma-international.org/9.0/#sec-promise-resolve' }, PromiseResolveThenableJob: { url: 'https://262.ecma-international.org/9.0/#sec-promiseresolvethenablejob' }, ProxyCreate: { url: 'https://262.ecma-international.org/9.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/9.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/9.0/#sec-quotejsonstring' }, RawBytesToNumber: { url: 'https://262.ecma-international.org/9.0/#sec-rawbytestonumber' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/9.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/9.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/9.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/9.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/9.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/9.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/9.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/9.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/9.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/9.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/9.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/9.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/9.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/9.0/#sec-returnifabrupt' }, RunJobs: { url: 'https://262.ecma-international.org/9.0/#sec-runjobs' }, SameValue: { url: 'https://262.ecma-international.org/9.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/9.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/9.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-scriptevaluation' }, ScriptEvaluationJob: { url: 'https://262.ecma-international.org/9.0/#sec-scriptevaluationjob' }, SecFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/9.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/9.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/9.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/9.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/9.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/9.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/9.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/9.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/9.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/9.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/9.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/9.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/9.0/#sec-sharedatablockeventset' }, SortCompare: { url: 'https://262.ecma-international.org/9.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/9.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/9.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/9.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/9.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/9.0/#sec-stringgetownproperty' }, Suspend: { url: 'https://262.ecma-international.org/9.0/#sec-suspend' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/9.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/9.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/9.0/#sec-testintegritylevel' }, thisBooleanValue: { url: 'https://262.ecma-international.org/9.0/#sec-thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/9.0/#sec-thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/9.0/#sec-thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/9.0/#sec-thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/9.0/#sec-thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/9.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/9.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/9.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/9.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/9.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/9.0/#sec-timezoneestring' }, ToBoolean: { url: 'https://262.ecma-international.org/9.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/9.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/9.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/9.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/9.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/9.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/9.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/9.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/9.0/#sec-tonumber' }, ToObject: { url: 'https://262.ecma-international.org/9.0/#sec-toobject' }, TopLevelModuleEvaluationJob: { url: 'https://262.ecma-international.org/9.0/#sec-toplevelmoduleevaluationjob' }, ToPrimitive: { url: 'https://262.ecma-international.org/9.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/9.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/9.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/9.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/9.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/9.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/9.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/9.0/#sec-triggerpromisereactions' }, Type: { url: 'https://262.ecma-international.org/9.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/9.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/9.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/9.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/9.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/9.0/#sec-utc-t' }, UTF16Decode: { url: 'https://262.ecma-international.org/9.0/#sec-utf16decode' }, UTF16Encoding: { url: 'https://262.ecma-international.org/9.0/#sec-utf16encoding' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/9.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/9.0/#sec-validateatomicaccess' }, ValidateSharedIntegerTypedArray: { url: 'https://262.ecma-international.org/9.0/#sec-validatesharedintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/9.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/9.0/#sec-valueofreadevent' }, WakeWaiter: { url: 'https://262.ecma-international.org/9.0/#sec-wakewaiter' }, WeekDay: { url: 'https://262.ecma-international.org/9.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/9.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/9.0/#eqn-YearFromTime' } }; ljharb-es-abstract-babee05/operations/2019.js000066400000000000000000001031241516525472400210570ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/10.0/#eqn-abs' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/10.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/10.0/#sec-abstract-relational-comparison' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/10.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/10.0/#sec-addrestrictedfunctionproperties' }, AddWaiter: { url: 'https://262.ecma-international.org/10.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/10.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/10.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/10.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/10.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/10.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-allocatetypedarraybuffer' }, ArrayCreate: { url: 'https://262.ecma-international.org/10.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/10.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/10.0/#sec-arrayspeciescreate' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/10.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionCreate: { url: 'https://262.ecma-international.org/10.0/#sec-async-functions-abstract-operations-async-function-create' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/10.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorFunctionCreate: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorfunctioncreate' }, AsyncGeneratorReject: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorreject' }, AsyncGeneratorResolve: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorresolve' }, AsyncGeneratorResumeNext: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorresumenext' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratorstart' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/10.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/10.0/#sec-asynciteratorclose' }, AtomicLoad: { url: 'https://262.ecma-international.org/10.0/#sec-atomicload' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/10.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/10.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/10.0/#sec-backreference-matcher' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/10.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/10.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/10.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/10.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-clonearraybuffer' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/10.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/10.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/10.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/10.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/10.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/10.0/#sec-copydataproperties' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/10.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/10.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/10.0/#sec-createasyncfromsynciterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/10.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/10.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/10.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/10.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/10.0/#sec-createdynamicfunction' }, CreateHTML: { url: 'https://262.ecma-international.org/10.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/10.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/10.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/10.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/10.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/10.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/10.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/10.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/10.0/#sec-createrealm' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/10.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/10.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/10.0/#sec-createsharedbytedatablock' }, CreateStringIterator: { url: 'https://262.ecma-international.org/10.0/#sec-createstringiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/10.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/10.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/10.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/10.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/10.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/10.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/10.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/10.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/10.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/10.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/10.0/#sec-encode' }, EnqueueJob: { url: 'https://262.ecma-international.org/10.0/#sec-enqueuejob' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/10.0/#sec-entercriticalsection' }, EnumerableOwnPropertyNames: { url: 'https://262.ecma-international.org/10.0/#sec-enumerableownpropertynames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/10.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/10.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/10.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/10.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/10.0/#sec-evaluatenew' }, EventSet: { url: 'https://262.ecma-international.org/10.0/#sec-event-set' }, ExecuteModule: { url: 'https://262.ecma-international.org/10.0/#sec-source-text-module-record-execute-module' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/10.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/10.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/10.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-forin-div-ofheadevaluation-tdznames-expr-iterationkind' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/10.0/#sec-fulfillpromise' }, FunctionAllocate: { url: 'https://262.ecma-international.org/10.0/#sec-functionallocate' }, FunctionCreate: { url: 'https://262.ecma-international.org/10.0/#sec-functioncreate' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/10.0/#sec-functiondeclarationinstantiation' }, FunctionInitialize: { url: 'https://262.ecma-international.org/10.0/#sec-functioninitialize' }, GeneratorFunctionCreate: { url: 'https://262.ecma-international.org/10.0/#sec-generatorfunctioncreate' }, GeneratorResume: { url: 'https://262.ecma-international.org/10.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/10.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/10.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/10.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/10.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/10.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/10.0/#sec-getactivescriptormodule' }, GetBase: { url: 'https://262.ecma-international.org/10.0/#sec-getbase' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/10.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/10.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/10.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/10.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/10.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/10.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/10.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/10.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/10.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-getprototypefromconstructor' }, GetReferencedName: { url: 'https://262.ecma-international.org/10.0/#sec-getreferencedname' }, GetSubstitution: { url: 'https://262.ecma-international.org/10.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/10.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/10.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/10.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/10.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/10.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/10.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/10.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/10.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/10.0/#sec-hasownproperty' }, HasPrimitiveBase: { url: 'https://262.ecma-international.org/10.0/#sec-hasprimitivebase' }, HasProperty: { url: 'https://262.ecma-international.org/10.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/10.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/10.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-HourFromTime' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/10.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/10.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/10.0/#sec-initializeboundname' }, InitializeEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-source-text-module-record-initialize-environment' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/10.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/10.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/10.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/10.0/#sec-innermoduleevaluation' }, InnerModuleInstantiation: { url: 'https://262.ecma-international.org/10.0/#sec-innermoduleinstantiation' }, InstanceofOperator: { url: 'https://262.ecma-international.org/10.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/10.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/10.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/10.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/10.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/10.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/10.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/10.0/#sec-isarray' }, IsCallable: { url: 'https://262.ecma-international.org/10.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/10.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/10.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/10.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/10.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/10.0/#sec-islabelledfunction' }, IsPromise: { url: 'https://262.ecma-international.org/10.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/10.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/10.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/10.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-issharedarraybuffer' }, IsStrictReference: { url: 'https://262.ecma-international.org/10.0/#sec-isstrictreference' }, IsStringPrefix: { url: 'https://262.ecma-international.org/10.0/#sec-isstringprefix' }, IsSuperReference: { url: 'https://262.ecma-international.org/10.0/#sec-issuperreference' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/10.0/#sec-isunresolvablereference' }, IsWordChar: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/10.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/10.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/10.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/10.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/10.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/10.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/10.0/#sec-leavecriticalsection' }, LocalTime: { url: 'https://262.ecma-international.org/10.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/10.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/10.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/10.0/#sec-makeargsetter' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/10.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/10.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/10.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/10.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/10.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/10.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/10.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/10.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/10.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/10.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/10.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/10.0/#sec-newpromisecapability' }, NormalCompletion: { url: 'https://262.ecma-international.org/10.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/10.0/#sec-notifywaiter' }, NumberToRawBytes: { url: 'https://262.ecma-international.org/10.0/#sec-numbertorawbytes' }, NumberToString: { url: 'https://262.ecma-international.org/10.0/#sec-tostring-applied-to-the-number-type' }, ObjectCreate: { url: 'https://262.ecma-international.org/10.0/#sec-objectcreate' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/10.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarydelete' }, OrdinaryGet: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryisextensible' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/10.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/10.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/10.0/#sec-parsemodule' }, ParseScript: { url: 'https://262.ecma-international.org/10.0/#sec-parse-script' }, PerformEval: { url: 'https://262.ecma-international.org/10.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/10.0/#sec-performpromiseall' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/10.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/10.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/10.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/10.0/#sec-preparefortailcall' }, PromiseReactionJob: { url: 'https://262.ecma-international.org/10.0/#sec-promisereactionjob' }, PromiseResolve: { url: 'https://262.ecma-international.org/10.0/#sec-promise-resolve' }, PromiseResolveThenableJob: { url: 'https://262.ecma-international.org/10.0/#sec-promiseresolvethenablejob' }, ProxyCreate: { url: 'https://262.ecma-international.org/10.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/10.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/10.0/#sec-quotejsonstring' }, RawBytesToNumber: { url: 'https://262.ecma-international.org/10.0/#sec-rawbytestonumber' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/10.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/10.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/10.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/10.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/10.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/10.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/10.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/10.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/10.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/10.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/10.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/10.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/10.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/10.0/#sec-returnifabrupt' }, RunJobs: { url: 'https://262.ecma-international.org/10.0/#sec-runjobs' }, SameValue: { url: 'https://262.ecma-international.org/10.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/10.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/10.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-scriptevaluation' }, ScriptEvaluationJob: { url: 'https://262.ecma-international.org/10.0/#sec-scriptevaluationjob' }, SecFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/10.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/10.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/10.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/10.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/10.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/10.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/10.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/10.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/10.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/10.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/10.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/10.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/10.0/#sec-sharedatablockeventset' }, SortCompare: { url: 'https://262.ecma-international.org/10.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/10.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/10.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/10.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/10.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/10.0/#sec-stringgetownproperty' }, Suspend: { url: 'https://262.ecma-international.org/10.0/#sec-suspend' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/10.0/#sec-symboldescriptivestring' }, SynchronizeEventSet: { url: 'https://262.ecma-international.org/10.0/#sec-synchronizeeventset' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/10.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/10.0/#sec-testintegritylevel' }, thisBooleanValue: { url: 'https://262.ecma-international.org/10.0/#sec-thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/10.0/#sec-thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/10.0/#sec-thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/10.0/#sec-thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/10.0/#sec-thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/10.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/10.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/10.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/10.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/10.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/10.0/#sec-timezoneestring' }, ToBoolean: { url: 'https://262.ecma-international.org/10.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/10.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/10.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/10.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/10.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/10.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/10.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/10.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/10.0/#sec-tonumber' }, ToObject: { url: 'https://262.ecma-international.org/10.0/#sec-toobject' }, TopLevelModuleEvaluationJob: { url: 'https://262.ecma-international.org/10.0/#sec-toplevelmoduleevaluationjob' }, ToPrimitive: { url: 'https://262.ecma-international.org/10.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/10.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/10.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/10.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/10.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/10.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/10.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/10.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/10.0/#sec-trimstring' }, Type: { url: 'https://262.ecma-international.org/10.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/10.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/10.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/10.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/10.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/10.0/#sec-utc-t' }, UTF16Decode: { url: 'https://262.ecma-international.org/10.0/#sec-utf16decode' }, UTF16Encoding: { url: 'https://262.ecma-international.org/10.0/#sec-utf16encoding' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/10.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/10.0/#sec-validateatomicaccess' }, ValidateSharedIntegerTypedArray: { url: 'https://262.ecma-international.org/10.0/#sec-validatesharedintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/10.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/10.0/#sec-valueofreadevent' }, WeekDay: { url: 'https://262.ecma-international.org/10.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/10.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/10.0/#eqn-YearFromTime' } }; ljharb-es-abstract-babee05/operations/2020.js000066400000000000000000001176461516525472400210650ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/11.0/#eqn-abs' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/11.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/11.0/#sec-abstract-relational-comparison' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/11.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/11.0/#sec-addrestrictedfunctionproperties' }, AddWaiter: { url: 'https://262.ecma-international.org/11.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/11.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/11.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/11.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/11.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/11.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-allocatetypedarraybuffer' }, ArrayCreate: { url: 'https://262.ecma-international.org/11.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/11.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/11.0/#sec-arrayspeciescreate' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/11.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/11.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorReject: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorreject' }, AsyncGeneratorResolve: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorresolve' }, AsyncGeneratorResumeNext: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorresumenext' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratorstart' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/11.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/11.0/#sec-asynciteratorclose' }, AtomicLoad: { url: 'https://262.ecma-international.org/11.0/#sec-atomicload' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/11.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/11.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/11.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::sameValue': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue' }, 'BigInt::sameValueZero': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/11.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/11.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/11.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/11.0/#sec-binaryxor' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/11.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/11.0/#sec-boundfunctioncreate' }, Call: { url: 'https://262.ecma-international.org/11.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/11.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/11.0/#sec-codepointat' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/11.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/11.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/11.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/11.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/11.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/11.0/#sec-copydataproperties' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/11.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createasyncfromsynciterator' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/11.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/11.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/11.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/11.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/11.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createforiniterator' }, CreateHTML: { url: 'https://262.ecma-international.org/11.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/11.0/#sec-createintrinsics' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/11.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/11.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/11.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/11.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/11.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/11.0/#sec-createrealm' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/11.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/11.0/#sec-createsharedbytedatablock' }, CreateStringIterator: { url: 'https://262.ecma-international.org/11.0/#sec-createstringiterator' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/11.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/11.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/11.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/11.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/11.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/11.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/11.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/11.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/11.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/11.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/11.0/#sec-encode' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/11.0/#sec-entercriticalsection' }, EnumerableOwnPropertyNames: { url: 'https://262.ecma-international.org/11.0/#sec-enumerableownpropertynames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/11.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/11.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/11.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/11.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/11.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/11.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/11.0/#sec-evaluate-property-access-with-identifier-key' }, EventSet: { url: 'https://262.ecma-international.org/11.0/#sec-event-set' }, ExecuteModule: { url: 'https://262.ecma-international.org/11.0/#sec-source-text-module-record-execute-module' }, FinishDynamicImport: { url: 'https://262.ecma-international.org/11.0/#sec-finishdynamicimport' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/11.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/11.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/11.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/11.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/11.0/#sec-functiondeclarationinstantiation' }, GeneratorResume: { url: 'https://262.ecma-international.org/11.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/11.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/11.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/11.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/11.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/11.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/11.0/#sec-getactivescriptormodule' }, GetBase: { url: 'https://262.ecma-international.org/11.0/#sec-getbase' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/11.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/11.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/11.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/11.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/11.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/11.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/11.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/11.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/11.0/#sec-getownpropertykeys' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-getprototypefromconstructor' }, GetReferencedName: { url: 'https://262.ecma-international.org/11.0/#sec-getreferencedname' }, GetSubstitution: { url: 'https://262.ecma-international.org/11.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/11.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/11.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/11.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/11.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/11.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/11.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/11.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/11.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/11.0/#sec-hasownproperty' }, HasPrimitiveBase: { url: 'https://262.ecma-international.org/11.0/#sec-hasprimitivebase' }, HasProperty: { url: 'https://262.ecma-international.org/11.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/11.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/11.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-HourFromTime' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/11.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/11.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/11.0/#sec-initializeboundname' }, InitializeEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-source-text-module-record-initialize-environment' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/11.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/11.0/#sec-initializereferencedbinding' }, InLeapYear: { url: 'https://262.ecma-international.org/11.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/11.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/11.0/#sec-InnerModuleLinking' }, InstanceofOperator: { url: 'https://262.ecma-international.org/11.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/11.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/11.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/11.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/11.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/11.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/11.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/11.0/#sec-isarray' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/11.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/11.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/11.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/11.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/11.0/#sec-isintailposition' }, IsInteger: { url: 'https://262.ecma-international.org/11.0/#sec-isinteger' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/11.0/#sec-islabelledfunction' }, IsNonNegativeInteger: { url: 'https://262.ecma-international.org/11.0/#sec-isnonnegativeinteger' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/11.0/#sec-isnotearconfiguration' }, IsPromise: { url: 'https://262.ecma-international.org/11.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/11.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/11.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/11.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-issharedarraybuffer' }, IsStrictReference: { url: 'https://262.ecma-international.org/11.0/#sec-isstrictreference' }, IsStringPrefix: { url: 'https://262.ecma-international.org/11.0/#sec-isstringprefix' }, IsSuperReference: { url: 'https://262.ecma-international.org/11.0/#sec-issuperreference' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/11.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/11.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/11.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/11.0/#sec-isvalidregularexpressionliteral' }, IsWordChar: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/11.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/11.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/11.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/11.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/11.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/11.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/11.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/11.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/11.0/#sec-localtime' }, LocalTZA: { url: 'https://262.ecma-international.org/11.0/#sec-local-time-zone-adjustment' }, LoopContinues: { url: 'https://262.ecma-international.org/11.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/11.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/11.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/11.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/11.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/11.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/11.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/11.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/11.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/11.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/11.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/11.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/11.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/11.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/11.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/11.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/11.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/11.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/11.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/11.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/11.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/11.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/11.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/11.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/11.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/11.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/11.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/11.0/#sec-parsemodule' }, ParseScript: { url: 'https://262.ecma-international.org/11.0/#sec-parse-script' }, PerformEval: { url: 'https://262.ecma-international.org/11.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/11.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/11.0/#sec-performpromiseallsettled' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/11.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/11.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/11.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/11.0/#sec-preparefortailcall' }, PromiseResolve: { url: 'https://262.ecma-international.org/11.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/11.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/11.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/11.0/#sec-quotejsonstring' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/11.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/11.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/11.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/11.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/11.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/11.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/11.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/11.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/11.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/11.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/11.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/11.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/11.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/11.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/11.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/11.0/#sec-returnifabrupt' }, SameValue: { url: 'https://262.ecma-international.org/11.0/#sec-samevalue' }, SameValueNonNumeric: { url: 'https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric' }, SameValueZero: { url: 'https://262.ecma-international.org/11.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/11.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/11.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/11.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/11.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/11.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/11.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/11.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/11.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/11.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/11.0/#sec-setrealmglobalobject' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/11.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/11.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/11.0/#sec-sharedatablockeventset' }, SortCompare: { url: 'https://262.ecma-international.org/11.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/11.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/11.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/11.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/11.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/11.0/#sec-stringgetownproperty' }, StringPad: { url: 'https://262.ecma-international.org/11.0/#sec-stringpad' }, StringToBigInt: { url: 'https://262.ecma-international.org/11.0/#sec-stringtobigint' }, Suspend: { url: 'https://262.ecma-international.org/11.0/#sec-suspend' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/11.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/11.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/11.0/#sec-testintegritylevel' }, thisBigIntValue: { url: 'https://262.ecma-international.org/11.0/#sec-thisbigintvalue' }, thisBooleanValue: { url: 'https://262.ecma-international.org/11.0/#sec-thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/11.0/#sec-thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/11.0/#sec-thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/11.0/#sec-thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/11.0/#sec-thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/11.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/11.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/11.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/11.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/11.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/11.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/11.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/11.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/11.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/11.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/11.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/11.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/11.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/11.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/11.0/#sec-toint8' }, ToInteger: { url: 'https://262.ecma-international.org/11.0/#sec-tointeger' }, ToLength: { url: 'https://262.ecma-international.org/11.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/11.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/11.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/11.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/11.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/11.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/11.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/11.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/11.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/11.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/11.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/11.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/11.0/#sec-trimstring' }, Type: { url: 'https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/11.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/11.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/11.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/11.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/11.0/#sec-utc-t' }, UTF16DecodeString: { url: 'https://262.ecma-international.org/11.0/#sec-utf16decodestring' }, UTF16DecodeSurrogatePair: { url: 'https://262.ecma-international.org/11.0/#sec-utf16decodesurrogatepair' }, UTF16Encode: { url: 'https://262.ecma-international.org/11.0/#sec-utf16encode' }, UTF16Encoding: { url: 'https://262.ecma-international.org/11.0/#sec-utf16encoding' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/11.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/11.0/#sec-validateatomicaccess' }, ValidateSharedIntegerTypedArray: { url: 'https://262.ecma-international.org/11.0/#sec-validatesharedintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/11.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/11.0/#sec-valueofreadevent' }, WeekDay: { url: 'https://262.ecma-international.org/11.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/11.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/11.0/#eqn-YearFromTime' } }; ljharb-es-abstract-babee05/operations/2021.js000066400000000000000000001236141516525472400210560ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/12.0/#eqn-abs' }, 'Abstract Equality Comparison': { url: 'https://262.ecma-international.org/12.0/#sec-abstract-equality-comparison' }, 'Abstract Relational Comparison': { url: 'https://262.ecma-international.org/12.0/#sec-abstract-relational-comparison' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/12.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/12.0/#sec-addrestrictedfunctionproperties' }, AddToKeptObjects: { url: 'https://262.ecma-international.org/12.0/#sec-addtokeptobjects' }, AddWaiter: { url: 'https://262.ecma-international.org/12.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/12.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/12.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/12.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/12.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/12.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-allocatetypedarraybuffer' }, ApplyStringOrNumericBinaryOperator: { url: 'https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator' }, ArrayCreate: { url: 'https://262.ecma-international.org/12.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/12.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/12.0/#sec-arrayspeciescreate' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/12.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/12.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorReject: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorreject' }, AsyncGeneratorResolve: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorresolve' }, AsyncGeneratorResumeNext: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorresumenext' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorstart' }, AsyncGeneratorValidate: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorvalidate' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/12.0/#sec-asynciteratorclose' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/12.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/12.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/12.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::sameValue': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-sameValue' }, 'BigInt::sameValueZero': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-sameValueZero' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/12.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/12.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/12.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/12.0/#sec-binaryxor' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/12.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/12.0/#sec-boundfunctioncreate' }, ByteListBitwiseOp: { url: 'https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop' }, ByteListEqual: { url: 'https://262.ecma-international.org/12.0/#sec-bytelistequal' }, Call: { url: 'https://262.ecma-international.org/12.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/12.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, clamp: { url: 'https://262.ecma-international.org/12.0/#clamping' }, CleanupFinalizationRegistry: { url: 'https://262.ecma-international.org/12.0/#sec-cleanup-finalization-registry' }, ClearKeptObjects: { url: 'https://262.ecma-international.org/12.0/#sec-clear-kept-objects' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/12.0/#sec-codepointat' }, CodePointsToString: { url: 'https://262.ecma-international.org/12.0/#sec-codepointstostring' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/12.0/#sec-completion-record-specification-type' }, CompletionRecord: { url: 'https://262.ecma-international.org/12.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/12.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/12.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/12.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/12.0/#sec-copydataproperties' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/12.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createasyncfromsynciterator' }, CreateAsyncIteratorFromClosure: { url: 'https://262.ecma-international.org/12.0/#sec-createasynciteratorfromclosure' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/12.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/12.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/12.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/12.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/12.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createforiniterator' }, CreateHTML: { url: 'https://262.ecma-international.org/12.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/12.0/#sec-createintrinsics' }, CreateIteratorFromClosure: { url: 'https://262.ecma-international.org/12.0/#sec-createiteratorfromclosure' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/12.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/12.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/12.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/12.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/12.0/#sec-createmethodproperty' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/12.0/#sec-createrealm' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/12.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/12.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/12.0/#sec-createsharedbytedatablock' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/12.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/12.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/12.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/12.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/12.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/12.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/12.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/12.0/#sec-decode' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/12.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/12.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/12.0/#sec-encode' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/12.0/#sec-entercriticalsection' }, EnumerableOwnPropertyNames: { url: 'https://262.ecma-international.org/12.0/#sec-enumerableownpropertynames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/12.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/12.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/12.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/12.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/12.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/12.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/12.0/#sec-evaluate-property-access-with-identifier-key' }, EvaluateStringOrNumericBinaryExpression: { url: 'https://262.ecma-international.org/12.0/#sec-evaluatestringornumericbinaryexpression' }, EventSet: { url: 'https://262.ecma-international.org/12.0/#sec-event-set' }, ExecuteModule: { url: 'https://262.ecma-international.org/12.0/#sec-source-text-module-record-execute-module' }, FinishDynamicImport: { url: 'https://262.ecma-international.org/12.0/#sec-finishdynamicimport' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/12.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/12.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/12.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/12.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/12.0/#sec-functiondeclarationinstantiation' }, GeneratorResume: { url: 'https://262.ecma-international.org/12.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/12.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/12.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/12.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/12.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/12.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/12.0/#sec-getactivescriptormodule' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/12.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/12.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/12.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/12.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/12.0/#sec-getiterator' }, GetMethod: { url: 'https://262.ecma-international.org/12.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/12.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/12.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/12.0/#sec-getownpropertykeys' }, GetPromiseResolve: { url: 'https://262.ecma-international.org/12.0/#sec-getpromiseresolve' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-getprototypefromconstructor' }, GetSubstitution: { url: 'https://262.ecma-international.org/12.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/12.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/12.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/12.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/12.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/12.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/12.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/12.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/12.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/12.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/12.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/12.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/12.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-HourFromTime' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/12.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/12.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/12.0/#sec-initializeboundname' }, InitializeEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-source-text-module-record-initialize-environment' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/12.0/#sec-initializehostdefinedrealm' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/12.0/#sec-initializereferencedbinding' }, InitializeTypedArrayFromArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromarraybuffer' }, InitializeTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromarraylike' }, InitializeTypedArrayFromList: { url: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromlist' }, InitializeTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromtypedarray' }, InLeapYear: { url: 'https://262.ecma-international.org/12.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/12.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/12.0/#sec-InnerModuleLinking' }, InstanceofOperator: { url: 'https://262.ecma-international.org/12.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/12.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/12.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/12.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/12.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/12.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/12.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/12.0/#sec-isarray' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/12.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/12.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/12.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/12.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/12.0/#sec-isintailposition' }, IsIntegralNumber: { url: 'https://262.ecma-international.org/12.0/#sec-isintegralnumber' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/12.0/#sec-islabelledfunction' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/12.0/#sec-isnotearconfiguration' }, IsPromise: { url: 'https://262.ecma-international.org/12.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/12.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/12.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/12.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-issharedarraybuffer' }, IsStringPrefix: { url: 'https://262.ecma-international.org/12.0/#sec-isstringprefix' }, IsSuperReference: { url: 'https://262.ecma-international.org/12.0/#sec-issuperreference' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/12.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/12.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/12.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/12.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/12.0/#sec-isvalidregularexpressionliteral' }, IsWordChar: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/12.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/12.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/12.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/12.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/12.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/12.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/12.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/12.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/12.0/#sec-localtime' }, LocalTZA: { url: 'https://262.ecma-international.org/12.0/#sec-local-time-zone-adjustment' }, LoopContinues: { url: 'https://262.ecma-international.org/12.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/12.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/12.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/12.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/12.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/12.0/#sec-makeday' }, MakeMethod: { url: 'https://262.ecma-international.org/12.0/#sec-makemethod' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/12.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/12.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/12.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/12.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/12.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/12.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/12.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/12.0/#sec-newobjectenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/12.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/12.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/12.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/12.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/12.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/12.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/12.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/12.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/12.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/12.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/12.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/12.0/#sec-parsemodule' }, ParsePattern: { url: 'https://262.ecma-international.org/12.0/#sec-parsepattern' }, ParseScript: { url: 'https://262.ecma-international.org/12.0/#sec-parse-script' }, ParseText: { url: 'https://262.ecma-international.org/12.0/#sec-parsetext' }, PerformEval: { url: 'https://262.ecma-international.org/12.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/12.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/12.0/#sec-performpromiseallsettled' }, PerformPromiseAny: { url: 'https://262.ecma-international.org/12.0/#sec-performpromiseany' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/12.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/12.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/12.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/12.0/#sec-preparefortailcall' }, PromiseResolve: { url: 'https://262.ecma-international.org/12.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/12.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/12.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/12.0/#sec-quotejsonstring' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/12.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/12.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/12.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/12.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/12.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/12.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/12.0/#sec-regexpexec' }, RegExpInitialize: { url: 'https://262.ecma-international.org/12.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/12.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/12.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/12.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/12.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/12.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/12.0/#sec-resolvebinding' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/12.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/12.0/#sec-returnifabrupt' }, SameValue: { url: 'https://262.ecma-international.org/12.0/#sec-samevalue' }, SameValueNonNumeric: { url: 'https://262.ecma-international.org/12.0/#sec-samevaluenonnumeric' }, SameValueZero: { url: 'https://262.ecma-international.org/12.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/12.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/12.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/12.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/12.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/12.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/12.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/12.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/12.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/12.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/12.0/#sec-setrealmglobalobject' }, SetTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/12.0/#sec-settypedarrayfromarraylike' }, SetTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/12.0/#sec-settypedarrayfromtypedarray' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/12.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/12.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/12.0/#sec-sharedatablockeventset' }, SortCompare: { url: 'https://262.ecma-international.org/12.0/#sec-sortcompare' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/12.0/#sec-speciesconstructor' }, SplitMatch: { url: 'https://262.ecma-international.org/12.0/#sec-splitmatch' }, 'Strict Equality Comparison': { url: 'https://262.ecma-international.org/12.0/#sec-strict-equality-comparison' }, StringCreate: { url: 'https://262.ecma-international.org/12.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/12.0/#sec-stringgetownproperty' }, StringIndexOf: { url: 'https://262.ecma-international.org/12.0/#sec-stringindexof' }, StringPad: { url: 'https://262.ecma-international.org/12.0/#sec-stringpad' }, StringToBigInt: { url: 'https://262.ecma-international.org/12.0/#sec-stringtobigint' }, StringToCodePoints: { url: 'https://262.ecma-international.org/12.0/#sec-stringtocodepoints' }, substring: { url: 'https://262.ecma-international.org/12.0/#substring' }, SuspendAgent: { url: 'https://262.ecma-international.org/12.0/#sec-suspendagent' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/12.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/12.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/12.0/#sec-testintegritylevel' }, thisBigIntValue: { url: 'https://262.ecma-international.org/12.0/#thisbigintvalue' }, thisBooleanValue: { url: 'https://262.ecma-international.org/12.0/#thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/12.0/#thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/12.0/#thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/12.0/#thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/12.0/#thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/12.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/12.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/12.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/12.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/12.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/12.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/12.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/12.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/12.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/12.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/12.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/12.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/12.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/12.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/12.0/#sec-toint8' }, ToIntegerOrInfinity: { url: 'https://262.ecma-international.org/12.0/#sec-tointegerorinfinity' }, ToLength: { url: 'https://262.ecma-international.org/12.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/12.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/12.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/12.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/12.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/12.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/12.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/12.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/12.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/12.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/12.0/#sec-touint8clamp' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/12.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/12.0/#sec-trimstring' }, Type: { url: 'https://262.ecma-international.org/12.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/12.0/#typedarray-create' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/12.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/12.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/12.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/12.0/#sec-utc-t' }, UTF16EncodeCodePoint: { url: 'https://262.ecma-international.org/12.0/#sec-utf16encodecodepoint' }, UTF16SurrogatePairToCodePoint: { url: 'https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/12.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/12.0/#sec-validateatomicaccess' }, ValidateIntegerTypedArray: { url: 'https://262.ecma-international.org/12.0/#sec-validateintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/12.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/12.0/#sec-valueofreadevent' }, WeakRefDeref: { url: 'https://262.ecma-international.org/12.0/#sec-weakrefderef' }, WeekDay: { url: 'https://262.ecma-international.org/12.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/12.0/#eqn-YearFromTime' }, Yield: { url: 'https://262.ecma-international.org/12.0/#sec-yield' } }; ljharb-es-abstract-babee05/operations/2022.js000066400000000000000000001315711516525472400210600ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/13.0/#eqn-abs' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/13.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/13.0/#sec-addrestrictedfunctionproperties' }, AddToKeptObjects: { url: 'https://262.ecma-international.org/13.0/#sec-addtokeptobjects' }, AddWaiter: { url: 'https://262.ecma-international.org/13.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/13.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/13.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/13.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/13.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/13.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-allocatetypedarraybuffer' }, ApplyStringOrNumericBinaryOperator: { url: 'https://262.ecma-international.org/13.0/#sec-applystringornumericbinaryoperator' }, ArrayCreate: { url: 'https://262.ecma-international.org/13.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/13.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/13.0/#sec-arrayspeciescreate' }, AsyncBlockStart: { url: 'https://262.ecma-international.org/13.0/#sec-asyncblockstart' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/13.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/13.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorAwaitReturn: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorawaitreturn' }, AsyncGeneratorCompleteStep: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorcompletestep' }, AsyncGeneratorDrainQueue: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratordrainqueue' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorResume: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorresume' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorstart' }, AsyncGeneratorUnwrapYieldResumption: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorunwrapyieldresumption' }, AsyncGeneratorValidate: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratorvalidate' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/13.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/13.0/#sec-asynciteratorclose' }, AsyncModuleExecutionFulfilled: { url: 'https://262.ecma-international.org/13.0/#sec-async-module-execution-fulfilled' }, AsyncModuleExecutionRejected: { url: 'https://262.ecma-international.org/13.0/#sec-async-module-execution-rejected' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/13.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/13.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/13.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::sameValue': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-sameValue' }, 'BigInt::sameValueZero': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-sameValueZero' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/13.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/13.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/13.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/13.0/#sec-binaryxor' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/13.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/13.0/#sec-boundfunctioncreate' }, ByteListBitwiseOp: { url: 'https://262.ecma-international.org/13.0/#sec-bytelistbitwiseop' }, ByteListEqual: { url: 'https://262.ecma-international.org/13.0/#sec-bytelistequal' }, Call: { url: 'https://262.ecma-international.org/13.0/#sec-call' }, Canonicalize: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/13.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, clamp: { url: 'https://262.ecma-international.org/13.0/#clamping' }, CleanupFinalizationRegistry: { url: 'https://262.ecma-international.org/13.0/#sec-cleanup-finalization-registry' }, ClearKeptObjects: { url: 'https://262.ecma-international.org/13.0/#sec-clear-kept-objects' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/13.0/#sec-codepointat' }, CodePointsToString: { url: 'https://262.ecma-international.org/13.0/#sec-codepointstostring' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/13.0/#sec-completion-ao' }, CompletionRecord: { url: 'https://262.ecma-international.org/13.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/13.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/13.0/#sec-construct' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/13.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/13.0/#sec-copydataproperties' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/13.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createasyncfromsynciterator' }, CreateAsyncIteratorFromClosure: { url: 'https://262.ecma-international.org/13.0/#sec-createasynciteratorfromclosure' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/13.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/13.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/13.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/13.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/13.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createforiniterator' }, CreateHTML: { url: 'https://262.ecma-international.org/13.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/13.0/#sec-createintrinsics' }, CreateIteratorFromClosure: { url: 'https://262.ecma-international.org/13.0/#sec-createiteratorfromclosure' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/13.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/13.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/13.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/13.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/13.0/#sec-createmethodproperty' }, CreateNonEnumerableDataPropertyOrThrow: { url: 'https://262.ecma-international.org/13.0/#sec-createnonenumerabledatapropertyorthrow' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/13.0/#sec-createrealm' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/13.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/13.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/13.0/#sec-createsharedbytedatablock' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/13.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/13.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/13.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/13.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/13.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/13.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/13.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/13.0/#sec-decode' }, DefineField: { url: 'https://262.ecma-international.org/13.0/#sec-definefield' }, DefineMethodProperty: { url: 'https://262.ecma-international.org/13.0/#sec-definemethodproperty' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/13.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/13.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/13.0/#sec-encode' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/13.0/#sec-entercriticalsection' }, EnumerableOwnPropertyNames: { url: 'https://262.ecma-international.org/13.0/#sec-enumerableownpropertynames' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/13.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/13.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/13.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/13.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/13.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/13.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/13.0/#sec-evaluate-property-access-with-identifier-key' }, EvaluateStringOrNumericBinaryExpression: { url: 'https://262.ecma-international.org/13.0/#sec-evaluatestringornumericbinaryexpression' }, EventSet: { url: 'https://262.ecma-international.org/13.0/#sec-event-set' }, ExecuteAsyncModule: { url: 'https://262.ecma-international.org/13.0/#sec-execute-async-module' }, FinishDynamicImport: { url: 'https://262.ecma-international.org/13.0/#sec-finishdynamicimport' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/13.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/13.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/13.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/13.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/13.0/#sec-functiondeclarationinstantiation' }, GatherAvailableAncestors: { url: 'https://262.ecma-international.org/13.0/#sec-gather-available-ancestors' }, GeneratorResume: { url: 'https://262.ecma-international.org/13.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/13.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/13.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/13.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/13.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/13.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/13.0/#sec-getactivescriptormodule' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/13.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/13.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/13.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/13.0/#sec-getidentifierreference' }, GetIterator: { url: 'https://262.ecma-international.org/13.0/#sec-getiterator' }, GetMatchIndexPair: { url: 'https://262.ecma-international.org/13.0/#sec-getmatchindexpair' }, GetMatchString: { url: 'https://262.ecma-international.org/13.0/#sec-getmatchstring' }, GetMethod: { url: 'https://262.ecma-international.org/13.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/13.0/#sec-getmodulenamespace' }, GetNewTarget: { url: 'https://262.ecma-international.org/13.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/13.0/#sec-getownpropertykeys' }, GetPromiseResolve: { url: 'https://262.ecma-international.org/13.0/#sec-getpromiseresolve' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-getprototypefromconstructor' }, GetStringIndex: { url: 'https://262.ecma-international.org/13.0/#sec-getstringindex' }, GetSubstitution: { url: 'https://262.ecma-international.org/13.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/13.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/13.0/#sec-getthisvalue' }, GetV: { url: 'https://262.ecma-international.org/13.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/13.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/13.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/13.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/13.0/#sec-globaldeclarationinstantiation' }, 'happens-before': { url: 'https://262.ecma-international.org/13.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/13.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/13.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/13.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/13.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-HourFromTime' }, IfAbruptCloseIterator: { url: 'https://262.ecma-international.org/13.0/#sec-ifabruptcloseiterator' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/13.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/13.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/13.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/13.0/#sec-initializehostdefinedrealm' }, InitializeInstanceElements: { url: 'https://262.ecma-international.org/13.0/#sec-initializeinstanceelements' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/13.0/#sec-initializereferencedbinding' }, InitializeTypedArrayFromArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-initializetypedarrayfromarraybuffer' }, InitializeTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/13.0/#sec-initializetypedarrayfromarraylike' }, InitializeTypedArrayFromList: { url: 'https://262.ecma-international.org/13.0/#sec-initializetypedarrayfromlist' }, InitializeTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/13.0/#sec-initializetypedarrayfromtypedarray' }, InLeapYear: { url: 'https://262.ecma-international.org/13.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/13.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/13.0/#sec-InnerModuleLinking' }, InstallErrorCause: { url: 'https://262.ecma-international.org/13.0/#sec-installerrorcause' }, InstanceofOperator: { url: 'https://262.ecma-international.org/13.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/13.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/13.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/13.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/13.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/13.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/13.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/13.0/#sec-isarray' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/13.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/13.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/13.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/13.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/13.0/#sec-isintailposition' }, IsIntegralNumber: { url: 'https://262.ecma-international.org/13.0/#sec-isintegralnumber' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/13.0/#sec-islabelledfunction' }, IsLessThan: { url: 'https://262.ecma-international.org/13.0/#sec-islessthan' }, IsLooselyEqual: { url: 'https://262.ecma-international.org/13.0/#sec-islooselyequal' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/13.0/#sec-isnotearconfiguration' }, IsPrivateReference: { url: 'https://262.ecma-international.org/13.0/#sec-isprivatereference' }, IsPromise: { url: 'https://262.ecma-international.org/13.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/13.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/13.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/13.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-issharedarraybuffer' }, IsStrictlyEqual: { url: 'https://262.ecma-international.org/13.0/#sec-isstrictlyequal' }, IsStringPrefix: { url: 'https://262.ecma-international.org/13.0/#sec-isstringprefix' }, IsStringWellFormedUnicode: { url: 'https://262.ecma-international.org/13.0/#sec-isstringwellformedunicode' }, IsSuperReference: { url: 'https://262.ecma-international.org/13.0/#sec-issuperreference' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/13.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/13.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/13.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/13.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/13.0/#sec-isvalidregularexpressionliteral' }, IsWordChar: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IterableToList: { url: 'https://262.ecma-international.org/13.0/#sec-iterabletolist' }, IteratorClose: { url: 'https://262.ecma-international.org/13.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/13.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/13.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/13.0/#sec-iteratorstep' }, IteratorValue: { url: 'https://262.ecma-international.org/13.0/#sec-iteratorvalue' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/13.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/13.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/13.0/#sec-localtime' }, LocalTZA: { url: 'https://262.ecma-international.org/13.0/#sec-local-time-zone-adjustment' }, LoopContinues: { url: 'https://262.ecma-international.org/13.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/13.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/13.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/13.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/13.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/13.0/#sec-makeday' }, MakeMatchIndicesIndexPairArray: { url: 'https://262.ecma-international.org/13.0/#sec-makematchindicesindexpairarray' }, MakeMethod: { url: 'https://262.ecma-international.org/13.0/#sec-makemethod' }, MakePrivateReference: { url: 'https://262.ecma-international.org/13.0/#sec-makeprivatereference' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/13.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/13.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/13.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/13.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/13.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/13.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/13.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newobjectenvironment' }, NewPrivateEnvironment: { url: 'https://262.ecma-international.org/13.0/#sec-newprivateenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/13.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/13.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/13.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/13.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/13.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/13.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/13.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/13.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/13.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/13.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/13.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/13.0/#sec-ordinarytoprimitive' }, ParseModule: { url: 'https://262.ecma-international.org/13.0/#sec-parsemodule' }, ParsePattern: { url: 'https://262.ecma-international.org/13.0/#sec-parsepattern' }, ParseScript: { url: 'https://262.ecma-international.org/13.0/#sec-parse-script' }, ParseText: { url: 'https://262.ecma-international.org/13.0/#sec-parsetext' }, PerformEval: { url: 'https://262.ecma-international.org/13.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/13.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/13.0/#sec-performpromiseallsettled' }, PerformPromiseAny: { url: 'https://262.ecma-international.org/13.0/#sec-performpromiseany' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/13.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/13.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/13.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/13.0/#sec-preparefortailcall' }, PrivateElementFind: { url: 'https://262.ecma-international.org/13.0/#sec-privateelementfind' }, PrivateFieldAdd: { url: 'https://262.ecma-international.org/13.0/#sec-privatefieldadd' }, PrivateGet: { url: 'https://262.ecma-international.org/13.0/#sec-privateget' }, PrivateMethodOrAccessorAdd: { url: 'https://262.ecma-international.org/13.0/#sec-privatemethodoraccessoradd' }, PrivateSet: { url: 'https://262.ecma-international.org/13.0/#sec-privateset' }, PromiseResolve: { url: 'https://262.ecma-international.org/13.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/13.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/13.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/13.0/#sec-quotejsonstring' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/13.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/13.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/13.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/13.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/13.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/13.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/13.0/#sec-regexpexec' }, RegExpHasFlag: { url: 'https://262.ecma-international.org/13.0/#sec-regexphasflag' }, RegExpInitialize: { url: 'https://262.ecma-international.org/13.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/13.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/13.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/13.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/13.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/13.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/13.0/#sec-resolvebinding' }, ResolvePrivateIdentifier: { url: 'https://262.ecma-international.org/13.0/#sec-resolve-private-identifier' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/13.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/13.0/#sec-returnifabrupt' }, RoundMVResult: { url: 'https://262.ecma-international.org/13.0/#sec-roundmvresult' }, SameValue: { url: 'https://262.ecma-international.org/13.0/#sec-samevalue' }, SameValueNonNumeric: { url: 'https://262.ecma-international.org/13.0/#sec-samevaluenonnumeric' }, SameValueZero: { url: 'https://262.ecma-international.org/13.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/13.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/13.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/13.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/13.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/13.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/13.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/13.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/13.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/13.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/13.0/#sec-setrealmglobalobject' }, SetTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/13.0/#sec-settypedarrayfromarraylike' }, SetTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/13.0/#sec-settypedarrayfromtypedarray' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/13.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/13.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/13.0/#sec-sharedatablockeventset' }, SortIndexedProperties: { url: 'https://262.ecma-international.org/13.0/#sec-sortindexedproperties' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/13.0/#sec-speciesconstructor' }, StringCreate: { url: 'https://262.ecma-international.org/13.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/13.0/#sec-stringgetownproperty' }, StringIndexOf: { url: 'https://262.ecma-international.org/13.0/#sec-stringindexof' }, StringPad: { url: 'https://262.ecma-international.org/13.0/#sec-stringpad' }, StringToBigInt: { url: 'https://262.ecma-international.org/13.0/#sec-stringtobigint' }, StringToCodePoints: { url: 'https://262.ecma-international.org/13.0/#sec-stringtocodepoints' }, StringToNumber: { url: 'https://262.ecma-international.org/13.0/#sec-stringtonumber' }, substring: { url: 'https://262.ecma-international.org/13.0/#substring' }, SuspendAgent: { url: 'https://262.ecma-international.org/13.0/#sec-suspendagent' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/13.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/13.0/#sec-synchronizes-with' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/13.0/#sec-testintegritylevel' }, thisBigIntValue: { url: 'https://262.ecma-international.org/13.0/#thisbigintvalue' }, thisBooleanValue: { url: 'https://262.ecma-international.org/13.0/#thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/13.0/#thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/13.0/#thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/13.0/#thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/13.0/#thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/13.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/13.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/13.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/13.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/13.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/13.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/13.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/13.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/13.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/13.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/13.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/13.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/13.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/13.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/13.0/#sec-toint8' }, ToIntegerOrInfinity: { url: 'https://262.ecma-international.org/13.0/#sec-tointegerorinfinity' }, ToLength: { url: 'https://262.ecma-international.org/13.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/13.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/13.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/13.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/13.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/13.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/13.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/13.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/13.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/13.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/13.0/#sec-touint8clamp' }, ToZeroPaddedDecimalString: { url: 'https://262.ecma-international.org/13.0/#sec-tozeropaddeddecimalstring' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/13.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/13.0/#sec-trimstring' }, Type: { url: 'https://262.ecma-international.org/13.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/13.0/#typedarray-create' }, TypedArrayElementSize: { url: 'https://262.ecma-international.org/13.0/#sec-typedarrayelementsize' }, TypedArrayElementType: { url: 'https://262.ecma-international.org/13.0/#sec-typedarrayelementtype' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/13.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/13.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/13.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/13.0/#sec-utc-t' }, UTF16EncodeCodePoint: { url: 'https://262.ecma-international.org/13.0/#sec-utf16encodecodepoint' }, UTF16SurrogatePairToCodePoint: { url: 'https://262.ecma-international.org/13.0/#sec-utf16decodesurrogatepair' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/13.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/13.0/#sec-validateatomicaccess' }, ValidateIntegerTypedArray: { url: 'https://262.ecma-international.org/13.0/#sec-validateintegertypedarray' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/13.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/13.0/#sec-valueofreadevent' }, WeakRefDeref: { url: 'https://262.ecma-international.org/13.0/#sec-weakrefderef' }, WeekDay: { url: 'https://262.ecma-international.org/13.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/13.0/#sec-runtime-semantics-wordcharacters-abstract-operation' }, YearFromTime: { url: 'https://262.ecma-international.org/13.0/#eqn-YearFromTime' }, Yield: { url: 'https://262.ecma-international.org/13.0/#sec-yield' } }; ljharb-es-abstract-babee05/operations/2023.js000066400000000000000000001361531516525472400210620ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/14.0/#eqn-abs' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/14.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/14.0/#sec-addrestrictedfunctionproperties' }, AddToKeptObjects: { url: 'https://262.ecma-international.org/14.0/#sec-addtokeptobjects' }, AddWaiter: { url: 'https://262.ecma-international.org/14.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/14.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/14.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/14.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/14.0/#sec-agentsignifier' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/14.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-allocatetypedarraybuffer' }, ApplyStringOrNumericBinaryOperator: { url: 'https://262.ecma-international.org/14.0/#sec-applystringornumericbinaryoperator' }, ArrayCreate: { url: 'https://262.ecma-international.org/14.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/14.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/14.0/#sec-arrayspeciescreate' }, AsyncBlockStart: { url: 'https://262.ecma-international.org/14.0/#sec-asyncblockstart' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/14.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/14.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorAwaitReturn: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorawaitreturn' }, AsyncGeneratorCompleteStep: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorcompletestep' }, AsyncGeneratorDrainQueue: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratordrainqueue' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorResume: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorresume' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorstart' }, AsyncGeneratorUnwrapYieldResumption: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorunwrapyieldresumption' }, AsyncGeneratorValidate: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratorvalidate' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/14.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/14.0/#sec-asynciteratorclose' }, AsyncModuleExecutionFulfilled: { url: 'https://262.ecma-international.org/14.0/#sec-async-module-execution-fulfilled' }, AsyncModuleExecutionRejected: { url: 'https://262.ecma-international.org/14.0/#sec-async-module-execution-rejected' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/14.0/#sec-atomicreadmodifywrite' }, Await: { url: 'https://262.ecma-international.org/14.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/14.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/14.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/14.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/14.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/14.0/#sec-binaryxor' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/14.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/14.0/#sec-boundfunctioncreate' }, ByteListBitwiseOp: { url: 'https://262.ecma-international.org/14.0/#sec-bytelistbitwiseop' }, ByteListEqual: { url: 'https://262.ecma-international.org/14.0/#sec-bytelistequal' }, Call: { url: 'https://262.ecma-international.org/14.0/#sec-call' }, CanBeHeldWeakly: { url: 'https://262.ecma-international.org/14.0/#sec-canbeheldweakly' }, Canonicalize: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/14.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterRange: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, clamp: { url: 'https://262.ecma-international.org/14.0/#clamping' }, CleanupFinalizationRegistry: { url: 'https://262.ecma-international.org/14.0/#sec-cleanup-finalization-registry' }, ClearKeptObjects: { url: 'https://262.ecma-international.org/14.0/#sec-clear-kept-objects' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/14.0/#sec-codepointat' }, CodePointsToString: { url: 'https://262.ecma-international.org/14.0/#sec-codepointstostring' }, CompareArrayElements: { url: 'https://262.ecma-international.org/14.0/#sec-comparearrayelements' }, CompareTypedArrayElements: { url: 'https://262.ecma-international.org/14.0/#sec-comparetypedarrayelements' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/14.0/#sec-completion-ao' }, CompletionRecord: { url: 'https://262.ecma-international.org/14.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/14.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/14.0/#sec-construct' }, ContinueDynamicImport: { url: 'https://262.ecma-international.org/14.0/#sec-ContinueDynamicImport' }, ContinueModuleLoading: { url: 'https://262.ecma-international.org/14.0/#sec-ContinueModuleLoading' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/14.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/14.0/#sec-copydataproperties' }, CountLeftCapturingParensBefore: { url: 'https://262.ecma-international.org/14.0/#sec-countleftcapturingparensbefore' }, CountLeftCapturingParensWithin: { url: 'https://262.ecma-international.org/14.0/#sec-countleftcapturingparenswithin' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/14.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createasyncfromsynciterator' }, CreateAsyncIteratorFromClosure: { url: 'https://262.ecma-international.org/14.0/#sec-createasynciteratorfromclosure' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/14.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/14.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/14.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/14.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/14.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createforiniterator' }, CreateHTML: { url: 'https://262.ecma-international.org/14.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/14.0/#sec-createintrinsics' }, CreateIteratorFromClosure: { url: 'https://262.ecma-international.org/14.0/#sec-createiteratorfromclosure' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/14.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/14.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/14.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/14.0/#sec-createmappedargumentsobject' }, CreateMethodProperty: { url: 'https://262.ecma-international.org/14.0/#sec-createmethodproperty' }, CreateNonEnumerableDataPropertyOrThrow: { url: 'https://262.ecma-international.org/14.0/#sec-createnonenumerabledatapropertyorthrow' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/14.0/#sec-createrealm' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/14.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/14.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/14.0/#sec-createsharedbytedatablock' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/14.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/14.0/#sec-date-number' }, DateString: { url: 'https://262.ecma-international.org/14.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/14.0/#eqn-Day' }, DayFromYear: { url: 'https://262.ecma-international.org/14.0/#eqn-DaysFromYear' }, DaysInYear: { url: 'https://262.ecma-international.org/14.0/#eqn-DaysInYear' }, DayWithinYear: { url: 'https://262.ecma-international.org/14.0/#eqn-DayWithinYear' }, Decode: { url: 'https://262.ecma-international.org/14.0/#sec-decode' }, DefaultTimeZone: { url: 'https://262.ecma-international.org/14.0/#sec-defaulttimezone' }, DefineField: { url: 'https://262.ecma-international.org/14.0/#sec-definefield' }, DefineMethodProperty: { url: 'https://262.ecma-international.org/14.0/#sec-definemethodproperty' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/14.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/14.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-detacharraybuffer' }, Encode: { url: 'https://262.ecma-international.org/14.0/#sec-encode' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/14.0/#sec-entercriticalsection' }, EnumerableOwnProperties: { url: 'https://262.ecma-international.org/14.0/#sec-enumerableownproperties' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/14.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/14.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/14.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/14.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/14.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/14.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/14.0/#sec-evaluate-property-access-with-identifier-key' }, EvaluateStringOrNumericBinaryExpression: { url: 'https://262.ecma-international.org/14.0/#sec-evaluatestringornumericbinaryexpression' }, EventSet: { url: 'https://262.ecma-international.org/14.0/#sec-event-set' }, ExecuteAsyncModule: { url: 'https://262.ecma-international.org/14.0/#sec-execute-async-module' }, '𝔽': { url: 'https://262.ecma-international.org/14.0/#𝔽' }, FindViaPredicate: { url: 'https://262.ecma-international.org/14.0/#sec-findviapredicate' }, FinishLoadingImportedModule: { url: 'https://262.ecma-international.org/14.0/#sec-FinishLoadingImportedModule' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/14.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/14.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/14.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/14.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/14.0/#sec-functiondeclarationinstantiation' }, GatherAvailableAncestors: { url: 'https://262.ecma-international.org/14.0/#sec-gather-available-ancestors' }, GeneratorResume: { url: 'https://262.ecma-international.org/14.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/14.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/14.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/14.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/14.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/14.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/14.0/#sec-getactivescriptormodule' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/14.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/14.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/14.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/14.0/#sec-getidentifierreference' }, GetImportedModule: { url: 'https://262.ecma-international.org/14.0/#sec-GetImportedModule' }, GetIterator: { url: 'https://262.ecma-international.org/14.0/#sec-getiterator' }, GetIteratorFromMethod: { url: 'https://262.ecma-international.org/14.0/#sec-getiteratorfrommethod' }, GetMatchIndexPair: { url: 'https://262.ecma-international.org/14.0/#sec-getmatchindexpair' }, GetMatchString: { url: 'https://262.ecma-international.org/14.0/#sec-getmatchstring' }, GetMethod: { url: 'https://262.ecma-international.org/14.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/14.0/#sec-getmodulenamespace' }, GetNamedTimeZoneEpochNanoseconds: { url: 'https://262.ecma-international.org/14.0/#sec-getnamedtimezoneepochnanoseconds' }, GetNamedTimeZoneOffsetNanoseconds: { url: 'https://262.ecma-international.org/14.0/#sec-getnamedtimezoneoffsetnanoseconds' }, GetNewTarget: { url: 'https://262.ecma-international.org/14.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/14.0/#sec-getownpropertykeys' }, GetPromiseResolve: { url: 'https://262.ecma-international.org/14.0/#sec-getpromiseresolve' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-getprototypefromconstructor' }, GetStringIndex: { url: 'https://262.ecma-international.org/14.0/#sec-getstringindex' }, GetSubstitution: { url: 'https://262.ecma-international.org/14.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/14.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/14.0/#sec-getthisvalue' }, GetUTCEpochNanoseconds: { url: 'https://262.ecma-international.org/14.0/#sec-getutcepochnanoseconds' }, GetV: { url: 'https://262.ecma-international.org/14.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/14.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-getvaluefrombuffer' }, GetViewValue: { url: 'https://262.ecma-international.org/14.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/14.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/14.0/#sec-globaldeclarationinstantiation' }, GroupSpecifiersThatMatch: { url: 'https://262.ecma-international.org/14.0/#sec-groupspecifiersthatmatch' }, 'happens-before': { url: 'https://262.ecma-international.org/14.0/#sec-happens-before' }, HasOwnProperty: { url: 'https://262.ecma-international.org/14.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/14.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/14.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/14.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-HourFromTime' }, IfAbruptCloseIterator: { url: 'https://262.ecma-international.org/14.0/#sec-ifabruptcloseiterator' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/14.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/14.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/14.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/14.0/#sec-initializehostdefinedrealm' }, InitializeInstanceElements: { url: 'https://262.ecma-international.org/14.0/#sec-initializeinstanceelements' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/14.0/#sec-initializereferencedbinding' }, InitializeTypedArrayFromArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-initializetypedarrayfromarraybuffer' }, InitializeTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/14.0/#sec-initializetypedarrayfromarraylike' }, InitializeTypedArrayFromList: { url: 'https://262.ecma-international.org/14.0/#sec-initializetypedarrayfromlist' }, InitializeTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/14.0/#sec-initializetypedarrayfromtypedarray' }, InLeapYear: { url: 'https://262.ecma-international.org/14.0/#eqn-InLeapYear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/14.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/14.0/#sec-InnerModuleLinking' }, InnerModuleLoading: { url: 'https://262.ecma-international.org/14.0/#sec-InnerModuleLoading' }, InstallErrorCause: { url: 'https://262.ecma-international.org/14.0/#sec-installerrorcause' }, InstanceofOperator: { url: 'https://262.ecma-international.org/14.0/#sec-instanceofoperator' }, IntegerIndexedElementGet: { url: 'https://262.ecma-international.org/14.0/#sec-integerindexedelementget' }, IntegerIndexedElementSet: { url: 'https://262.ecma-international.org/14.0/#sec-integerindexedelementset' }, IntegerIndexedObjectCreate: { url: 'https://262.ecma-international.org/14.0/#sec-integerindexedobjectcreate' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/14.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/14.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/14.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/14.0/#sec-isarray' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/14.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/14.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/14.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/14.0/#sec-isextensible-o' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/14.0/#sec-isintailposition' }, IsIntegralNumber: { url: 'https://262.ecma-international.org/14.0/#sec-isintegralnumber' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/14.0/#sec-islabelledfunction' }, IsLessThan: { url: 'https://262.ecma-international.org/14.0/#sec-islessthan' }, IsLooselyEqual: { url: 'https://262.ecma-international.org/14.0/#sec-islooselyequal' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/14.0/#sec-isnotearconfiguration' }, IsPrivateReference: { url: 'https://262.ecma-international.org/14.0/#sec-isprivatereference' }, IsPromise: { url: 'https://262.ecma-international.org/14.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/14.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/14.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/14.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-issharedarraybuffer' }, IsStrictlyEqual: { url: 'https://262.ecma-international.org/14.0/#sec-isstrictlyequal' }, IsStringWellFormedUnicode: { url: 'https://262.ecma-international.org/14.0/#sec-isstringwellformedunicode' }, IsSuperReference: { url: 'https://262.ecma-international.org/14.0/#sec-issuperreference' }, IsTimeZoneOffsetString: { url: 'https://262.ecma-international.org/14.0/#sec-istimezoneoffsetstring' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/14.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/14.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/14.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/14.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/14.0/#sec-isvalidregularexpressionliteral' }, IsWordChar: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IteratorClose: { url: 'https://262.ecma-international.org/14.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/14.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/14.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/14.0/#sec-iteratorstep' }, IteratorToList: { url: 'https://262.ecma-international.org/14.0/#sec-iteratortolist' }, IteratorValue: { url: 'https://262.ecma-international.org/14.0/#sec-iteratorvalue' }, KeyForSymbol: { url: 'https://262.ecma-international.org/14.0/#sec-keyforsymbol' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/14.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/14.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/14.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/14.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/14.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/14.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/14.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-makeconstructor' }, MakeDate: { url: 'https://262.ecma-international.org/14.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/14.0/#sec-makeday' }, MakeMatchIndicesIndexPairArray: { url: 'https://262.ecma-international.org/14.0/#sec-makematchindicesindexpairarray' }, MakeMethod: { url: 'https://262.ecma-international.org/14.0/#sec-makemethod' }, MakePrivateReference: { url: 'https://262.ecma-international.org/14.0/#sec-makeprivatereference' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/14.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/14.0/#sec-maketime' }, max: { url: 'https://262.ecma-international.org/14.0/#eqn-max' }, 'memory-order': { url: 'https://262.ecma-international.org/14.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/14.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-MinFromTime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/14.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/14.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-MonthFromTime' }, msFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-msFromTime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newobjectenvironment' }, NewPrivateEnvironment: { url: 'https://262.ecma-international.org/14.0/#sec-newprivateenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/14.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/14.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/14.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/14.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/14.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/14.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/14.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/14.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/14.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/14.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/14.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/14.0/#sec-ordinarytoprimitive' }, ParseHexOctet: { url: 'https://262.ecma-international.org/14.0/#sec-parsehexoctet' }, ParseModule: { url: 'https://262.ecma-international.org/14.0/#sec-parsemodule' }, ParsePattern: { url: 'https://262.ecma-international.org/14.0/#sec-parsepattern' }, ParseScript: { url: 'https://262.ecma-international.org/14.0/#sec-parse-script' }, ParseText: { url: 'https://262.ecma-international.org/14.0/#sec-parsetext' }, ParseTimeZoneOffsetString: { url: 'https://262.ecma-international.org/14.0/#sec-parsetimezoneoffsetstring' }, PerformEval: { url: 'https://262.ecma-international.org/14.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/14.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/14.0/#sec-performpromiseallsettled' }, PerformPromiseAny: { url: 'https://262.ecma-international.org/14.0/#sec-performpromiseany' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/14.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/14.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/14.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/14.0/#sec-preparefortailcall' }, PrivateElementFind: { url: 'https://262.ecma-international.org/14.0/#sec-privateelementfind' }, PrivateFieldAdd: { url: 'https://262.ecma-international.org/14.0/#sec-privatefieldadd' }, PrivateGet: { url: 'https://262.ecma-international.org/14.0/#sec-privateget' }, PrivateMethodOrAccessorAdd: { url: 'https://262.ecma-international.org/14.0/#sec-privatemethodoraccessoradd' }, PrivateSet: { url: 'https://262.ecma-international.org/14.0/#sec-privateset' }, PromiseResolve: { url: 'https://262.ecma-international.org/14.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/14.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/14.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/14.0/#sec-quotejsonstring' }, ℝ: { url: 'https://262.ecma-international.org/14.0/#ℝ' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/14.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/14.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/14.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/14.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/14.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/14.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/14.0/#sec-regexpexec' }, RegExpHasFlag: { url: 'https://262.ecma-international.org/14.0/#sec-regexphasflag' }, RegExpInitialize: { url: 'https://262.ecma-international.org/14.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/14.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/14.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/14.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/14.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/14.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/14.0/#sec-resolvebinding' }, ResolvePrivateIdentifier: { url: 'https://262.ecma-international.org/14.0/#sec-resolve-private-identifier' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/14.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/14.0/#sec-returnifabrupt' }, RoundMVResult: { url: 'https://262.ecma-international.org/14.0/#sec-roundmvresult' }, SameValue: { url: 'https://262.ecma-international.org/14.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/14.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/14.0/#sec-samevaluezero' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-SecFromTime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/14.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/14.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/14.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/14.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/14.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/14.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/14.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/14.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/14.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/14.0/#sec-setrealmglobalobject' }, SetTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/14.0/#sec-settypedarrayfromarraylike' }, SetTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/14.0/#sec-settypedarrayfromtypedarray' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/14.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/14.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/14.0/#sec-sharedatablockeventset' }, SortIndexedProperties: { url: 'https://262.ecma-international.org/14.0/#sec-sortindexedproperties' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/14.0/#sec-speciesconstructor' }, StringCreate: { url: 'https://262.ecma-international.org/14.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/14.0/#sec-stringgetownproperty' }, StringIndexOf: { url: 'https://262.ecma-international.org/14.0/#sec-stringindexof' }, StringPad: { url: 'https://262.ecma-international.org/14.0/#sec-stringpad' }, StringToBigInt: { url: 'https://262.ecma-international.org/14.0/#sec-stringtobigint' }, StringToCodePoints: { url: 'https://262.ecma-international.org/14.0/#sec-stringtocodepoints' }, StringToNumber: { url: 'https://262.ecma-international.org/14.0/#sec-stringtonumber' }, substring: { url: 'https://262.ecma-international.org/14.0/#substring' }, SuspendAgent: { url: 'https://262.ecma-international.org/14.0/#sec-suspendagent' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/14.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/14.0/#sec-synchronizes-with' }, TemplateString: { url: 'https://262.ecma-international.org/14.0/#sec-templatestring' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/14.0/#sec-testintegritylevel' }, thisBigIntValue: { url: 'https://262.ecma-international.org/14.0/#thisbigintvalue' }, thisBooleanValue: { url: 'https://262.ecma-international.org/14.0/#thisbooleanvalue' }, thisNumberValue: { url: 'https://262.ecma-international.org/14.0/#thisnumbervalue' }, thisStringValue: { url: 'https://262.ecma-international.org/14.0/#thisstringvalue' }, thisSymbolValue: { url: 'https://262.ecma-international.org/14.0/#thissymbolvalue' }, thisTimeValue: { url: 'https://262.ecma-international.org/14.0/#thistimevalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/14.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/14.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/14.0/#eqn-TimeFromYear' }, TimeString: { url: 'https://262.ecma-international.org/14.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/14.0/#eqn-TimeWithinDay' }, TimeZoneString: { url: 'https://262.ecma-international.org/14.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/14.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/14.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/14.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/14.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/14.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/14.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/14.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/14.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/14.0/#sec-toint8' }, ToIntegerOrInfinity: { url: 'https://262.ecma-international.org/14.0/#sec-tointegerorinfinity' }, ToLength: { url: 'https://262.ecma-international.org/14.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/14.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/14.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/14.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/14.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/14.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/14.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/14.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/14.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/14.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/14.0/#sec-touint8clamp' }, ToZeroPaddedDecimalString: { url: 'https://262.ecma-international.org/14.0/#sec-tozeropaddeddecimalstring' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/14.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/14.0/#sec-trimstring' }, truncate: { url: 'https://262.ecma-international.org/14.0/#eqn-truncate' }, Type: { url: 'https://262.ecma-international.org/14.0/#sec-ecmascript-data-types-and-values' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/14.0/#typedarray-create' }, TypedArrayCreateSameType: { url: 'https://262.ecma-international.org/14.0/#sec-typedarray-create-same-type' }, TypedArrayElementSize: { url: 'https://262.ecma-international.org/14.0/#sec-typedarrayelementsize' }, TypedArrayElementType: { url: 'https://262.ecma-international.org/14.0/#sec-typedarrayelementtype' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/14.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/14.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/14.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/14.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/14.0/#sec-utc-t' }, UTF16EncodeCodePoint: { url: 'https://262.ecma-international.org/14.0/#sec-utf16encodecodepoint' }, UTF16SurrogatePairToCodePoint: { url: 'https://262.ecma-international.org/14.0/#sec-utf16decodesurrogatepair' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/14.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/14.0/#sec-validateatomicaccess' }, ValidateIntegerTypedArray: { url: 'https://262.ecma-international.org/14.0/#sec-validateintegertypedarray' }, ValidateNonRevokedProxy: { url: 'https://262.ecma-international.org/14.0/#sec-validatenonrevokedproxy' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/14.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/14.0/#sec-valueofreadevent' }, WeakRefDeref: { url: 'https://262.ecma-international.org/14.0/#sec-weakrefderef' }, WeekDay: { url: 'https://262.ecma-international.org/14.0/#sec-week-day' }, WordCharacters: { url: 'https://262.ecma-international.org/14.0/#sec-wordcharacters' }, YearFromTime: { url: 'https://262.ecma-international.org/14.0/#eqn-YearFromTime' }, Yield: { url: 'https://262.ecma-international.org/14.0/#sec-yield' }, ℤ: { url: 'https://262.ecma-international.org/14.0/#ℤ' } }; ljharb-es-abstract-babee05/operations/2024.js000066400000000000000000001451021516525472400210550ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/15.0/#eqn-abs' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/15.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/15.0/#sec-addrestrictedfunctionproperties' }, AddToKeptObjects: { url: 'https://262.ecma-international.org/15.0/#sec-addtokeptobjects' }, AddValueToKeyedGroup: { url: 'https://262.ecma-international.org/15.0/#sec-add-value-to-keyed-group' }, AddWaiter: { url: 'https://262.ecma-international.org/15.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/15.0/#sec-advancestringindex' }, 'agent-order': { url: 'https://262.ecma-international.org/15.0/#sec-agent-order' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/15.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/15.0/#sec-agentsignifier' }, AllCharacters: { url: 'https://262.ecma-international.org/15.0/#sec-allcharacters' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-allocatetypedarraybuffer' }, ApplyStringOrNumericBinaryOperator: { url: 'https://262.ecma-international.org/15.0/#sec-applystringornumericbinaryoperator' }, ArrayBufferByteLength: { url: 'https://262.ecma-international.org/15.0/#sec-arraybufferbytelength' }, ArrayBufferCopyAndDetach: { url: 'https://262.ecma-international.org/15.0/#sec-arraybuffercopyanddetach' }, ArrayCreate: { url: 'https://262.ecma-international.org/15.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/15.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/15.0/#sec-arrayspeciescreate' }, AsyncBlockStart: { url: 'https://262.ecma-international.org/15.0/#sec-asyncblockstart' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/15.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/15.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorAwaitReturn: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorawaitreturn' }, AsyncGeneratorCompleteStep: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorcompletestep' }, AsyncGeneratorDrainQueue: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratordrainqueue' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorResume: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorresume' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorstart' }, AsyncGeneratorUnwrapYieldResumption: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorunwrapyieldresumption' }, AsyncGeneratorValidate: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratorvalidate' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/15.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/15.0/#sec-asynciteratorclose' }, AsyncModuleExecutionFulfilled: { url: 'https://262.ecma-international.org/15.0/#sec-async-module-execution-fulfilled' }, AsyncModuleExecutionRejected: { url: 'https://262.ecma-international.org/15.0/#sec-async-module-execution-rejected' }, AtomicCompareExchangeInSharedBlock: { url: 'https://262.ecma-international.org/15.0/#sec-atomiccompareexchangeinsharedblock' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/15.0/#sec-atomicreadmodifywrite' }, AvailableNamedTimeZoneIdentifiers: { url: 'https://262.ecma-international.org/15.0/#sec-availablenamedtimezoneidentifiers' }, Await: { url: 'https://262.ecma-international.org/15.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/15.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/15.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/15.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/15.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/15.0/#sec-binaryxor' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/15.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/15.0/#sec-boundfunctioncreate' }, BuiltinCallOrConstruct: { url: 'https://262.ecma-international.org/15.0/#sec-builtincallorconstruct' }, ByteListBitwiseOp: { url: 'https://262.ecma-international.org/15.0/#sec-bytelistbitwiseop' }, ByteListEqual: { url: 'https://262.ecma-international.org/15.0/#sec-bytelistequal' }, Call: { url: 'https://262.ecma-international.org/15.0/#sec-call' }, CanBeHeldWeakly: { url: 'https://262.ecma-international.org/15.0/#sec-canbeheldweakly' }, Canonicalize: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/15.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterComplement: { url: 'https://262.ecma-international.org/15.0/#sec-charactercomplement' }, CharacterRange: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, clamp: { url: 'https://262.ecma-international.org/15.0/#clamping' }, CleanupFinalizationRegistry: { url: 'https://262.ecma-international.org/15.0/#sec-cleanup-finalization-registry' }, ClearKeptObjects: { url: 'https://262.ecma-international.org/15.0/#sec-clear-kept-objects' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/15.0/#sec-codepointat' }, CodePointsToString: { url: 'https://262.ecma-international.org/15.0/#sec-codepointstostring' }, CompareArrayElements: { url: 'https://262.ecma-international.org/15.0/#sec-comparearrayelements' }, CompareTypedArrayElements: { url: 'https://262.ecma-international.org/15.0/#sec-comparetypedarrayelements' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/15.0/#sec-completion-ao' }, CompletionRecord: { url: 'https://262.ecma-international.org/15.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/15.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/15.0/#sec-construct' }, ContinueDynamicImport: { url: 'https://262.ecma-international.org/15.0/#sec-ContinueDynamicImport' }, ContinueModuleLoading: { url: 'https://262.ecma-international.org/15.0/#sec-ContinueModuleLoading' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/15.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/15.0/#sec-copydataproperties' }, CountLeftCapturingParensBefore: { url: 'https://262.ecma-international.org/15.0/#sec-countleftcapturingparensbefore' }, CountLeftCapturingParensWithin: { url: 'https://262.ecma-international.org/15.0/#sec-countleftcapturingparenswithin' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/15.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createasyncfromsynciterator' }, CreateAsyncIteratorFromClosure: { url: 'https://262.ecma-international.org/15.0/#sec-createasynciteratorfromclosure' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/15.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/15.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/15.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/15.0/#sec-createdatapropertyorthrow' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/15.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createforiniterator' }, CreateHTML: { url: 'https://262.ecma-international.org/15.0/#sec-createhtml' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/15.0/#sec-createintrinsics' }, CreateIteratorFromClosure: { url: 'https://262.ecma-international.org/15.0/#sec-createiteratorfromclosure' }, CreateIterResultObject: { url: 'https://262.ecma-international.org/15.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/15.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/15.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/15.0/#sec-createmappedargumentsobject' }, CreateNonEnumerableDataPropertyOrThrow: { url: 'https://262.ecma-international.org/15.0/#sec-createnonenumerabledatapropertyorthrow' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-createperiterationenvironment' }, CreateRealm: { url: 'https://262.ecma-international.org/15.0/#sec-createrealm' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/15.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/15.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/15.0/#sec-createsharedbytedatablock' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/15.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-datefromtime' }, DateString: { url: 'https://262.ecma-international.org/15.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/15.0/#sec-day' }, DayFromYear: { url: 'https://262.ecma-international.org/15.0/#sec-dayfromyear' }, DaysInYear: { url: 'https://262.ecma-international.org/15.0/#sec-daysinyear' }, DayWithinYear: { url: 'https://262.ecma-international.org/15.0/#sec-daywithinyear' }, Decode: { url: 'https://262.ecma-international.org/15.0/#sec-decode' }, DefineField: { url: 'https://262.ecma-international.org/15.0/#sec-definefield' }, DefineMethodProperty: { url: 'https://262.ecma-international.org/15.0/#sec-definemethodproperty' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/15.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/15.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-detacharraybuffer' }, DoWait: { url: 'https://262.ecma-international.org/15.0/#sec-dowait' }, EmptyMatcher: { url: 'https://262.ecma-international.org/15.0/#sec-emptymatcher' }, Encode: { url: 'https://262.ecma-international.org/15.0/#sec-encode' }, EnqueueAtomicsWaitAsyncTimeoutJob: { url: 'https://262.ecma-international.org/15.0/#sec-enqueueatomicswaitasynctimeoutjob' }, EnqueueResolveInAgentJob: { url: 'https://262.ecma-international.org/15.0/#sec-enqueueresolveinagentjob' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/15.0/#sec-entercriticalsection' }, EnumerableOwnProperties: { url: 'https://262.ecma-international.org/15.0/#sec-enumerableownproperties' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/15.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/15.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/15.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/15.0/#sec-evaluatecall' }, EvaluateNew: { url: 'https://262.ecma-international.org/15.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/15.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/15.0/#sec-evaluate-property-access-with-identifier-key' }, EvaluateStringOrNumericBinaryExpression: { url: 'https://262.ecma-international.org/15.0/#sec-evaluatestringornumericbinaryexpression' }, EventSet: { url: 'https://262.ecma-international.org/15.0/#sec-event-set' }, ExecuteAsyncModule: { url: 'https://262.ecma-international.org/15.0/#sec-execute-async-module' }, '𝔽': { url: 'https://262.ecma-international.org/15.0/#𝔽' }, FindViaPredicate: { url: 'https://262.ecma-international.org/15.0/#sec-findviapredicate' }, FinishLoadingImportedModule: { url: 'https://262.ecma-international.org/15.0/#sec-FinishLoadingImportedModule' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/15.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/15.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/15.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/15.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/15.0/#sec-functiondeclarationinstantiation' }, GatherAvailableAncestors: { url: 'https://262.ecma-international.org/15.0/#sec-gather-available-ancestors' }, GeneratorResume: { url: 'https://262.ecma-international.org/15.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/15.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/15.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/15.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/15.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/15.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/15.0/#sec-getactivescriptormodule' }, GetArrayBufferMaxByteLengthOption: { url: 'https://262.ecma-international.org/15.0/#sec-getarraybuffermaxbytelengthoption' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/15.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/15.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/15.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/15.0/#sec-getidentifierreference' }, GetImportedModule: { url: 'https://262.ecma-international.org/15.0/#sec-GetImportedModule' }, GetIterator: { url: 'https://262.ecma-international.org/15.0/#sec-getiterator' }, GetIteratorFromMethod: { url: 'https://262.ecma-international.org/15.0/#sec-getiteratorfrommethod' }, GetMatchIndexPair: { url: 'https://262.ecma-international.org/15.0/#sec-getmatchindexpair' }, GetMatchString: { url: 'https://262.ecma-international.org/15.0/#sec-getmatchstring' }, GetMethod: { url: 'https://262.ecma-international.org/15.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/15.0/#sec-getmodulenamespace' }, GetNamedTimeZoneEpochNanoseconds: { url: 'https://262.ecma-international.org/15.0/#sec-getnamedtimezoneepochnanoseconds' }, GetNamedTimeZoneOffsetNanoseconds: { url: 'https://262.ecma-international.org/15.0/#sec-getnamedtimezoneoffsetnanoseconds' }, GetNewTarget: { url: 'https://262.ecma-international.org/15.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/15.0/#sec-getownpropertykeys' }, GetPromiseResolve: { url: 'https://262.ecma-international.org/15.0/#sec-getpromiseresolve' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-getprototypefromconstructor' }, GetRawBytesFromSharedBlock: { url: 'https://262.ecma-international.org/15.0/#sec-getrawbytesfromsharedblock' }, GetStringIndex: { url: 'https://262.ecma-international.org/15.0/#sec-getstringindex' }, GetSubstitution: { url: 'https://262.ecma-international.org/15.0/#sec-getsubstitution' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/15.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/15.0/#sec-getthisvalue' }, GetUTCEpochNanoseconds: { url: 'https://262.ecma-international.org/15.0/#sec-getutcepochnanoseconds' }, GetV: { url: 'https://262.ecma-international.org/15.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/15.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-getvaluefrombuffer' }, GetViewByteLength: { url: 'https://262.ecma-international.org/15.0/#sec-getviewbytelength' }, GetViewValue: { url: 'https://262.ecma-international.org/15.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/15.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/15.0/#sec-globaldeclarationinstantiation' }, GroupBy: { url: 'https://262.ecma-international.org/15.0/#sec-groupby' }, GroupSpecifiersThatMatch: { url: 'https://262.ecma-international.org/15.0/#sec-groupspecifiersthatmatch' }, 'happens-before': { url: 'https://262.ecma-international.org/15.0/#sec-happens-before' }, HasEitherUnicodeFlag: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-haseitherunicodeflag-abstract-operation' }, HasOwnProperty: { url: 'https://262.ecma-international.org/15.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/15.0/#sec-hasproperty' }, 'host-synchronizes-with': { url: 'https://262.ecma-international.org/15.0/#sec-host-synchronizes-with' }, HostEventSet: { url: 'https://262.ecma-international.org/15.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-hourfromtime' }, IfAbruptCloseIterator: { url: 'https://262.ecma-international.org/15.0/#sec-ifabruptcloseiterator' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/15.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/15.0/#sec-importedlocalnames' }, InitializeBoundName: { url: 'https://262.ecma-international.org/15.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/15.0/#sec-initializehostdefinedrealm' }, InitializeInstanceElements: { url: 'https://262.ecma-international.org/15.0/#sec-initializeinstanceelements' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/15.0/#sec-initializereferencedbinding' }, InitializeTypedArrayFromArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-initializetypedarrayfromarraybuffer' }, InitializeTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/15.0/#sec-initializetypedarrayfromarraylike' }, InitializeTypedArrayFromList: { url: 'https://262.ecma-international.org/15.0/#sec-initializetypedarrayfromlist' }, InitializeTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-initializetypedarrayfromtypedarray' }, InLeapYear: { url: 'https://262.ecma-international.org/15.0/#sec-inleapyear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/15.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/15.0/#sec-InnerModuleLinking' }, InnerModuleLoading: { url: 'https://262.ecma-international.org/15.0/#sec-InnerModuleLoading' }, InstallErrorCause: { url: 'https://262.ecma-international.org/15.0/#sec-installerrorcause' }, InstanceofOperator: { url: 'https://262.ecma-international.org/15.0/#sec-instanceofoperator' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/15.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/15.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/15.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/15.0/#sec-isarray' }, IsArrayBufferViewOutOfBounds: { url: 'https://262.ecma-international.org/15.0/#sec-isarraybufferviewoutofbounds' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/15.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/15.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/15.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/15.0/#sec-isextensible-o' }, IsFixedLengthArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-isfixedlengtharraybuffer' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/15.0/#sec-isintailposition' }, IsIntegralNumber: { url: 'https://262.ecma-international.org/15.0/#sec-isintegralnumber' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/15.0/#sec-islabelledfunction' }, IsLessThan: { url: 'https://262.ecma-international.org/15.0/#sec-islessthan' }, IsLooselyEqual: { url: 'https://262.ecma-international.org/15.0/#sec-islooselyequal' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/15.0/#sec-isnotearconfiguration' }, IsPrivateReference: { url: 'https://262.ecma-international.org/15.0/#sec-isprivatereference' }, IsPromise: { url: 'https://262.ecma-international.org/15.0/#sec-ispromise' }, IsPropertyKey: { url: 'https://262.ecma-international.org/15.0/#sec-ispropertykey' }, IsPropertyReference: { url: 'https://262.ecma-international.org/15.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/15.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-issharedarraybuffer' }, IsStrictlyEqual: { url: 'https://262.ecma-international.org/15.0/#sec-isstrictlyequal' }, IsStringWellFormedUnicode: { url: 'https://262.ecma-international.org/15.0/#sec-isstringwellformedunicode' }, IsSuperReference: { url: 'https://262.ecma-international.org/15.0/#sec-issuperreference' }, IsTimeZoneOffsetString: { url: 'https://262.ecma-international.org/15.0/#sec-istimezoneoffsetstring' }, IsTypedArrayOutOfBounds: { url: 'https://262.ecma-international.org/15.0/#sec-istypedarrayoutofbounds' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/15.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/15.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/15.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/15.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/15.0/#sec-isvalidregularexpressionliteral' }, IsViewOutOfBounds: { url: 'https://262.ecma-international.org/15.0/#sec-isviewoutofbounds' }, IsWordChar: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IteratorClose: { url: 'https://262.ecma-international.org/15.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/15.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/15.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/15.0/#sec-iteratorstep' }, IteratorStepValue: { url: 'https://262.ecma-international.org/15.0/#sec-iteratorstepvalue' }, IteratorToList: { url: 'https://262.ecma-international.org/15.0/#sec-iteratortolist' }, IteratorValue: { url: 'https://262.ecma-international.org/15.0/#sec-iteratorvalue' }, KeyForSymbol: { url: 'https://262.ecma-international.org/15.0/#sec-keyforsymbol' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/15.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/15.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/15.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/15.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/15.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/15.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/15.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-makeconstructor' }, MakeDataViewWithBufferWitnessRecord: { url: 'https://262.ecma-international.org/15.0/#sec-makedataviewwithbufferwitnessrecord' }, MakeDate: { url: 'https://262.ecma-international.org/15.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/15.0/#sec-makeday' }, MakeFullYear: { url: 'https://262.ecma-international.org/15.0/#sec-makefullyear' }, MakeMatchIndicesIndexPairArray: { url: 'https://262.ecma-international.org/15.0/#sec-makematchindicesindexpairarray' }, MakeMethod: { url: 'https://262.ecma-international.org/15.0/#sec-makemethod' }, MakePrivateReference: { url: 'https://262.ecma-international.org/15.0/#sec-makeprivatereference' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/15.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/15.0/#sec-maketime' }, MakeTypedArrayWithBufferWitnessRecord: { url: 'https://262.ecma-international.org/15.0/#sec-maketypedarraywithbufferwitnessrecord' }, MatchSequence: { url: 'https://262.ecma-international.org/15.0/#sec-matchsequence' }, MatchTwoAlternatives: { url: 'https://262.ecma-international.org/15.0/#sec-matchtwoalternatives' }, max: { url: 'https://262.ecma-international.org/15.0/#eqn-max' }, MaybeSimpleCaseFolding: { url: 'https://262.ecma-international.org/15.0/#sec-maybesimplecasefolding' }, 'memory-order': { url: 'https://262.ecma-international.org/15.0/#sec-memory-order' }, min: { url: 'https://262.ecma-international.org/15.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-minfromtime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/15.0/#sec-modulenamespacecreate' }, modulo: { url: 'https://262.ecma-international.org/15.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-monthfromtime' }, msFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-msfromtime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newobjectenvironment' }, NewPrivateEnvironment: { url: 'https://262.ecma-international.org/15.0/#sec-newprivateenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/15.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/15.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/15.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/15.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/15.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/15.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/15.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/15.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/15.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/15.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/15.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/15.0/#sec-ordinarytoprimitive' }, ParseHexOctet: { url: 'https://262.ecma-international.org/15.0/#sec-parsehexoctet' }, ParseModule: { url: 'https://262.ecma-international.org/15.0/#sec-parsemodule' }, ParsePattern: { url: 'https://262.ecma-international.org/15.0/#sec-parsepattern' }, ParseScript: { url: 'https://262.ecma-international.org/15.0/#sec-parse-script' }, ParseText: { url: 'https://262.ecma-international.org/15.0/#sec-parsetext' }, ParseTimeZoneOffsetString: { url: 'https://262.ecma-international.org/15.0/#sec-parsetimezoneoffsetstring' }, PerformEval: { url: 'https://262.ecma-international.org/15.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/15.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/15.0/#sec-performpromiseallsettled' }, PerformPromiseAny: { url: 'https://262.ecma-international.org/15.0/#sec-performpromiseany' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/15.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/15.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/15.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/15.0/#sec-preparefortailcall' }, PrivateElementFind: { url: 'https://262.ecma-international.org/15.0/#sec-privateelementfind' }, PrivateFieldAdd: { url: 'https://262.ecma-international.org/15.0/#sec-privatefieldadd' }, PrivateGet: { url: 'https://262.ecma-international.org/15.0/#sec-privateget' }, PrivateMethodOrAccessorAdd: { url: 'https://262.ecma-international.org/15.0/#sec-privatemethodoraccessoradd' }, PrivateSet: { url: 'https://262.ecma-international.org/15.0/#sec-privateset' }, PromiseResolve: { url: 'https://262.ecma-international.org/15.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/15.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/15.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/15.0/#sec-quotejsonstring' }, ℝ: { url: 'https://262.ecma-international.org/15.0/#ℝ' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/15.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/15.0/#sec-reads-bytes-from' }, 'reads-from': { url: 'https://262.ecma-international.org/15.0/#sec-reads-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/15.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/15.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/15.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/15.0/#sec-regexpexec' }, RegExpHasFlag: { url: 'https://262.ecma-international.org/15.0/#sec-regexphasflag' }, RegExpInitialize: { url: 'https://262.ecma-international.org/15.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/15.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/15.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/15.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/15.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/15.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/15.0/#sec-resolvebinding' }, ResolvePrivateIdentifier: { url: 'https://262.ecma-international.org/15.0/#sec-resolve-private-identifier' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/15.0/#sec-resolvethisbinding' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/15.0/#sec-returnifabrupt' }, RevalidateAtomicAccess: { url: 'https://262.ecma-international.org/15.0/#sec-revalidateatomicaccess' }, RoundMVResult: { url: 'https://262.ecma-international.org/15.0/#sec-roundmvresult' }, SameValue: { url: 'https://262.ecma-international.org/15.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/15.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/15.0/#sec-samevaluezero' }, scf: { url: 'https://262.ecma-international.org/15.0/#eqn-scf' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-secfromtime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/15.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/15.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/15.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/15.0/#sec-set-o-p-v-throw' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/15.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/15.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/15.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/15.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/15.0/#sec-setintegritylevel' }, SetRealmGlobalObject: { url: 'https://262.ecma-international.org/15.0/#sec-setrealmglobalobject' }, SetTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/15.0/#sec-settypedarrayfromarraylike' }, SetTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-settypedarrayfromtypedarray' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/15.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/15.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/15.0/#sec-sharedatablockeventset' }, SortIndexedProperties: { url: 'https://262.ecma-international.org/15.0/#sec-sortindexedproperties' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-speciesconstructor' }, StringCreate: { url: 'https://262.ecma-international.org/15.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/15.0/#sec-stringgetownproperty' }, StringIndexOf: { url: 'https://262.ecma-international.org/15.0/#sec-stringindexof' }, StringPad: { url: 'https://262.ecma-international.org/15.0/#sec-stringpad' }, StringPaddingBuiltinsImpl: { url: 'https://262.ecma-international.org/15.0/#sec-stringpaddingbuiltinsimpl' }, StringToBigInt: { url: 'https://262.ecma-international.org/15.0/#sec-stringtobigint' }, StringToCodePoints: { url: 'https://262.ecma-international.org/15.0/#sec-stringtocodepoints' }, StringToNumber: { url: 'https://262.ecma-international.org/15.0/#sec-stringtonumber' }, substring: { url: 'https://262.ecma-international.org/15.0/#substring' }, SuspendThisAgent: { url: 'https://262.ecma-international.org/15.0/#sec-suspendthisagent' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/15.0/#sec-symboldescriptivestring' }, 'synchronizes-with': { url: 'https://262.ecma-international.org/15.0/#sec-synchronizes-with' }, SystemTimeZoneIdentifier: { url: 'https://262.ecma-international.org/15.0/#sec-systemtimezoneidentifier' }, TemplateString: { url: 'https://262.ecma-international.org/15.0/#sec-templatestring' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/15.0/#sec-testintegritylevel' }, ThisBigIntValue: { url: 'https://262.ecma-international.org/15.0/#sec-thisbigintvalue' }, ThisBooleanValue: { url: 'https://262.ecma-international.org/15.0/#sec-thisbooleanvalue' }, ThisNumberValue: { url: 'https://262.ecma-international.org/15.0/#sec-thisnumbervalue' }, ThisStringValue: { url: 'https://262.ecma-international.org/15.0/#sec-thisstringvalue' }, ThisSymbolValue: { url: 'https://262.ecma-international.org/15.0/#sec-thissymbolvalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/15.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/15.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/15.0/#sec-timefromyear' }, TimeString: { url: 'https://262.ecma-international.org/15.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/15.0/#sec-timewithinday' }, TimeZoneString: { url: 'https://262.ecma-international.org/15.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/15.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/15.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/15.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/15.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/15.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/15.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/15.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/15.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/15.0/#sec-toint8' }, ToIntegerOrInfinity: { url: 'https://262.ecma-international.org/15.0/#sec-tointegerorinfinity' }, ToLength: { url: 'https://262.ecma-international.org/15.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/15.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/15.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/15.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/15.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/15.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/15.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/15.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/15.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/15.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/15.0/#sec-touint8clamp' }, ToZeroPaddedDecimalString: { url: 'https://262.ecma-international.org/15.0/#sec-tozeropaddeddecimalstring' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/15.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/15.0/#sec-trimstring' }, truncate: { url: 'https://262.ecma-international.org/15.0/#eqn-truncate' }, Type: { url: 'https://262.ecma-international.org/15.0/#sec-ecmascript-data-types-and-values' }, TypedArrayByteLength: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraybytelength' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraycreate' }, TypedArrayCreateFromConstructor: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraycreatefromconstructor' }, TypedArrayCreateSameType: { url: 'https://262.ecma-international.org/15.0/#sec-typedarray-create-same-type' }, TypedArrayElementSize: { url: 'https://262.ecma-international.org/15.0/#sec-typedarrayelementsize' }, TypedArrayElementType: { url: 'https://262.ecma-international.org/15.0/#sec-typedarrayelementtype' }, TypedArrayGetElement: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraygetelement' }, TypedArrayLength: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraylength' }, TypedArraySetElement: { url: 'https://262.ecma-international.org/15.0/#sec-typedarraysetelement' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/15.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/15.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/15.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/15.0/#sec-updateempty' }, UTC: { url: 'https://262.ecma-international.org/15.0/#sec-utc-t' }, UTF16EncodeCodePoint: { url: 'https://262.ecma-international.org/15.0/#sec-utf16encodecodepoint' }, UTF16SurrogatePairToCodePoint: { url: 'https://262.ecma-international.org/15.0/#sec-utf16decodesurrogatepair' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/15.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/15.0/#sec-validateatomicaccess' }, ValidateAtomicAccessOnIntegerTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-validateatomicaccessonintegertypedarray' }, ValidateIntegerTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-validateintegertypedarray' }, ValidateNonRevokedProxy: { url: 'https://262.ecma-international.org/15.0/#sec-validatenonrevokedproxy' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/15.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/15.0/#sec-valueofreadevent' }, WeakRefDeref: { url: 'https://262.ecma-international.org/15.0/#sec-weakrefderef' }, WeekDay: { url: 'https://262.ecma-international.org/15.0/#sec-weekday' }, WordCharacters: { url: 'https://262.ecma-international.org/15.0/#sec-wordcharacters' }, YearFromTime: { url: 'https://262.ecma-international.org/15.0/#sec-yearfromtime' }, Yield: { url: 'https://262.ecma-international.org/15.0/#sec-yield' }, ℤ: { url: 'https://262.ecma-international.org/15.0/#ℤ' } }; ljharb-es-abstract-babee05/operations/2025.js000066400000000000000000001516021516525472400210600ustar00rootroot00000000000000'use strict'; module.exports = { abs: { url: 'https://262.ecma-international.org/16.0/#eqn-abs' }, AddEntriesFromIterable: { url: 'https://262.ecma-international.org/16.0/#sec-add-entries-from-iterable' }, AddRestrictedFunctionProperties: { url: 'https://262.ecma-international.org/16.0/#sec-addrestrictedfunctionproperties' }, AddToKeptObjects: { url: 'https://262.ecma-international.org/16.0/#sec-addtokeptobjects' }, AddValueToKeyedGroup: { url: 'https://262.ecma-international.org/16.0/#sec-add-value-to-keyed-group' }, AddWaiter: { url: 'https://262.ecma-international.org/16.0/#sec-addwaiter' }, AdvanceStringIndex: { url: 'https://262.ecma-international.org/16.0/#sec-advancestringindex' }, AgentCanSuspend: { url: 'https://262.ecma-international.org/16.0/#sec-agentcansuspend' }, AgentSignifier: { url: 'https://262.ecma-international.org/16.0/#sec-agentsignifier' }, AllCharacters: { url: 'https://262.ecma-international.org/16.0/#sec-allcharacters' }, AllImportAttributesSupported: { url: 'https://262.ecma-international.org/16.0/#sec-AllImportAttributesSupported' }, AllocateArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-allocatearraybuffer' }, AllocateSharedArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-allocatesharedarraybuffer' }, AllocateTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-allocatetypedarray' }, AllocateTypedArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-allocatetypedarraybuffer' }, ApplyStringOrNumericBinaryOperator: { url: 'https://262.ecma-international.org/16.0/#sec-applystringornumericbinaryoperator' }, ArrayBufferByteLength: { url: 'https://262.ecma-international.org/16.0/#sec-arraybufferbytelength' }, ArrayBufferCopyAndDetach: { url: 'https://262.ecma-international.org/16.0/#sec-arraybuffercopyanddetach' }, ArrayCreate: { url: 'https://262.ecma-international.org/16.0/#sec-arraycreate' }, ArraySetLength: { url: 'https://262.ecma-international.org/16.0/#sec-arraysetlength' }, ArraySpeciesCreate: { url: 'https://262.ecma-international.org/16.0/#sec-arrayspeciescreate' }, AsyncBlockStart: { url: 'https://262.ecma-international.org/16.0/#sec-asyncblockstart' }, AsyncFromSyncIteratorContinuation: { url: 'https://262.ecma-international.org/16.0/#sec-asyncfromsynciteratorcontinuation' }, AsyncFunctionStart: { url: 'https://262.ecma-international.org/16.0/#sec-async-functions-abstract-operations-async-function-start' }, AsyncGeneratorAwaitReturn: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorawaitreturn' }, AsyncGeneratorCompleteStep: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorcompletestep' }, AsyncGeneratorDrainQueue: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratordrainqueue' }, AsyncGeneratorEnqueue: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorenqueue' }, AsyncGeneratorResume: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorresume' }, AsyncGeneratorStart: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorstart' }, AsyncGeneratorUnwrapYieldResumption: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorunwrapyieldresumption' }, AsyncGeneratorValidate: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratorvalidate' }, AsyncGeneratorYield: { url: 'https://262.ecma-international.org/16.0/#sec-asyncgeneratoryield' }, AsyncIteratorClose: { url: 'https://262.ecma-international.org/16.0/#sec-asynciteratorclose' }, AsyncModuleExecutionFulfilled: { url: 'https://262.ecma-international.org/16.0/#sec-async-module-execution-fulfilled' }, AsyncModuleExecutionRejected: { url: 'https://262.ecma-international.org/16.0/#sec-async-module-execution-rejected' }, AtomicCompareExchangeInSharedBlock: { url: 'https://262.ecma-international.org/16.0/#sec-atomiccompareexchangeinsharedblock' }, AtomicReadModifyWrite: { url: 'https://262.ecma-international.org/16.0/#sec-atomicreadmodifywrite' }, AvailableNamedTimeZoneIdentifiers: { url: 'https://262.ecma-international.org/16.0/#sec-availablenamedtimezoneidentifiers' }, Await: { url: 'https://262.ecma-international.org/16.0/#await' }, BackreferenceMatcher: { url: 'https://262.ecma-international.org/16.0/#sec-backreference-matcher' }, 'BigInt::add': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-add' }, 'BigInt::bitwiseAND': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-bitwiseAND' }, 'BigInt::bitwiseNOT': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-bitwiseNOT' }, 'BigInt::bitwiseOR': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-bitwiseOR' }, 'BigInt::bitwiseXOR': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-bitwiseXOR' }, 'BigInt::divide': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-divide' }, 'BigInt::equal': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-equal' }, 'BigInt::exponentiate': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-exponentiate' }, 'BigInt::leftShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-leftShift' }, 'BigInt::lessThan': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-lessThan' }, 'BigInt::multiply': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-multiply' }, 'BigInt::remainder': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-remainder' }, 'BigInt::signedRightShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-signedRightShift' }, 'BigInt::subtract': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-subtract' }, 'BigInt::toString': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-tostring' }, 'BigInt::unaryMinus': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-unaryMinus' }, 'BigInt::unsignedRightShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-bigint-unsignedRightShift' }, BigIntBitwiseOp: { url: 'https://262.ecma-international.org/16.0/#sec-bigintbitwiseop' }, BinaryAnd: { url: 'https://262.ecma-international.org/16.0/#sec-binaryand' }, BinaryOr: { url: 'https://262.ecma-international.org/16.0/#sec-binaryor' }, BinaryXor: { url: 'https://262.ecma-international.org/16.0/#sec-binaryxor' }, BindThisValue: { url: 'https://262.ecma-international.org/16.0/#sec-bindthisvalue' }, BlockDeclarationInstantiation: { url: 'https://262.ecma-international.org/16.0/#sec-blockdeclarationinstantiation' }, BoundFunctionCreate: { url: 'https://262.ecma-international.org/16.0/#sec-boundfunctioncreate' }, BuiltinCallOrConstruct: { url: 'https://262.ecma-international.org/16.0/#sec-builtincallorconstruct' }, ByteListBitwiseOp: { url: 'https://262.ecma-international.org/16.0/#sec-bytelistbitwiseop' }, ByteListEqual: { url: 'https://262.ecma-international.org/16.0/#sec-bytelistequal' }, Call: { url: 'https://262.ecma-international.org/16.0/#sec-call' }, CanBeHeldWeakly: { url: 'https://262.ecma-international.org/16.0/#sec-canbeheldweakly' }, CanDeclareGlobalFunction: { url: 'https://262.ecma-international.org/16.0/#sec-candeclareglobalfunction' }, CanDeclareGlobalVar: { url: 'https://262.ecma-international.org/16.0/#sec-candeclareglobalvar' }, Canonicalize: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-canonicalize-ch' }, CanonicalizeKeyedCollectionKey: { url: 'https://262.ecma-international.org/16.0/#sec-canonicalizekeyedcollectionkey' }, CanonicalNumericIndexString: { url: 'https://262.ecma-international.org/16.0/#sec-canonicalnumericindexstring' }, CaseClauseIsSelected: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-caseclauseisselected' }, CharacterComplement: { url: 'https://262.ecma-international.org/16.0/#sec-charactercomplement' }, CharacterRange: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-characterrange-abstract-operation' }, CharacterRangeOrUnion: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation' }, CharacterSetMatcher: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation' }, clamp: { url: 'https://262.ecma-international.org/16.0/#clamping' }, CleanupFinalizationRegistry: { url: 'https://262.ecma-international.org/16.0/#sec-cleanup-finalization-registry' }, ClearKeptObjects: { url: 'https://262.ecma-international.org/16.0/#sec-clear-kept-objects' }, CloneArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-clonearraybuffer' }, CodePointAt: { url: 'https://262.ecma-international.org/16.0/#sec-codepointat' }, CodePointsToString: { url: 'https://262.ecma-international.org/16.0/#sec-codepointstostring' }, CompareArrayElements: { url: 'https://262.ecma-international.org/16.0/#sec-comparearrayelements' }, CompareTypedArrayElements: { url: 'https://262.ecma-international.org/16.0/#sec-comparetypedarrayelements' }, CompletePropertyDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-completepropertydescriptor' }, Completion: { url: 'https://262.ecma-international.org/16.0/#sec-completion-ao' }, CompletionRecord: { url: 'https://262.ecma-international.org/16.0/#sec-completion-record-specification-type' }, ComposeWriteEventBytes: { url: 'https://262.ecma-international.org/16.0/#sec-composewriteeventbytes' }, Construct: { url: 'https://262.ecma-international.org/16.0/#sec-construct' }, ContinueDynamicImport: { url: 'https://262.ecma-international.org/16.0/#sec-ContinueDynamicImport' }, ContinueModuleLoading: { url: 'https://262.ecma-international.org/16.0/#sec-ContinueModuleLoading' }, CopyDataBlockBytes: { url: 'https://262.ecma-international.org/16.0/#sec-copydatablockbytes' }, CopyDataProperties: { url: 'https://262.ecma-international.org/16.0/#sec-copydataproperties' }, CountLeftCapturingParensBefore: { url: 'https://262.ecma-international.org/16.0/#sec-countleftcapturingparensbefore' }, CountLeftCapturingParensWithin: { url: 'https://262.ecma-international.org/16.0/#sec-countleftcapturingparenswithin' }, CreateArrayFromList: { url: 'https://262.ecma-international.org/16.0/#sec-createarrayfromlist' }, CreateArrayIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createarrayiterator' }, CreateAsyncFromSyncIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createasyncfromsynciterator' }, CreateAsyncIteratorFromClosure: { url: 'https://262.ecma-international.org/16.0/#sec-createasynciteratorfromclosure' }, CreateBuiltinFunction: { url: 'https://262.ecma-international.org/16.0/#sec-createbuiltinfunction' }, CreateByteDataBlock: { url: 'https://262.ecma-international.org/16.0/#sec-createbytedatablock' }, CreateDataProperty: { url: 'https://262.ecma-international.org/16.0/#sec-createdataproperty' }, CreateDataPropertyOrThrow: { url: 'https://262.ecma-international.org/16.0/#sec-createdatapropertyorthrow' }, CreateDefaultExportSyntheticModule: { url: 'https://262.ecma-international.org/16.0/#sec-create-default-export-synthetic-module' }, CreateDynamicFunction: { url: 'https://262.ecma-international.org/16.0/#sec-createdynamicfunction' }, CreateForInIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createforiniterator' }, CreateGlobalFunctionBinding: { url: 'https://262.ecma-international.org/16.0/#sec-createglobalfunctionbinding' }, CreateGlobalVarBinding: { url: 'https://262.ecma-international.org/16.0/#sec-createglobalvarbinding' }, CreateHTML: { url: 'https://262.ecma-international.org/16.0/#sec-createhtml' }, CreateImportBinding: { url: 'https://262.ecma-international.org/16.0/#sec-createimportbinding' }, CreateIntrinsics: { url: 'https://262.ecma-international.org/16.0/#sec-createintrinsics' }, CreateIteratorFromClosure: { url: 'https://262.ecma-international.org/16.0/#sec-createiteratorfromclosure' }, CreateIteratorResultObject: { url: 'https://262.ecma-international.org/16.0/#sec-createiterresultobject' }, CreateListFromArrayLike: { url: 'https://262.ecma-international.org/16.0/#sec-createlistfromarraylike' }, CreateListIteratorRecord: { url: 'https://262.ecma-international.org/16.0/#sec-createlistiteratorRecord' }, CreateMapIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createmapiterator' }, CreateMappedArgumentsObject: { url: 'https://262.ecma-international.org/16.0/#sec-createmappedargumentsobject' }, CreateNonEnumerableDataPropertyOrThrow: { url: 'https://262.ecma-international.org/16.0/#sec-createnonenumerabledatapropertyorthrow' }, CreatePerIterationEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-createperiterationenvironment' }, CreateRegExpStringIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createregexpstringiterator' }, CreateResolvingFunctions: { url: 'https://262.ecma-international.org/16.0/#sec-createresolvingfunctions' }, CreateSetIterator: { url: 'https://262.ecma-international.org/16.0/#sec-createsetiterator' }, CreateSharedByteDataBlock: { url: 'https://262.ecma-international.org/16.0/#sec-createsharedbytedatablock' }, CreateUnmappedArgumentsObject: { url: 'https://262.ecma-international.org/16.0/#sec-createunmappedargumentsobject' }, DateFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-datefromtime' }, DateString: { url: 'https://262.ecma-international.org/16.0/#sec-datestring' }, Day: { url: 'https://262.ecma-international.org/16.0/#sec-day' }, DayFromYear: { url: 'https://262.ecma-international.org/16.0/#sec-dayfromyear' }, DaysInYear: { url: 'https://262.ecma-international.org/16.0/#sec-daysinyear' }, DayWithinYear: { url: 'https://262.ecma-international.org/16.0/#sec-daywithinyear' }, Decode: { url: 'https://262.ecma-international.org/16.0/#sec-decode' }, DefineField: { url: 'https://262.ecma-international.org/16.0/#sec-definefield' }, DefineMethodProperty: { url: 'https://262.ecma-international.org/16.0/#sec-definemethodproperty' }, DefinePropertyOrThrow: { url: 'https://262.ecma-international.org/16.0/#sec-definepropertyorthrow' }, DeletePropertyOrThrow: { url: 'https://262.ecma-international.org/16.0/#sec-deletepropertyorthrow' }, DetachArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-detacharraybuffer' }, DoWait: { url: 'https://262.ecma-international.org/16.0/#sec-dowait' }, EmptyMatcher: { url: 'https://262.ecma-international.org/16.0/#sec-emptymatcher' }, Encode: { url: 'https://262.ecma-international.org/16.0/#sec-encode' }, EncodeForRegExpEscape: { url: 'https://262.ecma-international.org/16.0/#sec-encodeforregexpescape' }, EnqueueAtomicsWaitAsyncTimeoutJob: { url: 'https://262.ecma-international.org/16.0/#sec-enqueueatomicswaitasynctimeoutjob' }, EnqueueResolveInAgentJob: { url: 'https://262.ecma-international.org/16.0/#sec-enqueueresolveinagentjob' }, EnterCriticalSection: { url: 'https://262.ecma-international.org/16.0/#sec-entercriticalsection' }, EnumerableOwnProperties: { url: 'https://262.ecma-international.org/16.0/#sec-enumerableownproperties' }, EnumerateObjectProperties: { url: 'https://262.ecma-international.org/16.0/#sec-enumerate-object-properties' }, EscapeRegExpPattern: { url: 'https://262.ecma-international.org/16.0/#sec-escaperegexppattern' }, EvalDeclarationInstantiation: { url: 'https://262.ecma-international.org/16.0/#sec-evaldeclarationinstantiation' }, EvaluateCall: { url: 'https://262.ecma-international.org/16.0/#sec-evaluatecall' }, EvaluateImportCall: { url: 'https://262.ecma-international.org/16.0/#sec-evaluate-import-call' }, EvaluateNew: { url: 'https://262.ecma-international.org/16.0/#sec-evaluatenew' }, EvaluatePropertyAccessWithExpressionKey: { url: 'https://262.ecma-international.org/16.0/#sec-evaluate-property-access-with-expression-key' }, EvaluatePropertyAccessWithIdentifierKey: { url: 'https://262.ecma-international.org/16.0/#sec-evaluate-property-access-with-identifier-key' }, EvaluateStringOrNumericBinaryExpression: { url: 'https://262.ecma-international.org/16.0/#sec-evaluatestringornumericbinaryexpression' }, EventSet: { url: 'https://262.ecma-international.org/16.0/#sec-event-set' }, ExecuteAsyncModule: { url: 'https://262.ecma-international.org/16.0/#sec-execute-async-module' }, '𝔽': { url: 'https://262.ecma-international.org/16.0/#𝔽' }, FindViaPredicate: { url: 'https://262.ecma-international.org/16.0/#sec-findviapredicate' }, FinishLoadingImportedModule: { url: 'https://262.ecma-international.org/16.0/#sec-FinishLoadingImportedModule' }, FlattenIntoArray: { url: 'https://262.ecma-international.org/16.0/#sec-flattenintoarray' }, floor: { url: 'https://262.ecma-international.org/16.0/#eqn-floor' }, ForBodyEvaluation: { url: 'https://262.ecma-international.org/16.0/#sec-forbodyevaluation' }, 'ForIn/OfBodyEvaluation': { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset' }, 'ForIn/OfHeadEvaluation': { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-forinofheadevaluation' }, FromPropertyDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-frompropertydescriptor' }, FulfillPromise: { url: 'https://262.ecma-international.org/16.0/#sec-fulfillpromise' }, FunctionDeclarationInstantiation: { url: 'https://262.ecma-international.org/16.0/#sec-functiondeclarationinstantiation' }, GatherAvailableAncestors: { url: 'https://262.ecma-international.org/16.0/#sec-gather-available-ancestors' }, GeneratorResume: { url: 'https://262.ecma-international.org/16.0/#sec-generatorresume' }, GeneratorResumeAbrupt: { url: 'https://262.ecma-international.org/16.0/#sec-generatorresumeabrupt' }, GeneratorStart: { url: 'https://262.ecma-international.org/16.0/#sec-generatorstart' }, GeneratorValidate: { url: 'https://262.ecma-international.org/16.0/#sec-generatorvalidate' }, GeneratorYield: { url: 'https://262.ecma-international.org/16.0/#sec-generatoryield' }, Get: { url: 'https://262.ecma-international.org/16.0/#sec-get-o-p' }, GetActiveScriptOrModule: { url: 'https://262.ecma-international.org/16.0/#sec-getactivescriptormodule' }, GetArrayBufferMaxByteLengthOption: { url: 'https://262.ecma-international.org/16.0/#sec-getarraybuffermaxbytelengthoption' }, GetFunctionRealm: { url: 'https://262.ecma-international.org/16.0/#sec-getfunctionrealm' }, GetGeneratorKind: { url: 'https://262.ecma-international.org/16.0/#sec-getgeneratorkind' }, GetGlobalObject: { url: 'https://262.ecma-international.org/16.0/#sec-getglobalobject' }, GetIdentifierReference: { url: 'https://262.ecma-international.org/16.0/#sec-getidentifierreference' }, GetImportedModule: { url: 'https://262.ecma-international.org/16.0/#sec-GetImportedModule' }, GetIterator: { url: 'https://262.ecma-international.org/16.0/#sec-getiterator' }, GetIteratorDirect: { url: 'https://262.ecma-international.org/16.0/#sec-getiteratordirect' }, GetIteratorFlattenable: { url: 'https://262.ecma-international.org/16.0/#sec-getiteratorflattenable' }, GetIteratorFromMethod: { url: 'https://262.ecma-international.org/16.0/#sec-getiteratorfrommethod' }, GetMatchIndexPair: { url: 'https://262.ecma-international.org/16.0/#sec-getmatchindexpair' }, GetMatchString: { url: 'https://262.ecma-international.org/16.0/#sec-getmatchstring' }, GetMethod: { url: 'https://262.ecma-international.org/16.0/#sec-getmethod' }, GetModifySetValueInBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-getmodifysetvalueinbuffer' }, GetModuleNamespace: { url: 'https://262.ecma-international.org/16.0/#sec-getmodulenamespace' }, GetNamedTimeZoneEpochNanoseconds: { url: 'https://262.ecma-international.org/16.0/#sec-getnamedtimezoneepochnanoseconds' }, GetNamedTimeZoneOffsetNanoseconds: { url: 'https://262.ecma-international.org/16.0/#sec-getnamedtimezoneoffsetnanoseconds' }, GetNewTarget: { url: 'https://262.ecma-international.org/16.0/#sec-getnewtarget' }, GetOwnPropertyKeys: { url: 'https://262.ecma-international.org/16.0/#sec-getownpropertykeys' }, GetPromiseResolve: { url: 'https://262.ecma-international.org/16.0/#sec-getpromiseresolve' }, GetPrototypeFromConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-getprototypefromconstructor' }, GetRawBytesFromSharedBlock: { url: 'https://262.ecma-international.org/16.0/#sec-getrawbytesfromsharedblock' }, GetSetRecord: { url: 'https://262.ecma-international.org/16.0/#sec-getsetrecord' }, GetStringIndex: { url: 'https://262.ecma-international.org/16.0/#sec-getstringindex' }, GetSubstitution: { url: 'https://262.ecma-international.org/16.0/#sec-getsubstitution' }, GetSuperBase: { url: 'https://262.ecma-international.org/16.0/#sec-getsuperbase' }, GetSuperConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-getsuperconstructor' }, GetTemplateObject: { url: 'https://262.ecma-international.org/16.0/#sec-gettemplateobject' }, GetThisEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-getthisenvironment' }, GetThisValue: { url: 'https://262.ecma-international.org/16.0/#sec-getthisvalue' }, GetUTCEpochNanoseconds: { url: 'https://262.ecma-international.org/16.0/#sec-getutcepochnanoseconds' }, GetV: { url: 'https://262.ecma-international.org/16.0/#sec-getv' }, GetValue: { url: 'https://262.ecma-international.org/16.0/#sec-getvalue' }, GetValueFromBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-getvaluefrombuffer' }, GetViewByteLength: { url: 'https://262.ecma-international.org/16.0/#sec-getviewbytelength' }, GetViewValue: { url: 'https://262.ecma-international.org/16.0/#sec-getviewvalue' }, GetWaiterList: { url: 'https://262.ecma-international.org/16.0/#sec-getwaiterlist' }, GlobalDeclarationInstantiation: { url: 'https://262.ecma-international.org/16.0/#sec-globaldeclarationinstantiation' }, GroupBy: { url: 'https://262.ecma-international.org/16.0/#sec-groupby' }, GroupSpecifiersThatMatch: { url: 'https://262.ecma-international.org/16.0/#sec-groupspecifiersthatmatch' }, HasEitherUnicodeFlag: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-haseitherunicodeflag-abstract-operation' }, HasLexicalDeclaration: { url: 'https://262.ecma-international.org/16.0/#sec-haslexicaldeclaration' }, HasOwnProperty: { url: 'https://262.ecma-international.org/16.0/#sec-hasownproperty' }, HasProperty: { url: 'https://262.ecma-international.org/16.0/#sec-hasproperty' }, HasRestrictedGlobalProperty: { url: 'https://262.ecma-international.org/16.0/#sec-hasrestrictedglobalproperty' }, HostEventSet: { url: 'https://262.ecma-international.org/16.0/#sec-hosteventset' }, HourFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-hourfromtime' }, IfAbruptCloseIterator: { url: 'https://262.ecma-international.org/16.0/#sec-ifabruptcloseiterator' }, IfAbruptRejectPromise: { url: 'https://262.ecma-international.org/16.0/#sec-ifabruptrejectpromise' }, ImportedLocalNames: { url: 'https://262.ecma-international.org/16.0/#sec-importedlocalnames' }, IncrementModuleAsyncEvaluationCount: { url: 'https://262.ecma-international.org/16.0/#sec-IncrementModuleAsyncEvaluationCount' }, InitializeBoundName: { url: 'https://262.ecma-international.org/16.0/#sec-initializeboundname' }, InitializeHostDefinedRealm: { url: 'https://262.ecma-international.org/16.0/#sec-initializehostdefinedrealm' }, InitializeInstanceElements: { url: 'https://262.ecma-international.org/16.0/#sec-initializeinstanceelements' }, InitializeReferencedBinding: { url: 'https://262.ecma-international.org/16.0/#sec-initializereferencedbinding' }, InitializeTypedArrayFromArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-initializetypedarrayfromarraybuffer' }, InitializeTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/16.0/#sec-initializetypedarrayfromarraylike' }, InitializeTypedArrayFromList: { url: 'https://262.ecma-international.org/16.0/#sec-initializetypedarrayfromlist' }, InitializeTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-initializetypedarrayfromtypedarray' }, InLeapYear: { url: 'https://262.ecma-international.org/16.0/#sec-inleapyear' }, InnerModuleEvaluation: { url: 'https://262.ecma-international.org/16.0/#sec-innermoduleevaluation' }, InnerModuleLinking: { url: 'https://262.ecma-international.org/16.0/#sec-InnerModuleLinking' }, InnerModuleLoading: { url: 'https://262.ecma-international.org/16.0/#sec-InnerModuleLoading' }, InstallErrorCause: { url: 'https://262.ecma-international.org/16.0/#sec-installerrorcause' }, InstanceofOperator: { url: 'https://262.ecma-international.org/16.0/#sec-instanceofoperator' }, InternalizeJSONProperty: { url: 'https://262.ecma-international.org/16.0/#sec-internalizejsonproperty' }, Invoke: { url: 'https://262.ecma-international.org/16.0/#sec-invoke' }, IsAccessorDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-isaccessordescriptor' }, IsAnonymousFunctionDefinition: { url: 'https://262.ecma-international.org/16.0/#sec-isanonymousfunctiondefinition' }, IsArray: { url: 'https://262.ecma-international.org/16.0/#sec-isarray' }, IsArrayBufferViewOutOfBounds: { url: 'https://262.ecma-international.org/16.0/#sec-isarraybufferviewoutofbounds' }, IsBigIntElementType: { url: 'https://262.ecma-international.org/16.0/#sec-isbigintelementtype' }, IsCallable: { url: 'https://262.ecma-international.org/16.0/#sec-iscallable' }, IsCompatiblePropertyDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-iscompatiblepropertydescriptor' }, IsConcatSpreadable: { url: 'https://262.ecma-international.org/16.0/#sec-isconcatspreadable' }, IsConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-isconstructor' }, IsDataDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-isdatadescriptor' }, IsDetachedBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-isdetachedbuffer' }, IsExtensible: { url: 'https://262.ecma-international.org/16.0/#sec-isextensible-o' }, IsFixedLengthArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-isfixedlengtharraybuffer' }, IsGenericDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-isgenericdescriptor' }, IsInTailPosition: { url: 'https://262.ecma-international.org/16.0/#sec-isintailposition' }, IsLabelledFunction: { url: 'https://262.ecma-international.org/16.0/#sec-islabelledfunction' }, IsLessThan: { url: 'https://262.ecma-international.org/16.0/#sec-islessthan' }, IsLooselyEqual: { url: 'https://262.ecma-international.org/16.0/#sec-islooselyequal' }, IsNoTearConfiguration: { url: 'https://262.ecma-international.org/16.0/#sec-isnotearconfiguration' }, IsPrivateReference: { url: 'https://262.ecma-international.org/16.0/#sec-isprivatereference' }, IsPromise: { url: 'https://262.ecma-international.org/16.0/#sec-ispromise' }, IsPropertyReference: { url: 'https://262.ecma-international.org/16.0/#sec-ispropertyreference' }, IsRegExp: { url: 'https://262.ecma-international.org/16.0/#sec-isregexp' }, IsSharedArrayBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-issharedarraybuffer' }, IsStrict: { url: 'https://262.ecma-international.org/16.0/#sec-isstrict' }, IsStrictlyEqual: { url: 'https://262.ecma-international.org/16.0/#sec-isstrictlyequal' }, IsStringWellFormedUnicode: { url: 'https://262.ecma-international.org/16.0/#sec-isstringwellformedunicode' }, IsSuperReference: { url: 'https://262.ecma-international.org/16.0/#sec-issuperreference' }, IsTimeZoneOffsetString: { url: 'https://262.ecma-international.org/16.0/#sec-istimezoneoffsetstring' }, IsTypedArrayFixedLength: { url: 'https://262.ecma-international.org/16.0/#sec-istypedarrayfixedlength' }, IsTypedArrayOutOfBounds: { url: 'https://262.ecma-international.org/16.0/#sec-istypedarrayoutofbounds' }, IsUnclampedIntegerElementType: { url: 'https://262.ecma-international.org/16.0/#sec-isunclampedintegerelementtype' }, IsUnresolvableReference: { url: 'https://262.ecma-international.org/16.0/#sec-isunresolvablereference' }, IsUnsignedElementType: { url: 'https://262.ecma-international.org/16.0/#sec-isunsignedelementtype' }, IsValidIntegerIndex: { url: 'https://262.ecma-international.org/16.0/#sec-isvalidintegerindex' }, IsValidRegularExpressionLiteral: { url: 'https://262.ecma-international.org/16.0/#sec-isvalidregularexpressionliteral' }, IsViewOutOfBounds: { url: 'https://262.ecma-international.org/16.0/#sec-isviewoutofbounds' }, IsWordChar: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-iswordchar-abstract-operation' }, IteratorClose: { url: 'https://262.ecma-international.org/16.0/#sec-iteratorclose' }, IteratorComplete: { url: 'https://262.ecma-international.org/16.0/#sec-iteratorcomplete' }, IteratorNext: { url: 'https://262.ecma-international.org/16.0/#sec-iteratornext' }, IteratorStep: { url: 'https://262.ecma-international.org/16.0/#sec-iteratorstep' }, IteratorStepValue: { url: 'https://262.ecma-international.org/16.0/#sec-iteratorstepvalue' }, IteratorToList: { url: 'https://262.ecma-international.org/16.0/#sec-iteratortolist' }, IteratorValue: { url: 'https://262.ecma-international.org/16.0/#sec-iteratorvalue' }, KeyForSymbol: { url: 'https://262.ecma-international.org/16.0/#sec-keyforsymbol' }, LeaveCriticalSection: { url: 'https://262.ecma-international.org/16.0/#sec-leavecriticalsection' }, LengthOfArrayLike: { url: 'https://262.ecma-international.org/16.0/#sec-lengthofarraylike' }, LocalTime: { url: 'https://262.ecma-international.org/16.0/#sec-localtime' }, LoopContinues: { url: 'https://262.ecma-international.org/16.0/#sec-loopcontinues' }, MakeArgGetter: { url: 'https://262.ecma-international.org/16.0/#sec-makearggetter' }, MakeArgSetter: { url: 'https://262.ecma-international.org/16.0/#sec-makeargsetter' }, MakeBasicObject: { url: 'https://262.ecma-international.org/16.0/#sec-makebasicobject' }, MakeClassConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-makeclassconstructor' }, MakeConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-makeconstructor' }, MakeDataViewWithBufferWitnessRecord: { url: 'https://262.ecma-international.org/16.0/#sec-makedataviewwithbufferwitnessrecord' }, MakeDate: { url: 'https://262.ecma-international.org/16.0/#sec-makedate' }, MakeDay: { url: 'https://262.ecma-international.org/16.0/#sec-makeday' }, MakeFullYear: { url: 'https://262.ecma-international.org/16.0/#sec-makefullyear' }, MakeMatchIndicesIndexPairArray: { url: 'https://262.ecma-international.org/16.0/#sec-makematchindicesindexpairarray' }, MakeMethod: { url: 'https://262.ecma-international.org/16.0/#sec-makemethod' }, MakePrivateReference: { url: 'https://262.ecma-international.org/16.0/#sec-makeprivatereference' }, MakeSuperPropertyReference: { url: 'https://262.ecma-international.org/16.0/#sec-makesuperpropertyreference' }, MakeTime: { url: 'https://262.ecma-international.org/16.0/#sec-maketime' }, MakeTypedArrayWithBufferWitnessRecord: { url: 'https://262.ecma-international.org/16.0/#sec-maketypedarraywithbufferwitnessrecord' }, MatchSequence: { url: 'https://262.ecma-international.org/16.0/#sec-matchsequence' }, MatchTwoAlternatives: { url: 'https://262.ecma-international.org/16.0/#sec-matchtwoalternatives' }, max: { url: 'https://262.ecma-international.org/16.0/#eqn-max' }, MaybeSimpleCaseFolding: { url: 'https://262.ecma-international.org/16.0/#sec-maybesimplecasefolding' }, MightBothParticipate: { url: 'https://262.ecma-international.org/16.0/#sec-mightbothparticipate' }, min: { url: 'https://262.ecma-international.org/16.0/#eqn-min' }, MinFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-minfromtime' }, ModuleNamespaceCreate: { url: 'https://262.ecma-international.org/16.0/#sec-modulenamespacecreate' }, ModuleRequestsEqual: { url: 'https://262.ecma-international.org/16.0/#sec-ModuleRequestsEqual' }, modulo: { url: 'https://262.ecma-international.org/16.0/#eqn-modulo' }, MonthFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-monthfromtime' }, msFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-msfromtime' }, NewDeclarativeEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newdeclarativeenvironment' }, NewFunctionEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newfunctionenvironment' }, NewGlobalEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newglobalenvironment' }, NewModuleEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newmoduleenvironment' }, NewObjectEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newobjectenvironment' }, NewPrivateEnvironment: { url: 'https://262.ecma-international.org/16.0/#sec-newprivateenvironment' }, NewPromiseCapability: { url: 'https://262.ecma-international.org/16.0/#sec-newpromisecapability' }, NewPromiseReactionJob: { url: 'https://262.ecma-international.org/16.0/#sec-newpromisereactionjob' }, NewPromiseResolveThenableJob: { url: 'https://262.ecma-international.org/16.0/#sec-newpromiseresolvethenablejob' }, NormalCompletion: { url: 'https://262.ecma-international.org/16.0/#sec-normalcompletion' }, NotifyWaiter: { url: 'https://262.ecma-international.org/16.0/#sec-notifywaiter' }, 'Number::add': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-add' }, 'Number::bitwiseAND': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-bitwiseAND' }, 'Number::bitwiseNOT': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-bitwiseNOT' }, 'Number::bitwiseOR': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-bitwiseOR' }, 'Number::bitwiseXOR': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-bitwiseXOR' }, 'Number::divide': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-divide' }, 'Number::equal': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-equal' }, 'Number::exponentiate': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-exponentiate' }, 'Number::leftShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-leftShift' }, 'Number::lessThan': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-lessThan' }, 'Number::multiply': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-multiply' }, 'Number::remainder': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-remainder' }, 'Number::sameValue': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-sameValue' }, 'Number::sameValueZero': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-sameValueZero' }, 'Number::signedRightShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-signedRightShift' }, 'Number::subtract': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-subtract' }, 'Number::toString': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-tostring' }, 'Number::unaryMinus': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-unaryMinus' }, 'Number::unsignedRightShift': { url: 'https://262.ecma-international.org/16.0/#sec-numeric-types-number-unsignedRightShift' }, NumberBitwiseOp: { url: 'https://262.ecma-international.org/16.0/#sec-numberbitwiseop' }, NumberToBigInt: { url: 'https://262.ecma-international.org/16.0/#sec-numbertobigint' }, NumericToRawBytes: { url: 'https://262.ecma-international.org/16.0/#sec-numerictorawbytes' }, ObjectDefineProperties: { url: 'https://262.ecma-international.org/16.0/#sec-objectdefineproperties' }, OrdinaryCallBindThis: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarycallbindthis' }, OrdinaryCallEvaluateBody: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarycallevaluatebody' }, OrdinaryCreateFromConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarycreatefromconstructor' }, OrdinaryDefineOwnProperty: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarydefineownproperty' }, OrdinaryDelete: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarydelete' }, OrdinaryFunctionCreate: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryfunctioncreate' }, OrdinaryGet: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryget' }, OrdinaryGetOwnProperty: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarygetownproperty' }, OrdinaryGetPrototypeOf: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarygetprototypeof' }, OrdinaryHasInstance: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryhasinstance' }, OrdinaryHasProperty: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryhasproperty' }, OrdinaryIsExtensible: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryisextensible' }, OrdinaryObjectCreate: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryobjectcreate' }, OrdinaryOwnPropertyKeys: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryownpropertykeys' }, OrdinaryPreventExtensions: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarypreventextensions' }, OrdinarySet: { url: 'https://262.ecma-international.org/16.0/#sec-ordinaryset' }, OrdinarySetPrototypeOf: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarysetprototypeof' }, OrdinarySetWithOwnDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarysetwithowndescriptor' }, OrdinaryToPrimitive: { url: 'https://262.ecma-international.org/16.0/#sec-ordinarytoprimitive' }, ParseHexOctet: { url: 'https://262.ecma-international.org/16.0/#sec-parsehexoctet' }, ParseJSON: { url: 'https://262.ecma-international.org/16.0/#sec-ParseJSON' }, ParseJSONModule: { url: 'https://262.ecma-international.org/16.0/#sec-parse-json-module' }, ParseModule: { url: 'https://262.ecma-international.org/16.0/#sec-parsemodule' }, ParsePattern: { url: 'https://262.ecma-international.org/16.0/#sec-parsepattern' }, ParseScript: { url: 'https://262.ecma-international.org/16.0/#sec-parse-script' }, ParseText: { url: 'https://262.ecma-international.org/16.0/#sec-parsetext' }, ParseTimeZoneOffsetString: { url: 'https://262.ecma-international.org/16.0/#sec-parsetimezoneoffsetstring' }, PerformEval: { url: 'https://262.ecma-international.org/16.0/#sec-performeval' }, PerformPromiseAll: { url: 'https://262.ecma-international.org/16.0/#sec-performpromiseall' }, PerformPromiseAllSettled: { url: 'https://262.ecma-international.org/16.0/#sec-performpromiseallsettled' }, PerformPromiseAny: { url: 'https://262.ecma-international.org/16.0/#sec-performpromiseany' }, PerformPromiseRace: { url: 'https://262.ecma-international.org/16.0/#sec-performpromiserace' }, PerformPromiseThen: { url: 'https://262.ecma-international.org/16.0/#sec-performpromisethen' }, PrepareForOrdinaryCall: { url: 'https://262.ecma-international.org/16.0/#sec-prepareforordinarycall' }, PrepareForTailCall: { url: 'https://262.ecma-international.org/16.0/#sec-preparefortailcall' }, PrivateElementFind: { url: 'https://262.ecma-international.org/16.0/#sec-privateelementfind' }, PrivateFieldAdd: { url: 'https://262.ecma-international.org/16.0/#sec-privatefieldadd' }, PrivateGet: { url: 'https://262.ecma-international.org/16.0/#sec-privateget' }, PrivateMethodOrAccessorAdd: { url: 'https://262.ecma-international.org/16.0/#sec-privatemethodoraccessoradd' }, PrivateSet: { url: 'https://262.ecma-international.org/16.0/#sec-privateset' }, PromiseResolve: { url: 'https://262.ecma-international.org/16.0/#sec-promise-resolve' }, ProxyCreate: { url: 'https://262.ecma-international.org/16.0/#sec-proxycreate' }, PutValue: { url: 'https://262.ecma-international.org/16.0/#sec-putvalue' }, QuoteJSONString: { url: 'https://262.ecma-international.org/16.0/#sec-quotejsonstring' }, ℝ: { url: 'https://262.ecma-international.org/16.0/#ℝ' }, RawBytesToNumeric: { url: 'https://262.ecma-international.org/16.0/#sec-rawbytestonumeric' }, 'reads-bytes-from': { url: 'https://262.ecma-international.org/16.0/#sec-reads-bytes-from' }, RegExpAlloc: { url: 'https://262.ecma-international.org/16.0/#sec-regexpalloc' }, RegExpBuiltinExec: { url: 'https://262.ecma-international.org/16.0/#sec-regexpbuiltinexec' }, RegExpCreate: { url: 'https://262.ecma-international.org/16.0/#sec-regexpcreate' }, RegExpExec: { url: 'https://262.ecma-international.org/16.0/#sec-regexpexec' }, RegExpHasFlag: { url: 'https://262.ecma-international.org/16.0/#sec-regexphasflag' }, RegExpInitialize: { url: 'https://262.ecma-international.org/16.0/#sec-regexpinitialize' }, RejectPromise: { url: 'https://262.ecma-international.org/16.0/#sec-rejectpromise' }, RemoveWaiter: { url: 'https://262.ecma-international.org/16.0/#sec-removewaiter' }, RemoveWaiters: { url: 'https://262.ecma-international.org/16.0/#sec-removewaiters' }, RepeatMatcher: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-repeatmatcher-abstract-operation' }, RequireInternalSlot: { url: 'https://262.ecma-international.org/16.0/#sec-requireinternalslot' }, RequireObjectCoercible: { url: 'https://262.ecma-international.org/16.0/#sec-requireobjectcoercible' }, ResolveBinding: { url: 'https://262.ecma-international.org/16.0/#sec-resolvebinding' }, ResolvePrivateIdentifier: { url: 'https://262.ecma-international.org/16.0/#sec-resolve-private-identifier' }, ResolveThisBinding: { url: 'https://262.ecma-international.org/16.0/#sec-resolvethisbinding' }, ReturnCompletion: { url: 'https://262.ecma-international.org/16.0/#sec-returncompletion' }, ReturnIfAbrupt: { url: 'https://262.ecma-international.org/16.0/#sec-returnifabrupt' }, RevalidateAtomicAccess: { url: 'https://262.ecma-international.org/16.0/#sec-revalidateatomicaccess' }, RoundMVResult: { url: 'https://262.ecma-international.org/16.0/#sec-roundmvresult' }, SameType: { url: 'https://262.ecma-international.org/16.0/#sec-sametype' }, SameValue: { url: 'https://262.ecma-international.org/16.0/#sec-samevalue' }, SameValueNonNumber: { url: 'https://262.ecma-international.org/16.0/#sec-samevaluenonnumber' }, SameValueZero: { url: 'https://262.ecma-international.org/16.0/#sec-samevaluezero' }, scf: { url: 'https://262.ecma-international.org/16.0/#eqn-scf' }, ScriptEvaluation: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-scriptevaluation' }, SecFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-secfromtime' }, SerializeJSONArray: { url: 'https://262.ecma-international.org/16.0/#sec-serializejsonarray' }, SerializeJSONObject: { url: 'https://262.ecma-international.org/16.0/#sec-serializejsonobject' }, SerializeJSONProperty: { url: 'https://262.ecma-international.org/16.0/#sec-serializejsonproperty' }, Set: { url: 'https://262.ecma-international.org/16.0/#sec-set-o-p-v-throw' }, SetDataHas: { url: 'https://262.ecma-international.org/16.0/#sec-setdatahas' }, SetDataIndex: { url: 'https://262.ecma-international.org/16.0/#sec-setdataindex' }, SetDataSize: { url: 'https://262.ecma-international.org/16.0/#sec-setdatasize' }, SetDefaultGlobalBindings: { url: 'https://262.ecma-international.org/16.0/#sec-setdefaultglobalbindings' }, SetFunctionLength: { url: 'https://262.ecma-international.org/16.0/#sec-setfunctionlength' }, SetFunctionName: { url: 'https://262.ecma-international.org/16.0/#sec-setfunctionname' }, SetImmutablePrototype: { url: 'https://262.ecma-international.org/16.0/#sec-set-immutable-prototype' }, SetIntegrityLevel: { url: 'https://262.ecma-international.org/16.0/#sec-setintegritylevel' }, SetSyntheticModuleExport: { url: 'https://262.ecma-international.org/16.0/#sec-setsyntheticmoduleexport' }, SetterThatIgnoresPrototypeProperties: { url: 'https://262.ecma-international.org/16.0/#sec-SetterThatIgnoresPrototypeProperties' }, SetTypedArrayFromArrayLike: { url: 'https://262.ecma-international.org/16.0/#sec-settypedarrayfromarraylike' }, SetTypedArrayFromTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-settypedarrayfromtypedarray' }, SetValueInBuffer: { url: 'https://262.ecma-international.org/16.0/#sec-setvalueinbuffer' }, SetViewValue: { url: 'https://262.ecma-international.org/16.0/#sec-setviewvalue' }, SharedDataBlockEventSet: { url: 'https://262.ecma-international.org/16.0/#sec-sharedatablockeventset' }, SortIndexedProperties: { url: 'https://262.ecma-international.org/16.0/#sec-sortindexedproperties' }, SpeciesConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-speciesconstructor' }, StringCreate: { url: 'https://262.ecma-international.org/16.0/#sec-stringcreate' }, StringGetOwnProperty: { url: 'https://262.ecma-international.org/16.0/#sec-stringgetownproperty' }, StringIndexOf: { url: 'https://262.ecma-international.org/16.0/#sec-stringindexof' }, StringLastIndexOf: { url: 'https://262.ecma-international.org/16.0/#sec-stringlastindexof' }, StringPad: { url: 'https://262.ecma-international.org/16.0/#sec-stringpad' }, StringPaddingBuiltinsImpl: { url: 'https://262.ecma-international.org/16.0/#sec-stringpaddingbuiltinsimpl' }, StringToBigInt: { url: 'https://262.ecma-international.org/16.0/#sec-stringtobigint' }, StringToCodePoints: { url: 'https://262.ecma-international.org/16.0/#sec-stringtocodepoints' }, StringToNumber: { url: 'https://262.ecma-international.org/16.0/#sec-stringtonumber' }, substring: { url: 'https://262.ecma-international.org/16.0/#substring' }, SuspendThisAgent: { url: 'https://262.ecma-international.org/16.0/#sec-suspendthisagent' }, SymbolDescriptiveString: { url: 'https://262.ecma-international.org/16.0/#sec-symboldescriptivestring' }, SystemTimeZoneIdentifier: { url: 'https://262.ecma-international.org/16.0/#sec-systemtimezoneidentifier' }, TemplateString: { url: 'https://262.ecma-international.org/16.0/#sec-templatestring' }, TestIntegrityLevel: { url: 'https://262.ecma-international.org/16.0/#sec-testintegritylevel' }, ThisBigIntValue: { url: 'https://262.ecma-international.org/16.0/#sec-thisbigintvalue' }, ThisBooleanValue: { url: 'https://262.ecma-international.org/16.0/#sec-thisbooleanvalue' }, ThisNumberValue: { url: 'https://262.ecma-international.org/16.0/#sec-thisnumbervalue' }, ThisStringValue: { url: 'https://262.ecma-international.org/16.0/#sec-thisstringvalue' }, ThisSymbolValue: { url: 'https://262.ecma-international.org/16.0/#sec-thissymbolvalue' }, ThrowCompletion: { url: 'https://262.ecma-international.org/16.0/#sec-throwcompletion' }, TimeClip: { url: 'https://262.ecma-international.org/16.0/#sec-timeclip' }, TimeFromYear: { url: 'https://262.ecma-international.org/16.0/#sec-timefromyear' }, TimeString: { url: 'https://262.ecma-international.org/16.0/#sec-timestring' }, TimeWithinDay: { url: 'https://262.ecma-international.org/16.0/#sec-timewithinday' }, TimeZoneString: { url: 'https://262.ecma-international.org/16.0/#sec-timezoneestring' }, ToBigInt: { url: 'https://262.ecma-international.org/16.0/#sec-tobigint' }, ToBigInt64: { url: 'https://262.ecma-international.org/16.0/#sec-tobigint64' }, ToBigUint64: { url: 'https://262.ecma-international.org/16.0/#sec-tobiguint64' }, ToBoolean: { url: 'https://262.ecma-international.org/16.0/#sec-toboolean' }, ToDateString: { url: 'https://262.ecma-international.org/16.0/#sec-todatestring' }, ToIndex: { url: 'https://262.ecma-international.org/16.0/#sec-toindex' }, ToInt16: { url: 'https://262.ecma-international.org/16.0/#sec-toint16' }, ToInt32: { url: 'https://262.ecma-international.org/16.0/#sec-toint32' }, ToInt8: { url: 'https://262.ecma-international.org/16.0/#sec-toint8' }, ToIntegerOrInfinity: { url: 'https://262.ecma-international.org/16.0/#sec-tointegerorinfinity' }, ToLength: { url: 'https://262.ecma-international.org/16.0/#sec-tolength' }, ToNumber: { url: 'https://262.ecma-international.org/16.0/#sec-tonumber' }, ToNumeric: { url: 'https://262.ecma-international.org/16.0/#sec-tonumeric' }, ToObject: { url: 'https://262.ecma-international.org/16.0/#sec-toobject' }, ToPrimitive: { url: 'https://262.ecma-international.org/16.0/#sec-toprimitive' }, ToPropertyDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-topropertydescriptor' }, ToPropertyKey: { url: 'https://262.ecma-international.org/16.0/#sec-topropertykey' }, ToString: { url: 'https://262.ecma-international.org/16.0/#sec-tostring' }, ToUint16: { url: 'https://262.ecma-international.org/16.0/#sec-touint16' }, ToUint32: { url: 'https://262.ecma-international.org/16.0/#sec-touint32' }, ToUint8: { url: 'https://262.ecma-international.org/16.0/#sec-touint8' }, ToUint8Clamp: { url: 'https://262.ecma-international.org/16.0/#sec-touint8clamp' }, ToZeroPaddedDecimalString: { url: 'https://262.ecma-international.org/16.0/#sec-tozeropaddeddecimalstring' }, TriggerPromiseReactions: { url: 'https://262.ecma-international.org/16.0/#sec-triggerpromisereactions' }, TrimString: { url: 'https://262.ecma-international.org/16.0/#sec-trimstring' }, truncate: { url: 'https://262.ecma-international.org/16.0/#eqn-truncate' }, TypedArrayByteLength: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraybytelength' }, TypedArrayCreate: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraycreate' }, TypedArrayCreateFromConstructor: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraycreatefromconstructor' }, TypedArrayCreateSameType: { url: 'https://262.ecma-international.org/16.0/#sec-typedarray-create-same-type' }, TypedArrayElementSize: { url: 'https://262.ecma-international.org/16.0/#sec-typedarrayelementsize' }, TypedArrayElementType: { url: 'https://262.ecma-international.org/16.0/#sec-typedarrayelementtype' }, TypedArrayGetElement: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraygetelement' }, TypedArrayLength: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraylength' }, TypedArraySetElement: { url: 'https://262.ecma-international.org/16.0/#sec-typedarraysetelement' }, TypedArraySpeciesCreate: { url: 'https://262.ecma-international.org/16.0/#typedarray-species-create' }, UnicodeEscape: { url: 'https://262.ecma-international.org/16.0/#sec-unicodeescape' }, UnicodeMatchProperty: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-unicodematchproperty-p' }, UnicodeMatchPropertyValue: { url: 'https://262.ecma-international.org/16.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v' }, UpdateEmpty: { url: 'https://262.ecma-international.org/16.0/#sec-updateempty' }, UpdateModifiers: { url: 'https://262.ecma-international.org/16.0/#sec-updatemodifiers' }, UTC: { url: 'https://262.ecma-international.org/16.0/#sec-utc-t' }, UTF16EncodeCodePoint: { url: 'https://262.ecma-international.org/16.0/#sec-utf16encodecodepoint' }, UTF16SurrogatePairToCodePoint: { url: 'https://262.ecma-international.org/16.0/#sec-utf16decodesurrogatepair' }, ValidateAndApplyPropertyDescriptor: { url: 'https://262.ecma-international.org/16.0/#sec-validateandapplypropertydescriptor' }, ValidateAtomicAccess: { url: 'https://262.ecma-international.org/16.0/#sec-validateatomicaccess' }, ValidateAtomicAccessOnIntegerTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-validateatomicaccessonintegertypedarray' }, ValidateIntegerTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-validateintegertypedarray' }, ValidateNonRevokedProxy: { url: 'https://262.ecma-international.org/16.0/#sec-validatenonrevokedproxy' }, ValidateTypedArray: { url: 'https://262.ecma-international.org/16.0/#sec-validatetypedarray' }, ValueOfReadEvent: { url: 'https://262.ecma-international.org/16.0/#sec-valueofreadevent' }, WeakRefDeref: { url: 'https://262.ecma-international.org/16.0/#sec-weakrefderef' }, WeekDay: { url: 'https://262.ecma-international.org/16.0/#sec-weekday' }, WordCharacters: { url: 'https://262.ecma-international.org/16.0/#sec-wordcharacters' }, YearFromTime: { url: 'https://262.ecma-international.org/16.0/#sec-yearfromtime' }, Yield: { url: 'https://262.ecma-international.org/16.0/#sec-yield' }, ℤ: { url: 'https://262.ecma-international.org/16.0/#ℤ' } }; ljharb-es-abstract-babee05/operations/build-unicode.mjs000066400000000000000000000007141516525472400233650ustar00rootroot00000000000000import fs from 'fs'; import path from 'path'; import C from '@unicode/unicode-15.0.0/Case_Folding/C/symbols.js'; import S from '@unicode/unicode-15.0.0/Case_Folding/S/symbols.js'; function normalize(map) { return Object.fromEntries(Array.from(map, ([o, i]) => [i, [].concat(o)[0]])); } const cases = { C: normalize(C), S: normalize(S), }; fs.writeFileSync( path.join(process.cwd(), './helpers/caseFolding.json'), JSON.stringify(cases, null, '\t'), ); ljharb-es-abstract-babee05/operations/deltas.js000066400000000000000000000012541516525472400217410ustar00rootroot00000000000000'use strict'; const diff = require('diff'); const years = require('./years'); const keys = ['../es5'].concat(years).map((x) => [ x, Object.keys(require(`./${x}`)).sort(), // eslint-disable-line global-require ]); const results = Object.fromEntries([5].concat(years).map((y) => [ y, { added: new Set(), removed: new Set() }, ])); function parse(from, to, result) { diff.diffArrays(from, to).forEach((x) => { x.value.forEach((v) => { if (x.added) { result.added.add(v); } if (x.removed) { result.removed.add(v.replace(/ /g, '')); } }); }); } keys.reduce(([, pK], [y, k]) => { parse(pK, k, results[y]); return [y, k]; }); module.exports = results; ljharb-es-abstract-babee05/operations/es5.js000066400000000000000000000062141516525472400211620ustar00rootroot00000000000000'use strict'; module.exports = { 'Abstract Equality Comparison': 'https://262.ecma-international.org/5.1/#sec-11.9.3', 'Abstract Relational Comparison': 'https://262.ecma-international.org/5.1/#sec-11.8.5', 'Strict Equality Comparison': 'https://262.ecma-international.org/5.1/#sec-11.9.6', abs: 'http://262.ecma-international.org/5.1/#sec-5.2', Canonicalize: 'https://262.ecma-international.org/5.1/#sec-15.10.2.8', CheckObjectCoercible: 'https://262.ecma-international.org/5.1/#sec-9.10', DateFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.5', Day: 'https://262.ecma-international.org/5.1/#sec-15.9.1.2', DayFromYear: 'https://262.ecma-international.org/5.1/#sec-15.9.1.3', DaysInYear: 'https://262.ecma-international.org/5.1/#sec-15.9.1.3', DayWithinYear: 'https://262.ecma-international.org/5.1/#sec-15.9.1.4', floor: 'http://262.ecma-international.org/5.1/#sec-5.2', FromPropertyDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10.4', HourFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.10', InLeapYear: 'https://262.ecma-international.org/5.1/#sec-15.9.1.3', IsAccessorDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10.1', IsCallable: 'https://262.ecma-international.org/5.1/#sec-9.11', IsDataDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10.2', IsGenericDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10.3', IsPropertyDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10', MakeDate: 'https://262.ecma-international.org/5.1/#sec-15.9.1.13', MakeDay: 'https://262.ecma-international.org/5.1/#sec-15.9.1.12', MakeTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.11', MinFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.10', modulo: 'https://262.ecma-international.org/5.1/#sec-5.2', MonthFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.4', msFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.10', SameValue: 'https://262.ecma-international.org/5.1/#sec-9.12', SecFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.10', SplitMatch: 'https://262.ecma-international.org/5.1/#sec-15.5.4.14', TimeClip: 'https://262.ecma-international.org/5.1/#sec-15.9.1.14', TimeFromYear: 'https://262.ecma-international.org/5.1/#sec-15.9.1.3', TimeWithinDay: 'https://262.ecma-international.org/5.1/#sec-15.9.1.2', ToBoolean: 'https://262.ecma-international.org/5.1/#sec-9.2', ToInt32: 'https://262.ecma-international.org/5.1/#sec-9.5', ToInteger: 'https://262.ecma-international.org/5.1/#sec-9.4', ToNumber: 'https://262.ecma-international.org/5.1/#sec-9.3', ToObject: 'https://262.ecma-international.org/5.1/#sec-9.9', ToPrimitive: 'https://262.ecma-international.org/5.1/#sec-9.1', ToPropertyDescriptor: 'https://262.ecma-international.org/5.1/#sec-8.10.5', ToString: 'https://262.ecma-international.org/5.1/#sec-9.8', ToUint16: 'https://262.ecma-international.org/5.1/#sec-9.7', ToUint32: 'https://262.ecma-international.org/5.1/#sec-9.6', Type: 'https://262.ecma-international.org/5.1/#sec-8', WeekDay: 'https://262.ecma-international.org/5.1/#sec-15.9.1.6', YearFromTime: 'https://262.ecma-international.org/5.1/#sec-15.9.1.3' }; ljharb-es-abstract-babee05/operations/getOps.js000077500000000000000000000217701516525472400217360ustar00rootroot00000000000000#!/usr/bin/env node 'use strict'; const fs = require('fs').promises; const path = require('path'); const { promisify } = require('util'); const exec = promisify(require('child_process').exec); const $ = require('cheerio'); const fromEntries = require('object.fromentries'); const years = require('./years'); async function getOps(year) { if (year < 2015) { throw new RangeError('ES2015+ only'); } const edition = year - 2009; const specHTMLurl = year > 2015 ? new URL(`https://raw.githubusercontent.com/tc39/ecma262/${year === 2026 ? 'HEAD' : `es${year}`}/spec.html`) : new URL('https://262.ecma-international.org/6.0/'); const cmd = `curl -q --silent ${specHTMLurl}`; console.log(year, cmd); const specHTML = String((await exec(cmd, { maxBuffer: Infinity })).stdout); const root = $(specHTML); let aOps; if (year > 2021) { aOps = $('[aoid],[type$="abstract operation"],[id^="sec-numeric-types-"]:not([aoid]):not([type~="abstract operation"])', specHTML) .not('[type="sdo"]'); } else { aOps = root.filter('[aoid]') .add(root.find('[aoid]')) .add(root.find('[id^="sec-numeric-types-"]:not([aoid])')) .not('[type="sdo"]'); if (aOps.length === 0) { aOps = root.find('p:contains(" abstract operation ")').closest('section').add(root.find('#sec-reference-specification-type > section')); } } aOps = aOps.not('[type~="host-defined"]'); const missings = []; let entries = aOps.toArray().map((x) => { const op = $(x); let aoid = op.attr('aoid'); let id = op.attr('id'); if (!id) { // covers things like (in 2022/2023 DateFromTime(), WeekDay(), etc) id = op.closest('[id]').attr('id'); } // years other than 2016 have `id.startsWith('eqn-')` const isConstant = op.text().trim().split('\n').length === 1 && op.text().startsWith(`${aoid} = `); if (isConstant) { return null; } if (!aoid) { if ( id === 'sec-ecmascript-standard-built-in-objects' || id === 'sec-forbidden-extensions' || id === 'sec-jobs-and-job-queues' || id === 'sec-%typedarray%.prototype.sort' || (year < 2021 && id === 'sec-hostresolveimportedmodule') || id === 'sec-tostring-applied-to-the-number-type' ) { return null; } if (op.parent().attr('id') === 'sec-reference-specification-type') { ({ groups: { aoid } } = op.find('h1').text().match(/\s(?[a-zA-Z][a-z][a-zA-Z]+)\s/m)); } else if ((/^sec-numeric-types-(?:number|bigint)-/).test(op.attr('id'))) { ({ groups: { aoid } } = op.find('h1').text().match(/\s?(?[a-zA-Z][a-z][a-zA-Z]+(?:::[a-zA-Z][a-z][a-zA-Z]+)+)\s/m)); } else { const match = op.text().match(/When the (?[a-zA-Z][a-z][a-zA-Z]+) abstract operation is called/m) || op.text().match(/The (?[a-zA-Z][a-z][a-zA-Z]+) abstract operation/m) || op.text().match(/ abstract operation (?[a-zA-Z/0-9]+)/m); if (String(op.attr('type') || '').endsWith('abstract operation')) { aoid = op.find('h1').text().trim().split('\n')[0].replace(/Static Semantics: |\(.*$/g, '').trim(); } else if (match) { ({ groups: { aoid } } = match); } } } if (aoid && !id) { missings.push(aoid); } else if (!aoid) { missings.push(id); } if (!aoid || !id) { return null; } return [ aoid, `https://262.ecma-international.org/${edition}.0/#${id}`, ]; }).filter((x) => x && x[0]); if (missings.length > 0) { throw `Missing URLs: ${missings}`; } entries.push([ 'CompletionRecord', year < 2015 ? 'https://262.ecma-international.org/5.1/#sec-8.9' : `https://262.ecma-international.org/${edition}.0/#sec-completion-record-specification-type`, ]); if (year === 2015) { entries.push( ['abs', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['Abstract Equality Comparison', 'https://262.ecma-international.org/6.0/#sec-abstract-equality-comparison'], ['Abstract Relational Comparison', 'https://262.ecma-international.org/6.0/#sec-abstract-relational-comparison'], ['CreateArrayIterator', 'https://262.ecma-international.org/6.0/#sec-createarrayiterator'], ['DateFromTime', 'https://262.ecma-international.org/6.0/#sec-date-number'], ['Day', 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day'], ['DayFromYear', 'https://262.ecma-international.org/6.0/#sec-year-number'], ['DaysInYear', 'https://262.ecma-international.org/6.0/#sec-year-number'], ['DayWithinYear', 'https://262.ecma-international.org/6.0/#sec-month-number'], ['floor', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['GetBase', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['GetReferencedName', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['HasPrimitiveBase', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['HostResolveImportedModule', 'sec-hostresolveimportedmodule'], ['HourFromTime', 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds'], ['InLeapYear', 'https://262.ecma-international.org/6.0/#sec-year-number'], ['IsPropertyReference', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['IsStrictReference', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['IsSuperReference', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['IsUnresolvableReference', 'https://262.ecma-international.org/6.0/#sec-jobs-and-job-queues'], ['max', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['min', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['MinFromTime', 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds'], ['modulo', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['MonthFromTime', 'https://262.ecma-international.org/6.0/#sec-month-number'], ['msFromTime', 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds'], ['msPerDay', 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day'], ['SecFromTime', 'https://262.ecma-international.org/6.0/#sec-hours-minutes-second-and-milliseconds'], ['sign', 'https://262.ecma-international.org/6.0/#sec-algorithm-conventions'], ['Strict Equality Comparison', 'https://262.ecma-international.org/6.0/#sec-strict-equality-comparison'], ['thisBooleanValue', 'https://262.ecma-international.org/6.0/#sec-properties-of-the-boolean-prototype-object'], ['thisNumberValue', 'https://262.ecma-international.org/6.0/#sec-properties-of-the-number-prototype-object'], ['thisStringValue', 'https://262.ecma-international.org/6.0/#sec-properties-of-the-string-prototype-object'], ['thisTimeValue', 'https://262.ecma-international.org/6.0/#sec-properties-of-the-date-prototype-object'], ['TimeFromYear', 'https://262.ecma-international.org/6.0/#sec-year-number'], ['TimeWithinDay', 'https://262.ecma-international.org/6.0/#sec-day-number-and-time-within-day'], ['ToDateString', 'https://262.ecma-international.org/6.0/#sec-todatestring'], ['Type', 'https://262.ecma-international.org/6.0/#sec-ecmascript-data-types-and-values'], ['ValidateTypedArray', 'https://262.ecma-international.org/6.0/#sec-validatetypedarray'], ['WeekDay', 'https://262.ecma-international.org/6.0/#sec-week-day'], ['YearFromTime', 'https://262.ecma-international.org/6.0/#sec-year-number'], ); } else if (year === 2016) { entries.push( ['thisNumberValue', 'https://262.ecma-international.org/7.0/#sec-properties-of-the-number-prototype-object'], ['thisStringValue', 'https://262.ecma-international.org/7.0/#sec-properties-of-the-string-prototype-object'], ); } if (year >= 2015 && year <= 2017) { entries.push(['DaylightSavingTA', `https://262.ecma-international.org/${edition}.0/#sec-daylight-saving-time-adjustment`]); } if (year >= 2021 && year < 2023) { entries.push(['WordCharacters', `https://262.ecma-international.org/${edition}.0/#sec-runtime-semantics-wordcharacters-abstract-operation`]); } if (year >= 2021) { entries.push( ['clamp', `https://262.ecma-international.org/${edition}.0/#clamping`], ['substring', `https://262.ecma-international.org/${edition}.0/#substring`], ); } if (year < 2022) { entries = entries.filter(([ao]) => ao === 'HostEventSet' || !ao.startsWith('Host')); } entries.sort(([a], [b]) => a.localeCompare(b)); const obj = fromEntries(entries.map(([ao, url]) => [ao, typeof url === 'string' ? { url } : url])); const outputPath = path.join('operations', `${year}.js`); let output = `'use strict';\n\nmodule.exports = ${JSON.stringify(obj, null, '\t')};\n`; if ((year === 5 || year >= 2015) && year < 2018) { output = output.replace(/[=] \{\n/m, "= {\n\tIsPropertyDescriptor: 'https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type', // not actually an abstract op\n\n"); } await fs.writeFile(outputPath, output); console.log(`npx eslint --quiet --fix ${outputPath}`); return exec(`npx eslint --quiet --fix ${outputPath}`); } Promise.all(years.map((year) => getOps(year))).catch((e) => { console.error(e); process.exitCode = 1; }); ljharb-es-abstract-babee05/operations/spackle.js000066400000000000000000000073741516525472400221200ustar00rootroot00000000000000'use strict'; const path = require('path'); const fs = require('fs'); const childProcess = require('child_process'); const { ESLint } = require('eslint'); const deltas = require('./deltas'); const years = require('./years'); const allOps = {}; function addOpToYear(year, op, opPath) { allOps[year] ||= new Map(); if (op === opPath) { allOps[year].set(op, `${year}/${opPath}`); } else { const baseOp = op.replace(/::.*$/, ''); allOps[year].set(baseOp, `${year}/${baseOp}`); } } const writtenOps = [5].concat(years).flatMap((year, i, arr) => { const ops = fs.readdirSync(path.join(process.cwd(), String(year))); return ops.flatMap((opFile) => { const maybeDirPath = path.join(process.cwd(), String(year), opFile); if (fs.statSync(maybeDirPath).isDirectory()) { return fs.readdirSync(maybeDirPath).map((x) => `${opFile}::${path.basename(x, path.extname(x))}`); } if (year === 2023 && opFile === 'TypedArrayCreate.js') { return []; } return opFile; }).map((opFile) => { const op = path.basename(opFile, path.extname(opFile)); const opPath = op.replace('::', '/'); const isEntryPoint = !opPath.startsWith('tables/'); const thisFile = path.join(process.cwd(), String(year), `${opPath}.js`); if (isEntryPoint) { addOpToYear(year, op, opPath); } if ((i + 1) < arr.length) { const nextYear = arr[i + 1]; const nextFile = path.join(process.cwd(), String(nextYear), `${opPath}.js`); fs.mkdirSync(path.dirname(nextFile), { recursive: true }); if (!deltas[nextYear].removed.has(op)) { if (isEntryPoint) { addOpToYear(nextYear, op, opPath); } if (fs.existsSync(thisFile) && !fs.existsSync(nextFile)) { if (year === 2023 && op === 'TypedArrayCreate') { // this AO was renamed in ES2024, and the new one can't be implemented return null; } console.log(`writing: ${nextYear}/${opPath} -> ${year}/${opPath}`); const thisSpecifier = `../${year}/${opPath}`; const reexport = `'use strict'; module.exports = require('${thisSpecifier}'); `; const replacement = fs.readFileSync(thisFile, 'utf-8'); fs.writeFileSync(nextFile, process.argv[2] ? replacement : reexport); return { isEntryPoint, op, opFile: path.relative(process.cwd(), nextFile), year: nextYear, }; } } } return null; }); }).filter(Boolean); const exceptions = require('../test/helpers/aoMap.json'); const willBeQuotedOp = (/^'[^' ]+ [^']+'/); function compareOps(a, b) { const aQ = willBeQuotedOp.test(a); const bQ = willBeQuotedOp.test(b); if ((aQ || bQ) && !(aQ && bQ)) { return aQ ? -1 : 1; } return a.localeCompare(b); } const writtenManifestsP = years.map(async (year) => { const edition = year - 2009; const contents = `'use strict'; /* eslint global-require: 0 */ // https://262.ecma-international.org/${edition}.0/#sec-abstract-operations var ES${year} = { ${Array.from(allOps[year], ([op, opFile]) => `'${exceptions[op] || op}': require('./${opFile}')`).sort(compareOps).join(',\n\t')} }; module.exports = ES${year}; `; const filename = `es${String(year)}.js`; const eslint = new ESLint({ fix: true }); await eslint.lintText(contents, { filePath: filename }).then(([{ output }]) => { fs.writeFileSync(path.join(process.cwd(), filename), output); }).catch((error) => { console.error(error); process.exitCode = 1; }); return filename; }); Promise.all(writtenManifestsP).then((writtenManifests) => { const writtenFiles = writtenManifests.concat(writtenOps.map(({ opFile }) => opFile)); fs.writeFileSync(path.join(process.cwd(), '.gitattributes'), [].concat('/helpers/caseFolding.json\tlinguist-generated=true', writtenFiles.map((x) => `/${x}\tspackled linguist-generated=true`)).join('\n')); childProcess.execSync(`git add .gitattributes ${writtenFiles.join(' ')}`); }); ljharb-es-abstract-babee05/operations/years.js000066400000000000000000000002301516525472400216010ustar00rootroot00000000000000'use strict'; function range(a, z) { return Array.from({ length: z + 1 - a }, (_, i) => i + a); } module.exports = Object.freeze(range(2015, 2025)); ljharb-es-abstract-babee05/package.json000066400000000000000000000120611516525472400202300ustar00rootroot00000000000000{ "name": "es-abstract", "version": "1.24.2", "author": { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" }, "funding": { "url": "https://github.com/sponsors/ljharb" }, "contributors": [ { "name": "Jordan Harband", "email": "ljharb@gmail.com", "url": "http://ljharb.codes" } ], "description": "ECMAScript spec abstract operations.", "license": "MIT", "main": "index.js", "browser": { "worker_threads": false }, "type": "commonjs", "sideEffects": false, "scripts": { "spackled": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1", "prespackle": "npm run --silent spackled | xargs rm || true", "spackle": "node operations/spackle 1 && node operations/build-unicode.mjs", "postspackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs git add", "prepack": "npmignore --auto --commentLines=autogenerated", "prepublish": "not-in-publish || npm run prepublishOnly", "prepublishOnly": "safe-publish-latest && npm run spackle", "pretest": "npm run lint", "test": "npm run tests-only && npm run test:ses", "test:ses": "node --stack-size=5120 test/ses-compat", "posttest": "npx npm@'>= 10.2' audit --production", "tests-only": "nyc node --stack-size=5120 test", "lint": "eslint .", "eccheck": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')" }, "repository": { "type": "git", "url": "git://github.com/ljharb/es-abstract.git" }, "keywords": [ "ECMAScript", "ES", "abstract", "operation", "abstract operation", "JavaScript", "ES5", "ES6", "ES7" ], "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" }, "devDependencies": { "@ljharb/eslint-config": "^22.1.3", "@unicode/unicode-15.0.0": "^1.6.16", "array.from": "^1.1.6", "array.prototype.filter": "^1.0.4", "array.prototype.flatmap": "^1.3.3", "array.prototype.indexof": "^1.0.8", "available-regexp-flags": "^1.0.4", "cheerio": "=1.0.0-rc.3", "define-accessor-property": "^1.0.0", "define-data-property": "^1.1.4", "diff": "^7.0.0", "eclint": "^2.8.1", "es-value-fixtures": "^1.7.1", "eslint": "^9.39.2", "for-each": "^0.3.5", "function-bind": "^1.1.2", "functions-have-names": "^1.2.3", "glob": "^7.2.3", "has-bigints": "^1.1.0", "has-named-captures": "^1.0.0", "has-strict-mode": "^1.1.0", "in-publish": "^2.0.1", "is-bigint": "^1.1.0", "is-core-module": "^2.16.1", "jackspeak": "=2.1.1", "jiti": "^0.0.0", "make-async-function": "^1.0.0", "make-async-generator-function": "^1.0.0", "make-generator-function": "^2.1.0", "mock-property": "^1.1.0", "npmignore": "^0.3.5", "nyc": "^10.3.2", "object.fromentries": "^2.0.8", "safe-bigint": "^1.1.1", "safe-publish-latest": "^2.0.0", "ses": "^1.14.0", "tape": "^5.9.0" }, "testling": { "files": "test/index.js", "browsers": [ "iexplore/6.0..latest", "firefox/3.0..6.0", "firefox/15.0..latest", "firefox/nightly", "chrome/4.0..10.0", "chrome/20.0..latest", "chrome/canary", "opera/10.0..latest", "opera/next", "safari/4.0..latest", "ipad/6.0..latest", "iphone/6.0..latest", "android-browser/4.2" ] }, "engines": { "node": ">= 0.4" }, "publishConfig": { "ignore": [ ".github", "", "# dev scripts", "operations/*", "!operations/es5.js", "!operations/20*.js", "", "test/", "", ".gitattributes" ] } } ljharb-es-abstract-babee05/test/000077500000000000000000000000001516525472400167215ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/GetIntrinsic.js000066400000000000000000000204211516525472400216600ustar00rootroot00000000000000'use strict'; var GetIntrinsic = require('get-intrinsic'); var test = require('tape'); var forEach = require('for-each'); var debug = require('object-inspect'); var generatorFns = require('make-generator-function')(); var asyncFns = require('make-async-function').list(); var asyncGenFns = require('make-async-generator-function')(); var mockProperty = require('mock-property'); var callBound = require('call-bound'); var v = require('es-value-fixtures'); var $gOPD = require('gopd'); var DefinePropertyOrThrow = require('../2021/DefinePropertyOrThrow'); var $isProto = callBound('Object.prototype.isPrototypeOf'); test('export', function (t) { t.equal(typeof GetIntrinsic, 'function', 'it is a function'); t.equal(GetIntrinsic.length, 2, 'function has length of 2'); t.end(); }); test('throws', function (t) { t['throws']( function () { GetIntrinsic('not an intrinsic'); }, SyntaxError, 'nonexistent intrinsic throws a syntax error' ); t['throws']( function () { GetIntrinsic(''); }, TypeError, 'empty string intrinsic throws a type error' ); t['throws']( function () { GetIntrinsic('.'); }, SyntaxError, '"just a dot" intrinsic throws a syntax error' ); t['throws']( function () { GetIntrinsic('%String'); }, SyntaxError, 'Leading % without trailing % throws a syntax error' ); t['throws']( function () { GetIntrinsic('String%'); }, SyntaxError, 'Trailing % without leading % throws a syntax error' ); t['throws']( function () { GetIntrinsic("String['prototype]"); }, SyntaxError, 'Dynamic property access is disallowed for intrinsics (unterminated string)' ); t['throws']( function () { GetIntrinsic('%Proxy.prototype.undefined%'); }, TypeError, "Throws when middle part doesn't exist (%Proxy.prototype.undefined%)" ); forEach(v.nonStrings, function (nonString) { t['throws']( function () { GetIntrinsic(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { GetIntrinsic('%', nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach([ 'toString', 'propertyIsEnumerable', 'hasOwnProperty' ], function (objectProtoMember) { t['throws']( function () { GetIntrinsic(objectProtoMember); }, SyntaxError, debug(objectProtoMember) + ' is not an intrinsic' ); }); t.end(); }); test('base intrinsics', function (t) { t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object'); t.equal(GetIntrinsic('Object'), Object, 'Object yields Object'); t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array'); t.equal(GetIntrinsic('Array'), Array, 'Array yields Array'); t.end(); }); test('dotted paths', function (t) { t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString'); t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString'); t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push'); t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push'); test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { var original = GetIntrinsic('%ObjProto_toString%'); forEach([ '%Object.prototype.toString%', 'Object.prototype.toString', '%ObjectPrototype.toString%', 'ObjectPrototype.toString', '%ObjProto_toString%', 'ObjProto_toString' ], function (name) { DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': function toString() { return original.apply(this, arguments); } }); st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString'); }); DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original }); st.end(); }); test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%'); forEach([ '%Object.prototype.propertyIsEnumerable%', 'Object.prototype.propertyIsEnumerable', '%ObjectPrototype.propertyIsEnumerable%', 'ObjectPrototype.propertyIsEnumerable' ], function (name) { var restore = mockProperty(Object.prototype, 'propertyIsEnumerable', { value: function propertyIsEnumerable() { return original.apply(this, arguments); } }); st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable'); restore(); }); st.end(); }); test('dotted path reports correct error', function (st) { st['throws'](function () { GetIntrinsic('%NonExistentIntrinsic.prototype.property%'); }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%'); st['throws'](function () { GetIntrinsic('%NonExistentIntrinsicPrototype.property%'); }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%'); st.end(); }); t.end(); }); test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) { var actual = $gOPD(Map.prototype, 'size'); t.ok(actual, 'Map.prototype.size has a descriptor'); t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function'); t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it'); t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it'); t.end(); }); test('generator functions', { skip: !generatorFns.length }, function (t) { var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%'); var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%'); var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%'); forEach(generatorFns, function (genFn) { var fnName = genFn.name; fnName = fnName ? "'" + fnName + "'" : 'genFn'; t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%'); t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName); t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype'); }); t.end(); }); test('async functions', { skip: !asyncFns.length }, function (t) { var $AsyncFunction = GetIntrinsic('%AsyncFunction%'); var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%'); forEach(asyncFns, function (asyncFn) { var fnName = asyncFn.name; fnName = fnName ? "'" + fnName + "'" : 'asyncFn'; t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%'); t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName); }); t.end(); }); test('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) { var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%'); var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%'); var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%'); forEach(asyncGenFns, function (asyncGenFn) { var fnName = asyncGenFn.name; fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn'; t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%'); t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName); t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype'); }); t.end(); }); test('%ThrowTypeError%', function (t) { var $ThrowTypeError = GetIntrinsic('%ThrowTypeError%'); t.equal(typeof $ThrowTypeError, 'function', 'is a function'); t['throws']( $ThrowTypeError, TypeError, '%ThrowTypeError% throws a TypeError' ); t.end(); }); test('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) { t['throws']( function () { GetIntrinsic('%AsyncGeneratorPrototype%'); }, TypeError, 'throws when missing' ); t.equal( GetIntrinsic('%AsyncGeneratorPrototype%', true), undefined, 'does not throw when allowMissing' ); t.end(); }); ljharb-es-abstract-babee05/test/bufferTestCases.js000066400000000000000000000127661516525472400223630ustar00rootroot00000000000000'use strict'; var test = require('tape'); var arrayFrom = require('array.from'); var availableTypedArrays = require('available-typed-arrays')(); var forEach = require('for-each'); var hasBigInts = require('has-bigints')(); var safeBigInt = require('safe-bigint'); var ToUint8Clamp = require('../2017/ToUint8Clamp'); var bufferTestCases = require('./bufferTestCases.json'); var unserialize = require('./helpers/unserializeNumeric'); var elementSizes = { __proto__: null, $Int8Array: 1, $Uint8Array: 1, $Uint8ClampedArray: 1, $Int16Array: 2, $Uint16Array: 2, $Int32Array: 4, $Uint32Array: 4, $BigInt64Array: 8, $BigUint64Array: 8, $Float16Array: 2, $Float32Array: 4, $Float64Array: 8 }; test('buffer test cases: sanity check', { skip: availableTypedArrays.length === 0 }, function (t) { forEach(bufferTestCases, function (testCase, name) { var value = unserialize(testCase.value); t.test('*** ' + name + ': ' + value, function (st) { forEach([].concat( 'Int8', 'Uint8', 'Uint8Clamped', 'Int16', 'Uint16', 'Int32', 'Uint32', hasBigInts ? [ 'BigInt64', 'BigUint64' ] : [], typeof Float16Array === 'undefined' ? [] : 'Float16', 'Float32', 'Float64' ), function (type) { var elementSize = elementSizes['$' + type + 'Array']; var typeTest = testCase[type]; var view = new DataView(new ArrayBuffer(elementSizes.$Float64Array)); var method = type === 'Uint8Clamped' ? 'Uint8' : type; var valToSet = type === 'Uint8Clamped' ? ToUint8Clamp(value) : value; var hasBigEndian = type !== 'Int8' && type !== 'Uint8' && type !== 'Uint8Clamped'; // the 8-bit types are special, they don't have big-endian var isBigInt = type.slice(0, 3) === 'Big'; st.test( type, { skip: isBigInt && (!isFinite(value) || Math.floor(value) !== value) && '(BigInt types do not support non-integer values)' }, function (s2t) { if ( !hasBigEndian && ( 'setAsBig' in typeTest || 'asBig' in typeTest.setAsLittle || 'truncatedBig' in typeTest.setAsLittle ) ) { s2t.fail('should not have big-endian test cases'); s2t.end(); return; } s2t.test('set as little', function (s3t) { var results = typeTest.setAsLittle; view.setFloat64(0, 0, true); // clear the buffer view.setFloat64(0, valToSet, true); s3t.deepEqual( arrayFrom(Array.prototype.slice.call(new Uint8Array(view.buffer), 0, elementSize)), arrayFrom(results.bytes), 'has correct expected bytes' ); s3t.equal( view['get' + method](0, true), unserialize(results.asLittle), 'get as little: has correct expected value' ); s3t.equal( view['get' + method](0, false), unserialize(results.asBig), 'get as big: has correct expected value', { skip: hasBigEndian ? false : '(' + type + ' only has little-endian)' } ); s3t.end(); }); s2t.test('set as truncated little', function (s3t) { var results = typeTest.setAsTruncatedLittle; view.setFloat64(0, 0, true); // clear the buffer view['set' + method](0, isBigInt ? safeBigInt(valToSet) : valToSet, true); s3t.deepEqual( arrayFrom(Array.prototype.slice.call(new Uint8Array(view.buffer), 0, elementSize)), arrayFrom(results.bytes), 'has correct expected bytes' ); s3t.equal( view['get' + method](0, true), unserialize(results.asLittle), 'get as little: has correct expected value' ); s3t.equal( view['get' + method](0, false), unserialize(results.asBig), 'get as big: has correct expected value', { skip: hasBigEndian ? false : '(' + type + ' only has little-endian)' } ); s3t.end(); }); s2t.test('set as big', { skip: hasBigEndian ? false : '(' + type + ' only has little-endian)' }, function (s3t) { var results = typeTest.setAsBig; view.setFloat64(0, 0, true); // clear the buffer view.setFloat64(0, valToSet, false); s3t.deepEqual( arrayFrom(Array.prototype.slice.call(new Uint8Array(view.buffer), 0, elementSize)), arrayFrom(results.bytes), 'has correct expected bytes' ); s3t.equal( view['get' + method](0, true), unserialize(results.asLittle), 'get as little: has correct expected value' ); s3t.equal( view['get' + method](0, false), unserialize(results.asBig), 'get as big: has correct expected value' ); s3t.end(); }); s2t.test('set as truncated big', { skip: hasBigEndian ? false : '(' + type + ' only has little-endian)' }, function (s3t) { var results = typeTest.setAsTruncatedBig; view.setFloat64(0, 0, true); // clear the buffer view['set' + method](0, isBigInt ? safeBigInt(valToSet) : valToSet, false); s3t.deepEqual( arrayFrom(Array.prototype.slice.call(new Uint8Array(view.buffer), 0, elementSize)), arrayFrom(results.bytes), 'has correct expected bytes' ); s3t.equal( view['get' + method](0, true), unserialize(results.asLittle), 'get as little: has correct expected value' ); s3t.equal( view['get' + method](0, false), unserialize(results.asBig), 'get as big: has correct expected value' ); s3t.end(); }); s2t.end(); } ); }); st.end(); }); }); t.end(); }); ljharb-es-abstract-babee05/test/bufferTestCases.json000066400000000000000000003077001516525472400227130ustar00rootroot00000000000000{ "near max64": { "value": 8.988465674311578e+307, "Int8": { "setAsLittle": { "asLittle": -2, "bytes": [254] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 254, "bytes": [254] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": -2, "asBig": -257, "bytes": [254, 255] }, "setAsTruncatedLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": -8321, "asBig": 32735, "bytes": [127, 223] }, "setAsTruncatedBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 65534, "asBig": 65279, "bytes": [254, 255] }, "setAsTruncatedLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": 57215, "asBig": 32735, "bytes": [127, 223] }, "setAsTruncatedBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": -2, "asBig": -16777217, "bytes": [254, 255, 255, 255] }, "setAsTruncatedLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": -8321, "asBig": 2145386495, "bytes": [127, 223, 255, 255] }, "setAsTruncatedBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 4294967294, "asBig": 4278190079, "bytes": [254, 255, 255, 255] }, "setAsTruncatedLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 4294958975, "asBig": 2145386495, "bytes": [127, 223, 255, 255] }, "setAsTruncatedBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "9214364837600034814n", "asBig": "-72057594037936257n", "bytes": [254, 255, 255, 255, 255, 255, 223, 127] }, "setAsTruncatedLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "-72057594037936257n", "asBig": "9214364837600034814n", "bytes": [127, 223, 255, 255, 255, 255, 255, 254], "truncatedLittle": "0n", "truncatedBig": "0n" }, "setAsTruncatedBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "9214364837600034814n", "asBig": "18374686479671615359n", "bytes": [254, 255, 255, 255, 255, 255, 223, 127] }, "setAsTruncatedLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "18374686479671615359n", "asBig": "9214364837600034814n", "bytes": [127, 223, 255, 255, 255, 255, 255, 254] }, "setAsTruncatedBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asLittle": "NaN", "asBig": "NaN", "bytes": [254, 255] }, "setAsTruncatedLittle": { "asLittle": "Infinity", "asBig": 0.0000073909759521484375, "bytes": [0, 124] }, "setAsBig": { "asLittle": -479.75, "asBig": "NaN", "bytes": [127, 223] }, "setAsTruncatedBig": { "asLittle": 0.0000073909759521484375, "asBig": "Infinity", "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asLittle": "NaN", "asBig": -1.7014117331926443e+38, "bytes": [254, 255, 255, 255] }, "setAsTruncatedLittle": { "asLittle": "Infinity", "asBig": 4.609571298396486e-41, "bytes": [0, 0, 128, 127] }, "setAsBig": { "asLittle": "NaN", "asBig": "NaN", "bytes": [127, 223, 255, 255] }, "setAsTruncatedBig": { "asLittle": 4.609571298396486e-41, "asBig": "Infinity", "bytes": [127, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asLittle": 8.988465674311578e+307, "asBig": -5.4861240687886205e+303, "bytes": [254, 255, 255, 255, 255, 255, 223, 127] }, "setAsTruncatedLittle": { "asLittle": 8.988465674311578e+307, "asBig": -5.4861240687886205e+303, "bytes": [254, 255, 255, 255, 255, 255, 223, 127] }, "setAsBig": { "asLittle": -5.4861240687886205e+303, "asBig": 8.988465674311578e+307, "bytes": [127, 223, 255, 255, 255, 255, 255, 254] }, "setAsTruncatedBig": { "asLittle": -5.4861240687886205e+303, "asBig": 8.988465674311578e+307, "bytes": [127, 223, 255, 255, 255, 255, 255, 254] } } }, "max64": { "value": 1.7976931348623157e+308, "Int8": { "setAsLittle": { "asLittle": -1, "bytes": [255] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 255, "bytes": [255] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": -1, "asBig": -1, "bytes": [255, 255] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": -4225, "asBig": 32751, "bytes": [127, 239] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 65535, "asBig": 65535, "bytes": [255, 255] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": 61311, "asBig": 32751, "bytes": [127, 239] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": -1, "asBig": -1, "bytes": [255, 255, 255, 255] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": -4225, "asBig": 2146435071, "bytes": [127, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 4294967295, "asBig": 4294967295, "bytes": [255, 255, 255, 255] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 4294963071, "asBig": 2146435071, "bytes": [127, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "9218868437227405311n", "asBig": "-4225n", "bytes": [255, 255, 255, 255, 255, 255, 239, 127] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "-4225n", "asBig": "9218868437227405311n", "bytes": [127, 239, 255, 255, 255, 255, 255, 255] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "9218868437227405311n", "asBig": "18446744073709547391n", "bytes": [255, 255, 255, 255, 255, 255, 239, 127] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "18446744073709547391n", "asBig": "9218868437227405311n", "bytes": [127, 239, 255, 255, 255, 255, 255, 255] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asLittle": "NaN", "asBig": "NaN", "bytes": [255, 255] }, "setAsTruncatedLittle": { "asBig": 0.0000073909759521484375, "asLittle": "Infinity", "bytes": [0, 124] }, "setAsBig": { "asLittle": -7676, "asBig": "NaN", "bytes": [127, 239] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 0.0000073909759521484375, "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asLittle": "NaN", "asBig": "NaN", "bytes": [255, 255, 255, 255] }, "setAsTruncatedLittle": { "asBig": 4.609571298396486e-41, "asLittle": "Infinity", "bytes": [0, 0, 128, 127] }, "setAsBig": { "asLittle": "NaN", "asBig": "NaN", "bytes": [127, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 4.609571298396486e-41, "bytes": [127, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asLittle": 1.7976931348623157e+308, "asBig": "NaN", "bytes": [255, 255, 255, 255, 255, 255, 239, 127] }, "setAsTruncatedLittle": { "asBig": "NaN", "asLittle": 1.7976931348623157e+308, "bytes": [255, 255, 255, 255, 255, 255, 239, 127] }, "setAsBig": { "asBig": 1.7976931348623157e+308, "asLittle": "NaN", "bytes": [127, 239, 255, 255, 255, 255, 255, 255] }, "setAsTruncatedBig": { "asBig": 1.7976931348623157e+308, "asLittle": "NaN", "bytes": [127, 239, 255, 255, 255, 255, 255, 255] } } }, "max32": { "value": 4294967295, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": -1, "bytes": [255] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0], "truncatedLittle": 255 }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0], "truncatedLittle": -1, "truncatedBig": -1 }, "setAsTruncatedLittle": { "asBig": -1, "asLittle": -1, "bytes": [255, 255] }, "setAsBig": { "asLittle": -4287, "asBig": 16879, "bytes": [65, 239] }, "setAsTruncatedBig": { "asBig": -1, "asLittle": -1, "bytes": [255, 255] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 65535, "asLittle": 65535, "bytes": [255, 255] }, "setAsBig": { "asLittle": 61249, "asBig": 16879, "bytes": [65, 239] }, "setAsTruncatedBig": { "asBig": 65535, "asLittle": 65535, "bytes": [255, 255] } }, "Int32": { "setAsLittle": { "asLittle": -2097152, "asBig": 57599, "bytes": [0, 0, 224, 255] }, "setAsTruncatedLittle": { "asBig": -1, "asLittle": -1, "bytes": [255, 255, 255, 255] }, "setAsBig": { "asLittle": -4287, "asBig": 1106247679, "bytes": [65, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": -1, "asLittle": -1, "bytes": [255, 255, 255, 255] } }, "Uint32": { "setAsLittle": { "asLittle": 4292870144, "asBig": 57599, "bytes": [0, 0, 224, 255] }, "setAsTruncatedLittle": { "asBig": 4294967295, "asLittle": 4294967295, "bytes": [255, 255, 255, 255] }, "setAsBig": { "asLittle": 4294963009, "asBig": 1106247679, "bytes": [65, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": 4294967295, "asLittle": 4294967295, "bytes": [255, 255, 255, 255] } }, "BigInt64": { "setAsLittle": { "asLittle": "4751297606873776128n", "asBig": "247390116245313n", "bytes": [0, 0, 224, 255, 255, 255, 239, 65] }, "setAsTruncatedLittle": { "asBig": "-4294967296n", "asLittle": "4294967295n", "bytes": [255, 255, 255, 255, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "247390116245313n", "asBig": "4751297606873776128n", "bytes": [65, 239, 255, 255, 255, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": "4294967295n", "asLittle": "-4294967296n", "bytes": [0, 0, 0, 0, 255, 255, 255, 255] } }, "BigUint64": { "setAsLittle": { "asLittle": "4751297606873776128n", "asBig": "247390116245313n", "bytes": [0, 0, 224, 255, 255, 255, 239, 65] }, "setAsTruncatedLittle": { "asBig": "18446744069414584320n", "asLittle": "4294967295n", "bytes": [255, 255, 255, 255, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "247390116245313n", "asBig": "4751297606873776128n", "bytes": [65, 239, 255, 255, 255, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": "4294967295n", "asLittle": "18446744069414584320n", "bytes": [0, 0, 0, 0, 255, 255, 255, 255] } }, "Float16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0], "truncatedLittle": 4294967296, "truncatedBig": 4.602845065767727e-41 }, "setAsTruncatedLittle": { "asBig": 0.0000073909759521484375, "asLittle": "Infinity", "bytes": [0, 124] }, "setAsBig": { "asLittle": -7428, "asBig": 2.966796875, "bytes": [65, 239] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 0.0000073909759521484375, "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asLittle": "NaN", "asBig": 8.071339024664514e-41, "bytes": [0, 0, 224, 255], "truncatedLittle": 4294967296, "truncatedBig": 4.602845065767727e-41 }, "setAsTruncatedLittle": { "asBig": 4.602845065767727e-41, "asLittle": 4294967296, "bytes": [0, 0, 128, 79] }, "setAsBig": { "asLittle": "NaN", "asBig": 29.999998092651367, "bytes": [65, 239, 255, 255] }, "setAsTruncatedBig": { "asBig": 4294967296, "asLittle": 4.602845065767727e-41, "bytes": [79, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asLittle": 4294967295, "asBig": 1.222269575574816e-309, "bytes": [0, 0, 224, 255, 255, 255, 239, 65] }, "setAsTruncatedLittle": { "asBig": 1.222269575574816e-309, "asLittle": 4294967295, "bytes": [0, 0, 224, 255, 255, 255, 239, 65] }, "setAsBig": { "asLittle": 1.222269575574816e-309, "asBig": 4294967295, "bytes": [65, 239, 255, 255, 255, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 4294967295, "asLittle": 1.222269575574816e-309, "bytes": [65, 239, 255, 255, 255, 224, 0, 0] } } }, "zero": { "value": 0, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Float32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Float64": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } } }, "neg zero": { "value": "-0", "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": -32768, "asLittle": 128, "bytes": [128, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 32768, "asLittle": 128, "bytes": [128, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 128, "asBig": -2147483648, "bytes": [128, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 2147483648, "asLittle": 128, "bytes": [128, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "-9223372036854775808n", "asBig": "128n", "bytes": [0, 0, 0, 0, 0, 0, 0, 128] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "128n", "asBig": "-9223372036854775808n", "bytes": [128, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asBig": "128n", "asLittle": "9223372036854775808n", "bytes": [0, 0, 0, 0, 0, 0, 0, 128] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asBig": "9223372036854775808n", "asLittle": "128n", "bytes": [128, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.00000762939453125, "asLittle": "-0", "bytes": [0, 128] }, "setAsBig": { "asBig": "-0", "asLittle": 0.00000762939453125, "bytes": [128, 0] }, "setAsTruncatedBig": { "asBig": "-0", "asLittle": 0.00000762939453125, "bytes": [128, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 1.793662034335766e-43, "asLittle": "-0", "bytes": [0, 0, 0, 128] }, "setAsBig": { "asBig": "-0", "asLittle": 1.793662034335766e-43, "bytes": [128, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "-0", "asLittle": 1.793662034335766e-43, "bytes": [128, 0, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 6.3e-322, "asLittle": "-0", "bytes": [0, 0, 0, 0, 0, 0, 0, 128] }, "setAsTruncatedLittle": { "asBig": 6.3e-322, "asLittle": "-0", "bytes": [0, 0, 0, 0, 0, 0, 0, 128] }, "setAsBig": { "asBig": "-0", "asLittle": 6.3e-322, "bytes": [128, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "-0", "asLittle": 6.3e-322, "bytes": [128, 0, 0, 0, 0, 0, 0, 0] } } }, "one": { "value": 1, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 1, "bytes": [1] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 1, "bytes": [1] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 1, "bytes": [1] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 256, "asLittle": 1, "bytes": [1, 0] }, "setAsBig": { "asBig": 16368, "asLittle": -4033, "bytes": [63, 240] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 256, "bytes": [0, 1] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 256, "asLittle": 1, "bytes": [1, 0] }, "setAsBig": { "asBig": 16368, "asLittle": 61503, "bytes": [63, 240] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 256, "bytes": [0, 1] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 16777216, "asLittle": 1, "bytes": [1, 0, 0, 0] }, "setAsBig": { "asBig": 1072693248, "asLittle": 61503, "bytes": [63, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 16777216, "bytes": [0, 0, 0, 1] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 16777216, "asLittle": 1, "bytes": [1, 0, 0, 0] }, "setAsBig": { "asBig": 1072693248, "asLittle": 61503, "bytes": [63, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 16777216, "bytes": [0, 0, 0, 1] } }, "BigInt64": { "setAsLittle": { "asBig": "61503n", "asLittle": "4607182418800017408n", "bytes": [0, 0, 0, 0, 0, 0, 240, 63] }, "setAsTruncatedLittle": { "asBig": "72057594037927936n", "asLittle": "1n", "bytes": [1, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4607182418800017408n", "asLittle": "61503n", "bytes": [63, 240, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "1n", "asLittle": "72057594037927936n", "bytes": [0, 0, 0, 0, 0, 0, 0, 1] } }, "BigUint64": { "setAsLittle": { "asBig": "61503n", "asLittle": "4607182418800017408n", "bytes": [0, 0, 0, 0, 0, 0, 240, 63] }, "setAsTruncatedLittle": { "asBig": "72057594037927936n", "asLittle": "1n", "bytes": [1, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4607182418800017408n", "asLittle": "61503n", "bytes": [63, 240, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "1n", "asLittle": "72057594037927936n", "bytes": [0, 0, 0, 0, 0, 0, 0, 1] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.0000035762786865234375, "asLittle": 1, "bytes": [0, 60] }, "setAsBig": { "asBig": 1.984375, "asLittle": -8696, "bytes": [63, 240] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 0.0000035762786865234375, "bytes": [60, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4.600602988224807e-41, "asLittle": 1, "bytes": [0, 0, 128, 63] }, "setAsBig": { "asBig": 1.875, "asLittle": 8.618405945136922e-41, "bytes": [63, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 4.600602988224807e-41, "bytes": [63, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 3.03865e-319, "asLittle": 1, "bytes": [0, 0, 0, 0, 0, 0, 240, 63] }, "setAsTruncatedLittle": { "asBig": 3.03865e-319, "asLittle": 1, "bytes": [0, 0, 0, 0, 0, 0, 240, 63] }, "setAsBig": { "asBig": 1, "asLittle": 3.03865e-319, "bytes": [63, 240, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 1, "asLittle": 3.03865e-319, "bytes": [63, 240, 0, 0, 0, 0, 0, 0] } } }, "0.75": { "value": 0.75, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 1, "bytes": [1] } }, "Int16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16360, "asLittle": -6081, "bytes": [63, 232] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16360, "asLittle": 59455, "bytes": [63, 232] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 1072168960, "asLittle": 59455, "bytes": [63, 232, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 1072168960, "asLittle": 59455, "bytes": [63, 232, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asBig": "59455n", "asLittle": "4604930618986332160n", "bytes": [0, 0, 0, 0, 0, 0, 232, 63] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.0000034570693969726562, "asLittle": 0.75, "bytes": [0, 58] }, "setAsBig": { "asBig": 1.9765625, "asLittle": -2174, "bytes": [63, 232] }, "setAsTruncatedBig": { "asBig": 0.75, "asLittle": 0.0000034570693969726562, "bytes": [58, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 2.3047155842750266e-41, "asLittle": 0.75, "bytes": [0, 0, 64, 63] }, "setAsBig": { "asBig": 1.8125, "asLittle": 8.3314200196432e-41, "bytes": [63, 232, 0, 0] }, "setAsTruncatedBig": { "asBig": 0.75, "asLittle": 2.3047155842750266e-41, "bytes": [63, 64, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 2.93747e-319, "asLittle": 0.75, "bytes": [0, 0, 0, 0, 0, 0, 232, 63] }, "setAsTruncatedLittle": { "asBig": 2.93747e-319, "asLittle": 0.75, "bytes": [0, 0, 0, 0, 0, 0, 232, 63] }, "setAsBig": { "asBig": 0.75, "asLittle": 2.93747e-319, "bytes": [63, 232, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0.75, "asLittle": 2.93747e-319, "bytes": [63, 232, 0, 0, 0, 0, 0, 0] } } }, "0.5": { "value": 0.5, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16352, "asLittle": -8129, "bytes": [63, 224] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16352, "asLittle": 57407, "bytes": [63, 224] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 1071644672, "asLittle": 57407, "bytes": [63, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 1071644672, "asLittle": 57407, "bytes": [63, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.000003337860107421875, "asLittle": 0.5, "bytes": [0, 56] }, "setAsBig": { "asBig": 1.96875, "asLittle": -543.5, "bytes": [63, 224] }, "setAsTruncatedBig": { "asBig": 0.5, "asLittle": 0.000003337860107421875, "bytes": [56, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 8.828180325246348e-44, "asLittle": 0.5, "bytes": [0, 0, 0, 63] }, "setAsBig": { "asBig": 1.75, "asLittle": 8.044434094149477e-41, "bytes": [63, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 0.5, "asLittle": 8.828180325246348e-44, "bytes": [63, 0, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 2.8363e-319, "asLittle": 0.5, "bytes": [0, 0, 0, 0, 0, 0, 224, 63] }, "setAsTruncatedLittle": { "asBig": 2.8363e-319, "asLittle": 0.5, "bytes": [0, 0, 0, 0, 0, 0, 224, 63] }, "setAsBig": { "asBig": 0.5, "asLittle": 2.8363e-319, "bytes": [63, 224, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 0.5, "asLittle": 2.8363e-319, "bytes": [63, 224, 0, 0, 0, 0, 0, 0] } } }, "-1.5": { "value": -1.5, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": -1, "bytes": [255] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": -1, "asLittle": -1, "bytes": [255, 255] }, "setAsBig": { "asBig": -16392, "asLittle": -1857, "bytes": [191, 248] }, "setAsTruncatedBig": { "asBig": -1, "asLittle": -1, "bytes": [255, 255] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 65535, "asLittle": 65535, "bytes": [255, 255] }, "setAsBig": { "asBig": 49144, "asLittle": 63679, "bytes": [191, 248] }, "setAsTruncatedBig": { "asBig": 65535, "asLittle": 65535, "bytes": [255, 255] } }, "Int32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": -1, "asLittle": -1, "bytes": [255, 255, 255, 255] }, "setAsBig": { "asBig": -1074266112, "asLittle": 63679, "bytes": [191, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": -1, "asLittle": -1, "bytes": [255, 255, 255, 255] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4294967295, "asLittle": 4294967295, "bytes": [255, 255, 255, 255] }, "setAsBig": { "asBig": 3220701184, "asLittle": 63679, "bytes": [191, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": 4294967295, "asLittle": 4294967295, "bytes": [255, 255, 255, 255] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.000011324882507324219, "asLittle": -1.5, "bytes": [0, 190] }, "setAsBig": { "asBig": -1.9921875, "asLittle": -38880, "bytes": [191, 248] }, "setAsTruncatedBig": { "asBig": -1.5, "asLittle": 0.000011324882507324219, "bytes": [190, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 6.914427012517945e-41, "asLittle": -1.5, "bytes": [0, 0, 192, 191] }, "setAsBig": { "asBig": -1.9375, "asLittle": 8.923328490974003e-41, "bytes": [191, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": -1.5, "asLittle": 6.914427012517945e-41, "bytes": [191, 192, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 3.14616e-319, "asLittle": -1.5, "bytes": [0, 0, 0, 0, 0, 0, 248, 191] }, "setAsTruncatedLittle": { "asBig": 3.14616e-319, "asLittle": -1.5, "bytes": [0, 0, 0, 0, 0, 0, 248, 191] }, "setAsBig": { "asBig": -1.5, "asLittle": 3.14616e-319, "bytes": [191, 248, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": -1.5, "asLittle": 3.14616e-319, "bytes": [191, 248, 0, 0, 0, 0, 0, 0] } } }, "-3.5": { "value": -3.5, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": -3, "bytes": [253] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 253, "bytes": [253] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": -513, "asLittle": -3, "bytes": [253, 255] }, "setAsBig": { "asBig": -16372, "asLittle": 3264, "bytes": [192, 12] }, "setAsTruncatedBig": { "asBig": -3, "asLittle": -513, "bytes": [255, 253] } }, "Uint16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 65023, "asLittle": 65533, "bytes": [253, 255] }, "setAsBig": { "asBig": 49164, "asLittle": 3264, "bytes": [192, 12] }, "setAsTruncatedBig": { "asBig": 65533, "asLittle": 65023, "bytes": [255, 253] } }, "Int32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": -33554433, "asLittle": -3, "bytes": [253, 255, 255, 255] }, "setAsBig": { "asBig": -1072955392, "asLittle": 3264, "bytes": [192, 12, 0, 0] }, "setAsTruncatedBig": { "asBig": -3, "asLittle": -33554433, "bytes": [255, 255, 255, 253] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4261412863, "asLittle": 4294967293, "bytes": [253, 255, 255, 255] }, "setAsBig": { "asBig": 3222011904, "asLittle": 3264, "bytes": [192, 12, 0, 0] }, "setAsTruncatedBig": { "asBig": 4294967293, "asLittle": 4261412863, "bytes": [255, 255, 255, 253] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.000011622905731201172, "asLittle": -3.5, "bytes": [0, 195] }, "setAsBig": { "asBig": -2.0234375, "asLittle": 0.0002899169921875, "bytes": [192, 12] }, "setAsTruncatedBig": { "asBig": -3.5, "asLittle": 0.000011622905731201172, "bytes": [195, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 3.470736036439707e-41, "asLittle": -3.5, "bytes": [0, 0, 96, 192] }, "setAsBig": { "asBig": -2.1875, "asLittle": 4.573838187556203e-42, "bytes": [192, 12, 0, 0] }, "setAsTruncatedBig": { "asBig": -3.5, "asLittle": 3.470736036439707e-41, "bytes": [192, 96, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 1.6126e-320, "asLittle": -3.5, "bytes": [0, 0, 0, 0, 0, 0, 12, 192] }, "setAsTruncatedLittle": { "asBig": 1.6126e-320, "asLittle": -3.5, "bytes": [0, 0, 0, 0, 0, 0, 12, 192] }, "setAsBig": { "asBig": -3.5, "asLittle": 1.6126e-320, "bytes": [192, 12, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": -3.5, "asLittle": 1.6126e-320, "bytes": [192, 12, 0, 0, 0, 0, 0, 0] } } }, "max safe float32": { "value": 16777216, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16752, "asLittle": 28737, "bytes": [65, 112] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16752, "asLittle": 28737, "bytes": [65, 112] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 1, "asLittle": 16777216, "bytes": [0, 0, 0, 1] }, "setAsBig": { "asBig": 1097859072, "asLittle": 28737, "bytes": [65, 112, 0, 0] }, "setAsTruncatedBig": { "asBig": 16777216, "asLittle": 1, "bytes": [1, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 1, "asLittle": 16777216, "bytes": [0, 0, 0, 1] }, "setAsBig": { "asBig": 1097859072, "asLittle": 28737, "bytes": [65, 112, 0, 0] }, "setAsTruncatedBig": { "asBig": 16777216, "asLittle": 1, "bytes": [1, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asBig": "28737n", "asLittle": "4715268809856909312n", "bytes": [0, 0, 0, 0, 0, 0, 112, 65] }, "setAsTruncatedLittle": { "asBig": "4294967296n", "asLittle": "16777216n", "bytes": [0, 0, 0, 1, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4715268809856909312n", "asLittle": "28737n", "bytes": [65, 112, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "16777216n", "asLittle": "4294967296n", "bytes": [0, 0, 0, 0, 1, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asBig": "28737n", "asLittle": "4715268809856909312n", "bytes": [0, 0, 0, 0, 0, 0, 112, 65] }, "setAsTruncatedLittle": { "asBig": "4294967296n", "asLittle": "16777216n", "bytes": [0, 0, 0, 1, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4715268809856909312n", "asLittle": "28737n", "bytes": [65, 112, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "16777216n", "asLittle": "4294967296n", "bytes": [0, 0, 0, 0, 1, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.0000073909759521484375, "asLittle": "Infinity", "bytes": [0, 124] }, "setAsBig": { "asBig": 2.71875, "asLittle": 8712, "bytes": [65, 112] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 0.0000073909759521484375, "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4.602284546381997e-41, "asLittle": 16777216, "bytes": [0, 0, 128, 75] }, "setAsBig": { "asBig": 15, "asLittle": 4.026911396930227e-41, "bytes": [65, 112, 0, 0] }, "setAsTruncatedBig": { "asBig": 16777216, "asLittle": 4.602284546381997e-41, "bytes": [75, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 1.4198e-319, "asLittle": 16777216, "bytes": [0, 0, 0, 0, 0, 0, 112, 65] }, "setAsTruncatedLittle": { "asBig": 1.4198e-319, "asLittle": 16777216, "bytes": [0, 0, 0, 0, 0, 0, 112, 65] }, "setAsBig": { "asBig": 16777216, "asLittle": 1.4198e-319, "bytes": [65, 112, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 16777216, "asLittle": 1.4198e-319, "bytes": [65, 112, 0, 0, 0, 0, 0, 0] } } }, "nonrepresentable float32, +1": { "value": 2147483648, "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16864, "asLittle": -8127, "bytes": [65, 224] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 16864, "asLittle": 57409, "bytes": [65, 224] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 128, "asLittle": -2147483648, "bytes": [0, 0, 0, 128] }, "setAsBig": { "asBig": 1105199104, "asLittle": 57409, "bytes": [65, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": -2147483648, "asLittle": 128, "bytes": [128, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 128, "asLittle": 2147483648, "bytes": [0, 0, 0, 128] }, "setAsBig": { "asBig": 1105199104, "asLittle": 57409, "bytes": [65, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 2147483648, "asLittle": 128, "bytes": [128, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asBig": "57409n", "asLittle": "4746794007248502784n", "bytes": [0, 0, 0, 0, 0, 0, 224, 65] }, "setAsTruncatedLittle": { "asBig": "549755813888n", "asLittle": "2147483648n", "bytes": [0, 0, 0, 128, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4746794007248502784n", "asLittle": "57409n", "bytes": [65, 224, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "2147483648n", "asLittle": "549755813888n", "bytes": [0, 0, 0, 0, 128, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asBig": "57409n", "asLittle": "4746794007248502784n", "bytes": [0, 0, 0, 0, 0, 0, 224, 65] }, "setAsTruncatedLittle": { "asBig": "549755813888n", "asLittle": "2147483648n", "bytes": [0, 0, 0, 128, 0, 0, 0, 0] }, "setAsBig": { "asBig": "4746794007248502784n", "asLittle": "57409n", "bytes": [65, 224, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "2147483648n", "asLittle": "549755813888n", "bytes": [0, 0, 0, 0, 128, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.0000073909759521484375, "asLittle": "Infinity", "bytes": [0, 124] }, "setAsBig": { "asBig": 2.9375, "asLittle": -544.5, "bytes": [65, 224] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 0.0000073909759521484375, "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 1.1070257868166055e-43, "asLittle": 2147483648, "bytes": [0, 0, 0, 79] }, "setAsBig": { "asBig": 28, "asLittle": 8.044714353842342e-41, "bytes": [65, 224, 0, 0] }, "setAsTruncatedBig": { "asBig": 2147483648, "asLittle": 1.1070257868166055e-43, "bytes": [79, 0, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 2.8364e-319, "asLittle": 2147483648, "bytes": [0, 0, 0, 0, 0, 0, 224, 65] }, "setAsTruncatedLittle": { "asBig": 2.8364e-319, "asLittle": 2147483648, "bytes": [0, 0, 0, 0, 0, 0, 224, 65] }, "setAsBig": { "asBig": 2147483648, "asLittle": 2.8364e-319, "bytes": [65, 224, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": 2147483648, "asLittle": 2.8364e-319, "bytes": [65, 224, 0, 0, 0, 0, 0, 0] } } }, "Infinity": { "value": "Infinity", "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 255, "bytes": [255] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 32752, "asLittle": -3969, "bytes": [127, 240] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 32752, "asLittle": 61567, "bytes": [127, 240] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 2146435072, "asLittle": 61567, "bytes": [127, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 2146435072, "asLittle": 61567, "bytes": [127, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asBig": "61567n", "asLittle": "9218868437227405312n", "bytes": [0, 0, 0, 0, 0, 0, 240, 127] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.0000073909759521484375, "asLittle": "Infinity", "bytes": [0, 124] }, "setAsBig": { "asBig": "NaN", "asLittle": -9208, "bytes": [127, 240] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 0.0000073909759521484375, "bytes": [124, 0] } }, "Float32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4.609571298396486e-41, "asLittle": "Infinity", "bytes": [0, 0, 128, 127] }, "setAsBig": { "asBig": "NaN", "asLittle": 8.627374255308601e-41, "bytes": [127, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 4.609571298396486e-41, "bytes": [127, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 3.0418e-319, "asLittle": "Infinity", "bytes": [0, 0, 0, 0, 0, 0, 240, 127] }, "setAsTruncatedLittle": { "asBig": 3.0418e-319, "asLittle": "Infinity", "bytes": [0, 0, 0, 0, 0, 0, 240, 127] }, "setAsBig": { "asBig": "Infinity", "asLittle": 3.0418e-319, "bytes": [127, 240, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "Infinity", "asLittle": 3.0418e-319, "bytes": [127, 240, 0, 0, 0, 0, 0, 0] } } }, "-Infinity": { "value": "-Infinity", "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": -16, "asLittle": -3841, "bytes": [255, 240] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 65520, "asLittle": 61695, "bytes": [255, 240] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": -1048576, "asLittle": 61695, "bytes": [255, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asLittle": 61695, "asBig": 4293918720, "bytes": [255, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.000015020370483398438, "asLittle": "-Infinity", "bytes": [0, 252] }, "setAsBig": { "asBig": "NaN", "asLittle": -10232, "bytes": [255, 240] }, "setAsTruncatedBig": { "asBig": "-Infinity", "asLittle": 0.000015020370483398438, "bytes": [252, 0] } }, "Float32": { "setAsLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 4.627507918739843e-41, "asLittle": "-Infinity", "bytes": [0, 0, 128, 255] }, "setAsBig": { "asBig": "NaN", "asLittle": 8.645310875651959e-41, "bytes": [255, 240, 0, 0] }, "setAsTruncatedBig": { "asBig": "-Infinity", "asLittle": 4.627507918739843e-41, "bytes": [255, 128, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 3.04814e-319, "asLittle": "-Infinity", "bytes": [0, 0, 0, 0, 0, 0, 240, 255] }, "setAsTruncatedLittle": { "asBig": 3.04814e-319, "asLittle": "-Infinity", "bytes": [0, 0, 0, 0, 0, 0, 240, 255] }, "setAsBig": { "asBig": "-Infinity", "asLittle": 3.04814e-319, "bytes": [255, 240, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "-Infinity", "asLittle": 3.04814e-319, "bytes": [255, 240, 0, 0, 0, 0, 0, 0] } } }, "NaN": { "value": "NaN", "Int8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Uint8Clamped": { "setAsLittle": { "asLittle": 0, "bytes": [0] }, "setAsTruncatedLittle": { "asLittle": 0, "bytes": [0] } }, "Int16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 32760, "asLittle": -1921, "bytes": [127, 248] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Uint16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] }, "setAsBig": { "asBig": 32760, "asLittle": 63615, "bytes": [127, 248] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0] } }, "Int32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 2146959360, "asLittle": 63615, "bytes": [127, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "Uint32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] }, "setAsBig": { "asBig": 2146959360, "asLittle": 63615, "bytes": [127, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": 0, "asLittle": 0, "bytes": [0, 0, 0, 0] } }, "BigInt64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "BigUint64": { "setAsLittle": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsBig": { "asLittle": "0n", "asBig": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "0n", "asLittle": "0n", "bytes": [0, 0, 0, 0, 0, 0, 0, 0] } }, "Float16": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0] }, "setAsTruncatedLittle": { "asBig": 0.000007510185241699219, "asLittle": "NaN", "bytes": [0, 126] }, "setAsBig": { "asBig": "NaN", "asLittle": -36832, "bytes": [127, 248] }, "setAsTruncatedBig": { "asBig": "NaN", "asLittle": 0.000007510185241699219, "bytes": [126, 0] } }, "Float32": { "setAsLittle": { "asLittle": 0, "asBig": 0, "bytes": [0, 0, 0, 0] }, "setAsTruncatedLittle": { "asBig": 6.905458702346266e-41, "asLittle": "NaN", "bytes": [0, 0, 192, 127] }, "setAsBig": { "asBig": "NaN", "asLittle": 8.914360180802324e-41, "bytes": [127, 248, 0, 0] }, "setAsTruncatedBig": { "asBig": "NaN", "asLittle": 6.905458702346266e-41, "bytes": [127, 192, 0, 0] } }, "Float64": { "setAsLittle": { "asBig": 3.143e-319, "asLittle": "NaN", "bytes": [0, 0, 0, 0, 0, 0, 248, 127] }, "setAsTruncatedLittle": { "asBig": 3.143e-319, "asLittle": "NaN", "bytes": [0, 0, 0, 0, 0, 0, 248, 127] }, "setAsBig": { "asBig": "NaN", "asLittle": 3.143e-319, "bytes": [127, 248, 0, 0, 0, 0, 0, 0] }, "setAsTruncatedBig": { "asBig": "NaN", "asLittle": 3.143e-319, "bytes": [127, 248, 0, 0, 0, 0, 0, 0] } } } } ljharb-es-abstract-babee05/test/diffOps.js000066400000000000000000000032111516525472400206460ustar00rootroot00000000000000'use strict'; var keys = require('object-keys'); var forEach = require('for-each'); var indexOf = require('array.prototype.indexof'); var hasOwn = require('hasown'); module.exports = function diffOperations(actual, expected, expectedMissing, expectedExtra) { var actualKeys = keys(actual); var expectedKeys = keys(expected); var extra = []; var missing = []; var extraMissing = []; forEach(actualKeys, function (op) { if (!(op in expected)) { if (actual[op] && typeof actual[op] === 'object') { forEach(keys(actual[op]), function (nestedOp) { var fullNestedOp = op + '::' + nestedOp; if (!(fullNestedOp in expected)) { if (indexOf(expectedExtra, fullNestedOp) === -1) { extra.push(fullNestedOp); } } else if (indexOf(expectedMissing, fullNestedOp) !== -1) { extra.push(fullNestedOp); } }); } else { extra.push(op); } } else if (indexOf(expectedMissing, op) !== -1) { extra.push(op); } }); var checkMissing = function checkMissing(op, actualValue) { if (typeof actualValue !== 'function' && indexOf(expectedMissing, op) === -1) { missing.push(op); } }; forEach(expectedKeys, function (op) { if (op.indexOf('::') > -1) { var parts = op.split('::'); var value = actual[parts[0]]; if (value && typeof value === 'object' && typeof value[parts[1]] === 'function') { checkMissing(op, value[parts[1]]); } } else { checkMissing(op, actual[op]); } }); forEach(expectedMissing, function (expectedOp) { if (!hasOwn(expected, expectedOp)) { extraMissing.push(expectedOp); } }); return { missing: missing, extra: extra, extraMissing: extraMissing }; }; ljharb-es-abstract-babee05/test/es2015.js000066400000000000000000000061311516525472400201770ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AllocateArrayBuffer', 'AllocateTypedArray', 'BoundFunctionCreate', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIterator', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateSetIterator', 'CreateUnmappedArgumentsObject', 'DaylightSavingTA', 'Decode', 'Encode', 'EnqueueJob', 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateDirectCall', 'EvaluateNew', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetBase', 'GetFunctionRealm', 'GetIdentifierReference', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'HasPrimitiveBase', 'ImportedLocalNames', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'ModuleNamespaceCreate', 'msPerDay', // constant 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'ParseModule', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RepeatMatcher', // requires Matcher, State, Continuation 'ResolveBinding', 'ResolveThisBinding', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetRealmGlobalObject', 'SetViewValue', 'sign', // used in ES5, but not in ES2015, removed in ES2016 'SortCompare', // mystery access to `comparefn` arg 'TriggerPromiseReactions', 'TypedArrayFrom', 'UpdateEmpty', // completion records 'UTC' // depends on LocalTZA, DaylightSavingTA ]; var testYear = require('./helpers/testYear'); testYear(2015, expectedMissing); ljharb-es-abstract-babee05/test/es2016.js000066400000000000000000000070301516525472400201770ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AllocateArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIterator', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'DaylightSavingTA', 'Decode', 'Encode', 'EnqueueJob', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateDirectCall', 'EvaluateNew', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetIdentifierReference', 'GetModuleNamespace', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GlobalDeclarationInstantiation', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NextJob', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', // takes a Reference 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RepeatMatcher', // requires Matcher, State, Continuation 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetRealmGlobalObject', 'SetViewValue', 'SortCompare', // mystery access to `comparefn` arg 'TopLevelModuleEvaluationJob', 'ToString Applied to the Number Type', 'TriggerPromiseReactions', 'UpdateEmpty', // completion records 'UTC' // depends on LocalTZA, DaylightSavingTA ]; var testYear = require('./helpers/testYear'); testYear(2016, expectedMissing); ljharb-es-abstract-babee05/test/es2017.js000066400000000000000000000105371516525472400202060ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionAwait', 'AsyncFunctionCreate', 'AsyncFunctionStart', 'AtomicLoad', 'AtomicReadModifyWrite', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIterator', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'DaylightSavingTA', 'Decode', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateDirectCall', 'EvaluateNew', 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', // mystery access to `comparefn` arg 'Suspend', 'TopLevelModuleEvaluationJob', 'ToString Applied to the Number Type', 'TriggerPromiseReactions', 'UpdateEmpty', // completion records 'UTC', // depends on LocalTZA, DaylightSavingTA 'ValidateSharedIntegerTypedArray', 'ValueOfReadEvent', 'WakeWaiter', 'AddRestrictedFunctionProperties', 'synchronizes-with' ]; var testYear = require('./helpers/testYear'); testYear(2017, expectedMissing); ljharb-es-abstract-babee05/test/es2018.js000066400000000000000000000113061516525472400202020ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionCreate', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorFunctionCreate', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorYield', 'AtomicLoad', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InnerModuleEvaluation', 'InnerModuleInstantiation', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleDeclarationEnvironmentSetup', 'ModuleExecution', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', // mystery access to `comparefn` arg 'Suspend', 'synchronizes-with', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', // completion records 'UTC', // depends on LocalTZA 'ValidateSharedIntegerTypedArray', 'ValueOfReadEvent', 'WakeWaiter' ]; var testYear = require('./helpers/testYear'); testYear(2018, expectedMissing); ljharb-es-abstract-babee05/test/es2019.js000066400000000000000000000113221516525472400202010ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionCreate', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorFunctionCreate', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorYield', 'AtomicLoad', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateIntrinsics', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnqueueJob', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EventSet', 'ExecuteModule', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionAllocate', 'FunctionCreate', 'FunctionDeclarationInstantiation', 'FunctionInitialize', 'GeneratorFunctionCreate', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeEnvironment', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InnerModuleEvaluation', 'InnerModuleInstantiation', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'PromiseReactionJob', 'PromiseResolveThenableJob', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'RunJobs', 'ScriptEvaluation', 'ScriptEvaluationJob', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', // mystery access to `comparefn` arg 'Suspend', 'SynchronizeEventSet', 'synchronizes-with', 'TopLevelModuleEvaluationJob', 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', // completion records 'UTC', // depends on LocalTZA 'ValidateSharedIntegerTypedArray', 'ValueOfReadEvent' ]; var testYear = require('./helpers/testYear'); testYear(2019, expectedMissing); ljharb-es-abstract-babee05/test/es2020.js000066400000000000000000000114301516525472400201710ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorYield', 'AtomicLoad', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CloneArrayBuffer', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateStringIterator', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EventSet', 'ExecuteModule', 'FinishDynamicImport', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetBase', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetReferencedName', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'HasPrimitiveBase', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeEnvironment', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InnerModuleEvaluation', 'InnerModuleLinking', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsStrictReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LocalTZA', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParseScript', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', // mystery access to `comparefn` arg 'Suspend', 'synchronizes-with', 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', // completion records 'UTC', // depends on LocalTZA 'UTF16Encode', 'ValidateSharedIntegerTypedArray', 'ValueOfReadEvent' ]; var testYear = require('./helpers/testYear'); testYear(2020, expectedMissing); ljharb-es-abstract-babee05/test/es2021.js000066400000000000000000000122641516525472400202000ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorReject', 'AsyncGeneratorResolve', 'AsyncGeneratorResumeNext', 'AsyncGeneratorStart', 'AsyncGeneratorValidate', 'AsyncGeneratorYield', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CleanupFinalizationRegistry', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateAsyncIteratorFromClosure', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateIteratorFromClosure', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EvaluateStringOrNumericBinaryExpression', // takes Parse Nodes 'EventSet', 'ExecuteModule', 'FinishDynamicImport', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeEnvironment', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InitializeTypedArrayFromArrayBuffer', // TypedArray initialization 'InitializeTypedArrayFromArrayLike', // TypedArray initialization 'InitializeTypedArrayFromList', // TypedArray initialization 'InitializeTypedArrayFromTypedArray', // TypedArray initialization 'InnerModuleEvaluation', 'InnerModuleLinking', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LocalTZA', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParsePattern', // depends on ParseText, returns a Parse Node 'ParseScript', 'ParseText', // returns a Parse Node 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseAny', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SortCompare', // mystery access to `comparefn` arg 'SuspendAgent', 'synchronizes-with', 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', // completion records 'UTC', // depends on LocalTZA 'ValueOfReadEvent', 'Yield' // macro ]; var testYear = require('./helpers/testYear'); testYear(2021, expectedMissing); ljharb-es-abstract-babee05/test/es2022.js000066400000000000000000000132561516525472400202030ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorStart', 'AsyncGeneratorValidate', 'AsyncGeneratorYield', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CleanupFinalizationRegistry', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateAsyncIteratorFromClosure', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateIteratorFromClosure', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EvaluateStringOrNumericBinaryExpression', // takes Parse Nodes 'EventSet', 'FinishDynamicImport', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'happens-before', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InitializeTypedArrayFromArrayBuffer', // TypedArray initialization 'InitializeTypedArrayFromArrayLike', // TypedArray initialization 'InitializeTypedArrayFromList', // TypedArray initialization 'InitializeTypedArrayFromTypedArray', // TypedArray initialization 'InnerModuleEvaluation', 'InnerModuleLinking', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LocalTZA', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParsePattern', // depends on ParseText, returns a Parse Node 'ParseScript', 'ParseText', // returns a Parse Node 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseAny', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SuspendAgent', 'synchronizes-with', 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', 'UTC', // depends on LocalTZA 'ValueOfReadEvent', 'Yield', // macro // new missings 'AsyncBlockStart', 'AsyncGeneratorAwaitReturn', 'AsyncGeneratorCompleteStep', 'AsyncGeneratorDrainQueue', 'AsyncGeneratorResume', 'AsyncGeneratorUnwrapYieldResumption', 'AsyncModuleExecutionFulfilled', 'AsyncModuleExecutionRejected', 'DefineField', // used by class syntax to make fields 'ExecuteAsyncModule', // module stuff 'GatherAvailableAncestors', // module stuff 'IfAbruptCloseIterator', 'InitializeInstanceElements', // used by class syntax 'IsPrivateReference', 'MakePrivateReference', 'NewPrivateEnvironment', 'PrivateElementFind', 'PrivateFieldAdd', 'PrivateGet', 'PrivateMethodOrAccessorAdd', 'PrivateSet', 'ResolvePrivateIdentifier', 'RoundMVResult' ]; var testYear = require('./helpers/testYear'); testYear(2022, expectedMissing); ljharb-es-abstract-babee05/test/es2023.js000066400000000000000000000142611516525472400202010ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', 'AgentCanSuspend', 'AgentSignifier', 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorStart', 'AsyncGeneratorValidate', 'AsyncGeneratorYield', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CleanupFinalizationRegistry', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CountLeftCapturingParensBefore', // takes a Parse Node 'CountLeftCapturingParensWithin', // takes a Parse Node 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateAsyncIteratorFromClosure', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateIteratorFromClosure', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EvaluateStringOrNumericBinaryExpression', // takes Parse Nodes 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNamedTimeZoneOffsetNanoseconds', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'GroupSpecifiersThatMatch', // takes a Parse Node and returns a List of Parse Nodes 'happens-before', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InitializeTypedArrayFromArrayBuffer', // TypedArray initialization 'InitializeTypedArrayFromArrayLike', // TypedArray initialization 'InitializeTypedArrayFromList', // TypedArray initialization 'InitializeTypedArrayFromTypedArray', // TypedArray initialization 'InnerModuleEvaluation', 'InnerModuleLinking', 'IntegerIndexedObjectCreate', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParsePattern', // depends on ParseText, returns a Parse Node 'ParseScript', 'ParseText', // returns a Parse Node 'ParseTimeZoneOffsetString', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseAny', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'SuspendAgent', 'synchronizes-with', 'TemplateString', // takes a Parse Node 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', 'UTC', // depends on LocalTZA 'ValidateNonRevokedProxy', 'ValueOfReadEvent', 'Yield', // macro // new missings 'AsyncBlockStart', 'AsyncGeneratorAwaitReturn', 'AsyncGeneratorCompleteStep', 'AsyncGeneratorDrainQueue', 'AsyncGeneratorResume', 'AsyncGeneratorUnwrapYieldResumption', 'AsyncModuleExecutionFulfilled', 'AsyncModuleExecutionRejected', 'ContinueDynamicImport', 'ContinueModuleLoading', 'DefineField', // used by class syntax to make fields 'ExecuteAsyncModule', // module stuff 'FinishLoadingImportedModule', 'GatherAvailableAncestors', // module stuff 'GetImportedModule', 'IfAbruptCloseIterator', 'InitializeInstanceElements', // used by class syntax 'InnerModuleLoading', 'IsPrivateReference', 'MakePrivateReference', 'NewPrivateEnvironment', 'PrivateElementFind', 'PrivateFieldAdd', 'PrivateGet', 'PrivateMethodOrAccessorAdd', 'PrivateSet', 'ResolvePrivateIdentifier', 'RoundMVResult', 'ValidateNonRevokedProxy', // deals with spec number types '𝔽', 'ℝ', 'ℤ' ]; var testYear = require('./helpers/testYear'); testYear(2023, expectedMissing); ljharb-es-abstract-babee05/test/es2024.js000066400000000000000000000154641516525472400202100ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'agent-order', // agent stuff 'AgentCanSuspend', // agent stuff 'AgentSignifier', // agent stuff 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorStart', 'AsyncGeneratorValidate', 'AsyncGeneratorYield', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', // requires State, Continuation 'CleanupFinalizationRegistry', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CountLeftCapturingParensBefore', // takes a Parse Node 'CountLeftCapturingParensWithin', // takes a Parse Node 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateAsyncIteratorFromClosure', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateIteratorFromClosure', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateRealm', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EvaluateStringOrNumericBinaryExpression', // takes Parse Nodes 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorResume', 'GeneratorResumeAbrupt', 'GeneratorStart', 'GeneratorValidate', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNamedTimeZoneOffsetNanoseconds', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'GroupSpecifiersThatMatch', // takes a Parse Node and returns a List of Parse Nodes 'happens-before', 'host-synchronizes-with', 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InitializeTypedArrayFromArrayBuffer', // TypedArray initialization 'InitializeTypedArrayFromArrayLike', // TypedArray initialization 'InitializeTypedArrayFromList', // TypedArray initialization 'InitializeTypedArrayFromTypedArray', // TypedArray initialization 'InnerModuleEvaluation', 'InnerModuleLinking', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'memory-order', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParsePattern', // depends on ParseText, returns a Parse Node 'ParseScript', 'ParseText', // returns a Parse Node 'ParseTimeZoneOffsetString', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseAny', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'reads-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', // requires Matcher, State, Continuation 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetRealmGlobalObject', 'SetViewValue', 'SharedDataBlockEventSet', 'synchronizes-with', 'TemplateString', // takes a Parse Node 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', 'UTC', // depends on LocalTZA 'ValidateNonRevokedProxy', 'ValueOfReadEvent', 'Yield', // macro // new missings 'AsyncBlockStart', 'AsyncGeneratorAwaitReturn', 'AsyncGeneratorCompleteStep', 'AsyncGeneratorDrainQueue', 'AsyncGeneratorResume', 'AsyncGeneratorUnwrapYieldResumption', 'AsyncModuleExecutionFulfilled', 'AsyncModuleExecutionRejected', 'ContinueDynamicImport', 'ContinueModuleLoading', 'DefineField', // used by class syntax to make fields 'ExecuteAsyncModule', // module stuff 'FinishLoadingImportedModule', 'GatherAvailableAncestors', // module stuff 'GetImportedModule', 'IfAbruptCloseIterator', 'InitializeInstanceElements', // used by class syntax 'InnerModuleLoading', 'IsPrivateReference', 'MakePrivateReference', 'NewPrivateEnvironment', 'PrivateElementFind', 'PrivateFieldAdd', 'PrivateGet', 'PrivateMethodOrAccessorAdd', 'PrivateSet', 'ResolvePrivateIdentifier', 'RoundMVResult', 'ValidateNonRevokedProxy', // new missings in 2024 'AtomicCompareExchangeInSharedBlock', // atomics 'AvailableNamedTimeZoneIdentifiers', 'BuiltinCallOrConstruct', 'DoWait', // atomics 'EmptyMatcher', // regex matcher stuff 'EnqueueAtomicsWaitAsyncTimeoutJob', 'EnqueueResolveInAgentJob', // agent stuff 'GetRawBytesFromSharedBlock', // atomics 'MatchSequence', // regex matcher stuff 'MatchTwoAlternatives', // regex matcher stuff 'MaybeSimpleCaseFolding', // depends on scf 'RevalidateAtomicAccess', // atomics 'scf', // depends on CaseFolding data 'SuspendThisAgent', // agent stuff 'TypedArrayCreate', // JS can't create an undifferentiated Typed Array // deals with spec number types '𝔽', 'ℝ', 'ℤ' ]; var testYear = require('./helpers/testYear'); testYear(2024, expectedMissing); ljharb-es-abstract-babee05/test/es2025.js000066400000000000000000000161011516525472400201760ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'AddRestrictedFunctionProperties', 'AddWaiter', 'AgentCanSuspend', // agent stuff 'AgentSignifier', // agent stuff 'AllocateArrayBuffer', 'AllocateSharedArrayBuffer', 'AllocateTypedArray', 'AllocateTypedArrayBuffer', 'AsyncFunctionStart', 'AsyncGeneratorEnqueue', 'AsyncGeneratorStart', 'AsyncGeneratorValidate', 'AsyncGeneratorYield', 'AtomicReadModifyWrite', 'Await', // macro 'BackreferenceMatcher', 'BlockDeclarationInstantiation', 'BoundFunctionCreate', 'CaseClauseIsSelected', 'CharacterRangeOrUnion', 'CharacterSetMatcher', 'CleanupFinalizationRegistry', 'Completion', 'ComposeWriteEventBytes', 'Construct', 'CopyDataBlockBytes', 'CountLeftCapturingParensBefore', // takes a Parse Node 'CountLeftCapturingParensWithin', // takes a Parse Node 'CreateArrayFromList', 'CreateArrayIterator', // es-create-array-iterator package, but it has a Type dependence and a shared ArrayIteratorPrototype 'CreateAsyncIteratorFromClosure', 'CreateBuiltinFunction', 'CreateByteDataBlock', 'CreateDynamicFunction', 'CreateForInIterator', 'CreateIntrinsics', 'CreateListIteratorRecord', // only used in FunctionDeclarationInstantiation 'CreateMapIterator', 'CreateMappedArgumentsObject', // takes a Parse Node 'CreatePerIterationEnvironment', 'CreateResolvingFunctions', 'CreateSetIterator', 'CreateSharedByteDataBlock', 'CreateUnmappedArgumentsObject', 'Decode', 'Encode', 'EnterCriticalSection', 'EnumerateObjectProperties', // only used in for-in loops 'EscapeRegExpPattern', 'EvalDeclarationInstantiation', 'EvaluateCall', 'EvaluateNew', 'EvaluatePropertyAccessWithExpressionKey', 'EvaluatePropertyAccessWithIdentifierKey', 'EvaluateStringOrNumericBinaryExpression', // takes Parse Nodes 'EventSet', 'ForBodyEvaluation', 'ForIn/OfBodyEvaluation', 'ForIn/OfHeadEvaluation', 'FulfillPromise', 'FunctionDeclarationInstantiation', 'GeneratorYield', 'GetActiveScriptOrModule', 'GetFunctionRealm', 'GetGeneratorKind', 'GetIdentifierReference', 'GetModifySetValueInBuffer', 'GetModuleNamespace', 'GetNamedTimeZoneOffsetNanoseconds', 'GetNewTarget', 'GetSuperConstructor', 'GetTemplateObject', 'GetThisEnvironment', 'GetThisValue', 'GetValue', 'GetViewValue', 'GetWaiterList', 'GlobalDeclarationInstantiation', 'GroupSpecifiersThatMatch', // takes a Parse Node and returns a List of Parse Nodes 'HostEventSet', 'IfAbruptRejectPromise', 'ImportedLocalNames', 'InitializeBoundName', 'InitializeHostDefinedRealm', 'InitializeReferencedBinding', 'InitializeTypedArrayFromArrayBuffer', // TypedArray initialization 'InitializeTypedArrayFromArrayLike', // TypedArray initialization 'InitializeTypedArrayFromList', // TypedArray initialization 'InitializeTypedArrayFromTypedArray', // TypedArray initialization 'InnerModuleEvaluation', 'InnerModuleLinking', 'IsAnonymousFunctionDefinition', 'IsInTailPosition', 'IsLabelledFunction', 'IsPropertyReference', 'IsSuperReference', 'IsUnresolvableReference', 'IsValidRegularExpressionLiteral', // returns a Parse Node 'LeaveCriticalSection', 'LocalTime', 'LoopContinues', // completion records 'MakeArgGetter', 'MakeArgSetter', 'MakeBasicObject', 'MakeClassConstructor', 'MakeConstructor', 'MakeMethod', 'MakeSuperPropertyReference', 'ModuleNamespaceCreate', 'NewDeclarativeEnvironment', 'NewFunctionEnvironment', 'NewGlobalEnvironment', 'NewModuleEnvironment', 'NewObjectEnvironment', 'NewPromiseReactionJob', 'NewPromiseResolveThenableJob', 'NotifyWaiter', 'OrdinaryCallBindThis', 'OrdinaryCallEvaluateBody', 'OrdinaryDelete', 'OrdinaryFunctionCreate', 'OrdinaryGet', 'OrdinaryIsExtensible', 'OrdinaryOwnPropertyKeys', 'OrdinaryPreventExtensions', 'OrdinarySet', 'OrdinarySetWithOwnDescriptor', 'ParseModule', 'ParsePattern', // depends on ParseText, returns a Parse Node 'ParseScript', 'ParseText', // returns a Parse Node 'ParseTimeZoneOffsetString', 'PerformEval', 'PerformPromiseAll', 'PerformPromiseAllSettled', 'PerformPromiseAny', 'PerformPromiseRace', 'PerformPromiseThen', 'PrepareForOrdinaryCall', 'PrepareForTailCall', 'ProxyCreate', 'PutValue', // takes a Reference 'reads-bytes-from', 'RegExpAlloc', // creates a regex with uninitialized internal slots 'RegExpBuiltinExec', 'RegExpInitialize', // initializes allocated regex's internal slots 'RejectPromise', 'RemoveWaiter', 'RemoveWaiters', 'RepeatMatcher', 'RequireInternalSlot', 'ResolveBinding', 'ResolveThisBinding', 'ReturnIfAbrupt', 'ScriptEvaluation', 'SerializeJSONArray', 'SerializeJSONObject', 'SerializeJSONProperty', 'SetDefaultGlobalBindings', 'SetImmutablePrototype', 'SetViewValue', 'SharedDataBlockEventSet', 'TemplateString', // takes a Parse Node 'TriggerPromiseReactions', 'UnicodeMatchProperty', 'UnicodeMatchPropertyValue', 'UpdateEmpty', 'UTC', // depends on LocalTZA 'ValidateNonRevokedProxy', 'ValueOfReadEvent', 'Yield', // macro // new missings 'AsyncBlockStart', 'AsyncGeneratorAwaitReturn', 'AsyncGeneratorCompleteStep', 'AsyncGeneratorDrainQueue', 'AsyncGeneratorResume', 'AsyncGeneratorUnwrapYieldResumption', 'AsyncModuleExecutionFulfilled', 'AsyncModuleExecutionRejected', 'ContinueDynamicImport', 'ContinueModuleLoading', 'DefineField', // used by class syntax to make fields 'ExecuteAsyncModule', // module stuff 'FinishLoadingImportedModule', 'GatherAvailableAncestors', // module stuff 'GetImportedModule', 'InitializeInstanceElements', // used by class syntax 'InnerModuleLoading', 'IsPrivateReference', 'MakePrivateReference', 'ModuleRequestsEqual', // module stuff 'NewPrivateEnvironment', 'PrivateElementFind', 'PrivateFieldAdd', 'PrivateGet', 'PrivateMethodOrAccessorAdd', 'PrivateSet', 'ResolvePrivateIdentifier', 'RoundMVResult', 'ValidateNonRevokedProxy', // new missings in 2024 'AtomicCompareExchangeInSharedBlock', // atomics 'AvailableNamedTimeZoneIdentifiers', 'BuiltinCallOrConstruct', 'DoWait', // atomics 'EmptyMatcher', // regex matcher stuff 'EnqueueAtomicsWaitAsyncTimeoutJob', 'EnqueueResolveInAgentJob', // agent stuff 'GetRawBytesFromSharedBlock', // atomics 'MatchSequence', // regex matcher stuff 'MatchTwoAlternatives', // regex matcher stuff 'MaybeSimpleCaseFolding', // depends on scf 'RevalidateAtomicAccess', // atomics 'scf', // depends on CaseFolding data 'SuspendThisAgent', // agent stuff 'TypedArrayCreate', // JS can't create an undifferentiated Typed Array // new missings in 2025 'AllImportAttributesSupported', 'BindThisValue', 'CanDeclareGlobalFunction', 'CanDeclareGlobalVar', 'CreateDefaultExportSyntheticModule', // module stuff 'CreateGlobalFunctionBinding', 'CreateGlobalVarBinding', 'CreateImportBinding', 'EvaluateImportCall', // module stuff 'GetSuperBase', 'HasLexicalDeclaration', 'HasRestrictedGlobalProperty', 'IncrementModuleAsyncEvaluationCount', // module stuff 'IsStrict', // parse nodes 'MightBothParticipate', // regex matcher stuff 'ParseJSON', // TODO 'ParseJSONModule', // module stuff 'SetSyntheticModuleExport', // module stuff // deals with spec number types '𝔽', 'ℝ', 'ℤ' ]; var testYear = require('./helpers/testYear'); testYear(2025, expectedMissing); ljharb-es-abstract-babee05/test/es5.js000066400000000000000000000002061516525472400177510ustar00rootroot00000000000000'use strict'; var expectedMissing = [ 'SplitMatch' ]; var testYear = require('./helpers/testYear'); testYear(5, expectedMissing); ljharb-es-abstract-babee05/test/es6.js000066400000000000000000000005621516525472400177570ustar00rootroot00000000000000'use strict'; var test = require('tape'); var ES = require('../'); var ES6 = ES.ES6; var ES2015 = ES.ES2015; var ES6entry = require('../es6'); test('legacy es6 export', function (t) { t.equal(ES6, ES2015, 'main ES6 === main ES2015'); t.end(); }); test('legacy es6 entry point', function (t) { t.equal(ES6, ES6entry, 'main ES6 === ES6 entry point'); t.end(); }); ljharb-es-abstract-babee05/test/es7.js000066400000000000000000000005621516525472400177600ustar00rootroot00000000000000'use strict'; var test = require('tape'); var ES = require('../'); var ES7 = ES.ES7; var ES2016 = ES.ES2016; var ES7entry = require('../es7'); test('legacy es7 export', function (t) { t.equal(ES7, ES2016, 'main ES7 === main ES2016'); t.end(); }); test('legacy es7 entry point', function (t) { t.equal(ES7, ES7entry, 'main ES7 === ES7 entry point'); t.end(); }); ljharb-es-abstract-babee05/test/helpers/000077500000000000000000000000001516525472400203635ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/helpers/CharSet.js000066400000000000000000000040211516525472400222470ustar00rootroot00000000000000'use strict'; var CharSet = require('../../helpers/CharSet'); var test = require('tape'); test('CharSet', function (t) { t.test('constructor', function (st) { var testCh = t.captureFn(function (x) { return x.toLowerCase() === x; }); var yieldCh = t.captureFn(function () {}); var charSet = new CharSet.CharSet(testCh, yieldCh); st.equal(charSet.test, testCh, '`.test` is set'); st.equal(charSet.yield, yieldCh, '`.yield` is set'); st.ok(charSet.test('a')); st.ok(charSet.test('b')); st.notOk(charSet.test('A')); st.notOk(charSet.test('B')); st.deepEqual(testCh.calls, [ { args: ['a'], receiver: charSet, returned: true }, { args: ['b'], receiver: charSet, returned: true }, { args: ['A'], receiver: charSet, returned: false }, { args: ['B'], receiver: charSet, returned: false } ], 'test calls are as expected'); st.end(); }); t.test('getCodeUnits', function (st) { var cs = CharSet.getCodeUnits(); st.notEqual(cs, CharSet.getCodeUnits(), 'returns a new object each time'); var count = 0; cs.yield(function () { count += 1; }); st.equal(count, 57344, 'yields the right number code units'); st.equal(cs.count(), count, '.count() is the same as yield()'); st.end(); }); t.test('getCodePoints', function (st) { var cs = CharSet.getCodePoints(); st.notEqual(cs, CharSet.getCodePoints(), 'returns a new object each time'); var count = 0; cs.yield(function () { count += 1; }); st.equal(count, 1105920, 'yields the right number of code points'); st.equal(cs.count(), count, '.count() is the same as yield()'); st.end(); }); t.test('getNonSimpleCaseFoldingCodePoints', function (st) { var cs = CharSet.getNonSimpleCaseFoldingCodePoints(); st.notEqual(cs, CharSet.getNonSimpleCaseFoldingCodePoints(), 'returns a new object each time'); var count = 0; cs.yield(function () { count += 1; }); st.equal(count, 1105892, 'yields the right number of non-simple-case-folding code points'); st.equal(cs.count(), count, '.count() is the same as yield()'); st.end(); }); }); ljharb-es-abstract-babee05/test/helpers/OwnPropertyKeys.js000066400000000000000000000025451516525472400240730ustar00rootroot00000000000000'use strict'; var test = require('tape'); var hasSymbols = require('has-symbols')(); var $defineProperty = require('es-define-property'); var defineAccessorProperty = require('define-accessor-property'); var defineDataProperty = require('define-data-property'); var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys'); test('OwnPropertyKeys', function (t) { t.deepEqual(OwnPropertyKeys({ a: 1, b: 2 }).sort(), ['a', 'b'].sort(), 'returns own string keys'); t.test('Symbols', { skip: !hasSymbols }, function (st) { var o = { a: 1 }; var sym = Symbol(); o[sym] = 2; st.deepEqual(OwnPropertyKeys(o), ['a', sym], 'returns own string and symbol keys'); st.end(); }); t.test('non-enumerables', { skip: !$defineProperty }, function (st) { var o = { a: 1, b: 42, c: NaN }; defineDataProperty(o, 'b', { nonEnumerable: true, value: 42 }); defineAccessorProperty(o, 'c', { nonEnumerable: true, get: function () { return NaN; } }); if (hasSymbols) { defineDataProperty(o, 'd', { nonEnumerable: true, value: true }); defineAccessorProperty(o, 'e', { nonEnumerable: true, get: function () { return true; } }); } st.deepEqual( OwnPropertyKeys(o).sort(), (hasSymbols ? ['a', 'b', 'c', 'd', 'e'] : ['a', 'b', 'c']).sort(), 'returns non-enumerable own keys, including accessors and symbols if available' ); st.end(); }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/aoAliases.json000066400000000000000000000032571516525472400231660ustar00rootroot00000000000000{ "AbstractEqualityComparison": "Abstract Equality Comparison", "AbstractRelationalComparison": "Abstract Relational Comparison", "StrictEqualityComparison": "Strict Equality Comparison", "//": "CheckObjectCoercible -> RequireObjectCoercible in ES6", "CheckObjectCoercible": "RequireObjectCoercible", "//": "EnumerableOwnNames -> EnumerableOwnProperties in ES2017, -> EnumerableOwnPropertyNames in ES2018, -> EnumerableOwnProperties in ES2023", "EnumerableOwnNames": "EnumerableOwnProperties", "EnumerableOwnPropertyNames": "EnumerableOwnProperties", "//": "IsInteger -> IsIntegralNumber in ES2021", "IsInteger": "IsIntegralNumber", "//": "NumberToRawBytes -> NumericToRawBytes in ES2020", "NumberToRawBytes": "NumericToRawBytes", "//": "NumberToString -> Number::toString in ES2020", "NumberToString": "Number::toString", "//": "Ordinary prefix added in ES2020", "ObjectCreate": "OrdinaryObjectCreate", "//": "RawBytesToNumber -> RawBytesToNumeric in ES2020", "RawBytesToNumber": "RawBytesToNumeric", "//": "thisFoo -> ThisFoo in ES2024", "thisBigIntValue": "ThisBigIntValue", "thisBooleanValue": "ThisBooleanValue", "thisNumberValue": "ThisNumberValue", "thisStringValue": "ThisStringValue", "thisSymbolValue": "ThisSymbolValue", "//": "TypedArrayCreate -> TypedArrayCreateFromConstructor in ES2024", "TypedArrayCreate": "TypedArrayCreateFromConstructor", "//": "UTF16Encoding -> UTF16EncodeCodePoint in ES2021", "UTF16Encoding": "UTF16EncodeCodePoint", "//": "UTF16Decode -> UTF16DecodeSurrogatePair in ES2020, -> UTF16SurrogatePairToCodePoint in ES2021", "UTF16Decode": "UTF16SurrogatePairToCodePoint", "UTF16DecodeSurrogatePair": "UTF16SurrogatePairToCodePoint" } ljharb-es-abstract-babee05/test/helpers/aoMap.json000066400000000000000000000003001516525472400223040ustar00rootroot00000000000000{ "AbstractEqualityComparison": "Abstract Equality Comparison", "AbstractRelationalComparison": "Abstract Relational Comparison", "StrictEqualityComparison": "Strict Equality Comparison" } ljharb-es-abstract-babee05/test/helpers/clearBuffer.js000066400000000000000000000002041516525472400231350ustar00rootroot00000000000000'use strict'; module.exports = function clearBuffer(buffer) { new DataView(buffer).setFloat64(0, 0, true); // clear the buffer }; ljharb-es-abstract-babee05/test/helpers/defineProperty.js000066400000000000000000000006451516525472400237250ustar00rootroot00000000000000'use strict'; var $defineProperty = require('es-define-property'); module.exports = function defineProperty(O, P, Desc) { if ($defineProperty) { return $defineProperty(O, P, Desc); } if ((Desc.enumerable && Desc.configurable && Desc.writable) || !(P in O)) { O[P] = Desc.value; // eslint-disable-line no-param-reassign return O; } throw new SyntaxError('helper does not yet support this configuration'); }; ljharb-es-abstract-babee05/test/helpers/fromPropertyDescriptor.js000066400000000000000000000015651516525472400254770ustar00rootroot00000000000000'use strict'; var test = require('tape'); var fromPropertyDescriptor = require('../../helpers/fromPropertyDescriptor'); test('fromPropertyDescriptor', function (t) { t.deepEqual( fromPropertyDescriptor({}), {}, 'empty obj -> empty obj' ); t.deepEqual( fromPropertyDescriptor({ '[[Value]]': undefined }), { value: undefined }, 'undefined [[Value]] Property Descriptor -> obj with value' ); t.deepEqual( fromPropertyDescriptor({ enumerable: false }), {}, 'descriptor obj -> empty obj' ); t.deepEqual( fromPropertyDescriptor({ '[[Configurable]]': 'true', '[[Enumerable]]': 'false', '[[Get]]': NaN, '[[Set]]': -0, '[[Value]]': 42, '[[Writable]]': 0 }), { // order is important value: 42, writable: false, get: NaN, set: -0, enumerable: true, configurable: true }, 'Property Descriptor -> obj' ); t.end(); }); ljharb-es-abstract-babee05/test/helpers/getAOs.js000066400000000000000000000011571516525472400221070ustar00rootroot00000000000000'use strict'; var glob = require('glob').sync; var path = require('path'); module.exports = function getAOs(year) { var base = path.join('../..', String(year)); var files = glob(path.join(base, '**/*.js'), { cwd: __dirname, ignore: [path.join(base, 'tables/**')] }); var methods = []; for (var i = 0; i < files.length; i += 1) { var file = files[i]; if (path.basename(file, path.extname(file)) !== 'index') { methods[methods.length] = path.relative(base, file).slice(0, -path.extname(file).length).replace('/', '::'); } } methods.sort(function (a, b) { return a.localeCompare(b); }); return methods; }; ljharb-es-abstract-babee05/test/helpers/getIteratorMethod.js000066400000000000000000000021541516525472400243550ustar00rootroot00000000000000'use strict'; var test = require('tape'); var getIteratorMethod = require('../../helpers/getIteratorMethod'); var ES = require('../../es2021'); var testIterator = function (t, iterator) { var result = iterator.next(); var values = []; if (!result.done) { values.push(result.value); values = values.concat(testIterator(t, iterator)); } return values; }; test('getIteratorMethod', function (t) { t.equal(typeof getIteratorMethod, 'function', 'is a function'); var arr = [1, 2, 3]; var arrayIt = getIteratorMethod(ES, arr).call(arr); t.deepEqual( testIterator(t, arrayIt), [1, 2, 3], 'array iterator' ); var withHamburger = 'foo\uD834\uDF06bar'; var stringIt = getIteratorMethod(ES, withHamburger).call(withHamburger); t.deepEqual( testIterator(t, stringIt), ['f', 'o', 'o', '\uD834\uDF06', 'b', 'a', 'r'], 'string iterator' ); var boxedHamburger = Object(withHamburger); var boxedStringIt = getIteratorMethod(ES, boxedHamburger).call(boxedHamburger); t.deepEqual( testIterator(t, boxedStringIt), ['f', 'o', 'o', '\uD834\uDF06', 'b', 'a', 'r'], 'boxed string iterator' ); t.end(); }); ljharb-es-abstract-babee05/test/helpers/getNamelessFunction.js000066400000000000000000000002361516525472400246770ustar00rootroot00000000000000'use strict'; module.exports = function getNamelessFunction() { var f = Object(function () {}); try { delete f.name; } catch (e) { /**/ } return f; }; ljharb-es-abstract-babee05/test/helpers/getSymbolDescription.js000066400000000000000000000034621516525472400250770ustar00rootroot00000000000000'use strict'; var test = require('tape'); var debug = require('object-inspect'); var forEach = require('for-each'); var hasOwn = require('hasown'); var v = require('es-value-fixtures'); var getSymbolDescription = require('get-symbol-description'); var getInferredName = require('get-symbol-description/getInferredName'); test('getSymbolDescription', function (t) { t.test('no symbols', { skip: v.hasSymbols }, function (st) { st['throws']( getSymbolDescription, SyntaxError, 'requires Symbol support' ); st.end(); }); forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) { t['throws']( function () { getSymbolDescription(nonSymbol); }, v.hasSymbols ? TypeError : SyntaxError, debug(nonSymbol) + ' is not a Symbol' ); }); t.test('with symbols', { skip: !v.hasSymbols }, function (st) { forEach( [ [Symbol(), undefined], [Symbol(undefined), undefined], [Symbol(null), 'null'], [Symbol.iterator, 'Symbol.iterator'], [Symbol('foo'), 'foo'] ], function (pair) { var sym = pair[0]; var desc = pair[1]; st.equal(getSymbolDescription(sym), desc, debug(sym) + ' description is ' + debug(desc)); } ); st.test('only possible when inference or native `Symbol.prototype.description` is supported', { skip: !getInferredName && !hasOwn(Symbol.prototype, 'description') }, function (s2t) { s2t.equal(getSymbolDescription(Symbol('')), '', 'Symbol("") description is ""'); s2t.end(); }); st.test('only possible when global symbols are supported', { skip: !hasOwn(Symbol, 'for') || !hasOwn(Symbol, 'keyFor') }, function (s2t) { // eslint-disable-next-line no-restricted-properties s2t.equal(getSymbolDescription(Symbol['for']('')), '', 'Symbol.for("") description is ""'); s2t.end(); }); st.end(); }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/index.js000066400000000000000000000004731516525472400220340ustar00rootroot00000000000000'use strict'; require('./getSymbolDescription'); require('./isByteValue'); require('./isCodePoint'); require('./isFullyPopulatedPropertyDescriptor'); require('./isLineTerminator'); require('./isStringOrHole'); require('./isStringOrUndefined'); require('./OwnPropertyKeys'); require('./mod'); require('./records'); ljharb-es-abstract-babee05/test/helpers/isByteValue.js000066400000000000000000000012211516525472400231510ustar00rootroot00000000000000'use strict'; var test = require('tape'); var forEach = require('for-each'); var debug = require('object-inspect'); var isByteValue = require('../../helpers/isByteValue'); var v = require('es-value-fixtures'); test('isByteValue', function (t) { forEach([].concat( v.notNonNegativeIntegers, -1, -42, -Infinity, Infinity, v.nonIntegerNumbers ), function (nonByteValue) { t.equal(isByteValue(nonByteValue), false, debug(nonByteValue) + ' is not a byte value'); }); for (var i = 0; i <= 255; i += 1) { t.equal(isByteValue(i), true, i + ' is a byte value'); } t.equal(isByteValue(256), false, '256 is not a byte value'); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isCodePoint.js000066400000000000000000000011171516525472400231410ustar00rootroot00000000000000'use strict'; var test = require('tape'); var forEach = require('for-each'); var debug = require('object-inspect'); var isCodePoint = require('../../helpers/isCodePoint'); var v = require('es-value-fixtures'); test('isCodePoint', function (t) { forEach(v.notNonNegativeIntegers.concat(0x10FFFF + 1), function (nonCodePoints) { t.equal(isCodePoint(nonCodePoints), false, debug(nonCodePoints) + ' is not a Code Point'); }); forEach([-0, 0, 1, 7, 42, 0x10FFFF], function (codePoint) { t.equal(isCodePoint(codePoint), true, debug(codePoint) + ' is a Code Point'); }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isFullyPopulatedPropertyDescriptor.js000066400000000000000000000025311516525472400300330ustar00rootroot00000000000000'use strict'; var test = require('tape'); var v = require('es-value-fixtures'); var forEach = require('for-each'); var inspect = require('object-inspect'); var isFullyPopulatedPropertyDescriptor = require('../../helpers/isFullyPopulatedPropertyDescriptor'); var ES = { IsAccessorDescriptor: require('../../2022/IsAccessorDescriptor'), // eslint-disable-line global-require IsDataDescriptor: require('../../2022/IsDataDescriptor') // eslint-disable-line global-require }; test('isFullyPopulatedPropertyDescriptor', function (t) { t.equal(isFullyPopulatedPropertyDescriptor(ES), false, '"no args" is not a fully populated property descriptor'); forEach(v.primitives, function (primitive) { t.equal(isFullyPopulatedPropertyDescriptor(ES, primitive), false, inspect(primitive) + ' is not a fully populated property descriptor'); }); t.equal(isFullyPopulatedPropertyDescriptor(ES, v.genericDescriptor()), false, 'a generic descriptor is not a fully populated property descriptor'); t.equal(isFullyPopulatedPropertyDescriptor(ES, v.dataDescriptor()), false, 'an incomplete data descriptor is not a fully populated property descriptor'); t.equal(isFullyPopulatedPropertyDescriptor(ES, v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor()))), true, 'a fully populated data descriptor is a fully populated property descriptor'); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isLineTerminator.js000066400000000000000000000011041516525472400242050ustar00rootroot00000000000000'use strict'; var test = require('tape'); var isLineTerminator = require('../../helpers/isLineTerminator'); test('isLineTerminator', function (t) { t.equal(typeof isLineTerminator, 'function', 'isLineTerminator is a function'); t.notOk(isLineTerminator('a'), 'a is not a line terminator'); t.ok(isLineTerminator('\n'), '\\n is not a line terminator'); t.ok(isLineTerminator('\r'), '\\r is not a line terminator'); t.ok(isLineTerminator('\u2028'), '\\u2028 is not a line terminator'); t.ok(isLineTerminator('\u2029'), '\\u2029 is not a line terminator'); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isSameType.js000066400000000000000000000017711516525472400230120ustar00rootroot00000000000000'use strict'; var test = require('tape'); var forEach = require('for-each'); var inspect = require('object-inspect'); var isSameType = require('../../helpers/isSameType'); test('isSameType', function (t) { forEach([ undefined, null, false, true, 42, NaN, 0, -1, Infinity, -Infinity, '', 'abc' ], function (v) { t.ok(isSameType(v, v), inspect(v) + ' is the same type as itself'); }); forEach([ [42, NaN], ['', 'abc'] ], function (pair) { t.ok(isSameType(pair[0], pair[1]), inspect(pair[0]) + ' is the same type as ' + inspect(pair[1])); t.ok(isSameType(pair[1], pair[0]), inspect(pair[1]) + ' is the same type as ' + inspect(pair[0])); }); forEach([ [null, undefined], [1, '1'], [1, Object(1)], [null, {}] ], function (pair) { t.notOk(isSameType(pair[0], pair[1]), inspect(pair[0]) + ' is not the same type as ' + inspect(pair[1])); t.notOk(isSameType(pair[1], pair[0]), inspect(pair[1]) + ' is not the same type as ' + inspect(pair[0])); }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isStringOrHole.js000066400000000000000000000014761516525472400236440ustar00rootroot00000000000000'use strict'; var test = require('tape'); var isStringOrHole = require('../../helpers/isStringOrHole'); var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false test('isStringOrHole', function (t) { t.ok(isStringOrHole('foo', 0, ['foo', 'bar', 'baz']), 'string item is a string or a hole'); t.equal( isStringOrHole(undefined, 0, [undefined, 'bar', 'baz']), !canDistinguishSparseFromUndefined, 'present undefined item is ' + (canDistinguishSparseFromUndefined ? 'not a hole' : 'a hole, this is IE 6 - 8') ); t.equal( isStringOrHole(undefined, 0, [, 'bar', 'baz']), // eslint-disable-line no-sparse-arrays canDistinguishSparseFromUndefined, 'missing item is ' + (canDistinguishSparseFromUndefined ? 'a hole' : 'not a hole, this is IE 6 - 8') ); t.end(); }); ljharb-es-abstract-babee05/test/helpers/isStringOrUndefined.js000066400000000000000000000012501516525472400246440ustar00rootroot00000000000000'use strict'; var test = require('tape'); var v = require('es-value-fixtures'); var inspect = require('object-inspect'); var forEach = require('../../helpers/forEach'); var isStringOrUndefined = require('../../helpers/isStringOrUndefined'); test('isStringOrUndefined', function (t) { t.ok(isStringOrUndefined('foo'), 'string is a string or undefined'); t.ok(isStringOrUndefined(undefined), 'undefined is a string or undefined'); forEach(v.primitives, function (primitive) { if (typeof primitive !== 'undefined' && typeof primitive !== 'string') { t.notOk(isStringOrUndefined(primitive), inspect(primitive) + ' is not a string or undefined'); } }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/kludgeMatch.js000066400000000000000000000010051516525472400231450ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var hasLastIndex = 'lastIndex' in (/a/).exec('a'); // IE 8 var hasGroups = 'groups' in (/a/).exec('a'); // modern engines module.exports = function kludgeMatch(R, matchObject) { if (hasGroups) { assign(matchObject, { groups: matchObject.groups }); } if (hasLastIndex) { assign(matchObject, { lastIndex: matchObject.lastIndex || R.lastIndex }); } else { delete matchObject.lastIndex; // eslint-disable-line no-param-reassign } return matchObject; }; ljharb-es-abstract-babee05/test/helpers/makeAsyncFromSyncIterator.js000066400000000000000000000010031516525472400260210ustar00rootroot00000000000000'use strict'; var makeIteratorRecord = require('./makeIteratorRecord'); module.exports = function makeAsyncFromSyncIterator(CreateAsyncFromSyncIterator, end, throwMethod, returnMethod) { var i = 0; var iterator = { next: function next() { try { return { done: i > end, value: i }; } finally { i += 1; } }, 'return': returnMethod, 'throw': throwMethod }; var syncIteratorRecord = makeIteratorRecord(iterator); return CreateAsyncFromSyncIterator(syncIteratorRecord); }; ljharb-es-abstract-babee05/test/helpers/makeIteratorRecord.js000066400000000000000000000002541516525472400245100ustar00rootroot00000000000000'use strict'; module.exports = function makeIteratorRecord(iterator) { return { '[[Iterator]]': iterator, '[[NextMethod]]': iterator.next, '[[Done]]': false }; }; ljharb-es-abstract-babee05/test/helpers/mod.js000066400000000000000000000006031516525472400214770ustar00rootroot00000000000000'use strict'; var test = require('tape'); var forEach = require('for-each'); var debug = require('object-inspect'); var mod = require('../../helpers/mod'); test('mod', function (t) { forEach([-3, -0, 0, 3], function (n) { var expected = n < 0 || (1 / n === -Infinity) ? -0 : 0; t.equal(mod(n, 3), expected, 'mod(' + debug(n) + ', 3) === ' + debug(expected)); }); t.end(); }); ljharb-es-abstract-babee05/test/helpers/records/000077500000000000000000000000001516525472400220245ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/helpers/records/index.js000066400000000000000000000000611516525472400234660ustar00rootroot00000000000000'use strict'; require('./property-descriptor'); ljharb-es-abstract-babee05/test/helpers/records/property-descriptor.js000066400000000000000000000024611516525472400264250ustar00rootroot00000000000000'use strict'; var test = require('tape'); var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var isPropertyDescriptor = require('../../../helpers/records/property-descriptor'); test('Property Descriptor', function (t) { forEach(v.primitives, function (primitive) { t.equal( isPropertyDescriptor(primitive), false, debug(primitive) + ' is not a Property Descriptor' ); }); t.equal( isPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor' ); t.equal( isPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor' ); t.equal( isPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor' ); t.equal( isPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor' ); t.equal( isPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor' ); t.equal( isPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor' ); t['throws']( function () { isPropertyDescriptor(v.bothDescriptor()); }, TypeError, 'a Property Descriptor can not be both a Data and an Accessor Descriptor' ); t.end(); }); ljharb-es-abstract-babee05/test/helpers/runManifestTest.js000066400000000000000000000020621516525472400240540ustar00rootroot00000000000000'use strict'; var path = require('path'); var fs = require('fs'); var filter = require('array.prototype.filter'); var forEach = require('for-each'); var keys = require('object-keys'); var aoMap = require('./aoMap.json'); module.exports = function runManifestTest(test, ES, edition) { test('ES' + edition + ' manifest', { skip: !fs.readdirSync }, function (t) { var files = filter( fs.readdirSync(path.join(__dirname, '../../' + edition), 'utf-8'), function rejectDotFile(file) { return file[0] !== '.' && file !== 'tables'; } ); forEach(files, function (file) { var name = path.basename(file, path.extname(file)); var actualName = aoMap[name] in ES ? aoMap[name] : name; var actual = ES[actualName]; var expected = require(path.join(__dirname, '../../' + edition + '/', file)); // eslint-disable-line global-require t.equal(actual, expected, 'ES["' + actualName + '"] === ' + file); }); var actualCount = keys(ES).length; t.equal(actualCount, files.length, 'expected ' + files.length + ' files, got ' + actualCount); t.end(); }); }; ljharb-es-abstract-babee05/test/helpers/testAsyncIterator.js000066400000000000000000000012561516525472400244140ustar00rootroot00000000000000'use strict'; module.exports = function testAsyncIterator(t, asyncIterator, expected) { var results = arguments.length > 3 ? arguments[3] : []; var nextResult = asyncIterator.next(); return Promise.resolve(nextResult).then(function (result) { results.push(result); if (!result.done && results.length < expected.length) { t.deepEqual(result, { done: false, value: expected[results.length - 1] }, 'result ' + (results.length - 1)); return testAsyncIterator(t, asyncIterator, expected, results); } t.equal(results.length, expected.length, 'expected ' + expected.length + ', got ' + (result.done ? '' : 'more than ') + results.length); return results.length; }); }; ljharb-es-abstract-babee05/test/helpers/testIterator.js000066400000000000000000000007521516525472400234160ustar00rootroot00000000000000'use strict'; module.exports = function testIterator(t, iterator, expected) { var resultCount = 0; var result; while (result = iterator.next(), !result.done && resultCount < expected.length + 1) { // eslint-disable-line no-sequences t.deepEqual(result, { done: false, value: expected[resultCount] }, 'result ' + resultCount); resultCount += 1; } t.equal(resultCount, expected.length, 'expected ' + expected.length + ', got ' + (result.done ? '' : 'more than ') + resultCount); }; ljharb-es-abstract-babee05/test/helpers/testRESIterator.js000066400000000000000000000012071516525472400237640ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); var testIterator = require('./testIterator'); module.exports = function testRegExpStringIterator(CreateRegExpStringIterator, t, regex, str, global, unicode, expected) { var iterator = CreateRegExpStringIterator(regex, str, global, unicode); t.equal(typeof iterator, 'object', 'iterator is an object'); t.equal(typeof iterator.next, 'function', '`.next` is a function'); t.test('has symbols', { skip: !v.hasSymbols }, function (st) { st.equal(typeof iterator[Symbol.iterator], 'function', '[`Symbol.iterator`] is a function'); st.end(); }); testIterator(t, iterator, expected); }; ljharb-es-abstract-babee05/test/helpers/testYear.js000066400000000000000000000042531516525472400225250ustar00rootroot00000000000000'use strict'; var path = require('path'); var forEach = require('for-each'); var test = require('tape'); var runManifestTest = require('./runManifestTest'); var diffOps = require('../diffOps'); var aoAliases = require('./aoAliases.json'); var getAOs = require('./getAOs'); var index = require('../../'); module.exports = function testYear(year, expectedMissing) { var methods = getAOs(year); var ES = index['ES' + year]; var getAO = function getAO(method) { var parts = method.split('::'); var obj = ES; while (parts.length > 1) { obj = ES[parts[0]]; parts.shift(); } var methodName = parts[0]; var x = obj[methodName]; if (x) { return x; } if (aoAliases[method]) { return ES[aoAliases[method]]; } return null; }; var ops = require('../../operations/' + (year === 5 ? 'es5' : year)); // eslint-disable-line global-require test('ES ' + year, function (t) { t.test('has expected operations', function (st) { var diff = diffOps(ES, ops, expectedMissing, []); st.deepEqual(diff.extra, [], 'no extra ops'); st.deepEqual(diff.missing, [], 'no unexpected missing ops'); st.deepEqual(diff.extraMissing, [], 'no unexpected "expected missing" ops'); st.end(); }); runManifestTest(t.test, ES, year); t.test('Abstract Operations', function (st) { forEach(methods, function (method) { var testMethod; try { testMethod = require('../' + path.join('./methods/', method.replace('::', '/'))); // eslint-disable-line global-require } catch (e) { var alias = aoAliases[method] || ''; try { testMethod = require('../' + path.join('./methods/', alias.replace('::', '/'))); // eslint-disable-line global-require } catch (eA) { var data = { '*': true }; data[method] = e; data[alias] = eA; console.error('could not find:', data); // throw [e, eA]; } } st.test(method, { todo: !testMethod }, testMethod && function (s2t) { var ao = getAO(method); s2t.equal(typeof ao, 'function', method + ' exists'); testMethod( s2t, year, ao, { getAO: getAO } ); s2t.end(); }); }); st.end(); }); t.end(); }); }; ljharb-es-abstract-babee05/test/helpers/throwsSentinel.js000066400000000000000000000003031516525472400237450ustar00rootroot00000000000000'use strict'; module.exports = function throwsSentinel(fn, sentinel, message) { try { fn(); this.fail('did not throw: ' + message); } catch (e) { this.equal(e, sentinel, message); } }; ljharb-es-abstract-babee05/test/helpers/typedArrays.js000066400000000000000000000007421516525472400232330ustar00rootroot00000000000000'use strict'; var availableTypedArrays = require('available-typed-arrays')(); module.exports = function getTypedArrays(year) { var result = []; for (var i = 0; i < availableTypedArrays.length; i += 1) { var typedArray = availableTypedArrays[i]; if ( (year > 2024 || typedArray !== 'Float16Array') && (year >= 2020 || (typedArray !== 'BigInt64Array' && typedArray !== 'BigUint64Array')) ) { result[result.length] = typedArray; } } return result; }; ljharb-es-abstract-babee05/test/helpers/unserializeNumeric.js000066400000000000000000000004261516525472400246000ustar00rootroot00000000000000'use strict'; var hasBigInts = require('has-bigints')(); var $BigInt = hasBigInts ? BigInt : null; module.exports = function unserializeNumeric(x) { if (typeof x === 'string') { return x.charAt(x.length - 1) === 'n' ? $BigInt(x.slice(0, -1)) : Number(x); } return x; }; ljharb-es-abstract-babee05/test/helpers/v.js000066400000000000000000000102571516525472400211730ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); var hasBigInts = require('has-bigints')(); var isCore = require('is-core-module'); var leadingPoo = '\uD83D'; var trailingPoo = '\uDCA9'; var wholePoo = leadingPoo + trailingPoo; var msPerSecond = 1e3; var msPerMinute = 60 * msPerSecond; var msPerHour = 60 * msPerMinute; var msPerDay = 24 * msPerHour; var unknowns = [].concat( v.primitives, v.objects ); var allButSyms = [].concat( v.objects, v.nonSymbolPrimitives ); var invalidTATypes = [].concat( v.nonStrings, 'not a valid type' ); var nonFiniteNumbers = [].concat( v.infinities, NaN ); var notInts = [].concat( v.nonNumbers, v.nonIntegerNumbers, nonFiniteNumbers, [], new Date() ); var elementSizes = { __proto__: null, $Int8Array: 1, $Uint8Array: 1, $Uint8ClampedArray: 1, $Int16Array: 2, $Uint16Array: 2, $Int32Array: 4, $Uint32Array: 4, $BigInt64Array: 8, $BigUint64Array: 8, $Float16Array: 2, $Float32Array: 4, $Float64Array: 8 }; var getUnclampedUnsignedIntegerTypes = function () { return [ 'Int8', 'Int16', 'Int32' ]; }; var getClampedTypes = function () { return [ 'Uint8C' ]; }; var getUnclampedSignedIntegerTypes = function () { return [ 'Uint8', 'Uint16', 'Uint32' ]; }; var getUnclampedIntegerTypes = function (year) { return [].concat( getUnclampedUnsignedIntegerTypes(year), getUnclampedSignedIntegerTypes(year) ); }; var getFloatTypes = function (year) { return [].concat( year >= 2025 && typeof Float16Array !== 'undefined' ? 'Float16' : [], 'Float32', 'Float64' ); }; var getIntegerTypes = function (year) { return [].concat( getUnclampedIntegerTypes(year), getClampedTypes(year) ); }; var getBigIntTypes = function (year) { return year >= 2020 ? [ 'BigInt64', 'BigUint64' ] : []; }; var getNumberTypes = function (year) { return [].concat( getFloatTypes(year), getIntegerTypes(year) ); }; var getNonUnclampedIntegerTypes = function (year) { return [].concat( getFloatTypes(year), getBigIntTypes(year) ); }; var getUnsignedElementTypes = function (year) { return [].concat( getUnclampedSignedIntegerTypes(year), year >= 2020 && hasBigInts ? 'BigUint64' : [] ); }; var getSignedElementTypes = function (year) { return [].concat( getUnclampedUnsignedIntegerTypes(year), getFloatTypes(year), year >= 2020 && hasBigInts ? 'BigInt64' : [] ); }; var getTATypes = function (year) { return [].concat( getNumberTypes(year), year >= 2020 && hasBigInts ? getBigIntTypes(year) : [] ); }; var nonTATypes = [].concat( v.nonStrings, '', 'Byte' ); var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false // IE 9 does not throw in strict mode when writability/configurability/extensibility is violated var noThrowOnStrictViolation = (function () { try { delete [].length; return true; } catch (e) { } return false; }()); var isBigIntTAType = function isBigIntTAType(type) { return type.slice(0, 3) === 'Big'; }; /* globals postMessage */ var canDetach = typeof structuredClone === 'function' || typeof postMessage === 'function' || isCore('worker_threads'); module.exports = { poo: { leading: leadingPoo, trailing: trailingPoo, whole: wholePoo }, hasBigInts: hasBigInts, msPerSecond: msPerSecond, msPerMinute: msPerMinute, msPerHour: msPerHour, msPerDay: msPerDay, unknowns: unknowns, allButSyms: allButSyms, invalidTATypes: invalidTATypes, nonFiniteNumbers: nonFiniteNumbers, notInts: notInts, elementSizes: elementSizes, getUnclampedUnsignedIntegerTypes: getUnclampedUnsignedIntegerTypes, getClampedTypes: getClampedTypes, getUnclampedSignedIntegerTypes: getUnclampedSignedIntegerTypes, getUnclampedIntegerTypes: getUnclampedIntegerTypes, getFloatTypes: getFloatTypes, getIntegerTypes: getIntegerTypes, getBigIntTypes: getBigIntTypes, getNumberTypes: getNumberTypes, getNonUnclampedIntegerTypes: getNonUnclampedIntegerTypes, getUnsignedElementTypes: getUnsignedElementTypes, getSignedElementTypes: getSignedElementTypes, getTATypes: getTATypes, nonTATypes: nonTATypes, canDistinguishSparseFromUndefined: canDistinguishSparseFromUndefined, noThrowOnStrictViolation: noThrowOnStrictViolation, isBigIntTAType: isBigIntTAType, canDetach: canDetach }; ljharb-es-abstract-babee05/test/index.js000066400000000000000000000020361516525472400203670ustar00rootroot00000000000000'use strict'; var ES = require('../'); var test = require('tape'); var keys = require('object-keys'); var forEach = require('for-each'); var ESkeys = keys(ES).sort(); var ES6keys = keys(ES.ES6).sort(); test('exposed properties', function (t) { t.deepEqual(ESkeys, ES6keys.concat([ 'ES2025', 'ES2024', 'ES2023', 'ES2022', 'ES2021', 'ES2020', 'ES2019', 'ES2018', 'ES2017', 'ES7', 'ES2016', 'ES6', 'ES2015', 'ES5' ]).sort(), 'main ES object keys match ES6 keys'); t.end(); }); test('methods match', function (t) { forEach(ES6keys, function (key) { t.equal(ES.ES6[key], ES[key], 'method ' + key + ' on main ES object is ES6 method'); }); t.end(); }); require('./GetIntrinsic'); require('./helpers'); require('./bufferTestCases'); require('./es5'); require('./es6'); require('./es2015'); require('./es7'); require('./es2016'); require('./es2017'); require('./es2018'); require('./es2019'); require('./es2020'); require('./es2021'); require('./es2022'); require('./es2023'); require('./es2024'); require('./es2025'); ljharb-es-abstract-babee05/test/methods/000077500000000000000000000000001516525472400203645ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/methods/AbstractEqualityComparison.js000066400000000000000000000105041516525472400262360ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var v = require('es-value-fixtures'); var forEach = require('for-each'); var esV = require('../helpers/v'); module.exports = function (t, year, AbstractEqualityComparison) { t.ok(year >= 5, 'ES5+'); t.test('same types use ===', function (st) { forEach(esV.unknowns, function (value) { st.equal(AbstractEqualityComparison(value, value), value === value, debug(value) + ' is abstractly equal to itself'); }); st.end(); }); t.test('different types coerce', function (st) { var pairs = [ [null, undefined], [3, '3'], [true, '3'], [true, 3], [false, 0], [false, '0'], [3, [3]], ['3', [3]], [true, [1]], [false, [0]], [String(v.coercibleObject), v.coercibleObject], [Number(String(v.coercibleObject)), v.coercibleObject], [Number(v.coercibleObject), v.coercibleObject], [String(Number(v.coercibleObject)), v.coercibleObject], [null, {}] ]; forEach(pairs, function (pair) { var a = pair[0]; var b = pair[1]; // eslint-disable-next-line eqeqeq st.equal(AbstractEqualityComparison(a, b), a == b, debug(a) + ' == ' + debug(b)); // eslint-disable-next-line eqeqeq st.equal(AbstractEqualityComparison(b, a), b == a, debug(b) + ' == ' + debug(a)); }); st.end(); }); t.test('Symbols', { skip: !v.hasSymbols || year < 2015 }, function (st) { st.equal( AbstractEqualityComparison(Symbol(), Symbol()), false, 'Abstract Equality Comparison with two distinct Symbols with no description returns false' ); st.equal( AbstractEqualityComparison(Symbol('x'), Symbol('x')), false, 'Abstract Equality Comparison with two distinct Symbols with the same description returns false' ); st.equal( AbstractEqualityComparison(Symbol.iterator, Symbol.iterator), true, 'Abstract Equality Comparison with two identical Symbols returns true' ); var x = Symbol('x'); st.equal( AbstractEqualityComparison({ valueOf: function () { return x; } }, x), true, 'Abstract Equality Comparison with an object that coerces to a Symbol, and that Symbol, returns true' ); st.equal( AbstractEqualityComparison(x, { valueOf: function () { return x; } }), true, 'Abstract Equality Comparison with a Symbol, and an object that coerces to that Symbol, returns true' ); st.end(); }); if (year >= 2020) { t.test('BigInts', { skip: !esV.hasBigInts }, function (st) { st.equal( AbstractEqualityComparison(BigInt(1), 1), true, debug(BigInt(1)) + ' == ' + debug(1) ); st.equal( AbstractEqualityComparison(1, BigInt(1)), true, debug(1) + ' == ' + debug(BigInt(1)) ); st.equal( AbstractEqualityComparison(BigInt(1), 1.1), false, debug(BigInt(1)) + ' != ' + debug(1.1) ); st.equal( AbstractEqualityComparison(1.1, BigInt(1)), false, debug(1.1) + ' != ' + debug(BigInt(1)) ); st.equal( AbstractEqualityComparison(BigInt(1), '1'), true, debug(BigInt(1)) + ' == ' + debug('1') ); st.equal( AbstractEqualityComparison('1', BigInt(1)), true, debug(1) + ' == ' + debug(BigInt('1')) ); st.equal( AbstractEqualityComparison(BigInt(1), '1.1'), false, debug(BigInt(1)) + ' != ' + debug('1.1') ); st.equal( AbstractEqualityComparison('1.1', BigInt(1)), false, debug('1.1') + ' != ' + debug(BigInt(1)) ); var bigIntObject = { valueOf: function () { return BigInt(1); } }; st.equal( AbstractEqualityComparison(BigInt(1), bigIntObject), true, debug(BigInt(1)) + ' == ' + debug(bigIntObject) ); st.equal( AbstractEqualityComparison(bigIntObject, BigInt(1)), true, debug(bigIntObject) + ' == ' + debug(BigInt('1')) ); st.equal( AbstractEqualityComparison(BigInt(1), v.coercibleObject), false, debug(BigInt(1)) + ' != ' + debug(v.coercibleObject) ); st.equal( AbstractEqualityComparison(v.coercibleObject, BigInt(1)), false, debug(bigIntObject) + ' != ' + debug(BigInt(1)) ); forEach([NaN, Infinity, -Infinity], function (nonFinite) { st.equal( AbstractEqualityComparison(BigInt(1), nonFinite), false, debug(BigInt(1)) + ' != ' + debug(nonFinite) ); st.equal( AbstractEqualityComparison(nonFinite, BigInt(1)), false, debug(nonFinite) + ' != ' + debug(BigInt(1)) ); }); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/AbstractRelationalComparison.js000066400000000000000000000217341516525472400265420ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var v = require('es-value-fixtures'); var forEach = require('for-each'); var esV = require('../helpers/v'); var $BigInt = esV.hasBigInts ? BigInt : null; module.exports = function (t, year, AbstractRelationalComparison) { t.ok(year >= 5, 'ES5+'); t.test('at least one operand is NaN', function (st) { st.equal(AbstractRelationalComparison(NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined'); st.equal(AbstractRelationalComparison({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined'); st.equal(AbstractRelationalComparison(NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined'); st.equal(AbstractRelationalComparison({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined'); st.end(); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { AbstractRelationalComparison(3, 4, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach(v.zeroes, function (zero) { t.equal(AbstractRelationalComparison(zero, 1, true), true, 'LeftFirst: ' + debug(zero) + ' is less than 1'); t.equal(AbstractRelationalComparison(zero, 1, false), true, '!LeftFirst: ' + debug(zero) + ' is less than 1'); t.equal(AbstractRelationalComparison(1, zero, true), false, 'LeftFirst: 1 is not less than ' + debug(zero)); t.equal(AbstractRelationalComparison(1, zero, false), false, '!LeftFirst: 1 is not less than ' + debug(zero)); t.equal(AbstractRelationalComparison(zero, zero, true), false, 'LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); t.equal(AbstractRelationalComparison(zero, zero, false), false, '!LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); }); t.equal(AbstractRelationalComparison(Infinity, -Infinity, true), false, 'LeftFirst: ∞ is not less than -∞'); t.equal(AbstractRelationalComparison(Infinity, -Infinity, false), false, '!LeftFirst: ∞ is not less than -∞'); t.equal(AbstractRelationalComparison(-Infinity, Infinity, true), true, 'LeftFirst: -∞ is less than ∞'); t.equal(AbstractRelationalComparison(-Infinity, Infinity, false), true, '!LeftFirst: -∞ is less than ∞'); t.equal(AbstractRelationalComparison(-Infinity, 0, true), true, 'LeftFirst: -∞ is less than +0'); t.equal(AbstractRelationalComparison(-Infinity, 0, false), true, '!LeftFirst: -∞ is less than +0'); t.equal(AbstractRelationalComparison(0, -Infinity, true), false, 'LeftFirst: +0 is not less than -∞'); t.equal(AbstractRelationalComparison(0, -Infinity, false), false, '!LeftFirst: +0 is not less than -∞'); t.equal(AbstractRelationalComparison(3, 4, true), true, 'LeftFirst: 3 is less than 4'); t.equal(AbstractRelationalComparison(4, 3, true), false, 'LeftFirst: 3 is not less than 4'); t.equal(AbstractRelationalComparison(3, 4, false), true, '!LeftFirst: 3 is less than 4'); t.equal(AbstractRelationalComparison(4, 3, false), false, '!LeftFirst: 3 is not less than 4'); t.equal(AbstractRelationalComparison('3', '4', true), true, 'LeftFirst: "3" is less than "4"'); t.equal(AbstractRelationalComparison('4', '3', true), false, 'LeftFirst: "3" is not less than "4"'); t.equal(AbstractRelationalComparison('3', '4', false), true, '!LeftFirst: "3" is less than "4"'); t.equal(AbstractRelationalComparison('4', '3', false), false, '!LeftFirst: "3" is not less than "4"'); t.equal(AbstractRelationalComparison('a', 'abc', true), true, 'LeftFirst: "a" is less than "abc"'); t.equal(AbstractRelationalComparison('abc', 'a', true), false, 'LeftFirst: "abc" is not less than "a"'); t.equal(AbstractRelationalComparison('a', 'abc', false), true, '!LeftFirst: "a" is less than "abc"'); t.equal(AbstractRelationalComparison('abc', 'a', false), false, '!LeftFirst: "abc" is not less than "a"'); t.equal(AbstractRelationalComparison(v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42'); t.equal(AbstractRelationalComparison(42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object'); t.equal(AbstractRelationalComparison(v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42'); t.equal(AbstractRelationalComparison(42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object'); t.equal(AbstractRelationalComparison(v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"'); t.equal(AbstractRelationalComparison('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object'); t.equal(AbstractRelationalComparison(v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"'); t.equal(AbstractRelationalComparison('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object'); // TODO: compare LeftFirst true/false for observability t.test('bigints', { skip: !esV.hasBigInts || year < 2020 }, function (st) { forEach(v.bigints, function (bigint) { st.equal( AbstractRelationalComparison(bigint, bigint + BigInt(1), false), true, debug(bigint) + ' is less than the same + 1n' ); st.equal( AbstractRelationalComparison(bigint, bigint - BigInt(1), false), false, debug(bigint) + ' is not less than the same - 1n' ); st.equal( AbstractRelationalComparison(bigint, -Infinity, false), false, debug(bigint) + ' is not less than -∞' ); st.equal( AbstractRelationalComparison(-Infinity, bigint, false), true, '-∞ is less than ' + debug(bigint) ); st.equal( AbstractRelationalComparison(bigint, Infinity, false), true, debug(bigint) + ' is less than ∞' ); st.equal( AbstractRelationalComparison(Infinity, bigint, false), false, '∞ is not less than ' + debug(bigint) ); }); st.equal(AbstractRelationalComparison($BigInt(0), '1', true), true, 'LeftFirst: 0n is less than "1"'); st.equal(AbstractRelationalComparison('1', $BigInt(0), true), false, 'LeftFirst: "1" is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), '1', false), true, '!LeftFirst: 0n is less than "1"'); st.equal(AbstractRelationalComparison('1', $BigInt(0), false), false, '!LeftFirst: "1" is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), 1, true), true, 'LeftFirst: 0n is less than 1'); st.equal(AbstractRelationalComparison(1, $BigInt(0), true), false, 'LeftFirst: 1 is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), 1, false), true, '!LeftFirst: 0n is less than 1'); st.equal(AbstractRelationalComparison(1, $BigInt(0), false), false, '!LeftFirst: 1 is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), $BigInt(1), true), true, 'LeftFirst: 0n is less than 1n'); st.equal(AbstractRelationalComparison($BigInt(1), $BigInt(0), true), false, 'LeftFirst: 1n is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), $BigInt(1), false), true, '!LeftFirst: 0n is less than 1n'); st.equal(AbstractRelationalComparison($BigInt(1), $BigInt(0), false), false, '!LeftFirst: 1n is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), 'NaN', true), undefined, 'LeftFirst: 0n and "NaN" produce `undefined`'); st.equal(AbstractRelationalComparison('NaN', $BigInt(0), true), undefined, 'LeftFirst: "NaN" and 0n produce `undefined`'); st.equal(AbstractRelationalComparison($BigInt(0), 'NaN', false), undefined, '!LeftFirst: 0n and "NaN" produce `undefined`'); st.equal(AbstractRelationalComparison('NaN', $BigInt(0), false), undefined, '!LeftFirst: "NaN" and 0n produce `undefined`'); st.equal(AbstractRelationalComparison($BigInt(0), NaN, true), undefined, 'LeftFirst: 0n and NaN produce `undefined`'); st.equal(AbstractRelationalComparison(NaN, $BigInt(0), true), undefined, 'LeftFirst: NaN and 0n produce `undefined`'); st.equal(AbstractRelationalComparison($BigInt(0), NaN, false), undefined, '!LeftFirst: 0n and NaN produce `undefined`'); st.equal(AbstractRelationalComparison(NaN, $BigInt(0), false), undefined, '!LeftFirst: NaN and 0n produce `undefined`'); st.equal(AbstractRelationalComparison($BigInt(0), Infinity, true), true, 'LeftFirst: 0n is less than Infinity'); st.equal(AbstractRelationalComparison(Infinity, $BigInt(0), true), false, 'LeftFirst: Infinity is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), Infinity, false), true, '!LeftFirst: 0n is less than Infinity'); st.equal(AbstractRelationalComparison(Infinity, $BigInt(0), false), false, '!LeftFirst: Infinity is not less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), -Infinity, true), false, 'LeftFirst: 0n is not less than -Infinity'); st.equal(AbstractRelationalComparison(-Infinity, $BigInt(0), true), true, 'LeftFirst: -Infinity is less than 0n'); st.equal(AbstractRelationalComparison($BigInt(0), -Infinity, false), false, '!LeftFirst: 0n is not less than -Infinity'); st.equal(AbstractRelationalComparison(-Infinity, $BigInt(0), false), true, '!LeftFirst: -Infinity is less than 0n'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/AddEntriesFromIterable.js000066400000000000000000000033501516525472400252410ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, AddEntriesFromIterable) { t.ok(year >= 2019, 'ES2019+'); t['throws']( function () { AddEntriesFromIterable({}, undefined, function () {}); }, TypeError, 'iterable must not be undefined' ); t['throws']( function () { AddEntriesFromIterable({}, null, function () {}); }, TypeError, 'iterable must not be null' ); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { AddEntriesFromIterable({}, {}, nonFunction); }, TypeError, debug(nonFunction) + ' is not a function' ); }); t.test('Symbol support', { skip: !v.hasSymbols }, function (st) { st.plan(5 + v.primitives.length); var O = {}; st.equal(AddEntriesFromIterable(O, [], function () {}), O, 'returns the target'); var adder = function (key, value) { st.equal(this, O, 'adder gets proper receiver'); st.equal(key, 0, 'k is key'); st.equal(value, 'a', 'v is value'); }; AddEntriesFromIterable(O, ['a'].entries(), adder); forEach(v.primitives, function (primitive) { var badIterator = { next: function next() { return { done: false, value: primitive }; } }; var badIterable = {}; badIterable[Symbol.iterator] = function () { return badIterator; }; st['throws']( function () { AddEntriesFromIterable(O, badIterable, adder); }, TypeError, debug(primitive) + ' is not an Object' ); }); var badder = function (key, value) { throw new EvalError(key + value); }; st['throws']( function () { AddEntriesFromIterable(O, [[1, 2]], badder); }, EvalError, 'bad adder throws' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/AddToKeptObjects.js000066400000000000000000000006751516525472400240630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, AddToKeptObjects) { t.ok(year >= 2021, 'ES2021+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { AddToKeptObjects(nonObject); }, debug(nonObject) + ' is not an Object' ); }); t.equal(AddToKeptObjects({}), undefined, 'returns nothing'); }; ljharb-es-abstract-babee05/test/methods/AddValueToKeyedGroup.js000066400000000000000000000021061516525472400247100ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, AddValueToKeyedGroup) { t.ok(year >= 2024, 'ES2024+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { AddValueToKeyedGroup(nonArray, 'key', 'value'); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t['throws']( function () { AddValueToKeyedGroup([{ keyedGroup: false }], 'key', 'value'); }, TypeError, '`groups` is not a List of keyed groups' ); var groups = []; t.equal(AddValueToKeyedGroup(groups, 'key', 'value'), undefined); t.deepEqual(groups, [{ '[[Key]]': 'key', '[[Elements]]': ['value'] }], 'first value is added to a new group'); t.equal(AddValueToKeyedGroup(groups, 'key', 'value2'), undefined); t.equal(AddValueToKeyedGroup(groups, 'key2', 'value'), undefined); t.deepEqual( groups, [ { '[[Key]]': 'key', '[[Elements]]': ['value', 'value2'] }, { '[[Key]]': 'key2', '[[Elements]]': ['value'] } ], 'values added to expected groups' ); }; ljharb-es-abstract-babee05/test/methods/AdvanceStringIndex.js000066400000000000000000000045061516525472400244470ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, AdvanceStringIndex) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { AdvanceStringIndex(nonString); }, TypeError, '"S" argument must be a String; ' + debug(nonString) + ' is not' ); }); forEach(esV.notInts, function (nonInt) { t['throws']( function () { AdvanceStringIndex('abc', nonInt); }, TypeError, '"index" argument must be an integer, ' + debug(nonInt) + ' is not.' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { AdvanceStringIndex('abc', 0, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); var str = 'a' + esV.poo.whole + 'c'; t.test('non-unicode mode', function (st) { for (var i = 0; i < str.length + 2; i += 1) { st.equal(AdvanceStringIndex(str, i, false), i + 1, i + ' advances to ' + (i + 1)); } st.end(); }); t.test('unicode mode', function (st) { st.equal(AdvanceStringIndex(str, 0, true), 1, '0 advances to 1'); st.equal(AdvanceStringIndex(str, 1, true), 3, '1 advances to 3'); st.equal(AdvanceStringIndex(str, 2, true), 3, '2 advances to 3'); st.equal(AdvanceStringIndex(str, 3, true), 4, '3 advances to 4'); st.equal(AdvanceStringIndex(str, 4, true), 5, '4 advances to 5'); st.end(); }); t.test('lone surrogates', function (st) { var halfPoo = 'a' + esV.poo.leading + 'c'; st.equal(AdvanceStringIndex(halfPoo, 0, true), 1, '0 advances to 1'); st.equal(AdvanceStringIndex(halfPoo, 1, true), 2, '1 advances to 2'); st.equal(AdvanceStringIndex(halfPoo, 2, true), 3, '2 advances to 3'); st.equal(AdvanceStringIndex(halfPoo, 3, true), 4, '3 advances to 4'); st.end(); }); t.test('surrogate pairs', function (st) { var lowestPair = String.fromCharCode(0xD800) + String.fromCharCode(0xDC00); var highestPair = String.fromCharCode(0xDBFF) + String.fromCharCode(0xDFFF); st.equal(AdvanceStringIndex(lowestPair, 0, true), 2, 'lowest surrogate pair, 0 -> 2'); st.equal(AdvanceStringIndex(highestPair, 0, true), 2, 'highest surrogate pair, 0 -> 2'); st.equal(AdvanceStringIndex(esV.poo.whole, 0, true), 2, 'poop, 0 -> 2'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/AllCharacters.js000066400000000000000000000034601516525472400234350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var CharSet = require('../../helpers/CharSet').CharSet; var esV = require('../helpers/v'); var check = function check(t, cs, name) { t.ok(cs instanceof CharSet, 'nonUnicode CharSet'); var count = 0; cs.yield(function () { count += 1; }); t.equal(count, cs.count(), name + ' RER yields the expected number of code points'); }; module.exports = function (t, year, AllCharacters) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonRER) { t['throws']( function () { AllCharacters(nonRER); }, TypeError, debug(nonRER) + ' is not a Regular Expression Record' ); }); var nonUnicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 0 }; var unicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': true, '[[CapturingGroupsCount]]': 0 }; var nonUnicodeSets = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': false, '[[CapturingGroupsCount]]': 0 }; var unicodeSets = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': true, '[[CapturingGroupsCount]]': 0 }; var unicodeSetsIC = { '[[IgnoreCase]]': true, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': true, '[[CapturingGroupsCount]]': 0 }; check(t, AllCharacters(nonUnicode), 'nonUnicode'); check(t, AllCharacters(unicode), 'unicode'); check(t, AllCharacters(nonUnicodeSets), 'nonUnicodeSets'); check(t, AllCharacters(unicodeSets), 'unicodeSets'); check(t, AllCharacters(unicodeSetsIC), 'unicodeSets ignore case'); }; ljharb-es-abstract-babee05/test/methods/ApplyStringOrNumericBinaryOperator.js000066400000000000000000000145011516525472400277040ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, ApplyStringOrNumericBinaryOperator, extras) { t.ok(year >= 2021, 'ES2021+'); forEach([].concat( v.nonStrings, '', '^^', '//', '***' ), function (nonOp) { t['throws']( function () { ApplyStringOrNumericBinaryOperator(null, nonOp, null); }, TypeError, 'opText must be a valid operation: ' + debug(nonOp) + ' is not an operation' ); }); var obj = { toString: function () { return 'abc'; } }; forEach(v.strings, function (string) { t.equal( ApplyStringOrNumericBinaryOperator(string, '+', v.toStringOnlyObject), string + '7', debug(string) + ' + ' + debug(v.toStringOnlyObject) + ' is ' + debug(string + '7') ); t.equal( ApplyStringOrNumericBinaryOperator(v.toStringOnlyObject, '+', string), '7' + string, debug(v.toStringOnlyObject) + ' + ' + debug(string) + ' is ' + debug('7' + v.toStringOnlyObject) ); t.equal( ApplyStringOrNumericBinaryOperator(string, '+', string), string + string, debug(string) + ' + ' + debug(string) + ' is ' + debug(string + string) ); t.equal( ApplyStringOrNumericBinaryOperator(string, '+', obj), string + 'abc', debug(string) + ' + ' + debug(obj) + ' is ' + debug(string + 'abc') ); t.equal( ApplyStringOrNumericBinaryOperator(obj, '+', string), 'abc' + string, debug(obj) + ' + ' + debug(string) + ' is ' + debug('abc' + string) ); }); t.equal( ApplyStringOrNumericBinaryOperator(obj, '+', obj), 'abcabc', debug(obj) + ' + ' + debug(obj) + ' is ' + debug('abcabc') ); t.equal( ApplyStringOrNumericBinaryOperator(v.toStringOnlyObject, '+', v.toStringOnlyObject), 14, debug(v.toStringOnlyObject) + ' + ' + debug(v.toStringOnlyObject) + ' is 14' ); forEach(v.numbers, function (number) { t.equal( ApplyStringOrNumericBinaryOperator(number, '+', number), number + number, debug(number) + ' + itself is ' + debug(number + number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '-', number), number - number, debug(number) + ' - itself is ' + debug(number + number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '*', number), number * number, debug(number) + ' * itself is ' + debug(number + number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '**', number), Math.pow(number, number), debug(number) + ' ** itself is ' + debug(Math.pow(number, number)) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '/', number), number / number, debug(number) + ' / itself is ' + debug(number / number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '%', number), number % number, debug(number) + ' % itself is ' + debug(number % number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '<<', number), number << number, debug(number) + ' << itself is ' + debug(number << number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '>>', number), number >> number, debug(number) + ' >> itself is ' + debug(number >> number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '>>>', number), number >>> number, debug(number) + ' >>> itself is ' + debug(number >>> number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '&', number), number & number, debug(number) + ' & itself is ' + debug(number & number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '^', number), number ^ number, debug(number) + ' ^ itself is ' + debug(number ^ number) ); t.equal( ApplyStringOrNumericBinaryOperator(number, '|', number), number | number, debug(number) + ' | itself is ' + debug(number | number) ); }); t.test('BigInt support', { skip: !esV.hasBigInts }, function (st) { forEach(v.bigints, function (bigint) { st['throws']( function () { ApplyStringOrNumericBinaryOperator(Number(bigint), '+', bigint); }, TypeError, 'Number and BigInt can not be added' ); st['throws']( function () { ApplyStringOrNumericBinaryOperator(bigint, '+', Number(bigint)); }, TypeError, 'BigInt and Number can not be added' ); }); var BigIntExponentiate = extras.getAO('BigInt::exponentiate'); forEach(v.bigints, function (bigint) { st.equal( ApplyStringOrNumericBinaryOperator(bigint, '+', bigint), bigint + bigint, debug(bigint) + ' + itself is ' + debug(bigint + bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '-', bigint), bigint - bigint, debug(bigint) + ' - itself is ' + debug(bigint + bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '*', bigint), bigint * bigint, debug(bigint) + ' * itself is ' + debug(bigint + bigint) ); var result = BigIntExponentiate(bigint, bigint); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '**', bigint), result, debug(bigint) + ' ** itself is ' + debug(result) ); if (bigint !== BigInt(0)) { st.equal( ApplyStringOrNumericBinaryOperator(bigint, '/', bigint), bigint / bigint, debug(bigint) + ' / itself is ' + debug(bigint / bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '%', bigint), bigint % bigint, debug(bigint) + ' % itself is ' + debug(bigint % bigint) ); } st.equal( ApplyStringOrNumericBinaryOperator(bigint, '<<', bigint), bigint << bigint, debug(bigint) + ' << itself is ' + debug(bigint << bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '>>', bigint), bigint >> bigint, debug(bigint) + ' >> itself is ' + debug(bigint >> bigint) ); st['throws']( function () { ApplyStringOrNumericBinaryOperator(bigint, '>>>', bigint); }, TypeError, 'BigInt does not have unsigned right shift' ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '&', bigint), bigint & bigint, debug(bigint) + ' & itself is ' + debug(bigint & bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '^', bigint), bigint ^ bigint, debug(bigint) + ' ^ itself is ' + debug(bigint ^ bigint) ); st.equal( ApplyStringOrNumericBinaryOperator(bigint, '|', bigint), bigint | bigint, debug(bigint) + ' | itself is ' + debug(bigint | bigint) ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ArrayBufferByteLength.js000066400000000000000000000027061516525472400251250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, ArrayBufferByteLength) { t.ok(year >= 2024, 'ES2024+'); var order = 'UNORDERED'; forEach(esV.unknowns, function (nonAB) { t['throws']( function () { ArrayBufferByteLength(nonAB, order); }, TypeError, debug(nonAB) + ' is not an ArrayBuffer' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var ab = new ArrayBuffer(8); st['throws']( function () { ArrayBufferByteLength(ab, 'not a valid order'); }, TypeError, 'invalid order enum value throws' ); st.equal(ArrayBufferByteLength(ab, order), 8, 'fixed length ArrayBuffer is fixed length'); st.end(); }); t.test('SharedArrayBuffers supported', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(1); st.equal(ArrayBufferByteLength(sab, order), 1, 'fixed length SharedArrayBuffer is fixed length'); st.test('growable SABs', { skip: !('grow' in SharedArrayBuffer.prototype) }, function (s2t) { var gsab = new SharedArrayBuffer(0, { maxByteLength: 64 }); s2t.equal(ArrayBufferByteLength(gsab, order), 0, 'growable SharedArrayBuffer has initial length'); gsab.grow(8); s2t.equal(ArrayBufferByteLength(gsab, order), 8, 'growable SharedArrayBuffer has initial length'); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ArrayBufferCopyAndDetach.js000066400000000000000000000077301516525472400255300ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, ArrayBufferCopyAndDetach, extras) { t.ok(year >= 2024, 'ES2024+'); var IsDetachedBuffer = extras.getAO('IsDetachedBuffer'); forEach(esV.unknowns, function (nonAB) { t['throws']( function () { ArrayBufferCopyAndDetach(nonAB, 0, 'FIXED-LENGTH'); }, TypeError, debug(nonAB) + ' is not an ArrayBuffer or a SharedArrayBuffer' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var ab = new Uint8Array([1, 2, 3, 4]).buffer; st.test('can not detach', { skip: esV.canDetach }, function (s2t) { s2t['throws']( function () { ArrayBufferCopyAndDetach(new ArrayBuffer(8), 0, 'FIXED-LENGTH'); }, SyntaxError, 'throws a syntax error when it can not detach' ); s2t.end(); }); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { forEach(v.nonStrings, function (nonString) { s2t['throws']( function () { ArrayBufferCopyAndDetach(ab, 0, nonString); }, TypeError, debug(nonString) + ' is not a valid preserveResizability value' ); }); s2t.equal(IsDetachedBuffer(ab), false, 'buffer is not detached'); var newBuffer = ArrayBufferCopyAndDetach(ab, undefined, 'FIXED-LENGTH'); s2t.equal(IsDetachedBuffer(ab), true, 'buffer is now detached'); s2t.deepEqual(new Uint8Array(newBuffer), new Uint8Array([1, 2, 3, 4]), 'new buffer has expected data'); var newSameBuffer = ArrayBufferCopyAndDetach(newBuffer, 4, 'FIXED-LENGTH'); s2t.equal(IsDetachedBuffer(newBuffer), true, 'buffer is now detached'); s2t.deepEqual(new Uint8Array(newSameBuffer), new Uint8Array([1, 2, 3, 4]), 'new buffer has expected data'); var newSmallerBuffer = ArrayBufferCopyAndDetach(newSameBuffer, 2, 'FIXED-LENGTH'); s2t.equal(IsDetachedBuffer(newSameBuffer), true, 'buffer is now detached'); s2t.deepEqual(new Uint8Array(newSmallerBuffer), new Uint8Array([1, 2]), 'new buffer has expected data'); var newLargerBuffer = ArrayBufferCopyAndDetach(newSmallerBuffer, 4, 'FIXED-LENGTH'); s2t.equal(IsDetachedBuffer(newSmallerBuffer), true, 'buffer is now detached'); s2t.deepEqual(new Uint8Array(newLargerBuffer), new Uint8Array([1, 2, 0, 0]), 'new buffer has expected data'); s2t['throws']( function () { ArrayBufferCopyAndDetach(ab, 0, 'FIXED-LENGTH'); }, TypeError, 'throws on already-detached buffer' ); s2t.test('resizables', { skip: !('resizable' in ArrayBuffer.prototype) }, function (s3t) { var rab = new ArrayBuffer(4, { maxByteLength: 64 }); assign(new Uint8Array(rab), [1, 2, 3, 4]); s3t.equal(IsDetachedBuffer(rab), false, 'buffer is not detached'); s3t.equal(rab.resizable, true, 'buffer is resizable'); var newResizableBuffer = ArrayBufferCopyAndDetach(rab, undefined, 'PRESERVE-RESIZABILITY'); s3t.equal(IsDetachedBuffer(rab), true, 'buffer is now detached'); s3t.deepEqual(new Uint8Array(newResizableBuffer), new Uint8Array([1, 2, 3, 4]), 'new buffer has expected data'); s3t.equal(newResizableBuffer.resizable, true, 'new buffer is resizable'); var newFixedBuffer = ArrayBufferCopyAndDetach(newResizableBuffer, undefined, 'FIXED-LENGTH'); s3t.equal(IsDetachedBuffer(newResizableBuffer), true, 'buffer is now detached'); s3t.deepEqual(new Uint8Array(newFixedBuffer), new Uint8Array([1, 2, 3, 4]), 'new buffer has expected data'); s3t.equal(newFixedBuffer.resizable, false, 'new buffer is not resizable'); s3t.end(); }); s2t.end(); }); st.end(); }); t.test('SharedArrayBuffers supported', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(1); st['throws']( function () { ArrayBufferCopyAndDetach(sab, undefined, 'FIXED-LENGTH'); }, TypeError, debug(sab) + ' is not a non-shared ArrayBuffer' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ArrayCreate.js000066400000000000000000000022601516525472400231240ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var $setProto = require('set-proto'); module.exports = function (t, year, ArrayCreate) { t.ok(year >= 2015, 'ES2015+'); forEach(v.notNonNegativeIntegers, function (nonIntegerNumber) { t['throws']( function () { ArrayCreate(nonIntegerNumber); }, TypeError, 'length must be an integer number >= 0' ); }); t['throws']( function () { ArrayCreate(Math.pow(2, 32)); }, RangeError, 'length must be < 2**32' ); t.deepEqual(ArrayCreate(-0), [], 'length of -0 creates an empty array'); t.deepEqual(ArrayCreate(0), [], 'length of +0 creates an empty array'); // eslint-disable-next-line no-sparse-arrays t.deepEqual(ArrayCreate(1), [,], 'length of 1 creates a sparse array of length 1'); // eslint-disable-next-line no-sparse-arrays t.deepEqual(ArrayCreate(2), [,,], 'length of 2 creates a sparse array of length 2'); t.test('proto argument', { skip: !$setProto }, function (st) { var fakeProto = { push: { toString: function () { return 'not array push'; } } }; st.equal(ArrayCreate(0, fakeProto).push, fakeProto.push, 'passing the proto argument works'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ArraySetLength.js000066400000000000000000000040601516525472400236160ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var gOPD = require('gopd'); var esV = require('../helpers/v'); module.exports = function (t, year, ArraySetLength) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.unknowns, function (nonArray) { t['throws']( function () { ArraySetLength(nonArray, { '[[Value]]': 0 }); }, TypeError, 'A: ' + debug(nonArray) + ' is not an Array' ); }); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { ArraySetLength([], primitive); }, TypeError, 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' ); }); t.test('making length nonwritable', { skip: !gOPD }, function (st) { var a = [0]; st.equal( ArraySetLength(a, { '[[Writable]]': false }), true, 'array is made non-writable' ); st.deepEqual( gOPD(a, 'length'), { configurable: false, enumerable: false, value: 1, writable: false }, 'without a value, length becomes nonwritable' ); st.equal( ArraySetLength(a, v.descriptors.value(0)), false, 'setting a lower value on a non-writable length fails' ); st.equal(a.length, 1, 'array still has a length of 1'); st.equal( ArraySetLength(a, v.descriptors.value(2)), false, 'setting a higher value on a non-writable length fails' ); st.equal(a.length, 1, 'array still has a length of 1'); st.end(); }); forEach([].concat( -1, Math.pow(2, 32), v.nonIntegerNumbers ), function (nonLength) { t['throws']( function () { ArraySetLength([], v.descriptors.value(nonLength)); }, RangeError, 'a non-integer, negative, or > (2**31 - 1) is not a valid length: ' + debug(nonLength) ); }); var arr = []; t.equal( ArraySetLength(arr, v.descriptors.value(7)), true, 'set length succeeded' ); t.equal(arr.length, 7, 'array now has a length of 0 -> 7'); t.equal( ArraySetLength(arr, v.descriptors.value(2)), true, 'set length succeeded' ); t.equal(arr.length, 2, 'array now has a length of 7 -> 2'); }; ljharb-es-abstract-babee05/test/methods/ArraySpeciesCreate.js000066400000000000000000000104101516525472400244340ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var isArray = require('../../helpers/IsArray'); var defineProperty = require('../helpers/defineProperty'); var esV = require('../helpers/v'); var hasSpecies = v.hasSymbols && Symbol.species; var getArraySubclassWithSpeciesConstructor = function getArraySubclass(speciesConstructor) { var Bar = function Bar() { var inst = []; Object.setPrototypeOf(inst, Bar.prototype); defineProperty(inst, 'constructor', { value: Bar }); return inst; }; Bar.prototype = Object.create(Array.prototype); Object.setPrototypeOf(Bar, Array); defineProperty(Bar, Symbol.species, { value: speciesConstructor }); return Bar; }; module.exports = function (t, year, ArraySpeciesCreate) { t.ok(year >= 2015, 'ES2015+'); t.test('errors', function (st) { forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { ArraySpeciesCreate([], nonNumber); }, TypeError, debug(nonNumber) + ' is not a number' ); }); st['throws']( function () { ArraySpeciesCreate([], -1); }, TypeError, '-1 is not >= 0' ); st['throws']( function () { ArraySpeciesCreate([], -Infinity); }, TypeError, '-Infinity is not >= 0' ); forEach(v.nonIntegerNumbers, function (nonInteger) { st['throws']( function () { ArraySpeciesCreate([], nonInteger); }, TypeError, debug(nonInteger) + ' is not an integer' ); }); st.end(); }); t.test('works with a non-array', function (st) { forEach(esV.unknowns, function (nonArray) { var arr = ArraySpeciesCreate(nonArray, 0); st.ok(isArray(arr), 'is an array'); st.equal(arr.length, 0, 'length is correct'); st.equal(arr.constructor, Array, 'constructor is correct'); }); st.end(); }); t.test('works with a normal array', function (st) { var len = 2; var orig = [1, 2, 3]; var arr = ArraySpeciesCreate(orig, len); st.ok(isArray(arr), 'is an array'); st.equal(arr.length, len, 'length is correct'); st.equal(arr.constructor, orig.constructor, 'constructor is correct'); st.end(); }); t.test('-0 length produces +0 length', function (st) { var len = -0; st.equal(len, -0, '-0 is negative zero'); st.notEqual(len, 0, '-0 is not positive zero'); var orig = [1, 2, 3]; var arr = ArraySpeciesCreate(orig, len); st.equal(isArray(arr), true); st.equal(arr.length, 0); st.equal(arr.constructor, orig.constructor); st.end(); }); t.test('works with species construtor', { skip: !hasSpecies }, function (st) { var sentinel = {}; var Foo = function Foo(len) { this.length = len; this.sentinel = sentinel; }; var Bar = getArraySubclassWithSpeciesConstructor(Foo); var bar = new Bar(); st.equal(isArray(bar), true, 'Bar instance is an array'); var arr = ArraySpeciesCreate(bar, 3); st.equal(arr.constructor, Foo, 'result used species constructor'); st.equal(arr.length, 3, 'length property is correct'); st.equal(arr.sentinel, sentinel, 'Foo constructor was exercised'); st.end(); }); t.test('works with null species constructor', { skip: !hasSpecies }, function (st) { var Bar = getArraySubclassWithSpeciesConstructor(null); var bar = new Bar(); st.equal(isArray(bar), true, 'Bar instance is an array'); var arr = ArraySpeciesCreate(bar, 3); st.equal(arr.constructor, Array, 'result used default constructor'); st.equal(arr.length, 3, 'length property is correct'); st.end(); }); t.test('works with undefined species constructor', { skip: !hasSpecies }, function (st) { var Bar = getArraySubclassWithSpeciesConstructor(); var bar = new Bar(); st.equal(isArray(bar), true, 'Bar instance is an array'); var arr = ArraySpeciesCreate(bar, 3); st.equal(arr.constructor, Array, 'result used default constructor'); st.equal(arr.length, 3, 'length property is correct'); st.end(); }); t.test('throws with object non-construtor species constructor', { skip: !hasSpecies }, function (st) { forEach(v.objects, function (obj) { var Bar = getArraySubclassWithSpeciesConstructor(obj); var bar = new Bar(); st.equal(isArray(bar), true, 'Bar instance is an array'); st['throws']( function () { ArraySpeciesCreate(bar, 3); }, TypeError, debug(obj) + ' is not a constructor' ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/AsyncFromSyncIteratorContinuation.js000066400000000000000000000012741516525472400275710ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, AsyncFromSyncIteratorContinuation) { t.ok(year >= 2019, 'ES2019+'); forEach(v.primitives, function (primitive) { t['throws']( function () { AsyncFromSyncIteratorContinuation(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); t['throws']( function () { AsyncFromSyncIteratorContinuation({}, null); }, SyntaxError, 'despite the spec supporting 2 args, AsyncFromSyncIteratorContinuation only takes 1' ); // TODO: test directly, instead of only implicitly via CreateAsyncFromSyncIterator }; ljharb-es-abstract-babee05/test/methods/AsyncIteratorClose.js000066400000000000000000000116731516525472400245070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var reduce = require('../../helpers/reduce'); var esV = require('../helpers/v'); module.exports = function (t, year, AsyncIteratorClose, extras) { t.ok(year >= 2018, 'ES2018+'); var NormalCompletion = extras.getAO('NormalCompletion'); var ThrowCompletion = extras.getAO('ThrowCompletion'); forEach(esV.unknowns, function (nonIteratorRecord) { t['throws']( function () { AsyncIteratorClose(nonIteratorRecord); }, TypeError, debug(nonIteratorRecord) + ' is not an Iterator Record' ); }); var iterator = { next: function next() {} }; var iteratorRecord = makeIteratorRecord(iterator); forEach(esV.unknowns, function (nonCompletionRecord) { t['throws']( function () { AsyncIteratorClose(iteratorRecord, nonCompletionRecord); }, TypeError, debug(nonCompletionRecord) + ' is not a CompletionRecord' ); }); var sentinel = {}; var completionRecord = NormalCompletion(sentinel); t.test('Promises unsupported', { skip: typeof Promise === 'function' }, function (st) { st['throws']( function () { AsyncIteratorClose(iteratorRecord, completionRecord); }, SyntaxError, 'Promises are not supported' ); st.end(); }); t.test('Promises supported', { skip: typeof Promise === 'undefined' }, function (st) { st.test('no return method', function (s2t) { var nullReturnIterator = { next: function next() {}, 'return': null }; var nullReturnIteratorRecord = makeIteratorRecord(nullReturnIterator); return Promise.all([ AsyncIteratorClose(iteratorRecord, completionRecord).then(function (result) { s2t.equal(result, completionRecord, 'returns a Promise for the original passed completion record (undefined)'); }), AsyncIteratorClose(nullReturnIteratorRecord, completionRecord).then(function (result) { s2t.equal(result, completionRecord, 'returns a Promise for the original passed completion record (null)'); }) ]); }); st.test('non-function return method', function (s2t) { return reduce( v.nonFunctions, function (prev, nonFunction) { if (nonFunction == null) { return prev; } return prev.then(function () { var badIterator = { next: function next() {}, 'return': nonFunction }; var badIteratorRecord = makeIteratorRecord(badIterator); return AsyncIteratorClose(badIteratorRecord, completionRecord).then( function (x) { throw debug(x) + '/' + debug(nonFunction); // eslint-disable-line no-throw-literal }, function (e) { s2t.comment('`.return` of ' + debug(nonFunction) + ' is not a function: ' + e); } ); }); }, Promise.resolve() ); }); st.test('function return method (returns object)', function (s2t) { var returnableIterator = { next: function next() {}, 'return': function Return() { s2t.equal(arguments.length, 0, 'no args passed to `.return`'); return {}; } }; var returnableRecord = makeIteratorRecord(returnableIterator); return AsyncIteratorClose(returnableRecord, completionRecord); }); forEach(v.primitives, function (nonObject) { st.test('function return method (returns non-object ' + debug(nonObject) + ')', function (s2t) { var returnableIterator = { next: function next() {}, 'return': function Return() { s2t.equal(arguments.length, 0, 'no args passed to `.return`'); return nonObject; } }; var returnableRecord = makeIteratorRecord(returnableIterator); return AsyncIteratorClose(returnableRecord, completionRecord).then(s2t.fail, function (e) { s2t.ok(e instanceof TypeError, 'throws on non-object return value'); }); }); }); st.test('return method throws, completion is normal', function (s2t) { var returnThrowIterator = { next: function next() {}, 'return': function Return() { s2t.equal(arguments.length, 0, 'no args passed to `.return`'); throw sentinel; } }; var returnableRecord = makeIteratorRecord(returnThrowIterator); return AsyncIteratorClose(returnableRecord, completionRecord).then(s2t.fail, function (e) { s2t.equal(e, sentinel, 'return function exception is propagated'); }); }); st.test('return method throws, completion is throw', function (s2t) { var throwCompletion = ThrowCompletion(sentinel); var returnThrowIterator = { next: function next() {}, 'return': function Return() { s2t.equal(arguments.length, 0, 'no args passed to `.return`'); throw 42; // eslint-disable-line no-throw-literal } }; var returnableRecord = makeIteratorRecord(returnThrowIterator); return AsyncIteratorClose(returnableRecord, throwCompletion).then(s2t.fail, function (e) { s2t.equal(e, sentinel, 'return function exception is overridden by throw completion value'); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/000077500000000000000000000000001516525472400215405ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/methods/BigInt/add.js000066400000000000000000000025151516525472400226310ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntAdd) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntAdd(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntAdd(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntAdd(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntAdd(BigInt(0), BigInt(0)), BigInt(0), '0n + 0n is 0n'); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal(BigIntAdd(bigint, BigInt(0)), bigint, debug(bigint) + ' + 0n adds to ' + bigint); } st.equal(BigIntAdd(bigint, BigInt(1)), bigint + BigInt(1), debug(bigint) + ' + 1n adds to ' + (bigint + BigInt(1))); st.equal(BigIntAdd(bigint, -BigInt(42)), bigint - BigInt(42), debug(bigint) + ' + -42n adds to ' + (bigint - BigInt(42))); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/bitwiseAND.js000066400000000000000000000017021516525472400240670ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntBitwiseAND) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntBitwiseAND(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntBitwiseAND(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntBitwiseAND(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntBitwiseAND(BigInt(1), BigInt(2)), BigInt(1) & BigInt(2)); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/bitwiseNOT.js000066400000000000000000000013001516525472400241170ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntBitwiseNOT) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntBitwiseNOT(nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.int32s, function (int32) { var bigInt32 = BigInt(int32); st.equal(BigIntBitwiseNOT(bigInt32), ~bigInt32, debug(bigInt32) + ' becomes ~' + debug(bigInt32)); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/bitwiseOR.js000066400000000000000000000016751516525472400240160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntBitwiseOR) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntBitwiseOR(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntBitwiseOR(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntBitwiseOR(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntBitwiseOR(BigInt(1), BigInt(2)), BigInt(1) | BigInt(2)); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/bitwiseXOR.js000066400000000000000000000017021516525472400241350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntBitwiseXOR) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntBitwiseXOR(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntBitwiseXOR(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntBitwiseXOR(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntBitwiseXOR(BigInt(1), BigInt(2)), BigInt(1) ^ BigInt(2)); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/divide.js000066400000000000000000000024131516525472400233420ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntDivide) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntDivide(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntDivide(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntDivide(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st['throws']( function () { BigIntDivide(BigInt(1), BigInt(0)); }, RangeError, 'dividing by zero throws' ); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal(BigIntDivide(bigint, bigint), BigInt(1), debug(bigint) + ' divided by itself is 1n'); st.equal(BigIntDivide(bigint, BigInt(2)), bigint / BigInt(2), debug(bigint) + ' divided by 2n is half itself'); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/equal.js000066400000000000000000000021771516525472400232140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntEqual) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntEqual(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntEqual(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntEqual(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a Number' ); }); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal(BigIntEqual(bigint, bigint), true, debug(bigint) + ' is equal to itself'); st.equal(BigIntEqual(bigint, bigint + BigInt(1)), false, debug(bigint) + ' is not equal to itself plus 1n'); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/exponentiate.js000066400000000000000000000026531516525472400246070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntExponentiate) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntExponentiate(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntExponentiate(nonBigInt, BigInt(0)); }, TypeError, 'base: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntExponentiate(BigInt(0), nonBigInt); }, TypeError, 'exponent: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st['throws']( function () { BigIntExponentiate(BigInt(1), -BigInt(1)); }, RangeError, 'negative exponent throws' ); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal(BigIntExponentiate(bigint, BigInt(0)), BigInt(1), debug(bigint) + ' ** 0n is 1n'); var square = bigint; for (var i = 0; i < Number(bigint); i += 1) { square += bigint; } st.equal(BigIntExponentiate(bigint, bigint), square, debug(bigint) + ' ** ' + debug(bigint) + ' is equal to ' + debug(square)); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/leftShift.js000066400000000000000000000023271516525472400240320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntLeftShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntLeftShift(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntLeftShift(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntLeftShift(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); forEach([].concat( 0, v.int32s ), function (int32) { var bigInt32 = BigInt(int32); forEach([1, 3, 5, 31, 32, 33], function (bits) { var bitsN = BigInt(bits); st.equal( BigIntLeftShift(bigInt32, bitsN), bigInt32 << bitsN, debug(bigInt32) + ' << ' + debug(bitsN) + ' is ' + debug(bigInt32 << bitsN) ); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/lessThan.js000066400000000000000000000025151516525472400236620ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntLessThan) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntLessThan(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntLessThan(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntLessThan(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntLessThan(BigInt(0), BigInt(0)), false, '0n < 0n is false'); forEach(v.bigints, function (bigint) { st.equal(BigIntLessThan(bigint, bigint), false, debug(bigint) + ' is not less than itself'); st.equal(BigIntLessThan(bigint, bigint + BigInt(1)), true, debug(bigint) + ' < ' + debug(bigint + BigInt(1)) + ' is true'); st.equal(BigIntLessThan(bigint + BigInt(1), bigint), false, debug(bigint + BigInt(1)) + ' < ' + debug(bigint) + ' is false'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/multiply.js000066400000000000000000000025321516525472400237570ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntMultiply) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntMultiply(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntMultiply(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntMultiply(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a Number' ); }); st.equal(BigIntMultiply(BigInt(0), BigInt(0)), BigInt(0), '0n * 0n is 0n'); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal(BigIntMultiply(bigint, BigInt(0)), BigInt(0), debug(bigint) + ' * 0n produces 0n'); st.equal(BigIntMultiply(bigint, BigInt(1)), bigint, debug(bigint) + ' * 1n produces itself'); st.equal(BigIntMultiply(bigint, -BigInt(42)), bigint * -BigInt(42), debug(bigint) + ' * -42n produces ' + (bigint - BigInt(42))); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/remainder.js000066400000000000000000000025221516525472400240450ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntRemainder) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntRemainder(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntRemainder(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntRemainder(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st['throws']( function () { BigIntRemainder(BigInt(1), BigInt(0)); }, RangeError, 'dividing by zero throws' ); forEach(v.bigints, function (bigint) { if (bigint !== BigInt(0)) { st.equal( BigIntRemainder(BigInt(0), bigint), BigInt(0), '0n % ' + debug(bigint) + ' is 0n' ); st.equal( BigIntRemainder(bigint + BigInt(1), bigint), BigInt(1), debug(bigint) + ' % ' + debug(bigint + BigInt(1)) + ' is 1n' ); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/sameValue.js000066400000000000000000000021171516525472400240210ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntSameValue) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntSameValue(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntSameValue(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntSameValue(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntSameValue(BigInt(0), BigInt(0)), true, '0n is sameValue as 0n'); forEach(v.bigints, function (bigint) { st.ok(BigIntSameValue(bigint, bigint), debug(bigint) + ' is the sameValue as itself'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/sameValueZero.js000066400000000000000000000020241516525472400246560ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntSameValueZero) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntSameValueZero(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntSameValueZero(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntSameValueZero(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); forEach(v.bigints, function (bigint) { st.ok(BigIntSameValueZero(bigint, bigint), debug(bigint) + ' is the sameValueZero as itself'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/signedRightShift.js000066400000000000000000000023721516525472400253470ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntSignedRightShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntSignedRightShift(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntSignedRightShift(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntSignedRightShift(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); forEach([].concat( 0, v.int32s ), function (int32) { var bigInt32 = BigInt(int32); forEach([1, 3, 5, 31, 32, 33], function (bits) { var bitsN = BigInt(bits); st.equal( BigIntSignedRightShift(bigInt32, bitsN), bigInt32 >> bitsN, debug(bigInt32) + ' >> ' + debug(bitsN) + ' is ' + debug(bigInt32 >> bitsN) ); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/subtract.js000066400000000000000000000025211516525472400237250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntSubtract) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntSubtract(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntSubtract(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntSubtract(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); st.equal(BigIntSubtract(BigInt(0), BigInt(0)), BigInt(0), '0n - 0n is 0n'); forEach(v.bigints, function (bigint) { st.equal(BigIntSubtract(bigint, BigInt(0)), bigint, debug(bigint) + ' - 0n produces ' + bigint); st.equal(BigIntSubtract(bigint, BigInt(1)), bigint - BigInt(1), debug(bigint) + ' - 1n produces ' + (bigint + BigInt(1))); st.equal(BigIntSubtract(bigint, BigInt(42)), bigint - BigInt(42), debug(bigint) + ' - 42n produces ' + (bigint - BigInt(42))); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/toString.js000066400000000000000000000037531516525472400237170ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 2020, 'ES2020+'); var BigIntToString = year >= 2023 ? actual : function toString(x) { return actual(x); }; forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntToString(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.bigints, function (bigint) { st.equal(BigIntToString(bigint, 10), String(bigint), debug(bigint) + ' stringifies to ' + bigint); }); if (year >= 2023) { forEach([].concat( v.nonIntegerNumbers, 0, 1, 37 ), function (nonIntegerNumber) { st['throws']( function () { BigIntToString(BigInt(0), nonIntegerNumber); }, TypeError, debug(nonIntegerNumber) + ' is not an integer [2, 36]' ); }); forEach([ [37, 2, '100101'], [37, 3, '1101'], [37, 4, '211'], [37, 5, '122'], [37, 6, '101'], [37, 7, '52'], [37, 8, '45'], [37, 9, '41'], [37, 10, '37'], [37, 11, '34'], [37, 12, '31'], [37, 13, '2b'], [37, 14, '29'], [37, 15, '27'], [37, 16, '25'], [37, 17, '23'], [37, 18, '21'], [37, 19, '1i'], [37, 20, '1h'], [37, 21, '1g'], [37, 22, '1f'], [37, 23, '1e'], [37, 24, '1d'], [37, 25, '1c'], [37, 26, '1b'], [37, 27, '1a'], [37, 28, '19'], [37, 29, '18'], [37, 30, '17'], [37, 31, '16'], [37, 32, '15'], [37, 33, '14'], [37, 34, '13'], [37, 35, '12'], [37, 36, '11'] ], function (testCase) { var num = BigInt(testCase[0]); st.equal( BigIntToString(num, testCase[1]), testCase[2], debug(num) + ' stringifies to ' + debug(testCase[2]) + ' in base ' + debug(testCase[1]) ); }); } st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/unaryMinus.js000066400000000000000000000012321516525472400242460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntUnaryMinus) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntUnaryMinus(nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.bigints, function (bigint) { st.equal(BigIntUnaryMinus(bigint), -bigint, debug(bigint) + ' produces -' + debug(bigint)); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigInt/unsignedRightShift.js000066400000000000000000000023721516525472400257120ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../../helpers/v'); module.exports = function (t, year, BigIntUnsignedRightShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { BigIntUnsignedRightShift(nonBigInt, nonBigInt); }, TypeError, debug(nonBigInt) + ' is not a BigInt' ); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { forEach(v.nonBigInts, function (nonBigInt) { st['throws']( function () { BigIntUnsignedRightShift(nonBigInt, BigInt(0)); }, TypeError, 'x: ' + debug(nonBigInt) + ' is not a BigInt' ); st['throws']( function () { BigIntUnsignedRightShift(BigInt(0), nonBigInt); }, TypeError, 'y: ' + debug(nonBigInt) + ' is not a BigInt' ); }); forEach([].concat( 0, v.int32s ), function (int32) { var bigInt32 = BigInt(int32); forEach([1, 3, 5, 31, 32, 33], function (bits) { var bitsN = BigInt(bits); st['throws']( function () { BigIntUnsignedRightShift(bigInt32, bitsN); }, TypeError, debug(bigInt32) + ' >>> ' + debug(bitsN) + ' throws' ); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BigIntBitwiseOp.js000066400000000000000000000021471516525472400237300ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, BigIntBitwiseOp) { t.ok(year >= 2020, 'ES2020+'); forEach(v.numbers, function (number) { t['throws']( function () { BigIntBitwiseOp('&', number, number); }, TypeError, debug(number) + ' is not a BigInt' ); }); t.test('BigInt support', { skip: !esV.hasBigInts }, function (st) { st['throws']( function () { BigIntBitwiseOp('&', 1, BigInt(1)); }, TypeError, 'x: 1 is not a BigInt' ); st['throws']( function () { BigIntBitwiseOp('&', BigInt(1), 1); }, TypeError, 'y: 1 is not a BigInt' ); st['throws']( function () { BigIntBitwiseOp('invalid', BigInt(0), BigInt(0)); }, TypeError, 'throws with an invalid op' ); st.equal(BigIntBitwiseOp('&', BigInt(1), BigInt(2)), BigInt(1) & BigInt(2)); st.equal(BigIntBitwiseOp('|', BigInt(1), BigInt(2)), BigInt(1) | BigInt(2)); st.equal(BigIntBitwiseOp('^', BigInt(1), BigInt(2)), BigInt(1) ^ BigInt(2)); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/BinaryAnd.js000066400000000000000000000010521516525472400225670ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, BinaryAnd) { t.ok(year >= 2020, 'ES2020+'); t.equal(BinaryAnd(0, 0), 0); t.equal(BinaryAnd(0, 1), 0); t.equal(BinaryAnd(1, 0), 0); t.equal(BinaryAnd(1, 1), 1); forEach([].concat( v.nonIntegerNumbers, v.nonNumberPrimitives, v.objects ), function (nonBit) { t['throws']( function () { BinaryAnd(0, nonBit); }, TypeError ); t['throws']( function () { BinaryAnd(nonBit, 1); }, TypeError ); }); }; ljharb-es-abstract-babee05/test/methods/BinaryOr.js000066400000000000000000000010431516525472400224450ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, BinaryOr) { t.ok(year >= 2020, 'ES2020+'); t.equal(BinaryOr(0, 0), 0); t.equal(BinaryOr(0, 1), 1); t.equal(BinaryOr(1, 0), 1); t.equal(BinaryOr(1, 1), 1); forEach([].concat( v.nonIntegerNumbers, v.nonNumberPrimitives, v.objects ), function (nonBit) { t['throws']( function () { BinaryOr(0, nonBit); }, TypeError ); t['throws']( function () { BinaryOr(nonBit, 1); }, TypeError ); }); }; ljharb-es-abstract-babee05/test/methods/BinaryXor.js000066400000000000000000000010521516525472400226350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, BinaryXor) { t.ok(year >= 2020, 'ES2020+'); t.equal(BinaryXor(0, 0), 0); t.equal(BinaryXor(0, 1), 1); t.equal(BinaryXor(1, 0), 1); t.equal(BinaryXor(1, 1), 0); forEach([].concat( v.nonIntegerNumbers, v.nonNumberPrimitives, v.objects ), function (nonBit) { t['throws']( function () { BinaryXor(0, nonBit); }, TypeError ); t['throws']( function () { BinaryXor(nonBit, 1); }, TypeError ); }); }; ljharb-es-abstract-babee05/test/methods/ByteListBitwiseOp.js000066400000000000000000000024371516525472400243150ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ByteListBitwiseOp) { t.ok(year >= 2021, 'ES2021+'); t['throws']( function () { ByteListBitwiseOp('+', [], []); }, TypeError, 'op must be &, ^, or |' ); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { ByteListBitwiseOp('&', nonArray); }, TypeError, 'xBytes: ' + debug(nonArray) + ' is not a sequence of byte values' ); t['throws']( function () { ByteListBitwiseOp('&', [], nonArray); }, TypeError, 'yBytes: ' + debug(nonArray) + ' is not a sequence of byte values' ); }); t['throws']( function () { ByteListBitwiseOp('&', [0], [0, 0]); }, TypeError, 'byte sequences must be the same length' ); forEach([1.5, -1, 256], function (nonByte) { t['throws']( function () { ByteListBitwiseOp('&', [nonByte], [1]); }, TypeError, debug(nonByte) + ' is not a byte value' ); }); for (var i = 0; i <= 255; i += 1) { var j = i === 0 ? 1 : i - 1; t.deepEqual(ByteListBitwiseOp('&', [i], [j]), [i & j], i + ' & ' + j); t.deepEqual(ByteListBitwiseOp('^', [i], [j]), [i ^ j], i + ' ^ ' + j); t.deepEqual(ByteListBitwiseOp('|', [i], [j]), [i | j], i + ' | ' + j); } }; ljharb-es-abstract-babee05/test/methods/ByteListEqual.js000066400000000000000000000021201516525472400234440ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ByteListEqual) { t.ok(year >= 2021, 'ES2021+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { ByteListEqual(nonArray); }, TypeError, 'xBytes: ' + debug(nonArray) + ' is not a sequence of byte values' ); t['throws']( function () { ByteListEqual([], nonArray); }, TypeError, 'yBytes: ' + debug(nonArray) + ' is not a sequence of byte values' ); }); t.equal(ByteListEqual([0], [0, 0]), false, 'two sequences of different length are not equal'); forEach([1.5, -1, 256], function (nonByte) { t['throws']( function () { ByteListEqual([nonByte], [1]); }, TypeError, debug(nonByte) + ' is not a byte value' ); }); for (var i = 0; i <= 255; i += 1) { t.equal(ByteListEqual([i], [i]), true, 'two equal sequences of ' + i + ' are equal'); t.equal(ByteListEqual([i, i === 0 ? 1 : 0], [i === 0 ? 1 : 0, i]), false, 'two inequal sequences of ' + i + ' are not equal'); } }; ljharb-es-abstract-babee05/test/methods/Call.js000066400000000000000000000031241516525472400215750ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, Call) { t.ok(year >= 5, 'ES5+'); var receiver = {}; var notFuncs = [].concat( v.nonFunctions, /a/g, new RegExp('a', 'g') ); forEach(notFuncs, function (notFunc) { t['throws']( function () { return Call(notFunc, receiver); }, TypeError, debug(notFunc) + ' (' + typeof notFunc + ') is not callable' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { Call(Function.prototype, null, nonArray); }, TypeError, debug(nonArray) + ' is not an array' ); }); Call( function (a, b) { t.equal(this, receiver, 'context matches expected'); t.deepEqual([a, b], [1, 2], 'named args are correct'); t.equal(arguments.length, 3, 'extra argument was passed'); t.equal(arguments[2], 3, 'extra argument was correct'); }, receiver, [1, 2, 3] ); t.test('Call doesn’t use func.apply', function (st) { st.plan(4); var bad = function (a, b) { st.equal(this, receiver, 'context matches expected'); st.deepEqual([a, b], [1, 2], 'named args are correct'); st.equal(arguments.length, 3, 'extra argument was passed'); st.equal(arguments[2], 3, 'extra argument was correct'); }; defineProperty(bad, 'apply', { enumerable: true, configurable: true, value: function () { st.fail('bad.apply shouldn’t get called'); }, writable: true }); Call(bad, receiver, [1, 2, 3]); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CanBeHeldWeakly.js000066400000000000000000000015141516525472400236450ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CanBeHeldWeakly) { t.ok(year >= 2023, 'ES2023+'); forEach(v.nonSymbolPrimitives, function (nonSymbolPrimitive) { t.equal(CanBeHeldWeakly(nonSymbolPrimitive), false, debug(nonSymbolPrimitive) + ' cannot be held weakly'); }); forEach(v.objects, function (object) { t.equal( CanBeHeldWeakly(object), true, debug(object) + ' can be held weakly' ); }); forEach(v.unregisteredSymbols, function (symbol) { t.equal( CanBeHeldWeakly(symbol), true, debug(symbol) + ' can be held weakly' ); }); forEach(v.registeredSymbols, function (symbol) { t.equal( CanBeHeldWeakly(symbol), false, debug(symbol) + ' can not be held weakly' ); }); }; ljharb-es-abstract-babee05/test/methods/CanonicalNumericIndexString.js000066400000000000000000000013161516525472400263140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CanonicalNumericIndexString) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return CanonicalNumericIndexString(notString); }, TypeError, debug(notString) + ' is not a string' ); }); t.equal(CanonicalNumericIndexString('-0'), -0, '"-0" returns -0'); for (var i = -50; i < 50; i += 10) { t.equal(i, CanonicalNumericIndexString(String(i)), '"' + i + '" returns ' + i); t.equal(undefined, CanonicalNumericIndexString(String(i) + 'a'), '"' + i + 'a" returns undefined'); } }; ljharb-es-abstract-babee05/test/methods/Canonicalize.js000066400000000000000000000051431516525472400233240ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var keys = require('object-keys'); var caseFolding = require('../../helpers/caseFolding.json'); var esV = require('../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 5, 'ES5+'); var Canonicalize = year >= 2023 ? actual : year >= 2015 ? function Canonicalize(rer, ch) { return actual(ch, rer['[[IgnoreCase]]'], rer['[[Unicode]]']); } : function Canonicalize(rer, ch) { return actual(ch, rer['[[IgnoreCase]]']); }; var rer = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 1 }; forEach(v.nonStrings, function (nonString) { t['throws']( function () { Canonicalize(rer, nonString); }, TypeError, 'ch: ' + debug(nonString) + ' is not a String' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { Canonicalize(assign({}, rer, { '[[IgnoreCase]]': nonBoolean }), ''); }, TypeError, 'IgnoreCase: ' + debug(nonBoolean) + ' is not a Boolean' ); if (year >= 2015) { t['throws']( function () { Canonicalize(assign({}, rer, { '[[Unicode]]': nonBoolean }), ''); }, TypeError, 'Unicode: ' + debug(nonBoolean) + ' is not a Boolean' ); } }); t.equal(Canonicalize(rer, esV.poo.leading), esV.poo.leading, 'when IgnoreCase is false, ch is returned'); t.equal(Canonicalize(assign({}, rer, { '[[IgnoreCase]]': true }), 'ƒ'), 'Ƒ', 'when IgnoreCase is true, ch is canonicalized'); if (year >= 2015) { forEach(keys(caseFolding.C), function (input) { var output = caseFolding.C[input]; t.equal( Canonicalize(assign({}, rer, { '[[Unicode]]': true }), input), input, 'C mapping, IgnoreCase false: ' + debug(input) + ' canonicalizes to ' + debug(input) ); t.equal( Canonicalize(assign({}, rer, { '[[IgnoreCase]]': true, '[[Unicode]]': true }), input), output, 'C mapping, IgnoreCase true: ' + debug(input) + ' canonicalizes to ' + debug(output) ); }); forEach(keys(caseFolding.S), function (input) { var output = caseFolding.S[input]; t.equal( Canonicalize(assign({}, rer, { '[[Unicode]]': true }), input), input, 'S mapping, IgnoreCase false: ' + debug(input) + ' canonicalizes to ' + debug(input) ); t.equal( Canonicalize(assign({}, rer, { '[[IgnoreCase]]': true, '[[Unicode]]': true }), input), output, 'S mapping, IgnoreCase true: ' + debug(input) + ' canonicalizes to ' + debug(output) ); }); } }; ljharb-es-abstract-babee05/test/methods/CanonicalizeKeyedCollectionKey.js000066400000000000000000000010061516525472400267650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, CanonicalizeKeyedCollectionKey) { t.equal(CanonicalizeKeyedCollectionKey(0), 0, '+0 yields +0'); t.equal(CanonicalizeKeyedCollectionKey(-0), 0, '-0 yields +0'); forEach(v.primitives.concat(v.objects), function (nonZero) { if (nonZero !== 0) { t.equal(CanonicalizeKeyedCollectionKey(nonZero), nonZero, debug(nonZero) + ' is itself'); } }); }; ljharb-es-abstract-babee05/test/methods/CharacterComplement.js000066400000000000000000000035441516525472400246500ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var callBind = require('call-bind'); var CharSet = require('../../helpers/CharSet'); var esV = require('../helpers/v'); module.exports = function (t, year, CharacterComplement) { t.ok(year >= 2024, 'ES2024+'); var nonUnicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 0 }; var unicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': true, '[[CapturingGroupsCount]]': 0 }; forEach(esV.unknowns, function (non) { t['throws']( function () { CharacterComplement(non, new CharSet.CharSet(function () {}, function () {})); }, TypeError, debug(non) + ' is not a Regular Expression Record' ); }); forEach(esV.unknowns, function (non) { t['throws']( function () { CharacterComplement(nonUnicode, non); }, TypeError, debug(non) + ' is not a CharSet' ); }); var A = CharSet.getCodePoints(); var lowercaseOnly = new CharSet.CharSet( function (x) { return x.toLowerCase() === x; }, function (emit) { var test = callBind(this.test, this); A.yield(function (x) { if (test(x)) { emit(x); } }); } ); var nuCC = CharacterComplement(nonUnicode, lowercaseOnly); var uCC = CharacterComplement(unicode, lowercaseOnly); t.notEqual(A.count(), nuCC.count(), 'non-unicode: nonzero characters filtered out'); t.notEqual(A.count(), uCC.count(), 'unicode: nonzero characters filtered out'); t.ok(uCC.count() >= nuCC.count(), 'unicode is a subset of non-unicode ' + uCC.count() + ' >= ' + nuCC.count()); t.notOk(nuCC.test('a'), 'non-unicode: lowercase a'); t.notOk(nuCC.test('A'), 'non-unicode: uppercase a'); t.notOk(uCC.test('a'), 'unicode: lowercase a'); t.ok(uCC.test('A'), 'unicode: uppercase a'); }; ljharb-es-abstract-babee05/test/methods/CharacterRange.js000066400000000000000000000035721516525472400236020ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var CharSet = require('../../helpers/CharSet'); module.exports = function (t, year, CharacterRange) { t.ok(year >= 2015, 'ES2015+'); forEach(['', 'abc', [], ['a', 'b', 'c']], function (notOne) { t['throws']( function () { CharacterRange(CharSet.from([notOne]), CharSet.from(['a'])); }, TypeError, debug(notOne) + ' as first arg does not have 1 item' ); t['throws']( function () { CharacterRange(CharSet.from(['a']), CharSet.from([notOne])); }, TypeError, debug(notOne) + ' as second arg does not have 1 item' ); t['throws']( function () { CharacterRange(CharSet.from([notOne]), CharSet.from([notOne])); }, TypeError, debug(notOne) + ' as both args do not have 1 item' ); if (year < 2025) { t['throws']( function () { CharacterRange(notOne, 'a'); }, TypeError, debug(notOne) + ' as first arg does not have 1 item' ); t['throws']( function () { CharacterRange('a', notOne); }, TypeError, debug(notOne) + ' as second arg does not have 1 item' ); t['throws']( function () { CharacterRange(notOne, notOne); }, TypeError, debug(notOne) + ' as both args do not have 1 item' ); } }); t['throws']( function () { CharacterRange(CharSet.from(['b']), CharSet.from(['a'])); }, TypeError, 'a backwards range throws' ); t.deepEqual( CharacterRange(CharSet.from(['a']), CharSet.from(['b'])), ['a', 'b'] ); t.deepEqual( CharacterRange(CharSet.from(['Z']), CharSet.from(['a'])), ['Z', '[', '\\', ']', '^', '_', '`', 'a'] ); if (year < 2025) { t['throws']( function () { CharacterRange('b', 'a'); }, TypeError, 'a backwards range throws' ); t.deepEqual( CharacterRange('a', 'b'), ['a', 'b'] ); t.deepEqual( CharacterRange('Z', 'a'), ['Z', '[', '\\', ']', '^', '_', '`', 'a'] ); } }; ljharb-es-abstract-babee05/test/methods/CheckObjectCoercible.js000066400000000000000000000012131516525472400246730ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, CheckObjectCoercible) { t.equal(year, 5, 'CheckObjectCoercible -> RequireObjectCoercible in ES6'); t['throws'](function () { return CheckObjectCoercible(undefined); }, TypeError, 'undefined throws'); t['throws'](function () { return CheckObjectCoercible(null); }, TypeError, 'null throws'); forEach([].concat( v.objects, v.nonNullPrimitives ), function (value) { t.doesNotThrow(function () { return CheckObjectCoercible(value); }, debug(value) + ' does not throw'); }); }; ljharb-es-abstract-babee05/test/methods/ClearKeptObjects.js000066400000000000000000000002471516525472400241110ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, ClearKeptObjects) { t.ok(year >= 2021, 'ES2021+'); t.doesNotThrow(ClearKeptObjects, 'appears to be a no-op'); }; ljharb-es-abstract-babee05/test/methods/CloneArrayBuffer.js000066400000000000000000000046241516525472400241210ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, CloneArrayBuffer, extras) { t.ok(year >= 2021, 'ES2021+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(esV.unknowns, function (nonArrayBuffer) { t['throws']( function () { CloneArrayBuffer(nonArrayBuffer, 0, 0, Object); }, TypeError, debug(nonArrayBuffer) + ' is not an ArrayBuffer' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var emptyBuffer = new ArrayBuffer(0); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { st['throws']( function () { CloneArrayBuffer(emptyBuffer, notNonNegativeInteger, 0, ArrayBuffer); }, TypeError, 'srcByteOffset: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); st['throws']( function () { CloneArrayBuffer(emptyBuffer, 0, notNonNegativeInteger, ArrayBuffer); }, TypeError, 'srcLength: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); }); // node < 6 lacks Reflect.construct, so `v.nonConstructorFunctions` can't be detected forEach([].concat( v.nonFunctions, typeof Reflect === 'object' ? v.nonConstructorFunctions : [] ), function (nonConstructor) { st['throws']( function () { CloneArrayBuffer(emptyBuffer, 0, 0, nonConstructor); }, TypeError, debug(nonConstructor) + ' is not a constructor' ); }); var a = new ArrayBuffer(8); var arrA = new Uint8Array(a); var eightInts = [1, 2, 3, 4, 5, 6, 7, 8]; assign(arrA, eightInts); st.deepEqual(arrA, new Uint8Array(eightInts), 'initial buffer setup is correct'); var b = CloneArrayBuffer(a, 1, 4, ArrayBuffer); st.notEqual(b, a, 'cloned buffer is !== original buffer'); var arrB = new Uint8Array(b); st.deepEqual( arrB, new Uint8Array([2, 3, 4, 5]), 'cloned buffer follows the source byte offset and length' ); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var buffer = new ArrayBuffer(8); s2t.equal(DetachArrayBuffer(buffer), null, 'detaching returns null'); s2t['throws']( function () { CloneArrayBuffer(buffer, 0, 0, ArrayBuffer); }, TypeError, 'detached buffers throw' ); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CodePointAt.js000066400000000000000000000157251516525472400231050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, CodePointAt) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { CodePointAt(nonString, 0); }, TypeError, debug(nonString) + ' is not a String' ); }); t['throws']( function () { CodePointAt('abc', -1); }, TypeError, 'requires an index >= 0' ); t['throws']( function () { CodePointAt('abc', 3); }, TypeError, 'requires an index < string length' ); t.deepEqual(CodePointAt('abc', 0), { '[[CodePoint]]': 'a', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt('abc', 1), { '[[CodePoint]]': 'b', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt('abc', 2), { '[[CodePoint]]': 'c', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); var strWithHalfPoo = 'a' + esV.poo.leading + 'c'; var strWithWholePoo = 'a' + esV.poo.whole + 'd'; t.deepEqual(CodePointAt(strWithHalfPoo, 0), { '[[CodePoint]]': 'a', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt(strWithHalfPoo, 1), { '[[CodePoint]]': esV.poo.leading, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }); t.deepEqual(CodePointAt(strWithHalfPoo, 2), { '[[CodePoint]]': 'c', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt(strWithWholePoo, 0), { '[[CodePoint]]': 'a', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt(strWithWholePoo, 1), { '[[CodePoint]]': esV.poo.whole, '[[CodeUnitCount]]': 2, '[[IsUnpairedSurrogate]]': false }); t.deepEqual(CodePointAt(strWithWholePoo, 2), { '[[CodePoint]]': esV.poo.trailing, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }); t.deepEqual(CodePointAt(strWithWholePoo, 3), { '[[CodePoint]]': 'd', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': false }); /* eslint operator-linebreak: [2, before] */ t.test('test262: test/built-ins/RegExp/escape/escaped-surrogates', function (st) { // Specific surrogate points st.deepEqual( CodePointAt('\uD800', 0), { '[[CodePoint]]': '\ud800', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'High surrogate \\uD800 yields 0xD800' ); st.deepEqual( CodePointAt('\uDBFF', 0), { '[[CodePoint]]': '\udbff', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'High surrogate \\uDBFF yields 0xDBFF' ); st.deepEqual( CodePointAt('\uDC00', 0), { '[[CodePoint]]': '\udc00', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'Low surrogate \\uDC00 yields 0xDC00' ); st.deepEqual( CodePointAt('\uDFFF', 0), { '[[CodePoint]]': '\udfff', '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'Low surrogate \\uDFFF yields 0xDFFF' ); // Leading Surrogates var highSurrogates = '\uD800\uD801\uD802\uD803\uD804\uD805\uD806\uD807\uD808\uD809\uD80A\uD80B\uD80C\uD80D\uD80E\uD80F' + '\uD810\uD811\uD812\uD813\uD814\uD815\uD816\uD817\uD818\uD819\uD81A\uD81B\uD81C\uD81D\uD81E\uD81F' + '\uD820\uD821\uD822\uD823\uD824\uD825\uD826\uD827\uD828\uD829\uD82A\uD82B\uD82C\uD82D\uD82E\uD82F' + '\uD830\uD831\uD832\uD833\uD834\uD835\uD836\uD837\uD838\uD839\uD83A\uD83B\uD83C\uD83D\uD83E\uD83F' + '\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847\uD848\uD849\uD84A\uD84B\uD84C\uD84D\uD84E\uD84F' + '\uD850\uD851\uD852\uD853\uD854\uD855\uD856\uD857\uD858\uD859\uD85A\uD85B\uD85C\uD85D\uD85E\uD85F' + '\uD860\uD861\uD862\uD863\uD864\uD865\uD866\uD867\uD868\uD869\uD86A\uD86B\uD86C\uD86D\uD86E\uD86F' + '\uD870\uD871\uD872\uD873\uD874\uD875\uD876\uD877\uD878\uD879\uD87A\uD87B\uD87C\uD87D\uD87E\uD87F' + '\uD880\uD881\uD882\uD883\uD884\uD885\uD886\uD887\uD888\uD889\uD88A\uD88B\uD88C\uD88D\uD88E\uD88F' + '\uD890\uD891\uD892\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A\uD89B\uD89C\uD89D\uD89E\uD89F' + '\uD8A0\uD8A1\uD8A2\uD8A3\uD8A4\uD8A5\uD8A6\uD8A7\uD8A8\uD8A9\uD8AA\uD8AB\uD8AC\uD8AD\uD8AE\uD8AF' + '\uD8B0\uD8B1\uD8B2\uD8B3\uD8B4\uD8B5\uD8B6\uD8B7\uD8B8\uD8B9\uD8BA\uD8BB\uD8BC\uD8BD\uD8BE\uD8BF' + '\uD8C0\uD8C1\uD8C2\uD8C3\uD8C4\uD8C5\uD8C6\uD8C7\uD8C8\uD8C9\uD8CA\uD8CB\uD8CC\uD8CD\uD8CE\uD8CF' + '\uD8D0\uD8D1\uD8D2\uD8D3\uD8D4\uD8D5\uD8D6\uD8D7\uD8D8\uD8D9\uD8DA\uD8DB\uD8DC\uD8DD\uD8DE\uD8DF' + '\uD8E0\uD8E1\uD8E2\uD8E3\uD8E4\uD8E5\uD8E6\uD8E7\uD8E8\uD8E9\uD8EA\uD8EB\uD8EC\uD8ED\uD8EE\uD8EF' + '\uD8F0\uD8F1\uD8F2\uD8F3\uD8F4\uD8F5\uD8F6\uD8F7\uD8F8\uD8F9\uD8FA\uD8FB\uD8FC\uD8FD\uD8FE\uD8FF'; forEach(highSurrogates, function (c) { var expected = '\\u' + c.charCodeAt(0).toString(16); st.deepEqual( CodePointAt(c, 0), { '[[CodePoint]]': c, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'High surrogate ' + c + ' (' + expected + ') is correctly turned into a record' ); }); // Trailing Surrogates var lowSurrogates = '\uDC00\uDC01\uDC02\uDC03\uDC04\uDC05\uDC06\uDC07\uDC08\uDC09\uDC0A\uDC0B\uDC0C\uDC0D\uDC0E\uDC0F' + '\uDC10\uDC11\uDC12\uDC13\uDC14\uDC15\uDC16\uDC17\uDC18\uDC19\uDC1A\uDC1B\uDC1C\uDC1D\uDC1E\uDC1F' + '\uDC20\uDC21\uDC22\uDC23\uDC24\uDC25\uDC26\uDC27\uDC28\uDC29\uDC2A\uDC2B\uDC2C\uDC2D\uDC2E\uDC2F' + '\uDC30\uDC31\uDC32\uDC33\uDC34\uDC35\uDC36\uDC37\uDC38\uDC39\uDC3A\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F' + '\uDC40\uDC41\uDC42\uDC43\uDC44\uDC45\uDC46\uDC47\uDC48\uDC49\uDC4A\uDC4B\uDC4C\uDC4D\uDC4E\uDC4F' + '\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56\uDC57\uDC58\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\uDC5E\uDC5F' + '\uDC60\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68\uDC69\uDC6A\uDC6B\uDC6C\uDC6D\uDC6E\uDC6F' + '\uDC70\uDC71\uDC72\uDC73\uDC74\uDC75\uDC76\uDC77\uDC78\uDC79\uDC7A\uDC7B\uDC7C\uDC7D\uDC7E\uDC7F' + '\uDC80\uDC81\uDC82\uDC83\uDC84\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uDC8B\uDC8C\uDC8D\uDC8E\uDC8F' + '\uDC90\uDC91\uDC92\uDC93\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B\uDC9C\uDC9D\uDC9E\uDC9F' + '\uDCA0\uDCA1\uDCA2\uDCA3\uDCA4\uDCA5\uDCA6\uDCA7\uDCA8\uDCA9\uDCAA\uDCAB\uDCAC\uDCAD\uDCAE\uDCAF' + '\uDCB0\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF' + '\uDCC0\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8\uDCC9\uDCCA\uDCCB\uDCCC\uDCCD\uDCCE\uDCCF' + '\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC\uDCDD\uDCDE\uDCDF' + '\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4\uDCE5\uDCE6\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE\uDCEF' + '\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\uDCF6\uDCF7\uDCF8\uDCF9\uDCFA\uDCFB\uDCFC\uDCFD\uDCFE\uDCFF'; forEach(lowSurrogates, function (c) { var expected = '\\u' + c.charCodeAt(0).toString(16); st.deepEqual( CodePointAt(c, 0), { '[[CodePoint]]': c, '[[CodeUnitCount]]': 1, '[[IsUnpairedSurrogate]]': true }, 'High surrogate ' + c + ' (' + expected + ') is correctly turned into a record' ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CodePointsToString.js000066400000000000000000000014241516525472400244640ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, CodePointsToString) { t.ok(year >= 2021, 'ES2021+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { CodePointsToString(nonArray); }, TypeError, debug(nonArray) + ' is not an Array of Code Points' ); }); forEach([].concat( v.notNonNegativeIntegers, 0x10FFFF + 1 ), function (nonCodePoint) { t['throws']( function () { CodePointsToString([nonCodePoint]); }, TypeError, debug(nonCodePoint) + ' is not a Code Point' ); }); t.equal(CodePointsToString([0xD83D, 0xDCA9]), esV.poo.whole, 'code points are converted to a string'); }; ljharb-es-abstract-babee05/test/methods/CompareArrayElements.js000066400000000000000000000031531516525472400250060ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CompareArrayElements) { t.ok(year >= 2023, 'ES2023+'); forEach(v.nonFunctions, function (nonFunction) { if (typeof nonFunction !== 'undefined') { t['throws']( function () { CompareArrayElements(0, 0, nonFunction); }, TypeError, debug(nonFunction) + ' is not a function or undefined' ); } }); t.equal(CompareArrayElements(), 0, 'both absent yields 0'); t.equal(CompareArrayElements(undefined, undefined), 0, 'both undefined yields 0'); t.equal(CompareArrayElements(undefined, 1), 1, 'x of undefined yields 1'); t.equal(CompareArrayElements(1, undefined), -1, 'y of undefined yields -1'); t.equal(CompareArrayElements(+0, +0), 0, '+0 == +0'); t.equal(CompareArrayElements(+0, -0), 0, '+0 == -0'); t.equal(CompareArrayElements(-0, +0), 0, '-0 == +0'); t.equal(CompareArrayElements(1, 1), 0, '1 == 1'); t.equal(CompareArrayElements(1, 2), -1, '1 < 2'); t.equal(CompareArrayElements(2, 1), 1, '2 > 1'); var xSentinel = {}; var ySentinel = {}; t.equal( CompareArrayElements(xSentinel, ySentinel, function (x, y) { t.equal(this, undefined, 'receiver is undefined'); t.equal(x, xSentinel, 'sentinel x value received'); t.equal(y, ySentinel, 'sentinel y value received'); return { valueOf: function () { return 42; } }; }), 42, 'custom comparator returns number-coerced result' ); t.equal( CompareArrayElements(xSentinel, ySentinel, function () { return NaN; }), 0, 'custom comparator returning NaN yields 0' ); }; ljharb-es-abstract-babee05/test/methods/CompareTypedArrayElements.js000066400000000000000000000041121516525472400260100ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var safeBigInt = require('safe-bigint'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); var twoSixtyFour = safeBigInt && safeBigInt(Math.pow(2, 64)); module.exports = function (t, year, CompareTypedArrayElements) { t.ok(year >= 2023, 'ES2023+'); t['throws']( function () { CompareTypedArrayElements(); }, TypeError, 'no arguments throws a TypeError' ); t['throws']( function () { CompareTypedArrayElements(1, 'a'); }, TypeError, 'one String argument throws a TypeError' ); if (esV.hasBigInts) { t['throws']( function () { CompareTypedArrayElements(1, twoSixtyFour); }, TypeError, 'one Number and other BigInt argument throws a TypeError' ); } forEach(v.nonFunctions, function (nonFunction) { if (typeof nonFunction !== 'undefined') { t['throws']( function () { CompareTypedArrayElements(0, 0, nonFunction); }, TypeError, debug(nonFunction) + ' is not a function or undefined' ); } }); t.equal(CompareTypedArrayElements(1, 1, undefined), 0, '1 == 1'); t.equal(CompareTypedArrayElements(0, 1, undefined), -1, '0 < 1'); t.equal(CompareTypedArrayElements(1, 0, undefined), 1, '1 > 0'); t.equal(CompareTypedArrayElements(NaN, NaN, undefined), 0, 'NaN == NaN'); t.equal(CompareTypedArrayElements(NaN, 0, undefined), 1, 'NaN > 0'); t.equal(CompareTypedArrayElements(0, NaN, undefined), -1, '0 > NaN'); t.equal(CompareTypedArrayElements(0, -0, undefined), 1, '0 > -0'); t.equal(CompareTypedArrayElements(-0, 0, undefined), -1, '-0 < 0'); t.equal(CompareTypedArrayElements(-0, -0, undefined), 0, '-0 == -0'); var compareFn = function compareFn(x, y) { t.equal(this, undefined, 'receiver is undefined'); t.equal(x, 0, 'sentinel x value received'); t.equal(y, 1, 'sentinel y value received'); return -Infinity; }; t.equal(CompareTypedArrayElements(0, 1, compareFn), -Infinity, 'comparefn return is passed through'); t.equal(CompareTypedArrayElements(0, 1, function () { return NaN; }), 0, 'comparefn returning NaN yields +0'); }; ljharb-es-abstract-babee05/test/methods/CompletePropertyDescriptor.js000066400000000000000000000033741516525472400263050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CompletePropertyDescriptor) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { CompletePropertyDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor' ); }); var generic = v.genericDescriptor(); t.deepEqual( CompletePropertyDescriptor(generic), { '[[Configurable]]': !!generic['[[Configurable]]'], '[[Enumerable]]': !!generic['[[Enumerable]]'], '[[Value]]': undefined, '[[Writable]]': false }, 'completes a Generic Descriptor' ); var data = v.dataDescriptor(); t.deepEqual( CompletePropertyDescriptor(data), { '[[Configurable]]': !!data['[[Configurable]]'], '[[Enumerable]]': false, '[[Value]]': data['[[Value]]'], '[[Writable]]': !!data['[[Writable]]'] }, 'completes a Data Descriptor' ); var accessor = v.accessorDescriptor(); t.deepEqual( CompletePropertyDescriptor(accessor), { '[[Get]]': accessor['[[Get]]'], '[[Enumerable]]': !!accessor['[[Enumerable]]'], '[[Configurable]]': !!accessor['[[Configurable]]'], '[[Set]]': undefined }, 'completes an Accessor Descriptor' ); var mutator = v.mutatorDescriptor(); t.deepEqual( CompletePropertyDescriptor(mutator), { '[[Set]]': mutator['[[Set]]'], '[[Enumerable]]': !!mutator['[[Enumerable]]'], '[[Configurable]]': !!mutator['[[Configurable]]'], '[[Get]]': undefined }, 'completes a mutator Descriptor' ); t['throws']( function () { CompletePropertyDescriptor(v.bothDescriptor()); }, TypeError, 'data and accessor descriptors are mutually exclusive' ); }; ljharb-es-abstract-babee05/test/methods/CompletionRecord.js000066400000000000000000000024031516525472400241710ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); module.exports = function (t, year, CompletionRecord) { t.ok(year >= 2015, 'ES2015+'); t['throws']( function () { return CompletionRecord('invalid'); }, SyntaxError, 'invalid Completion Record type throws' ); var sentinel = { sentinel: true }; forEach(['normal', 'break', 'continue', 'return'], function (nonAbruptType) { var completion = CompletionRecord(nonAbruptType, sentinel); t.equal(completion['?'](), sentinel, '? returns the value of a non-abrupt completion'); }); var throwCompletion = CompletionRecord('throw', sentinel); t['throws']( function () { throwCompletion['?'](); }, sentinel, '? throws the value of a throw completion' ); var normalCompletion = CompletionRecord('normal', sentinel); t.equal(normalCompletion['!'](), sentinel, '! returns the value of a normal completion'); forEach(['break', 'continue', 'return', 'throw'], function (nonNormalType) { var completion = CompletionRecord(nonNormalType); t['throws']( function () { completion['!'](); }, SyntaxError, 'assertion failed: type ' + nonNormalType + ' is not "normal"' ); }); t.doesNotThrow(function () { return new CompletionRecord('normal', sentinel); }, 'can be constructed with or without `new`'); }; ljharb-es-abstract-babee05/test/methods/CopyDataProperties.js000066400000000000000000000061701516525472400245070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var keys = require('object-keys'); var hasOwn = require('hasown'); var defineProperty = require('../helpers/defineProperty'); var esV = require('../helpers/v'); module.exports = function (t, year, CopyDataProperties) { t.ok(year >= 2018, 'ES2018+'); t.test('first argument: target', function (st) { forEach(v.primitives, function (primitive) { st['throws']( function () { CopyDataProperties(primitive, {}, []); }, TypeError, debug(primitive) + ' is not an Object' ); }); st.end(); }); t.test('second argument: source', function (st) { var frozenTarget = Object.freeze ? Object.freeze({}) : {}; forEach(v.nullPrimitives, function (nullish) { st.equal( CopyDataProperties(frozenTarget, nullish, []), frozenTarget, debug(nullish) + ' "source" yields identical, unmodified target' ); }); forEach(v.nonNullPrimitives, function (objectCoercible) { var target = {}; var result = CopyDataProperties(target, objectCoercible, []); st.equal(result, target, 'result === target'); st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible)); }); st.test('enumerable accessor property', { skip: !$defineProperty }, function (s2t) { var target = {}; var source = {}; defineProperty(source, 'a', { enumerable: true, get: function () { return 42; } }); var result = CopyDataProperties(target, source, []); s2t.equal(result, target, 'result === target'); s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source'); s2t.end(); }); st.end(); }); t.test('third argument: excludedItems', function (st) { forEach(esV.unknowns, function (nonArray) { st['throws']( function () { CopyDataProperties({}, {}, nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { st['throws']( function () { CopyDataProperties({}, {}, [nonPropertyKey]); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); var result = CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']); st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded'); st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) { var source = {}; forEach(v.symbols, function (symbol) { source[symbol] = true; }); var includedSymbols = v.symbols.slice(1); var excludedSymbols = v.symbols.slice(0, 1); var target = CopyDataProperties({}, source, excludedSymbols); forEach(includedSymbols, function (symbol) { s2t.equal(hasOwn(target, symbol), true, debug(symbol) + ' is included'); }); forEach(excludedSymbols, function (symbol) { s2t.equal(hasOwn(target, symbol), false, debug(symbol) + ' is excluded'); }); s2t.end(); }); st.end(); }); // TODO: CopyDataProperties does not throw when copying fails // TODO: CopyDataProperties throws when copying fails }; ljharb-es-abstract-babee05/test/methods/CreateAsyncFromSyncIterator.js000066400000000000000000000135461516525472400263270ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var keys = require('object-keys'); var esV = require('../helpers/v'); var makeAsyncFromSyncIterator = require('../helpers/makeAsyncFromSyncIterator'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var testAsyncIterator = require('../helpers/testAsyncIterator'); module.exports = function (t, year, CreateAsyncFromSyncIterator) { t.ok(year >= 2018, 'ES2018+'); forEach(esV.unknowns, function (nonIteratorRecord) { t['throws']( function () { CreateAsyncFromSyncIterator(nonIteratorRecord); }, TypeError, debug(nonIteratorRecord) + ' is not an Iterator Record' ); }); t.test('with Promise support', { skip: typeof Promise === 'undefined' }, function (st) { var asyncIteratorRecord = makeAsyncFromSyncIterator(CreateAsyncFromSyncIterator, 5); st.deepEqual( keys(asyncIteratorRecord).sort(), ['[[Iterator]]', '[[NextMethod]]', '[[Done]]'].sort(), 'has expected Iterator Record fields' ); st.equal(typeof asyncIteratorRecord['[[NextMethod]]'], 'function', '[[NextMethod]] is a function'); st.equal(typeof asyncIteratorRecord['[[Done]]'], 'boolean', '[[Done]] is a boolean'); var itNoThrow = asyncIteratorRecord['[[Iterator]]']; st.test('.next()', function (s2t) { var i = 0; var iterator = { next: function next(x) { try { return { done: i > 2, value: [i, arguments.length, x] }; } finally { i += 1; } } }; var syncIteratorRecord = makeIteratorRecord(iterator); var record = CreateAsyncFromSyncIterator(syncIteratorRecord); var it = record['[[Iterator]]']; var next = record['[[NextMethod]]']; s2t.test('no next arg', function (s3t) { return next.call(it).then(function (result) { s3t.deepEqual( result, { value: [0, 0, undefined], done: false }, 'result is correct' ); }); }); s2t.test('no next arg', function (s3t) { return next.call(it, 42).then(function (result) { s3t.deepEqual( result, { value: [1, 1, 42], done: false }, 'result is correct' ); }); }); s2t.end(); }); st.test('.throw()', function (s2t) { var asyncThrows = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, function throws(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); throw true; // eslint-disable-line no-throw-literal } )['[[Iterator]]']; var asyncThrowReturnsNonObject = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, function throws(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); } )['[[Iterator]]']; var asyncThrowReturnsObject = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, function throws(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); return { done: true, value: Promise.resolve(42) }; } )['[[Iterator]]']; return Promise.all([ itNoThrow['throw']().then(s2t.fail, s2t.pass), // "pass", since it rejects with `undefined` itNoThrow['throw'](true).then(s2t.fail, s2t.ok), // "ok", since it rejects with `true` asyncThrows['throw']().then(s2t.fail, s2t.ok), // "ok", since it rejects with `true` asyncThrows['throw'](false).then(s2t.fail, s2t.ok), // "ok", since it rejects with `true` asyncThrowReturnsNonObject['throw']().then(s2t.fail, s2t.ok), // "ok", since it rejects with an error asyncThrowReturnsNonObject['throw'](false).then(s2t.fail, s2t.ok), // "ok", since it rejects with an error asyncThrowReturnsObject['throw']().then(function (x) { s2t.deepEqual(x, { done: true, value: 42 }); }), asyncThrowReturnsObject['throw'](false).then(function (x) { s2t.deepEqual(x, { done: true, value: 42 }); }) ]); }); st.test('.return()', function (s2t) { var asyncThrows = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, void undefined, function returns(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); throw true; // eslint-disable-line no-throw-literal } )['[[Iterator]]']; var asyncThrowReturnsNonObject = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, void undefined, function returns(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); } )['[[Iterator]]']; var asyncThrowReturnsObject = makeAsyncFromSyncIterator( CreateAsyncFromSyncIterator, 5, void undefined, function returns(x) { s2t.equal(x, arguments.length === 1 ? false : void undefined, '.throw() called with `false`, or nothing'); return { done: true, value: Promise.resolve(42) }; } )['[[Iterator]]']; return Promise.all([ itNoThrow['return']().then(function (x) { s2t.deepEqual(x, { done: true, value: void undefined }); }), itNoThrow['return'](true).then(function (x) { s2t.deepEqual(x, { done: true, value: true }); }), asyncThrows['return']().then(s2t.fail, s2t.ok), // "ok", since it rejects with `true` asyncThrows['return'](false).then(s2t.fail, s2t.ok), // "ok", since it rejects with `true` asyncThrowReturnsNonObject['return']().then(s2t.fail, s2t.ok), // "ok", since it rejects with an error asyncThrowReturnsNonObject['return'](false).then(s2t.fail, s2t.ok), // "ok", since it rejects with an error asyncThrowReturnsObject['return']().then(function (x) { s2t.deepEqual(x, { done: true, value: 42 }); }), asyncThrowReturnsObject['return'](false).then(function (x) { s2t.deepEqual(x, { done: true, value: 42 }); }) ]); }); return testAsyncIterator(st, asyncIteratorRecord['[[Iterator]]'], [0, 1, 2, 3, 4]); }); }; ljharb-es-abstract-babee05/test/methods/CreateDataProperty.js000066400000000000000000000051521516525472400244670ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, CreateDataProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { CreateDataProperty(primitive); }, TypeError, debug(primitive) + ' is not an object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { CreateDataProperty({}, nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a property key' ); }); var sentinel = { id: 'sentinel' }; var secondSentinel = { id: 'second sentinel' }; forEach(v.propertyKeys, function (propertyKey) { var obj = {}; var status = CreateDataProperty(obj, propertyKey, sentinel); t.equal(status, true, 'status is true'); t.equal( obj[propertyKey], sentinel, debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' ); var secondStatus = CreateDataProperty(obj, propertyKey, secondSentinel); t.equal(secondStatus, true, 'second status is true'); t.equal( obj[propertyKey], secondSentinel, debug(secondSentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' ); t.test('with defineProperty', { skip: !$defineProperty }, function (st) { var nonWritable = defineProperty({}, propertyKey, { configurable: true, writable: false }); var nonWritableStatus = CreateDataProperty(nonWritable, propertyKey, sentinel); st.equal(nonWritableStatus, true, 'create data property succeeded'); st.equal( nonWritable[propertyKey], sentinel, debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object when key is configurable but nonwritable' ); var nonConfigurable = defineProperty({}, propertyKey, { configurable: false, writable: true }); var nonConfigurableStatus = CreateDataProperty(nonConfigurable, propertyKey, sentinel); st.equal(nonConfigurableStatus, false, 'create data property failed'); st.notEqual( nonConfigurable[propertyKey], sentinel, debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonconfigurable' ); st.end(); }); }); t.test('non-extensible object', { skip: !Object.preventExtensions }, function (st) { var nonExtensible = Object.preventExtensions({}); st.equal( CreateDataProperty(nonExtensible, 'foo', {}), false, 'can not install "foo" on non-extensible object' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CreateDataPropertyOrThrow.js000066400000000000000000000034651516525472400260210ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CreateDataPropertyOrThrow) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { CreateDataPropertyOrThrow(primitive); }, TypeError, debug(primitive) + ' is not an object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { CreateDataPropertyOrThrow({}, nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a property key' ); }); var sentinel = {}; forEach(v.propertyKeys, function (propertyKey) { var obj = {}; var status = CreateDataPropertyOrThrow(obj, propertyKey, sentinel); if (year < 2023) { t.equal(status, true, 'status is true'); } else { t.equal(status, undefined, 'status is ~unused~'); } t.equal( obj[propertyKey], sentinel, debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object' ); if (typeof Object.preventExtensions === 'function') { var notExtensible = {}; Object.preventExtensions(notExtensible); t['throws']( function () { CreateDataPropertyOrThrow(notExtensible, propertyKey, sentinel); }, TypeError, 'can not install ' + debug(propertyKey) + ' on non-extensible object' ); t.notOk( propertyKey in notExtensible, debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object' ); } }); t.test('non-extensible object', { skip: !Object.preventExtensions }, function (st) { var nonExtensible = Object.preventExtensions({}); st['throws']( function () { CreateDataPropertyOrThrow(nonExtensible, 'foo', {}); }, TypeError, 'can not install "foo" on non-extensible object' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CreateHTML.js000066400000000000000000000020301516525472400226050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CreateHTML) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { CreateHTML('', nonString, '', ''); }, TypeError, 'tag: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { CreateHTML('', '', nonString, ''); }, TypeError, 'attribute: ' + debug(nonString) + ' is not a String' ); }); t.equal( CreateHTML( { toString: function () { return 'the string'; } }, 'some HTML tag!', '' ), 'the string', 'works with an empty string attribute value' ); t.equal( CreateHTML( { toString: function () { return 'the string'; } }, 'some HTML tag!', 'attr', 'value "with quotes"' ), 'the string', 'works with an attribute, and a value with quotes' ); }; ljharb-es-abstract-babee05/test/methods/CreateIterResultObject.js000066400000000000000000000013241516525472400252770ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, CreateIterResultObject) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { CreateIterResultObject({}, nonBoolean); }, TypeError, '"done" argument must be a boolean; ' + debug(nonBoolean) + ' is not' ); }); var value = {}; t.deepEqual( CreateIterResultObject(value, true), { value: value, done: true }, 'creates a "done" iteration result' ); t.deepEqual( CreateIterResultObject(value, false), { value: value, done: false }, 'creates a "not done" iteration result' ); }; ljharb-es-abstract-babee05/test/methods/CreateIteratorFromClosure.js000066400000000000000000000052471516525472400260300ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var SLOT = require('internal-slot'); module.exports = function (t, year, CreateIteratorFromClosure) { t.ok(year >= 2025, 'ES2025+'); var nonZeroArgClosure = function (_) {}; // eslint-disable-line no-unused-vars SLOT.set(nonZeroArgClosure, '[[Sentinel]]', {}); SLOT.set(nonZeroArgClosure, '[[CloseIfAbrupt]]', function () {}); t['throws']( function () { CreateIteratorFromClosure(nonZeroArgClosure, '', {}); }, TypeError, '"closure" argument must be a zero-argument function' ); var sentinel = {}; var closure = t.captureFn(function () {}); SLOT.set(closure, '[[Sentinel]]', sentinel); var cIA = t.captureFn(function () {}); SLOT.set(closure, '[[CloseIfAbrupt]]', cIA); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { CreateIteratorFromClosure(nonFunction, '', {}); }, TypeError, debug(nonFunction) + ' is not callable' ); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { CreateIteratorFromClosure(closure, nonString, {}); }, TypeError, debug(nonString) + ' is not a string' ); t['throws']( function () { CreateIteratorFromClosure(closure, '', {}, ['', nonString]); }, TypeError, 'extraSlots: ' + debug(nonString) + ' is not a string' ); }); forEach(v.primitives, function (primitive) { t['throws']( function () { CreateIteratorFromClosure(closure, '', primitive); }, TypeError, debug(primitive) + ' is not an Object' ); SLOT.set(closure, '[[Sentinel]]', primitive); t['throws']( function () { CreateIteratorFromClosure(closure, '', primitive); }, TypeError, '[[Sentinel]]: ' + debug(primitive) + ' is not an Object' ); }); SLOT.set(closure, '[[Sentinel]]', sentinel); var proto = {}; var result = CreateIteratorFromClosure(closure, 'test', proto, ['[[a]]', '[[b]]']); t.doesNotThrow(function () { SLOT.assert(result, '[[Sentinel]]'); SLOT.assert(result, '[[CloseIfAbrupt]]'); SLOT.assert(result, '[[a]]'); SLOT.assert(result, '[[b]]'); SLOT.assert(result, '[[GeneratorBrand]]'); SLOT.assert(result, '[[GeneratorState]]'); SLOT.assert(result, '[[GeneratorContext]]'); }, 'extra slots are installed'); t.equal(SLOT.get(result, '[[GeneratorBrand]]'), 'test', 'generator brand is set'); t.ok(Object.prototype.isPrototypeOf.call(proto, result), 'proto is the [[Prototype]] of the result'); t.deepEqual(closure.calls, [], 'closure is not called yet'); t.deepEqual(cIA.calls, [], 'closeIfAbrupt is not called yet'); t.equal(SLOT.get(result, '[[GeneratorState]]'), 'SUSPENDED-START', 'generator state starts suspended'); }; ljharb-es-abstract-babee05/test/methods/CreateIteratorResultObject.js000066400000000000000000000003351516525472400261660ustar00rootroot00000000000000'use strict'; var testCreateIterResultObject = require('./CreateIterResultObject'); module.exports = function (t, year, CreateIteratorResultObject) { testCreateIterResultObject(t, year, CreateIteratorResultObject); }; ljharb-es-abstract-babee05/test/methods/CreateListFromArrayLike.js000066400000000000000000000023111516525472400254060ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, CreateListFromArrayLike) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { CreateListFromArrayLike(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { CreateListFromArrayLike({}, nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t['throws']( function () { CreateListFromArrayLike({ length: 3, 0: 'a', 1: 'b', 2: 3 }, ['String']); }, TypeError, 'an element type not present in passed elementTypes throws' ); t.deepEqual( CreateListFromArrayLike({ length: 2, 0: 'a', 1: 'b', 2: 'c' }), ['a', 'b'], 'arraylike stops at the length' ); if (year >= 2020) { t.test('bigints', { skip: !esV.hasBigInts }, function (st) { st.deepEqual( CreateListFromArrayLike({ length: 2, 0: BigInt(1), 1: 'b', 2: 'c' }), [BigInt(1), 'b'], 'arraylike (with BigInt) stops at the length' ); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/CreateMethodProperty.js000066400000000000000000000037611516525472400250420ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var gOPD = require('gopd'); var functionsHaveNames = require('functions-have-names')(); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); module.exports = function (t, year, CreateMethodProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { CreateMethodProperty(primitive, 'key'); }, TypeError, 'O must be an Object; ' + debug(primitive) + ' is not one' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { CreateMethodProperty({}, nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t.test('defines correctly', function (st) { var obj = {}; var key = 'the key'; var value = { foo: 'bar' }; st.equal(CreateMethodProperty(obj, key, value), true, 'defines property successfully'); st.test('property descriptor', { skip: !gOPD }, function (s2t) { s2t.deepEqual( gOPD(obj, key), { configurable: true, enumerable: false, value: value, writable: true }, 'sets the correct property descriptor' ); s2t.end(); }); st.equal(obj[key], value, 'sets the correct value'); st.end(); }); t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { var obj = Object.freeze({ foo: 'bar' }); st['throws']( function () { CreateMethodProperty(obj, 'foo', { value: 'baz' }); }, TypeError, 'nonconfigurable key can not be defined' ); st.end(); }); t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { st['throws']( function () { CreateMethodProperty(function () {}, 'name', { value: 'baz' }); }, TypeError, 'nonconfigurable function name can not be defined' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CreateNonEnumerableDataPropertyOrThrow.js000066400000000000000000000041351516525472400304670ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); var functionsHaveNames = require('functions-have-names')(); var gOPD = require('gopd'); var v = require('es-value-fixtures'); module.exports = function (t, year, CreateNonEnumerableDataPropertyOrThrow) { t.ok(year >= 2022, 'ES2022+'); forEach(v.primitives, function (primitive) { t['throws']( function () { CreateNonEnumerableDataPropertyOrThrow(primitive, 'key'); }, TypeError, 'O must be an Object; ' + debug(primitive) + ' is not one' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { CreateNonEnumerableDataPropertyOrThrow({}, nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t.test('defines correctly', function (st) { var obj = {}; var key = 'the key'; var value = { foo: 'bar' }; st.equal(CreateNonEnumerableDataPropertyOrThrow(obj, key, value), true, 'defines property successfully'); st.test('property descriptor', { skip: !gOPD }, function (s2t) { s2t.deepEqual( gOPD(obj, key), { configurable: true, enumerable: false, value: value, writable: true }, 'sets the correct property descriptor' ); s2t.end(); }); st.equal(obj[key], value, 'sets the correct value'); st.end(); }); t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { var obj = Object.freeze({ foo: 'bar' }); st['throws']( function () { CreateNonEnumerableDataPropertyOrThrow(obj, 'foo', { value: 'baz' }); }, TypeError, 'nonconfigurable key can not be defined' ); st.end(); }); t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { st['throws']( function () { CreateNonEnumerableDataPropertyOrThrow(function () {}, 'name', { value: 'baz' }); }, TypeError, 'nonconfigurable function name can not be defined' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/CreateRegExpStringIterator.js000066400000000000000000000133011516525472400261370ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var debug = require('object-inspect'); var forEach = require('for-each'); var keys = require('object-keys'); var v = require('es-value-fixtures'); var $defineProperty = require('es-define-property'); var esV = require('../helpers/v'); var kludgeMatch = require('../helpers/kludgeMatch'); var testRESIterator = require('../helpers/testRESIterator'); module.exports = function (t, year, CreateRegExpStringIterator) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { CreateRegExpStringIterator({}, nonString, false, false); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { CreateRegExpStringIterator({}, '', nonBoolean, false); }, TypeError, debug(nonBoolean) + ' is not a String (`global`)' ); t['throws']( function () { CreateRegExpStringIterator({}, '', false, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a String (`fullUnicode`)' ); }); var resIterator = CreateRegExpStringIterator(/a/, 'a', false, false); forEach(v.primitives, function (nonObject) { t['throws']( function () { resIterator.next.call(nonObject); }, TypeError, debug(nonObject) + ', receiver of iterator next, is not an Object' ); }); t['throws']( function () { resIterator.next.call({}); }, TypeError, 'iterator next receiver is not a RegExp String Iterator' ); t.test('`global` matches `g` flag', function (st) { st.test('non-global regex', function (s2t) { var regex = /a/; var str = 'abcabc'; var expected = [ assign(['a'], kludgeMatch(regex, { index: 0, input: str, lastIndex: 1 })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, false, false, expected); s2t.end(); }); st.test('non-global unicode regex', { skip: !('unicode' in RegExp.prototype) }, function (s2t) { var regex = new RegExp(esV.poo.whole, 'u'); var str = 'a' + esV.poo.whole + 'ca' + esV.poo.whole + 'c'; var expected = [ assign([esV.poo.whole], kludgeMatch(regex, { index: 1, input: str, lastIndex: 1 })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, false, true, expected); s2t.end(); }); st.test('global regex', function (s2t) { var regex = /a/g; var str = 'abcabc'; var expected = [ assign(['a'], kludgeMatch(regex, { index: 0, input: str, lastIndex: 1 })), assign(['a'], kludgeMatch(regex, { index: 3, input: str, lastIndex: 4 })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, true, false, expected); var emptyRegex = /(?:)/g; var abc = 'abc'; var expected2 = [ assign([''], kludgeMatch(emptyRegex, { index: 0, input: abc, lastIndex: 1 })), assign([''], kludgeMatch(emptyRegex, { index: 1, input: abc, lastIndex: 2 })), assign([''], kludgeMatch(emptyRegex, { index: 2, input: abc, lastIndex: 3 })), assign([''], kludgeMatch(emptyRegex, { index: 3, input: abc, lastIndex: 4 })) ]; testRESIterator(CreateRegExpStringIterator, s2t, emptyRegex, abc, true, false, expected2); s2t.end(); }); st.test('global unicode regex', { skip: !('unicode' in RegExp.prototype) }, function (s2t) { var regex = new RegExp(esV.poo.whole, 'gu'); var str = 'a' + esV.poo.whole + 'ca' + esV.poo.whole + 'c'; var expected = [ assign([esV.poo.whole], kludgeMatch(regex, { index: 1, input: str })), assign([esV.poo.whole], kludgeMatch(regex, { index: 5, input: str })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, true, true, expected); s2t.end(); }); st.end(); }); // these tests are technically allowed by the AO, but the spec never causes them to happen t.test('`global` does not match `g` flag', { skip: true }, function (st) { st.test('non-global regex', function (s2t) { var regex = /a/; var str = 'abcabc'; var expected = [ assign(['a'], kludgeMatch(regex, { index: 0, input: str })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, true, false, expected); s2t.end(); }); st.test('non-global unicode regex', { skip: !('unicode' in RegExp.prototype) }, function (s2t) { var regex = new RegExp(esV.poo.whole, 'u'); var str = 'a' + esV.poo.whole + 'ca' + esV.poo.whole + 'c'; var expected = [ assign([esV.poo.whole], kludgeMatch(regex, { index: 1, input: str })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, true, true, expected); s2t.end(); }); st.test('global regex', function (s2t) { var regex = /a/g; var str = 'abcabc'; var expected = [ assign(['a'], kludgeMatch(regex, { index: 0, input: str })), assign(['a'], kludgeMatch(regex, { index: 3, input: str })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, false, false, expected); s2t.end(); }); st.test('global unicode regex', { skip: !('unicode' in RegExp.prototype) }, function (s2t) { var regex = new RegExp(esV.poo.whole, 'gu'); var str = 'a' + esV.poo.whole + 'ca' + esV.poo.whole + 'c'; var expected = [ assign([esV.poo.whole], kludgeMatch(regex, { index: 1, input: str })), assign([esV.poo.whole], kludgeMatch(regex, { index: 5, input: str })) ]; testRESIterator(CreateRegExpStringIterator, s2t, regex, str, false, true, expected); s2t.end(); }); st.end(); }); var iterator = CreateRegExpStringIterator(/a/, '', false, false); t.deepEqual(keys(iterator), [], 'iterator has no enumerable keys'); if ($defineProperty) { for (var key in iterator) { // eslint-disable-line no-restricted-syntax t.fail(debug(key) + ' should not be an enumerable key'); } } if (v.hasSymbols) { t.equal(iterator[Symbol.iterator](), iterator, 'is iterable for itself'); } }; ljharb-es-abstract-babee05/test/methods/DateFromTime.js000066400000000000000000000024731516525472400232500ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, DateFromTime) { t.ok(year >= 5, 'ES5+'); var i; for (i = 1; i <= 28; i += 1) { t.equal(DateFromTime(Date.UTC(2019, 1, i)), i, '2019.02.' + i + ' is date ' + i); } for (i = 1; i <= 29; i += 1) { t.equal(DateFromTime(Date.UTC(2016, 1, i)), i, '2016.02.' + i + ' is date ' + i); } for (i = 1; i <= 30; i += 1) { t.equal(DateFromTime(Date.UTC(2019, 2, i)), i, '2019.03.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 3, i)), i, '2019.04.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 5, i)), i, '2019.06.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 7, i)), i, '2019.08.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 8, i)), i, '2019.09.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 10, i)), i, '2019.11.' + i + ' is date ' + i); } for (i = 1; i <= 31; i += 1) { t.equal(DateFromTime(Date.UTC(2019, 0, i)), i, '2019.01.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 4, i)), i, '2019.05.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 6, i)), i, '2019.07.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 9, i)), i, '2019.10.' + i + ' is date ' + i); t.equal(DateFromTime(Date.UTC(2019, 11, i)), i, '2019.12.' + i + ' is date ' + i); } }; ljharb-es-abstract-babee05/test/methods/DateString.js000066400000000000000000000011141516525472400227630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, DateString) { t.ok(year >= 2018, 'ES2018+'); forEach([].concat( v.nonNumbers, NaN ), function (nonNumberOrNaN) { t['throws']( function () { DateString(nonNumberOrNaN); }, TypeError, debug(nonNumberOrNaN) + ' is not a non-NaN Number' ); }); t.equal(DateString(Date.UTC(2019, 8, 10, 7, 8, 9)), 'Tue Sep 10 2019'); t.equal(DateString(Date.UTC(2016, 1, 29, 7, 8, 9)), 'Mon Feb 29 2016'); // leap day }; ljharb-es-abstract-babee05/test/methods/Day.js000066400000000000000000000005441516525472400214420ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, Day) { t.ok(year >= 5, 'ES5+'); var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5); var add = 2.5; var later = new Date(time + (add * esV.msPerDay)); t.equal(Day(later.getTime()), Day(time) + Math.floor(add), 'adding 2.5 days worth of ms, gives a Day delta of 2'); }; ljharb-es-abstract-babee05/test/methods/DayFromYear.js000066400000000000000000000010631516525472400231040ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, DayFromYear) { t.ok(year >= 5, 'ES5+'); t.equal(DayFromYear(2021) - DayFromYear(2020), 366, '2021 is a leap year, has 366 days'); t.equal(DayFromYear(2020) - DayFromYear(2019), 365, '2020 is not a leap year, has 365 days'); t.equal(DayFromYear(2019) - DayFromYear(2018), 365, '2019 is not a leap year, has 365 days'); t.equal(DayFromYear(2018) - DayFromYear(2017), 365, '2018 is not a leap year, has 365 days'); t.equal(DayFromYear(2017) - DayFromYear(2016), 366, '2017 is a leap year, has 366 days'); }; ljharb-es-abstract-babee05/test/methods/DayWithinYear.js000066400000000000000000000005541516525472400234470ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, DayWithinYear) { t.ok(year >= 5, 'ES5+'); t.equal(DayWithinYear(Date.UTC(2019, 0, 1)), 0, '1/1 is the 1st day'); t.equal(DayWithinYear(Date.UTC(2019, 11, 31)), 364, '12/31 is the 365th day in a non leap year'); t.equal(DayWithinYear(Date.UTC(2016, 11, 31)), 365, '12/31 is the 366th day in a leap year'); }; ljharb-es-abstract-babee05/test/methods/DaysInYear.js000066400000000000000000000010631516525472400227320ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, DaysInYear) { t.ok(year >= 5, 'ES5+'); t.equal(DaysInYear(2021), 365, '2021 is not a leap year'); t.equal(DaysInYear(2020), 366, '2020 is a leap year'); t.equal(DaysInYear(2019), 365, '2019 is not a leap year'); t.equal(DaysInYear(2018), 365, '2018 is not a leap year'); t.equal(DaysInYear(2017), 365, '2017 is not a leap year'); t.equal(DaysInYear(2016), 366, '2016 is a leap year'); t.equal(DaysInYear(2000), 366, '2000 is a leap year'); t.equal(DaysInYear(1900), 365, '1900 is not a leap year'); }; ljharb-es-abstract-babee05/test/methods/DefaultTimeZone.js000066400000000000000000000010401516525472400237540ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, DefaultTimeZone) { t.ok(year >= 2023, 'ES2023+'); t.test('Intl supported', { skip: typeof Intl === 'undefined' }, function (st) { st.equal( DefaultTimeZone(), new Intl.DateTimeFormat().resolvedOptions().timeZone, 'default time zone is resolved from Intl.DateTimeFormat' ); st.end(); }); t.test('Intl not supported', { skip: typeof Intl !== 'undefined' }, function (st) { st.equal( DefaultTimeZone(), 'UTC', 'default time zone is UTC' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/DefineMethodProperty.js000066400000000000000000000063721516525472400250320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var gOPD = require('gopd'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, DefineMethodProperty) { t.ok(year >= 2022, 'ES2022+'); var enumerable = true; var nonEnumerable = false; forEach(v.primitives, function (nonObject) { t['throws']( function () { DefineMethodProperty(nonObject, 'key', function () {}, enumerable); }, TypeError, 'O must be an Object; ' + debug(nonObject) + ' is not one' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { DefineMethodProperty({}, nonPropertyKey, function () {}, enumerable); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { DefineMethodProperty({}, 'key', nonFunction, enumerable); }, TypeError, debug(nonFunction) + ' is not a Function' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { DefineMethodProperty({}, 'key', function () {}, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); t.test('non-extensible object', { skip: !Object.preventExtensions }, function (st) { var obj = {}; Object.preventExtensions(obj); st['throws']( function () { DefineMethodProperty(obj, 'key', function () {}, enumerable); }, TypeError, 'non-extensible object can not have a method defined' ); st.end(); }); t.test('defining an enumerable method', function (st) { var obj = {}; var key = 'the key'; var value = function () {}; st.doesNotThrow( function () { DefineMethodProperty(obj, key, value, enumerable); }, 'defines property successfully' ); st.equal(obj[key], value, 'sets the correct value'); st.deepEqual( gOPD(obj, key), { configurable: true, enumerable: true, value: value, writable: true }, 'sets the correct property descriptor' ); st.end(); }); // test defining a non-enumerable property when descriptors are supported t.test('defining a non-enumerable method', { skip: !defineProperty || !gOPD }, function (st) { var obj = {}; var key = 'the key'; var value = function () {}; st.doesNotThrow( function () { DefineMethodProperty(obj, key, value, nonEnumerable); }, 'defines property successfully' ); st.equal(obj[key], value, 'sets the correct value'); st.deepEqual( gOPD(obj, key), { configurable: true, enumerable: false, value: value, writable: true }, 'sets the correct property descriptor' ); st.end(); }); // test defining over a nonconfigurable property when descriptors are supported (unless there's an ES3 builtin that's nonconfigurable) t.test('defining over a nonconfigurable property', { skip: !defineProperty || !gOPD }, function (st) { var obj = {}; var key = 'the key'; defineProperty(obj, key, { configurable: false, enumerable: true, value: 'foo', writable: true }); var value = function () {}; st['throws']( function () { DefineMethodProperty(obj, key, value, enumerable); }, TypeError, 'nonconfigurable key can not be redefined' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/DefinePropertyOrThrow.js000066400000000000000000000040441516525472400252100ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var gOPD = require('gopd'); var debug = require('object-inspect'); var functionsHaveNames = require('functions-have-names')(); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); module.exports = function (t, year, DefinePropertyOrThrow) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { DefinePropertyOrThrow(primitive, 'key', {}); }, TypeError, 'O must be an Object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { DefinePropertyOrThrow({}, nonPropertyKey, {}); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t.test('defines correctly', function (st) { var obj = {}; var key = 'the key'; var descriptor = { configurable: true, enumerable: false, value: { foo: 'bar' }, writable: true }; st.equal(DefinePropertyOrThrow(obj, key, descriptor), true, 'defines property successfully'); st.test('property descriptor', { skip: !gOPD }, function (s2t) { s2t.deepEqual( gOPD(obj, key), descriptor, 'sets the correct property descriptor' ); s2t.end(); }); st.deepEqual(obj[key], descriptor.value, 'sets the correct value'); st.end(); }); t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { var obj = Object.freeze({ foo: 'bar' }); st['throws']( function () { DefinePropertyOrThrow(obj, 'foo', { configurable: true, value: 'baz' }); }, TypeError, 'nonconfigurable key can not be defined' ); st.end(); }); t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { st['throws']( function () { DefinePropertyOrThrow(function () {}, 'name', { configurable: true, value: 'baz' }); }, TypeError, 'nonconfigurable function name can not be defined' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/DeletePropertyOrThrow.js000066400000000000000000000031721516525472400252210ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var functionsHaveNames = require('functions-have-names')(); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); module.exports = function (t, year, DeletePropertyOrThrow) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { DeletePropertyOrThrow(primitive, 'key', {}); }, TypeError, 'O must be an Object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { DeletePropertyOrThrow({}, nonPropertyKey, {}); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t.test('defines correctly', function (st) { var obj = { 'the key': 42 }; var key = 'the key'; st.equal(DeletePropertyOrThrow(obj, key), true, 'deletes property successfully'); st.equal(key in obj, false, 'key is no longer in the object'); st.end(); }); t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) { var obj = Object.freeze({ foo: 'bar' }); st['throws']( function () { DeletePropertyOrThrow(obj, 'foo'); }, TypeError, 'nonconfigurable key can not be deleted' ); st.end(); }); t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) { st['throws']( function () { DeletePropertyOrThrow(function () {}, 'name'); }, TypeError, 'nonconfigurable function name can not be deleted' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/DetachArrayBuffer.js000066400000000000000000000041621516525472400242460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, DetachArrayBuffer) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.unknowns, function (nonArrayBuffer) { t['throws']( function () { DetachArrayBuffer(nonArrayBuffer); }, TypeError, debug(nonArrayBuffer) + ' is not an ArrayBuffer' ); }); t.test('ArrayBuffers', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var buffers = [ new ArrayBuffer(), new ArrayBuffer(0), new ArrayBuffer(4), new ArrayBuffer(420) ]; st.test('can detach', { skip: !esV.canDetach }, function (s2t) { forEach(buffers, function (buffer) { s2t.doesNotThrow( function () { return new Float32Array(buffer); }, 'can create a Float32Array from a non-detached ArrayBuffer' ); s2t.equal(DetachArrayBuffer(buffer), null, 'returns null'); s2t['throws']( function () { return new Float32Array(buffer); }, TypeError, 'can not create a Float32Array from a now detached ArrayBuffer' ); s2t.doesNotThrow( function () { DetachArrayBuffer(buffer); }, 'can call DetachArrayBuffer on an already-detached ArrayBuffer' ); }); s2t.end(); }); // throws SyntaxError in node < 11 st.test('can not detach', { skip: esV.canDetach }, function (s2t) { forEach(buffers, function (buffer) { s2t.doesNotThrow( function () { return new Float32Array(buffer); }, 'can create a Float32Array from a non-detached ArrayBuffer' ); s2t['throws']( function () { return DetachArrayBuffer(buffer); }, SyntaxError, 'env does not support detaching' ); }); s2t.end(); }); st.end(); }); if (year >= 2017) { t.test('Shared Array Buffers', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sabs = [ new SharedArrayBuffer(), new SharedArrayBuffer(0) ]; forEach(sabs, function (sab) { st['throws']( function () { DetachArrayBuffer(sab); }, TypeError, debug(sab) + ' is a SharedArrayBuffer' ); }); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/EncodeForRegExpEscape.js000066400000000000000000000274631516525472400250360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var codePointStringToNum = function codePointStringToNumber(c) { var first = c.charCodeAt(0); if (first < 0xD800 || first > 0xDBFF || c.length === 1) { return first; } var second = c.charCodeAt(1); if (second < 0xDC00 || second > 0xDFFF) { return first; } return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000; }; module.exports = function (t, year, EncodeForRegExpEscape) { t.ok(year >= 2025, 'ES2025+'); forEach([].concat( v.notNonNegativeIntegers, 0x10FFFF + 1 ), function (nonCodePoint) { t['throws']( function () { EncodeForRegExpEscape(nonCodePoint); }, TypeError, debug(nonCodePoint) + ' is not a valid Unicode code point' ); }); t.equal(EncodeForRegExpEscape(codePointStringToNum('\t')), '\\t', 't'); t.equal(EncodeForRegExpEscape(codePointStringToNum('\n')), '\\n', 'n'); t.equal(EncodeForRegExpEscape(codePointStringToNum('\v')), '\\v', 'v'); t.equal(EncodeForRegExpEscape(codePointStringToNum('\f')), '\\f', 'f'); t.equal(EncodeForRegExpEscape(codePointStringToNum('\r')), '\\r', 'r'); t.equal(EncodeForRegExpEscape(codePointStringToNum('/')), '\\/', '/'); t.equal(EncodeForRegExpEscape(codePointStringToNum('\\')), '\\\\', '\\'); t.test('strings', { skip: true }, function (st) { var strings = [ 'The Quick Brown Fox', 'hello there', '', 'hi. how are you? 💩', '^$\\.*+?()[]{}|', '\uD834\uDF06.', '123 Fake St.' ]; forEach(strings, function (str) { var regex = new RegExp('^' + EncodeForRegExpEscape(str) + '$'); st.match(str, regex, debug(str) + ' escapes to ' + debug(regex) + ', which matches itself'); var nonStr = { toString: function () { return str; } }; st['throws']( function () { EncodeForRegExpEscape(nonStr); }, TypeError, 'does not coerce to string' ); }); st.end(); }); forEach('\u2028\u2029', function (c) { var expected = '\\u' + c.charCodeAt(0).toString(16); t.equal(EncodeForRegExpEscape(codePointStringToNum(c)), expected, 'line terminator ' + c + ' (' + expected + ') is escaped correctly'); }); t.test('test262: test/built-ins/RegExp/escape/escaped-otherpunctuators', function (st) { var otherPunctuators = ",-=<>#&!%:;@~'`\""; forEach(otherPunctuators, function (c) { var expected = '\\x' + c.charCodeAt(0).toString(16); st.equal(EncodeForRegExpEscape(codePointStringToNum(c)), expected, c + ' is escaped correctly'); }); st.end(); }); t.test('test262: test/built-ins/RegExp/escape/escaped-solidus-character-simple', { skip: true }, function (st) { st.equal(EncodeForRegExpEscape('/'), '\\/', 'solidus character is escaped correctly'); st.equal(EncodeForRegExpEscape('//'), '\\/\\/', 'solidus character is escaped correctly - multiple occurrences 1'); st.equal(EncodeForRegExpEscape('///'), '\\/\\/\\/', 'solidus character is escaped correctly - multiple occurrences 2'); st.equal(EncodeForRegExpEscape('////'), '\\/\\/\\/\\/', 'solidus character is escaped correctly - multiple occurrences 3'); st.end(); }); t.test('test262: test/built-ins/RegExp/escape/escaped-syntax-characters-simple', function (st) { st.equal(EncodeForRegExpEscape(codePointStringToNum('.')), '\\.', 'dot character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('*')), '\\*', 'asterisk character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('+')), '\\+', 'plus character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('?')), '\\?', 'question mark character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('^')), '\\^', 'caret character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('$')), '\\$', 'dollar character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('|')), '\\|', 'pipe character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('(')), '\\(', 'open parenthesis character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum(')')), '\\)', 'close parenthesis character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('[')), '\\[', 'open bracket character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum(']')), '\\]', 'close bracket character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('{')), '\\{', 'open brace character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('}')), '\\}', 'close brace character is escaped correctly'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\\')), '\\\\', 'backslash character is escaped correctly'); st.end(); }); t.test('test262: test/built-ins/RegExp/escape/escaped-utf16encodecodepoint', function (st) { var codePoints = String.fromCharCode(0x100, 0x200, 0x300); forEach(codePoints, function (c) { st.equal(EncodeForRegExpEscape(codePointStringToNum(c)), c, 'character ' + c + ' is correctly not escaped'); }); /* eslint operator-linebreak: [2, before] */ var unicodeChars = '你好' // chinese + 'こんにちは' // japanese + '안녕하세요' // korean + 'Привет' // cyrillic + 'مرحبا' // arabic + 'हेलो' // devanagari + 'Γειάσου' // greek + 'שלום' // hebrew + 'สวัสดี' // thai + 'नमस्ते' // hindi + 'ሰላም' // amharic + 'हैलो'; // hindi with diacritics forEach(unicodeChars, function (c) { st.equal(EncodeForRegExpEscape(codePointStringToNum(c)), c, 'character ' + c + ' is correctly not escaped'); }); st.end(); }); t.test('test262: test/built-ins/RegExp/escape/escaped-whitespace', function (st) { st.equal(EncodeForRegExpEscape(codePointStringToNum('\uFEFF')), '\\ufeff', 'whitespace \\uFEFF is escaped correctly to \\uFEFF'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u0020')), '\\x20', 'whitespace \\u0020 is escaped correctly to \\x20'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u00A0')), '\\xa0', 'whitespace \\u00A0 is escaped correctly to \\xA0'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u202F')), '\\u202f', 'whitespace \\u202F is escaped correctly to \\u202F'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u0009')), '\\t', 'whitespace \\u0009 is escaped correctly to \\t'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u000B')), '\\v', 'whitespace \\u000B is escaped correctly to \\v'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\u000C')), '\\f', 'whitespace \\u000C is escaped correctly to \\f'); st.end(); }); t.equal(EncodeForRegExpEscape(codePointStringToNum('_')), '_', 'underscore is not escaped'); t.equal(EncodeForRegExpEscape(codePointStringToNum('.')), '\\.', 'dot is escaped'); forEach('^$\\.*+?()[]{}|', function (c) { var expected = '\\' + c; t.equal( EncodeForRegExpEscape(codePointStringToNum(c)), expected, 'Syntax character ' + c + ' (' + expected + ') are correctly escaped' ); }); t.test('test262: test/built-ins/RegExp/escape/escaped-surrogates', function (st) { // Specific surrogate points st.equal(EncodeForRegExpEscape(codePointStringToNum('\uD800')), '\\ud800', 'High surrogate \\uD800 is correctly escaped'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\uDBFF')), '\\udbff', 'High surrogate \\uDBFF is correctly escaped'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\uDC00')), '\\udc00', 'Low surrogate \\uDC00 is correctly escaped'); st.equal(EncodeForRegExpEscape(codePointStringToNum('\uDFFF')), '\\udfff', 'Low surrogate \\uDFFF is correctly escaped'); // Leading Surrogates var highSurrogates = '\uD800\uD801\uD802\uD803\uD804\uD805\uD806\uD807\uD808\uD809\uD80A\uD80B\uD80C\uD80D\uD80E\uD80F' + '\uD810\uD811\uD812\uD813\uD814\uD815\uD816\uD817\uD818\uD819\uD81A\uD81B\uD81C\uD81D\uD81E\uD81F' + '\uD820\uD821\uD822\uD823\uD824\uD825\uD826\uD827\uD828\uD829\uD82A\uD82B\uD82C\uD82D\uD82E\uD82F' + '\uD830\uD831\uD832\uD833\uD834\uD835\uD836\uD837\uD838\uD839\uD83A\uD83B\uD83C\uD83D\uD83E\uD83F' + '\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847\uD848\uD849\uD84A\uD84B\uD84C\uD84D\uD84E\uD84F' + '\uD850\uD851\uD852\uD853\uD854\uD855\uD856\uD857\uD858\uD859\uD85A\uD85B\uD85C\uD85D\uD85E\uD85F' + '\uD860\uD861\uD862\uD863\uD864\uD865\uD866\uD867\uD868\uD869\uD86A\uD86B\uD86C\uD86D\uD86E\uD86F' + '\uD870\uD871\uD872\uD873\uD874\uD875\uD876\uD877\uD878\uD879\uD87A\uD87B\uD87C\uD87D\uD87E\uD87F' + '\uD880\uD881\uD882\uD883\uD884\uD885\uD886\uD887\uD888\uD889\uD88A\uD88B\uD88C\uD88D\uD88E\uD88F' + '\uD890\uD891\uD892\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A\uD89B\uD89C\uD89D\uD89E\uD89F' + '\uD8A0\uD8A1\uD8A2\uD8A3\uD8A4\uD8A5\uD8A6\uD8A7\uD8A8\uD8A9\uD8AA\uD8AB\uD8AC\uD8AD\uD8AE\uD8AF' + '\uD8B0\uD8B1\uD8B2\uD8B3\uD8B4\uD8B5\uD8B6\uD8B7\uD8B8\uD8B9\uD8BA\uD8BB\uD8BC\uD8BD\uD8BE\uD8BF' + '\uD8C0\uD8C1\uD8C2\uD8C3\uD8C4\uD8C5\uD8C6\uD8C7\uD8C8\uD8C9\uD8CA\uD8CB\uD8CC\uD8CD\uD8CE\uD8CF' + '\uD8D0\uD8D1\uD8D2\uD8D3\uD8D4\uD8D5\uD8D6\uD8D7\uD8D8\uD8D9\uD8DA\uD8DB\uD8DC\uD8DD\uD8DE\uD8DF' + '\uD8E0\uD8E1\uD8E2\uD8E3\uD8E4\uD8E5\uD8E6\uD8E7\uD8E8\uD8E9\uD8EA\uD8EB\uD8EC\uD8ED\uD8EE\uD8EF' + '\uD8F0\uD8F1\uD8F2\uD8F3\uD8F4\uD8F5\uD8F6\uD8F7\uD8F8\uD8F9\uD8FA\uD8FB\uD8FC\uD8FD\uD8FE\uD8FF'; forEach(highSurrogates, function (c) { var expected = '\\u' + c.charCodeAt(0).toString(16); st.equal(EncodeForRegExpEscape(codePointStringToNum(c)), expected, 'High surrogate ' + c + ' (' + expected + ') is correctly escaped'); }); // Trailing Surrogates var lowSurrogates = '\uDC00\uDC01\uDC02\uDC03\uDC04\uDC05\uDC06\uDC07\uDC08\uDC09\uDC0A\uDC0B\uDC0C\uDC0D\uDC0E\uDC0F' + '\uDC10\uDC11\uDC12\uDC13\uDC14\uDC15\uDC16\uDC17\uDC18\uDC19\uDC1A\uDC1B\uDC1C\uDC1D\uDC1E\uDC1F' + '\uDC20\uDC21\uDC22\uDC23\uDC24\uDC25\uDC26\uDC27\uDC28\uDC29\uDC2A\uDC2B\uDC2C\uDC2D\uDC2E\uDC2F' + '\uDC30\uDC31\uDC32\uDC33\uDC34\uDC35\uDC36\uDC37\uDC38\uDC39\uDC3A\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F' + '\uDC40\uDC41\uDC42\uDC43\uDC44\uDC45\uDC46\uDC47\uDC48\uDC49\uDC4A\uDC4B\uDC4C\uDC4D\uDC4E\uDC4F' + '\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56\uDC57\uDC58\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\uDC5E\uDC5F' + '\uDC60\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68\uDC69\uDC6A\uDC6B\uDC6C\uDC6D\uDC6E\uDC6F' + '\uDC70\uDC71\uDC72\uDC73\uDC74\uDC75\uDC76\uDC77\uDC78\uDC79\uDC7A\uDC7B\uDC7C\uDC7D\uDC7E\uDC7F' + '\uDC80\uDC81\uDC82\uDC83\uDC84\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uDC8B\uDC8C\uDC8D\uDC8E\uDC8F' + '\uDC90\uDC91\uDC92\uDC93\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B\uDC9C\uDC9D\uDC9E\uDC9F' + '\uDCA0\uDCA1\uDCA2\uDCA3\uDCA4\uDCA5\uDCA6\uDCA7\uDCA8\uDCA9\uDCAA\uDCAB\uDCAC\uDCAD\uDCAE\uDCAF' + '\uDCB0\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF' + '\uDCC0\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8\uDCC9\uDCCA\uDCCB\uDCCC\uDCCD\uDCCE\uDCCF' + '\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC\uDCDD\uDCDE\uDCDF' + '\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4\uDCE5\uDCE6\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE\uDCEF' + '\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\uDCF6\uDCF7\uDCF8\uDCF9\uDCFA\uDCFB\uDCFC\uDCFD\uDCFE\uDCFF'; forEach(lowSurrogates, function (c) { var expected = '\\u' + c.charCodeAt(0).toString(16); st.equal(EncodeForRegExpEscape(codePointStringToNum(c)), expected, 'Low surrogate ' + c + ' (' + expected + ') is correctly escaped'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/EnumerableOwnProperties.js000066400000000000000000000063141516525472400255460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var hasOwn = require('hasown'); var $defineProperty = require('es-define-property'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, actual) { t.ok(year >= 2015, 'ES2015+'); var EnumerableOwnProperties = year >= 2017 ? actual : function EnumerableOwnNames(obj, kind) { if (kind !== 'key') { throw new EvalError('test error: this wrapper should only be invoked with kind `key`'); } return actual(obj); }; forEach(v.primitives, function (nonObject) { t['throws']( function () { EnumerableOwnProperties(nonObject, 'key'); }, debug(nonObject) + ' is not an Object' ); }); if (year >= 2017) { t['throws']( function () { EnumerableOwnProperties({}, 'not key, value, or key+value'); }, TypeError, 'invalid "kind" throws' ); } var Child = function Child() { this.own = {}; }; Child.prototype = { inherited: {} }; var obj = new Child(); t.equal('own' in obj, true, 'has "own"'); t.equal(hasOwn(obj, 'own'), true, 'has own "own"'); t.equal(Object.prototype.propertyIsEnumerable.call(obj, 'own'), true, 'has enumerable "own"'); t.equal('inherited' in obj, true, 'has "inherited"'); t.equal(hasOwn(obj, 'inherited'), false, 'has non-own "inherited"'); t.equal(hasOwn(Child.prototype, 'inherited'), true, 'Child.prototype has own "inherited"'); t.equal(Child.prototype.inherited, obj.inherited, 'Child.prototype.inherited === obj.inherited'); t.equal(Object.prototype.propertyIsEnumerable.call(Child.prototype, 'inherited'), true, 'has enumerable "inherited"'); t.equal('toString' in obj, true, 'has "toString"'); t.equal(hasOwn(obj, 'toString'), false, 'has non-own "toString"'); t.equal(hasOwn(Object.prototype, 'toString'), true, 'Object.prototype has own "toString"'); t.equal(Object.prototype.toString, obj.toString, 'Object.prototype.toString === obj.toString'); // eslint-disable-next-line no-useless-call t.equal(Object.prototype.propertyIsEnumerable.call(Object.prototype, 'toString'), false, 'has non-enumerable "toString"'); t.deepEqual( EnumerableOwnProperties(obj, 'key'), ['own'], 'returns enumerable own ' + (year < 2017 ? 'names' : 'keys') ); if (year >= 2017) { t.deepEqual( EnumerableOwnProperties(obj, 'value'), [obj.own], 'returns enumerable own values' ); t.deepEqual( EnumerableOwnProperties(obj, 'key+value'), [['own', obj.own]], 'returns enumerable own entries' ); t.test('getters changing properties of unvisited entries', { skip: !$defineProperty }, function (st) { var o = { a: 1, b: 2, c: 3, d: 4 }; defineProperty(o, 'a', { enumerable: true, get: function () { defineProperty(o, 'b', { enumerable: false }); return 1; } }); defineProperty(o, 'c', { enumerable: false }); st.deepEqual( EnumerableOwnProperties(o, 'key'), ['a', 'b', 'd'], '`key` kind returns all initially enumerable own keys' ); st.deepEqual( EnumerableOwnProperties(o, 'key+value'), [['a', 1], ['d', 4]], 'key+value returns only own enumerable entries that remain enumerable at the time they are visited' ); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/FindViaPredicate.js000066400000000000000000000056071516525472400240730ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, actual) { t.ok(year >= 2023, 'ES2023+'); var FindViaPredicate = year >= 2024 ? actual : function FindViaPredicate(O, len, direction, predicate, thisArg) { return actual(O, len, direction.toLowerCase(), predicate, thisArg); }; forEach(v.primitives, function (primitive) { t['throws']( function () { FindViaPredicate(primitive, 0, 'ASCENDING', function () {}); }, TypeError, debug(primitive) + ' is not an object' ); }); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { t['throws']( function () { FindViaPredicate({}, notNonNegativeInteger, 'ASCENDING', function () {}); }, TypeError, debug(notNonNegativeInteger) + ' is not a non-negative integer' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { FindViaPredicate({}, 0, 'ASCENDING', nonFunction); }, TypeError, debug(nonFunction) + ' is not a function' ); }); t['throws']( function () { FindViaPredicate({}, 0, 'invalid', function () {}); }, TypeError, 'invalid direction' ); var sentinel = {}; var arr = [1, 2, 3, 4]; var fakeLength = 3; t.test('ascending', function (st) { var expectedIndex = 1; st.plan(((expectedIndex + 1) * 3) + 1); var result = FindViaPredicate(arr, fakeLength, 'ASCENDING', function (element, index, obj) { st.equal(element, arr[index], 'first callback arg is in O, at second callback arg'); st.equal(obj, arr, 'third callback arg is O'); st.equal(this, sentinel, 'callback receiver is thisArg'); return element % 2 === 0; }, sentinel); st.deepEqual(result, { '[[Index]]': expectedIndex, '[[Value]]': 2 }, 'expected result is found'); st.end(); }); t.test('descending', function (st) { var expectedIndex = 3; st.plan((((arr.length - expectedIndex) + 1) * 3) + 1); var result = FindViaPredicate(arr, fakeLength, 'descending', function (element, index, obj) { st.equal(element, arr[index], 'first callback arg is in O, at second callback arg'); st.equal(obj, arr, 'third callback arg is O'); st.equal(this, sentinel, 'callback receiver is thisArg'); return element % 2 === 0; }, sentinel); st.deepEqual(result, { '[[Index]]': 3, '[[Value]]': 4 }, 'expected result is found'); st.end(); }); t.test('not found', function (st) { st.plan((fakeLength * 3) + 1); var result = FindViaPredicate(arr, fakeLength, 'ASCENDING', function (element, index, obj) { st.equal(element, arr[index], 'first callback arg is in O, at second callback arg (' + index + ')'); st.equal(obj, arr, 'third callback arg is O'); st.equal(this, sentinel, 'callback receiver is thisArg'); return false; }, sentinel); st.deepEqual(result, { '[[Index]]': -1, '[[Value]]': void undefined }, 'expected result is produced'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/FlattenIntoArray.js000066400000000000000000000031461516525472400241540ustar00rootroot00000000000000'use strict'; var hasStrictMode = require('has-strict-mode')(); module.exports = function (t, year, FlattenIntoArray) { t.ok(year >= 2019, 'ES2019+'); t.test('no mapper function', function (st) { var testDepth = function testDepth(tt, depth, expected) { var a = []; var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays FlattenIntoArray(a, o, o.length, 0, depth); tt.deepEqual(a, expected, 'depth: ' + depth); }; testDepth(st, 1, [1, 2, [3], 4, [[[5]]]]); testDepth(st, 2, [1, 2, 3, 4, [[5]]]); testDepth(st, 3, [1, 2, 3, 4, [5]]); testDepth(st, 4, [1, 2, 3, 4, 5]); testDepth(st, Infinity, [1, 2, 3, 4, 5]); st.end(); }); t.test('mapper function', function (st) { var testMapper = function testMapper(tt, mapper, expected, thisArg) { var a = []; var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays FlattenIntoArray(a, o, o.length, 0, 1, mapper, thisArg); tt.deepEqual(a, expected); }; st['throws']( function () { var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays FlattenIntoArray([], o, o.length, 0, 1, function () {}); }, TypeError, 'missing thisArg throws' ); var double = function double(x) { return typeof x === 'number' ? 2 * x : x; }; testMapper( st, double, [1, 4, [3], 8, [[[5]]]] ); var receiver = hasStrictMode ? 42 : Object(42); testMapper( st, function (x) { return [this, double(x)]; }, [receiver, [1], receiver, 4, receiver, [[3]], receiver, [], receiver, 8, receiver, [[[[5]]]]], 42 ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/FromPropertyDescriptor.js000066400000000000000000000044611516525472400254360ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, FromPropertyDescriptor) { t.ok(year >= 5, 'ES5+'); t.equal(FromPropertyDescriptor(), undefined, 'no value begets undefined'); t.equal(FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { FromPropertyDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor' ); }); var accessor = v.accessorDescriptor(); var mutator = v.mutatorDescriptor(); var data = v.dataDescriptor(); var generic = v.genericDescriptor(); var fromAccessor = FromPropertyDescriptor(accessor); var fromMutator = FromPropertyDescriptor(mutator); var fromData = FromPropertyDescriptor(data); if (year < 2015) { t.deepEqual(fromAccessor, { get: accessor['[[Get]]'], set: accessor['[[Set]]'], enumerable: !!accessor['[[Enumerable]]'], configurable: !!accessor['[[Configurable]]'] }); t.deepEqual(fromMutator, { get: mutator['[[Get]]'], set: mutator['[[Set]]'], enumerable: !!mutator['[[Enumerable]]'], configurable: !!mutator['[[Configurable]]'] }); t.deepEqual(fromData, { value: data['[[Value]]'], writable: data['[[Writable]]'], enumerable: !!data['[[Enumerable]]'], configurable: !!data['[[Configurable]]'] }); t['throws']( function () { FromPropertyDescriptor(generic); }, TypeError, 'a complete Property Descriptor is required' ); } else { t.deepEqual(fromAccessor, { get: accessor['[[Get]]'], enumerable: !!accessor['[[Enumerable]]'], configurable: !!accessor['[[Configurable]]'] }); t.deepEqual(fromMutator, { set: mutator['[[Set]]'], enumerable: !!mutator['[[Enumerable]]'], configurable: !!mutator['[[Configurable]]'] }); t.deepEqual(fromData, { value: data['[[Value]]'], writable: data['[[Writable]]'] }); t.deepEqual(FromPropertyDescriptor(generic), { enumerable: false, configurable: true }); var both = v.bothDescriptor(); t['throws']( function () { FromPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] }); }, TypeError, 'data and accessor descriptors are mutually exclusive' ); } }; ljharb-es-abstract-babee05/test/methods/GeneratorResume.js000066400000000000000000000034301516525472400240310ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var SLOT = require('internal-slot'); module.exports = function (t, year, GeneratorResume) { t.ok(year >= 2025, 'ES2025+'); var brand = 'brand'; forEach(v.primitives, function (nonObject) { t['throws']( function () { GeneratorResume(nonObject, null, brand); }, TypeError, debug(nonObject) + ' is not an object' ); }); t['throws']( function () { GeneratorResume({}, null, brand); }, TypeError, 'object lacking slots, throws' ); var generator = {}; var state = 'SUSPENDED-START'; SLOT.set(generator, '[[GeneratorState]]', 'not suspended start/yield or completed'); SLOT.set(generator, '[[GeneratorBrand]]', brand); SLOT.set(generator, '[[GeneratorContext]]', null); t['throws']( function () { GeneratorResume(generator, null, brand); }, TypeError, 'generator with bad state, throws' ); SLOT.set(generator, '[[GeneratorState]]', state); t['throws']( function () { GeneratorResume(generator, null, 'not brand'); }, TypeError, 'generator with bad brand, throws' ); var sentinel = { sentinel: true }; var context = function () { return [this, Array.prototype.slice.call(arguments)]; }; SLOT.set(generator, '[[GeneratorContext]]', context); var result = GeneratorResume(generator, sentinel, brand); t.deepEqual( result, [undefined, [sentinel]], 'generator context is called with proper arguments, and return value is proxied through' ); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'EXECUTING', 'state is executing'); SLOT.set(generator, '[[GeneratorState]]', 'COMPLETED'); t.deepEqual( GeneratorResume(generator, 42, brand), { value: undefined, done: true }, 'completed state -> done iter result' ); }; ljharb-es-abstract-babee05/test/methods/GeneratorResumeAbrupt.js000066400000000000000000000103141516525472400252060ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var SLOT = require('internal-slot'); module.exports = function (t, year, GeneratorResumeAbrupt, extras) { t.ok(year >= 2025, 'ES2025+'); var NormalCompletion = extras.getAO('NormalCompletion'); var ReturnCompletion = extras.getAO('ReturnCompletion'); var ThrowCompletion = extras.getAO('ThrowCompletion'); var brand = 'brand'; var completion = ThrowCompletion(42); forEach(v.primitives, function (nonObject) { t['throws']( function () { GeneratorResumeAbrupt(nonObject, completion, brand); }, TypeError, debug(nonObject) + ' is not an object' ); }); t['throws']( function () { GeneratorResumeAbrupt({}, completion, brand); }, TypeError, 'object lacking slots, throws' ); var generator = {}; var state = 'SUSPENDED-YIELD'; SLOT.set(generator, '[[GeneratorState]]', 'not suspended start/yield or completed'); SLOT.set(generator, '[[GeneratorBrand]]', brand); SLOT.set(generator, '[[GeneratorContext]]', null); t['throws']( function () { GeneratorResumeAbrupt(generator, completion, brand); }, TypeError, 'generator with bad state, throws' ); SLOT.set(generator, '[[GeneratorState]]', state); t['throws']( function () { GeneratorResumeAbrupt(generator, completion, 'not brand'); }, TypeError, 'generator with bad brand, throws' ); t['throws']( function () { GeneratorResumeAbrupt(generator, NormalCompletion(), brand); }, TypeError, 'generator with bad completion type, throws' ); var context = t.captureFn(function () { return [this, Array.prototype.slice.call(arguments)]; }); SLOT.set(generator, '[[GeneratorContext]]', context); var result = GeneratorResumeAbrupt(generator, completion, brand); t.deepEqual( result, [undefined, [42]], 'generator context is called with proper arguments, and return value is proxied through' ); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'EXECUTING', 'state is executing'); t.deepEqual( context.calls, [ { args: [42], receiver: undefined, returned: [undefined, [42]] } ], 'context is called with proper arguments' ); context.calls.length = 0; SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-YIELD'); var sentinel = { sentinel: true }; var cIA = t.captureFn(function () { return sentinel; }); SLOT.set(generator, '[[CloseIfAbrupt]]', cIA); t.deepEqual( GeneratorResumeAbrupt(generator, ReturnCompletion(42), brand), { value: sentinel, done: true }, 'generator with return completion -> done iter result' ); // test re-entrant return() throws TypeError var reentrantGenerator = {}; SLOT.set(reentrantGenerator, '[[GeneratorState]]', 'SUSPENDED-YIELD'); SLOT.set(reentrantGenerator, '[[GeneratorBrand]]', brand); SLOT.set(reentrantGenerator, '[[GeneratorContext]]', null); var enterCount = 0; var reentrantCloseIfAbrupt = function () { enterCount += 1; if (enterCount > 1) { // guard against infinite recursion in case the fix is not applied throw new RangeError('re-entrant call was not prevented'); } // re-entrant call while generator is executing GeneratorResumeAbrupt(reentrantGenerator, ReturnCompletion(undefined), brand); return { sentinel: true }; }; SLOT.set(reentrantGenerator, '[[CloseIfAbrupt]]', reentrantCloseIfAbrupt); t.equal(enterCount, 0, 'closeIfAbrupt not called yet'); t['throws']( function () { GeneratorResumeAbrupt(reentrantGenerator, ReturnCompletion(42), brand); }, TypeError, 'throws TypeError when return() is called re-entrantly during [[CloseIfAbrupt]]' ); t.equal(enterCount, 1, 'closeIfAbrupt was entered exactly once before throwing'); SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-START'); t['throws']( function () { GeneratorResumeAbrupt(generator, completion, brand); }, 42, 'SUSPENDED-START with throw completion transitions to COMPLETED then throws' ); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'COMPLETED', 'state is completed'); t.equal(SLOT.get(generator, '[[GeneratorContext]]'), null, 'context is unset'); t.deepEqual( GeneratorResumeAbrupt(generator, ReturnCompletion(42), brand), { value: 42, done: true }, 'COMPLETED state with return completion -> done iter result' ); }; ljharb-es-abstract-babee05/test/methods/GeneratorStart.js000066400000000000000000000056001516525472400236670ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var SLOT = require('internal-slot'); module.exports = function (t, year, GeneratorStart, extras) { t.ok(year >= 2025, 'ES2025+'); var CreateIteratorResultObject = extras.getAO('CreateIteratorResultObject'); var sentinel = {}; var generator = {}; SLOT.set(generator, '[[Sentinel]]', null); SLOT.set(generator, '[[CloseIfAbrupt]]', null); SLOT.set(generator, '[[GeneratorState]]', null); SLOT.set(generator, '[[GeneratorContext]]', null); SLOT.set(generator, '[[GeneratorBrand]]', null); var retValue; var closure = t.captureFn(function () { return retValue(); }); SLOT.set(closure, '[[Sentinel]]', sentinel); forEach(v.primitives, function (primitive) { t['throws']( function () { GeneratorStart(primitive, closure); }, TypeError, 'generator: ' + debug(primitive) + ' is not an Object' ); SLOT.set(closure, '[[Sentinel]]', primitive); t['throws']( function () { GeneratorStart(generator, closure); }, TypeError, 'closure [[Sentinel]]: ' + debug(primitive) + ' is not an Object' ); }); SLOT.set(closure, '[[Sentinel]]', sentinel); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { GeneratorStart(generator, nonFunction); }, TypeError, 'closure: ' + debug(nonFunction) + ' is not a function' ); }); t.equal(SLOT.get(generator, '[[GeneratorState]]'), null, 'precondition'); GeneratorStart(generator, closure); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'SUSPENDED-START', 'generator state is started'); var context = SLOT.get(generator, '[[GeneratorContext]]'); t.equal(typeof context, 'function', 'generator context is a function'); t.deepEqual(closure.calls, [], 'closure not called yet'); retValue = function () { return 42; }; t.deepEqual(context(), CreateIteratorResultObject(42, false), 'generator context returns expected iterator result'); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'SUSPENDED-YIELD', 'generator state is suspended-yield'); retValue = function () { return sentinel; }; t.deepEqual(context(), CreateIteratorResultObject(void undefined, true), 'generator context returns done iterator result'); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'COMPLETED', 'generator state is completed'); t.equal(SLOT.get(generator, '[[GeneratorContext]]'), null, 'generator context is now null'); // wind state back SLOT.set(generator, '[[GeneratorState]]', 'SUSPENDED-YIELD'); SLOT.set(generator, '[[GeneratorContext]]', context); retValue = function () { throw new EvalError('42'); }; t['throws']( function () { context(); }, EvalError, 'generator context throws' ); t.equal(SLOT.get(generator, '[[GeneratorState]]'), 'COMPLETED', 'generator state is again completed'); t.equal(SLOT.get(generator, '[[GeneratorContext]]'), null, 'generator context is again null'); }; ljharb-es-abstract-babee05/test/methods/GeneratorValidate.js000066400000000000000000000022771516525472400243320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var SLOT = require('internal-slot'); module.exports = function (t, year, GeneratorValidate) { t.ok(year >= 2025, 'ES2025+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { GeneratorValidate(nonObject, ''); }, TypeError, debug(nonObject) + ' is not an object' ); }); t['throws']( function () { GeneratorValidate({}, ''); }, TypeError, 'object lacking slots, throws' ); var generator = {}; var brand = 'brand'; var state = 'literally anything but EXECUTING'; SLOT.set(generator, '[[GeneratorState]]', state); SLOT.set(generator, '[[GeneratorBrand]]', brand); SLOT.set(generator, '[[GeneratorContext]]', null); t['throws']( function () { GeneratorValidate(generator, ''); }, TypeError, 'generator with bad brand, throws' ); t.equal(GeneratorValidate(generator, brand), state, 'generator with good brand and state, returns state'); SLOT.set(generator, '[[GeneratorState]]', 'EXECUTING'); t['throws']( function () { GeneratorValidate(generator, brand); }, TypeError, 'generator with executing state, throws' ); }; ljharb-es-abstract-babee05/test/methods/Get.js000066400000000000000000000013531516525472400214430ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, Get) { t.ok(year >= 2015, 'ES2015+'); t['throws'](function () { return Get('a', 'a'); }, TypeError, 'Throws a TypeError if `O` is not an Object'); t['throws'](function () { return Get({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key'); if (year >= 2015) { var sentinel = {}; t.test('Symbols', { skip: !v.hasSymbols }, function (st) { var sym = Symbol('sym'); var obj = {}; obj[sym] = sentinel; st.equal(Get(obj, sym), sentinel, 'returns property `P` if it exists on object `O`'); st.end(); }); t.equal(Get({ a: sentinel }, 'a'), sentinel, 'returns property `P` if it exists on object `O`'); } }; ljharb-es-abstract-babee05/test/methods/GetArrayBufferMaxByteLengthOption.js000066400000000000000000000016001516525472400274140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, GetArrayBufferMaxByteLengthOption) { t.ok(year >= 2024, 'ES2024+'); forEach(v.primitives, function (nonObject) { t.equal(GetArrayBufferMaxByteLengthOption(nonObject), 'EMPTY', debug(nonObject) + ' is not an Object, returns ~EMPTY~'); }); t.equal(GetArrayBufferMaxByteLengthOption({}), 'EMPTY', 'absent `maxByteLength` yields ~EMPTY~'); t.equal(GetArrayBufferMaxByteLengthOption({ maxByteLength: undefined }), 'EMPTY', 'undefined `maxByteLength` yields ~EMPTY~'); t.equal(GetArrayBufferMaxByteLengthOption({ maxByteLength: 42 }), 42, '42 `maxByteLength` yields 42'); t.equal(GetArrayBufferMaxByteLengthOption({ maxByteLength: { valueOf: function () { return 42; } } }), 42, 'valueOf -> 42 `maxByteLength` yields 42'); }; ljharb-es-abstract-babee05/test/methods/GetGlobalObject.js000066400000000000000000000002541516525472400237120ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, GetGlobalObject) { t.ok(year >= 2015, 'ES2015+'); t.equal(GetGlobalObject(), global, 'returns the global object'); }; ljharb-es-abstract-babee05/test/methods/GetIterator.js000066400000000000000000000125561516525472400231640ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var testIterator = require('../helpers/testIterator'); var testAsyncIterator = require('../helpers/testAsyncIterator'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); module.exports = function (t, year, actual) { t.ok(year >= 2015, 'ES2015+'); var arr = [1, 2]; var unwrap = function (result) { return year >= 2023 ? result['[[Iterator]]'] : result; }; var GetIterator = year >= 2020 ? actual : function GetIterator(obj, hint, method) { if (arguments.length > 2) { return actual(obj, method); } return actual(obj); }; var hintS = year < 2024 ? 'sync' : 'SYNC'; var hintA = year < 2024 ? 'async' : 'ASYNC'; testIterator(t, unwrap(GetIterator(arr, hintS)), arr); testIterator(t, unwrap(GetIterator('abc', hintS)), 'abc'.split('')); var sentinel = {}; forEach(v.primitives, function (nonObject) { var method = function () { return nonObject; }; t['throws']( function () { GetIterator(sentinel, hintS, method); }, TypeError, debug(nonObject) + ' is not an Object; iterator method must return an Object' ); }); var i = 0; var manualMethod = function () { t.equal(this, sentinel, 'receiver is expected object'); return { next: function () { var value = arr[i]; i += 1; return { done: i > arr.length, value: value }; } }; }; if (year >= 2023 && v.hasSymbols) { sentinel[Symbol.iterator] = manualMethod; testIterator(t, unwrap(GetIterator(sentinel, hintS, manualMethod)), arr); } t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) { var m = new Map(); m.set(1, 'a'); m.set(2, 'b'); testIterator(st, unwrap(GetIterator(m, hintS)), [[1, 'a'], [2, 'b']]); forEach(v.primitives, function (nonObject) { var badIterable = {}; badIterable[Symbol.iterator] = function () { return nonObject; }; st['throws']( function () { GetIterator(unwrap(badIterable), hintS); }, TypeError, debug(nonObject) + ' is not an Object; iterator method must return an Object' ); }); st.end(); }); if (year >= 2020) { try { GetIterator({}, 'null'); } catch (e) { t.ok(e.message.indexOf('Assertion failed: `hint` must be one of \'sync\' or \'async\'' >= 0)); } t.test('no Symbol.asyncIterator', { skip: !v.hasSymbols || Symbol.asyncIterator }, function (st) { if (year < 2023) { st['throws']( function () { GetIterator(arr, hintA); }, SyntaxError, 'async from sync iterators are not currently supported' ); st.end(); } else { return testAsyncIterator(st, GetIterator(arr, hintA), arr); } return void undefined; }); t.test('Symbol.asyncIterator', { skip: !v.hasSymbols || !Symbol.asyncIterator }, function (st) { if (year < 2024) { try { GetIterator(arr, hintA); } catch (e) { st.ok(e.message.indexOf("async from sync iterators aren't currently supported") >= 0); } } var it = { next: function () { return Promise.resolve({ done: true }); } }; var obj = {}; obj[Symbol.asyncIterator] = function () { return it; }; st.deepEqual(GetIterator(obj, hintA), year >= 2023 ? makeIteratorRecord(it) : it); forEach(v.primitives, function (primitive) { var badObj = {}; badObj[Symbol.asyncIterator] = function () { return primitive; }; st['throws']( function () { GetIterator(badObj, hintA); }, TypeError, debug(primitive) + ' is not an Object' ); }); st.end(); }); } if (year >= 2023) { t['throws']( function () { GetIterator({}, hintS); }, TypeError, 'sync hint: undefined iterator method throws' ); t['throws']( function () { GetIterator({}, hintA); }, TypeError, 'async hint: undefined iterator method throws' ); t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) { var m = new Map(); m.set(1, 'a'); m.set(2, 'b'); var syncRecord = GetIterator(m, hintS); testIterator(st, syncRecord['[[Iterator]]'], [[1, 'a'], [2, 'b']]); var asyncRecord = GetIterator(m, hintA); return testAsyncIterator(st, asyncRecord['[[Iterator]]'], [[1, 'a'], [2, 'b']]); }); t.test('Symbol.asyncIterator', { skip: !v.hasSymbols || !Symbol.asyncIterator }, function (st) { st.test('an async iteratable returning a sync iterator', function (s2t) { var it = { next: function nextFromTest() { return Promise.resolve({ done: true }); } }; var obj = {}; obj[Symbol.asyncIterator] = function () { return it; }; var asyncIterator = GetIterator(obj, hintA); s2t.deepEqual(asyncIterator, makeIteratorRecord(it)); s2t.end(); }); st.test('a throwing async iterator', function (s2t) { var asyncIterable = {}; asyncIterable[Symbol.asyncIterator] = function () { var j = 0; return { next: function next() { if (j > 4) { throw sentinel; } try { return { done: j > 5, value: j }; } finally { j += 1; } } }; }; var iteratorRecord = GetIterator(asyncIterable, hintA); return testAsyncIterator( s2t, iteratorRecord['[[Iterator]]'], [0, 1, 2, 3, 4, 5] )['catch'](function (e) { if (e !== sentinel) { throw e; } }); }); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/GetIteratorDirect.js000066400000000000000000000011321516525472400243030ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, GetIteratorDirect) { t.ok(year >= 2025, 'ES2025+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { GetIteratorDirect(nonObject); }, TypeError, debug(nonObject) + ' is not an object' ); }); var nextMethod = { nextMethod: true }; var obj = { next: nextMethod }; t.deepEqual( GetIteratorDirect(obj), { '[[Iterator]]': obj, '[[NextMethod]]': nextMethod, '[[Done]]': false } ); }; ljharb-es-abstract-babee05/test/methods/GetIteratorFlattenable.js000066400000000000000000000077141516525472400253260ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var isObject = require('es-object-atoms/isObject'); module.exports = function (t, year, GetIteratorFlattenable) { t.ok(year >= 2025, 'ES2025+'); t['throws']( function () { GetIteratorFlattenable({}, 'bad enum value'); }, TypeError, 'bad enum value throws' ); forEach(v.nonObjects, function (primitive) { t['throws']( function () { GetIteratorFlattenable(primitive, 'REJECT-PRIMITIVES'); }, TypeError, 'REJECT-PRIMITIVES: ' + debug(primitive) + ' is not an object' ); }); forEach(v.nonStrings, function (nonString) { if (!isObject(nonString)) { t['throws']( function () { GetIteratorFlattenable(nonString, 'ITERATE-STRING-PRIMITIVES'); }, TypeError, 'ITERATE-STRING-PRIMITIVES + nonStrings: ' + debug(nonString) + ' is a primitive and not a string' ); } }); t.test('string iterator', function (st) { var stringIter = GetIteratorFlattenable('abc', 'ITERATE-STRING-PRIMITIVES'); st.deepEqual( stringIter, { '[[Iterator]]': stringIter['[[Iterator]]'], '[[NextMethod]]': stringIter['[[NextMethod]]'], '[[Done]]': false }, 'returns string’s iterator record' ); st.equal(typeof stringIter['[[NextMethod]]'], 'function', 'next method is a function'); var a = stringIter['[[NextMethod]]'].call(stringIter['[[Iterator]]']); st.deepEqual(a, { value: 'a', done: false }, 'first next method call returns the expected iterator result'); var b = stringIter['[[NextMethod]]'].call(stringIter['[[Iterator]]']); st.deepEqual(b, { value: 'b', done: false }, 'second next method call returns the expected iterator result'); var c = stringIter['[[NextMethod]]'].call(stringIter['[[Iterator]]']); st.deepEqual(c, { value: 'c', done: false }, 'third next method call returns the expected iterator result'); var d = stringIter['[[NextMethod]]'].call(stringIter['[[Iterator]]']); st.deepEqual(d, { value: void undefined, done: true }, 'fourth next method call returns the expected final iterator result'); st.end(); }); t.test('array iterator', function (st) { var iterable = [1, 2, 3]; var result = GetIteratorFlattenable(iterable, 'REJECT-PRIMITIVES'); st.deepEqual( result, { '[[Iterator]]': result['[[Iterator]]'], '[[NextMethod]]': result['[[NextMethod]]'], '[[Done]]': false }, 'returns iterable’s iterator record' ); st.equal(typeof result['[[NextMethod]]'], 'function', 'next method is a function'); var a = result['[[NextMethod]]'].call(result['[[Iterator]]']); st.deepEqual(a, { value: 1, done: false }, 'first next method call returns the expected iterator result'); var b = result['[[NextMethod]]'].call(result['[[Iterator]]']); st.deepEqual(b, { value: 2, done: false }, 'second next method call returns the expected iterator result'); var c = result['[[NextMethod]]'].call(result['[[Iterator]]']); st.deepEqual(c, { value: 3, done: false }, 'third next method call returns the expected iterator result'); var d = result['[[NextMethod]]'].call(result['[[Iterator]]']); st.deepEqual(d, { value: void undefined, done: true }, 'fourth next method call returns the expected final iterator result'); st.end(); }); var nonIterable = { nonIterable: true }; var result = GetIteratorFlattenable(nonIterable, 'REJECT-PRIMITIVES'); t.deepEqual( result, { '[[Iterator]]': nonIterable, '[[NextMethod]]': undefined, '[[Done]]': false }, 'returns non-iterable’s iterator record' ); t.test('iterable with a bad next method', { skip: !v.hasSymbols }, function (st) { forEach(v.primitives, function (primitive) { var next = function () { return primitive; }; var iterable = {}; iterable[Symbol.iterator] = next; st['throws']( function () { GetIteratorFlattenable(iterable, 'REJECT-PRIMITIVES'); }, TypeError, 'an iterable’s next method returned ' + debug(primitive) + ' instead of an object' ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GetIteratorFromMethod.js000066400000000000000000000021621516525472400251410ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, GetIteratorFromMethod) { t.ok(year >= 2023, 'ES2023+'); forEach(v.nonFunctions, function (nonCallable) { t['throws']( function () { GetIteratorFromMethod(null, nonCallable); }, TypeError, debug(nonCallable) + ' is not callable' ); }); var sentinel = {}; forEach(v.primitives, function (nonObject) { t['throws']( function () { GetIteratorFromMethod(sentinel, function () { return nonObject; }); }, TypeError, 'method return value, ' + debug(nonObject) + ', is not an object' ); }); var iterator = { next: function next() { } }; var iteratorRecord = GetIteratorFromMethod(sentinel, function () { t.equal(this, sentinel, 'method is called with the correct this value'); t.equal(arguments.length, 0, 'method is called with no arguments'); return iterator; }); t.deepEqual( iteratorRecord, { '[[Iterator]]': iterator, '[[NextMethod]]': iterator.next, '[[Done]]': false }, 'iterator record is correct' ); }; ljharb-es-abstract-babee05/test/methods/GetMatchIndexPair.js000066400000000000000000000026641516525472400242320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, GetMatchIndexPair) { t.ok(year >= 2022, 'ES2022+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return GetMatchIndexPair(notString); }, TypeError, debug(notString) + ' is not a string' ); }); forEach([].concat( esV.unknowns, { '[[StartIndex]]': -1 }, { '[[StartIndex]]': 1.2, '[[EndIndex]]': 0 }, { '[[StartIndex]]': 1, '[[EndIndex]]': 0 } ), function (notMatchRecord) { t['throws']( function () { return GetMatchIndexPair('', notMatchRecord); }, TypeError, debug(notMatchRecord) + ' is not a Match Record' ); }); var invalidStart = { '[[StartIndex]]': 1, '[[EndIndex]]': 2 }; t['throws']( function () { return GetMatchIndexPair('', invalidStart); }, TypeError, debug(invalidStart) + ' has a [[StartIndex]] that is > the length of the string' ); var invalidEnd = { '[[StartIndex]]': 0, '[[EndIndex]]': 1 }; t['throws']( function () { return GetMatchIndexPair('', invalidEnd); }, TypeError, debug(invalidEnd) + ' has an [[EndIndex]] that is > the length of the string' ); t.deepEqual( GetMatchIndexPair('', { '[[StartIndex]]': 0, '[[EndIndex]]': 0 }), [0, 0] ); t.deepEqual( GetMatchIndexPair('abc', { '[[StartIndex]]': 1, '[[EndIndex]]': 2 }), [1, 2] ); }; ljharb-es-abstract-babee05/test/methods/GetMatchString.js000066400000000000000000000026201516525472400236050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, GetMatchString) { t.ok(year >= 2022, 'ES2022+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return GetMatchString(notString); }, TypeError, debug(notString) + ' is not a string' ); }); forEach([].concat( esV.unknowns, { '[[StartIndex]]': -1 }, { '[[StartIndex]]': 1.2, '[[EndIndex]]': 0 }, { '[[StartIndex]]': 1, '[[EndIndex]]': 0 } ), function (notMatchRecord) { t['throws']( function () { return GetMatchString('', notMatchRecord); }, TypeError, debug(notMatchRecord) + ' is not a Match Record' ); }); var invalidStart = { '[[StartIndex]]': 1, '[[EndIndex]]': 2 }; t['throws']( function () { return GetMatchString('', invalidStart); }, TypeError, debug(invalidStart) + ' has a [[StartIndex]] that is > the length of the string' ); var invalidEnd = { '[[StartIndex]]': 0, '[[EndIndex]]': 1 }; t['throws']( function () { return GetMatchString('', invalidEnd); }, TypeError, debug(invalidEnd) + ' has an [[EndIndex]] that is > the length of the string' ); t.equal( GetMatchString('', { '[[StartIndex]]': 0, '[[EndIndex]]': 0 }), '' ); t.equal( GetMatchString('abc', { '[[StartIndex]]': 1, '[[EndIndex]]': 2 }), 'b' ); }; ljharb-es-abstract-babee05/test/methods/GetMethod.js000066400000000000000000000020501516525472400225770ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, GetMethod) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { return GetMethod({}, nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t['throws'](function () { return GetMethod({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key'); t.equal(GetMethod({}, 'a'), undefined, 'returns undefined in property is undefined'); t.equal(GetMethod({ a: null }, 'a'), undefined, 'returns undefined if property is null'); t.equal(GetMethod({ a: undefined }, 'a'), undefined, 'returns undefined if property is undefined'); var obj = { a: function () {} }; t['throws'](function () { GetMethod({ a: 'b' }, 'a'); }, TypeError, 'throws TypeError if property exists and is not callable'); t.equal(GetMethod(obj, 'a'), obj.a, 'returns property if it is callable'); }; ljharb-es-abstract-babee05/test/methods/GetNamedTimeZoneEpochNanoseconds.js000066400000000000000000000142011516525472400272310ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, GetNamedTimeZoneEpochNanoseconds) { t.ok(year >= 2023, 'ES2023+'); var UTC = 'UTC'; t.test('invalid values', function (st) { forEach(v.nonStrings, function (nonString) { st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(nonString, 0, 1, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'timeZoneIdentifier: ' + debug(nonString) + ' is not a string' ); }); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds('America/Los_Angeles', 0, 1, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'timeZoneIdentifier: UTC is the only supported time zone identifier' // TODO: support 402 modifications here? ); forEach(esV.notInts, function (nonInteger) { st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, nonInteger, 1, 1, 0, 0, 0, 0, 0, 0, 0); }, TypeError, 'year: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, nonInteger, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 0, nonInteger, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, nonInteger, 0, 0, 0, 0, 0); }, TypeError, 'hour: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, nonInteger, 0, 0, 0, 0); }, TypeError, 'minute: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, nonInteger, 0, 0, 0); }, TypeError, 'second: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, nonInteger, 0, 0); }, TypeError, 'millisecond: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, nonInteger, 0); }, TypeError, 'microsecond: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, 0, nonInteger); }, TypeError, 'nanosecond: ' + debug(nonInteger) + ' is not a valid integer' ); }); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 0, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: 0 is not a valid integer between 1 and 12, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 13, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: 13 is not a valid integer between 1 and 12, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 0, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: 0 is not a valid integer between 1 and 31, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 32, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: 32 is not a valid integer between 1 and 31, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, -1, 0, 0, 0, 0, 0); }, TypeError, 'hour: -1 is not a valid integer between 0 and 23, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 24, 0, 0, 0, 0, 0); }, TypeError, 'hour: 24 is not a valid integer between 0 and 23, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, -1, 0, 0, 0, 0); }, TypeError, 'minute: -1 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 60, 0, 0, 0, 0); }, TypeError, 'minute: 60 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, -1, 0, 0, 0); }, TypeError, 'second: -1 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 60, 0, 0, 0); }, TypeError, 'second: 60 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, -1, 0, 0); }, TypeError, 'millisecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 1000, 0, 0); }, TypeError, 'millisecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, -1, 0); }, TypeError, 'microsecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, 1000, 0); }, TypeError, 'microsecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, 0, -1); }, TypeError, 'nanosecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 0, 1, 1, 0, 0, 0, 0, 0, 1000); }, TypeError, 'nanosecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st.end(); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { st.deepEqual( GetNamedTimeZoneEpochNanoseconds(UTC, 2025, 5, 19, 14, 45, 2, 0, 0, 0), [BigInt(1747665902000000000)], '2025-05-19T14:45:02.000000000Z' ); st.end(); }); t.test('no BigInts', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { GetNamedTimeZoneEpochNanoseconds(UTC, 2025, 5, 19, 14, 45, 2, 0, 0, 0); }, SyntaxError, 'BigInts are not supported in this environment' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GetOwnPropertyKeys.js000066400000000000000000000027271516525472400245360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, GetOwnPropertyKeys) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { GetOwnPropertyKeys(primitive, 'String'); }, TypeError, 'O: ' + debug(primitive) + ' is not an Object' ); }); t['throws']( function () { GetOwnPropertyKeys({}, 'not string or symbol'); }, TypeError, 'Type: must be "String" or "Symbol"' ); t.test('Symbols', { skip: !v.hasSymbols }, function (st) { var O = { a: 1 }; O[Symbol.iterator] = true; var s = Symbol('test'); defineProperty(O, s, { enumerable: false, value: true }); st.deepEqual( GetOwnPropertyKeys(O, 'Symbol'), [Symbol.iterator, s], 'works with Symbols, enumerable or not' ); st.end(); }); t.test('non-enumerable names', { skip: !$defineProperty }, function (st) { var O = { a: 1 }; defineProperty(O, 'b', { enumerable: false, value: 2 }); if (v.hasSymbols) { O[Symbol.iterator] = true; } st.deepEqual( GetOwnPropertyKeys(O, 'String').sort(), ['a', 'b'].sort(), 'works with Strings, enumerable or not' ); st.end(); }); t.deepEqual( GetOwnPropertyKeys({ a: 1, b: 2 }, 'String').sort(), ['a', 'b'].sort(), 'works with enumerable keys' ); }; ljharb-es-abstract-babee05/test/methods/GetPromiseResolve.js000066400000000000000000000021051516525472400243360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, GetPromiseResolve) { t.ok(year >= 2021, 'ES2021+'); forEach([].concat( v.nonFunctions, v.nonConstructorFunctions ), function (nonConstructor) { t['throws']( function () { GetPromiseResolve(nonConstructor); }, TypeError, debug(nonConstructor) + ' is not a constructor' ); }); forEach(v.nonFunctions, function (nonCallable) { var C = function C() {}; C.resolve = nonCallable; t['throws']( function () { GetPromiseResolve(C); }, TypeError, '`resolve` method: ' + debug(nonCallable) + ' is not callable' ); }); t.test('Promises supported', { skip: typeof Promise !== 'function' }, function (st) { st.equal(GetPromiseResolve(Promise), Promise.resolve, '`GetPromiseResolve(Promise) === Promise.resolve`'); st.end(); }); var C = function () {}; var resolve = function () {}; C.resolve = resolve; t.equal(GetPromiseResolve(C), resolve, 'returns a callable `resolve` property'); }; ljharb-es-abstract-babee05/test/methods/GetPrototypeFromConstructor.js000066400000000000000000000024401516525472400264610ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var arrowFns = require('make-arrow-function').list(); module.exports = function (t, year, GetPrototypeFromConstructor) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { GetPrototypeFromConstructor(nonFunction, '%Array%'); }, TypeError, debug(nonFunction) + ' is not a constructor' ); }); forEach(arrowFns, function (arrowFn) { t['throws']( function () { GetPrototypeFromConstructor(arrowFn, '%Array%'); }, TypeError, debug(arrowFn) + ' is not a constructor' ); }); t['throws']( function () { GetPrototypeFromConstructor(function () {}, '%Number.MAX_VALUE%'); }, TypeError, 'a non-object default intrinsic throws' ); var f = function () {}; t.equal( GetPrototypeFromConstructor(f, '%Array.prototype%'), f.prototype, 'function with normal `prototype` property returns it' ); forEach([true, 'foo', 42], function (truthyPrimitive) { f.prototype = truthyPrimitive; t.equal( GetPrototypeFromConstructor(f, '%Array.prototype%'), Array.prototype, 'function with non-object `prototype` property (' + debug(truthyPrimitive) + ') returns default intrinsic' ); }); }; ljharb-es-abstract-babee05/test/methods/GetSetRecord.js000066400000000000000000000030521516525472400232540ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, GetSetRecord) { t.ok(year >= 2025, 'ES2025+'); forEach(v.primitives, function (primitive) { t['throws']( function () { GetSetRecord(primitive); }, TypeError, debug(primitive) + ' is not an object' ); }); var keys = function () {}; var has = function () {}; var obj = { size: null, has: has, keys: keys }; forEach([{ valueOf: function () { return 'a'; } }, NaN], function (nonNaNNonNumber) { obj.size = nonNaNNonNumber; t['throws']( function () { GetSetRecord(obj); }, TypeError, debug(obj) + ' has a size that coerces to "not a non-NaN number" (' + debug(+nonNaNNonNumber) + ')' ); }); obj.size = -1; t['throws']( function () { GetSetRecord(obj); }, RangeError, debug(obj) + ' has a negative size' ); obj.size = 0; forEach(v.nonFunctions, function (nonFunction) { obj.has = nonFunction; obj.keys = keys; t['throws']( function () { GetSetRecord(obj); }, TypeError, debug(obj) + ' has a `has` that is not callable (' + debug(nonFunction) + ')' ); obj.has = has; obj.keys = nonFunction; t['throws']( function () { GetSetRecord(obj); }, TypeError, debug(obj) + ' has a `keys` that is not callable (' + debug(nonFunction) + ')' ); }); obj.keys = keys; t.deepEqual( GetSetRecord(obj), { '[[SetObject]]': obj, '[[Size]]': 0, '[[Has]]': has, '[[Keys]]': keys }, 'returns the expected object' ); }; ljharb-es-abstract-babee05/test/methods/GetStringIndex.js000066400000000000000000000022161516525472400236210ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, GetStringIndex) { t.ok(year >= 2022, 'ES2022+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return GetStringIndex(notString); }, TypeError, '`S`: ' + debug(notString) + ' is not a string' ); }); forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { t['throws']( function () { GetStringIndex('', nonNonNegativeInteger); }, TypeError, '`e`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer' ); }); var strWithWholePoo = 'a' + esV.poo.whole + 'c'; t.equal(GetStringIndex(strWithWholePoo, 0), 0, 'index 0 yields 0'); t.equal(GetStringIndex(strWithWholePoo, 1), 1, 'index 1 yields 1'); t.equal(GetStringIndex(strWithWholePoo, 2), 3, 'index 2 yields 3'); t.equal(GetStringIndex(strWithWholePoo, 3), 4, 'index 3 yields 4'); t.equal(GetStringIndex('', 0), 0, 'index 0 yields 0 on empty string'); t.equal(GetStringIndex('', 1), 0, 'index 1 yields 0 on empty string'); }; ljharb-es-abstract-babee05/test/methods/GetSubstitution.js000066400000000000000000000162251516525472400241040ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var hasNamedCaptures = require('has-named-captures')(); module.exports = function (t, year, actual) { t.ok(year >= 2015, 'ES2015+'); var GetSubstitution = function (matched, str, position, captures, namedCaptures, replacement) { if (year < 2018) { // ES2018 spliced in `namedCaptures` :-( return actual(matched, str, position, captures, replacement); } return actual(matched, str, position, captures, namedCaptures, replacement); }; forEach(v.nonStrings, function (nonString) { t['throws']( function () { GetSubstitution(nonString, '', 0, [], undefined, ''); }, TypeError, '`matched`: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { GetSubstitution('', nonString, 0, [], undefined, ''); }, TypeError, '`str`: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { GetSubstitution('', '', 0, [], undefined, nonString); }, TypeError, '`replacement`: ' + debug(nonString) + ' is not a String' ); if (typeof nonString !== 'undefined') { t['throws']( function () { GetSubstitution('', '', 0, [nonString], undefined, ''); }, TypeError, '`captures`: ' + debug([nonString]) + ' is not an Array of strings' + (year < 2018 ? ' or `undefined`' : '') ); } }); forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { t['throws']( function () { GetSubstitution('', '', nonNonNegativeInteger, [], undefined, ''); }, TypeError, '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { GetSubstitution('', '', 0, nonArray, undefined, ''); }, TypeError, '`captures`: ' + debug(nonArray) + ' is not an Array' ); }); t.equal( GetSubstitution('def', 'abcdefghi', 3, [], undefined, '123'), '123', 'returns the substitution' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '$$2$'), '$2$', 'supports $$, and trailing $' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$&<'), '>abcdef<', 'supports $&' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$`<'), '><', 'supports $` at position 0' ); t.equal( GetSubstitution('def', 'abcdefghi', 3, [], undefined, '>$`<'), year < 2022 ? '>ab<' : '>abc<', 'supports $` at position > 0' ); // https://github.com/tc39/ecma262/pull/2484#discussion_r684725247 t.equal( GetSubstitution('1234567', 'abc', 0, [], undefined, ">$'<"), '><', 'match is longer than the input string' ); t.equal( GetSubstitution('x', 'abc', 3, [], undefined, ">$'<"), '><', 'nonempty match at the end of the input string' ); t.equal( GetSubstitution('def', 'abcdefghi', 7, [], undefined, ">$'<"), '><', "supports $' at a position where there's less than `matched.length` chars left" ); t.equal( GetSubstitution('def', 'abcdefghi', 3, [], undefined, ">$'<"), '>ghi<', "supports $' at a position where there's more than `matched.length` chars left" ); for (var i = 0; i < 100; i += 1) { var captures = []; captures[i] = 'test'; if (i > 0) { t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i + '<'), year < 2022 ? '>undefined<' : '>$' + i + '<', 'supports $' + i + ' with no captures' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i), year < 2022 ? '>undefined' : '>$' + i, 'supports $' + i + ' at the end of the replacement, with no captures' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i + '<'), year === 2022 && i < 10 ? '>$' + i + '<' : '><', 'supports $' + i + ' with a capture at that index' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i), '>', 'supports $' + i + ' at the end of the replacement, with a capture at that index' ); } if (i < 10) { t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i + '<'), year < 2022 ? i === 0 ? '><' : '>undefined<' : '>$0' + i + '<', 'supports $0' + i + ' with no captures' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i), year < 2022 ? i === 0 ? '>' : '>undefined' : '>$0' + i, 'supports $0' + i + ' at the end of the replacement, with no captures' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i + '<'), year >= 2022 && i === 0 ? '>$0' + i + '<' : '><', 'supports $0' + i + ' with a capture at that index' ); t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i), year >= 2022 && i === 0 ? '>$0' + i : '>', 'supports $0' + i + ' at the end of the replacement, with a capture at that index' ); } } t['throws']( function () { GetSubstitution('def', 'abcdefghi', 10, [], undefined, ">$'<"); }, TypeError, 'throws when `position` is larger than `str.length`' ); if (year >= 2018) { t.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, 'a>$$$$$$$<' : 'a>$$= 2022) { t.test('named captures', function (st) { var namedCaptures = { foo: 'foo!' }; st.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, namedCaptures, 'a>$foo!$$z'), 'a>foo!$z', 'works with a $z' ); st.equal( GetSubstitution('abcdef', 'abcdefghi', 0, captures, namedCaptures, '$$abcdef)'); rt.equal( str.replace(regex, 'a>$abcdef$$z'), 'a>abcdef$zghi', 'works with a $z' ); rt.equal( str.replace(regex, '$$= 2024) { forEach(v.nonUndefinedPrimitives, function (nonUndefinedPrimitive) { t['throws']( function () { GetSubstitution('', '', 0, [], nonUndefinedPrimitive, ''); }, TypeError, '`namedCaptures`: must be `undefined` or an Object' ); }); } }; ljharb-es-abstract-babee05/test/methods/GetUTCEpochNanoseconds.js000066400000000000000000000122401516525472400251660ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, GetUTCEpochNanoseconds) { t.ok(year >= 2023, 'ES2023+'); t.test('invalid values', function (st) { forEach(esV.notInts, function (nonInteger) { st['throws']( function () { GetUTCEpochNanoseconds(nonInteger, 1, 1, 0, 0, 0, 0, 0, 0, 0); }, TypeError, 'year: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, nonInteger, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 0, nonInteger, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, nonInteger, 0, 0, 0, 0, 0); }, TypeError, 'hour: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, nonInteger, 0, 0, 0, 0); }, TypeError, 'minute: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, nonInteger, 0, 0, 0); }, TypeError, 'second: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, nonInteger, 0, 0); }, TypeError, 'millisecond: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, nonInteger, 0); }, TypeError, 'microsecond: ' + debug(nonInteger) + ' is not a valid integer' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, 0, nonInteger); }, TypeError, 'nanosecond: ' + debug(nonInteger) + ' is not a valid integer' ); }); st['throws']( function () { GetUTCEpochNanoseconds(0, 0, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: 0 is not a valid integer between 1 and 12, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 13, 1, 0, 0, 0, 0, 0, 0); }, TypeError, 'month: 13 is not a valid integer between 1 and 12, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 0, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: 0 is not a valid integer between 1 and 31, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 32, 0, 0, 0, 0, 0, 0); }, TypeError, 'day: 32 is not a valid integer between 1 and 31, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, -1, 0, 0, 0, 0, 0); }, TypeError, 'hour: -1 is not a valid integer between 0 and 23, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 24, 0, 0, 0, 0, 0); }, TypeError, 'hour: 24 is not a valid integer between 0 and 23, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, -1, 0, 0, 0, 0); }, TypeError, 'minute: -1 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 60, 0, 0, 0, 0); }, TypeError, 'minute: 60 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, -1, 0, 0, 0); }, TypeError, 'second: -1 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 60, 0, 0, 0); }, TypeError, 'second: 60 is not a valid integer between 0 and 59, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, -1, 0, 0); }, TypeError, 'millisecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 1000, 0, 0); }, TypeError, 'millisecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, -1, 0); }, TypeError, 'microsecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, 1000, 0); }, TypeError, 'microsecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, 0, -1); }, TypeError, 'nanosecond: -1 is not a valid integer between 0 and 999, inclusive' ); st['throws']( function () { GetUTCEpochNanoseconds(0, 1, 1, 0, 0, 0, 0, 0, 1000); }, TypeError, 'nanosecond: 1000 is not a valid integer between 0 and 999, inclusive' ); st.end(); }); t.test('BigInt supported', { skip: !esV.hasBigInts }, function (st) { st.deepEqual(GetUTCEpochNanoseconds(2025, 5, 19, 14, 45, 2, 0, 0, 0), BigInt(1747665902000000000), '2025-05-19T14:45:02.000000000Z'); st.end(); }); t.test('no BigInts', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { GetUTCEpochNanoseconds(2025, 5, 19, 14, 45, 2, 0, 0, 0); }, SyntaxError, 'BigInts are not supported in this environment' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GetV.js000066400000000000000000000015731516525472400215750ustar00rootroot00000000000000'use strict'; var $defineProperty = require('es-define-property'); var mockProperty = require('mock-property'); module.exports = function (t, year, GetV) { t.ok(year >= 2015, 'ES2015+'); t['throws']( function () { return GetV({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key' ); var obj = { a: function () {} }; t.equal(GetV(obj, 'a'), obj.a, 'returns property if it exists'); t.equal(GetV(obj, 'b'), undefined, 'returns undefiend if property does not exist'); t.test('getter observability of the receiver', { skip: !$defineProperty || !Object.isExtensible(Number.prototype) }, function (st) { var receivers = []; st.teardown(mockProperty(Number.prototype, 'foo', { get: function () { receivers.push(this); } })); GetV(42, 'foo'); GetV(Object(42), 'foo'); st.deepEqual(receivers, [42, Object(42)]); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GetValueFromBuffer.js000066400000000000000000000112261516525472400244160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var bufferTestCases = require('../bufferTestCases.json'); var clearBuffer = require('../helpers/clearBuffer'); var unserialize = require('../helpers/unserializeNumeric'); var esV = require('../helpers/v'); module.exports = function (t, year, actual, extras) { t.ok(year >= 2015, 'ES2015+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var GetValueFromBuffer = year >= 2017 ? actual : function GetValueFromBuffer(arrayBuffer, byteIndex, type) { if (arguments.length > 5) { return actual(arrayBuffer, byteIndex, type, arguments[5]); } return actual(arrayBuffer, byteIndex, type); }; var order = year >= 2024 ? 'UNORDERED' : 'Unordered'; forEach(esV.unknowns, function (nonAB) { t['throws']( function () { GetValueFromBuffer(nonAB, 0, year >= 2024 ? 'INT8' : 'Int8', true, order, true); }, TypeError, debug(nonAB) + ' is not an ArrayBuffer' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { st['throws']( function () { GetValueFromBuffer(new ArrayBuffer(8), nonNonNegativeInteger, year >= 2024 ? 'INT8' : 'Int8', true, order); }, TypeError, debug(nonNonNegativeInteger) + ' is not a valid byte index' ); }); forEach(esV.invalidTATypes, function (nonString) { st['throws']( function () { GetValueFromBuffer(new ArrayBuffer(8), 0, nonString, true, order); }, TypeError, debug(nonString) + ' is not a valid String value' ); }); forEach(v.nonBooleans, function (nonBoolean) { st['throws']( function () { GetValueFromBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', nonBoolean, true, order); }, TypeError, debug(nonBoolean) + ' is not a valid Boolean value' ); if (year >= 2017) { st['throws']( function () { GetValueFromBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', false, 'Unordered', nonBoolean, true, order); }, TypeError, 'isLittleEndian: ' + debug(nonBoolean) + ' is not a valid Boolean value' ); } }); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var buffer = new ArrayBuffer(8); s2t.equal(DetachArrayBuffer(buffer), null, 'detaching returns null'); s2t['throws']( function () { GetValueFromBuffer(buffer, 0, year >= 2024 ? 'INT8' : 'Int8', true, order); }, TypeError, 'detached buffers throw' ); s2t.end(); }); forEach(bufferTestCases, function (testCase, name) { st.test(name + ': ' + debug(testCase.value), function (s2t) { forEach(esV.getNumberTypes(year), function (type) { var view = new DataView(new ArrayBuffer(esV.elementSizes.$Float64Array)); var method = type === 'Uint8C' ? 'Uint8' : type; // var value = unserialize(testCase.value); var result = testCase[type === 'Uint8C' ? 'Uint8Clamped' : type]; var hasBigEndian = type !== 'Int8' && type !== 'Uint8' && type !== 'Uint8C'; // the 8-bit types are special, they don't have big-endian /* st.equal( GetValueFromBuffer(testCase.buffer, 0, type), defaultEndianness === testCase.endian ? testCase[type + 'little'] : testCase[type + 'big'], 'buffer holding ' + debug(value) + ' (' + testCase.endian + ' endian) with type ' + type + ', default endian, yields expected value' ); */ if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } clearBuffer(view.buffer); var littleVal = unserialize(result.setAsLittle.asLittle); view['set' + method](0, littleVal, true); s2t.equal( GetValueFromBuffer(view.buffer, 0, type, true, order, true), littleVal, 'buffer with type ' + type + ', little -> little, yields expected value' ); if (hasBigEndian) { s2t.equal( GetValueFromBuffer(view.buffer, 0, type, true, order, false), view['get' + method](0, false), 'buffer with type ' + type + ', little -> big, yields expected value' ); clearBuffer(view.buffer); var bigVal = unserialize(result.setAsBig.asBig); view['set' + method](0, bigVal, false); s2t.equal( GetValueFromBuffer(view.buffer, 0, type, true, order, false), bigVal, 'buffer with type ' + type + ', big -> big, yields expected value' ); s2t.equal( GetValueFromBuffer(view.buffer, 0, type, true, order, true), view['get' + method](0, true), 'buffer with type ' + type + ', big -> little, yields expected value' ); } }); s2t.end(); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GetViewByteLength.js000066400000000000000000000064331516525472400242700ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, GetViewByteLength, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var MakeDataViewWithBufferWitnessRecord = extras.getAO('MakeDataViewWithBufferWitnessRecord'); forEach(esV.unknowns, function (nonDVWBWRecord) { t['throws']( function () { GetViewByteLength(nonDVWBWRecord); }, TypeError, debug(nonDVWBWRecord) + ' is not a Data View With Buffer Witness Record' ); }); t.test('DataViews supported', { skip: typeof DataView !== 'function' }, function (st) { var ab = new ArrayBuffer(8); var dv = new DataView(ab); var record = MakeDataViewWithBufferWitnessRecord(dv, 'UNORDERED'); st.equal(GetViewByteLength(record), 8, 'non-auto byte length returns it'); // TODO: actual DV byteLength auto, but not fixed length? (may not be possible) st.test( 'non-fixed length AB, return byteLength - byteOffset', { skip: !('resizable' in ArrayBuffer.prototype) }, function (s2t) { var rab = new ArrayBuffer(12, { maxByteLength: 64 }); var rdv = new DataView(rab, 8); record = MakeDataViewWithBufferWitnessRecord(rdv, 'UNORDERED'); s2t.equal(GetViewByteLength(record), 4, 'non-auto byte length returns it minus the offset'); s2t.end(); } ); st.test( 'non-fixed length SAB, return byteLength - byteOffset', { skip: typeof SharedArrayBuffer !== 'function' || !('growable' in SharedArrayBuffer.prototype) }, function (s2t) { var rsab = new SharedArrayBuffer(12, { maxByteLength: 64 }); var rsdv = new DataView(rsab, 8); record = MakeDataViewWithBufferWitnessRecord(rsdv, 'UNORDERED'); s2t.equal(GetViewByteLength(record), 4, 'non-auto byte length returns it minus the offset'); s2t.end(); } ); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var dab = new ArrayBuffer(1); var ddv = new DataView(dab); var ndRecord = MakeDataViewWithBufferWitnessRecord(ddv, 'UNORDERED'); DetachArrayBuffer(dab); s2t['throws']( function () { GetViewByteLength(ndRecord); }, TypeError, 'non-fixed view, detached buffer, non-detached record, throws inside IsViewOutOfBounds' ); ndRecord = MakeDataViewWithBufferWitnessRecord(ddv, 'UNORDERED'); // reflect detachment s2t['throws']( function () { GetViewByteLength(ndRecord); }, TypeError, 'non-fixed view, detached buffer, detached record, throws inside IsViewOutOfBounds' ); s2t.test( 'AB non-fixed length, detached -> throws', { skip: !('resizable' in ArrayBuffer.prototype) }, function (s3t) { var rab = new ArrayBuffer(12, { maxByteLength: 64 }); var rdv = new DataView(rab, 8); record = MakeDataViewWithBufferWitnessRecord(rdv, 'UNORDERED'); DetachArrayBuffer(rab); s3t['throws']( function () { GetViewByteLength(record); }, TypeError, 'detached RAB with non-detached DVBWR throws' ); record = MakeDataViewWithBufferWitnessRecord(rdv, 'UNORDERED'); s3t['throws']( function () { GetViewByteLength(record); }, TypeError, 'detached RAB with detached DVBWR throws' ); s3t.end(); } ); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/GroupBy.js000066400000000000000000000066111516525472400223150ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, GroupBy) { t.ok(year >= 2024, 'ES2024+'); t['throws'](function () { GroupBy([], function () {}, 'unknown'); }, 'keyCoercion is not ~PROPERTY~ or ~ZERO~'); var nonProperty = year >= 2025 ? 'COLLECTION' : 'ZERO'; forEach(v.nullPrimitives, function (nullish) { t['throws']( function () { GroupBy(nullish, function () {}, 'PROPERTY'); }, TypeError, debug(nullish) + ' is not an Object' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { GroupBy([], nonFunction, 'PROPERTY'); }, TypeError, debug(nonFunction) + ' is not a Function' ); }); forEach(v.nonStrings, function (nonIterable) { t['throws']( function () { GroupBy(nonIterable, function () {}, 'PROPERTY'); }, TypeError, debug(nonIterable) + ' is not iterable' ); }); var tenEx = t.captureFn(function (x) { return x * 10; }); var result = GroupBy([-0, 0, 1, 2], tenEx, 'PROPERTY'); t.deepEqual( result, [ { '[[Key]]': '0', '[[Elements]]': [-0, 0] }, { '[[Key]]': '10', '[[Elements]]': [1] }, { '[[Key]]': '20', '[[Elements]]': [2] } ], 'groups by property' ); t.deepEqual(tenEx.calls, [ { args: [-0, 0], receiver: undefined, returned: -0 }, { args: [0, 1], receiver: undefined, returned: 0 }, { args: [1, 2], receiver: undefined, returned: 10 }, { args: [2, 3], receiver: undefined, returned: 20 } ]); // TODO: maybe add a test for "larger than max safe int"? var negate = t.captureFn(function (x) { return -x; }); var resultZero = GroupBy([-0, 0, 1, 2], negate, nonProperty); t.deepEqual( resultZero, [ { '[[Key]]': 0, '[[Elements]]': [-0, 0] }, { '[[Key]]': -1, '[[Elements]]': [1] }, { '[[Key]]': -2, '[[Elements]]': [2] } ], 'groups with SameValueZero' ); t.deepEqual(negate.calls, [ { args: [-0, 0], receiver: undefined, returned: 0 }, { args: [0, 1], receiver: undefined, returned: -0 }, { args: [1, 2], receiver: undefined, returned: -1 }, { args: [2, 3], receiver: undefined, returned: -2 } ]); t['throws']( function () { GroupBy([1, 2, 3], function (x) { throw new EvalError(x); }, 'PROPERTY'); }, EvalError, 'callback throws -> throw' ); t.test('has Symbol.iterator', { skip: !v.hasSymbols }, function (st) { var iter = [1, 2, 3][Symbol.iterator](); iter['return'] = st.captureFn(function () {}); st['throws']( function () { GroupBy(iter, function (x) { if (x === 2) { throw new EvalError(x); } return x; }, 'PROPERTY'); }, EvalError, 'callback throws -> throw' ); st.deepEqual( iter['return'].calls, [ { args: [], receiver: iter, returned: undefined } ], 'iterator was closed' ); var iterC = [{ toString: function () { throw new EvalError(); } }][Symbol.iterator](); iterC['return'] = t.captureFn(function () {}); st['throws']( function () { GroupBy(iterC, function (x) { return x; }, 'PROPERTY'); }, EvalError, 'key coercion throws -> throw' ); st.deepEqual( iterC['return'].calls, [ { args: [], receiver: iterC, returned: undefined } ], 'iterator was closed' ); st.end(); }); var iterable = [{ toString: function () { throw new EvalError(); } }]; t['throws']( function () { GroupBy(iterable, function (x) { return x; }, 'PROPERTY'); }, EvalError, 'key coercion throws -> throw' ); }; ljharb-es-abstract-babee05/test/methods/HasEitherUnicodeFlag.js000066400000000000000000000024221516525472400246770ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, HasEitherUnicodeFlag) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonRER) { t['throws']( function () { HasEitherUnicodeFlag(nonRER); }, TypeError, debug(nonRER) + ' is not a Regular Expression Record' ); }); var nonUnicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 0 }; var unicode = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': true, '[[CapturingGroupsCount]]': 0 }; var nonUnicodeSets = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': false, '[[CapturingGroupsCount]]': 0 }; var unicodeSets = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': true, '[[CapturingGroupsCount]]': 0 }; t.equal(HasEitherUnicodeFlag(nonUnicode), false); t.equal(HasEitherUnicodeFlag(unicode), true); t.equal(HasEitherUnicodeFlag(nonUnicodeSets), false); t.equal(HasEitherUnicodeFlag(unicodeSets), true); }; ljharb-es-abstract-babee05/test/methods/HasOwnProperty.js000066400000000000000000000015251516525472400236710ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, HasOwnProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { HasOwnProperty(primitive, 'key'); }, TypeError, debug(primitive) + ' is not an Object' ); }); forEach(v.nonPropertyKeys, function (nonKey) { t['throws']( function () { HasOwnProperty({}, nonKey); }, TypeError, debug(nonKey) + ' is not a Property Key' ); }); t.equal(HasOwnProperty({}, 'toString'), false, 'inherited properties are not own'); t.equal( HasOwnProperty({ toString: 1 }, 'toString'), true, 'shadowed inherited own properties are own' ); t.equal(HasOwnProperty({ a: 1 }, 'a'), true, 'own properties are own'); }; ljharb-es-abstract-babee05/test/methods/HasProperty.js000066400000000000000000000016401516525472400232030ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, HasProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { HasProperty(primitive, 'key'); }, TypeError, debug(primitive) + ' is not an Object' ); }); forEach(v.nonPropertyKeys, function (nonKey) { t['throws']( function () { HasProperty({}, nonKey); }, TypeError, debug(nonKey) + ' is not a Property Key' ); }); t.equal(HasProperty({}, 'nope'), false, 'object does not have nonexistent properties'); t.equal(HasProperty({}, 'toString'), true, 'object has inherited properties'); t.equal( HasProperty({ toString: 1 }, 'toString'), true, 'object has shadowed inherited own properties' ); t.equal(HasProperty({ a: 1 }, 'a'), true, 'object has own properties'); }; ljharb-es-abstract-babee05/test/methods/HourFromTime.js000066400000000000000000000003421516525472400233010ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, HourFromTime) { t.ok(year >= 5, 'ES5+'); var now = new Date(); t.equal(HourFromTime(now.getTime()), now.getUTCHours(), 'hour from Date timestamp matches getUTCHours'); }; ljharb-es-abstract-babee05/test/methods/IfAbruptCloseIterator.js000066400000000000000000000041321516525472400251360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IfAbruptCloseIterator, extras) { t.ok(year >= 2025, 'ES2025+'); var sentinel = { sentinel: true }; var NormalCompletion = extras.getAO('NormalCompletion'); var ReturnCompletion = extras.getAO('ReturnCompletion'); var ThrowCompletion = extras.getAO('ThrowCompletion'); var normalCompletion = NormalCompletion(sentinel); var throwCompletion = ThrowCompletion(sentinel); var returnCompletion = ReturnCompletion(sentinel); var iteratorRecord = { '[[Iterator]]': { iterator: true }, '[[NextMethod]]': null, '[[Done]]': false }; forEach(esV.unknowns, function (unknown) { t['throws']( function () { IfAbruptCloseIterator(unknown, iteratorRecord); }, TypeError, debug(unknown) + ' is not a CompletionRecord' ); t['throws']( function () { IfAbruptCloseIterator(throwCompletion, unknown); }, TypeError, debug(unknown) + ' is not an Iterator Record' ); t['throws']( function () { IfAbruptCloseIterator(returnCompletion, unknown); }, TypeError, debug(unknown) + ' is not an Iterator Record' ); t.equal( IfAbruptCloseIterator(normalCompletion, unknown), sentinel, 'normal completion, bad iterator record, just returns argument' ); }); t.equal( IfAbruptCloseIterator(normalCompletion, iteratorRecord), sentinel, 'normal completion, returns argument' ); t.test('return completion closes iterator', function (st) { var returnCalls = 0; var closableIteratorRecord = { '[[Iterator]]': { next: function () { return { done: true }; }, 'return': function () { returnCalls += 1; return { done: true }; } }, '[[NextMethod]]': function () { return { done: true }; }, '[[Done]]': false }; var rc = ReturnCompletion(42); returnCalls = 0; var result = IfAbruptCloseIterator(rc, closableIteratorRecord); st.equal(result, 42, 'return completion calls IteratorClose and returns the value'); st.equal(returnCalls, 1, 'return method was called'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/InLeapYear.js000066400000000000000000000010231516525472400227070ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, InLeapYear) { t.ok(year >= 5, 'ES5+'); t.equal(InLeapYear(Date.UTC(2021, 0, 1)), 0, '2021 is not a leap year'); t.equal(InLeapYear(Date.UTC(2020, 0, 1)), 1, '2020 is a leap year'); t.equal(InLeapYear(Date.UTC(2019, 0, 1)), 0, '2019 is not a leap year'); t.equal(InLeapYear(Date.UTC(2018, 0, 1)), 0, '2018 is not a leap year'); t.equal(InLeapYear(Date.UTC(2017, 0, 1)), 0, '2017 is not a leap year'); t.equal(InLeapYear(Date.UTC(2016, 0, 1)), 1, '2016 is a leap year'); }; ljharb-es-abstract-babee05/test/methods/InstallErrorCause.js000066400000000000000000000020041516525472400243170ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, InstallErrorCause) { t.ok(year >= 2022, 'ES2022+'); forEach(v.primitives, function (primitive) { t['throws']( function () { InstallErrorCause(primitive); }, TypeError, 'O must be an Object; ' + debug(primitive) + ' is not one' ); }); var obj = {}; InstallErrorCause(obj); t.notOk( 'cause' in obj, 'installs nothing when `options` is omitted' ); InstallErrorCause(obj, {}); t.notOk( 'cause' in obj, 'installs nothing when `cause` is absent' ); InstallErrorCause(obj, { cause: undefined }); t.ok( 'cause' in obj, 'installs `undefined` when `cause` is present and `undefined`' ); t.equal(obj.cause, undefined, 'obj.cause is `undefined`'); var obj2 = {}; InstallErrorCause(obj2, { cause: obj }); t.ok( 'cause' in obj2, 'installs when `cause` is present' ); t.equal(obj2.cause, obj, 'obj2.cause is as expected'); }; ljharb-es-abstract-babee05/test/methods/InstanceofOperator.js000066400000000000000000000036231516525472400245330ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, InstanceofOperator) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { InstanceofOperator(primitive, function () {}); }, TypeError, debug(primitive) + ' is not an object' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { InstanceofOperator({}, nonFunction); }, TypeError, debug(nonFunction) + ' is not callable' ); }); var C = function C() {}; var D = function D() {}; t.equal(InstanceofOperator(new C(), C), true, 'constructor function has an instance of itself'); t.equal(InstanceofOperator(new D(), C), false, 'constructor/instance mismatch is false'); t.equal(InstanceofOperator(new C(), D), false, 'instance/constructor mismatch is false'); t.equal(InstanceofOperator({}, C), false, 'plain object is not an instance of a constructor'); t.equal(InstanceofOperator({}, Object), true, 'plain object is an instance of Object'); t.test('Symbol.hasInstance', { skip: !v.hasSymbols || !Symbol.hasInstance }, function (st) { st.plan(5); var O = {}; var C2 = function () {}; st.equal(InstanceofOperator(O, C2), false, 'O is not an instance of C2'); defineProperty(C2, Symbol.hasInstance, { configurable: true, value: function (obj) { st.equal(this, C2, 'hasInstance receiver is C2'); st.equal(obj, O, 'hasInstance argument is O'); return {}; // testing coercion to boolean } }); st.equal(InstanceofOperator(O, C2), true, 'O is now an instance of C2'); defineProperty(C2, Symbol.hasInstance, { configurable: true, value: undefined }); st.equal(InstanceofOperator(O, C2), false, 'O is no longer an instance of C2'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IntegerIndexedElementGet.js000066400000000000000000000027251516525472400256000ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var esV = require('../helpers/v'); var getTypedArrays = require('../helpers/typedArrays'); module.exports = function (t, year, IntegerIndexedElementGet, extras) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { IntegerIndexedElementGet(null, nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { IntegerIndexedElementGet(nonTA, 0); }, TypeError, debug(nonTA) + ' is not an Integer-Indexed Exotic object' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (typedArray) { if (typedArray !== 'Float16Array' || year >= 2024) { var isBigInt = esV.isBigIntTAType(typedArray); if (!isBigInt || extras.getAO('ToBigInt')) { var Z = isBigInt ? safeBigInt : Number; var TA = global[typedArray]; var arr = new TA([Z(1), Z(2), Z(3)]); st.equal(IntegerIndexedElementGet(arr, 0), Z(1), 'returns index 0'); st.equal(IntegerIndexedElementGet(arr, 1), Z(2), 'returns index 1'); st.equal(IntegerIndexedElementGet(arr, 2), Z(3), 'returns index 2'); } } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IntegerIndexedElementSet.js000066400000000000000000000060101516525472400256030ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, IntegerIndexedElementSet, extras) { t.ok(year >= 2015, 'ES2015+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { IntegerIndexedElementSet(null, nonNumber, null); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { IntegerIndexedElementSet(nonTA, 0, null); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { if (year < 2020 && esV.hasBigInts) { forEach(esV.getBigIntTypes(2020), function (bigIntType) { var TA = global[bigIntType + 'Array']; var ta = new TA(0); st['throws']( function () { IntegerIndexedElementSet(ta, 0, BigInt(0)); }, SyntaxError, bigIntType + ' is not supported until ES2020' ); }); } forEach(availableTypedArrays, function (TypedArray) { if (TypedArray !== 'Float16Array' || year >= 2024) { var isBigInt = esV.isBigIntTAType(TypedArray); var Z = isBigInt ? BigInt : Number; if (year >= 2020 || !isBigInt) { var ta = new global[TypedArray](8); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var taD = new global[TypedArray](8); DetachArrayBuffer(taD.buffer); if (year >= 2021) { s2t.equal( IntegerIndexedElementSet(taD, 0, Z(0)), undefined, debug(taD) + ' is a detached TypedArray, returns undefined' ); } else { s2t['throws']( function () { IntegerIndexedElementSet(taD, 0, Z(0)); }, TypeError, debug(taD) + ' is a detached TypedArray' ); } s2t.end(); }); forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { IntegerIndexedElementSet(ta, nonNumber, Z(0)); }, TypeError, debug(nonNumber) + ' is not a number, throws' ); }); forEach([].concat( v.notNonNegativeIntegers, -0 ), function (notNonNegativeInt) { if (typeof notNonNegativeInt === 'number') { var expectedFail = year >= 2021 ? undefined : false; st.equal( IntegerIndexedElementSet(ta, notNonNegativeInt, Z(0)), expectedFail, debug(notNonNegativeInt) + ' is not a non-negative-integer number, returns false' ); } }); var expected = year >= 2021 ? undefined : true; st.equal(ta[0], Z(0), 'is initially zero'); st.equal( IntegerIndexedElementSet(ta, 0, Z(42)), expected, 'set is successful' ); st.equal(ta[0], Z(42), 'has expected value'); } } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/InternalizeJSONProperty.js000066400000000000000000000042031516525472400254440ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, InternalizeJSONProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { InternalizeJSONProperty(primitive, '', function () {}); }, TypeError, debug(primitive) + ' is not an Object' ); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { InternalizeJSONProperty({}, nonString, function () {}); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { InternalizeJSONProperty({}, 'a', nonFunction); }, TypeError, debug(nonFunction) + ' is not a function' ); }); t.deepEqual( InternalizeJSONProperty({ a: { b: { c: 1 } } }, 'a', function (name, val) { return val; }), { b: { c: 1 } } ); t.deepEqual( InternalizeJSONProperty({ a: [{ b: { c: 1 } }, { d: 2 }] }, 'a', function (name, val) { return val; }), [{ b: { c: 1 } }, { d: 2 }] ); // eslint-disable-next-line consistent-return var noD = function (name, val) { if (name !== 'd') { return val; } }; t.deepEqual( InternalizeJSONProperty({ a: [{ b: { c: 1 } }, { d: 2, e: 3 }] }, 'a', noD), [{ b: { c: 1 } }, { e: 3 }], 'reviver drops a nested property in an array' ); // eslint-disable-next-line consistent-return var noZero = function (name, val) { if (name !== '0') { return val; } }; t.deepEqual( InternalizeJSONProperty({ a: [{ b: { c: 1 } }, { d: 2, e: 3 }] }, 'a', noZero), [, { d: 2, e: 3 }], // eslint-disable-line no-sparse-arrays 'reviver drops a nested index in an array' ); t.deepEqual( InternalizeJSONProperty({ a: { d: 2, e: 3 } }, 'a', noD), { e: 3 }, 'reviver drops a nested property in an object' ); t.deepEqual( InternalizeJSONProperty({ d: [{ b: { c: 1 } }, { d: 2, e: 3 }] }, 'd', noD), undefined, 'reviver drops a top-level property' ); t.deepEqual( InternalizeJSONProperty({ a: 1, b: 2 }, 'a', function (name, val) { return val; }), 1 ); // TODO: stuff with the reviver }; ljharb-es-abstract-babee05/test/methods/Invoke.js000066400000000000000000000017541516525472400221640ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, Invoke) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonPropertyKeys, function (nonKey) { t['throws']( function () { Invoke({}, nonKey); }, TypeError, debug(nonKey) + ' is not a Property Key' ); }); t['throws']( function () { Invoke({ o: false }, 'o'); }, TypeError, 'fails on a non-function' ); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { Invoke({}, '', nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t.test('invoked callback', function (st) { var aValue = {}; var bValue = {}; var obj = { f: function (a) { st.equal(arguments.length, 2, '2 args passed'); st.equal(a, aValue, 'first arg is correct'); st.equal(arguments[1], bValue, 'second arg is correct'); } }; st.plan(3); Invoke(obj, 'f', [aValue, bValue]); }); }; ljharb-es-abstract-babee05/test/methods/IsAccessorDescriptor.js000066400000000000000000000020301516525472400250120ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsAccessorDescriptor) { t.ok(year >= 5, 'ES5+'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { IsAccessorDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor' ); }); t.equal(IsAccessorDescriptor(), false, 'no value is not an Accessor Descriptor'); t.equal(IsAccessorDescriptor(undefined), false, 'undefined value is not an Accessor Descriptor'); t.equal(IsAccessorDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is an Accessor Descriptor'); t.equal(IsAccessorDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is an Accessor Descriptor'); t.equal(IsAccessorDescriptor(v.dataDescriptor()), false, 'data descriptor is not an Accessor Descriptor'); t.equal(IsAccessorDescriptor(v.genericDescriptor()), false, 'generic descriptor is not an Accessor Descriptor'); }; ljharb-es-abstract-babee05/test/methods/IsArray.js000066400000000000000000000007771516525472400223070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsArray) { t.ok(year >= 2015, 'ES2015+'); t.equal(true, IsArray([]), '[] is an array'); t.equal(false, IsArray({}), '{} is not an array'); t.equal(false, IsArray({ length: 1, 0: true }), 'arraylike object is not an array'); forEach(esV.unknowns, function (value) { t.equal(false, IsArray(value), debug(value) + ' is not an array'); }); }; ljharb-es-abstract-babee05/test/methods/IsArrayBufferViewOutOfBounds.js000066400000000000000000000030351516525472400264120ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); var getTypedArrays = require('../helpers/typedArrays'); module.exports = function (t, year, IsArrayBufferViewOutOfBounds, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(esV.unknowns, function (nonABV) { t['throws']( function () { IsArrayBufferViewOutOfBounds(nonABV); }, TypeError, debug(nonABV) + ' is not a Typed Array or DataView' ); }); var availableTypedArrays = getTypedArrays(year); t.test('Typed Arrays supported', { skip: availableTypedArrays.length === 0 }, function (st) { var ab = new ArrayBuffer(8); var dv = new DataView(ab); st.equal(IsArrayBufferViewOutOfBounds(dv), false, 'DataView is not out of bounds'); forEach(availableTypedArrays, function (type) { var TA = global[type]; var ta = new TA(ab); st.equal(IsArrayBufferViewOutOfBounds(ta), false, debug(ta) + ' is not out of bounds'); }); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { DetachArrayBuffer(ab); s2t.equal(IsArrayBufferViewOutOfBounds(dv), true, 'DataView with detached buffer is out of bounds'); forEach(getTypedArrays(year), function (type) { var ab2 = new ArrayBuffer(8); var TA = global[type]; var ta = new TA(ab2); DetachArrayBuffer(ab2); s2t.equal(IsArrayBufferViewOutOfBounds(ta), true, debug(ta) + ' with detached buffer is out of bounds'); }); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsBigIntElementType.js000066400000000000000000000013411516525472400245450ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsBigIntElementType) { t.ok(year >= 2020, 'ES2020+'); forEach(esV.getBigIntTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsBigIntElementType(type), true, debug(type) + ' is a BigInt element type' ); }); forEach(esV.getNumberTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsBigIntElementType(type), false, debug(type) + ' is not a BigInt element type' ); }); }; ljharb-es-abstract-babee05/test/methods/IsCallable.js000066400000000000000000000007731516525472400227240ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsCallable) { t.ok(year >= 5, 'ES5+'); t.equal(true, IsCallable(function () {}), 'function is callable'); var nonCallables = [].concat( /a/g, {}, Object.prototype, NaN, v.nonFunctions ); forEach(nonCallables, function (nonCallable) { t.equal(false, IsCallable(nonCallable), debug(nonCallable) + ' is not callable'); }); }; ljharb-es-abstract-babee05/test/methods/IsCompatiblePropertyDescriptor.js000066400000000000000000000016211516525472400271010ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, IsCompatiblePropertyDescriptor, extras) { t.ok(year >= 2015, 'ES2015+'); var CompletePropertyDescriptor = extras.getAO('CompletePropertyDescriptor'); t.equal( IsCompatiblePropertyDescriptor( true, v.descriptors.configurable(), CompletePropertyDescriptor(v.descriptors.nonConfigurable()) ), false ); t.equal( IsCompatiblePropertyDescriptor( false, v.descriptors.configurable(), CompletePropertyDescriptor(v.descriptors.nonConfigurable()) ), false ); t.equal( IsCompatiblePropertyDescriptor( true, v.descriptors.nonConfigurable(), CompletePropertyDescriptor(v.descriptors.configurable()) ), true ); t.equal( IsCompatiblePropertyDescriptor( false, v.descriptors.nonConfigurable(), CompletePropertyDescriptor(v.descriptors.configurable()) ), true ); }; ljharb-es-abstract-babee05/test/methods/IsConcatSpreadable.js000066400000000000000000000024501516525472400244110ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsConcatSpreadable) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t.equal(IsConcatSpreadable(primitive), false, debug(primitive) + ' is not an Object'); }); var hasSymbolConcatSpreadable = v.hasSymbols && Symbol.isConcatSpreadable; t.test('Symbol.isConcatSpreadable', { skip: !hasSymbolConcatSpreadable }, function (st) { forEach(v.falsies, function (falsy) { var obj = {}; obj[Symbol.isConcatSpreadable] = falsy; st.equal( IsConcatSpreadable(obj), false, 'an object with ' + debug(falsy) + ' as Symbol.isConcatSpreadable is not concat spreadable' ); }); forEach(v.truthies, function (truthy) { var obj = {}; obj[Symbol.isConcatSpreadable] = truthy; st.equal( IsConcatSpreadable(obj), true, 'an object with ' + debug(truthy) + ' as Symbol.isConcatSpreadable is concat spreadable' ); }); st.end(); }); forEach(v.objects, function (object) { t.equal( IsConcatSpreadable(object), false, 'non-array without Symbol.isConcatSpreadable is not concat spreadable' ); }); t.equal(IsConcatSpreadable([]), true, 'arrays are concat spreadable'); }; ljharb-es-abstract-babee05/test/methods/IsConstructor.js000066400000000000000000000022011516525472400235360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var hasOwn = require('hasown'); module.exports = function (t, year, IsConstructor) { t.ok(year >= 2015, 'ES2015+'); t.equal(true, IsConstructor(function () {}), 'function is constructor'); t.equal(false, IsConstructor(/a/g), 'regex is not constructor'); forEach(v.objects, function (object) { t.equal(false, IsConstructor(object), object + ' object is not constructor'); }); try { var arrow = Function('return () => {}')(); // eslint-disable-line no-new-func t.equal(IsConstructor(arrow), false, 'arrow function is not constructor'); } catch (e) { t.comment('SKIP: arrow function syntax not supported.'); } try { var foo = Function('return class Foo {}')(); // eslint-disable-line no-new-func t.equal(IsConstructor(foo), true, 'class is constructor'); } catch (e) { t.comment('SKIP: class syntax not supported.'); } if (typeof Reflect !== 'object' || typeof Proxy !== 'function' || hasOwn(Proxy, 'prototype')) { t.comment('SKIP: Proxy is constructor'); } else { t.equal(IsConstructor(Proxy), true, 'Proxy is constructor'); } }; ljharb-es-abstract-babee05/test/methods/IsDataDescriptor.js000066400000000000000000000017371516525472400241360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsDataDescriptor) { t.ok(year >= 5, 'ES5+'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { IsDataDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor' ); }); t.equal(IsDataDescriptor(), false, 'no value is not a Data Descriptor'); t.equal(IsDataDescriptor(undefined), false, 'undefined value is not a Data Descriptor'); t.equal(IsDataDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a Data Descriptor'); t.equal(IsDataDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a Data Descriptor'); t.equal(IsDataDescriptor(v.dataDescriptor()), true, 'data descriptor is a Data Descriptor'); t.equal(IsDataDescriptor(v.genericDescriptor()), false, 'generic descriptor is not a Data Descriptor'); }; ljharb-es-abstract-babee05/test/methods/IsDetachedBuffer.js000066400000000000000000000042571516525472400240610ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsDetachedBuffer, extras) { t.ok(year >= 2015, 'ES2015+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(esV.unknowns, function (nonArrayBuffer) { t['throws']( function () { IsDetachedBuffer(nonArrayBuffer); }, TypeError, debug(nonArrayBuffer) + ' is not an ArrayBuffer' ); }); t.test('ArrayBuffers', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var buffers = [ new ArrayBuffer(), new ArrayBuffer(0), new ArrayBuffer(4), new ArrayBuffer(420) ]; st.test('can detach', { skip: !esV.canDetach }, function (s2t) { forEach(buffers, function (buffer) { s2t.equal(IsDetachedBuffer(buffer), false, debug(buffer) + ' is not detached'); s2t.doesNotThrow( function () { return new Float32Array(buffer); }, 'can create a Float32Array from a non-detached ArrayBuffer' ); s2t.equal(DetachArrayBuffer(buffer), null, 'returns null'); s2t.equal(IsDetachedBuffer(buffer), true, debug(buffer) + ' is now detached'); s2t['throws']( function () { return new Float32Array(buffer); }, TypeError, 'can not create a Float32Array from a now detached ArrayBuffer' ); }); s2t.end(); }); // throws SyntaxError in node < 11 st.test('can not detach', { skip: esV.canDetach }, function (s2t) { forEach(buffers, function (buffer) { s2t.doesNotThrow( function () { return new Float32Array(buffer); }, 'can create a Float32Array from a non-detached ArrayBuffer' ); s2t.equal(IsDetachedBuffer(buffer), false, 'env does not support detaching'); }); s2t.end(); }); st.end(); }); if (year >= 2017) { t.test('IsDetachedBuffer (Shared Array Buffers)', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(1); st.equal(IsDetachedBuffer(sab), false, 'a new SharedArrayBuffer is not detached'); var zsab = new SharedArrayBuffer(0); st.equal(IsDetachedBuffer(zsab), false, 'a new zero-length SharedArrayBuffer is not detached'); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/IsExtensible.js000066400000000000000000000011641516525472400233220ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsExtensible) { t.ok(year >= 2015, 'ES2015+'); forEach(v.objects, function (object) { t.equal(IsExtensible(object), true, debug(object) + ' object is extensible'); }); forEach(v.primitives, function (primitive) { t.equal(IsExtensible(primitive), false, debug(primitive) + ' is not extensible'); }); if (Object.preventExtensions) { t.equal(IsExtensible(Object.preventExtensions({})), false, 'object with extensions prevented is not extensible'); } }; ljharb-es-abstract-babee05/test/methods/IsFixedLengthArrayBuffer.js000066400000000000000000000016341516525472400255540ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsFixedLengthArrayBuffer) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonAB) { t['throws']( function () { IsFixedLengthArrayBuffer(nonAB); }, TypeError, debug(nonAB) + ' is not an ArrayBuffer or SharedArrayBuffer' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var ab = new ArrayBuffer(1); st.equal(IsFixedLengthArrayBuffer(ab), true, 'fixed length ArrayBuffer is fixed length'); st.end(); }); t.test('SharedArrayBuffers supported', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(1); st.equal(IsFixedLengthArrayBuffer(sab), true, 'fixed length SharedArrayBuffer is fixed length'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsGenericDescriptor.js000066400000000000000000000020041516525472400246250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsGenericDescriptor) { t.ok(year >= 5, 'ES5+'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { IsGenericDescriptor(primitive); }, TypeError, debug(primitive) + ' is not a Property Descriptor' ); }); t.equal(IsGenericDescriptor(), false, 'no value is not a Data Descriptor'); t.equal(IsGenericDescriptor(undefined), false, 'undefined value is not a Data Descriptor'); t.equal(IsGenericDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a generic Descriptor'); t.equal(IsGenericDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a generic Descriptor'); t.equal(IsGenericDescriptor(v.dataDescriptor()), false, 'data descriptor is not a generic Descriptor'); t.equal(IsGenericDescriptor(v.genericDescriptor()), true, 'generic descriptor is a generic Descriptor'); }; ljharb-es-abstract-babee05/test/methods/IsIntegralNumber.js000066400000000000000000000013011516525472400241270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsIntegralNumber) { t.ok(year >= 2015, 'ES2015+'); for (var i = -100; i < 100; i += 10) { t.equal(true, IsIntegralNumber(i), i + ' is integer'); t.equal(false, IsIntegralNumber(i + 0.2), (i + 0.2) + ' is not integer'); } t.equal(true, IsIntegralNumber(-0), '-0 is integer'); forEach(esV.notInts, function (notInt) { t.equal(false, IsIntegralNumber(notInt), debug(notInt) + ' is not integer'); }); t.equal(false, IsIntegralNumber(v.uncoercibleObject), 'uncoercibleObject is not integer'); }; ljharb-es-abstract-babee05/test/methods/IsLessThan.js000066400000000000000000000154441516525472400227470ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsLessThan) { t.ok(year >= 2022, 'ES2022+'); t.test('at least one operand is NaN', function (st) { st.equal(IsLessThan(NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined'); st.equal(IsLessThan({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined'); st.equal(IsLessThan(NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined'); st.equal(IsLessThan({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined'); st.end(); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { IsLessThan(3, 4, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach(v.zeroes, function (zero) { t.equal(IsLessThan(zero, 1, true), true, 'LeftFirst: ' + debug(zero) + ' is less than 1'); t.equal(IsLessThan(zero, 1, false), true, '!LeftFirst: ' + debug(zero) + ' is less than 1'); t.equal(IsLessThan(1, zero, true), false, 'LeftFirst: 1 is not less than ' + debug(zero)); t.equal(IsLessThan(1, zero, false), false, '!LeftFirst: 1 is not less than ' + debug(zero)); t.equal(IsLessThan(zero, zero, true), false, 'LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); t.equal(IsLessThan(zero, zero, false), false, '!LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero)); }); t.equal(IsLessThan(Infinity, -Infinity, true), false, 'LeftFirst: ∞ is not less than -∞'); t.equal(IsLessThan(Infinity, -Infinity, false), false, '!LeftFirst: ∞ is not less than -∞'); t.equal(IsLessThan(-Infinity, Infinity, true), true, 'LeftFirst: -∞ is less than ∞'); t.equal(IsLessThan(-Infinity, Infinity, false), true, '!LeftFirst: -∞ is less than ∞'); t.equal(IsLessThan(-Infinity, 0, true), true, 'LeftFirst: -∞ is less than +0'); t.equal(IsLessThan(-Infinity, 0, false), true, '!LeftFirst: -∞ is less than +0'); t.equal(IsLessThan(0, -Infinity, true), false, 'LeftFirst: +0 is not less than -∞'); t.equal(IsLessThan(0, -Infinity, false), false, '!LeftFirst: +0 is not less than -∞'); t.equal(IsLessThan(3, 4, true), true, 'LeftFirst: 3 is less than 4'); t.equal(IsLessThan(4, 3, true), false, 'LeftFirst: 3 is not less than 4'); t.equal(IsLessThan(3, 4, false), true, '!LeftFirst: 3 is less than 4'); t.equal(IsLessThan(4, 3, false), false, '!LeftFirst: 3 is not less than 4'); t.equal(IsLessThan('3', '4', true), true, 'LeftFirst: "3" is less than "4"'); t.equal(IsLessThan('4', '3', true), false, 'LeftFirst: "3" is not less than "4"'); t.equal(IsLessThan('3', '4', false), true, '!LeftFirst: "3" is less than "4"'); t.equal(IsLessThan('4', '3', false), false, '!LeftFirst: "3" is not less than "4"'); t.equal(IsLessThan('a', 'abc', true), true, 'LeftFirst: "a" is less than "abc"'); t.equal(IsLessThan('abc', 'a', true), false, 'LeftFirst: "abc" is not less than "a"'); t.equal(IsLessThan('a', 'abc', false), true, '!LeftFirst: "a" is less than "abc"'); t.equal(IsLessThan('abc', 'a', false), false, '!LeftFirst: "abc" is not less than "a"'); t.equal(IsLessThan(v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42'); t.equal(IsLessThan(42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object'); t.equal(IsLessThan(v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42'); t.equal(IsLessThan(42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object'); t.equal(IsLessThan(v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"'); t.equal(IsLessThan('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object'); t.equal(IsLessThan(v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"'); t.equal(IsLessThan('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object'); t.test('BigInts are supported', { skip: !esV.hasBigInts }, function (st) { st.equal(IsLessThan(BigInt(0), '1', true), true, 'LeftFirst: 0n is less than "1"'); st.equal(IsLessThan('1', BigInt(0), true), false, 'LeftFirst: "1" is not less than 0n'); st.equal(IsLessThan(BigInt(0), '1', false), true, '!LeftFirst: 0n is less than "1"'); st.equal(IsLessThan('1', BigInt(0), false), false, '!LeftFirst: "1" is not less than 0n'); st.equal(IsLessThan(BigInt(0), 1, true), true, 'LeftFirst: 0n is less than 1'); st.equal(IsLessThan(1, BigInt(0), true), false, 'LeftFirst: 1 is not less than 0n'); st.equal(IsLessThan(BigInt(0), 1, false), true, '!LeftFirst: 0n is less than 1'); st.equal(IsLessThan(1, BigInt(0), false), false, '!LeftFirst: 1 is not less than 0n'); st.equal(IsLessThan(BigInt(0), BigInt(1), true), true, 'LeftFirst: 0n is less than 1n'); st.equal(IsLessThan(BigInt(1), BigInt(0), true), false, 'LeftFirst: 1n is not less than 0n'); st.equal(IsLessThan(BigInt(0), BigInt(1), false), true, '!LeftFirst: 0n is less than 1n'); st.equal(IsLessThan(BigInt(1), BigInt(0), false), false, '!LeftFirst: 1n is not less than 0n'); st.equal(IsLessThan(BigInt(0), 'NaN', true), undefined, 'LeftFirst: 0n and "NaN" produce `undefined`'); st.equal(IsLessThan('NaN', BigInt(0), true), undefined, 'LeftFirst: "NaN" and 0n produce `undefined`'); st.equal(IsLessThan(BigInt(0), 'NaN', false), undefined, '!LeftFirst: 0n and "NaN" produce `undefined`'); st.equal(IsLessThan('NaN', BigInt(0), false), undefined, '!LeftFirst: "NaN" and 0n produce `undefined`'); st.equal(IsLessThan(BigInt(0), NaN, true), undefined, 'LeftFirst: 0n and NaN produce `undefined`'); st.equal(IsLessThan(NaN, BigInt(0), true), undefined, 'LeftFirst: NaN and 0n produce `undefined`'); st.equal(IsLessThan(BigInt(0), NaN, false), undefined, '!LeftFirst: 0n and NaN produce `undefined`'); st.equal(IsLessThan(NaN, BigInt(0), false), undefined, '!LeftFirst: NaN and 0n produce `undefined`'); st.equal(IsLessThan(BigInt(0), Infinity, true), true, 'LeftFirst: 0n is less than Infinity'); st.equal(IsLessThan(Infinity, BigInt(0), true), false, 'LeftFirst: Infinity is not less than 0n'); st.equal(IsLessThan(BigInt(0), Infinity, false), true, '!LeftFirst: 0n is less than Infinity'); st.equal(IsLessThan(Infinity, BigInt(0), false), false, '!LeftFirst: Infinity is not less than 0n'); st.equal(IsLessThan(BigInt(0), -Infinity, true), false, 'LeftFirst: 0n is not less than -Infinity'); st.equal(IsLessThan(-Infinity, BigInt(0), true), true, 'LeftFirst: -Infinity is less than 0n'); st.equal(IsLessThan(BigInt(0), -Infinity, false), false, '!LeftFirst: 0n is not less than -Infinity'); st.equal(IsLessThan(-Infinity, BigInt(0), false), true, '!LeftFirst: -Infinity is less than 0n'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsLooselyEqual.js000066400000000000000000000031131516525472400236320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsLooselyEqual) { t.ok(year >= 2022, 'ES2022+'); t.test('same types use ===', function (st) { forEach(esV.unknowns, function (value) { st.equal(IsLooselyEqual(value, value), value === value, debug(value) + ' is abstractly equal to itself'); }); st.end(); }); t.test('different types coerce', function (st) { var pairs = [ [null, undefined], [3, '3'], [true, '3'], [true, 3], [false, 0], [false, '0'], [3, [3]], ['3', [3]], [true, [1]], [false, [0]], [String(v.coercibleObject), v.coercibleObject], [Number(String(v.coercibleObject)), v.coercibleObject], [Number(v.coercibleObject), v.coercibleObject], [String(Number(v.coercibleObject)), v.coercibleObject] ].concat(esV.hasBigInts ? [ [BigInt(0), 0], [0, BigInt(0)], [BigInt(1), 1], [1, BigInt(1)], [BigInt(0), '0'], ['0', BigInt(0)], [BigInt(1), '1'], ['1', BigInt(1)], [BigInt(0), Infinity], [Infinity, BigInt(0)], [BigInt(0), 'Infinity'], ['Infinity', BigInt(0)], [{ valueOf: function () { return BigInt(0); } }, BigInt(0)] ] : []); forEach(pairs, function (pair) { var a = pair[0]; var b = pair[1]; // eslint-disable-next-line eqeqeq st.equal(IsLooselyEqual(a, b), a == b, debug(a) + ' == ' + debug(b)); // eslint-disable-next-line eqeqeq st.equal(IsLooselyEqual(b, a), b == a, debug(b) + ' == ' + debug(a)); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsNoTearConfiguration.js000066400000000000000000000026161516525472400251430ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsNoTearConfiguration) { t.ok(year >= 2020, 'ES2020+'); forEach(esV.getUnclampedIntegerTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsNoTearConfiguration(type), true, debug(type) + ' with any order is a no-tear configuration' ); }); forEach(esV.getBigIntTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsNoTearConfiguration(type, year >= 2024 ? 'INIT' : 'Init'), false, debug(type) + ' with ' + debug('Init') + ' is not a no-tear configuration' ); t.equal( IsNoTearConfiguration(type, year >= 2024 ? 'UNORDERED' : 'Unordered'), false, debug(type) + ' with ' + debug('Unordered') + ' is not a no-tear configuration' ); t.equal( IsNoTearConfiguration(type), true, debug(type) + ' with any other order is a no-tear configuration' ); }); forEach(esV.getClampedTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsNoTearConfiguration(type), false, debug(type) + ' with any order is not a no-tear configuration' ); }); }; ljharb-es-abstract-babee05/test/methods/IsNonNegativeInteger.js000066400000000000000000000012101516525472400247430ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsNonNegativeInteger) { t.ok(year >= 2020, 'ES2020+'); forEach(v.notNonNegativeIntegers, function (nonIntegerNumber) { t.equal( IsNonNegativeInteger(nonIntegerNumber), false, debug(nonIntegerNumber) + ' is not a non-negative integer' ); }); forEach([].concat( v.zeroes, v.integerNumbers ), function (nonNegativeInteger) { t.equal( IsNonNegativeInteger(nonNegativeInteger), true, debug(nonNegativeInteger) + ' is a non-negative integer' ); }); }; ljharb-es-abstract-babee05/test/methods/IsPromise.js000066400000000000000000000012141516525472400226320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsPromise) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.unknowns, function (nonPromise) { t.equal(IsPromise(nonPromise), false, debug(nonPromise) + ' is not a Promise'); }); t.test('Promises supported', { skip: typeof Promise !== 'function' }, function (st) { var thenable = { then: Promise.prototype.then }; st.equal(IsPromise(thenable), false, 'generic thenable is not a Promise'); st.equal(IsPromise(Promise.resolve()), true, 'Promise is a Promise'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsPropertyDescriptor.js000066400000000000000000000025731516525472400251100ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsPropertyDescriptor) { t.ok(year < 2018, 'ES 2018+ removed IsPropertyDescriptor'); forEach(v.primitives, function (primitive) { t.equal( IsPropertyDescriptor(primitive), false, debug(primitive) + ' is not a Property Descriptor' ); }); t.equal(IsPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor'); t.equal(IsPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor'); t.equal(IsPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor'); t.equal(IsPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor'); t.equal(IsPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor'); t.equal(IsPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor'); t['throws']( function () { IsPropertyDescriptor(v.bothDescriptor()); }, TypeError, 'a Property Descriptor can not be both a Data and an Accessor Descriptor' ); t['throws']( function () { IsPropertyDescriptor(v.bothDescriptorWritable()); }, TypeError, 'a Property Descriptor can not be both a Data and an Accessor Descriptor' ); }; ljharb-es-abstract-babee05/test/methods/IsPropertyKey.js000066400000000000000000000010571516525472400235160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsPropertyKey) { t.ok(year >= 2015, 'ES2015+'); forEach([].concat( v.numbers, v.objects ), function (notKey) { t.equal(IsPropertyKey(notKey), false, debug(notKey) + ' is not property key'); }); t.equal(IsPropertyKey('foo'), true, 'string is property key'); forEach(v.symbols, function (symbol) { t.equal(IsPropertyKey(symbol), true, debug(symbol) + ' is property key'); }); }; ljharb-es-abstract-babee05/test/methods/IsRegExp.js000066400000000000000000000016421516525472400224130ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var defineProperty = require('../helpers/defineProperty'); var esV = require('../helpers/v'); module.exports = function (t, year, IsRegExp) { t.ok(year >= 2015, 'ES2015+'); forEach([/a/g, new RegExp('a', 'g')], function (regex) { t.equal(true, IsRegExp(regex), regex + ' is regex'); }); forEach(esV.unknowns, function (nonRegex) { t.equal(false, IsRegExp(nonRegex), debug(nonRegex) + ' is not regex'); }); t.test('Symbol.match', { skip: !v.hasSymbols || !Symbol.match }, function (st) { var obj = {}; obj[Symbol.match] = true; st.equal(true, IsRegExp(obj), 'object with truthy Symbol.match is regex'); var regex = /a/; defineProperty(regex, Symbol.match, { value: false }); st.equal(false, IsRegExp(regex), 'regex with falsy Symbol.match is not regex'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsSharedArrayBuffer.js000066400000000000000000000014021516525472400245520ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsSharedArrayBuffer) { t.ok(year >= 2017, 'ES2017+'); forEach(v.primitives, function (primitive) { t['throws']( function () { IsSharedArrayBuffer(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); forEach(v.objects, function (nonSAB) { t.equal(IsSharedArrayBuffer(nonSAB), false, debug(nonSAB) + ' is not a SharedArrayBuffer'); }); t.test('real SABs', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(); st.equal(IsSharedArrayBuffer(sab), true, debug(sab) + ' is a SharedArrayBuffer'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsStrictlyEqual.js000066400000000000000000000022331516525472400240230ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsStrictlyEqual) { t.ok(year >= 2022, 'ES2022+'); t.test('same types use ===', function (st) { forEach(esV.unknowns, function (value) { st.equal(IsStrictlyEqual(value, value), value === value, debug(value) + ' is strictly equal to itself'); }); st.end(); }); t.test('different types are not ===', function (st) { var pairs = [ [null, undefined], [3, '3'], [true, '3'], [true, 3], [false, 0], [false, '0'], [3, [3]], ['3', [3]], [true, [1]], [false, [0]], [String(v.coercibleObject), v.coercibleObject], [Number(String(v.coercibleObject)), v.coercibleObject], [Number(v.coercibleObject), v.coercibleObject], [String(Number(v.coercibleObject)), v.coercibleObject] ]; forEach(pairs, function (pair) { var a = pair[0]; var b = pair[1]; st.equal(IsStrictlyEqual(a, b), a === b, debug(a) + ' === ' + debug(b)); st.equal(IsStrictlyEqual(b, a), b === a, debug(b) + ' === ' + debug(a)); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsStringPrefix.js000066400000000000000000000020271516525472400236430ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IsStringPrefix) { t.ok(year >= 2018 && year <= 2022, 'ES2018 - ES2022'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { IsStringPrefix(nonString, 'a'); }, TypeError, 'first arg: ' + debug(nonString) + ' is not a string' ); t['throws']( function () { IsStringPrefix('a', nonString); }, TypeError, 'second arg: ' + debug(nonString) + ' is not a string' ); }); forEach(v.strings, function (string) { t.equal(IsStringPrefix(string, string), true, debug(string) + ' is a prefix of itself'); t.equal(IsStringPrefix('', string), true, 'the empty string is a prefix of everything'); }); t.equal(IsStringPrefix('abc', 'abcd'), true, '"abc" is a prefix of "abcd"'); t.equal(IsStringPrefix('abcd', 'abc'), false, '"abcd" is not a prefix of "abc"'); t.equal(IsStringPrefix('a', 'bc'), false, '"a" is not a prefix of "bc"'); }; ljharb-es-abstract-babee05/test/methods/IsStringWellFormedUnicode.js000066400000000000000000000014531516525472400257570ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsStringWellFormedUnicode) { t.ok(year >= 2022, 'ES2022+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return IsStringWellFormedUnicode(notString); }, TypeError, debug(notString) + ' is not a string' ); }); forEach([].concat( v.strings, esV.poo.whole ), function (string) { t.equal(IsStringWellFormedUnicode(string), true, debug(string) + ' is well-formed unicode'); }); forEach([esV.poo.leading, esV.poo.trailing], function (badString) { t.equal(IsStringWellFormedUnicode(badString), false, debug(badString) + ' is not well-formed unicode'); }); }; ljharb-es-abstract-babee05/test/methods/IsTimeZoneOffsetString.js000066400000000000000000000024161516525472400253110ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, IsTimeZoneOffsetString) { t.ok(year >= 2023, 'ES2023+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { IsTimeZoneOffsetString(nonString); }, TypeError, debug(nonString) + ' is not a string' ); }); for (var i = 0; i < 24; i++) { var paddedH = ('00' + i).slice(-2); var strHP = '+' + paddedH + ':00'; t.equal(IsTimeZoneOffsetString(strHP), true, debug(strHP) + ' is a valid time zone offset string'); var strHN = '-' + paddedH + ':00'; t.equal(IsTimeZoneOffsetString(strHN), true, debug(strHN) + ' is a valid time zone offset string'); } for (var m = 0; m < 60; m++) { var paddedM = ('00' + m).slice(-2); var strMP = '+00:' + paddedM; t.equal(IsTimeZoneOffsetString(strMP), true, debug(strMP) + ' is a valid time zone offset string'); var strMN = '-00:' + paddedM; t.equal(IsTimeZoneOffsetString(strMN), true, debug(strMN) + ' is a valid time zone offset string'); } forEach([ '+24:00', '-24:00', '+00:60', '-00:60' ], function (tzos) { t.equal(IsTimeZoneOffsetString(tzos), false, debug(tzos) + ' is not a valid time zone offset string'); }); }; ljharb-es-abstract-babee05/test/methods/IsTypedArrayFixedLength.js000066400000000000000000000054461516525472400254350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsTypedArrayFixedLength, extras) { t.ok(year >= 2025, 'ES2025+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { IsTypedArrayFixedLength(nonTA); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { var ab = new ArrayBuffer(8); var ta = new Uint8Array(ab); st.equal(IsTypedArrayFixedLength(ta), true, 'TA with fixed length ArrayBuffer is fixed length'); st.test('non-fixed length, return length * elementSize', { skip: !('resizable' in ArrayBuffer.prototype) }, function (tast) { var rab = new ArrayBuffer(8, { maxByteLength: 64 }); var rta = new Uint8Array(rab); tast.equal(IsTypedArrayFixedLength(rta), false, 'resizable ArrayBuffer’s Typed Array is not fixed length'); var rabP = new ArrayBuffer(4, { maxByteLength: 64 }); var rtaP = new Int32Array(rabP); tast.equal(IsTypedArrayFixedLength(rtaP), false, 'resizable ArrayBuffer’s Typed Array with a smaller length is not fixed length'); tast.end(); }); st.test('non-fixed length, detached returns zero', { skip: !esV.canDetach || !('resizable' in ArrayBuffer.prototype) }, function (tast) { var rdab = new ArrayBuffer(8, { maxByteLength: 64 }); var rta = new Uint8Array(rdab); DetachArrayBuffer(rdab); tast.equal(IsTypedArrayFixedLength(rta), false, 'resizable ArrayBuffer’s detached Typed Array is not fixed length'); tast.end(); }); st.end(); }); t.test('SharedArrayBuffers supported', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { var sab = new SharedArrayBuffer(1); var ta = new Uint8Array(sab); st.equal(IsTypedArrayFixedLength(ta), true, 'TA with SharedArrayBuffer is fixed length'); st.test('non-fixed length', { skip: !('resizable' in SharedArrayBuffer.prototype) }, function (sast) { var rsabP = new SharedArrayBuffer(4, { maxByteLength: 64 }); var rtaP = new Int32Array(rsabP); sast.equal(IsTypedArrayFixedLength(rtaP), false, 'resizable ArrayBuffer’s Typed Array with a smaller length is not fixed length'); sast.end(); }); st.test('growable SABs', { skip: !('grow' in SharedArrayBuffer.prototype) }, function (s2t) { var gsab = new SharedArrayBuffer(0, { maxByteLength: 64 }); var gta = new Uint8Array(gsab); s2t.equal(IsTypedArrayFixedLength(gta), false, 'TA with growable SharedArrayBuffer is not fixed length'); gsab.grow(8); s2t.equal(IsTypedArrayFixedLength(gta), false, 'TA with growable SharedArrayBuffer, grown, is not fixed length'); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsTypedArrayOutOfBounds.js000066400000000000000000000022631516525472400254350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsTypedArrayOutOfBounds, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var MakeTypedArrayWithBufferWitnessRecord = extras.getAO('MakeTypedArrayWithBufferWitnessRecord'); forEach([].concat( esV.unknowns, [[]] ), function (nonTAWBWR) { t['throws']( function () { IsTypedArrayOutOfBounds(nonTAWBWR); }, TypeError, debug(nonTAWBWR) + ' is not a Typed Array With Buffer Witness Record' ); }); t.test('detached buffer', { skip: !esV.canDetach }, function (st) { var ab = new ArrayBuffer(8); var ta = new Uint8Array(ab); var preDetachedRecord = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); st.equal(IsTypedArrayOutOfBounds(preDetachedRecord), false); DetachArrayBuffer(ab); var postDetachedRecord = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); st['throws']( function () { IsTypedArrayOutOfBounds(preDetachedRecord); }, TypeError ); st.equal(IsTypedArrayOutOfBounds(postDetachedRecord), true); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsUnclampedIntegerElementType.js000066400000000000000000000015331516525472400266220ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsUnclampedIntegerElementType) { t.ok(year >= 2020, 'ES2020+'); forEach(esV.getUnclampedIntegerTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsUnclampedIntegerElementType(type), true, debug(type) + ' is an unclamped integer element type' ); }); forEach([].concat( esV.getClampedTypes(year), esV.getNonUnclampedIntegerTypes(year) ), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsUnclampedIntegerElementType(type), false, debug(type) + ' is not an unclamped integer element type' ); }); }; ljharb-es-abstract-babee05/test/methods/IsUnsignedElementType.js000066400000000000000000000013751516525472400251540ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsUnsignedElementType) { t.ok(year >= 2020, 'ES2020+'); forEach(esV.getUnsignedElementTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsUnsignedElementType(type), true, debug(type) + ' is an unsigned element type' ); }); forEach(esV.getSignedElementTypes(year), function (type) { if (year >= 2024) { type = type.toUpperCase(); // eslint-disable-line no-param-reassign } t.equal( IsUnsignedElementType(type), false, debug(type) + ' is not an unsigned element type' ); }); }; ljharb-es-abstract-babee05/test/methods/IsValidIntegerIndex.js000066400000000000000000000032311516525472400245620ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, IsValidIntegerIndex) { t.ok(year >= 2020, 'ES2020+'); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { IsValidIntegerIndex(nonTA, 0); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('Typed Array support', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (typedArray) { st.test(typedArray, function (s2t) { var TA = global[typedArray]; var ta = new TA(1); forEach(v.nonNumbers, function (nonNumber) { s2t['throws']( function () { IsValidIntegerIndex(ta, nonNumber); }, TypeError, 'index: ' + debug(nonNumber) + ' is not a Number' ); }); forEach(v.nonIntegerNumbers, function (nonInteger) { s2t.equal(IsValidIntegerIndex(ta, nonInteger), false, debug(nonInteger) + ' is not an integer'); }); s2t.equal(IsValidIntegerIndex(ta, -0), false, '-0 is not a valid index'); s2t.equal(IsValidIntegerIndex(ta, -1), false, '-1 is not a valid index'); for (var i = 0; i < ta.length; i += 1) { s2t.equal(IsValidIntegerIndex(ta, i), true, i + ' is a valid index of an array of length ' + ta.length); } s2t.equal(IsValidIntegerIndex(ta, ta.length), false, ta.length + ' is not a valid index of an array of length ' + ta.length); s2t.end(); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IsViewOutOfBounds.js000066400000000000000000000054131516525472400242630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, IsViewOutOfBounds, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var MakeDataViewWithBufferWitnessRecord = extras.getAO('MakeDataViewWithBufferWitnessRecord'); forEach(esV.unknowns, function (nonDVWBWRecord) { t['throws']( function () { IsViewOutOfBounds(nonDVWBWRecord); }, TypeError, debug(nonDVWBWRecord) + ' is not a Data View With Buffer Witness Record' ); }); t.test('DataViews supported', { skip: typeof DataView !== 'function' }, function (st) { var ab = new ArrayBuffer(8); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var dab = new ArrayBuffer(1); var ddv = new DataView(dab); var ndRecord = MakeDataViewWithBufferWitnessRecord(ddv, 'UNORDERED'); DetachArrayBuffer(dab); s2t['throws']( function () { IsViewOutOfBounds(ndRecord); }, TypeError, 'detached view with no-detached record throws' ); var dRecord = MakeDataViewWithBufferWitnessRecord(ddv, 'UNORDERED'); s2t.equal(IsViewOutOfBounds(dRecord), true, 'detached view with detached record is out of bounds'); s2t.end(); }); // TODO true for byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength // not sure how to produce these DataViews for (var i = 0; i < 8; i += 1) { st.equal( IsViewOutOfBounds(MakeDataViewWithBufferWitnessRecord(new DataView(ab, i), 'UNORDERED')), false, 'byteOffset ' + i + ' is not out of bounds' ); } st.test( 'non-fixed length, return floor((byteLength - byteOffset) / elementSize)', { skip: !('resizable' in ArrayBuffer.prototype) }, function (tsat) { var rab = new ArrayBuffer(24, { maxByteLength: 64 }); var dv = new DataView(rab); var record = MakeDataViewWithBufferWitnessRecord(dv, 'UNORDERED'); tsat.equal( IsViewOutOfBounds(record), false, 'DataView + resizable AB: has expected length' ); tsat.end(); } ); st.test( 'non-fixed length, detached throws', { skip: !('resizable' in ArrayBuffer.prototype) || !esV.canDetach }, function (tsat) { var rab = new ArrayBuffer(24, { maxByteLength: 64 }); var dv = new DataView(rab); var record = MakeDataViewWithBufferWitnessRecord(dv, 'UNORDERED'); DetachArrayBuffer(rab); tsat['throws']( function () { IsViewOutOfBounds(record); }, TypeError, 'detached RAB with a non-detached DVWBR throws' ); record = MakeDataViewWithBufferWitnessRecord(dv, 'UNORDERED'); tsat.equal( IsViewOutOfBounds(record), true, 'detached RAB with a detached DVWBR is out of bounds' ); tsat.end(); } ); }); }; ljharb-es-abstract-babee05/test/methods/IsWordChar.js000066400000000000000000000071571516525472400227410ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var debug = require('object-inspect'); var forEach = require('for-each'); var keys = require('object-keys'); var v = require('es-value-fixtures'); var caseFolding = require('../../helpers/caseFolding.json'); module.exports = function (t, year, actual) { t.ok(year >= 2015, 'ES2015+'); var IsWordChar = year >= 2023 ? actual : year >= 2017 ? function IsWordChar(rer, Input, e) { // ES2017 - ES2022 return actual(e, Input.length, Input, rer['[[IgnoreCase]]'], rer['[[Unicode]]']); } : function IsWordChar(rer, Input, e) { // ES2015 - ES2016 return actual(e, Input.length, Input); }; var rer = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 1 }; forEach(v.nonIntegerNumbers, function (nonInteger) { t['throws']( function () { IsWordChar(rer, { length: nonInteger }); }, TypeError, 'Input.length: ' + debug(nonInteger) + ' is not an integer' ); t['throws']( function () { IsWordChar(rer, [], nonInteger); }, TypeError, 'e: ' + debug(nonInteger) + ' is not an integer' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { IsWordChar(assign({}, rer, { '[[IgnoreCase]]': nonBoolean }), '', 0); }, TypeError, '[[IgnoreCase]]: ' + debug(nonBoolean) + ' is not a Boolean' ); t['throws']( function () { IsWordChar(assign({}, rer, { '[[Unicode]]': nonBoolean }), '', 0); }, TypeError, '[[Unicode]]: ' + debug(nonBoolean) + ' is not a Boolean' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { return IsWordChar(rer, nonArray, 0); }, TypeError, 'Input: ' + debug(nonArray) + ' is not an Array' ); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { return IsWordChar(rer, [nonString], 0); }, TypeError, 'Input: ' + debug(nonString) + ' is not a character' ); }); t.equal(IsWordChar(rer, [], -1), false, '`e`: -1 yields false'); t.equal(IsWordChar(rer, [], 1), false, 'arg 1 and 2 the same yields false'); t.equal(IsWordChar(rer, ['a'], 1), false, 'arg 1 and 2 the same yields false even with non-word chars'); t.equal(IsWordChar(rer, ['a'], 1), false, 'arg 1 and 2 the same yields false even with word chars'); t.equal(IsWordChar(rer, [], 0), false, 'arg 2 length and arg 3 the same yields false'); t.equal(IsWordChar(rer, ['a', '!'], 0), true, 'a is a word char'); t.equal(IsWordChar(rer, ['!', 'b'], 1), true, 'b is a word char'); if (year >= 2017) { forEach(keys(caseFolding.C), function (input) { var isBasic = (/^[a-zA-Z0-9_]$/).test(input); var isFancy = (/^[a-zA-Z0-9_]$/).test(caseFolding.C[input]); t.equal( IsWordChar(assign({}, rer, { '[[Unicode]]': true }), [input], 0), isBasic, 'C mapping, IgnoreCase false: ' + debug(input) + ' is a word char' ); t.equal( IsWordChar(assign({}, rer, { '[[IgnoreCase]]': true, '[[Unicode]]': true }), [input], 0), isBasic || isFancy, 'C mapping, IgnoreCase true: ' + debug(input) + ' is a word char' ); }); forEach(keys(caseFolding.S), function (input) { var isBasic = (/^[a-zA-Z0-9_]$/).test(input); var isFancy = (/^[a-zA-Z0-9_]$/).test(caseFolding.S[input]); t.equal( IsWordChar(assign({}, rer, { '[[Unicode]]': true }), [input], 0), isBasic, 'S mapping, IgnoreCase false: ' + debug(input) + ' is a word char' ); t.equal( IsWordChar(assign({}, rer, { '[[IgnoreCase]]': true, '[[Unicode]]': true }), [input], 0), isBasic || isFancy, 'S mapping, IgnoreCase true: ' + debug(input) + ' is a word char' ); }); } }; ljharb-es-abstract-babee05/test/methods/IterableToArrayLike.js000066400000000000000000000022171516525472400245620ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, IterableToArrayLike) { t.equal(year, 2016, 'ES2016 only'); t.test('custom iterables', { skip: !v.hasSymbols }, function (st) { var O = {}; O[Symbol.iterator] = function () { var i = -1; return { next: function () { i += 1; return { done: i >= 5, value: i }; } }; }; st.deepEqual( IterableToArrayLike(O), [0, 1, 2, 3, 4], 'Symbol.iterator method is called and values collected' ); st.end(); }); t.deepEqual(IterableToArrayLike('abc'), ['a', 'b', 'c'], 'a string of code units spreads'); t.deepEqual(IterableToArrayLike('💩'), ['💩'], 'a string of code points spreads'); t.deepEqual(IterableToArrayLike('a💩c'), ['a', '💩', 'c'], 'a string of code points and units spreads'); var arr = [1, 2, 3]; t.deepEqual(IterableToArrayLike(arr), arr, 'an array becomes a similar array'); t.notEqual(IterableToArrayLike(arr), arr, 'an array becomes a different, but similar, array'); var O = {}; t.equal(IterableToArrayLike(O), O, 'a non-iterable non-array non-string object is returned directly'); }; ljharb-es-abstract-babee05/test/methods/IterableToList.js000066400000000000000000000023421516525472400236110ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, IterableToList) { t.ok(year >= 2017, 'ES2017+'); var customIterator = function () { var i = -1; return { next: function () { i += 1; return { done: i >= 5, value: i }; } }; }; t.deepEqual( IterableToList({}, customIterator), [0, 1, 2, 3, 4], 'iterator method is called and values collected' ); t.test('Symbol support', { skip: !v.hasSymbols }, function (st) { st.deepEqual(IterableToList('abc', String.prototype[Symbol.iterator]), ['a', 'b', 'c'], 'a string of code units spreads'); st.deepEqual(IterableToList('☃', String.prototype[Symbol.iterator]), ['☃'], 'a string of code points spreads'); var arr = [1, 2, 3]; st.deepEqual(IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a similar array'); st.notEqual(IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a different, but similar, array'); st.end(); }); t['throws']( function () { IterableToList({}, void 0); }, TypeError, 'non-function iterator method' ); if (year >= 2021) { t.deepEqual( IterableToList(['a', 'b', 'c']), ['a', 'b', 'c'], 'method is optional in ES2021+' ); } }; ljharb-es-abstract-babee05/test/methods/IteratorClose.js000066400000000000000000000132041516525472400235010ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var throwsSentinel = require('../helpers/throwsSentinel'); module.exports = function (t, year, IteratorClose, extras) { t.ok(year >= 2015, 'ES2015+'); var CompletionRecord = extras.getAO('CompletionRecord'); var NormalCompletion = extras.getAO('NormalCompletion'); var ThrowCompletion = extras.getAO('ThrowCompletion') || function (reason) { return new CompletionRecord('throw', reason); }; var unwrap = function (iteratorRecord) { return year >= 2023 ? iteratorRecord : iteratorRecord['[[Iterator]]']; }; forEach(v.primitives, function (nonObject) { t['throws']( function () { IteratorClose(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); t['throws']( function () { IteratorClose( unwrap({ '[[Iterator]]': nonObject, '[[Done]]': false, '[[NextMethod]]': function () { return {}; } }), function () {} ); }, TypeError, '[[Iterator]] is ' + debug(nonObject) + ', which is not an Object' ); t['throws']( function () { IteratorClose( unwrap({ '[[Iterator]]': { 'return': function () { return nonObject; } }, '[[Done]]': false, '[[NextMethod]]': function () { return {}; } }), function () {} ); }, TypeError, '`.return` returns ' + debug(nonObject) + ', which is not an Object' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {} })), nonFunction ); }, TypeError, debug(nonFunction) + ' is not a thunk for a Completion Record' ); if (nonFunction != null) { t['throws']( function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': nonFunction })), function () {} ); }, TypeError, '`.return` of ' + debug(nonFunction) + ' is not a Function' ); } }); var sentinel = {}; t.equal( IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': undefined })), function () { return sentinel; } ), sentinel, 'when `.return` is `undefined`, invokes and returns the completion thunk' ); t.equal( IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': undefined })), NormalCompletion(sentinel) ), sentinel, 'when `.return` is `undefined`, invokes and returns the Completion Record' ); /* eslint no-throw-literal: 0 */ t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { throw sentinel; } })), function () {} ); }, sentinel, '`.return` that throws, when completionThunk does not, throws exception from `.return`' ); t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { throw sentinel; } })), NormalCompletion() ); }, sentinel, '`.return` that throws, when Completion Record does not, throws exception from `.return`' ); t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { throw sentinel; } })), function () { throw -1; } ); }, -1, '`.return` that throws, when completionThunk does too, throws exception from completionThunk' ); t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { throw sentinel; } })), ThrowCompletion(-1) ); }, -1, '`.return` that throws, when Completion Record does too, throws exception from completionThunk' ); t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () {} })), function () { throw -1; } ); }, -1, '`.return` that does not throw, when completionThunk does, throws exception from completionThunk' ); t.assertion( throwsSentinel, function () { IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () {} })), ThrowCompletion(-1) ); }, -1, '`.return` that does not throw, when Completion Record does, throws exception from Completion Record' ); t.equal( IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { return sentinel; } })), function () { return 42; } ), 42, 'when `.return` and completionThunk do not throw, and `.return` returns an Object, returns completionThunk' ); t.equal( IteratorClose( unwrap(makeIteratorRecord({ next: function () {}, 'return': function () { return sentinel; } })), NormalCompletion(42) ), 42, 'when `.return` and Completion Record do not throw, and `.return` returns an Object, returns Completion Record' ); if (year >= 2018) { t['throws']( function () { IteratorClose( unwrap(makeIteratorRecord({ 'return': function () { throw sentinel; } })), function () { throw -1; } ); }, -1, '`.return` that throws, when completionThunk does too, throws exception from completionThunk' ); t['throws']( function () { IteratorClose( unwrap(makeIteratorRecord({ 'return': function () { throw sentinel; } })), ThrowCompletion(-1) ); }, -1, '`.return` that throws, when Competion Record does too, throws exception from Competion Record' ); } }; ljharb-es-abstract-babee05/test/methods/IteratorComplete.js000066400000000000000000000012501516525472400242020ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IteratorComplete) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { IteratorComplete(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); }); forEach(v.truthies, function (truthy) { t.equal(IteratorComplete({ done: truthy }), true, '{ done: ' + debug(truthy) + ' } is true'); }); forEach(v.falsies, function (falsy) { t.equal(IteratorComplete({ done: falsy }), false, '{ done: ' + debug(falsy) + ' } is false'); }); }; ljharb-es-abstract-babee05/test/methods/IteratorNext.js000066400000000000000000000043661516525472400233630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); module.exports = function (t, year, IteratorNext) { t.ok(year >= 2015, 'ES2015+'); var unwrap = function (iteratorRecord) { return year >= 2023 ? iteratorRecord : iteratorRecord['[[Iterator]]']; }; forEach(v.primitives, function (nonObject) { t['throws']( function () { IteratorNext(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); t['throws']( function () { IteratorNext(unwrap(makeIteratorRecord({ next: function () { return nonObject; } }))); }, TypeError, '`next()` returns ' + debug(nonObject) + ', which is not an Object' ); }); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { IteratorNext(unwrap(makeIteratorRecord({ next: nonFunction }))); }, TypeError, '`next` of ' + debug(nonFunction) + ' is not a function' ); }); var iterator = { next: function (value) { return [arguments.length, value]; } }; t.deepEqual( IteratorNext(unwrap(makeIteratorRecord(iterator))), [0, undefined], 'returns expected value from `.next()`; `next` receives expected 0 arguments' ); t.deepEqual( IteratorNext(unwrap(makeIteratorRecord(iterator)), iterator), [1, iterator], 'returns expected value from `.next()`; `next` receives expected 1 argument' ); // forEach(v.primitives, function (nonObject) { t['throws']( function () { IteratorNext(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); t['throws']( function () { IteratorNext(unwrap(makeIteratorRecord({ next: function () { return nonObject; } }))); }, TypeError, '`next()` returns ' + debug(nonObject) + ', which is not an Object' ); }); var iterator2 = makeIteratorRecord({ next: function (value) { return [arguments.length, value]; } }); t.deepEqual( IteratorNext(unwrap(iterator2)), [0, undefined], 'returns expected value from `.next()`; `next` receives expected 0 arguments' ); t.deepEqual( IteratorNext(unwrap(iterator2), iterator2), [1, iterator2], 'returns expected value from `.next()`; `next` receives expected 1 argument' ); }; ljharb-es-abstract-babee05/test/methods/IteratorStep.js000066400000000000000000000021361516525472400233510ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var esV = require('../helpers/v'); module.exports = function (t, year, IteratorStep) { t.ok(year >= 2015, 'ES2015+'); var unwrap = function (iteratorRecord) { return year >= 2023 ? iteratorRecord : iteratorRecord['[[Iterator]]']; }; forEach(esV.unknowns, function (nonIteratorRecord) { t['throws']( function () { IteratorStep(nonIteratorRecord); }, TypeError, debug(nonIteratorRecord) + ' is not an Iterator Record' ); }); var iterator = { next: function () { return { done: false, value: [1, arguments.length] }; } }; t.deepEqual( IteratorStep(unwrap(makeIteratorRecord(iterator))), { done: false, value: [1, 0] }, 'not-done iterator result yields iterator result' ); var iterator2 = { next: function () { return { done: true, value: [2, arguments.length] }; } }; t.deepEqual( IteratorStep(unwrap(makeIteratorRecord(iterator2))), false, 'done iterator result yields false' ); }; ljharb-es-abstract-babee05/test/methods/IteratorStepValue.js000066400000000000000000000072771516525472400243610ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var esV = require('../helpers/v'); module.exports = function (t, year, IteratorStepValue) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonIteratorRecord) { t['throws']( function () { IteratorStepValue(nonIteratorRecord); }, TypeError, debug(nonIteratorRecord) + ' is not an Iterator Record' ); }); var done = year >= 2025 ? false : 'DONE'; t.test('sync iterator record', function (st) { var i = 0; var iterator = { next: function next(x) { try { return { done: i > 2, value: [i, arguments.length, x] }; } finally { i += 1; } } }; var syncIteratorRecord = makeIteratorRecord(iterator); st.deepEqual(IteratorStepValue(syncIteratorRecord), [0, 0, undefined], 'first yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), [1, 0, undefined], 'second yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), [2, 0, undefined], 'third yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), done, 'fourth yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), done, 'fifth yield'); st.end(); }); var sentinel = {}; t.test('next throws', function (st) { var iterator = { next: function next() { throw sentinel; } }; var syncIteratorRecord = makeIteratorRecord(iterator); st.equal(syncIteratorRecord['[[Done]]'], false); try { IteratorStepValue(syncIteratorRecord); st.fail('did not throw'); } catch (e) { st.equal(e, sentinel, 'when next throws, it is rethrown'); } st.equal(syncIteratorRecord['[[Done]]'], true); st.end(); }); t.test('.done throws', { skip: !$defineProperty }, function (st) { var result = {}; $defineProperty(result, 'done', { configurable: true, enumerable: true, get: function () { throw sentinel; } }); var iterator = { next: function () { return result; } }; var syncIteratorRecord = makeIteratorRecord(iterator); st.equal(syncIteratorRecord['[[Done]]'], false); try { IteratorStepValue(syncIteratorRecord); st.fail('did not throw'); } catch (e) { st.equal(e, sentinel, 'when .done throws, it is rethrown'); } st.equal(syncIteratorRecord['[[Done]]'], true); st.end(); }); t.test('.value throws', { skip: !$defineProperty }, function (st) { var result = { done: false }; $defineProperty(result, 'value', { configurable: true, enumerable: true, get: function () { throw sentinel; } }); var iterator = { next: function () { return result; } }; var syncIteratorRecord = makeIteratorRecord(iterator); st.equal(syncIteratorRecord['[[Done]]'], false); try { IteratorStepValue(syncIteratorRecord); st.fail('did not throw'); } catch (e) { st.equal(e, sentinel, 'when .value throws, it is rethrown'); } st.equal(syncIteratorRecord['[[Done]]'], true); st.end(); }); t.test('conflated sentinel value', function (st) { var i = 0; var iterator = { next: function next() { try { return { done: i > 2, value: i > 0 ? i : done }; } finally { i += 1; } } }; var syncIteratorRecord = makeIteratorRecord(iterator); st.deepEqual(IteratorStepValue(syncIteratorRecord), done, 'first yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), 1, 'second yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), 2, 'third yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), done, 'fourth yield'); st.deepEqual(IteratorStepValue(syncIteratorRecord), done, 'fifth yield'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/IteratorToList.js000066400000000000000000000031121516525472400236470ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var makeIteratorRecord = require('../helpers/makeIteratorRecord'); var esV = require('../helpers/v'); module.exports = function (t, year, IteratorToList) { t.ok(year >= 2023, 'ES2023+'); forEach(esV.unknowns, function (nonIteratorRecord) { t['throws']( function () { IteratorToList(nonIteratorRecord); }, TypeError, debug(nonIteratorRecord) + ' is not an Iterator Record' ); }); var customIterator = function () { var i = -1; return { next: function () { i += 1; return { done: i >= 5, value: i }; } }; }; var iteratorRecord = makeIteratorRecord(customIterator()); t.deepEqual( IteratorToList(iteratorRecord), [0, 1, 2, 3, 4], 'iterator method is called and values collected' ); t.test('Symbol support', { skip: !v.hasSymbols }, function (st) { st.deepEqual(IteratorToList(makeIteratorRecord('abc'[Symbol.iterator]())), ['a', 'b', 'c'], 'a string of code units spreads'); st.deepEqual(IteratorToList(makeIteratorRecord('☃'[Symbol.iterator]())), ['☃'], 'a string of code points spreads'); var arr = [1, 2, 3]; st.deepEqual(IteratorToList(makeIteratorRecord(arr[Symbol.iterator]())), arr, 'an array becomes a similar array'); st.notEqual(IteratorToList(makeIteratorRecord(arr[Symbol.iterator]())), arr, 'an array becomes a different, but similar, array'); st.end(); }); t['throws']( function () { IteratorToList(makeIteratorRecord({})); }, TypeError, 'non-function iterator method' ); }; ljharb-es-abstract-babee05/test/methods/IteratorValue.js000066400000000000000000000007631516525472400235160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, IteratorValue) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { IteratorValue(nonObject); }, TypeError, debug(nonObject) + ' is not an Object' ); }); var sentinel = {}; t.equal(IteratorValue({ value: sentinel }), sentinel, 'Gets `.value` off the object'); }; ljharb-es-abstract-babee05/test/methods/KeyForSymbol.js000066400000000000000000000014641516525472400233140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, KeyForSymbol, extras) { t.ok(year >= 2023, 'ES2023+'); var SymbolDescriptiveString = extras.getAO('SymbolDescriptiveString'); forEach(v.nonSymbolPrimitives, function (nonSymbol) { t['throws']( function () { KeyForSymbol(nonSymbol); }, TypeError, debug(nonSymbol) + ' is not a Symbol' ); }); forEach(v.registeredSymbols, function (symbol) { t.equal( KeyForSymbol(symbol), SymbolDescriptiveString(symbol).slice(7, -1), debug(symbol) + ' yields expected key' ); }); forEach(v.unregisteredSymbols, function (symbol) { t.equal( KeyForSymbol(symbol), undefined, debug(symbol) + ' yields expected key' ); }); }; ljharb-es-abstract-babee05/test/methods/LengthOfArrayLike.js000066400000000000000000000010111516525472400242250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, LengthOfArrayLike) { t.ok(year >= 2020, 'ES2020+'); forEach(v.primitives, function (primitive) { t['throws']( function () { LengthOfArrayLike(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); t.equal(LengthOfArrayLike([]), 0); t.equal(LengthOfArrayLike([1]), 1); t.equal(LengthOfArrayLike({ length: 42 }), 42); }; ljharb-es-abstract-babee05/test/methods/MakeDataViewWithBufferWitnessRecord.js000066400000000000000000000023521516525472400277300ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, MakeDataViewWithBufferWitnessRecord) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonDV) { t['throws']( function () { MakeDataViewWithBufferWitnessRecord(nonDV, 'UNORDERED'); }, TypeError, debug(nonDV) + ' is not a DataView' ); }); t.test('DataViews supported', { skip: typeof DataView !== 'function' }, function (st) { forEach(v.nonStrings, function (nonString) { st['throws']( function () { MakeDataViewWithBufferWitnessRecord(new DataView(new ArrayBuffer(8)), nonString); }, TypeError, debug(nonString) + ' is not a valid order value' ); }); var ab = new ArrayBuffer(8); var dv = new DataView(ab); st.deepEqual( MakeDataViewWithBufferWitnessRecord(dv, 'UNORDERED'), { '[[Object]]': dv, '[[CachedBufferByteLength]]': ab.byteLength }, 'works with a DataView, unordered' ); st.deepEqual( MakeDataViewWithBufferWitnessRecord(dv, 'SEQ-CST'), { '[[Object]]': dv, '[[CachedBufferByteLength]]': ab.byteLength }, 'works with a DataView, seq-cst' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/MakeDate.js000066400000000000000000000020511516525472400223730ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var esV = require('../helpers/v'); module.exports = function (t, year, MakeDate) { t.ok(year >= 5, 'ES5+'); forEach(esV.nonFiniteNumbers, function (nonFiniteNumber) { t.equal(MakeDate(nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `day`'); t.equal(MakeDate(0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`'); }); t.equal(MakeDate(0, 0), 0, 'zero day and zero time is zero date'); t.equal(MakeDate(0, 123), 123, 'zero day and nonzero time is a date of the "time"'); t.equal(MakeDate(1, 0), esV.msPerDay, 'day of 1 and zero time is a date of "ms per day"'); t.equal(MakeDate(3, 0), 3 * esV.msPerDay, 'day of 3 and zero time is a date of thrice "ms per day"'); t.equal(MakeDate(1, 123), esV.msPerDay + 123, 'day of 1 and nonzero time is a date of "ms per day" plus the "time"'); t.equal(MakeDate(3, 123), (3 * esV.msPerDay) + 123, 'day of 3 and nonzero time is a date of thrice "ms per day" plus the "time"'); }; ljharb-es-abstract-babee05/test/methods/MakeDay.js000066400000000000000000000023571516525472400222440ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var MAX_VALUE = require('math-intrinsics/constants/maxValue'); module.exports = function (t, year, MakeDay) { t.ok(year >= 5, 'ES5+'); forEach([NaN, Infinity, -Infinity, MAX_VALUE], function (nonFiniteNumber) { t.equal(MakeDay(nonFiniteNumber, 0, 0), NaN, 'year: ' + debug(nonFiniteNumber) + ' is not finite'); t.equal(MakeDay(0, nonFiniteNumber, 0), NaN, 'month: ' + debug(nonFiniteNumber) + ' is not finite'); t.equal(MakeDay(0, 0, nonFiniteNumber), NaN, 'date: ' + debug(nonFiniteNumber) + ' is not finite'); }); t.equal(MakeDay(MAX_VALUE, MAX_VALUE, 0), NaN, 'year: ' + debug(MAX_VALUE) + ' combined with month: ' + debug(MAX_VALUE) + ' is too large'); var day2015 = 16687; t.equal(MakeDay(2015, 8, 9), day2015, '2015.09.09 is day 16687'); var day2016 = day2015 + 366; // 2016 is a leap year t.equal(MakeDay(2016, 8, 9), day2016, '2015.09.09 is day 17053'); var day2017 = day2016 + 365; t.equal(MakeDay(2017, 8, 9), day2017, '2017.09.09 is day 17418'); var day2018 = day2017 + 365; t.equal(MakeDay(2018, 8, 9), day2018, '2018.09.09 is day 17783'); var day2019 = day2018 + 365; t.equal(MakeDay(2019, 8, 9), day2019, '2019.09.09 is day 18148'); }; ljharb-es-abstract-babee05/test/methods/MakeFullYear.js000066400000000000000000000013331516525472400232430ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); module.exports = function (t, year, MakeFullYear) { t.ok(year >= 2024, 'ES2024+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { MakeFullYear(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); t.equal(MakeFullYear(NaN), NaN, 'NaN returns NaN'); t.equal(MakeFullYear(Infinity), Infinity, '∞ returns ∞'); t.equal(MakeFullYear(-Infinity), -Infinity, '-∞ returns -∞'); t.equal(MakeFullYear(0), 1900, '0 returns 1900'); t.equal(MakeFullYear(99), 1999, '99 returns 1999'); t.equal(MakeFullYear(100), 100, '100 returns 100'); }; ljharb-es-abstract-babee05/test/methods/MakeMatchIndicesIndexPairArray.js000066400000000000000000000052071516525472400266620ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $setProto = require('set-proto'); module.exports = function (t, year, MakeMatchIndicesIndexPairArray) { t.ok(year >= 2022, 'ES2022+'); forEach(v.nonStrings, function (notString) { t['throws']( function () { return MakeMatchIndicesIndexPairArray(notString); }, TypeError, '`S`: ' + debug(notString) + ' is not a string' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { return MakeMatchIndicesIndexPairArray('', nonArray); }, TypeError, '`indices`: ' + debug(nonArray) + ' is not a List' ); t['throws']( function () { return MakeMatchIndicesIndexPairArray('', [undefined], nonArray); }, TypeError, '`groupNames`: ' + debug(nonArray) + ' is not a List' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { MakeMatchIndicesIndexPairArray('', [undefined], [], nonBoolean); }, TypeError, '`hasGroups`: ' + debug(nonBoolean) + ' is not a Boolean' ); }); t['throws']( function () { MakeMatchIndicesIndexPairArray('', [undefined], [undefined], true); }, TypeError, '`indices` must contain exactly one more item than `groupNames`' ); t.deepEqual( MakeMatchIndicesIndexPairArray( 'abc', [undefined, { '[[StartIndex]]': 0, '[[EndIndex]]': 1 }, { '[[StartIndex]]': 1, '[[EndIndex]]': 3 }], [undefined, undefined], false ), assign([undefined, [0, 1], [1, 3]], { groups: undefined }), 'no groups' ); t.test('has groups', { skip: !Object.create && !$setProto }, function (st) { var result = MakeMatchIndicesIndexPairArray( 'abc', [undefined, { '[[StartIndex]]': 0, '[[EndIndex]]': 1 }, { '[[StartIndex]]': 1, '[[EndIndex]]': 3 }], ['G1', 'G2'], true ); st.equal('toString' in {}, true, 'normal objects have toString'); st.equal('toString' in result.groups, false, 'makes a null `groups` object'); st.deepEqual( result, assign( [undefined, [0, 1], [1, 3]], { groups: $setProto({ G1: [0, 1], G2: [1, 3] }, null) } ), 'has groups, no group names' ); st.end(); }); t.test('has groups when no native Object.create', { skip: Object.create || $setProto }, function (st) { st['throws']( function () { MakeMatchIndicesIndexPairArray(null); }, SyntaxError, 'without a native Object.create, can not create null objects' ); st.end(); }); t['throws']( function () { MakeMatchIndicesIndexPairArray('', [undefined, undefined], [''], false); }, TypeError, 'when `!hasGroups`, `groupNames` may only contain `undefined`' ); }; ljharb-es-abstract-babee05/test/methods/MakeTime.js000066400000000000000000000015761516525472400224270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, MakeTime) { t.ok(year >= 5, 'ES5+'); forEach(esV.nonFiniteNumbers, function (nonFiniteNumber) { t.equal(MakeTime(nonFiniteNumber, 0, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `hour`'); t.equal(MakeTime(0, nonFiniteNumber, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `min`'); t.equal(MakeTime(0, 0, nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `sec`'); t.equal(MakeTime(0, 0, 0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `ms`'); }); t.equal( MakeTime(1.2, 2.3, 3.4, 4.5), (1 * esV.msPerHour) + (2 * esV.msPerMinute) + (3 * esV.msPerSecond) + 4, 'all numbers are converted to integer, multiplied by the right number of ms, and summed' ); }; ljharb-es-abstract-babee05/test/methods/MakeTypedArrayWithBufferWitnessRecord.js000066400000000000000000000022671516525472400303150ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, MakeTypedArrayWithBufferWitnessRecord) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { MakeTypedArrayWithBufferWitnessRecord(nonTA, 'UNORDERED'); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { st.test('Typed Array: ' + TypedArray, function (tat) { var TA = global[TypedArray]; var ta = new TA(8); tat['throws']( function () { MakeTypedArrayWithBufferWitnessRecord(ta, 'not a valid order'); }, TypeError, 'invalid order enum value throws' ); var record = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); tat.deepEqual(record, { '[[Object]]': ta, '[[CachedBufferByteLength]]': ta.byteLength }); tat.end(); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/MinFromTime.js000066400000000000000000000003461516525472400231130ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, MinFromTime) { t.ok(year >= 5, 'ES5+'); var now = new Date(); t.equal(MinFromTime(now.getTime()), now.getUTCMinutes(), 'minute from Date timestamp matches getUTCMinutes'); }; ljharb-es-abstract-babee05/test/methods/MonthFromTime.js000066400000000000000000000077701516525472400234650ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, MonthFromTime) { t.ok(year >= 5, 'ES5+'); t.equal(MonthFromTime(Date.UTC(2019, 0, 1)), 0, 'non-leap: 1/1 gives January'); t.equal(MonthFromTime(Date.UTC(2019, 0, 31)), 0, 'non-leap: 1/31 gives January'); t.equal(MonthFromTime(Date.UTC(2019, 1, 1)), 1, 'non-leap: 2/1 gives February'); t.equal(MonthFromTime(Date.UTC(2019, 1, 28)), 1, 'non-leap: 2/28 gives February'); t.equal(MonthFromTime(Date.UTC(2019, 1, 29)), 2, 'non-leap: 2/29 gives March'); t.equal(MonthFromTime(Date.UTC(2019, 2, 1)), 2, 'non-leap: 3/1 gives March'); t.equal(MonthFromTime(Date.UTC(2019, 2, 31)), 2, 'non-leap: 3/31 gives March'); t.equal(MonthFromTime(Date.UTC(2019, 3, 1)), 3, 'non-leap: 4/1 gives April'); t.equal(MonthFromTime(Date.UTC(2019, 3, 30)), 3, 'non-leap: 4/30 gives April'); t.equal(MonthFromTime(Date.UTC(2019, 4, 1)), 4, 'non-leap: 5/1 gives May'); t.equal(MonthFromTime(Date.UTC(2019, 4, 31)), 4, 'non-leap: 5/31 gives May'); t.equal(MonthFromTime(Date.UTC(2019, 5, 1)), 5, 'non-leap: 6/1 gives June'); t.equal(MonthFromTime(Date.UTC(2019, 5, 30)), 5, 'non-leap: 6/30 gives June'); t.equal(MonthFromTime(Date.UTC(2019, 6, 1)), 6, 'non-leap: 7/1 gives July'); t.equal(MonthFromTime(Date.UTC(2019, 6, 31)), 6, 'non-leap: 7/31 gives July'); t.equal(MonthFromTime(Date.UTC(2019, 7, 1)), 7, 'non-leap: 8/1 gives August'); t.equal(MonthFromTime(Date.UTC(2019, 7, 30)), 7, 'non-leap: 8/30 gives August'); t.equal(MonthFromTime(Date.UTC(2019, 8, 1)), 8, 'non-leap: 9/1 gives September'); t.equal(MonthFromTime(Date.UTC(2019, 8, 30)), 8, 'non-leap: 9/30 gives September'); t.equal(MonthFromTime(Date.UTC(2019, 9, 1)), 9, 'non-leap: 10/1 gives October'); t.equal(MonthFromTime(Date.UTC(2019, 9, 31)), 9, 'non-leap: 10/31 gives October'); t.equal(MonthFromTime(Date.UTC(2019, 10, 1)), 10, 'non-leap: 11/1 gives November'); t.equal(MonthFromTime(Date.UTC(2019, 10, 30)), 10, 'non-leap: 11/30 gives November'); t.equal(MonthFromTime(Date.UTC(2019, 11, 1)), 11, 'non-leap: 12/1 gives December'); t.equal(MonthFromTime(Date.UTC(2019, 11, 31)), 11, 'non-leap: 12/31 gives December'); t.equal(MonthFromTime(Date.UTC(2016, 0, 1)), 0, 'leap: 1/1 gives January'); t.equal(MonthFromTime(Date.UTC(2016, 0, 31)), 0, 'leap: 1/31 gives January'); t.equal(MonthFromTime(Date.UTC(2016, 1, 1)), 1, 'leap: 2/1 gives February'); t.equal(MonthFromTime(Date.UTC(2016, 1, 28)), 1, 'leap: 2/28 gives February'); t.equal(MonthFromTime(Date.UTC(2016, 1, 29)), 1, 'leap: 2/29 gives February'); t.equal(MonthFromTime(Date.UTC(2016, 2, 1)), 2, 'leap: 3/1 gives March'); t.equal(MonthFromTime(Date.UTC(2016, 2, 31)), 2, 'leap: 3/31 gives March'); t.equal(MonthFromTime(Date.UTC(2016, 3, 1)), 3, 'leap: 4/1 gives April'); t.equal(MonthFromTime(Date.UTC(2016, 3, 30)), 3, 'leap: 4/30 gives April'); t.equal(MonthFromTime(Date.UTC(2016, 4, 1)), 4, 'leap: 5/1 gives May'); t.equal(MonthFromTime(Date.UTC(2016, 4, 31)), 4, 'leap: 5/31 gives May'); t.equal(MonthFromTime(Date.UTC(2016, 5, 1)), 5, 'leap: 6/1 gives June'); t.equal(MonthFromTime(Date.UTC(2016, 5, 30)), 5, 'leap: 6/30 gives June'); t.equal(MonthFromTime(Date.UTC(2016, 6, 1)), 6, 'leap: 7/1 gives July'); t.equal(MonthFromTime(Date.UTC(2016, 6, 31)), 6, 'leap: 7/31 gives July'); t.equal(MonthFromTime(Date.UTC(2016, 7, 1)), 7, 'leap: 8/1 gives August'); t.equal(MonthFromTime(Date.UTC(2016, 7, 30)), 7, 'leap: 8/30 gives August'); t.equal(MonthFromTime(Date.UTC(2016, 8, 1)), 8, 'leap: 9/1 gives September'); t.equal(MonthFromTime(Date.UTC(2016, 8, 30)), 8, 'leap: 9/30 gives September'); t.equal(MonthFromTime(Date.UTC(2016, 9, 1)), 9, 'leap: 10/1 gives October'); t.equal(MonthFromTime(Date.UTC(2016, 9, 31)), 9, 'leap: 10/31 gives October'); t.equal(MonthFromTime(Date.UTC(2016, 10, 1)), 10, 'leap: 11/1 gives November'); t.equal(MonthFromTime(Date.UTC(2016, 10, 30)), 10, 'leap: 11/30 gives November'); t.equal(MonthFromTime(Date.UTC(2016, 11, 1)), 11, 'leap: 12/1 gives December'); t.equal(MonthFromTime(Date.UTC(2016, 11, 31)), 11, 'leap: 12/31 gives December'); }; ljharb-es-abstract-babee05/test/methods/NewPromiseCapability.js000066400000000000000000000025151516525472400250170ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var isPromiseCapabilityRecord = require('../../helpers/records/promise-capability-record'); module.exports = function (t, year, NewPromiseCapability) { t.ok(year >= 2015, 'ES2015+'); forEach([].concat( v.nonFunctions, v.nonConstructorFunctions ), function (nonConstructor) { t['throws']( function () { NewPromiseCapability(nonConstructor); }, TypeError, debug(nonConstructor) + ' is not a constructor' ); }); var calls = []; var C = function C(executor) { calls.push('constructor'); t.equal(arguments.length, 1, 'is passed one argument'); t.equal(typeof executor, 'function', 'is passed a function'); executor( function resolve() { calls.push('resolve'); }, function reject() { calls.push('reject'); } ); }; C.prototype.then = function () {}; var record = NewPromiseCapability(C); t.equal( isPromiseCapabilityRecord(record), true, 'return value is a Promise Capability Record' ); t.ok(record['[[Promise]]'] instanceof C, 'is an instance of the passed constructor'); t.deepEqual(calls, ['constructor']); record['[[Resolve]]'](); t.deepEqual(calls, ['constructor', 'resolve']); record['[[Reject]]'](); t.deepEqual(calls, ['constructor', 'resolve', 'reject']); }; ljharb-es-abstract-babee05/test/methods/NormalCompletion.js000066400000000000000000000014351516525472400242070ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); module.exports = function (t, year, NormalCompletion, extras) { t.ok(year >= 2015, 'ES2015+'); var CompletionRecord = extras.getAO('CompletionRecord'); var sentinel = {}; var completion = NormalCompletion(sentinel); t.ok(completion instanceof CompletionRecord, 'produces an instance of CompletionRecord'); t.equal(SLOT.get(completion, year < 2016 ? '[[type]]' : '[[Type]]'), 'normal', 'completion type is "normal"'); t.equal(completion.type(), 'normal', 'completion type is "normal" (via property)'); t.equal(SLOT.get(completion, year < 2016 ? '[[value]]' : '[[Value]]'), sentinel, 'completion value is the argument provided'); t.equal(completion.value(), sentinel, 'completion value is the argument provided (via property)'); }; ljharb-es-abstract-babee05/test/methods/Number/000077500000000000000000000000001516525472400216145ustar00rootroot00000000000000ljharb-es-abstract-babee05/test/methods/Number/add.js000066400000000000000000000030321516525472400227000ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberAdd) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberAdd(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberAdd(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberAdd(+Infinity, +Infinity), +Infinity, '+∞ + +∞ is +∞'); t.equal(NumberAdd(-Infinity, -Infinity), -Infinity, '-∞ + -∞ is -∞'); t.equal(NumberAdd(+Infinity, -Infinity), NaN, '+∞ + -∞ is NaN'); t.equal(NumberAdd(-Infinity, +Infinity), NaN, '-∞ + +∞ is NaN'); t.equal(NumberAdd(+0, +0), +0, '0 + 0 is +0'); t.equal(NumberAdd(+0, -0), +0, '0 + -0 is +0'); t.equal(NumberAdd(-0, +0), +0, '-0 + 0 is +0'); t.equal(NumberAdd(-0, -0), -0, '-0 + -0 is -0'); forEach(v.numbers, function (number) { if (number !== 0) { t.equal(NumberAdd(number, 0), number, debug(number) + ' + 0 adds to ' + number); } t.equal(NumberAdd(number, 1), number + 1, debug(number) + ' + 1 adds to ' + (number + 1)); t.equal(NumberAdd(1, number), number + 1, '1 + ' + debug(number) + ' adds to ' + (number + 1)); t.equal(NumberAdd(number, -42), number - 42, debug(number) + ' + -42 adds to ' + (number - 42)); t.equal(NumberAdd(-42, number), number - 42, '-42 + ' + debug(number) + ' adds to ' + (number - 42)); }); }; ljharb-es-abstract-babee05/test/methods/Number/bitwiseAND.js000066400000000000000000000011071516525472400241420ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberBitwiseAND) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberBitwiseAND(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberBitwiseAND(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberBitwiseAND(1, 2), 1 & 2); }; ljharb-es-abstract-babee05/test/methods/Number/bitwiseNOT.js000066400000000000000000000010171516525472400242000ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberBitwiseNOT) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberBitwiseNOT(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(v.int32s, function (int32) { t.equal(NumberBitwiseNOT(int32), ~int32, debug(int32) + ' becomes ~' + debug(int32)); }); }; ljharb-es-abstract-babee05/test/methods/Number/bitwiseOR.js000066400000000000000000000011031516525472400240540ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberBitwiseOR) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberBitwiseOR(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberBitwiseOR(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberBitwiseOR(1, 2), 1 | 2); }; ljharb-es-abstract-babee05/test/methods/Number/bitwiseXOR.js000066400000000000000000000011071516525472400242100ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberBitwiseXOR) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberBitwiseXOR(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberBitwiseXOR(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberBitwiseXOR(1, 2), 1 ^ 2); }; ljharb-es-abstract-babee05/test/methods/Number/divide.js000066400000000000000000000032251516525472400234200ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberDivide) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberDivide(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberDivide(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberDivide(Infinity, Infinity), NaN, '∞ / ∞ is NaN'); t.equal(NumberDivide(-Infinity, Infinity), NaN, '-∞ / ∞ is NaN'); t.equal(NumberDivide(Infinity, -Infinity), NaN, '∞ / -∞ is NaN'); t.equal(NumberDivide(-Infinity, -Infinity), NaN, '-∞ / -∞ is NaN'); t.equal(NumberDivide(NaN, NaN), NaN, 'NaN / NaN is NaN'); t.equal(NumberDivide(+Infinity, +0), +Infinity, '+∞ / +0 is +∞'); t.equal(NumberDivide(-Infinity, -0), +Infinity, '-∞ / -0 is +∞'); t.equal(NumberDivide(+Infinity, -0), -Infinity, '+∞ / -0 is -∞'); t.equal(NumberDivide(-Infinity, +0), -Infinity, '-∞ / +0 is -∞'); t.equal(NumberDivide(+0, +Infinity), +0, '+0 / +∞ is +0'); t.equal(NumberDivide(-0, -Infinity), +0, '-0 / -∞ is +0'); t.equal(NumberDivide(-0, +Infinity), -0, '-0 / +∞ is -0'); t.equal(NumberDivide(+0, -Infinity), -0, '+0 / -∞ is -0'); forEach(v.numbers, function (number) { if (number !== 0 && isFinite(number)) { t.equal(NumberDivide(number, number), 1, debug(number) + ' divided by itself is 1'); t.equal(NumberDivide(number, 2), number / 2, debug(number) + ' divided by 2 is half itself'); } }); }; ljharb-es-abstract-babee05/test/methods/Number/equal.js000066400000000000000000000030131516525472400232560ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberEqual) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberEqual(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberEqual(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberEqual(Infinity, Infinity), true, '∞ === ∞'); t.equal(NumberEqual(-Infinity, Infinity), false, '-∞ !== ∞'); t.equal(NumberEqual(Infinity, -Infinity), false, '∞ !== -∞'); t.equal(NumberEqual(-Infinity, -Infinity), true, '-∞ === -∞'); t.equal(NumberEqual(NaN, NaN), false, 'NaN !== NaN'); t.equal(NumberEqual(Infinity, 0), false, '∞ !== 0'); t.equal(NumberEqual(-Infinity, -0), false, '-∞ !== -0'); t.equal(NumberEqual(Infinity, -0), false, '∞ !== -0'); t.equal(NumberEqual(-Infinity, 0), false, '-∞ !== 0'); t.equal(NumberEqual(+0, +0), true, '+0 === +0'); t.equal(NumberEqual(+0, -0), true, '+0 === -0'); t.equal(NumberEqual(-0, +0), true, '-0 === +0'); t.equal(NumberEqual(-0, -0), true, '-0 === -0'); forEach(v.numbers, function (number) { if (isFinite(number)) { t.equal(NumberEqual(number, number), true, debug(number) + ' is equal to itself'); t.equal(NumberEqual(number, number + 1), false, debug(number) + ' is not equal to itself plus 1'); } }); }; ljharb-es-abstract-babee05/test/methods/Number/exponentiate.js000066400000000000000000000060151516525472400246570ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberExponentiate) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberExponentiate(nonNumber, 0); }, TypeError, 'base: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberExponentiate(0, nonNumber); }, TypeError, 'exponent: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberExponentiate(0, 42), 0, '+0 ** 42 is +0'); t.equal(NumberExponentiate(0, -42), Infinity, '+0 ** 42 is +∞'); t.equal(NumberExponentiate(-0, 42), 0, '-0 ** 42 is +0'); t.equal(NumberExponentiate(-0, 41), -0, '-0 ** 41 is -0'); t.equal(NumberExponentiate(-0, -42), Infinity, '-0 ** 42 is +∞'); t.equal(NumberExponentiate(-0, -41), -Infinity, '-0 ** 41 is -∞'); t.equal(NumberExponentiate(Infinity, 0), 1, '+∞ ** 0 is 1'); t.equal(NumberExponentiate(Infinity, -0), 1, '+∞ ** -0 is 1'); t.equal(NumberExponentiate(-Infinity, 0), 1, '-∞ ** 0 is 1'); t.equal(NumberExponentiate(-Infinity, -0), 1, '-∞ ** -0 is 1'); t.equal(NumberExponentiate(Infinity, 1), Infinity, '+∞ ** 1 is +∞'); t.equal(NumberExponentiate(Infinity, 2), Infinity, '+∞ ** 2 is +∞'); t.equal(NumberExponentiate(Infinity, -1), +0, '+∞ ** -1 is +0'); t.equal(NumberExponentiate(Infinity, -2), +0, '+∞ ** -2 is +0'); t.equal(NumberExponentiate(-Infinity, 1), -Infinity, '-∞ ** 1 is -∞'); t.equal(NumberExponentiate(-Infinity, 2), Infinity, '-∞ ** 2 is +∞'); t.equal(NumberExponentiate(-Infinity, -1), -0, '-∞ ** --1 is -0'); t.equal(NumberExponentiate(-Infinity, -2), +0, '-∞ ** --2 is +0'); t.equal(NumberExponentiate(1.1, Infinity), Infinity, '1.1 ** +∞ is +∞'); t.equal(NumberExponentiate(1.1, -Infinity), 0, '1.1 ** -∞ is +0'); t.equal(NumberExponentiate(-1.1, Infinity), Infinity, '-1.1 ** +∞ is +∞'); t.equal(NumberExponentiate(-1.1, -Infinity), 0, '-1.1 ** -∞ is +0'); t.equal(NumberExponentiate(1, Infinity), NaN, '1 ** +∞ is NaN'); t.equal(NumberExponentiate(1, -Infinity), NaN, '1 ** -∞ is NaN'); t.equal(NumberExponentiate(-1, Infinity), NaN, '-1 ** +∞ is NaN'); t.equal(NumberExponentiate(-1, -Infinity), NaN, '-1 ** -∞ is NaN'); t.equal(NumberExponentiate(0.9, Infinity), 0, '0.9 ** +∞ is +0'); t.equal(NumberExponentiate(0.9, -Infinity), Infinity, '0.9 ** -∞ is ∞'); t.equal(NumberExponentiate(-0.9, Infinity), 0, '-0.9 ** +∞ is +0'); t.equal(NumberExponentiate(-0.9, -Infinity), Infinity, '-0.9 ** -∞ is +∞'); forEach([].concat( v.numbers, NaN ), function (number) { t.equal(NumberExponentiate(number, NaN), NaN, debug(number) + ' ** NaN is NaN'); if (number !== 0) { t.equal(NumberExponentiate(number, 0), 1, debug(number) + ' ** +0 is 1'); t.equal(NumberExponentiate(number, -0), 1, debug(number) + ' ** -0 is 1'); t.equal(NumberExponentiate(NaN, number), NaN, 'NaN ** ' + debug(number) + ' is NaN'); } }); }; ljharb-es-abstract-babee05/test/methods/Number/leftShift.js000066400000000000000000000014131516525472400241010ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberLeftShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberLeftShift(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberLeftShift(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); forEach([].concat( 0, v.int32s ), function (int32) { forEach([1, 3, 5, 31, 32, 33], function (bits) { t.equal(NumberLeftShift(int32, bits), int32 << bits, debug(int32) + ' << ' + bits + ' is ' + debug(int32 << bits)); }); }); }; ljharb-es-abstract-babee05/test/methods/Number/lessThan.js000066400000000000000000000041411516525472400237330ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberLessThan) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberLessThan(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberLessThan(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberLessThan(+0, -0), false, '+0 < -0 is false'); t.equal(NumberLessThan(+0, +0), false, '+0 < +0 is false'); t.equal(NumberLessThan(-0, +0), false, '-0 < +0 is false'); t.equal(NumberLessThan(-0, -0), false, '-0 < -0 is false'); t.equal(NumberLessThan(NaN, NaN), undefined, 'NaN < NaN is undefined'); t.equal(NumberLessThan(+Infinity, +Infinity), false, '+∞ < +∞ is false'); t.equal(NumberLessThan(+Infinity, -Infinity), false, '+∞ < -∞ is false'); t.equal(NumberLessThan(-Infinity, +Infinity), true, '-∞ < +∞ is true'); t.equal(NumberLessThan(-Infinity, -Infinity), false, '-∞ < -∞ is false'); forEach([].concat( v.numbers, v.infinities ), function (number) { t.equal(NumberLessThan(NaN, number), undefined, 'NaN < ' + debug(number) + ' is undefined'); t.equal(NumberLessThan(number, NaN), undefined, debug(number) + ' < NaN is undefined'); t.equal(NumberLessThan(number, number), false, debug(number) + ' is not less than itself'); if (isFinite(number)) { t.equal(NumberLessThan(number, number + 1), true, debug(number) + ' < ' + debug(number + 1) + ' is true'); t.equal(NumberLessThan(number + 1, number), false, debug(number + 1) + ' < ' + debug(number) + ' is false'); t.equal(NumberLessThan(Infinity, number), false, '+∞ < ' + debug(number) + ' is false'); t.equal(NumberLessThan(number, Infinity), true, debug(number) + ' < +∞ is true'); t.equal(NumberLessThan(-Infinity, number), true, '-∞ < ' + debug(number) + ' is true'); t.equal(NumberLessThan(number, -Infinity), false, debug(number) + ' < -∞ is false'); } }); }; ljharb-es-abstract-babee05/test/methods/Number/multiply.js000066400000000000000000000047461516525472400240440ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberMultiply) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberMultiply(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberMultiply(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); forEach([+0, -0, 1, -1], function (x) { var expected = x === 0 ? NaN : Infinity; t.equal(NumberMultiply(Infinity, x), expected, '+∞ * ' + debug(x) + ' is ' + debug(expected)); t.equal(NumberMultiply(x, Infinity), expected, debug(x) + ' * +∞ is ' + debug(expected)); t.equal(NumberMultiply(-Infinity, x), -expected, '-∞ * ' + debug(x) + ' is ' + debug(expected)); t.equal(NumberMultiply(x, -Infinity), -expected, debug(x) + ' * -∞ is ' + debug(expected)); }); t.equal(NumberMultiply(Infinity, Infinity), Infinity, '+∞ * +∞ is +∞'); t.equal(NumberMultiply(Infinity, -Infinity), -Infinity, '+∞ * -∞ is -∞'); t.equal(NumberMultiply(-Infinity, Infinity), -Infinity, '-∞ * +∞ is -∞'); t.equal(NumberMultiply(-Infinity, -Infinity), Infinity, '-∞ * -∞ is +∞'); t.equal(NumberMultiply(+0, +0), +0, '0 * 0 is +0'); t.equal(NumberMultiply(+0, -0), -0, '0 * -0 is -0'); t.equal(NumberMultiply(-0, +0), -0, '-0 * 0 is -0'); t.equal(NumberMultiply(-0, -0), +0, '-0 * -0 is +0'); forEach([].concat( v.numbers, NaN ), function (number) { t.equal(NumberMultiply(NaN, number), NaN, 'NaN * ' + debug(number) + ' is NaN'); t.equal(NumberMultiply(number, NaN), NaN, debug(number) + ' * NaN is NaN'); if (number !== 0 && isFinite(number)) { t.equal(NumberMultiply(number, 0), number > 0 ? 0 : -0, debug(number) + ' * +0 produces ' + (number > 0 ? '+0' : '-0')); t.equal(NumberMultiply(0, number), number > 0 ? 0 : -0, '+0 * ' + debug(number) + ' produces ' + (number > 0 ? '+0' : '-0')); t.equal(NumberMultiply(number, -0), number > 0 ? -0 : 0, debug(number) + ' * -0 produces ' + (number > 0 ? '-0' : '+0')); t.equal(NumberMultiply(-0, number), number > 0 ? -0 : 0, '-0 * ' + debug(number) + ' produces ' + (number > 0 ? '-0' : '+0')); t.equal(NumberMultiply(number, 1), number, debug(number) + ' * 1 produces itself'); t.equal(NumberMultiply(number, -42), number * -42, debug(number) + ' * -42 produces ' + (number - 42)); } }); }; ljharb-es-abstract-babee05/test/methods/Number/remainder.js000066400000000000000000000037161516525472400241270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberRemainder) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberRemainder(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberRemainder(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberRemainder(NaN, NaN), NaN, 'NaN % NaN is NaN'); t.equal(NumberRemainder(+0, +0), NaN, '+0 % +0 is NaN'); t.equal(NumberRemainder(+0, -0), NaN, '+0 % -0 is NaN'); t.equal(NumberRemainder(-0, +0), NaN, '-0 % +0 is NaN'); t.equal(NumberRemainder(-0, -0), NaN, '-0 % -0 is NaN'); forEach(v.numbers, function (number) { t.equal(NumberRemainder(number, NaN), NaN, debug(number) + ' % NaN is NaN'); t.equal(NumberRemainder(NaN, number), NaN, 'NaN % ' + debug(number) + ' is NaN'); t.equal(NumberRemainder(Infinity, number), NaN, '+∞ % ' + debug(number) + ' is NaN'); t.equal(NumberRemainder(-Infinity, number), NaN, '-∞ % ' + debug(number) + ' is NaN'); t.equal(NumberRemainder(number, 0), NaN, debug(number) + ' % +0 is NaN'); t.equal(NumberRemainder(number, -0), NaN, debug(number) + ' % -0 is NaN'); if (isFinite(number)) { t.equal(NumberRemainder(number, Infinity), number, debug(number) + ' % +∞ is ' + debug(number)); t.equal(NumberRemainder(number, -Infinity), number, debug(number) + ' % -∞ is ' + debug(number)); if (number !== 0) { t.equal(NumberRemainder(0, number), 0, '+0 % ' + debug(number) + ' is ' + debug(number)); t.equal(NumberRemainder(-0, number), -0, '-0 % ' + debug(number) + ' is ' + debug(number)); t.looseEqual(NumberRemainder(number * 2, number), 0, debug(number) + ' % ' + debug(number * 2) + ' is 0'); } } }); t.equal(NumberRemainder(-1, 1), -0, '-1 % 1 is -0'); }; ljharb-es-abstract-babee05/test/methods/Number/sameValue.js000066400000000000000000000017761516525472400241070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberSameValue) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberSameValue(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberSameValue(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberSameValue(NaN, NaN), true, 'NaN is the sameValue as NaN'); t.equal(NumberSameValue(+0, +0), true, '+0 is sameValue as +0'); t.equal(NumberSameValue(+0, -0), false, '+0 is not sameValue as -0'); t.equal(NumberSameValue(-0, +0), false, '-0 is not sameValue as +0'); t.equal(NumberSameValue(-0, -0), true, '-0 is sameValue as -0'); forEach(v.numbers, function (number) { t.ok(NumberSameValue(number, number), debug(number) + ' is the sameValue as itself'); }); }; ljharb-es-abstract-babee05/test/methods/Number/sameValueZero.js000066400000000000000000000020601516525472400247320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberSameValueZero) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberSameValueZero(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberSameValueZero(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberSameValueZero(NaN, NaN), true, 'NaN is the sameValueZero as NaN'); t.equal(NumberSameValueZero(+0, +0), true, '+0 is sameValueZero as +0'); t.equal(NumberSameValueZero(+0, -0), true, '+0 is sameValueZero as -0'); t.equal(NumberSameValueZero(-0, +0), true, '-0 is sameValueZero as +0'); t.equal(NumberSameValueZero(-0, -0), true, '-0 is sameValueZero as -0'); forEach(v.numbers, function (number) { t.ok(NumberSameValueZero(number, number), debug(number) + ' is the sameValueZero as itself'); }); }; ljharb-es-abstract-babee05/test/methods/Number/signedRightShift.js000066400000000000000000000014471516525472400254250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberSignedRightShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberSignedRightShift(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberSignedRightShift(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); forEach([].concat( 0, v.int32s ), function (int32) { forEach([1, 3, 5, 31, 32, 33], function (bits) { t.equal(NumberSignedRightShift(int32, bits), int32 >> bits, debug(int32) + ' >> ' + bits + ' is ' + debug(int32 >> bits)); }); }); }; ljharb-es-abstract-babee05/test/methods/Number/subtract.js000066400000000000000000000021341516525472400240010ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberSubtract) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberSubtract(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberSubtract(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberSubtract(+0, +0), +0, '0 - 0 is +0'); t.equal(NumberSubtract(+0, -0), +0, '0 - -0 is +0'); t.equal(NumberSubtract(-0, +0), -0, '-0 - 0 is -0'); t.equal(NumberSubtract(-0, -0), +0, '-0 - -0 is +0'); forEach(v.numbers, function (number) { if (number !== 0) { t.equal(NumberSubtract(number, 0), number, debug(number) + ' - 0 produces ' + number); } t.equal(NumberSubtract(number, 1), number - 1, debug(number) + ' - 1 produces ' + (number + 1)); t.equal(NumberSubtract(number, 42), number - 42, debug(number) + ' - 42 produces ' + (number - 42)); }); }; ljharb-es-abstract-babee05/test/methods/Number/toString.js000066400000000000000000000036401516525472400237660ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, actual) { t.ok(year >= 2018, 'ES2018+'); var NumberToString = year >= 2023 ? actual : function toString(x) { return actual(x); }; forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberToString(nonNumber, 10); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(v.numbers, function (number) { t.equal(NumberToString(number, 10), String(number), debug(number) + ' stringifies to ' + number); }); if (year >= 2023) { forEach([].concat( v.nonIntegerNumbers, 0, 1, 37 ), function (nonIntegerNumber) { t['throws']( function () { NumberToString(0, nonIntegerNumber); }, TypeError, debug(nonIntegerNumber) + ' is not an integer [2, 36]' ); }); forEach(v.numbers, function (number) { t.equal(NumberToString(number, 10), String(number), debug(number) + ' stringifies to ' + number); }); forEach([ [37, 2, '100101'], [37, 3, '1101'], [37, 4, '211'], [37, 5, '122'], [37, 6, '101'], [37, 7, '52'], [37, 8, '45'], [37, 9, '41'], [37, 10, '37'], [37, 11, '34'], [37, 12, '31'], [37, 13, '2b'], [37, 14, '29'], [37, 15, '27'], [37, 16, '25'], [37, 17, '23'], [37, 18, '21'], [37, 19, '1i'], [37, 20, '1h'], [37, 21, '1g'], [37, 22, '1f'], [37, 23, '1e'], [37, 24, '1d'], [37, 25, '1c'], [37, 26, '1b'], [37, 27, '1a'], [37, 28, '19'], [37, 29, '18'], [37, 30, '17'], [37, 31, '16'], [37, 32, '15'], [37, 33, '14'], [37, 34, '13'], [37, 35, '12'], [37, 36, '11'] ], function (testCase) { t.equal( NumberToString(testCase[0], testCase[1]), testCase[2], debug(testCase[0]) + ' stringifies to ' + debug(testCase[2]) + ' in base ' + debug(testCase[1]) ); }); } }; ljharb-es-abstract-babee05/test/methods/Number/unaryMinus.js000066400000000000000000000011211516525472400243170ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberUnaryMinus) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberUnaryMinus(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberUnaryMinus(NaN), NaN, 'NaN produces NaN'); forEach(v.numbers, function (number) { t.equal(NumberUnaryMinus(number), -number, debug(number) + ' produces -' + debug(number)); }); }; ljharb-es-abstract-babee05/test/methods/Number/unsignedRightShift.js000066400000000000000000000014621516525472400257650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberUnsignedRightShift) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberUnsignedRightShift(nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberUnsignedRightShift(0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); forEach([].concat( 0, v.int32s ), function (int32) { forEach([1, 3, 5, 31, 32, 33], function (bits) { t.equal(NumberUnsignedRightShift(int32, bits), int32 >>> bits, debug(int32) + ' >>> ' + bits + ' is ' + debug(int32 >>> bits)); }); }); }; ljharb-es-abstract-babee05/test/methods/NumberBitwiseOp.js000066400000000000000000000014371516525472400240050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, NumberBitwiseOp) { t.ok(year >= 2020, 'ES2020+'); t['throws']( function () { NumberBitwiseOp('invalid', 0, 0); }, TypeError, 'throws with an invalid op' ); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberBitwiseOp('&', nonNumber, 0); }, TypeError, 'x: ' + debug(nonNumber) + ' is not a Number' ); t['throws']( function () { NumberBitwiseOp('&', 0, nonNumber); }, TypeError, 'y: ' + debug(nonNumber) + ' is not a Number' ); }); t.equal(NumberBitwiseOp('&', 1, 2), 1 & 2); t.equal(NumberBitwiseOp('|', 1, 2), 1 | 2); t.equal(NumberBitwiseOp('^', 1, 2), 1 ^ 2); }; ljharb-es-abstract-babee05/test/methods/NumberToBigInt.js000066400000000000000000000026421516525472400235560ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, NumberToBigInt) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumberToBigInt(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(v.nonIntegerNumbers, function (nonIntegerNumber) { t['throws']( function () { NumberToBigInt(nonIntegerNumber); }, RangeError, debug(nonIntegerNumber) + ' is not an integer' ); }); t.test('actual BigInts', { skip: !esV.hasBigInts }, function (st) { forEach(v.integerNumbers, function (int) { if (int >= 1e17) { // BigInt(1e17) throws on node v10.4 - v10.8 try { st.equal(NumberToBigInt(int), BigInt(int), debug(int) + ' becomes ' + debug(BigInt(int))); } catch (e) { st['throws']( function () { BigInt(int); }, RangeError, debug(int) + ' is too large on this engine to convert into a BigInt' ); } } else { st.equal(NumberToBigInt(int), BigInt(int), debug(int) + ' becomes ' + debug(BigInt(int))); } }); st.end(); }); t.test('no BigInts', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { NumberToBigInt(0); }, SyntaxError, 'BigInt is not supported on this engine' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/NumericToRawBytes.js000066400000000000000000000131471516525472400243160ustar00rootroot00000000000000'use strict'; var arrayFrom = require('array.from'); var assign = require('object.assign'); var debug = require('object-inspect'); var forEach = require('for-each'); var safeBigInt = require('safe-bigint'); var v = require('es-value-fixtures'); var bufferTestCases = require('../bufferTestCases.json'); var esV = require('../helpers/v'); var getTypedArrays = require('../helpers/typedArrays'); var unserialize = require('../helpers/unserializeNumeric'); module.exports = function (t, year, NumericToRawBytes) { t.ok(year >= 2017, 'ES2017+'); forEach(esV.nonTATypes, function (nonTAType) { t['throws']( function () { NumericToRawBytes(nonTAType, 0, false); }, TypeError, debug(nonTAType) + ' is not a String, or not a TypedArray type' ); }); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { NumericToRawBytes(year >= 2024 ? 'INT8' : 'Int8', nonNumber, false); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { NumericToRawBytes(year >= 2024 ? 'INT8' : 'Int8', 0, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach(bufferTestCases, function (testCase, name) { var value = unserialize(testCase.value); t.test(name + ': ' + value, function (st) { forEach(esV.getTATypes(year), function (type) { var isBigInt = esV.isBigIntTAType(type); var hasBigEndian = type !== 'Int8' && type !== 'Uint8' && type !== 'Uint8C'; // the 8-bit types are special, they don't have big-endian var result = testCase[type === 'Uint8C' ? 'Uint8Clamped' : type]; if (isBigInt && (!isFinite(value) || Math.floor(value) !== value)) { return; } var valToSet = type === 'Uint8C' && value > 0xFF ? 0xFF : isBigInt ? safeBigInt(value) : value; st.test(type, function (s2t) { /* s2t.equal( GetValueFromBuffer(testCase.buffer, 0, type, true, 'Unordered'), defaultEndianness === testCase.endian ? testCase[type].little.value : testCase[type].big.value, 'buffer holding ' + debug(testCase.value) + ' (' + testCase.endian + ' endian) with type ' + type + ', default endian, yields expected value' ); */ s2t.deepEqual( NumericToRawBytes(year >= 2024 ? type.toUpperCase() : type, valToSet, true), result[type === 'Float64' ? 'setAsLittle' : 'setAsTruncatedLittle'].bytes, debug(value) + ' with type ' + type + ', little endian, yields expected value' ); if (hasBigEndian) { s2t.deepEqual( NumericToRawBytes(year >= 2024 ? type.toUpperCase() : type, valToSet, false), result[type === 'Float64' ? 'setAsBig' : 'setAsTruncatedBig'].bytes, debug(value) + ' with type ' + type + ', big endian, yields expected value' ); } s2t.end(); }); }); st.end(); }); }); if (year >= 2020) { var availableTypedArrays = getTypedArrays(year); t.test('BigInt64', function (st) { st.test('bigints available', { skip: !esV.hasBigInts }, function (s2t) { forEach([ [BigInt(0), [0, 0, 0, 0, 0, 0, 0, 0]], [BigInt(1), [1, 0, 0, 0, 0, 0, 0, 0]], // [BigInt(-1), [255, 255, 255, 255, 255, 255, 255, 255]], [BigInt(16777216), [0, 0, 0, 1, 0, 0, 0, 0]], // max safe float32 [BigInt(2147483647), [255, 255, 255, 127, 0, 0, 0, 0]], // [BigInt(-2147483647), [1, 0, 0, 128, 255, 255, 255, 255]], [BigInt(2147483648), [0, 0, 0, 128, 0, 0, 0, 0]] // [BigInt(-2147483648), [0, 0, 0, 128, 255, 255, 255, 255]] ], function (pair) { var int = pair[0]; var bytes = pair[1]; if (availableTypedArrays.length > 0) { var expectedBytes = arrayFrom(new Uint8Array(assign(new BigInt64Array(1), [int]).buffer)); s2t.deepEqual( bytes, expectedBytes, 'bytes for ' + debug(int) + ' are correct; got ' + debug(expectedBytes) ); } var type = year >= 2024 ? 'BIGINT64' : 'BigInt64'; s2t.deepEqual( NumericToRawBytes(type, int, true), bytes, 'little-endian: bytes for ' + debug(int) + ' are produced' ); s2t.deepEqual( NumericToRawBytes(type, int, false), bytes.slice().reverse(), 'big-endian: bytes for ' + debug(int) + ' are produced' ); }); s2t.end(); }); st.end(); }); t.test('BigUint64', function (st) { st.test('bigints available', { skip: !esV.hasBigInts }, function (s2t) { forEach([ [BigInt(0), [0, 0, 0, 0, 0, 0, 0, 0]], [BigInt(1), [1, 0, 0, 0, 0, 0, 0, 0]], // [BigInt(-1), [255, 255, 255, 255, 255, 255, 255, 255]], [BigInt(16777216), [0, 0, 0, 1, 0, 0, 0, 0]], // max safe float32 [BigInt(2147483647), [255, 255, 255, 127, 0, 0, 0, 0]], // [BigInt(-2147483647), [1, 0, 0, 128, 255, 255, 255, 255]], [BigInt(2147483648), [0, 0, 0, 128, 0, 0, 0, 0]] // [BigInt(-2147483648), [0, 0, 0, 128, 255, 255, 255, 255]] ], function (pair) { var int = pair[0]; var bytes = pair[1]; if (availableTypedArrays.length > 0) { var expectedBytes = arrayFrom(new Uint8Array(assign(new BigUint64Array(1), [int]).buffer)); s2t.deepEqual( bytes, expectedBytes, 'bytes for ' + debug(int) + ' are correct; got ' + debug(expectedBytes) ); } var type = year >= 2024 ? 'BIGUINT64' : 'BigUint64'; s2t.deepEqual( NumericToRawBytes(type, int, true), bytes, 'little-endian: bytes for ' + debug(int) + ' are produced' ); s2t.deepEqual( NumericToRawBytes(type, int, false), bytes.slice().reverse(), 'big-endian: bytes for ' + debug(int) + ' are produced' ); }); s2t.end(); }); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/ObjectDefineProperties.js000066400000000000000000000033451516525472400253250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var fromPropertyDescriptor = require('../../helpers/fromPropertyDescriptor'); module.exports = function (t, year, ObjectDefineProperties) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (nonObject) { t['throws']( function () { ObjectDefineProperties(nonObject); }, debug(nonObject) + ' is not an Object' ); }); var sentinel = { sentinel: true }; t.test('basic data properties', function (st) { var o = {}; var result = ObjectDefineProperties(o, { foo: fromPropertyDescriptor(v.assignedDescriptor(42)), bar: fromPropertyDescriptor(v.assignedDescriptor(sentinel)), toString: fromPropertyDescriptor(v.assignedDescriptor('not Object.prototype.toString')) }); st.equal(result, o, 'returns same object'); st.deepEqual( o, { foo: 42, bar: sentinel, toString: 'not Object.prototype.toString' }, 'expected properties are installed' ); st.end(); }); t.test('fancy stuff', function (st) { st.doesNotThrow( function () { ObjectDefineProperties({}, { foo: v.assignedDescriptor(42) }); }, TypeError ); var o = {}; var result = ObjectDefineProperties(o, { foo: fromPropertyDescriptor(v.accessorDescriptor(42)), bar: fromPropertyDescriptor(v.descriptors.enumerable(v.descriptors.nonConfigurable(v.dataDescriptor(sentinel)))), toString: fromPropertyDescriptor(v.accessorDescriptor('not Object.prototype.toString')) }); st.equal(result, o, 'returns same object'); st.deepEqual( o, { foo: 42, bar: sentinel, toString: 'not Object.prototype.toString' }, 'expected properties are installed' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/OrdinaryCreateFromConstructor.js000066400000000000000000000032531516525472400267320ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var SLOT = require('internal-slot'); module.exports = function (t, year, OrdinaryCreateFromConstructor) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { OrdinaryCreateFromConstructor(nonFunction, '%Array.prototype%'); }, TypeError, debug(nonFunction) + ' is not a constructor' ); }); forEach(v.arrowFunctions, function (arrowFn) { t['throws']( function () { OrdinaryCreateFromConstructor(arrowFn, '%Array.prototype%'); }, TypeError, debug(arrowFn) + ' is not a constructor' ); }); t.test('proto arg', function (st) { var Parent = function Parent() {}; Parent.prototype.foo = {}; var child = OrdinaryCreateFromConstructor(Parent, '%Array.prototype%'); st.equal(child instanceof Parent, true, 'child is instanceof Parent'); st.equal(child instanceof Array, false, 'child is not instanceof Array'); st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype'); st.end(); }); t.test('internal slots arg', function (st) { st.doesNotThrow( function () { OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', []); }, 'an empty slot list is valid' ); var O = OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', ['a', 'b']); st.doesNotThrow( function () { SLOT.assert(O, 'a'); SLOT.assert(O, 'b'); }, 'expected internal slots exist' ); st['throws']( function () { SLOT.assert(O, 'c'); }, TypeError, 'internal slots that should not exist throw' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/OrdinaryDefineOwnProperty.js000066400000000000000000000025421516525472400260600ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var gOPD = require('gopd'); module.exports = function (t, year, OrdinaryDefineOwnProperty, extras) { t.ok(year >= 2015, 'ES2015+'); var CompletePropertyDescriptor = extras.getAO('CompletePropertyDescriptor'); var FromPropertyDescriptor = extras.getAO('FromPropertyDescriptor'); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryDefineOwnProperty(primitive, {}, []); }, TypeError, 'O: ' + debug(primitive) + ' is not an Object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { OrdinaryDefineOwnProperty({}, nonPropertyKey, v.genericDescriptor()); }, TypeError, 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' ); }); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryDefineOwnProperty({}, '', primitive); }, TypeError, 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' ); }); var O = {}; var P = 'property key'; var Desc = v.accessorDescriptor(); t.equal( OrdinaryDefineOwnProperty(O, P, Desc), true, 'operation is successful' ); t.deepEqual( gOPD(O, P), FromPropertyDescriptor(CompletePropertyDescriptor(Desc)), 'expected property descriptor is defined' ); }; ljharb-es-abstract-babee05/test/methods/OrdinaryGetOwnProperty.js000066400000000000000000000046511516525472400254100ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, OrdinaryGetOwnProperty, extras) { t.ok(year >= 2015, 'ES2015+'); var ToPropertyDescriptor = extras.getAO('ToPropertyDescriptor'); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryGetOwnProperty(primitive, ''); }, TypeError, 'O: ' + debug(primitive) + ' is not an Object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { OrdinaryGetOwnProperty({}, nonPropertyKey); }, TypeError, 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' ); }); t.equal(OrdinaryGetOwnProperty({}, 'not in the object'), undefined, 'missing property yields undefined'); t.equal(OrdinaryGetOwnProperty({}, 'toString'), undefined, 'inherited non-own property yields undefined'); t.deepEqual( OrdinaryGetOwnProperty({ a: 1 }, 'a'), ToPropertyDescriptor({ configurable: true, enumerable: true, value: 1, writable: true }), 'own assigned data property yields expected descriptor' ); t.deepEqual( OrdinaryGetOwnProperty(/a/, 'lastIndex'), ToPropertyDescriptor({ configurable: false, enumerable: false, value: 0, writable: true }), 'regex lastIndex yields expected descriptor' ); t.deepEqual( OrdinaryGetOwnProperty([], 'length'), ToPropertyDescriptor({ configurable: false, enumerable: false, value: 0, writable: true }), 'array length yields expected descriptor' ); if (!Object.isFrozen || !Object.isFrozen(Object.prototype)) { t.deepEqual( OrdinaryGetOwnProperty(Object.prototype, 'toString'), ToPropertyDescriptor({ configurable: true, enumerable: false, value: Object.prototype.toString, writable: true }), 'own non-enumerable data property yields expected descriptor' ); } t.test('ES5+', { skip: !$defineProperty }, function (st) { var O = {}; defineProperty(O, 'foo', { configurable: false, enumerable: false, value: O, writable: true }); st.deepEqual( OrdinaryGetOwnProperty(O, 'foo'), ToPropertyDescriptor({ configurable: false, enumerable: false, value: O, writable: true }), 'defined own property yields expected descriptor' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/OrdinaryGetPrototypeOf.js000066400000000000000000000024651516525472400253730ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $getProto = require('get-proto'); module.exports = function (t, year, OrdinaryGetPrototypeOf) { t.ok(year >= 2016, 'ES2016+'); t.test('values', { skip: !$getProto }, function (st) { st.equal(OrdinaryGetPrototypeOf([]), Array.prototype, 'array [[Prototype]] is Array.prototype'); st.equal(OrdinaryGetPrototypeOf({}), Object.prototype, 'object [[Prototype]] is Object.prototype'); st.equal(OrdinaryGetPrototypeOf(/a/g), RegExp.prototype, 'regex [[Prototype]] is RegExp.prototype'); st.equal(OrdinaryGetPrototypeOf(Object('')), String.prototype, 'boxed string [[Prototype]] is String.prototype'); st.equal(OrdinaryGetPrototypeOf(Object(42)), Number.prototype, 'boxed number [[Prototype]] is Number.prototype'); st.equal(OrdinaryGetPrototypeOf(Object(true)), Boolean.prototype, 'boxed boolean [[Prototype]] is Boolean.prototype'); if (v.hasSymbols) { st.equal(OrdinaryGetPrototypeOf(Object(Symbol.iterator)), Symbol.prototype, 'boxed symbol [[Prototype]] is Symbol.prototype'); } st.end(); }); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryGetPrototypeOf(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); }; ljharb-es-abstract-babee05/test/methods/OrdinaryHasInstance.js000066400000000000000000000023541516525472400246360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, OrdinaryHasInstance) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonFunctions, function (nonFunction) { t.equal(OrdinaryHasInstance(nonFunction, {}), false, debug(nonFunction) + ' is not callable'); }); forEach(v.primitives, function (primitive) { t.equal(OrdinaryHasInstance(function () {}, primitive), false, debug(primitive) + ' is not an object'); }); var C = function C() {}; var c = new C(); var D = function D() {}; t.equal(OrdinaryHasInstance(C, c), true, 'constructor function has an instance of itself'); t.equal(OrdinaryHasInstance(C, new D()), false, 'constructor/instance mismatch is false'); t.equal(OrdinaryHasInstance(D, c), false, 'instance/constructor mismatch is false'); t.equal(OrdinaryHasInstance(C, {}), false, 'plain object is not an instance of a constructor'); t.equal(OrdinaryHasInstance(Object, {}), true, 'plain object is an instance of Object'); forEach(v.primitives, function (primitive) { C.prototype = primitive; t['throws']( function () { OrdinaryHasInstance(C, c); }, TypeError, 'prototype is ' + debug(primitive) ); }); }; ljharb-es-abstract-babee05/test/methods/OrdinaryHasProperty.js000066400000000000000000000015341516525472400247150ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, OrdinaryHasProperty) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryHasProperty(primitive, ''); }, TypeError, debug(primitive) + ' is not an object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { OrdinaryHasProperty({}, nonPropertyKey); }, TypeError, 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' ); }); t.equal(OrdinaryHasProperty({ a: 1 }, 'a'), true, 'own property is true'); t.equal(OrdinaryHasProperty({}, 'toString'), true, 'inherited property is true'); t.equal(OrdinaryHasProperty({}, 'nope'), false, 'absent property is false'); }; ljharb-es-abstract-babee05/test/methods/OrdinaryObjectCreate.js000066400000000000000000000037431516525472400247730ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var SLOT = require('internal-slot'); var $setProto = require('set-proto'); module.exports = function (t, year, OrdinaryObjectCreate) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonNullPrimitives, function (value) { t['throws']( function () { OrdinaryObjectCreate(value); }, TypeError, debug(value) + ' is not null, or an object' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { OrdinaryObjectCreate({}, nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t.test('proto arg', function (st) { var Parent = function Parent() {}; Parent.prototype.foo = {}; var child = OrdinaryObjectCreate(Parent.prototype); st.equal(child instanceof Parent, true, 'child is instanceof Parent'); st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype'); st.end(); }); t.test('internal slots arg', function (st) { st.doesNotThrow(function () { OrdinaryObjectCreate({}, []); }, 'an empty slot list is valid'); var O = OrdinaryObjectCreate({}, ['a', 'b']); st.doesNotThrow( function () { SLOT.assert(O, 'a'); SLOT.assert(O, 'b'); }, 'expected internal slots exist' ); st['throws']( function () { SLOT.assert(O, 'c'); }, TypeError, 'internal slots that should not exist throw' ); st.end(); }); t.test('null proto', { skip: !Object.create && !$setProto }, function (st) { st.equal('toString' in {}, true, 'normal objects have toString'); st.equal('toString' in OrdinaryObjectCreate(null), false, 'makes a null object'); st.end(); }); t.test('null proto when no native Object.create', { skip: Object.create || $setProto }, function (st) { st['throws']( function () { OrdinaryObjectCreate(null); }, SyntaxError, 'without a native Object.create or __proto__ support, can not create null objects' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/OrdinarySetPrototypeOf.js000066400000000000000000000013171516525472400254020ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $getProto = require('get-proto'); module.exports = function (t, year, OrdinarySetPrototypeOf) { t.ok(year >= 2016, 'ES2016+'); forEach(v.primitives, function (primitive) { if (primitive !== null) { t['throws']( function () { OrdinarySetPrototypeOf({}, primitive); }, TypeError, debug(primitive) + ' is not an Object or null' ); } }); var a = []; var proto = {}; t.equal($getProto(a), Array.prototype, 'precondition'); t.equal(OrdinarySetPrototypeOf(a, proto), true, 'setting prototype is successful'); t.equal($getProto(a), proto, 'postcondition'); }; ljharb-es-abstract-babee05/test/methods/OrdinaryToPrimitive.js000066400000000000000000000114731516525472400247130ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, OrdinaryToPrimitive) { t.ok(year >= 2017, 'ES2017+'); forEach(v.primitives, function (primitive) { t['throws']( function () { OrdinaryToPrimitive(primitive, 'string'); }, TypeError, debug(primitive) + ' is not Object' ); if (primitive != null) { t.equal( OrdinaryToPrimitive(Object(primitive), 'number'), primitive, debug(Object(primitive)) + ' becomes ' + debug(primitive) ); } }); forEach(v.nonStrings, function (nonString) { if (typeof nonString !== 'number') { t['throws']( function () { OrdinaryToPrimitive({}, nonString); }, TypeError, debug(nonString) + ' is not a String or a Number' ); } }); t.test('Symbols', { skip: !v.hasSymbols }, function (st) { forEach(v.symbols, function (sym) { st.equal( OrdinaryToPrimitive(Object(sym), 'string'), Symbol.prototype.toString.call(sym), debug(Object(sym)) + ' with hint "string" returns ' + debug(Symbol.prototype.toString.call(sym)) ); st.equal( OrdinaryToPrimitive(Object(sym), 'number'), sym, debug(Object(sym)) + ' with hint "number" returns ' + debug(sym) ); }); var primitiveSym = Symbol('primitiveSym'); var objectSym = Object(primitiveSym); st.equal( OrdinaryToPrimitive(objectSym, 'string'), Symbol.prototype.toString.call(primitiveSym), debug(objectSym) + ' with hint "string" returns ' + debug(Symbol.prototype.toString.call(primitiveSym)) ); st.equal( OrdinaryToPrimitive(objectSym, 'number'), primitiveSym, debug(objectSym) + ' with hint "number" returns ' + debug(primitiveSym) ); st.end(); }); t.test('Arrays', function (st) { var arrays = [[], ['a', 'b'], [1, 2]]; forEach(arrays, function (arr) { st.equal(OrdinaryToPrimitive(arr, 'string'), String(arr), debug(arr) + ' with hint "string" returns the string version of the array'); st.equal(OrdinaryToPrimitive(arr, 'number'), String(arr), debug(arr) + ' with hint "number" returns the string version of the array'); }); st.end(); }); t.test('Dates', function (st) { var dates = [new Date(), new Date(0), new Date(NaN)]; forEach(dates, function (date) { st.equal(OrdinaryToPrimitive(date, 'string'), String(date), debug(date) + ' with hint "string" returns the string version of the date'); st.equal(OrdinaryToPrimitive(date, 'number'), Number(date), debug(date) + ' with hint "number" returns the number version of the date'); }); st.end(); }); t.test('Objects', function (st) { st.equal(OrdinaryToPrimitive(v.coercibleObject, 'number'), v.coercibleObject.valueOf(), 'coercibleObject with hint "number" coerces to valueOf'); st.equal(OrdinaryToPrimitive(v.coercibleObject, 'string'), v.coercibleObject.toString(), 'coercibleObject with hint "string" coerces to non-stringified toString'); st.equal(OrdinaryToPrimitive(v.coercibleFnObject, 'number'), v.coercibleFnObject.toString(), 'coercibleFnObject with hint "number" coerces to non-stringified toString'); st.equal(OrdinaryToPrimitive(v.coercibleFnObject, 'string'), v.coercibleFnObject.toString(), 'coercibleFnObject with hint "string" coerces to non-stringified toString'); st.equal(OrdinaryToPrimitive({}, 'number'), '[object Object]', '{} with hint "number" coerces to Object#toString'); st.equal(OrdinaryToPrimitive({}, 'string'), '[object Object]', '{} with hint "string" coerces to Object#toString'); st.equal(OrdinaryToPrimitive(v.toStringOnlyObject, 'number'), v.toStringOnlyObject.toString(), 'toStringOnlyObject with hint "number" returns non-stringified toString'); st.equal(OrdinaryToPrimitive(v.toStringOnlyObject, 'string'), v.toStringOnlyObject.toString(), 'toStringOnlyObject with hint "string" returns non-stringified toString'); st.equal(OrdinaryToPrimitive(v.valueOfOnlyObject, 'number'), v.valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint "number" returns valueOf'); st.equal(OrdinaryToPrimitive(v.valueOfOnlyObject, 'string'), v.valueOfOnlyObject.valueOf(), 'valueOfOnlyObject with hint "string" returns non-stringified valueOf'); st.test('exceptions', function (s2t) { s2t['throws'](function () { OrdinaryToPrimitive(v.uncoercibleObject, 'number'); }, TypeError, 'uncoercibleObject with hint "number" throws a TypeError'); s2t['throws'](function () { OrdinaryToPrimitive(v.uncoercibleObject, 'string'); }, TypeError, 'uncoercibleObject with hint "string" throws a TypeError'); s2t['throws'](function () { OrdinaryToPrimitive(v.uncoercibleFnObject, 'number'); }, TypeError, 'uncoercibleFnObject with hint "number" throws a TypeError'); s2t['throws'](function () { OrdinaryToPrimitive(v.uncoercibleFnObject, 'string'); }, TypeError, 'uncoercibleFnObject with hint "string" throws a TypeError'); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ParseHexOctet.js000066400000000000000000000024761516525472400234510ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ParseHexOctet, extras) { t.ok(year >= 2023, 'ES2023+'); var StringPad = extras.getAO('StringPad'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { ParseHexOctet(nonString, 0); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { t['throws']( function () { ParseHexOctet('', nonNonNegativeInteger); }, TypeError, debug(nonNonNegativeInteger) + ' is not a non-negative integer' ); }); var str = 'abc'; t.deepEqual( ParseHexOctet(str, str.length - 1), [new SyntaxError('requested a position on a string that does not contain 2 characters at that position')], '"position + 2" is not a valid index into the string' ); t.deepEqual( ParseHexOctet('0gx', 0), [new SyntaxError('Invalid hexadecimal characters')], 'invalid hex characters return an array with an error' ); for (var i = 0; i < 256; i += 1) { var hex = StringPad(i.toString(16), 2, '0', 'start'); t.equal(ParseHexOctet(hex, 0), i, debug(hex) + ' parses to ' + i); t.equal(ParseHexOctet('0' + hex, 1), i, '0' + debug(hex) + ' at position 1 parses to ' + i); } }; ljharb-es-abstract-babee05/test/methods/PromiseResolve.js000066400000000000000000000014151516525472400237010ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, PromiseResolve) { t.ok(year >= 2018, 'ES2018+'); t.test('Promises unsupported', { skip: typeof Promise === 'function' }, function (st) { st['throws']( function () { PromiseResolve(); }, SyntaxError, 'Promises are not supported' ); st.end(); }); t.test('Promises supported', { skip: typeof Promise !== 'function' }, function (st) { st.plan(2); var a = {}; var b = {}; var fulfilled = Promise.resolve(a); var rejected = Promise.reject(b); PromiseResolve(Promise, fulfilled).then(function (x) { st.equal(x, a, 'fulfilled promise resolves to fulfilled'); }); PromiseResolve(Promise, rejected)['catch'](function (e) { st.equal(e, b, 'rejected promise resolves to rejected'); }); }); }; ljharb-es-abstract-babee05/test/methods/QuoteJSONString.js000066400000000000000000000037221516525472400237040ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, QuoteJSONString) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { QuoteJSONString(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); t.equal(QuoteJSONString(''), '""', '"" gets properly JSON-quoted'); t.equal(QuoteJSONString('a'), '"a"', '"a" gets properly JSON-quoted'); t.equal(QuoteJSONString('"'), '"\\""', '"\\"" gets properly JSON-quoted'); t.equal(QuoteJSONString('\b'), '"\\b"', '"\\b" gets properly JSON-quoted'); t.equal(QuoteJSONString('\t'), '"\\t"', '"\\t" gets properly JSON-quoted'); t.equal(QuoteJSONString('\n'), '"\\n"', '"\\n" gets properly JSON-quoted'); t.equal(QuoteJSONString('\f'), '"\\f"', '"\\f" gets properly JSON-quoted'); t.equal(QuoteJSONString('\r'), '"\\r"', '"\\r" gets properly JSON-quoted'); t.equal(QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted'); t.equal(QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted'); t.equal(QuoteJSONString('\u000B'), '"\\u000b"', '"\\u000B" gets properly JSON-quoted'); t.equal(QuoteJSONString('\u0019'), '"\\u0019"', '"\\u0019" gets properly JSON-quoted'); if (year < 2019) { t.equal(QuoteJSONString(esV.poo.leading), '"\ud83d"', 'leading poo gets properly JSON-quoted'); t.equal(QuoteJSONString(esV.poo.trailing), '"\udca9"', 'trailing poo gets properly JSON-quoted'); t.equal(QuoteJSONString(esV.poo.whole), '"\ud83d\udca9"', 'whole poo gets properly JSON-quoted'); } else { t.equal(QuoteJSONString(esV.poo.leading), '"\\ud83d"', 'leading poo gets properly JSON-quoted'); t.equal(QuoteJSONString(esV.poo.trailing), '"\\udca9"', 'trailing poo gets properly JSON-quoted'); t.equal(QuoteJSONString(esV.poo.whole), '"\\ud83d\\udca9"', 'whole poo gets properly JSON-quoted'); } }; ljharb-es-abstract-babee05/test/methods/RawBytesToNumeric.js000066400000000000000000000171471516525472400243220ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var safeBigInt = require('safe-bigint'); var v = require('es-value-fixtures'); var bufferTestCases = require('../bufferTestCases.json'); var esV = require('../helpers/v'); var unserialize = require('../helpers/unserializeNumeric'); module.exports = function (t, year, RawBytesToNumeric) { t.ok(year >= 2017, 'ES2017+'); forEach(esV.nonTATypes, function (nonTAType) { t['throws']( function () { RawBytesToNumeric(nonTAType, [], false); }, TypeError, debug(nonTAType) + ' is not a String, or not a TypedArray type' ); }); forEach(esV.unknowns, function (nonArray) { t['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT8' : 'Int8', nonArray, false); }, TypeError, debug(nonArray) + ' is not an Array' ); }); forEach([-1, 1.5, 256], function (nonByte) { t['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT8' : 'Int8', [nonByte], false); }, TypeError, debug(nonByte) + ' is not a valid "byte"' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT8' : 'Int8', [0], nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach(bufferTestCases, function (testCase, name) { var value = unserialize(testCase.value); t.test(name + ': ' + value, function (st) { forEach(esV.getTATypes(year), function (type) { var result = testCase[type === 'Uint8C' ? 'Uint8Clamped' : type]; var hasBigEndian = type !== 'Int8' && type !== 'Uint8' && type !== 'Uint8C'; // the 8-bit types are special, they don't have big-endian var littleLittle = unserialize(result.setAsLittle.asLittle); try { st.equal( RawBytesToNumeric(year >= 2024 ? type.toUpperCase() : type, result.setAsLittle.bytes, true), littleLittle, type + ', little-endian: bytes (' + debug(result.setAsLittle.bytes) + ') for ' + debug(littleLittle) + ' produces it' ); } catch (e) { if (safeBigInt !== BigInt && e instanceof RangeError) { st.comment('SKIP node v10.4-v10.8 have a bug where you can‘t `BigInt(x)` anything larger than MAX_SAFE_INTEGER'); return; } } if (hasBigEndian) { var bigBig = unserialize(result.setAsBig.asBig); st.equal( RawBytesToNumeric(year >= 2024 ? type.toUpperCase() : type, result.setAsBig.bytes, false), bigBig, type + ', big-endian: bytes (' + debug(result.setAsBig.bytes) + ') for ' + debug(bigBig) + ' produces it' ); } }); st.end(); }); }); t.test('incorrect byte counts', function (st) { if (year >= 2025) { st['throws']( function () { RawBytesToNumeric('FLOAT16', [0], false); }, RangeError, 'Float16 with less than 2 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric('FLOAT16', [0, 0, 0], false); }, RangeError, 'Float16 with more than 2 bytes throws a RangeError' ); } st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'FLOAT32' : 'Float32', [0, 0, 0], false); }, RangeError, 'Float32 with less than 4 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'FLOAT32' : 'Float32', [0, 0, 0, 0, 0], false); }, RangeError, 'Float32 with more than 4 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'FLOAT64' : 'Float64', [0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'Float64 with less than 8 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'FLOAT64' : 'Float64', [0, 0, 0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'Float64 with more than 8 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT8' : 'Int8', [], false); }, RangeError, 'Int8 with less than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT8' : 'Int8', [0, 0], false); }, RangeError, 'Int8 with more than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT8' : 'Uint8', [], false); }, RangeError, 'Uint8 with less than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT8' : 'Uint8', [0, 0], false); }, RangeError, 'Uint8 with more than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT8C' : 'Uint8C', [], false); }, RangeError, 'Uint8C with less than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT8C' : 'Uint8C', [0, 0], false); }, RangeError, 'Uint8C with more than 1 byte throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT16' : 'Int16', [0], false); }, RangeError, 'Int16 with less than 2 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'INT16' : 'Int16', [0, 0, 0], false); }, RangeError, 'Int16 with more than 2 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT16' : 'Uint16', [0], false); }, RangeError, 'Uint16 with less than 2 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT16' : 'Uint16', [0, 0, 0], false); }, RangeError, 'Uint16 with more than 2 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT16' : 'Uint16', [0, 0, 0], false); }, RangeError, 'Uint16 with less than 4 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT16' : 'Uint16', [0, 0, 0, 0, 0], false); }, RangeError, 'Uint16 with more than 4 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT32' : 'Uint32', [0, 0, 0], false); }, RangeError, 'Uint32 with less than 4 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'UINT32' : 'Uint32', [0, 0, 0, 0, 0], false); }, RangeError, 'Uint32 with more than 4 bytes throws a RangeError' ); if (year >= 2020) { st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGINT64' : 'BigInt64', [0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'BigInt64 with less than 8 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGINT64' : 'BigInt64', [0, 0, 0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'BigInt64 with more than 8 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGUINT64' : 'BigUint64', [0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'BigUint64 with less than 8 bytes throws a RangeError' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGUINT64' : 'BigUint64', [0, 0, 0, 0, 0, 0, 0, 0, 0], false); }, RangeError, 'BigUint64 with more than 8 bytes throws a RangeError' ); } st.end(); }); if (year >= 2020) { t.test('bigint types, no bigints', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGINT64' : 'BigInt64', [0, 0, 0, 0, 0, 0, 0, 0], false); }, SyntaxError, 'BigInt64 throws a SyntaxError when BigInt is not available' ); st['throws']( function () { RawBytesToNumeric(year >= 2024 ? 'BIGUINT64' : 'BigUint64', [0, 0, 0, 0, 0, 0, 0, 0], false); }, SyntaxError, 'BigUint64 throws a SyntaxError when BigInt is not available' ); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/RegExpCreate.js000066400000000000000000000012421516525472400232370ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, RegExpCreate) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { if (typeof nonString !== 'symbol') { var p = typeof nonString === 'undefined' ? '' : nonString; t.equal( String(RegExpCreate(p, 'g')), '/' + (String(p) || RegExp.prototype.source || String(RegExp.prototype).slice(1, -1)) + '/g', debug(nonString) + ' becomes `/' + String(p) + '/g`' ); } }); t.deepEqual(RegExpCreate(), new RegExp(), 'undefined pattern and flags yields empty regex'); }; ljharb-es-abstract-babee05/test/methods/RegExpExec.js000066400000000000000000000053111516525472400227210ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var assign = require('object.assign'); var defineProperty = require('../helpers/defineProperty'); var kludgeMatch = require('../helpers/kludgeMatch'); module.exports = function (t, year, RegExpExec) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { RegExpExec(primitive); }, TypeError, '"R" argument must be an object; ' + debug(primitive) + ' is not' ); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { RegExpExec({}, nonString); }, TypeError, '"S" argument must be a String; ' + debug(nonString) + ' is not' ); }); t.test('gets and calls a callable "exec"', function (st) { var str = '123'; var o = { exec: function (S) { st.equal(this, o, '"exec" receiver is R'); st.equal(S, str, '"exec" argument is S'); return null; } }; st.plan(2); RegExpExec(o, str); st.end(); }); t.test('throws if a callable "exec" returns a non-null non-object', function (st) { var str = '123'; st.plan(v.nonNullPrimitives.length); forEach(v.nonNullPrimitives, function (nonNullPrimitive) { st['throws']( function () { RegExpExec({ exec: function () { return nonNullPrimitive; } }, str); }, TypeError, '"exec" method must return `null` or an Object; ' + debug(nonNullPrimitive) + ' is not' ); }); st.end(); }); t.test('actual regex that should match against a string', function (st) { var S = 'aabc'; var R = /a/g; var match1 = RegExpExec(R, S); var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S })); var match2 = RegExpExec(R, S); var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S })); var match3 = RegExpExec(R, S); st.deepEqual(match1, expected1, 'match object 1 is as expected'); st.deepEqual(match2, expected2, 'match object 2 is as expected'); st.equal(match3, null, 'match 3 is null as expected'); st.end(); }); t.test('actual regex that should match against a string, with shadowed "exec"', function (st) { var S = 'aabc'; var R = /a/g; defineProperty(R, 'exec', { configurable: true, enumerable: true, value: undefined, writable: true }); var match1 = RegExpExec(R, S); var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S })); var match2 = RegExpExec(R, S); var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S })); var match3 = RegExpExec(R, S); st.deepEqual(match1, expected1, 'match object 1 is as expected'); st.deepEqual(match2, expected2, 'match object 2 is as expected'); st.equal(match3, null, 'match 3 is null as expected'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/RegExpHasFlag.js000066400000000000000000000034451516525472400233500ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var isRegex = require('is-regex'); var supportedRegexFlags = require('available-regexp-flags'); var v = require('es-value-fixtures'); // in node < 6, RegExp.prototype is an actual regex var reProtoIsRegex = isRegex(RegExp.prototype); module.exports = function (t, year, RegExpHasFlag) { t.ok(year >= 2022, 'ES2022+'); forEach(v.primitives, function (primitive) { t['throws']( function () { RegExpHasFlag(primitive, 'x'); }, TypeError, 'R must be an Object; ' + debug(primitive) + ' is not one' ); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { return RegExpHasFlag({}, nonString); }, TypeError, debug(nonString) + ' is not a string' ); }); t.equal( RegExpHasFlag(RegExp.prototype, 'x'), reProtoIsRegex ? false : undefined, 'RegExp.prototype yields ' + (reProtoIsRegex ? 'false' : 'undefined') ); t['throws']( function () { return RegExpHasFlag({}, 'x'); }, TypeError, 'non-RegExp object throws TypeError' ); var allFlagsU = new RegExp('a', supportedRegexFlags.join('').replace('uv', 'u')); var allFlagsV = new RegExp('a', supportedRegexFlags.join('').replace('uv', 'v')); forEach(supportedRegexFlags, function (flag) { t.equal(RegExpHasFlag(/a/, flag), false, 'regex with no flags does not have flag ' + flag); var r = new RegExp('a', flag); t.equal(RegExpHasFlag(r, flag), true, debug(r) + ' has flag ' + flag); if (allFlagsU !== allFlagsV && (flag === 'u' || flag === 'v')) { var flagsSubset = flag === 'u' ? allFlagsU : allFlagsV; t.equal(RegExpHasFlag(flagsSubset, flag), true, debug(flagsSubset) + ' has flag ' + flag); } else { t.equal(RegExpHasFlag(allFlagsU, flag), true, debug(allFlagsU) + ' has flag ' + flag); } }); }; ljharb-es-abstract-babee05/test/methods/RequireObjectCoercible.js000066400000000000000000000011471516525472400253000ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, RequireObjectCoercible) { t.ok(year >= 2015, 'ES2015+'); t['throws'](function () { return RequireObjectCoercible(undefined); }, TypeError, 'undefined throws'); t['throws'](function () { return RequireObjectCoercible(null); }, TypeError, 'null throws'); forEach([].concat( v.objects, v.nonNullPrimitives ), function (value) { t.doesNotThrow(function () { return RequireObjectCoercible(value); }, debug(value) + ' does not throw'); }); }; ljharb-es-abstract-babee05/test/methods/ReturnCompletion.js000066400000000000000000000013441516525472400242350ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); module.exports = function (t, year, ReturnCompletion, extras) { t.ok(year >= 2025, 'ES2025+'); var CompletionRecord = extras.getAO('CompletionRecord'); var sentinel = {}; var completion = ReturnCompletion(sentinel); t.ok(completion instanceof CompletionRecord, 'produces an instance of CompletionRecord'); t.equal(SLOT.get(completion, '[[Type]]'), 'return', 'completion type is "return"'); t.equal(completion.type(), 'return', 'completion type is "return" (via property)'); t.equal(SLOT.get(completion, '[[Value]]'), sentinel, 'completion value is the argument provided'); t.equal(completion.value(), sentinel, 'completion value is the argument provided (via property)'); }; ljharb-es-abstract-babee05/test/methods/SameValue.js000066400000000000000000000007201516525472400226030ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var esV = require('../helpers/v'); module.exports = function (t, year, SameValue) { t.ok(year >= 5, 'ES5+'); t.equal(true, SameValue(NaN, NaN), 'NaN is SameValue as NaN'); t.equal(false, SameValue(0, -0), '+0 is not SameValue as -0'); forEach(esV.unknowns, function (val) { t.equal(val === val, SameValue(val, val), debug(val) + ' is SameValue to itself'); }); }; ljharb-es-abstract-babee05/test/methods/SameValueNonNumber.js000066400000000000000000000013751516525472400244360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, SameValueNonNumber) { t.ok(year >= 2015, 'ES2015+'); var willThrow = [ [3, 4], [NaN, 4], [4, ''], ['abc', true], [{}, false] ]; forEach(willThrow, function (nums) { t['throws']( function () { return SameValueNonNumber.apply(null, nums); }, TypeError, 'value must be same type and non-number: got ' + debug(nums[0]) + ' and ' + debug(nums[1]) ); }); forEach([].concat( v.objects, v.nonNumberPrimitives, year >= 2020 ? v.bigints : [] ), function (val) { t.equal(val === val, SameValueNonNumber(val, val), debug(val) + ' is SameValueNonNumber to itself'); }); }; ljharb-es-abstract-babee05/test/methods/SameValueNonNumeric.js000066400000000000000000000017411516525472400246050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var flatMap = require('array.prototype.flatmap'); module.exports = function (t, year, SameValueNonNumeric) { t.ok(year >= 2020, 'ES2020+'); var willThrow = [ [3, 4], [NaN, 4], [4, ''], ['abc', true], [{}, false] ].concat(flatMap(v.bigints, function (bigint) { return [ [bigint, bigint], [bigint, {}], [{}, bigint], [3, bigint], [bigint, 3], ['', bigint], [bigint, ''] ]; })); forEach(willThrow, function (nums) { t['throws']( function () { return SameValueNonNumeric.apply(null, nums); }, TypeError, 'value must be same type and non-number/bigint: got ' + debug(nums[0]) + ' and ' + debug(nums[1]) ); }); forEach([].concat( v.objects, v.nonNumberPrimitives ), function (val) { t.equal( SameValueNonNumeric(val, val), val === val, debug(val) + ' is SameValueNonNumeric to itself' ); }); }; ljharb-es-abstract-babee05/test/methods/SameValueZero.js000066400000000000000000000007551516525472400234530ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, SameValueZero) { t.ok(year >= 2015, 'ES2015+'); t.equal(true, SameValueZero(NaN, NaN), 'NaN is SameValueZero as NaN'); t.equal(true, SameValueZero(0, -0), '+0 is SameValueZero as -0'); forEach(esV.unknowns, function (val) { t.equal(val === val, SameValueZero(val, val), debug(val) + ' is SameValueZero to itself'); }); }; ljharb-es-abstract-babee05/test/methods/SecFromTime.js000066400000000000000000000003461516525472400231020ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, SecFromTime) { t.ok(year >= 5, 'ES5+'); var now = new Date(); t.equal(SecFromTime(now.getTime()), now.getUTCSeconds(), 'second from Date timestamp matches getUTCSeconds'); }; ljharb-es-abstract-babee05/test/methods/Set.js000066400000000000000000000044001516525472400214530ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $defineProperty = require('es-define-property'); var defineProperty = require('../helpers/defineProperty'); var esV = require('../helpers/v'); module.exports = function (t, year, Set) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { Set(primitive, '', null, false); }, TypeError, debug(primitive) + ' is not an Object' ); }); forEach(v.nonPropertyKeys, function (nonKey) { t['throws']( function () { Set({}, nonKey, null, false); }, TypeError, debug(nonKey) + ' is not a Property Key' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { Set({}, '', null, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); var o = {}; var value = {}; Set(o, 'key', value, true); t.deepEqual(o, { key: value }, 'key is set'); t.test('nonwritable', { skip: !$defineProperty }, function (st) { var obj = { a: value }; defineProperty(obj, 'a', { writable: false }); st['throws']( function () { Set(obj, 'a', {}, true); }, TypeError, 'can not Set nonwritable property' ); st.doesNotThrow( function () { st.equal(Set(obj, 'a', {}, false), false, 'unsuccessful Set returns false'); }, 'setting Throw to false prevents an exception' ); st.end(); }); t.test('nonconfigurable', { skip: !$defineProperty }, function (st) { var obj = { a: value }; defineProperty(obj, 'a', { configurable: false }); st.equal(Set(obj, 'a', value, true), true, 'successful Set returns true'); st.deepEqual(obj, { a: value }, 'key is set'); st.end(); }); t.test('doesn’t call [[Get]] in conforming strict mode environments', { skip: esV.noThrowOnStrictViolation }, function (st) { var getterCalled = false; var setterCalls = 0; var obj = {}; defineProperty(obj, 'a', { get: function () { getterCalled = true; }, set: function () { setterCalls += 1; } }); st.equal(Set(obj, 'a', value, false), true, 'successful Set returns true'); st.equal(setterCalls, 1, 'setter was called once'); st.equal(getterCalled, false, 'getter was not called'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SetDataHas.js000066400000000000000000000017061516525472400227070ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, SetDataHas) { t.ok(year >= 2025, 'ES2025+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { SetDataHas(nonArray, 'value'); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t.equal( SetDataHas('EMPTY', 'EMPTY'), false, '~EMPTY~ works' ); t.equal( SetDataHas([+0], -0), true, 'SetData with +0 has -0' ); t.equal( SetDataHas([-0], +0), false, 'SetData with -0 does not have +0 (SetData is expected to never have -0 in it)' ); t.equal( SetDataHas([NaN], NaN), true, 'SetData with NaN has NaN' ); esV.unknowns.forEach(function (unknown) { if (unknown !== 0) { t.equal( SetDataHas([unknown], unknown), true, debug(unknown) + ' is found in the SetData' ); } }); }; ljharb-es-abstract-babee05/test/methods/SetDataIndex.js000066400000000000000000000020701516525472400232360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, SetDataIndex) { t.ok(year >= 2025, 'ES2025+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { SetDataIndex(nonArray, 'value'); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t.equal( SetDataIndex('EMPTY', 'EMPTY'), 'NOT-FOUND', '~EMPTY~ works' ); t.equal( SetDataIndex([null, +0, false], -0), 1, 'SetData with +0 finds index of -0' ); t.equal( SetDataIndex([null, -0, false], +0), 'NOT-FOUND', 'SetData with -0 does not find the index from +0 (SetData is expected to never have -0 in it)' ); t.equal( SetDataIndex([null, NaN, false], NaN), 1, 'SetData with NaN finds index of NaN' ); esV.unknowns.forEach(function (unknown) { if (unknown !== 0) { t.equal( SetDataIndex([{}, unknown, {}], unknown), 1, debug(unknown) + ' is found in the SetData at its index' ); } }); }; ljharb-es-abstract-babee05/test/methods/SetDataSize.js000066400000000000000000000012531516525472400231030ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, SetDataSize) { t.ok(year >= 2025, 'ES2025+'); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { SetDataSize(nonArray, 'value'); }, TypeError, debug(nonArray) + ' is not an Array' ); }); t.equal( SetDataSize('EMPTY'), 0, '~EMPTY~ works' ); t.equal( // eslint-disable-next-line no-sparse-arrays SetDataSize([null, +0, false, -0, , NaN].concat(esV.unknowns)), 5 + esV.unknowns.length, 'SetData size is correctly calculated' ); }; ljharb-es-abstract-babee05/test/methods/SetFunctionLength.js000066400000000000000000000037271516525472400243360ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var hasOwn = require('hasown'); var debug = require('object-inspect'); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); module.exports = function (t, year, SetFunctionLength) { t.ok(year >= 2018, 'ES2018+'); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { SetFunctionLength(nonFunction, 0); }, TypeError, debug(nonFunction) + ' is not a Function' ); }); t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) { var F = function F() {}; Object.preventExtensions(F); st['throws']( function () { SetFunctionLength(F, 0); }, TypeError, 'non-extensible function throws' ); st.end(); }); var HasLength = function HasLength(_) { return _; }; t.equal(hasOwn(HasLength, 'length'), true, 'precondition: `HasLength` has own length'); t['throws']( function () { SetFunctionLength(HasLength, 0); }, TypeError, 'function with own length throws' ); t.test('no length', { skip: !functionsHaveConfigurableNames }, function (st) { var HasNoLength = function HasNoLength() {}; delete HasNoLength.length; st.equal(hasOwn(HasNoLength, 'length'), false, 'precondition: `HasNoLength` has no own length'); forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { SetFunctionLength(HasNoLength, nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach([].concat( -1, -42, -Infinity, year >= 2021 ? [] : Infinity, v.nonIntegerNumbers ), function (nonPositiveInteger) { st['throws']( function () { SetFunctionLength(HasNoLength, nonPositiveInteger); }, TypeError, debug(nonPositiveInteger) + ' is not a positive integer Number' ); }); st.end(); }); // TODO: defines an own configurable non-enum non-write length property // TODO: ensure it works with +Infinity }; ljharb-es-abstract-babee05/test/methods/SetFunctionName.js000066400000000000000000000050471516525472400237720ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var functionsHaveNames = require('functions-have-names')(); var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames(); var hasOwn = require('hasown'); var getInferredName = require('../../helpers/getInferredName'); var getNamelessFunction = require('../helpers/getNamelessFunction'); module.exports = function (t, year, SetFunctionName) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { SetFunctionName(nonFunction, ''); }, TypeError, debug(nonFunction) + ' is not a Function' ); }); t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) { var f = getNamelessFunction(); Object.preventExtensions(f); st['throws']( function () { SetFunctionName(f, ''); }, TypeError, 'throws on a non-extensible function' ); st.end(); }); t.test('has an own name property', { skip: !functionsHaveNames }, function (st) { st['throws']( function () { SetFunctionName(function g() {}, ''); }, TypeError, 'throws if function has an own `name` property' ); st.end(); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { SetFunctionName(getNamelessFunction(), nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Symbol or String' ); }); t.test('symbols', { skip: !v.hasSymbols || hasOwn(getNamelessFunction(), 'name') }, function (st) { var pairs = [ [Symbol(), ''], [Symbol(undefined), ''], [Symbol(null), '[null]'], [Symbol(''), getInferredName ? '[]' : ''], [Symbol.iterator, '[Symbol.iterator]'], [Symbol('foo'), '[foo]'] ]; forEach(pairs, function (pair) { var sym = pair[0]; var desc = pair[1]; var f = getNamelessFunction(); SetFunctionName(f, sym); st.equal(f.name, desc, debug(sym) + ' yields a name of ' + debug(desc)); }); st.end(); }); var f = getNamelessFunction(); t.test('when names are configurable', { skip: !functionsHaveConfigurableNames || hasOwn(f, 'name') }, function (st) { // without prefix st.notEqual(f.name, 'foo', 'precondition'); SetFunctionName(f, 'foo'); st.equal(f.name, 'foo', 'function name is set without a prefix'); // with prefix var g = getNamelessFunction(); st.notEqual(g.name, 'pre- foo', 'precondition'); SetFunctionName(g, 'foo', 'pre-'); st.equal(g.name, 'pre- foo', 'function name is set with a prefix'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SetIntegrityLevel.js000066400000000000000000000025651516525472400243540ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, SetIntegrityLevel) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { SetIntegrityLevel(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); t['throws']( function () { SetIntegrityLevel({}); }, /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/, '`level` must be `"sealed"` or `"frozen"`' ); var O = { a: 1 }; t.test('sealed', { skip: !Object.preventExtensions || esV.noThrowOnStrictViolation }, function (st) { st.equal(SetIntegrityLevel(O, 'sealed'), true); st['throws']( function () { O.b = 2; }, /^TypeError: (Cannot|Can't) add property b, object is not extensible$/, 'sealing prevent new properties from being added' ); O.a = 2; st.equal(O.a, 2, 'pre-frozen, existing properties are mutable'); st.end(); }); t.test('frozen', { skip: !Object.freeze || esV.noThrowOnStrictViolation }, function (st) { st.equal(SetIntegrityLevel(O, 'frozen'), true); st['throws']( function () { O.a = 3; }, /^TypeError: Cannot assign to read only property 'a' of /, 'freezing prevents existing properties from being mutated' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SetTypedArrayFromArrayLike.js000066400000000000000000000057131516525472400261200ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var safeBigInt = require('safe-bigint'); var v = require('es-value-fixtures'); var $defineProperty = require('es-define-property'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, SetTypedArrayFromArrayLike, extras) { t.ok(year >= 2021, 'ES2021+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { SetTypedArrayFromArrayLike(nonTA, 0, []); }, TypeError, 'target: ' + debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('Typed Array Support', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { if (notNonNegativeInteger !== Infinity) { st['throws']( function () { SetTypedArrayFromArrayLike(new Uint8Array(0), notNonNegativeInteger, []); }, TypeError, 'targetOffset: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); } }); st['throws']( function () { SetTypedArrayFromArrayLike(new Uint8Array(0), Infinity, []); }, RangeError, 'targetOffset: ' + debug(Infinity) + ' is not a finite integer' ); st['throws']( function () { SetTypedArrayFromArrayLike(new Uint8Array(0), 0, new Uint8Array(0)); }, TypeError, 'source: must not be a TypedArray' ); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var arr = new Uint8Array(0); DetachArrayBuffer(arr.buffer); s2t['throws']( function () { SetTypedArrayFromArrayLike(arr, 0, []); }, TypeError, 'target’s buffer must not be detached' ); s2t.end(); }); forEach(availableTypedArrays, function (name) { var isBigInt = esV.isBigIntTAType(name); var Z = isBigInt ? safeBigInt : Number; var TA = global[name]; var ta = new TA([Z(1), Z(2), Z(3)]); st['throws']( function () { SetTypedArrayFromArrayLike(ta, 3, [Z(10)]); }, RangeError, name + ': out of bounds set attempt throws' ); SetTypedArrayFromArrayLike(ta, 1, [Z(10)]); st.deepEqual(ta, new TA([Z(1), Z(10), Z(3)]), name + ': target is updated'); }); st.test('getters are supported, and can detach', { skip: !$defineProperty || !esV.canDetach }, function (s2t) { var ta = new Uint8Array([1, 2, 3]); var obj = { length: 1 }; $defineProperty(obj, '0', { get: function () { DetachArrayBuffer(ta.buffer); return 10; } }); if (year >= 2023) { s2t.doesNotThrow( function () { SetTypedArrayFromArrayLike(ta, 1, obj); }, TypeError, 'when a Get detaches the buffer, it does not throw' ); } else { s2t['throws']( function () { SetTypedArrayFromArrayLike(ta, 1, obj); }, TypeError, 'when a Get detaches the buffer, it throws' ); } s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SetTypedArrayFromTypedArray.js000066400000000000000000000072001516525472400263120ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var safeBigInt = require('safe-bigint'); var v = require('es-value-fixtures'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, SetTypedArrayFromTypedArray, extras) { t.ok(year >= 2021, 'ES2021+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { SetTypedArrayFromTypedArray(nonTA, 0, new Uint8Array(0)); }, TypeError, 'target: ' + debug(nonTA) + ' is not a TypedArray' ); t['throws']( function () { SetTypedArrayFromTypedArray(new Uint8Array(0), 0, nonTA); }, TypeError, 'source: ' + debug(nonTA) + ' is not a TypedArray' ); }); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { if (notNonNegativeInteger !== Infinity) { t['throws']( function () { SetTypedArrayFromTypedArray(new Uint8Array(0), notNonNegativeInteger, new Uint8Array(0)); }, TypeError, 'targetOffset: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); } }); t['throws']( function () { SetTypedArrayFromTypedArray(new Uint8Array(0), Infinity, new Uint8Array(0)); }, RangeError, 'targetOffset: ' + debug(Infinity) + ' is not a finite integer' ); t.test('can detach', { skip: !esV.canDetach }, function (st) { var arr = new Uint8Array(0); DetachArrayBuffer(arr.buffer); st['throws']( function () { SetTypedArrayFromTypedArray(arr, 0, new Uint8Array(0)); }, TypeError, 'target’s buffer must not be detached' ); st['throws']( function () { SetTypedArrayFromTypedArray(new Uint8Array(0), 0, arr); }, TypeError, 'source’s buffer must not be detached' ); st.end(); }); forEach(getTypedArrays(year), function (name) { var isBigInt = esV.isBigIntTAType(name); var Z = isBigInt ? safeBigInt : Number; var TA = global[name]; var ta = new TA([Z(1), Z(2), Z(3)]); t['throws']( function () { SetTypedArrayFromTypedArray(ta, 3, new TA([Z(10)])); }, RangeError, name + ': out of bounds set attempt throws' ); SetTypedArrayFromTypedArray(ta, 1, new TA([Z(10)])); t.deepEqual(ta, new TA([Z(1), Z(10), Z(3)]), name + ': target is updated'); if (!isBigInt) { var DiffTA = name === 'Float32Array' ? Float64Array : Float32Array; var diffTypeTA = new DiffTA([10]); SetTypedArrayFromTypedArray(diffTypeTA, 0, new TA([20])); t.deepEqual(diffTypeTA, new DiffTA([20])); } }); t.test('mixed content type', { skip: !esV.hasBigInts || typeof BigInt64Array !== 'function' }, function (st) { var bta = new BigInt64Array([BigInt(0)]); var nta = new Float64Array([0]); st['throws']( function () { SetTypedArrayFromTypedArray(bta, 0, nta); }, TypeError, 'number into bigint throws' ); st['throws']( function () { SetTypedArrayFromTypedArray(nta, 0, bta); }, TypeError, 'bigint into number throws' ); st.end(); }); t.test('different type, same content type', { skip: !esV.hasBigInts || typeof BigInt64Array !== 'function' }, function (st) { var bta = new Float32Array([10, 11]); SetTypedArrayFromTypedArray(bta, 0, new Float64Array([0, 1])); st.deepEqual(bta, new Float32Array([0, 1])); var nta = new Float64Array([0, 1]); SetTypedArrayFromTypedArray(nta, 0, new Float32Array([10, 11])); st.deepEqual(nta, new Float64Array([10, 11])); st.end(); }); // TODO: add a test where source and target have the same buffer, // covering that the AO uses CloneArrayBuffer, // presumably so as not to overwrite the source data as the same buffer is written to }; ljharb-es-abstract-babee05/test/methods/SetValueInBuffer.js000066400000000000000000000163651516525472400241060ustar00rootroot00000000000000'use strict'; var arrayFrom = require('array.from'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var bufferTestCases = require('../bufferTestCases.json'); var clearBuffer = require('../helpers/clearBuffer'); var unserialize = require('../helpers/unserializeNumeric'); var esV = require('../helpers/v'); module.exports = function (t, year, actual, extras) { t.ok(year >= 2015, 'ES2015+'); var order = year >= 2024 ? 'UNORDERED' : 'Unordered'; var SetValueInBuffer = year >= 2017 ? actual : function SetValueInBuffer(arrayBuffer, byteIndex, type, value) { if (arguments.length > 6) { return actual(arrayBuffer, byteIndex, type, value, arguments[6]); } return actual(arrayBuffer, byteIndex, type, value); }; var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach([true, false], function (bool) { forEach(esV.unknowns, function (nonAB) { t['throws']( function () { SetValueInBuffer(nonAB, 0, year >= 2024 ? 'INT8' : 'Int8', 0, bool, order); }, TypeError, debug(nonAB) + ' is not an ArrayBuffer (isTypedArray ' + bool + ')' ); }); }); t.test('ArrayBuffers supported', { skip: typeof ArrayBuffer !== 'function' }, function (st) { if (year >= 2020) { st.test('BigInts', { skip: !esV.hasBigInts }, function (s2t) { s2t['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', BigInt(0), true, order); }, TypeError, debug(BigInt(0)) + ' is not a number, but the given type requires one' ); s2t['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'BIGUINT64' : 'BigUint64', 0, true, order); }, TypeError, debug(0) + ' is not a bigint, but the given type requires one' ); forEach(v.bigints, function (bigint) { var buffer = new ArrayBuffer(8); SetValueInBuffer(buffer, 0, year >= 2024 ? 'BIGUINT64' : 'BigUint64', bigint, true, order); s2t.equal( new BigUint64Array(buffer)[0], bigint, debug(bigint) + ' is set' ); }); s2t.end(); }); } forEach([true, false], function (bool) { forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), nonNonNegativeInteger, year >= 2024 ? 'INT8' : 'Int8', 0, bool, order); }, TypeError, debug(nonNonNegativeInteger) + ' is not a valid byte index (isTypedArray ' + bool + ')' ); }); }); forEach([true, false], function (bool) { forEach(esV.invalidTATypes, function (nonString) { st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, nonString, 0, bool, order); }, TypeError, 'type: ' + debug(nonString) + ' is not a valid String (or type) value (isTypedArray ' + bool + ')' ); }); }); forEach(v.nonBooleans, function (nonBoolean) { st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', 0, nonBoolean, false, order); }, TypeError, 'isTypedArray: ' + debug(nonBoolean) + ' is not a valid Boolean value' ); st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', 0, true, order, nonBoolean); }, TypeError, 'isLittleEndian: ' + debug(nonBoolean) + ' is not a valid Boolean value' ); }); forEach([true, false], function (bool) { forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', nonNumber, bool, order); }, TypeError, debug(nonNumber) + ' is not a valid Number or BigInt value (isTypedArray ' + bool + ')' ); }); if (year >= 2017) { st['throws']( function () { SetValueInBuffer(new ArrayBuffer(8), 0, year >= 2024 ? 'INT8' : 'Int8', 0, bool, 'invalid order'); }, TypeError, 'invalid order (isTypedArray ' + bool + ')' ); } }); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { var buffer = new ArrayBuffer(8); s2t.equal(DetachArrayBuffer(buffer), null, 'detaching returns null'); forEach([true, false], function (bool) { s2t['throws']( function () { SetValueInBuffer(buffer, 0, year >= 2024 ? 'INT8' : 'Int8', 0, bool, order); }, TypeError, 'detached buffers throw (isTypedArray ' + bool + ')' ); }); s2t.end(); }); forEach(bufferTestCases, function (testCase) { forEach(esV.getTATypes(year), function (type) { var isBigInt = esV.isBigIntTAType(type); var Z = isBigInt ? safeBigInt : Number; var hasBigEndian = type !== 'Int8' && type !== 'Uint8' && type !== 'Uint8C'; // the 8-bit types are special, they don't have big-endian var result = testCase[type === 'Uint8C' ? 'Uint8Clamped' : type]; var value = unserialize(testCase.value); var elementSize = esV.elementSizes['$' + (type === 'Uint8C' ? 'Uint8Clamped' : type) + 'Array']; var buffer = new ArrayBuffer(esV.elementSizes.$Float64Array); if (isBigInt) { st['throws']( function () { SetValueInBuffer(buffer, 0, year >= 2024 ? type.toUpperCase() : type, 0, false, order, true); }, TypeError, 'bigint type throws with a Number value' ); } if (isBigInt && (!isFinite(value) || Math.floor(value) !== value)) { return; } var valToSet = type === 'Uint8C' && value > 255 ? 255 : Z(value); /* st.equal( SetValueInBuffer(testCase.buffer, 0, type, true, 'Unordered'), defaultEndianness === testCase.endian ? testCase[type].little.value] : testCase[type].big.value, 'buffer holding ' + debug(testCase.value) + ' (' + testCase.endian + ' endian) with type ' + type + ', default endian, yields expected value' ); */ var copyBytes = new Uint8Array(buffer); clearBuffer(buffer); st.equal( SetValueInBuffer(buffer, 0, year >= 2024 ? type.toUpperCase() : type, valToSet, false, order, true), void undefined, 'returns undefined' ); st.deepEqual( arrayFrom(Array.prototype.slice.call(copyBytes, 0, elementSize)), arrayFrom(Array.prototype.slice.call(new Uint8Array(result[type === 'Float64' ? 'setAsLittle' : 'setAsTruncatedLittle'].bytes), 0, elementSize)), 'buffer holding ' + debug(value) + ' with type ' + type + ', little endian, yields expected value' ); if (hasBigEndian) { clearBuffer(buffer); st.equal( SetValueInBuffer(buffer, 0, year >= 2024 ? type.toUpperCase() : type, valToSet, false, order, false), void undefined, 'returns undefined' ); st.deepEqual( arrayFrom(Array.prototype.slice.call(copyBytes, 0, elementSize)), arrayFrom(Array.prototype.slice.call(new Uint8Array(result[type === 'Float64' ? 'setAsBig' : 'setAsTruncatedBig'].bytes), 0, elementSize)), 'buffer holding ' + debug(value) + ' with type ' + type + ', big endian, yields expected value' ); } }); }); st.end(); }); if (year >= 2022) { t.test('SharedArrayBuffers supported', { skip: typeof SharedArrayBuffer !== 'function' }, function (st) { st['throws']( function () { SetValueInBuffer(new SharedArrayBuffer(0), 0, year >= 2024 ? 'INT8' : 'Int8', 0, true, order); }, SyntaxError, 'SAB not yet supported' ); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/SetterThatIgnoresPrototypeProperties.js000066400000000000000000000051431516525472400303460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var gOPD = require('gopd'); var $defineProperty = require('es-define-property'); module.exports = function (t, year, SetterThatIgnoresPrototypeProperties) { t.ok(year >= 2025, 'ES2025+'); forEach(v.primitives, function (primitive) { t['throws']( function () { SetterThatIgnoresPrototypeProperties(primitive, {}, 'p', 'v'); }, TypeError, 'thisValue: ' + debug(primitive) + ' is not an object' ); t['throws']( function () { SetterThatIgnoresPrototypeProperties({}, primitive, 'p', 'v'); }, TypeError, 'home: ' + debug(primitive) + ' is not an object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { SetterThatIgnoresPrototypeProperties(null, {}, nonPropertyKey, 'v'); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); var sentinel = { sentinel: true }; t['throws']( function () { SetterThatIgnoresPrototypeProperties(sentinel, sentinel, 'p', 'v'); }, TypeError, 'throws with sameValue === home' ); t.notOk('nonexistent' in sentinel, 'precondition: property does not exist'); SetterThatIgnoresPrototypeProperties(sentinel, Object.prototype, 'nonexistent', sentinel); t.deepEqual( gOPD(sentinel, 'nonexistent'), { value: sentinel, writable: true, enumerable: true, configurable: true }, 'creates own data property' ); t.ok('sentinel' in sentinel, 'precondition: property exists'); SetterThatIgnoresPrototypeProperties(sentinel, Object.prototype, 'sentinel', sentinel); t.deepEqual( gOPD(sentinel, 'nonexistent'), { value: sentinel, writable: true, enumerable: true, configurable: true }, 'assigns to existing own property' ); t.test('setters', { skip: !$defineProperty }, function (st) { var homeObject = {}; var setter = st.captureFn(function (value) {}); // eslint-disable-line no-unused-vars $defineProperty(homeObject, 'setter', { configurable: true, enumerable: true, set: setter }); SetterThatIgnoresPrototypeProperties(sentinel, homeObject, 'setter', sentinel); st.deepEqual( setter.calls, [], 'missing own property, does not call inherited setter' ); SetterThatIgnoresPrototypeProperties(homeObject, Object.prototype, 'setter', sentinel); st.deepEqual( setter.calls, [ { args: [sentinel], receiver: homeObject, returned: undefined } ], 'existing own property, calls own setter' ); st.end(); }); // missing own property, throws // missing own property, Sets // existing own property, Sets }; ljharb-es-abstract-babee05/test/methods/SortIndexedProperties.js000066400000000000000000000107101516525472400252260ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 2022, 'ES2022+'); var SortIndexedProperties = year >= 2023 ? actual : function SortIndexedProperties(obj, len, SortCompare, holes) { return actual(obj, len, SortCompare); }; /* eslint no-unused-vars: 0 */ var emptySortCompare = function (a, b) {}; forEach(v.primitives, function (primitive) { t['throws']( function () { SortIndexedProperties(primitive, 0, emptySortCompare, 'skip-holes'); }, TypeError, 'obj must be an Object; ' + debug(primitive) + ' is not one' ); }); forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) { t['throws']( function () { SortIndexedProperties({}, nonNonNegativeInteger, emptySortCompare, 'skip-holes'); }, TypeError, '`len`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer' ); }); forEach( [].concat( v.nonFunctions, function () {}, function f(a, b) { return 0; }, function (a) { return 0; }, v.arrowFunctions.length > 0 ? [ /* eslint no-new-func: 1 */ Function('return () => {}')(), Function('return (a) => {}')(), Function('return (a, b, c) => {}')() ] : [] ), function (nonTwoArgAbstractClosure) { t['throws']( function () { SortIndexedProperties({}, 0, nonTwoArgAbstractClosure, 'skip-holes'); }, TypeError, '`len`: ' + debug(nonTwoArgAbstractClosure) + ' is not an abstract closure taking two args' ); } ); forEach([].concat( function (a, b) { return 0; }, v.arrowFunctions.length > 0 ? [ Function('return (a, b) => 0')() ] : [] ), function (ac) { t.doesNotThrow( function () { SortIndexedProperties({}, 0, ac, 'skip-holes'); }, 'an abstract closure taking two args is accepted' ); }); var o = [1, 3, 2, 0]; if (year >= 2023) { t.deepEqual( SortIndexedProperties(o, 3, function (a, b) { return a - b; }, 'skip-holes'), [1, 2, 3], 'new array is returned' ); t.deepEqual( o, [1, 3, 2, 0], 'original object is not sorted' ); t.deepEqual( SortIndexedProperties(o, 4, function (a, b) { return a - b; }, 'skip-holes'), [0, 1, 2, 3], 'passed object is returned' ); t.deepEqual( o, [1, 3, 2, 0], 'original object is not sorted' ); t.deepEqual( SortIndexedProperties(o, 6, function (a, b) { return a - b; }, 'skip-holes'), [0, 1, 2, 3], 'new array is again sorted up to `len` when `len` is longer than than `o.length`' ); t.deepEqual( o, [1, 3, 2, 0], 'original object is not sorted' ); } else { t.equal( SortIndexedProperties(o, 3, function (a, b) { return a - b; }, 'skip-holes'), o, 'passed object is returned' ); t.deepEqual( o, [1, 2, 3, 0], 'object is sorted up to `len`' ); o = [1, 3, 2, 0]; t.equal( SortIndexedProperties(o, 4, function (a, b) { return a - b; }, 'skip-holes'), o, 'passed object is returned' ); t.deepEqual( o, [0, 1, 2, 3], 'object is again sorted up to `len`' ); o = [1, 3, 2, 0]; t.equal( SortIndexedProperties(o, 6, function (a, b) { return a - b; }, 'skip-holes'), o, 'passed object is returned' ); t.deepEqual( o, [0, 1, 2, 3], 'object is again sorted up to `len` when `len` is longer than than `o.length`' ); } if (year >= 2023) { t['throws']( function () { SortIndexedProperties({}, 0, emptySortCompare, ''); }, TypeError, '`holes`: only enums allowed' ); var obj = [1, 3, 2, 0]; forEach(['skip-holes', 'read-through-holes'], function (holes) { t.deepEqual( SortIndexedProperties( obj, 3, function (a, b) { return a - b; }, holes ), [1, 2, 3], holes + ': sorted items are returned, up to the expected length of the object' ); t.deepEqual( SortIndexedProperties( obj, 4, function (a, b) { return b - a; }, holes ), [3, 2, 1, 0], holes + ': sorted items are returned' ); }); t.deepEqual( SortIndexedProperties( obj, 6, function (a, b) { return a - b; }, 'read-through-holes' ), [0, 1, 2, 3, undefined, undefined], 'read-through-holes: sorted items are returned' ); t.deepEqual( SortIndexedProperties( obj, 6, function (a, b) { return a - b; }, 'skip-holes' ), [0, 1, 2, 3], 'skip-holes: sorted items are returned, holes skipped' ); } // TODO: tests with holes }; ljharb-es-abstract-babee05/test/methods/SpeciesConstructor.js000066400000000000000000000026131516525472400245650ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); var hasSpecies = v.hasSymbols && Symbol.species; module.exports = function (t, year, SpeciesConstructor) { t.ok(year >= 2015, 'ES2015+'); t['throws'](function () { SpeciesConstructor(null); }, TypeError); t['throws'](function () { SpeciesConstructor(undefined); }, TypeError); var defaultConstructor = function Foo() {}; t.equal( SpeciesConstructor({ constructor: undefined }, defaultConstructor), defaultConstructor, 'undefined constructor returns defaultConstructor' ); t['throws']( function () { return SpeciesConstructor({ constructor: null }, defaultConstructor); }, TypeError, 'non-undefined non-object constructor throws' ); t.test('with Symbol.species', { skip: !hasSpecies }, function (st) { var Bar = function Bar() {}; Bar[Symbol.species] = null; st.equal( SpeciesConstructor(new Bar(), defaultConstructor), defaultConstructor, 'undefined/null Symbol.species returns default constructor' ); var Baz = function Baz() {}; Baz[Symbol.species] = Bar; st.equal( SpeciesConstructor(new Baz(), defaultConstructor), Bar, 'returns Symbol.species constructor value' ); Baz[Symbol.species] = {}; st['throws']( function () { SpeciesConstructor(new Baz(), defaultConstructor); }, TypeError, 'throws when non-constructor non-null non-undefined species value found' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SplitMatch.js000066400000000000000000000035351516525472400230000ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, SplitMatch) { t.ok(year >= 2015 && year <= 2021, 'ES2015 - ES2021'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { SplitMatch(nonString, 0, ''); }, TypeError, 'S: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { SplitMatch('', 0, nonString); }, TypeError, 'R: ' + debug(nonString) + ' is not a String' ); }); forEach(esV.notInts, function (nonInteger) { t['throws']( function () { SplitMatch('', nonInteger, ''); }, TypeError, 'q: ' + debug(nonInteger) + ' is not an integer' ); }); var expected = year < 2021 ? false : 'not-matched'; t.equal(SplitMatch('abc', 0, 'a'), 1, '"a" is found at index 0, before index 1, in "abc"'); t.equal(SplitMatch('abc', 1, 'a'), expected, '"a" is not found at index 1 in "abc"'); t.equal(SplitMatch('abc', 2, 'a'), expected, '"a" is not found at index 2 in "abc"'); t.equal(SplitMatch('abc', 0, 'b'), expected, '"a" is not found at index 0 in "abc"'); t.equal(SplitMatch('abc', 1, 'b'), 2, '"b" is found at index 1, before index 2, in "abc"'); t.equal(SplitMatch('abc', 2, 'b'), expected, '"a" is not found at index 2 in "abc"'); t.equal(SplitMatch('abc', 0, 'c'), expected, '"a" is not found at index 0 in "abc"'); t.equal(SplitMatch('abc', 1, 'c'), expected, '"a" is not found at index 1 in "abc"'); t.equal(SplitMatch('abc', 2, 'c'), 3, '"c" is found at index 2, before index 3, in "abc"'); t.equal(SplitMatch('a', 0, 'ab'), expected, 'R longer than S yields ' + expected); var s = 'a' + esV.poo.whole + 'c'; t.equal(SplitMatch(s, 1, esV.poo.whole), 3, debug(esV.poo.whole) + ' is found at index 1, before index 3, in ' + debug(s)); }; ljharb-es-abstract-babee05/test/methods/StrictEqualityComparison.js000066400000000000000000000023211516525472400257410ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, StrictEqualityComparison) { t.ok(year >= 5 && year <= 2021, 'ES5 - ES2021'); t.test('same types use ===', function (st) { forEach(esV.unknowns, function (value) { st.equal(StrictEqualityComparison(value, value), value === value, debug(value) + ' is strictly equal to itself'); }); st.end(); }); t.test('different types are not ===', function (st) { var pairs = [ [null, undefined], [3, '3'], [true, '3'], [true, 3], [false, 0], [false, '0'], [3, [3]], ['3', [3]], [true, [1]], [false, [0]], [String(v.coercibleObject), v.coercibleObject], [Number(String(v.coercibleObject)), v.coercibleObject], [Number(v.coercibleObject), v.coercibleObject], [String(Number(v.coercibleObject)), v.coercibleObject] ]; forEach(pairs, function (pair) { var a = pair[0]; var b = pair[1]; st.equal(StrictEqualityComparison(a, b), a === b, debug(a) + ' === ' + debug(b)); st.equal(StrictEqualityComparison(b, a), b === a, debug(b) + ' === ' + debug(a)); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/StringCreate.js000066400000000000000000000017121516525472400233150ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var $setProto = require('set-proto'); var $getProto = require('get-proto'); module.exports = function (t, year, StringCreate) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringCreate(nonString, String.prototype); }, TypeError, debug(nonString) + ' is not a String' ); }); t.deepEqual(StringCreate('foo', String.prototype), Object('foo'), '"foo" with `String.prototype` makes `Object("foo")'); var proto = {}; if ($setProto) { t.equal($getProto(StringCreate('', proto)), proto, '[[Prototype]] is set as expected'); } else { t['throws']( function () { StringCreate('', proto); }, SyntaxError, 'setting [[Prototype]] is not supported in this env' ); } t.equal(StringCreate('a', String.prototype).length, 'a'.length, 'length is preserved'); }; ljharb-es-abstract-babee05/test/methods/StringGetIndexProperty.js000066400000000000000000000034011516525472400253630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, StringGetIndexProperty) { t.ok(year >= 2015, 'ES2015+'); forEach([].concat( v.nonStrings, v.strings ), function (nonStringObjects) { t['throws']( function () { StringGetIndexProperty(nonStringObjects); }, TypeError, debug(nonStringObjects) + ' is not a boxed String Object' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { StringGetIndexProperty('', nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); forEach(v.symbols, function (symbol) { t.equal( StringGetIndexProperty(Object('a'), symbol), undefined, debug(symbol) + ' is a Property Key, but not a String' ); }); // a string where CanonicalNumericIndexString returns undefined, a non-integer, or -0 forEach([].concat( '-1', '-0', 'undefined', v.nonIntegerNumbers ), function (nonIndex) { var S = Object('abc'); t.equal( StringGetIndexProperty(S, String(nonIndex)), undefined, debug(nonIndex) + ' is not an index inside ' + debug(S) ); }); forEach(v.strings, function (str) { var S = Object(str); for (var i = 0; i < str.length; i += 1) { var desc = { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': str.charAt(i), '[[Writable]]': false }; t.deepEqual( StringGetIndexProperty(S, String(i)), desc, 'boxed String ' + debug(S) + ' at index ' + debug(i) + ' is ' + debug(desc) ); } t.equal( StringGetIndexProperty(S, String(str.length)), undefined, 'boxed String ' + debug(S) + ' at OOB index ' + debug(str.length) + ' is `undefined' ); }); }; ljharb-es-abstract-babee05/test/methods/StringGetOwnProperty.js000066400000000000000000000026321516525472400250640ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, StringGetOwnProperty) { t.ok(year >= 2017, 'ES2017+'); forEach([].concat( v.nonStrings, v.strings ), function (nonBoxedString) { t['throws']( function () { StringGetOwnProperty(nonBoxedString, '0'); }, TypeError, debug(nonBoxedString) + ' is not a boxed String' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { t['throws']( function () { StringGetOwnProperty(Object(''), nonPropertyKey); }, TypeError, debug(nonPropertyKey) + ' is not a Property Key' ); }); t.equal(StringGetOwnProperty(Object(''), '0'), undefined, 'empty boxed string yields undefined'); forEach(v.symbols, function (symbol) { t.equal( StringGetOwnProperty(Object('abc'), symbol), undefined, debug(symbol) + ' is not a String, and yields undefined' ); }); forEach(v.strings, function (string) { if (string) { var S = Object(string); for (var i = 0; i < string.length; i += 1) { var descriptor = StringGetOwnProperty(S, String(i)); t.deepEqual( descriptor, { '[[Configurable]]': false, '[[Enumerable]]': true, '[[Value]]': string.charAt(i), '[[Writable]]': false }, debug(string) + ': property ' + debug(String(i)) + ': returns expected descriptor' ); } } }); }; ljharb-es-abstract-babee05/test/methods/StringIndexOf.js000066400000000000000000000045101516525472400234450ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, StringIndexOf) { t.ok(year >= 2021, 'ES2021+'); var notFound = year >= 2025 ? 'NOT-FOUND' : -1; forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringIndexOf(nonString); }, TypeError, '`string` arg: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { StringIndexOf('', nonString); }, TypeError, '`searchValue` arg: ' + debug(nonString) + ' is not a String' ); }); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { t['throws']( function () { StringIndexOf('', '', notNonNegativeInteger); }, TypeError, '`fromIndex` arg: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); }); var str = 'abc' + esV.poo.whole + 'abc'; t.equal(StringIndexOf(str, 'a', 0), 0, 'a: first index found'); t.equal(StringIndexOf(str, 'a', 1), 5, 'a: second index found'); t.equal(StringIndexOf(str, 'a', 6), notFound, 'a: second index not found'); t.equal(StringIndexOf(str, 'b', 0), 1, 'b: first index found'); t.equal(StringIndexOf(str, 'b', 2), 6, 'b: second index found'); t.equal(StringIndexOf(str, 'b', 7), notFound, 'b: second index not found'); t.equal(StringIndexOf(str, 'c', 0), 2, 'c: first index found'); t.equal(StringIndexOf(str, 'c', 3), 7, 'c: second index found'); t.equal(StringIndexOf(str, 'c', 8), notFound, 'c: second index not found'); t.equal(StringIndexOf(str, esV.poo.leading, 0), 3, 'first half of ' + esV.poo.whole + ' found'); t.equal(StringIndexOf(str, esV.poo.leading, 4), notFound, 'first half of ' + esV.poo.whole + ' not found'); t.equal(StringIndexOf(str, esV.poo.trailing, 0), 4, 'second half of ' + esV.poo.whole + ' found'); t.equal(StringIndexOf(str, esV.poo.trailing, 5), notFound, 'second half of ' + esV.poo.whole + ' not found'); t.equal(StringIndexOf(str, esV.poo.whole, 0), 3, esV.poo.whole + ' found'); t.equal(StringIndexOf(str, esV.poo.whole, 4), notFound, esV.poo.whole + ' not found'); t.equal(StringIndexOf('', 'a', 0), notFound, 'empty string contains nothing'); for (var i = 0; i < str.length; i += 1) { t.equal(StringIndexOf(str, '', i), i, 'empty string is found at every index: ' + i); } }; ljharb-es-abstract-babee05/test/methods/StringLastIndexOf.js000066400000000000000000000051631516525472400242760ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, StringLastIndexOf) { t.ok(year >= 2025, 'ES2025+'); var notFound = 'NOT-FOUND'; forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringLastIndexOf(nonString, '', 0); }, TypeError, '`string` arg: ' + debug(nonString) + ' is not a String' ); t['throws']( function () { StringLastIndexOf('', nonString, 0); }, TypeError, '`searchValue` arg: ' + debug(nonString) + ' is not a String' ); }); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { t['throws']( function () { StringLastIndexOf('', '', notNonNegativeInteger); }, TypeError, '`fromIndex` arg: ' + debug(notNonNegativeInteger) + ' is not a non-negative integer' ); }); var str = 'abc' + esV.poo.whole + 'abc'; t.equal(StringLastIndexOf(str, 'a', str.length - 1), 5, 'a: second index found from end'); t.equal(StringLastIndexOf(str, 'a', 1), 0, 'a: first index found from 1'); t.equal(StringLastIndexOf(str, 'a', 0), 0, 'a: first index found from 0'); t.equal(StringLastIndexOf(str, 'b', str.length - 1), 6, 'b: second index found from end'); t.equal(StringLastIndexOf(str, 'b', 2), 1, 'b: first index found from 2'); t.equal(StringLastIndexOf(str, 'b', 0), notFound, 'b: second index not found from 0'); t.equal(StringLastIndexOf(str, 'c', str.length - 1), 7, 'c: first index found from end'); t.equal(StringLastIndexOf(str, 'c', 3), 2, 'c: second index found from 3'); t.equal(StringLastIndexOf(str, 'c', 0), notFound, 'c: second index not found from 0'); t.equal(StringLastIndexOf(str, esV.poo.trailing, str.length - 1), 4, 'second half of ' + esV.poo.whole + ' found from end'); t.equal(StringLastIndexOf(str, esV.poo.trailing, 3), notFound, 'second half of ' + esV.poo.whole + ' not found from 3'); t.equal(StringLastIndexOf(str, esV.poo.leading, 4), 3, 'first half of ' + esV.poo.whole + ' found from 4'); t.equal(StringLastIndexOf(str, esV.poo.leading, 0), notFound, 'first half of ' + esV.poo.whole + ' not found from 0'); t.equal(StringLastIndexOf(str, esV.poo.whole, str.length - esV.poo.whole.length), 3, esV.poo.whole + ' found from ~end'); t.equal(StringLastIndexOf(str, esV.poo.whole, 2), notFound, esV.poo.whole + ' not found from 2'); t['throws']( function () { StringLastIndexOf('', 'a', 0); }, TypeError, 'empty string can not be searched' ); for (var i = str.length; i >= 0; i -= 1) { t.equal(StringLastIndexOf(str, '', i), i, 'empty string is found at every index: ' + i); } }; ljharb-es-abstract-babee05/test/methods/StringPad.js000066400000000000000000000025141516525472400226170ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, StringPad) { t.ok(year >= 2020, 'ES2020+'); t['throws']( function () { StringPad('', 0, '', 'not start or end'); }, TypeError, '`placement` must be "start" or "end"' ); if (year < 2025) { t.equal(StringPad('a', 3, '', 'start'), 'a'); t.equal(StringPad('a', 3, '', 'end'), 'a'); t.equal(StringPad('a', 3, year >= 2024 ? ' ' : undefined, 'start'), ' a'); t.equal(StringPad('a', 3, year >= 2024 ? ' ' : undefined, 'end'), 'a '); t.equal(StringPad('a', 3, '0', 'start'), '00a'); t.equal(StringPad('a', 3, '0', 'end'), 'a00'); t.equal(StringPad('a', 3, '012', 'start'), '01a'); t.equal(StringPad('a', 3, '012', 'end'), 'a01'); t.equal(StringPad('a', 7, '012', 'start'), '012012a'); t.equal(StringPad('a', 7, '012', 'end'), 'a012012'); } if (year >= 2024) { t.equal(StringPad('a', 3, '', 'START'), 'a'); t.equal(StringPad('a', 3, '', 'END'), 'a'); t.equal(StringPad('a', 3, ' ', 'START'), ' a'); t.equal(StringPad('a', 3, ' ', 'END'), 'a '); t.equal(StringPad('a', 3, '0', 'START'), '00a'); t.equal(StringPad('a', 3, '0', 'END'), 'a00'); t.equal(StringPad('a', 3, '012', 'START'), '01a'); t.equal(StringPad('a', 3, '012', 'END'), 'a01'); t.equal(StringPad('a', 7, '012', 'START'), '012012a'); t.equal(StringPad('a', 7, '012', 'END'), 'a012012'); } }; ljharb-es-abstract-babee05/test/methods/StringPaddingBuiltinsImpl.js000066400000000000000000000031231516525472400260120ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, StringPaddingBuiltinsImpl) { t.ok(year >= 2024, 'ES2024+'); t['throws']( function () { StringPaddingBuiltinsImpl('', 0, '', 'not start or end'); }, TypeError, '`placement` must be ~START~ or ~END~' ); t.equal(StringPaddingBuiltinsImpl('a', 3, '', 'start'), 'a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '', 'end'), 'a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '0', 'start'), '00a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '0', 'end'), 'a00'); t.equal(StringPaddingBuiltinsImpl('a', 3, '012', 'start'), '01a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '012', 'end'), 'a01'); t.equal(StringPaddingBuiltinsImpl('a', 7, '012', 'start'), '012012a'); t.equal(StringPaddingBuiltinsImpl('a', 7, '012', 'end'), 'a012012'); t.equal(StringPaddingBuiltinsImpl('a', 3, undefined, 'start'), ' a'); t.equal(StringPaddingBuiltinsImpl('abc', 1, undefined, 'start'), 'abc'); t.equal(StringPaddingBuiltinsImpl('a', 3, '', 'START'), 'a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '', 'END'), 'a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '0', 'START'), '00a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '0', 'END'), 'a00'); t.equal(StringPaddingBuiltinsImpl('a', 3, '012', 'START'), '01a'); t.equal(StringPaddingBuiltinsImpl('a', 3, '012', 'END'), 'a01'); t.equal(StringPaddingBuiltinsImpl('a', 7, '012', 'START'), '012012a'); t.equal(StringPaddingBuiltinsImpl('a', 7, '012', 'END'), 'a012012'); t.equal(StringPaddingBuiltinsImpl('a', 3, undefined, 'START'), ' a'); t.equal(StringPaddingBuiltinsImpl('abc', 1, undefined, 'START'), 'abc'); }; ljharb-es-abstract-babee05/test/methods/StringToBigInt.js000066400000000000000000000030201516525472400235630ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var esV = require('../helpers/v'); module.exports = function (t, year, StringToBigInt) { t.ok(year >= 2020, 'ES2020+'); t.test('actual BigInts', { skip: !esV.hasBigInts }, function (st) { forEach(v.bigints, function (bigint) { st.equal( StringToBigInt(String(bigint)), bigint, debug(String(bigint)) + ' becomes ' + debug(bigint) ); }); forEach(v.integerNumbers, function (int) { var bigint = safeBigInt(int); st.equal( StringToBigInt(String(int)), bigint, debug(String(int)) + ' becomes ' + debug(bigint) ); }); var expected = year >= 2022 ? undefined : NaN; forEach(v.nonIntegerNumbers, function (nonInt) { st.equal( StringToBigInt(String(nonInt)), expected, debug(String(nonInt)) + ' becomes ' + expected ); }); st.equal(StringToBigInt(''), BigInt(0), 'empty string becomes 0n'); st.equal(StringToBigInt('Infinity'), expected, 'non-finite numeric string becomes ' + expected); st.end(); }); t.test('BigInt not supported', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { StringToBigInt('0'); }, SyntaxError, 'throws a SyntaxError when BigInt is not available' ); st.end(); }); forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringToBigInt(nonString); }, TypeError, debug(nonString) + ' is not a string' ); }); }; ljharb-es-abstract-babee05/test/methods/StringToCodePoints.js000066400000000000000000000011731516525472400244650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, StringToCodePoints) { t.ok(year >= 2021, 'ES2021+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringToCodePoints(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); t.deepEqual(StringToCodePoints('abc'), ['a', 'b', 'c'], 'code units get split'); t.deepEqual(StringToCodePoints('a' + esV.poo.whole + 'c'), ['a', esV.poo.whole, 'c'], 'code points get split too'); }; ljharb-es-abstract-babee05/test/methods/StringToNumber.js000066400000000000000000000050031516525472400236420ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, StringToNumber) { t.ok(year >= 5, 'ES5+'); // this is ES2022+, but ToNumber calls it as well forEach(v.nonStrings, function (nonString) { t['throws']( function () { StringToNumber(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); t.test('trimming of whitespace and non-whitespace characters', function (st) { // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace. var nonWhitespaces = { '\\u200b': '\u200b', '\\ufffe': '\ufffe' }; forEach(nonWhitespaces, function (desc, nonWS) { st.equal(StringToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed'); }); st.end(); }); // TODO: check if this applies to ES5 t.test('trimming of whitespace and non-whitespace characters', function (st) { var whitespace = year < 2015 ? ' \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085' : ' \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'; if ((/\s/).test('\u180e')) { whitespace += '\u180e'; // in node 8.3+, the mongolian vowel separator is not whitespace } forEach(whitespace, function (ws) { st.equal(StringToNumber(ws + 0 + ws), 0, 'whitespace ' + debug(ws) + ' is trimmed'); }); st.equal(StringToNumber(whitespace + 0 + whitespace), 0, 'whitespace is trimmed'); // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace. var nonWhitespaces = year < 2015 ? { '\\u200b': '\u200b', '\\ufffe': '\ufffe' } : { '\\u0085': '\u0085', '\\u200b': '\u200b', '\\ufffe': '\ufffe' }; forEach(nonWhitespaces, function (desc, nonWS) { st.equal(StringToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed'); }); st.end(); }); t.test('stringified numbers', function (st) { forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) { st.equal(+numString, StringToNumber(numString), '"' + numString + '" coerces to ' + Number(numString)); }); forEach(v.numbers, function (number) { var str = number === 0 ? debug(number) : String(number); st.equal(StringToNumber(str), number, debug(number) + ' stringified, coerces to itself'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SymbolDescriptiveString.js000066400000000000000000000015721516525472400255650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, SymbolDescriptiveString) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.allButSyms, function (nonSymbol) { t['throws']( function () { SymbolDescriptiveString(nonSymbol); }, TypeError, debug(nonSymbol) + ' is not a Symbol' ); }); t.test('Symbols', { skip: !v.hasSymbols }, function (st) { st.equal(SymbolDescriptiveString(Symbol()), 'Symbol()', 'undefined description'); st.equal(SymbolDescriptiveString(Symbol('')), 'Symbol()', 'empty string description'); st.equal(SymbolDescriptiveString(Symbol.iterator), 'Symbol(Symbol.iterator)', 'well-known symbol'); st.equal(SymbolDescriptiveString(Symbol('foo')), 'Symbol(foo)', 'string description'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/SystemTimeZoneIdentifier.js000066400000000000000000000011171516525472400256640ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, SystemTimeZoneIdentifier) { t.ok(year >= 2024, 'ES2024+'); t.test('Intl supported', { skip: typeof Intl === 'undefined' }, function (st) { st.equal( SystemTimeZoneIdentifier(), new Intl.DateTimeFormat().resolvedOptions().timeZone, 'system time zone identifier is resolved from Intl.DateTimeFormat' ); st.end(); }); t.test('Intl not supported', { skip: typeof Intl !== 'undefined' }, function (st) { st.equal( SystemTimeZoneIdentifier(), 'UTC', 'system time zone identifier is UTC' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TestIntegrityLevel.js000066400000000000000000000043531516525472400245350ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, TestIntegrityLevel) { t.ok(year >= 2015, 'ES2015+'); forEach(v.primitives, function (primitive) { t['throws']( function () { TestIntegrityLevel(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); t['throws']( function () { TestIntegrityLevel({ a: 1 }); }, /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/, '`level` must be `"sealed"` or `"frozen"`' ); t.equal(TestIntegrityLevel({ a: 1 }, 'sealed'), false, 'basic object is not sealed'); t.equal(TestIntegrityLevel({ a: 1 }, 'frozen'), false, 'basic object is not frozen'); t.test('preventExtensions', { skip: !Object.preventExtensions }, function (st) { var o = Object.preventExtensions({ a: 1 }); st.equal(TestIntegrityLevel(o, 'sealed'), false, 'nonextensible object is not sealed'); st.equal(TestIntegrityLevel(o, 'frozen'), false, 'nonextensible object is not frozen'); var empty = Object.preventExtensions({}); st.equal(TestIntegrityLevel(empty, 'sealed'), true, 'empty nonextensible object is sealed'); st.equal(TestIntegrityLevel(empty, 'frozen'), true, 'empty nonextensible object is frozen'); st.end(); }); t.test('seal', { skip: !Object.seal }, function (st) { var o = Object.seal({ a: 1 }); st.equal(TestIntegrityLevel(o, 'sealed'), true, 'sealed object is sealed'); st.equal(TestIntegrityLevel(o, 'frozen'), false, 'sealed object is not frozen'); var empty = Object.seal({}); st.equal(TestIntegrityLevel(empty, 'sealed'), true, 'empty sealed object is sealed'); st.equal(TestIntegrityLevel(empty, 'frozen'), true, 'empty sealed object is frozen'); st.end(); }); t.test('freeze', { skip: !Object.freeze }, function (st) { var o = Object.freeze({ a: 1 }); st.equal(TestIntegrityLevel(o, 'sealed'), true, 'frozen object is sealed'); st.equal(TestIntegrityLevel(o, 'frozen'), true, 'frozen object is frozen'); var empty = Object.freeze({}); st.equal(TestIntegrityLevel(empty, 'sealed'), true, 'empty frozen object is sealed'); st.equal(TestIntegrityLevel(empty, 'frozen'), true, 'empty frozen object is frozen'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ThisBigIntValue.js000066400000000000000000000012271516525472400237250ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, ThisBigIntValue) { t.ok(year >= 2020, 'ES2020+'); t.test('actual BigInts', { skip: !esV.hasBigInts }, function (st) { st.equal(ThisBigIntValue(BigInt(42)), BigInt(42)); st.equal(ThisBigIntValue(Object(BigInt(42))), BigInt(42)); st.end(); }); forEach(v.nonBigInts, function (nonBigInt) { t['throws']( function () { ThisBigIntValue(nonBigInt); }, esV.hasBigInts ? TypeError : SyntaxError, debug(nonBigInt) + ' is not a BigInt' ); }); }; ljharb-es-abstract-babee05/test/methods/ThisBooleanValue.js000066400000000000000000000012271516525472400241300ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ThisBooleanValue) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { ThisBooleanValue(nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach(v.booleans, function (boolean) { t.equal(ThisBooleanValue(boolean), boolean, debug(boolean) + ' is its own thisBooleanValue'); var obj = Object(boolean); t.equal(ThisBooleanValue(obj), boolean, debug(obj) + ' is the boxed thisBooleanValue'); }); }; ljharb-es-abstract-babee05/test/methods/ThisNumberValue.js000066400000000000000000000012051516525472400237750ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ThisNumberValue) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { ThisNumberValue(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); forEach(v.numbers, function (number) { t.equal(ThisNumberValue(number), number, debug(number) + ' is its own ThisNumberValue'); var obj = Object(number); t.equal(ThisNumberValue(obj), number, debug(obj) + ' is the boxed ThisNumberValue'); }); }; ljharb-es-abstract-babee05/test/methods/ThisStringValue.js000066400000000000000000000012061516525472400240140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ThisStringValue) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { ThisStringValue(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(v.strings, function (string) { t.equal(ThisStringValue(string), string, debug(string) + ' is its own ThisStringValue'); var obj = Object(string); t.equal(ThisStringValue(obj), string, debug(obj) + ' is the boxed ThisStringValue'); }); }; ljharb-es-abstract-babee05/test/methods/ThisSymbolValue.js000066400000000000000000000021001516525472400240050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, ThisSymbolValue) { t.ok(year >= 2018, 'ES2018+'); forEach(esV.allButSyms, function (nonSymbol) { t['throws']( function () { ThisSymbolValue(nonSymbol); }, v.hasSymbols ? TypeError : SyntaxError, debug(nonSymbol) + ' is not a Symbol' ); }); t.test('no native Symbols', { skip: v.hasSymbols }, function (st) { forEach(esV.unknowns, function (value) { st['throws']( function () { ThisSymbolValue(value); }, SyntaxError, 'Symbols are not supported' ); }); st.end(); }); t.test('symbol values', { skip: !v.hasSymbols }, function (st) { forEach(v.symbols, function (symbol) { st.equal(ThisSymbolValue(symbol), symbol, 'Symbol value of ' + debug(symbol) + ' is same symbol'); st.equal( ThisSymbolValue(Object(symbol)), symbol, 'Symbol value of ' + debug(Object(symbol)) + ' is ' + debug(symbol) ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ThrowCompletion.js000066400000000000000000000013361516525472400240620ustar00rootroot00000000000000'use strict'; var SLOT = require('internal-slot'); module.exports = function (t, year, ThrowCompletion, extras) { t.ok(year >= 2018, 'ES2018+'); var CompletionRecord = extras.getAO('CompletionRecord'); var sentinel = {}; var completion = ThrowCompletion(sentinel); t.ok(completion instanceof CompletionRecord, 'produces an instance of CompletionRecord'); t.equal(SLOT.get(completion, '[[Type]]'), 'throw', 'completion type is "throw"'); t.equal(completion.type(), 'throw', 'completion type is "throw" (via property)'); t.equal(SLOT.get(completion, '[[Value]]'), sentinel, 'completion value is the argument provided'); t.equal(completion.value(), sentinel, 'completion value is the argument provided (via property)'); }; ljharb-es-abstract-babee05/test/methods/TimeClip.js000066400000000000000000000013731516525472400224340ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, TimeClip) { t.ok(year >= 5, 'ES5+'); forEach(esV.nonFiniteNumbers, function (nonFiniteNumber) { t.equal(TimeClip(nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`'); }); t.equal(TimeClip(8.64e15 + 1), NaN, '8.64e15 is the largest magnitude considered "finite"'); t.equal(TimeClip(-8.64e15 - 1), NaN, '-8.64e15 is the largest magnitude considered "finite"'); forEach([].concat( v.zeroes, -10, 10, +new Date() ), function (time) { t.looseEqual(TimeClip(time), time, debug(time) + ' is a time of ' + debug(time)); }); }; ljharb-es-abstract-babee05/test/methods/TimeFromYear.js000066400000000000000000000003601516525472400232640ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, TimeFromYear) { t.ok(year >= 5, 'ES5+'); for (var i = 1900; i < 2100; i += 1) { t.equal(TimeFromYear(i), Date.UTC(i, 0, 1), 'TimeFromYear matches a Date object’s year: ' + i); } }; ljharb-es-abstract-babee05/test/methods/TimeString.js000066400000000000000000000010021516525472400230000ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, TimeString) { t.ok(year >= 2018, 'ES2018+'); forEach([].concat( v.nonNumbers, NaN ), function (nonNumberOrNaN) { t['throws']( function () { TimeString(nonNumberOrNaN); }, TypeError, debug(nonNumberOrNaN) + ' is not a non-NaN Number' ); }); var tv = Date.UTC(2019, 8, 10, 7, 8, 9); t.equal(TimeString(tv), '07:08:09 GMT'); }; ljharb-es-abstract-babee05/test/methods/TimeWithinDay.js000066400000000000000000000006351516525472400234450ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, TimeWithinDay) { t.ok(year >= 5, 'ES5+'); var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5); var add = 2.5; var later = new Date(time + (add * esV.msPerDay)); t.equal( TimeWithinDay(later.getTime()), TimeWithinDay(time) + (0.5 * esV.msPerDay), 'adding 2.5 days worth of ms, gives a TimeWithinDay delta of +0.5' ); }; ljharb-es-abstract-babee05/test/methods/TimeZoneString.js000066400000000000000000000016421516525472400236460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, TimeZoneString) { t.ok(year >= 2018, 'ES2018+'); if (year < 2023) { forEach([].concat( v.nonNumbers, NaN ), function (nonIntegerNumber) { t['throws']( function () { TimeZoneString(nonIntegerNumber); }, TypeError, debug(nonIntegerNumber) + ' is not a non-NaN Number' ); }); } else { forEach([].concat( v.nonIntegerNumbers, esV.nonFiniteNumbers ), function (nonIntegerNumber) { t['throws']( function () { TimeZoneString(nonIntegerNumber); }, TypeError, debug(nonIntegerNumber) + ' is not an integral number' ); }); } var d = new Date(); t.equal(TimeZoneString(Number(d)), d.toTimeString().match(/\((.*)\)$/)[1], 'matches parenthesized part of .toTimeString'); }; ljharb-es-abstract-babee05/test/methods/ToBigInt.js000066400000000000000000000035401516525472400224030ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var esV = require('../helpers/v'); module.exports = function (t, year, ToBigInt) { t.ok(year >= 2020, 'ES2020+'); forEach([].concat( v.nullPrimitives, v.symbols, v.numbers ), function (nonBigIntCoercible) { t['throws']( function () { ToBigInt(nonBigIntCoercible); }, esV.hasBigInts ? TypeError : SyntaxError, debug(nonBigIntCoercible) + ' throws' ); }); forEach(v.symbols, function (sym) { t['throws']( function () { ToBigInt(sym); }, esV.hasBigInts ? TypeError : SyntaxError, debug(sym) + ' throws' ); }); t.test('actual BigInts', { skip: !esV.hasBigInts }, function (st) { st.equal(ToBigInt(true), BigInt(1), 'true becomes 1n'); st.equal(ToBigInt(false), BigInt(0), 'true becomes 0n'); st.equal(ToBigInt(''), BigInt(0), 'empty string becomes 0n'); st['throws']( function () { ToBigInt('a'); }, TypeError, debug('a') + ' can not be parsed to a bigint' ); forEach(v.bigints, function (bigint) { st.equal( ToBigInt(bigint), bigint, debug(bigint) + ' remains ' + debug(bigint) ); st.equal( ToBigInt(String(bigint)), bigint, debug(String(bigint)) + ' becomes ' + debug(bigint) ); }); forEach(v.numbers, function (number) { st['throws']( function () { ToBigInt(number); }, TypeError, debug(number) + ' throws' ); }); forEach(v.integerNumbers, function (int) { st.equal( ToBigInt(String(int)), safeBigInt(int), debug(String(int)) + ' becomes ' + debug(safeBigInt(int)) ); }); forEach(v.nonIntegerNumbers, function (nonInt) { st['throws']( function () { ToBigInt(nonInt); }, TypeError, debug(nonInt) + ' is not an integer' ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToBigInt64.js000066400000000000000000000024651516525472400225620ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var esV = require('../helpers/v'); var twoSixtyFour = safeBigInt && safeBigInt(Math.pow(2, 64)); var twoSixtyThree = safeBigInt && safeBigInt(Math.pow(2, 63)); module.exports = function (t, year, ToBigInt64) { t.ok(year >= 2020, 'ES2020+'); t.test('has bigints', { skip: !esV.hasBigInts }, function (st) { var twoSixtyThreeMinusOne = twoSixtyThree - BigInt(1); var negTwoSixtyThreeMinusOne = -twoSixtyThree - BigInt(1); st.equal(ToBigInt64(twoSixtyThreeMinusOne), twoSixtyThreeMinusOne, debug(twoSixtyThreeMinusOne) + ' returns itself'); st.equal(ToBigInt64(-twoSixtyThree), -twoSixtyThree, debug(-twoSixtyThree) + ' returns itself'); st.equal( ToBigInt64(twoSixtyThree), twoSixtyThree - twoSixtyFour, debug(twoSixtyThree) + ' returns ' + debug(twoSixtyThree - twoSixtyFour) ); st.equal( ToBigInt64(negTwoSixtyThreeMinusOne), twoSixtyFour - twoSixtyThree - BigInt(1), debug(negTwoSixtyThreeMinusOne) + ' returns ' + debug(twoSixtyFour - twoSixtyThree - BigInt(1)) ); st.end(); }); t.test('no bigints', { skip: esV.hasBigInts }, function (st) { st['throws']( function () { ToBigInt64(1); }, SyntaxError, 'throws a SyntaxError if BigInt is not supported' ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToBigUint64.js000066400000000000000000000025131516525472400227410ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var safeBigInt = require('safe-bigint'); var esV = require('../helpers/v'); var twoSixtyFour = safeBigInt && safeBigInt(Math.pow(2, 64)); var twoSixtyThree = safeBigInt && safeBigInt(Math.pow(2, 63)); module.exports = function (t, year, ToBigUint64) { t.ok(year >= 2020, 'ES2020+'); t.test('bigints', { skip: !esV.hasBigInts }, function (st) { var twoSixtyFourMinusOne = twoSixtyFour - BigInt(1); var twoSixtyThreeMinusOne = twoSixtyThree - BigInt(1); var negTwoSixtyThreeMinusOne = -twoSixtyThree - BigInt(1); st.equal(ToBigUint64(twoSixtyThreeMinusOne), twoSixtyThreeMinusOne, debug(twoSixtyThreeMinusOne) + ' returns itself'); st.equal(ToBigUint64(twoSixtyThree), twoSixtyThree, debug(twoSixtyThree) + ' returns itself'); st.equal(ToBigUint64(twoSixtyFourMinusOne), twoSixtyFourMinusOne, debug(twoSixtyFourMinusOne) + ' returns itself'); st.equal(ToBigUint64(-twoSixtyThree), twoSixtyThree, debug(-twoSixtyThree) + ' returns ' + debug(twoSixtyThree)); st.equal( ToBigUint64(twoSixtyFour), BigInt(0), debug(twoSixtyFour) + ' returns 0n' ); st.equal( ToBigUint64(negTwoSixtyThreeMinusOne), twoSixtyFour - twoSixtyThree - BigInt(1), debug(negTwoSixtyThreeMinusOne) + ' returns ' + debug(twoSixtyFour - twoSixtyThree - BigInt(1)) ); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToBoolean.js000066400000000000000000000022441516525472400226060ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToBoolean) { t.ok(year >= 5, 'ES5+'); t.equal(false, ToBoolean(undefined), 'undefined coerces to false'); t.equal(false, ToBoolean(null), 'null coerces to false'); t.equal(false, ToBoolean(false), 'false returns false'); t.equal(true, ToBoolean(true), 'true returns true'); t.test('numbers', function (st) { forEach(v.zeroes.concat(NaN), function (falsyNumber) { st.equal(false, ToBoolean(falsyNumber), 'falsy number ' + falsyNumber + ' coerces to false'); }); forEach([].concat( v.infinities, 42, 1 ), function (truthyNumber) { st.equal(true, ToBoolean(truthyNumber), 'truthy number ' + truthyNumber + ' coerces to true'); }); st.end(); }); t.equal(false, ToBoolean(''), 'empty string coerces to false'); t.equal(true, ToBoolean('foo'), 'nonempty string coerces to true'); t.test('objects', function (st) { forEach(v.objects, function (obj) { st.equal(true, ToBoolean(obj), 'object coerces to true'); }); st.equal(true, ToBoolean(v.uncoercibleObject), 'uncoercibleObject coerces to true'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToDateString.js000066400000000000000000000012501516525472400232670ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ToDateString) { t.ok(year >= 2015, 'ES2015+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { ToDateString(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); t.equal(ToDateString(NaN), 'Invalid Date', 'NaN becomes "Invalid Date"'); var now = +new Date(); t.equal(ToDateString(now), String(new Date(now)), 'any timestamp becomes `Date(timestamp)`'); t.equal(ToDateString(1e10), String(new Date(1e10)), 'any timestamp becomes `Date(timestamp)`'); }; ljharb-es-abstract-babee05/test/methods/ToIndex.js000066400000000000000000000012271516525472400222760ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); module.exports = function (t, year, ToIndex) { t.ok(year >= 2017, 'ES2017+'); t.equal(ToIndex(), 0, 'no value gives +0'); t.equal(ToIndex(undefined), 0, 'undefined value gives +0'); t.equal(ToIndex(-0), 0, '-0 gives +0'); t['throws'](function () { ToIndex(-1); }, RangeError, 'negative numbers throw'); t['throws'](function () { ToIndex(MAX_SAFE_INTEGER + 1); }, RangeError, 'too large numbers throw'); t.equal(ToIndex(3), 3, 'numbers work'); t.equal(ToIndex(v.valueOfOnlyObject), 4, 'coercible objects are coerced'); }; ljharb-es-abstract-babee05/test/methods/ToInt16.js000066400000000000000000000014771516525472400221370ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToInt16) { t.ok(year >= 2015, 'ES2015+'); t.equal(0, ToInt16(NaN), 'NaN coerces to +0'); forEach([0, Infinity], function (num) { t.equal(0, ToInt16(num), num + ' returns +0'); t.equal(0, ToInt16(-num), '-' + num + ' returns +0'); }); t['throws']( function () { return ToInt16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToInt16(0x100000000), 0, '2^32 returns +0'); t.equal(ToInt16(0x100000000 - 1), -1, '2^32 - 1 returns -1'); t.equal(ToInt16(0x80000000), 0, '2^31 returns +0'); t.equal(ToInt16(0x80000000 - 1), -1, '2^31 - 1 returns -1'); t.equal(ToInt16(0x10000), 0, '2^16 returns +0'); t.equal(ToInt16(0x10000 - 1), -1, '2^16 - 1 returns -1'); }; ljharb-es-abstract-babee05/test/methods/ToInt32.js000066400000000000000000000022151516525472400221240ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToInt32, extras) { t.ok(year >= 5, 'ES5+'); t.equal(ToInt32(NaN), 0, 'NaN coerces to +0'); forEach([].concat( v.zeroes, v.infinities ), function (num) { t.equal(ToInt32(num), 0, num + ' returns +0'); t.equal(ToInt32(-num), 0, '-' + num + ' returns +0'); }); t['throws']( function () { return ToInt32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToInt32(0x100000000), 0, '2^32 returns +0'); t.equal(ToInt32(0x100000000 - 1), -1, '2^32 - 1 returns -1'); t.equal(ToInt32(0x80000000), -0x80000000, '2^31 returns -2^31'); t.equal(ToInt32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1'); var ToUint32 = extras.getAO('ToUint32'); forEach([ 0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42 ], function (num) { t.equal(ToInt32(num), ToInt32(ToUint32(num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for 0x' + num.toString(16)); t.equal(ToInt32(-num), ToInt32(ToUint32(-num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for -0x' + num.toString(16)); }); }; ljharb-es-abstract-babee05/test/methods/ToInt8.js000066400000000000000000000017121516525472400220500ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToInt8) { t.ok(year >= 2015, 'ES2015+'); t.equal(0, ToInt8(NaN), 'NaN coerces to +0'); forEach([0, Infinity], function (num) { t.equal(0, ToInt8(num), num + ' returns +0'); t.equal(0, ToInt8(-num), '-' + num + ' returns +0'); }); t['throws']( function () { return ToInt8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToInt8(0x100000000), 0, '2^32 returns +0'); t.equal(ToInt8(0x100000000 - 1), -1, '2^32 - 1 returns -1'); t.equal(ToInt8(0x80000000), 0, '2^31 returns +0'); t.equal(ToInt8(0x80000000 - 1), -1, '2^31 - 1 returns -1'); t.equal(ToInt8(0x10000), 0, '2^16 returns +0'); t.equal(ToInt8(0x10000 - 1), -1, '2^16 - 1 returns -1'); t.equal(ToInt8(0x100), 0, '2^8 returns +0'); t.equal(ToInt8(0x100 - 1), -1, '2^8 - 1 returns -1'); t.equal(ToInt8(0x10), 0x10, '2^4 returns 2^4'); }; ljharb-es-abstract-babee05/test/methods/ToInteger.js000066400000000000000000000015561516525472400226310ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToInteger) { t.ok(year >= 5 && year <= 2020, 'ES5 - ES2020'); forEach([].concat( NaN, year >= 2020 ? [0, -0] : [] ), function (num) { t.equal(0, ToInteger(num), debug(num) + ' returns +0'); }); forEach([].concat( year < 2020 ? v.zeroes : [], Infinity, 42 ), function (num) { t.equal(num, ToInteger(num), debug(num) + ' returns itself'); t.equal(-num, ToInteger(-num), '-' + debug(num) + ' returns itself'); }); t.equal(3, ToInteger(Math.PI), 'pi returns 3'); t['throws']( function () { return ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal( ToInteger(-0.1), year >= 2020 ? +0 : -0, '-0.1 truncates to +0 in ES2020+, -0 prior' ); }; ljharb-es-abstract-babee05/test/methods/ToIntegerOrInfinity.js000066400000000000000000000014431516525472400246370ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ToIntegerOrInfinity) { t.ok(year >= 2021, 'ES2021+'); forEach([0, -0, NaN], function (num) { t.equal(ToIntegerOrInfinity(num), +0, debug(num) + ' returns +0'); }); forEach([Infinity, 42], function (num) { t.equal(ToIntegerOrInfinity(num), num, debug(num) + ' returns itself'); t.equal(ToIntegerOrInfinity(-num), -num, '-' + debug(num) + ' returns itself'); }); t.equal(ToIntegerOrInfinity(Math.PI), 3, 'pi returns 3'); t.equal(ToIntegerOrInfinity(-0.1), +0, '-0.1 truncates to +0, not -0'); t['throws']( function () { return ToIntegerOrInfinity(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); }; ljharb-es-abstract-babee05/test/methods/ToLength.js000066400000000000000000000015401516525472400224460ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); module.exports = function (t, year, ToLength) { t.ok(year >= 2015, 'ES2015+'); t['throws']( function () { return ToLength(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError' ); t.equal(3, ToLength(v.coercibleObject), 'coercibleObject coerces to 3'); t.equal(42, ToLength('42.5'), '"42.5" coerces to 42'); t.equal(7, ToLength(7.3), '7.3 coerces to 7'); forEach([-0, -1, -42, -Infinity], function (negative) { t.equal(0, ToLength(negative), negative + ' coerces to +0'); }); t.equal(MAX_SAFE_INTEGER, ToLength(MAX_SAFE_INTEGER + 1), '2^53 coerces to 2^53 - 1'); t.equal(MAX_SAFE_INTEGER, ToLength(MAX_SAFE_INTEGER + 3), '2^53 + 2 coerces to 2^53 - 1'); }; ljharb-es-abstract-babee05/test/methods/ToNumber.js000066400000000000000000000101411516525472400224520ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); var testStringToNumber = require('./StringToNumber'); module.exports = function (t, year, ToNumber, extras) { t.ok(year >= 5, 'ES5+'); var ToPrimitive = extras.getAO('ToPrimitive'); t.equal(NaN, ToNumber(undefined), 'undefined coerces to NaN'); t.equal(ToNumber(null), 0, 'null coerces to +0'); t.equal(ToNumber(false), 0, 'false coerces to +0'); t.equal(1, ToNumber(true), 'true coerces to 1'); t.test('numbers', function (st) { st.equal(NaN, ToNumber(NaN), 'NaN returns itself'); forEach([].concat( v.zeroes, v.infinities, 42 ), function (num) { st.equal(num, ToNumber(num), num + ' returns itself'); }); forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) { st.equal(+numString, ToNumber(numString), '"' + numString + '" coerces to ' + Number(numString)); }); st.end(); }); t.test('objects', function (st) { forEach(v.objects, function (object) { st.equal(ToNumber(object), ToNumber(ToPrimitive(object)), 'object ' + object + ' coerces to same as ToPrimitive of object does'); }); st['throws']( function () { return ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); st.end(); }); t.test('signed hex numbers', function (st) { st.equal(ToNumber('-0xF'), NaN, '-0xF is NaN'); st.equal(ToNumber(' -0xF '), NaN, 'space-padded -0xF is NaN'); st.equal(ToNumber('+0xF'), NaN, '+0xF is NaN'); st.equal(ToNumber(' +0xF '), NaN, 'space-padded +0xF is NaN'); st.end(); }); t.test('dates', function (st) { var invalid = new Date(NaN); st.equal(ToNumber(invalid), NaN, 'invalid Date coerces to NaN'); var now = +new Date(); st.equal(ToNumber(new Date(now)), now, 'Date coerces to timestamp'); st.end(); }); t.equal(NaN, ToNumber(undefined), 'undefined coerces to NaN'); t.equal(ToNumber(null), 0, 'null coerces to +0'); t.equal(ToNumber(false), 0, 'false coerces to +0'); t.equal(1, ToNumber(true), 'true coerces to 1'); t.test('binary literals', function (st) { var expected0b10 = year < 2015 ? NaN : 2; st.equal(ToNumber('0b10'), expected0b10, '0b10 is ' + expected0b10); var expected0b11 = year < 2015 ? NaN : 3; st.equal(ToNumber({ toString: function () { return '0b11'; } }), expected0b11, 'Object that toStrings to 0b11 is ' + expected0b11); st.equal(ToNumber('0b12'), NaN, '0b12 is NaN'); st.equal(ToNumber({ toString: function () { return '0b112'; } }), NaN, 'Object that toStrings to 0b112 is NaN'); st.end(); }); t.test('octal literals', function (st) { var expected0o10 = year < 2015 ? NaN : 8; st.equal(ToNumber('0o10'), expected0o10, '0o10 is ' + expected0o10); var expected0o11 = year < 2015 ? NaN : 9; st.equal(ToNumber({ toString: function () { return '0o11'; } }), expected0o11, 'Object that toStrings to 0o11 is ' + expected0o11); st.equal(ToNumber('0o18'), NaN, '0o18 is NaN'); st.equal(ToNumber({ toString: function () { return '0o118'; } }), NaN, 'Object that toStrings to 0o118 is NaN'); st.end(); }); testStringToNumber(t, year, function (x) { if (typeof x !== 'string') { throw new TypeError('covering the throw behavior of StringToNumber'); } return ToNumber(x); }); if (year >= 2015) { forEach(v.symbols, function (symbol) { t['throws']( function () { ToNumber(symbol); }, TypeError, 'Symbols can’t be converted to a Number: ' + debug(symbol) ); var boxed = Object(symbol); t['throws']( function () { ToNumber(boxed); }, TypeError, 'boxed Symbols can’t be converted to a Number: ' + debug(boxed) ); }); } if (year >= 2020) { t.test('bigints', { skip: !esV.hasBigInts }, function (st) { forEach(v.bigints, function (bigInt) { st['throws']( function () { ToNumber(bigInt); }, TypeError, 'ToNumber of ' + debug(bigInt) + ' throws' ); var boxed = Object(bigInt); st['throws']( function () { ToNumber(boxed); }, TypeError, 'ToNumber of ' + debug(boxed) + ' throws' ); }); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/ToNumeric.js000066400000000000000000000021151516525472400226260ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var isBigInt = require('is-bigint'); var esV = require('../helpers/v'); var testToNumber = require('./ToNumber'); module.exports = function (t, year, ToNumeric, extras) { t.ok(year >= 2020, 'ES2020+'); testToNumber( t, year, function (x) { if (isBigInt(x)) { throw new TypeError('replicate ToNumber bigint throwing'); } return ToNumeric(x); }, extras ); t.test('BigInts', { skip: !esV.hasBigInts }, function (st) { st.equal(ToNumeric(BigInt(42)), BigInt(42), debug(BigInt(42)) + ' is ' + debug(BigInt(42))); st.equal(ToNumeric(Object(BigInt(42))), BigInt(42), debug(Object(BigInt(42))) + ' is ' + debug(BigInt(42))); var valueOf = { valueOf: function () { return BigInt(7); } }; st.equal(ToNumeric(valueOf), valueOf.valueOf(), debug(valueOf) + ' is ' + debug(valueOf.valueOf())); var toPrimitive = {}; var value = BigInt(-2); toPrimitive[Symbol.toPrimitive] = function () { return value; }; st.equal(ToNumeric(toPrimitive), value, debug(toPrimitive) + ' is ' + debug(value)); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToObject.js000066400000000000000000000012211516525472400224270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToObject) { t.ok(year >= 5, 'ES5+'); t['throws'](function () { return ToObject(undefined); }, TypeError, 'undefined throws'); t['throws'](function () { return ToObject(null); }, TypeError, 'null throws'); forEach(v.numbers, function (number) { var obj = ToObject(number); t.equal(typeof obj, 'object', 'number ' + number + ' coerces to object'); t.equal(true, obj instanceof Number, 'object of ' + number + ' is Number object'); t.equal(obj.valueOf(), number, 'object of ' + number + ' coerces to ' + number); }); }; ljharb-es-abstract-babee05/test/methods/ToPrimitive.js000066400000000000000000000036731516525472400232060ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToPrimitive) { t.ok(year >= 5, 'ES5+'); t.test('primitives', function (st) { forEach(v.primitives, function (primitive) { st.equal(ToPrimitive(primitive), primitive, debug(primitive) + ' is returned correctly'); }); st.end(); }); t.test('objects', function (st) { st.equal(ToPrimitive(v.coercibleObject), 3, 'coercibleObject with no hint coerces to valueOf'); st.equal(ToPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString'); st.equal(ToPrimitive(v.coercibleObject, Number), 3, 'coercibleObject with hint Number coerces to valueOf'); st.equal(ToPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to NaN'); st.equal(ToPrimitive(v.coercibleObject, String), 42, 'coercibleObject with hint String coerces to nonstringified toString'); st.equal(ToPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString'); st.equal(ToPrimitive(v.coercibleFnObject), v.coercibleFnObject.toString(), 'coercibleFnObject coerces to toString'); st.equal(ToPrimitive(v.toStringOnlyObject), 7, 'toStringOnlyObject returns non-stringified toString'); st.equal(ToPrimitive(v.valueOfOnlyObject), 4, 'valueOfOnlyObject returns valueOf'); st['throws'](function () { return ToPrimitive(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError'); st['throws'](function () { return ToPrimitive(v.uncoercibleFnObject); }, TypeError, 'uncoercibleFnObject throws a TypeError'); st.end(); }); t.test('dates', function (st) { var invalid = new Date(NaN); st.equal(ToPrimitive(invalid), Date.prototype.toString.call(invalid), 'invalid Date coerces to Date#toString'); var now = new Date(); st.equal(ToPrimitive(now), Date.prototype.toString.call(now), 'Date coerces to Date#toString'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ToPropertyDescriptor.js000066400000000000000000000044131516525472400251120ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToPropertyDescriptor) { t.ok(year >= 5, 'ES5+'); forEach(v.nonUndefinedPrimitives, function (primitive) { t['throws']( function () { ToPropertyDescriptor(primitive); }, TypeError, debug(primitive) + ' is not an Object' ); }); var accessor = v.accessorDescriptor(); t.deepEqual(ToPropertyDescriptor({ get: accessor['[[Get]]'], enumerable: !!accessor['[[Enumerable]]'], configurable: !!accessor['[[Configurable]]'] }), accessor); var mutator = v.mutatorDescriptor(); t.deepEqual(ToPropertyDescriptor({ set: mutator['[[Set]]'], enumerable: !!mutator['[[Enumerable]]'], configurable: !!mutator['[[Configurable]]'] }), mutator); var data = v.descriptors.nonConfigurable(v.dataDescriptor()); t.deepEqual(ToPropertyDescriptor({ value: data['[[Value]]'], writable: data['[[Writable]]'], configurable: !!data['[[Configurable]]'] }), data); var both = v.bothDescriptor(); t['throws']( function () { ToPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] }); }, TypeError, 'data and accessor descriptors are mutually exclusive' ); t['throws']( function () { ToPropertyDescriptor({ get: 'not callable' }); }, TypeError, '"get" must be undefined or callable' ); t['throws']( function () { ToPropertyDescriptor({ set: 'not callable' }); }, TypeError, '"set" must be undefined or callable' ); forEach(v.nonFunctions, function (nonFunction) { if (typeof nonFunction !== 'undefined') { t['throws']( function () { ToPropertyDescriptor({ get: nonFunction }); }, TypeError, '`.get` has ' + debug(nonFunction) + ', which is not a Function' ); t['throws']( function () { ToPropertyDescriptor({ set: nonFunction }); }, TypeError, '`.set` has ' + debug(nonFunction) + ', which is not a Function' ); } }); forEach(['get', 'set'], function (accessorName) { forEach(['value', 'writable'], function (dataName) { var o = {}; o[accessorName] = undefined; o[dataName] = undefined; t['throws']( function () { ToPropertyDescriptor(o); }, TypeError, accessorName + ' + ' + dataName + ' is invalid' ); }); }); }; ljharb-es-abstract-babee05/test/methods/ToPropertyKey.js000066400000000000000000000012761516525472400235300ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, ToPropertyKey) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.allButSyms, function (value) { t.equal(ToPropertyKey(value), String(value), 'ToPropertyKey(value) === String(value) for non-Symbols'); }); forEach(v.symbols, function (symbol) { t.equal( ToPropertyKey(symbol), symbol, 'ToPropertyKey(' + debug(symbol) + ') === ' + debug(symbol) ); t.equal( ToPropertyKey(Object(symbol)), symbol, 'ToPropertyKey(' + debug(Object(symbol)) + ') === ' + debug(symbol) ); }); }; ljharb-es-abstract-babee05/test/methods/ToString.js000066400000000000000000000012731516525472400224760ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, ToString) { t.ok(year >= 5, 'ES5+'); forEach(esV.allButSyms, function (item) { t.equal(ToString(item), String(item), 'ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')'); }); t['throws'](function () { return ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws'); if (year >= 2015) { forEach(v.symbols, function (symbol) { t['throws']( function () { return ToString(symbol); }, TypeError, debug(symbol) + ' throws' ); }); } }; ljharb-es-abstract-babee05/test/methods/ToUint16.js000066400000000000000000000015611516525472400223160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToUint16) { t.ok(year >= 5, 'ES5+'); t.equal(0, ToUint16(NaN), 'NaN coerces to +0'); forEach([0, Infinity], function (num) { t.equal(0, ToUint16(num), num + ' returns +0'); t.equal(0, ToUint16(-num), '-' + num + ' returns +0'); }); t['throws']( function () { return ToUint16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToUint16(0x100000000), 0, '2^32 returns +0'); t.equal(ToUint16(0x100000000 - 1), 0x10000 - 1, '2^32 - 1 returns 2^16 - 1'); t.equal(ToUint16(0x80000000), 0, '2^31 returns +0'); t.equal(ToUint16(0x80000000 - 1), 0x10000 - 1, '2^31 - 1 returns 2^16 - 1'); t.equal(ToUint16(0x10000), 0, '2^16 returns +0'); t.equal(ToUint16(0x10000 - 1), 0x10000 - 1, '2^16 - 1 returns 2^16 - 1'); }; ljharb-es-abstract-babee05/test/methods/ToUint32.js000066400000000000000000000022161516525472400223120ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToUint32, extras) { t.ok(year >= 5, 'ES5+'); t.equal(0, ToUint32(NaN), 'NaN coerces to +0'); forEach([0, Infinity], function (num) { t.equal(0, ToUint32(num), num + ' returns +0'); t.equal(0, ToUint32(-num), '-' + num + ' returns +0'); }); t['throws']( function () { return ToUint32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToUint32(0x100000000), 0, '2^32 returns +0'); t.equal(ToUint32(0x100000000 - 1), 0x100000000 - 1, '2^32 - 1 returns 2^32 - 1'); t.equal(ToUint32(0x80000000), 0x80000000, '2^31 returns 2^31'); t.equal(ToUint32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1'); var ToInt32 = extras.getAO('ToInt32'); forEach([ 0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42 ], function (num) { t.equal(ToUint32(num), ToUint32(ToInt32(num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for 0x' + num.toString(16)); t.equal(ToUint32(-num), ToUint32(ToInt32(-num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for -0x' + num.toString(16)); }); }; ljharb-es-abstract-babee05/test/methods/ToUint8.js000066400000000000000000000021131516525472400222310ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToUint8) { t.ok(year >= 2015, 'ES2015+'); t.equal(0, ToUint8(NaN), 'NaN coerces to +0'); forEach([0, Infinity], function (num) { t.equal(0, ToUint8(num), num + ' returns +0'); t.equal(0, ToUint8(-num), '-' + num + ' returns +0'); }); t['throws']( function () { return ToUint8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); t.equal(ToUint8(0x100000000), 0, '2^32 returns +0'); t.equal(ToUint8(0x100000000 - 1), 0x100 - 1, '2^32 - 1 returns 2^8 - 1'); t.equal(ToUint8(0x80000000), 0, '2^31 returns +0'); t.equal(ToUint8(0x80000000 - 1), 0x100 - 1, '2^31 - 1 returns 2^8 - 1'); t.equal(ToUint8(0x10000), 0, '2^16 returns +0'); t.equal(ToUint8(0x10000 - 1), 0x100 - 1, '2^16 - 1 returns 2^8 - 1'); t.equal(ToUint8(0x100), 0, '2^8 returns +0'); t.equal(ToUint8(0x100 - 1), 0x100 - 1, '2^8 - 1 returns 2^16 - 1'); t.equal(ToUint8(0x10), 0x10, '2^4 returns 2^4'); t.equal(ToUint8(0x10 - 1), 0x10 - 1, '2^4 - 1 returns 2^4 - 1'); }; ljharb-es-abstract-babee05/test/methods/ToUint8Clamp.js000066400000000000000000000020411516525472400232060ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); module.exports = function (t, year, ToUint8Clamp) { t.ok(year >= 2015, 'ES2015+'); t.equal(0, ToUint8Clamp(NaN), 'NaN coerces to +0'); t.equal(0, ToUint8Clamp(0), '+0 returns +0'); t.equal(0, ToUint8Clamp(-0), '-0 returns +0'); t.equal(0, ToUint8Clamp(-Infinity), '-Infinity returns +0'); t['throws']( function () { return ToUint8Clamp(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws' ); forEach([255, 256, 0x100000, Infinity], function (number) { t.equal(255, ToUint8Clamp(number), number + ' coerces to 255'); }); t.equal(1, ToUint8Clamp(1.49), '1.49 coerces to 1'); t.equal(2, ToUint8Clamp(1.5), '1.5 coerces to 2, because 2 is even'); t.equal(2, ToUint8Clamp(1.51), '1.51 coerces to 2'); t.equal(2, ToUint8Clamp(2.49), '2.49 coerces to 2'); t.equal(2, ToUint8Clamp(2.5), '2.5 coerces to 2, because 2 is even'); t.equal(3, ToUint8Clamp(2.51), '2.51 coerces to 3'); t.equal(ToUint8Clamp(0.75), 1, '0.75 coerces to 1'); }; ljharb-es-abstract-babee05/test/methods/ToZeroPaddedDecimalString.js000066400000000000000000000011601516525472400257120ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, ToZeroPaddedDecimalString) { t.ok(year >= 2022, 'ES2022+'); forEach(v.notNonNegativeIntegers, function (notNonNegativeInteger) { t['throws']( function () { ToZeroPaddedDecimalString(notNonNegativeInteger); }, RangeError, debug(notNonNegativeInteger) + ' is not a non-negative integer' ); }); t.equal(ToZeroPaddedDecimalString(1, 1), '1'); t.equal(ToZeroPaddedDecimalString(1, 2), '01'); t.equal(ToZeroPaddedDecimalString(1, 3), '001'); }; ljharb-es-abstract-babee05/test/methods/TrimString.js000066400000000000000000000015341516525472400230270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, TrimString) { t.ok(year >= 2019, 'ES2019+'); t.test('non-object string', function (st) { forEach(v.nullPrimitives, function (nullish) { st['throws']( function () { TrimString(nullish); }, debug(nullish) + ' is not an Object' ); }); st.end(); }); t['throws']( function () { TrimString('abc', 'not start, end, or start+end'); }, TypeError, 'invalid `where` value' ); var string = ' \n abc \n '; t.equal(TrimString(string, 'start'), string.slice(string.indexOf('a'))); t.equal(TrimString(string, 'end'), string.slice(0, string.lastIndexOf('c') + 1)); t.equal(TrimString(string, 'start+end'), string.slice(string.indexOf('a'), string.lastIndexOf('c') + 1)); }; ljharb-es-abstract-babee05/test/methods/Type.js000066400000000000000000000016051516525472400216450ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, Type) { t.ok(year >= 5, 'ES5+'); t.equal(Type(), 'Undefined', 'Type() is Undefined'); t.equal(Type(undefined), 'Undefined', 'Type(undefined) is Undefined'); t.equal(Type(null), 'Null', 'Type(null) is Null'); t.equal(Type(true), 'Boolean', 'Type(true) is Boolean'); t.equal(Type(false), 'Boolean', 'Type(false) is Boolean'); t.equal(Type(0), 'Number', 'Type(0) is Number'); t.equal(Type(NaN), 'Number', 'Type(NaN) is Number'); t.equal(Type('abc'), 'String', 'Type("abc") is String'); t.equal(Type(function () {}), 'Object', 'Type(function () {}) is Object'); t.equal(Type({}), 'Object', 'Type({}) is Object'); if (year >= 2015) { t.test('symbols', { skip: !v.hasSymbols }, function (st) { st.equal(Type(Symbol.iterator), 'Symbol', 'Type(Symbol.iterator) is Symbol'); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/TypedArrayByteLength.js000066400000000000000000000051721516525472400250010ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayByteLength, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var MakeTypedArrayWithBufferWitnessRecord = extras.getAO('MakeTypedArrayWithBufferWitnessRecord'); forEach([].concat( esV.unknowns, [[]] ), function (nonTAWBWR) { t['throws']( function () { TypedArrayByteLength(nonTAWBWR); }, TypeError, debug(nonTAWBWR) + ' is not a Typed Array With Buffer Witness Record' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { st.test('Typed Array: ' + TypedArray, function (tat) { var TA = global[TypedArray]; var ta = new TA(8); var record = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); var elementSize = esV.elementSizes['$' + TypedArray]; tat.equal(TypedArrayByteLength(record), 8 * elementSize, 'fixed length array, returns byteLength'); var zta = new TA(0); var zRecord = MakeTypedArrayWithBufferWitnessRecord(zta, 'UNORDERED'); tat.equal(TypedArrayByteLength(zRecord), 0, 'fixed zero length array, returns zero'); tat.test('can detach', { skip: !esV.canDetach }, function (s2t) { DetachArrayBuffer(ta.buffer); record = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); s2t.equal(TypedArrayByteLength(record), 0, 'detached returns zero'); s2t.end(); }); // TODO: actual TA byteLength auto, but not fixed length? (may not be possible) tat.test('non-fixed length, return length * elementSize', { skip: !('resizable' in ArrayBuffer.prototype) }, function (tast) { var ab = new ArrayBuffer(8, { maxByteLength: 64 }); var rta = new Uint8Array(ab); tast.equal( TypedArrayByteLength(MakeTypedArrayWithBufferWitnessRecord(rta, 'UNORDERED')), 8, 'resizable ArrayBuffer’s Typed Array has expected byteLength' ); tast.end(); }); tat.test('non-fixed length, detached returns zero', { skip: !esV.canDetach }, function (tast) { var ab = new ArrayBuffer(8, { maxByteLength: 64 }); var rta = new Uint8Array(ab); DetachArrayBuffer(ab); tast.equal( TypedArrayByteLength(MakeTypedArrayWithBufferWitnessRecord(rta, 'UNORDERED')), 0, 'resizable ArrayBuffer’s detached Typed Array returns zero' ); tast.end(); }); }); }); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayCreateFromConstructor.js000066400000000000000000000056411516525472400272320ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var typedArrayLength = require('typed-array-length'); var v = require('es-value-fixtures'); var whichTypedArray = require('which-typed-array'); var getTypedArrays = require('../helpers/typedArrays'); module.exports = function (t, year, TypedArrayCreateFromConstructor) { t.ok(year >= 2016, 'ES2016+'); forEach(v.nonFunctions, function (nonFunction) { t['throws']( function () { TypedArrayCreateFromConstructor(nonFunction, []); }, TypeError, debug(nonFunction) + ' is not a constructor' ); }); forEach(v.nonArrays, function (nonArray) { t['throws']( function () { TypedArrayCreateFromConstructor(Array, nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); var availableTypedArrays = getTypedArrays(year); t.test('no Typed Array support', { skip: availableTypedArrays.length > 0 }, function (st) { st['throws']( function () { TypedArrayCreateFromConstructor(Array, []); }, SyntaxError, 'no Typed Array support' ); st.end(); }); t.test('Typed Array support', { skip: availableTypedArrays.length === 0 }, function (st) { var expectedLengths = { __proto__: null, $Int8Array: 632, $Uint8Array: 632, $Uint8ClampedArray: 632, $Int16Array: 316, $Uint16Array: 316, $Int32Array: 158, $Uint32Array: 158, $Float16Array: 316, $Float32Array: 158, $Float64Array: 79, $BigInt64Array: 79, $BigUint64Array: 79 }; forEach(availableTypedArrays, function (TypedArray) { var Constructor = global[TypedArray]; var typedArray = TypedArrayCreateFromConstructor(Constructor, []); st.equal(whichTypedArray(typedArray), TypedArray, 'created a ' + TypedArray); st.equal(typedArray.byteOffset, 0, 'byteOffset is 0'); st.equal(typedArrayLength(typedArray), 0, 'created a ' + TypedArray + ' of length 42'); var taLength = TypedArrayCreateFromConstructor(Constructor, [42]); st.equal(whichTypedArray(taLength), TypedArray, 'created a ' + TypedArray); st.equal(taLength.byteOffset, 0, 'byteOffset is 0'); st.equal(typedArrayLength(taLength), 42, 'created a ' + TypedArray + ' of length 42'); var buffer = new ArrayBuffer(640); var taBuffer = TypedArrayCreateFromConstructor(Constructor, [buffer, 8]); st.equal(whichTypedArray(taBuffer), TypedArray, 'created a ' + TypedArray); st.equal(taBuffer.byteOffset, 8, 'byteOffset is 8'); st.equal( typedArrayLength(taBuffer), expectedLengths['$' + TypedArray], 'created a ' + TypedArray + ' of length ' + expectedLengths['$' + TypedArray] ); var taBufferLength = TypedArrayCreateFromConstructor(Constructor, [buffer, 8, 64]); st.equal(whichTypedArray(taBufferLength), TypedArray, 'created a ' + TypedArray); st.equal(taBufferLength.byteOffset, 8, 'byteOffset is 8'); st.equal(typedArrayLength(taBufferLength), 64, 'created a ' + TypedArray + ' of length 64'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayCreateSameType.js000066400000000000000000000040151516525472400256020ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var typedArrayLength = require('typed-array-length'); var v = require('es-value-fixtures'); var whichTypedArray = require('which-typed-array'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayCreateSameType) { t.ok(year >= 2023, 'ES2023+'); var availableTypedArrays = getTypedArrays(year); t.test('no Typed Array support', { skip: availableTypedArrays.length > 0 }, function (st) { forEach(esV.unknowns, function (nonTA) { st['throws']( function () { TypedArrayCreateSameType(nonTA, []); }, SyntaxError, 'no Typed Array support' ); }); forEach(v.nonArrays, function (nonArray) { st['throws']( function () { TypedArrayCreateSameType(Array, nonArray); }, SyntaxError, 'no Typed Array support' ); }); st.end(); }); t.test('Typed Array support', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(esV.unknowns, function (nonTA) { st['throws']( function () { TypedArrayCreateSameType(nonTA, []); }, TypeError, debug(nonTA) + ' is not a Typed Array' ); }); forEach(v.nonArrays, function (nonArray) { st['throws']( function () { TypedArrayCreateSameType(new global[availableTypedArrays[0]](), nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); forEach(availableTypedArrays, function (TypedArray) { var Constructor = global[TypedArray]; var typedArray = TypedArrayCreateSameType(new Constructor(), []); st.equal(whichTypedArray(typedArray), TypedArray, 'created a ' + TypedArray); st.equal(typedArrayLength(typedArray), 0, 'created a ' + TypedArray + ' of length 42'); var taLength = TypedArrayCreateSameType(new Constructor(1), [42]); st.equal(whichTypedArray(taLength), TypedArray, 'created a ' + TypedArray); st.equal(typedArrayLength(taLength), 42, 'created a ' + TypedArray + ' of length 42'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayElementSize.js000066400000000000000000000015431516525472400251560ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayElementSize) { t.ok(year >= 2022, 'ES2022+'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { TypedArrayElementSize(nonTA); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); forEach(getTypedArrays(year), function (TA) { var elementSize = esV.elementSizes['$' + TA]; var ta = new global[TA](0); t.equal( elementSize, ta.BYTES_PER_ELEMENT, 'element size table matches BYTES_PER_ELEMENT property', { skip: !('BYTES_PER_ELEMENT' in ta) } ); t.equal(TypedArrayElementSize(ta), elementSize, debug(TA) + ' (which should be a ' + TA + ') has correct element size'); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayElementType.js000066400000000000000000000014621516525472400251650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayElementType) { t.ok(year >= 2022, 'ES2022+'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { TypedArrayElementType(nonTA); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); forEach(getTypedArrays(year), function (TA) { t.test(TA, function (st) { var ta = new global[TA](0); var expected = TA.replace(/(?:lamped)?Array$/, ''); st.equal( TypedArrayElementType(ta), year >= 2024 ? expected.toUpperCase() : expected, debug(ta) + ' (which should be a ' + TA + ') has correct element type' ); st.end(); }); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayGetElement.js000066400000000000000000000027601516525472400247650ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var safeBigInt = require('safe-bigint'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayGetElement) { t.ok(year >= 2024, 'ES2024+'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { TypedArrayGetElement(nonTA, 0); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { var ta = new Uint8Array(); forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { TypedArrayGetElement(ta, nonNumber); }, TypeError, debug(nonNumber) + ' is not a number' ); }); forEach(availableTypedArrays, function (TypedArray) { var isBigInt = esV.isBigIntTAType(TypedArray); var Z = isBigInt ? safeBigInt : Number; var TA = global[TypedArray]; var arr = new TA([Z(1), Z(2), Z(3)]); st.equal(TypedArrayGetElement(arr, 0), Z(1), TypedArray + ': index 0 is as expected'); st.equal(TypedArrayGetElement(arr, 1), Z(2), TypedArray + ': index 1 is as expected'); st.equal(TypedArrayGetElement(arr, 2), Z(3), TypedArray + ': index 2 is as expected'); st.equal(TypedArrayGetElement(arr, 3), undefined, TypedArray + ': index 3 is undefined as expected'); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TypedArrayLength.js000066400000000000000000000055631516525472400241610ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArrayLength, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); var MakeTypedArrayWithBufferWitnessRecord = extras.getAO('MakeTypedArrayWithBufferWitnessRecord'); forEach([].concat( esV.unknowns, [[]] ), function (nonTAWBWR) { t['throws']( function () { TypedArrayLength(nonTAWBWR); }, TypeError, debug(nonTAWBWR) + ' is not a Typed Array With Buffer Witness Record' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (type) { st.test('Typed Array: ' + type, function (tat) { var TA = global[type]; var ta = new TA(8); var record = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); tat.equal(TypedArrayLength(record), 8, 'fixed length array, returns byteLength'); tat.test('can detach', { skip: !esV.canDetach }, function (s2t) { DetachArrayBuffer(ta.buffer); record = MakeTypedArrayWithBufferWitnessRecord(ta, 'UNORDERED'); s2t['throws']( function () { TypedArrayLength(record); }, TypeError, debug(ta) + ' is a detached TypedArray' ); s2t.end(); }); var elementSize = esV.elementSizes['$' + type]; // TODO: actual TA byteLength auto, but not fixed length? (may not be possible) tat.test( 'non-fixed length, return floor((byteLength - byteOffset) / elementSize)', { skip: !('resizable' in ArrayBuffer.prototype) }, function (tsat) { var rab = new ArrayBuffer(24, { maxByteLength: 64 }); var arr = new TA(rab, 8); record = MakeTypedArrayWithBufferWitnessRecord(arr, 'UNORDERED'); tsat.equal( TypedArrayLength(record), Math.floor((24 - 8) / elementSize), type + ' + resizable AB: has expected length' ); tsat.end(); } ); tat.test( 'non-fixed length, detached throws', { skip: !('resizable' in ArrayBuffer.prototype) || !esV.canDetach }, function (tsat) { var rab = new ArrayBuffer(24, { maxByteLength: 64 }); var arr = new TA(rab, 8); record = MakeTypedArrayWithBufferWitnessRecord(arr, 'UNORDERED'); DetachArrayBuffer(rab); tsat['throws']( function () { TypedArrayLength(record); }, TypeError, 'detached RAB with a non-detached TAWBR throws' ); record = MakeTypedArrayWithBufferWitnessRecord(arr, 'UNORDERED'); tsat['throws']( function () { TypedArrayLength(record); }, TypeError, 'detached RAB with a detached TAWBR throws' ); tsat.end(); } ); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TypedArraySetElement.js000066400000000000000000000034141516525472400247760ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var safeBigInt = require('safe-bigint'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, TypedArraySetElement, extras) { t.ok(year >= 2024, 'ES2024+'); var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach(esV.unknowns, function (nonTA) { t['throws']( function () { TypedArraySetElement(nonTA, 0, 0); }, TypeError, debug(nonTA) + ' is not a Typed Array' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (typedArray) { var isBigInt = esV.isBigIntTAType(typedArray); var Z = isBigInt ? safeBigInt : Number; var TA = global[typedArray]; var ta = new TA(16); forEach(v.nonNumbers, function (nonNumber) { st['throws']( function () { TypedArraySetElement(ta, nonNumber, 0); }, TypeError, 'index: ' + debug(nonNumber) + ' is not a Number' ); }); st.equal(ta[0], Z(0), 'is initially zero'); TypedArraySetElement(ta, 0, Z(42)); st.equal(ta[0], Z(42), 'is set as expected'); st['throws']( function () { TypedArraySetElement(ta, 0, v.uncoercibleObject); }, TypeError, 'non-number/bigint-coercible value ' + debug(v.uncoercibleObject) + ' throws' ); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { DetachArrayBuffer(ta.buffer); s2t.equal(ta[0], undefined, 'is initially undefined'); TypedArraySetElement(ta, 0, Z(7)); s2t.equal(ta[0], undefined, 'is not set, as expected'); s2t.end(); }); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/TypedArraySpeciesCreate.js000066400000000000000000000063601516525472400254530ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var typedArrayLength = require('typed-array-length'); var v = require('es-value-fixtures'); var whichTypedArray = require('which-typed-array'); var defineProperty = require('../helpers/defineProperty'); var esV = require('../helpers/v'); var getTypedArrays = require('../helpers/typedArrays'); var hasSpecies = v.hasSymbols && Symbol.species; module.exports = function (t, year, TypedArraySpeciesCreate) { t.ok(year >= 2016, 'ES2016+'); var availableTypedArrays = getTypedArrays(year); t.test('no Typed Array support', { skip: availableTypedArrays.length > 0 }, function (st) { forEach(esV.unknowns, function (nonTA) { st['throws']( function () { TypedArraySpeciesCreate(nonTA, []); }, SyntaxError, 'no Typed Array support' ); }); forEach(v.nonArrays, function (nonArray) { st['throws']( function () { TypedArraySpeciesCreate(Array, nonArray); }, SyntaxError, 'no Typed Array support' ); }); st.end(); }); t.test('Typed Array support', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(esV.unknowns, function (nonTA) { st['throws']( function () { TypedArraySpeciesCreate(nonTA, []); }, TypeError, debug(nonTA) + ' is not a Typed Array' ); }); var nonArrayTA = new global[availableTypedArrays[0]](); forEach([].concat( v.primitives, v.nonArrays ), function (nonArray) { st['throws']( function () { TypedArraySpeciesCreate(nonArrayTA, nonArray); }, TypeError, debug(nonArray) + ' is not an Array' ); }); forEach(availableTypedArrays, function (TypedArray) { var Constructor = global[TypedArray]; var typedArray = TypedArraySpeciesCreate(new Constructor(), []); st.equal(whichTypedArray(typedArray), TypedArray, 'created a ' + TypedArray); st.equal(typedArrayLength(typedArray), 0, 'created a ' + TypedArray + ' of length 42'); var taLength = TypedArraySpeciesCreate(new Constructor(7), [42]); st.equal(whichTypedArray(taLength), TypedArray, 'created a ' + TypedArray); st.equal(typedArrayLength(taLength), 42, 'created a ' + TypedArray + ' of length 42'); }); st.test('with Symbol.species', { skip: !hasSpecies }, function (s2t) { forEach(availableTypedArrays, function (TypedArray) { var Constructor = global[TypedArray]; var Bar = function Bar() {}; Bar[Symbol.species] = null; var taBar = new Constructor(); defineProperty(taBar, 'constructor', { value: Bar }); s2t.equal( whichTypedArray(TypedArraySpeciesCreate(taBar, [])), TypedArray, TypedArray + ': undefined/null Symbol.species creates with the default constructor' ); var Baz = function Baz() {}; Baz[Symbol.species] = Bar; var taBaz = new Constructor(); defineProperty(taBaz, 'constructor', { value: Baz }); s2t['throws']( function () { TypedArraySpeciesCreate(taBaz, []); }, TypeError, TypedArray + ': non-TA Symbol.species throws' ); Baz[Symbol.species] = {}; s2t['throws']( function () { TypedArraySpeciesCreate(new Baz(), []); }, TypeError, TypedArray + ': throws when non-constructor non-null non-undefined species value found' ); }); s2t.end(); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/UTF16DecodeString.js000066400000000000000000000011671516525472400240270ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, UTF16DecodeString) { t.ok(year >= 2020, 'ES2020+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { UTF16DecodeString(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); t.deepEqual(UTF16DecodeString('abc'), ['a', 'b', 'c'], 'code units get split'); t.deepEqual(UTF16DecodeString('a' + esV.poo.whole + 'c'), ['a', esV.poo.whole, 'c'], 'code points get split too'); }; ljharb-es-abstract-babee05/test/methods/UTF16EncodeCodePoint.js000066400000000000000000000020101516525472400244430ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, UTF16EncodeCodePoint) { t.ok(year >= 2016, 'ES2016+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { UTF16EncodeCodePoint(nonNumber); }, TypeError, debug(nonNumber) + ' is not a Number' ); }); t['throws']( function () { UTF16EncodeCodePoint(-1); }, TypeError, '-1 is < 0' ); t['throws']( function () { UTF16EncodeCodePoint(0x10FFFF + 1); }, TypeError, '0x10FFFF + 1 is > 0x10FFFF' ); t.equal(UTF16EncodeCodePoint(0xD83D), esV.poo.leading, '0xD83D is the first half of ' + esV.poo.whole); t.equal(UTF16EncodeCodePoint(0xDCA9), esV.poo.trailing, '0xDCA9 is the last half of ' + esV.poo.whole); t.equal(UTF16EncodeCodePoint(0x1F4A9), esV.poo.whole, '0xDCA9 is the last half of ' + esV.poo.whole); t.equal(UTF16EncodeCodePoint(0x10000), '𐀀', '0x10000 is "𐀀"'); }; ljharb-es-abstract-babee05/test/methods/UTF16SurrogatePairToCodePoint.js000066400000000000000000000011421516525472400263450ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, UTF16SurrogatePairToCodePoint) { t.ok(year >= 2016, 'ES2016+'); t['throws']( function () { UTF16SurrogatePairToCodePoint('a'.charCodeAt(0), esV.poo.trailing.charCodeAt(0)); }, TypeError, '"a" is not a leading surrogate' ); t['throws']( function () { UTF16SurrogatePairToCodePoint(esV.poo.leading.charCodeAt(0), 'b'.charCodeAt(0)); }, TypeError, '"b" is not a trailing surrogate' ); t.equal(UTF16SurrogatePairToCodePoint(esV.poo.leading.charCodeAt(0), esV.poo.trailing.charCodeAt(0)), esV.poo.whole); }; ljharb-es-abstract-babee05/test/methods/UnicodeEscape.js000066400000000000000000000015041516525472400234310ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, UnicodeEscape) { t.ok(year >= 2018, 'ES2018+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { UnicodeEscape(nonString); }, TypeError, debug(nonString) + ' is not a String' ); }); t['throws']( function () { UnicodeEscape(''); }, TypeError, 'empty string does not have length 1' ); t['throws']( function () { UnicodeEscape('ab'); }, TypeError, '2-char string does not have length 1' ); t.equal(UnicodeEscape(' '), '\\u0020'); t.equal(UnicodeEscape('a'), '\\u0061'); t.equal(UnicodeEscape(esV.poo.leading), '\\ud83d'); t.equal(UnicodeEscape(esV.poo.trailing), '\\udca9'); }; ljharb-es-abstract-babee05/test/methods/UpdateModifiers.js000066400000000000000000000033271516525472400240130ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, UpdateModifiers) { t.ok(year >= 2025, 'ES2025+'); forEach(esV.unknowns, function (nonRER) { t['throws']( function () { UpdateModifiers(nonRER, '', ''); }, TypeError, debug(nonRER) + ' is not a Regular Expression Record' ); }); var rer = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': true, '[[Unicode]]': false, '[[UnicodeSets]]': false, '[[CapturingGroupsCount]]': 0 }; forEach(v.nonStrings, function (nonString) { t['throws']( function () { UpdateModifiers(rer, nonString, ''); }, TypeError, 'add: ' + debug(nonString) + ' is not a string' ); t['throws']( function () { UpdateModifiers(rer, '', nonString); }, TypeError, 'remove: ' + debug(nonString) + ' is not a string' ); }); t['throws']( function () { UpdateModifiers(rer, 'ai', 'bi'); }, TypeError, 'add and remove have elements in common' ); t.deepEqual( UpdateModifiers(rer, '', ''), rer, 'no changes' ); t.deepEqual( UpdateModifiers(rer, 'mi', 's'), { '[[IgnoreCase]]': true, '[[Multiline]]': true, '[[DotAll]]': false, '[[Unicode]]': false, '[[UnicodeSets]]': false, '[[CapturingGroupsCount]]': 0 }, 'add mi, remove s' ); rer['[[DotAll]]'] = false; rer['[[Multiline]]'] = true; rer['[[IgnoreCase]]'] = true; t.deepEqual( UpdateModifiers(rer, 's', 'mi'), { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': true, '[[Unicode]]': false, '[[UnicodeSets]]': false, '[[CapturingGroupsCount]]': 0 }, 'add s, remove mi' ); }; ljharb-es-abstract-babee05/test/methods/ValidateAndApplyPropertyDescriptor.js000066400000000000000000000306411516525472400277140ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var gOPD = require('gopd'); var defineProperty = require('es-define-property'); var $defineProperty = require('../helpers/defineProperty'); module.exports = function (t, year, ValidateAndApplyPropertyDescriptor, extras) { t.ok(year >= 2015, 'ES2015+'); var CompletePropertyDescriptor = extras.getAO('CompletePropertyDescriptor'); forEach(v.nonUndefinedPrimitives, function (nonUndefinedPrimitive) { t['throws']( function () { ValidateAndApplyPropertyDescriptor(nonUndefinedPrimitive, '', false, v.genericDescriptor(), v.genericDescriptor()); }, TypeError, 'O: ' + debug(nonUndefinedPrimitive) + ' is not undefined or an Object' ); }); forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { return ValidateAndApplyPropertyDescriptor( undefined, '', nonBoolean, v.genericDescriptor(), v.genericDescriptor() ); }, TypeError, 'extensible: ' + debug(nonBoolean) + ' is not a Boolean' ); }); forEach(v.primitives, function (primitive) { // Desc must be a Property Descriptor t['throws']( function () { return ValidateAndApplyPropertyDescriptor( undefined, '', false, primitive, v.genericDescriptor() ); }, TypeError, 'Desc: ' + debug(primitive) + ' is not a Property Descriptor' ); }); forEach(v.nonUndefinedPrimitives, function (primitive) { // current must be undefined or a Property Descriptor t['throws']( function () { return ValidateAndApplyPropertyDescriptor( undefined, '', false, v.genericDescriptor(), primitive ); }, TypeError, 'current: ' + debug(primitive) + ' is not a Property Descriptor or undefined' ); }); forEach(v.nonPropertyKeys, function (nonPropertyKey) { // if O is an object, P must be a property key t['throws']( function () { return ValidateAndApplyPropertyDescriptor( {}, nonPropertyKey, false, v.genericDescriptor(), v.genericDescriptor() ); }, TypeError, 'P: ' + debug(nonPropertyKey) + ' is not a Property Key' ); }); t.test('current is undefined', function (st) { var propertyKey = 'howdy'; st.test('generic descriptor', { skip: !$defineProperty }, function (s2t) { var generic = v.genericDescriptor(); generic['[[Enumerable]]'] = true; var O = {}; ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, generic); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, false, generic), false, 'when extensible is false, nothing happens' ); s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, true, generic), true, 'operation is successful' ); var expected = {}; expected[propertyKey] = generic['[[Value]]']; s2t.deepEqual(O, expected, 'generic descriptor has been defined as an own data property'); s2t.end(); }); st.test('data descriptor', function (s2t) { var data = v.descriptors.enumerable(v.dataDescriptor()); if (!$defineProperty) { // IE 8 can't handle defining a new property with an incomplete descriptor data = v.descriptors.configurable(v.descriptors.writable(data)); } var O = {}; s2t.equal( ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, data), true, 'noop when O is undefined' ); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, false, data), false, 'when extensible is false, nothing happens' ); s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, true, data), true, 'operation is successful' ); var expected = {}; expected[propertyKey] = data['[[Value]]']; s2t.deepEqual(O, expected, 'data descriptor has been defined as an own data property'); s2t.end(); }); st.test('accessor descriptor', { skip: !$defineProperty }, function (s2t) { var count = 0; var accessor = v.accessorDescriptor(); accessor['[[Get]]'] = function () { count += 1; return count; }; var O = {}; ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, accessor); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, false, accessor), false, 'when extensible is false, nothing happens' ); s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false'); s2t.equal( ValidateAndApplyPropertyDescriptor(O, propertyKey, true, accessor), true, 'operation is successful' ); var expected = {}; expected[propertyKey] = accessor['[[Get]]']() + 1; s2t.deepEqual(O, expected, 'accessor descriptor has been defined as an own accessor property'); s2t.end(); }); st.end(); }); t.test('every field in Desc is absent', { skip: 'it is unclear if having no fields qualifies Desc to be a Property Descriptor' }); forEach([v.dataDescriptor, v.accessorDescriptor, v.mutatorDescriptor], function (getDescriptor) { t.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, getDescriptor(), CompletePropertyDescriptor(getDescriptor()) ), true, 'when Desc and current are the same, early return true' ); }); t.test('current is nonconfigurable', function (st) { // note: these must not be generic descriptors, or else the algorithm returns an early true st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.configurable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.dataDescriptor())) ), false, 'false if Desc is configurable' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, {}, CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.dataDescriptor())) ), true, 'true if Desc is generic, and lacks both [[Configurable]] and [[Enumerable]]' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.enumerable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.nonEnumerable(v.dataDescriptor())) ), false, 'false if Desc is Enumerable and current is not' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.nonEnumerable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.enumerable(v.dataDescriptor())) ), false, 'false if Desc is not Enumerable and current is' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.accessorDescriptor(), CompletePropertyDescriptor(v.dataDescriptor()) ), false, 'false if Desc is an accessor descriptor and current is a data descriptor' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.nonConfigurable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.accessorDescriptor())) ), false, 'false if Desc is a data descriptor and current is an accessor descriptor' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.nonConfigurable(v.accessorDescriptor()), v.descriptors.nonConfigurable(v.accessorDescriptor()) ), false, 'false if Desc and current are both accessors with a !== Get function' ); var fakeGetter = function () {}; st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, CompletePropertyDescriptor(v.descriptors.nonConfigurable({ '[[Get]]': fakeGetter, '[[Set]]': function () {} })), CompletePropertyDescriptor(v.descriptors.nonConfigurable({ '[[Get]]': fakeGetter, '[[Set]]': function () {} })) ), false, 'false if Desc and current are both accessors with a !== Get function' ); var descLackingEnumerable = v.descriptors.configurable(v.descriptors.getter()); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, descLackingEnumerable, CompletePropertyDescriptor(v.descriptors.enumerable(v.accessorDescriptor())) ), true, 'not false if Desc lacks Enumerable' ); st.equal( ValidateAndApplyPropertyDescriptor( {}, 'property key', true, v.descriptors.nonConfigurable(), v.descriptors.nonConfigurable(v.descriptors.enumerable(v.accessorDescriptor())) ), true, 'see https://github.com/tc39/ecma262/issues/2761' ); st.end(); }); t.test('Desc and current: one is a data descriptor, one is not', { skip: !defineProperty || !gOPD }, function (st) { // note: Desc must be configurable if current is nonconfigurable, to hit this branch st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.configurable(v.accessorDescriptor()), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.dataDescriptor())) ), false, 'false if current (data) is nonconfigurable' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.configurable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.accessorDescriptor())) ), false, 'false if current (not data) is nonconfigurable' ); // one is data and one is not, // // if current is data, convert to accessor // // else convert to data var startsWithData = { 'property key': 42 }; st.equal( ValidateAndApplyPropertyDescriptor( startsWithData, 'property key', true, v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor())), CompletePropertyDescriptor(v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor()))) ), true, 'operation is successful: current is data, Desc is accessor' ); var shouldBeAccessor = gOPD(startsWithData, 'property key'); st.equal(typeof shouldBeAccessor.get, 'function', 'has a getter'); var key = 'property key'; var startsWithAccessor = {}; defineProperty(startsWithAccessor, key, { configurable: true, enumerable: true, get: function get() { return 42; } }); st.equal( ValidateAndApplyPropertyDescriptor( startsWithAccessor, key, true, v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor())), v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor(42))) ), true, 'operation is successful: current is accessor, Desc is data' ); var shouldBeData = gOPD(startsWithAccessor, 'property key'); st.deepEqual(shouldBeData, { configurable: true, enumerable: true, value: 42, writable: false }, 'is a data property'); st.end(); }); t.test('Desc and current are both data descriptors', function (st) { st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.writable(v.dataDescriptor()), CompletePropertyDescriptor(v.descriptors.nonWritable(v.descriptors.nonConfigurable(v.dataDescriptor()))) ), false, 'false if frozen current and writable Desc' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.descriptors.configurable(v.descriptors.value(42)), CompletePropertyDescriptor(v.descriptors.nonWritable(v.descriptors.value(7))) ), false, 'false if nonwritable current has a different value than Desc' ); st.end(); }); t.test('current is nonconfigurable; Desc and current are both accessor descriptors', function (st) { st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.mutatorDescriptor(), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.mutatorDescriptor())) ), false, 'false if both Sets are not equal' ); st.equal( ValidateAndApplyPropertyDescriptor( undefined, 'property key', true, v.accessorDescriptor(), CompletePropertyDescriptor(v.descriptors.nonConfigurable(v.accessorDescriptor())) ), false, 'false if both Gets are not equal' ); st.end(); }); if (year >= 2022) { t['throws']( function () { ValidateAndApplyPropertyDescriptor( {}, 'property key', true, v.genericDescriptor(), v.genericDescriptor() ); }, TypeError, 'current must be a complete descriptor' ); } }; ljharb-es-abstract-babee05/test/methods/ValidateAtomicAccess.js000066400000000000000000000061741516525472400247420ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var typedArrayByteLength = require('typed-array-byte-length'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 2017, 'ES2017+'); var makeTAWBR = function (ta) { return { '[[Object]]': ta, '[[CachedBufferByteLength]]': typedArrayByteLength(ta) }; }; var ValidateAtomicAccess = year >= 2024 ? actual : function ValidateAtomicAccess(taRecord, requestIndex) { return actual(taRecord['[[Object]]'], requestIndex); }; forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { ValidateAtomicAccess(nonTA, 0); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { var ta = new global[TypedArray](8); st.doesNotThrow( function () { ValidateAtomicAccess(makeTAWBR(ta), 0); }, debug(ta) + ' is an integer TypedArray' ); st['throws']( function () { ValidateAtomicAccess(makeTAWBR(ta), -1); }, RangeError, // via ToIndex 'a requestIndex of -1 is <= 0' ); st['throws']( function () { ValidateAtomicAccess(makeTAWBR(ta), 8); }, RangeError, 'a requestIndex === length throws' ); st['throws']( function () { ValidateAtomicAccess(makeTAWBR(ta), 9); }, RangeError, 'a requestIndex > length throws' ); var elementSize = esV.elementSizes['$' + TypedArray]; st.equal( ValidateAtomicAccess(makeTAWBR(ta), 0), (year >= 2021 ? elementSize : 1) * 0, TypedArray + ': requestIndex of 0 gives 0' ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 1), (year >= 2021 ? elementSize : 1) * 1, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 1) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 2), (year >= 2021 ? elementSize : 1) * 2, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 2) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 3), (year >= 2021 ? elementSize : 1) * 3, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 3) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 4), (year >= 2021 ? elementSize : 1) * 4, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 4) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 5), (year >= 2021 ? elementSize : 1) * 5, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 5) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 6), (year >= 2021 ? elementSize : 1) * 6, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 6) ); st.equal( ValidateAtomicAccess(makeTAWBR(ta), 7), (year >= 2021 ? elementSize : 1) * 7, TypedArray + ': requestIndex of 1 gives ' + ((year >= 2021 ? elementSize : 1) * 7) ); }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ValidateAtomicAccessOnIntegerTypedArray.js000066400000000000000000000067741516525472400305700ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var v = require('es-value-fixtures'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, ValidateAtomicAccessOnIntegerTypedArray) { t.ok(year >= 2024, 'ES2024+'); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(nonTA, 0); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { var ta = new global[TypedArray](8); var shouldThrow = TypedArray.indexOf('Clamped') > -1 || !(/Int|Uint/).test(TypedArray); var isWaitable = TypedArray === 'Int32Array' || TypedArray === 'BigInt64Array'; if (shouldThrow) { st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 0); }, debug(ta) + ' is not an integer Typed Array' ); } else { st.doesNotThrow( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 0); }, debug(ta) + ' is an integer Typed Array' ); st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, -1); }, RangeError, // via ToIndex 'a requestIndex of -1 is <= 0' ); st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 8); }, RangeError, 'a requestIndex === length throws' ); st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 9); }, RangeError, 'a requestIndex > length throws' ); var elementSize = esV.elementSizes['$' + TypedArray]; st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 0), elementSize * 0, TypedArray + ': requestIndex of 0 gives 0'); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 1), elementSize * 1, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 1)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 2), elementSize * 2, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 2)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 3), elementSize * 3, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 3)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 4), elementSize * 4, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 4)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 5), elementSize * 5, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 5)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 6), elementSize * 6, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 6)); st.equal(ValidateAtomicAccessOnIntegerTypedArray(ta, 7), elementSize * 7, TypedArray + ': requestIndex of 1 gives ' + (elementSize * 7)); forEach(v.nonBooleans, function (nonBoolean) { st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 0, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); if (isWaitable) { st.doesNotThrow( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 0, true); }, debug(ta) + ' is a waitable integer Typed Array' ); } else { st['throws']( function () { ValidateAtomicAccessOnIntegerTypedArray(ta, 0, true); }, TypeError, debug(ta) + ' is not a waitable integer Typed Array' ); } } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ValidateIntegerTypedArray.js000066400000000000000000000054341516525472400260040ustar00rootroot00000000000000'use strict'; var debug = require('object-inspect'); var forEach = require('for-each'); var typedArrayBuffer = require('typed-array-buffer'); var v = require('es-value-fixtures'); var getTypedArrays = require('../helpers/typedArrays'); var esV = require('../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 2021, 'ES2021+'); var ValidateIntegerTypedArray = year >= 2024 ? actual : function ValidateIntegerTypedArray(typedArray, waitable) { if (arguments.length > 1) { return actual(typedArray, waitable); } return actual(typedArray); }; forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { ValidateIntegerTypedArray(null, nonBoolean); }, TypeError, debug(nonBoolean) + ' is not a Boolean' ); }); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { ValidateIntegerTypedArray(nonTA, false); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var unwrap = function unwrap(tawbr) { return year >= 2024 ? typedArrayBuffer(tawbr['[[Object]]']) : tawbr; }; var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { var ta = new global[TypedArray](0); var shouldThrow = TypedArray.indexOf('Clamped') > -1 || !(/Int|Uint/).test(TypedArray); if (shouldThrow) { st['throws']( function () { ValidateIntegerTypedArray(ta, false); }, TypeError, debug(ta) + ' is not an integer TypedArray' ); if (year < 2024) { st['throws']( function () { ValidateIntegerTypedArray(ta, false); }, TypeError, debug(ta) + ' is not an integer TypedArray' ); } } else { st.doesNotThrow( function () { ValidateIntegerTypedArray(ta, false); }, debug(ta) + ' is an integer TypedArray' ); st.equal( unwrap(ValidateIntegerTypedArray(ta, false)), ta.buffer, 'returns the buffer of a waitable integer TypedArray' ); if (year < 2024) { st.equal( unwrap(ValidateIntegerTypedArray(ta)), ta.buffer, 'returns the buffer of a waitable integer TypedArray' ); } } var isWaitable = TypedArray === 'Int32Array' || TypedArray === 'BigInt64Array'; if (isWaitable) { st.doesNotThrow( function () { ValidateIntegerTypedArray(ta, true); }, debug(ta) + ' is a waitable integer TypedArray' ); st.equal( unwrap(ValidateIntegerTypedArray(ta, true)), ta.buffer, 'returns the buffer of a waitable integer TypedArray' ); } else { st['throws']( function () { ValidateIntegerTypedArray(ta, true); }, TypeError, debug(ta) + ' is not a waitable integer TypedArray' ); } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/ValidateTypedArray.js000066400000000000000000000026151516525472400244640ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); var getTypedArrays = require('../helpers/typedArrays'); module.exports = function (t, year, actual, extras) { t.ok(year >= 2015, 'ES2015+'); var order = 'UNORDERED'; var ValidateTypedArray = year >= 2024 ? actual : function ValidateTypedArray(typedArray) { return actual(typedArray); }; var DetachArrayBuffer = extras.getAO('DetachArrayBuffer'); forEach([].concat( esV.unknowns, [[]] ), function (nonTA) { t['throws']( function () { ValidateTypedArray(nonTA, order); }, TypeError, debug(nonTA) + ' is not a TypedArray' ); }); var availableTypedArrays = getTypedArrays(year); t.test('actual typed arrays', { skip: availableTypedArrays.length === 0 }, function (st) { forEach(availableTypedArrays, function (TypedArray) { var ta = new global[TypedArray](0); st.doesNotThrow( function () { ValidateTypedArray(ta, order); }, debug(ta) + ' is a TypedArray' ); st.test('can detach', { skip: !esV.canDetach }, function (s2t) { DetachArrayBuffer(ta.buffer); s2t['throws']( function () { ValidateTypedArray(ta, order); }, TypeError, debug(ta) + ' is a detached TypedArray' ); s2t.end(); }); if (year >= 2024) { // TODO: test that throws when order is invalid or missing } }); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/WeakRefDeref.js000066400000000000000000000012001516525472400232050ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, WeakRefDeref) { t.ok(year >= 2021, 'ES2021+'); forEach(esV.unknowns, function (nonWeakRef) { t['throws']( function () { WeakRefDeref(nonWeakRef); }, TypeError, debug(nonWeakRef) + ' is not a WeakRef' ); }); t.test('WeakRefs', { skip: typeof WeakRef !== 'function' }, function (st) { var sentinel = {}; var weakRef = new WeakRef({ foo: sentinel }); st.deepEqual(WeakRefDeref(weakRef), { foo: sentinel }, 'weakRef is dereferenced'); st.end(); }); }; ljharb-es-abstract-babee05/test/methods/WeekDay.js000066400000000000000000000005741516525472400222610ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, WeekDay) { t.ok(year >= 5, 'ES5+'); var now = new Date(); var today = now.getUTCDay(); for (var i = 0; i < 7; i += 1) { var weekDay = WeekDay(now.getTime() + (i * esV.msPerDay)); t.equal(weekDay, (today + i) % 7, i + ' days after today (' + today + '), WeekDay is ' + weekDay); } }; ljharb-es-abstract-babee05/test/methods/WordCharacters.js000066400000000000000000000035641516525472400236450ustar00rootroot00000000000000'use strict'; var assign = require('object.assign'); var debug = require('object-inspect'); var forEach = require('for-each'); var v = require('es-value-fixtures'); var esV = require('../helpers/v'); module.exports = function (t, year, actual) { t.ok(year >= 2017, 'ES2017+'); var WordCharacters = year >= 2023 ? actual : function WordCharacters(rer) { return actual(rer['[[IgnoreCase]]'], rer['[[Unicode]]']); }; if (year >= 2023) { forEach(esV.unknowns, function (nonRER) { t['throws']( function () { WordCharacters(nonRER); }, TypeError, debug(nonRER) + ' is not a RegularExpressionRecord' ); }); } var rer = { '[[IgnoreCase]]': false, '[[Multiline]]': false, '[[DotAll]]': false, '[[Unicode]]': false, '[[CapturingGroupsCount]]': 1 }; forEach(v.nonBooleans, function (nonBoolean) { t['throws']( function () { WordCharacters(assign({}, rer, { '[[IgnoreCase]]': nonBoolean })); }, TypeError, '[[IgnoreCase]]: ' + debug(nonBoolean) + ' is not a Boolean' ); t['throws']( function () { WordCharacters(assign({}, rer, { '[[Unicode]]': nonBoolean })); }, TypeError, '[[Unicode]]: ' + debug(nonBoolean) + ' is not a Boolean' ); }); t.equal( WordCharacters(rer), 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_', 'not both true gives a-zA-Z0-9_' ); t.equal( WordCharacters(assign({}, rer, { '[[Unicode]]': true })), 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_', 'not both true gives a-zA-Z0-9_' ); t.equal( WordCharacters(assign({}, rer, { '[[IgnoreCase]]': true })), 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_', 'not both true gives a-zA-Z0-9_' ); t.equal( WordCharacters(assign({}, rer, { '[[IgnoreCase]]': true, '[[Unicode]]': true })), 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_', 'both true gives a-zA-Z0-9_' ); }; ljharb-es-abstract-babee05/test/methods/YearFromTime.js000066400000000000000000000005441516525472400232700ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, YearFromTime) { t.ok(year >= 5, 'ES5+'); for (var i = 1900; i < 2100; i += 1) { t.equal(YearFromTime(Date.UTC(i, 0, 1)), i, 'YearFromTime matches a Date object’s year on 1/1: ' + i); t.equal(YearFromTime(Date.UTC(i, 10, 1)), i, 'YearFromTime matches a Date object’s year on 10/1: ' + i); } }; ljharb-es-abstract-babee05/test/methods/abs.js000066400000000000000000000010711516525472400214660ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, abs) { t.ok(year >= 5, 'ES5+'); t.equal(abs(0), 0, '+0 -> +0'); t.equal(abs(-0), 0, '-0 -> +0'); t.equal(abs(1), 1, '+1 -> +1'); t.equal(abs(-1), 1, '-1 -> +1'); t.equal(abs(NaN), NaN, 'NaN -> NaN'); if (year >= 2020) { t.test('BigInts', { skip: !esV.hasBigInts }, function (st) { st.equal(abs(BigInt(0)), BigInt(0), '0n -> 0n'); st.equal(abs(BigInt(1)), BigInt(1), '+1n -> +1n'); st.equal(abs(BigInt(-1)), BigInt(1), '-1n -> +1n'); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/clamp.js000066400000000000000000000021521516525472400220160ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var MAX_SAFE_INTEGER = require('math-intrinsics/constants/maxSafeInteger'); module.exports = function (t, year, clamp) { t.ok(year >= 2021, 'ES2021+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { clamp(nonNumber, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); }, TypeError, 'argument 1: ' + debug(nonNumber) + ' is not a number' ); t['throws']( function () { clamp(0, nonNumber, MAX_SAFE_INTEGER); }, TypeError, 'argument 2: ' + debug(nonNumber) + ' is not a number' ); t['throws']( function () { clamp(0, -MAX_SAFE_INTEGER, nonNumber); }, TypeError, 'argument 3: ' + debug(nonNumber) + ' is not a number' ); }); t.equal(clamp(-1, 0, 2), 0, 'clamping -1 between 0 and 2 is 0'); t.equal(clamp(0, 0, 2), 0, 'clamping 0 between 0 and 2 is 0'); t.equal(clamp(1, 0, 2), 1, 'clamping 1 between 0 and 2 is 1'); t.equal(clamp(2, 0, 2), 2, 'clamping 2 between 0 and 2 is 2'); t.equal(clamp(3, 0, 2), 2, 'clamping 3 between 0 and 2 is 2'); }; ljharb-es-abstract-babee05/test/methods/floor.js000066400000000000000000000011441516525472400220430ustar00rootroot00000000000000'use strict'; var esV = require('../helpers/v'); module.exports = function (t, year, floor) { t.ok(year >= 5, 'ES5+'); t.equal(floor(3.2), 3, 'floor(3.2) is 3'); t.equal(floor(-3.2), -4, 'floor(-3.2) is -4'); t.equal(floor(0), 0, 'floor(+0) is +0'); t.equal(floor(-0), -0, 'floor(-0) is -0'); if (year >= 2020) { t.test('floor (with BigInts)', { skip: !esV.hasBigInts }, function (st) { st.equal(floor(BigInt(3)), BigInt(3), 'floor(3n) is 3n'); st.equal(floor(BigInt(-3)), BigInt(-3), 'floor(-3n) is -3n'); st.equal(floor(BigInt(0)), BigInt(0), 'floor(0n) is 0n'); st.end(); }); } }; ljharb-es-abstract-babee05/test/methods/max.js000066400000000000000000000003421516525472400215060ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, max) { t.ok(year >= 2015, 'ES2015+'); t.equal(max.apply(null, v.numbers), Math.max.apply(null, v.numbers), 'works with numbers'); }; ljharb-es-abstract-babee05/test/methods/min.js000066400000000000000000000003421516525472400215040ustar00rootroot00000000000000'use strict'; var v = require('es-value-fixtures'); module.exports = function (t, year, min) { t.ok(year >= 2015, 'ES2015+'); t.equal(min.apply(null, v.numbers), Math.min.apply(null, v.numbers), 'works with numbers'); }; ljharb-es-abstract-babee05/test/methods/modulo.js000066400000000000000000000004011516525472400222140ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, modulo) { t.ok(year >= 5, 'ES5+'); t.equal(3 % 2, 1, '+3 % 2 is +1'); t.equal(modulo(3, 2), 1, '+3 mod 2 is +1'); t.equal(-3 % 2, -1, '-3 % 2 is -1'); t.equal(modulo(-3, 2), 1, '-3 mod 2 is +1'); }; ljharb-es-abstract-babee05/test/methods/msFromTime.js000066400000000000000000000003521516525472400230040ustar00rootroot00000000000000'use strict'; module.exports = function (t, year, msFromTime) { t.ok(year >= 5, 'ES5+'); var now = new Date(); t.equal(msFromTime(now.getTime()), now.getUTCMilliseconds(), 'ms from Date timestamp matches getUTCMilliseconds'); }; ljharb-es-abstract-babee05/test/methods/substring.js000066400000000000000000000046141516525472400227470ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, substring) { t.ok(year >= 2021, 'ES2021+'); forEach(v.nonStrings, function (nonString) { t['throws']( function () { substring(nonString, 0, 0); }, TypeError, debug(nonString) + ' is not a String' ); }); forEach(esV.notInts, function (nonIntegerNumber) { t['throws']( function () { substring('', nonIntegerNumber); }, TypeError, 'inclusiveStart, no end: ' + debug(nonIntegerNumber) + ' is not an integer' ); t['throws']( function () { substring('', nonIntegerNumber, 0); }, TypeError, 'inclusiveStart: ' + debug(nonIntegerNumber) + ' is not an integer' ); t['throws']( function () { substring('', 0, nonIntegerNumber); }, TypeError, 'exclusiveEnd: ' + debug(nonIntegerNumber) + ' is not an integer' ); }); t.equal(substring('abc', 0), 'abc', 'substring of S from 0 works'); t.equal(substring('abc', 1), 'bc', 'substring of S from 1 works'); t.equal(substring('abc', 2), 'c', 'substring of S from 2 works'); t.equal(substring('abc', 3), '', 'substring of S from 3 works'); t.equal(substring('abc', 0, 1), 'a', 'substring of S from 0 to 1 works'); t.equal(substring('abc', 1, 1), '', 'substring of S from 1 to 1 works'); t.equal(substring('abc', 2, 1), '', 'substring of S from 2 to 1 works'); t.equal(substring('abc', 3, 1), '', 'substring of S from 3 to 1 works'); t.equal(substring('abc', 0, 2), 'ab', 'substring of S from 0 to 2 works'); t.equal(substring('abc', 1, 2), 'b', 'substring of S from 1 to 2 works'); t.equal(substring('abc', 2, 2), '', 'substring of S from 2 to 2 works'); t.equal(substring('abc', 3, 2), '', 'substring of S from 3 to 2 works'); t.equal(substring('abc', 0, 3), 'abc', 'substring of S from 0 to 3 works'); t.equal(substring('abc', 1, 3), 'bc', 'substring of S from 1 to 3 works'); t.equal(substring('abc', 2, 3), 'c', 'substring of S from 2 to 3 works'); t.equal(substring('abc', 3, 3), '', 'substring of S from 3 to 3 works'); t.equal(substring('abc', 0, 4), 'abc', 'substring of S from 0 to 4 works'); t.equal(substring('abc', 1, 4), 'bc', 'substring of S from 1 to 4 works'); t.equal(substring('abc', 2, 4), 'c', 'substring of S from 2 to 4 works'); t.equal(substring('abc', 3, 4), '', 'substring of S from 3 to 4 works'); }; ljharb-es-abstract-babee05/test/methods/thisTimeValue.js000066400000000000000000000011161516525472400235040ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); var esV = require('../helpers/v'); module.exports = function (t, year, thisTimeValue) { t.ok(year >= 2015, 'ES2015+'); forEach(esV.unknowns, function (nonDate) { t['throws']( function () { thisTimeValue(nonDate); }, TypeError, debug(nonDate) + ' is not a Date' ); }); forEach(v.timestamps, function (timestamp) { var date = new Date(timestamp); t.equal(thisTimeValue(date), timestamp, debug(date) + ' is its own thisTimeValue'); }); }; ljharb-es-abstract-babee05/test/methods/truncate.js000066400000000000000000000011051516525472400225440ustar00rootroot00000000000000'use strict'; var forEach = require('for-each'); var v = require('es-value-fixtures'); var debug = require('object-inspect'); module.exports = function (t, year, truncate) { t.ok(year >= 2023, 'ES2023+'); forEach(v.nonNumbers, function (nonNumber) { t['throws']( function () { truncate(nonNumber); }, TypeError, debug(nonNumber) + ' is not a number' ); }); t.equal(truncate(-1.1), -1, '-1.1 truncates to -1'); t.equal(truncate(1.1), 1, '1.1 truncates to 1'); t.equal(truncate(0), 0, '+0 truncates to +0'); t.equal(truncate(-0), 0, '-0 truncates to +0'); }; ljharb-es-abstract-babee05/test/ses-compat.js000066400000000000000000000001531516525472400213310ustar00rootroot00000000000000'use strict'; /* globals lockdown */ require('ses'); lockdown({ errorTaming: 'unsafe' }); require('.');