Save current BZZZ config-ui state before CHORUS branding update

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-08-19 00:19:00 +10:00
parent 6a6a49b7b1
commit c177363a19
16410 changed files with 1789161 additions and 230 deletions

View File

@@ -0,0 +1,44 @@
'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) { // eslint-disable-line no-constant-condition
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));
}
}
};

View File

@@ -0,0 +1,18 @@
'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;
};

View File

@@ -0,0 +1,45 @@
'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
}
};

View File

@@ -0,0 +1,30 @@
'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]]'];
};

View File

@@ -0,0 +1,29 @@
'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 <a href="https://www.unicode.org/reports/tr44/#Simple_Case_Folding">Simple Case Folding</a> 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
}
};

View File

@@ -0,0 +1,77 @@
'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);
};

View File

@@ -0,0 +1,41 @@
'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);
};

View File

@@ -0,0 +1,101 @@
'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
};

View File

@@ -0,0 +1,42 @@
'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;
};

View File

@@ -0,0 +1,77 @@
'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;
};

View File

@@ -0,0 +1,48 @@
'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);
};

View File

@@ -0,0 +1,45 @@
'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
};

View File

@@ -0,0 +1,70 @@
'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;
}
);
};

View File

@@ -0,0 +1,14 @@
'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;
};

View File

@@ -0,0 +1,14 @@
'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);
};

View File

@@ -0,0 +1,15 @@
'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);
};

View File

@@ -0,0 +1,14 @@
'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);
};

View File

@@ -0,0 +1,14 @@
'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);
};

View File

@@ -0,0 +1,20 @@
'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;
};

View File

@@ -0,0 +1,13 @@
'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;
};

View File

@@ -0,0 +1,29 @@
'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;
};

View File

@@ -0,0 +1,39 @@
'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
};

View File

@@ -0,0 +1,14 @@
'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;
};

View File

@@ -0,0 +1,14 @@
'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;
};

View File

@@ -0,0 +1,14 @@
'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;
};

View File

@@ -0,0 +1,28 @@
'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;
};

View File

@@ -0,0 +1,15 @@
'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);
};

View File

@@ -0,0 +1,14 @@
'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;
};

View File

@@ -0,0 +1,26 @@
'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
};

View File

@@ -0,0 +1,22 @@
'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;
};

View File

@@ -0,0 +1,13 @@
'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');
};

View File

@@ -0,0 +1,63 @@
'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;
*/
};

View File

@@ -0,0 +1,12 @@
'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;
};

View File

@@ -0,0 +1,12 @@
'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;
};

View File

@@ -0,0 +1,12 @@
'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;
};

View File

@@ -0,0 +1,39 @@
'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;
};

View File

@@ -0,0 +1,31 @@
'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;
};

View File

@@ -0,0 +1,20 @@
'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);
};

View File

@@ -0,0 +1,17 @@
'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
};

View File

@@ -0,0 +1,19 @@
'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;
};

View File

@@ -0,0 +1,52 @@
'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
};

View File

@@ -0,0 +1,7 @@
'use strict';
// https://262.ecma-international.org/16.0/#sec-canonicalizekeyedcollectionkey
module.exports = function CanonicalizeKeyedCollectionKey(key) {
return key === 0 ? +0 : key;
};

View File

@@ -0,0 +1,34 @@
'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);
}
});
}
);
};

View File

@@ -0,0 +1,47 @@
'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;
};

View File

@@ -0,0 +1,12 @@
'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);

View File

@@ -0,0 +1,46 @@
'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
};

View File

@@ -0,0 +1,55 @@
'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
};
};

View File

@@ -0,0 +1,25 @@
'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;
};

View File

@@ -0,0 +1,50 @@
'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
};

View File

@@ -0,0 +1,60 @@
'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
};

View File

@@ -0,0 +1,43 @@
'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;
};

View File

@@ -0,0 +1,48 @@
'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;

View File

@@ -0,0 +1,69 @@
'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;
};

View File

@@ -0,0 +1,137 @@
'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, 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, 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, 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, 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
};
};

View File

@@ -0,0 +1,25 @@
'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);
};

View File

@@ -0,0 +1,23 @@
'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');
}
};

View File

