5447c35d93c6bb56bdc47c3bfa2984ad369c82429ffe874c5628f223d974b10203b1797a8523d6185a6e3a8b7997639c79d0279e1ae3ee551cdd2deb2e88c0 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var IsBigIntElementType = require('./IsBigIntElementType');
  4. var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType');
  5. var ValidateTypedArray = require('./ValidateTypedArray');
  6. var whichTypedArray = require('which-typed-array');
  7. // https://262.ecma-international.org/12.0/#sec-validateintegertypedarray
  8. var tableTAO = require('./tables/typed-array-objects');
  9. module.exports = function ValidateIntegerTypedArray(typedArray) {
  10. var waitable = arguments.length > 1 ? arguments[1] : false; // step 1
  11. if (typeof waitable !== 'boolean') {
  12. throw new $TypeError('Assertion failed: `waitable` must be a Boolean');
  13. }
  14. var buffer = ValidateTypedArray(typedArray); // step 2
  15. var typeName = whichTypedArray(typedArray); // step 3
  16. var type = tableTAO.name['$' + typeName]; // step 4
  17. if (waitable) { // step 5
  18. if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') {
  19. throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a
  20. }
  21. } else if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) {
  22. throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 6.a
  23. }
  24. return buffer; // step 7
  25. };