c1c48e7b081a9a5efd7182f6f44ce8ea3b9b4856946badb0c5d6929832f6c8d434db610a6b2e2fe118b12a47baa491025747c4c5e43b845f12c8088bd7659c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var IsBigIntElementType = require('./IsBigIntElementType');
  4. var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType');
  5. var TypedArrayElementType = require('./TypedArrayElementType');
  6. var ValidateTypedArray = require('./ValidateTypedArray');
  7. var whichTypedArray = require('which-typed-array');
  8. // https://262.ecma-international.org/13.0/#sec-validateintegertypedarray
  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. if (waitable) { // step 5
  16. var typeName = whichTypedArray(typedArray);
  17. if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') {
  18. throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a
  19. }
  20. } else {
  21. var type = TypedArrayElementType(typedArray); // step 5.a
  22. if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) {
  23. throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 5.b
  24. }
  25. }
  26. return buffer; // step 6
  27. };