@@ -0,0 +1,27 @@
'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, '&quot;');
p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
}
return p1 + '>' + S + '</' + tag + '>';
};

View File

@@ -0,0 +1,51 @@
'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
};

View File

@@ -0,0 +1,15 @@
'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
};
};

View File

@@ -0,0 +1,40 @@
'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
};

View File

@@ -0,0 +1,28 @@
'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);
};

View File

@@ -0,0 +1,101 @@
'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; // eslint-disable-line no-invalid-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(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(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);
};

View File

@@ -0,0 +1,52 @@
'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);
};

View File

@@ -0,0 +1,27 @@
'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;
};

11
install/config-ui/node_modules/es-abstract/2025/Day.js generated vendored Normal file
View File

@@ -0,0 +1,11 @@
'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);
};

View File

@@ -0,0 +1,10 @@
'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);
};

View File

@@ -0,0 +1,11 @@
'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));
};

View File

@@ -0,0 +1,18 @@
'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;
};

View File

@@ -0,0 +1,42 @@
'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
};

View File

@@ -0,0 +1,39 @@
'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
);
};

View File

@@ -0,0 +1,25 @@
'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;
};

View File

@@ -0,0 +1,46 @@
'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;
};

View File

@@ -0,0 +1,74 @@
'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
};

View File

@@ -0,0 +1,36 @@
'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);
};

View File

@@ -0,0 +1,43 @@
'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
};

View File

@@ -0,0 +1,55 @@
'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;
};

View File

@@ -0,0 +1,16 @@
'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);
};

View File

@@ -0,0 +1,29 @@
'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;
};

View File

@@ -0,0 +1,51 @@
'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 3.a
SLOT.set(generator, '[[GeneratorContext]]', null); // step 3.b
state = 'COMPLETED'; // step 3.c
}
var value = abruptCompletion.value();
if (state === 'COMPLETED') { // step 3
return CreateIteratorResultObject(value, true); // steps 3.a-b
}
if (state !== 'SUSPENDED-YIELD') {
throw new $TypeError('Assertion failed: generator state is unexpected: ' + state); // step 4
}
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(abruptCompletion.value())), true);
}
var genContext = SLOT.get(generator, '[[GeneratorContext]]'); // step 5
SLOT.set(generator, '[[GeneratorState]]', 'EXECUTING'); // step 8
var result = genContext(value); // steps 6-7, 8-11
return result; // step 12
};

View File

@@ -0,0 +1,46 @@
'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
};

View File

@@ -0,0 +1,24 @@
'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
};

24
install/config-ui/node_modules/es-abstract/2025/Get.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
'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];
};

View File

@@ -0,0 +1,22 @@
'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
};

View File

@@ -0,0 +1,9 @@
'use strict';
var getGlobal = require('globalthis/polyfill');
// https://262.ecma-international.org/6.0/#sec-getglobalobject
module.exports = function GetGlobalObject() {
return getGlobal();
};

View File

@@ -0,0 +1,53 @@
'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
};

View File

@@ -0,0 +1,24 @@
'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
};

View File

@@ -0,0 +1,48 @@
'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
};

View File

@@ -0,0 +1,28 @@
'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
};
};

View File

@@ -0,0 +1,24 @@
'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]]']];
};

View File

@@ -0,0 +1,26 @@
'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]]']);
};

View File

@@ -0,0 +1,34 @@
'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;
};

View File

@@ -0,0 +1,72 @@
'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
};

View File

@@ -0,0 +1,30 @@
'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"`');
};

View File

@@ -0,0 +1,20 @@
'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;
};

View File

@@ -0,0 +1,33 @@
'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;
};

View File

@@ -0,0 +1,64 @@
'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)); // eslint-disable-line no-invalid-this
};
}
return {
'[[SetObject]]': obj,
'[[Size]]': intSize,
'[[Has]]': has,
'[[Keys]]': keys
}; // step 12
};

View File

@@ -0,0 +1,27 @@
'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;
};

View File

@@ -0,0 +1,148 @@
'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
};

View File

@@ -0,0 +1,68 @@
'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
};

View File

@@ -0,0 +1,23 @@
'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];
};

Some files were not shown because too many files have changed in this diff Show More