b637d967d8bc8a7081d194a9fa89dd72b01de55046aac99b654f62ee9824dc8ddf8e6c9d922cd145aa60eed5e2552b700c0ca691eda88165c200551b92f9ff 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. var typedArrayBuffer = require('typed-array-buffer');
  9. // https://262.ecma-international.org/13.0/#sec-validateintegertypedarray
  10. module.exports = function ValidateIntegerTypedArray(typedArray) {
  11. var waitable = arguments.length > 1 ? arguments[1] : false; // step 1
  12. if (typeof waitable !== 'boolean') {
  13. throw new $TypeError('Assertion failed: `waitable` must be a Boolean');
  14. }
  15. ValidateTypedArray(typedArray); // step 2
  16. var buffer = typedArrayBuffer(typedArray); // step 3
  17. if (waitable) { // step 5
  18. var typeName = whichTypedArray(typedArray);
  19. if (typeName !== 'Int32Array' && typeName !== 'BigInt64Array') {
  20. throw new $TypeError('Assertion failed: `typedArray` must be an Int32Array or BigInt64Array when `waitable` is true'); // step 5.a
  21. }
  22. } else {
  23. var type = TypedArrayElementType(typedArray); // step 5.a
  24. if (!IsUnclampedIntegerElementType(type) && !IsBigIntElementType(type)) {
  25. throw new $TypeError('Assertion failed: `typedArray` must be an integer TypedArray'); // step 5.b
  26. }
  27. }
  28. return buffer; // step 6
  29. };