929734b72934709ea1836adb0f5542081cfe2062676ef4ceb050b271c2ee7f6f8cf16bcb2a13c163846b2de06269c70539d65fb747475321f985411cf284b2 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer');
  4. var IsTypedArrayOutOfBounds = require('./IsTypedArrayOutOfBounds');
  5. var TypedArrayElementSize = require('./TypedArrayElementSize');
  6. var TypedArrayLength = require('./TypedArrayLength');
  7. var isTypedArrayWithBufferWitnessRecord = require('../helpers/records/typed-array-with-buffer-witness-record');
  8. var typedArrayByffer = require('typed-array-buffer');
  9. var typedArrayByteLength = require('typed-array-byte-length');
  10. // https://262.ecma-international.org/15.0/#sec-typedarraybytelength
  11. module.exports = function TypedArrayByteLength(taRecord) {
  12. if (!isTypedArrayWithBufferWitnessRecord(taRecord)) {
  13. throw new $TypeError('Assertion failed: `taRecord` must be a TypedArray With Buffer Witness Record');
  14. }
  15. if (IsTypedArrayOutOfBounds(taRecord)) {
  16. return 0; // step 1
  17. }
  18. var length = TypedArrayLength(taRecord); // step 2
  19. if (length === 0) {
  20. return 0; // step 3
  21. }
  22. var O = taRecord['[[Object]]']; // step 4
  23. var isFixed = IsFixedLengthArrayBuffer(typedArrayByffer(O));
  24. var byteLength = isFixed ? typedArrayByteLength(O) : 'AUTO';
  25. if (byteLength !== 'AUTO') {
  26. return byteLength; // step 5
  27. }
  28. var elementSize = TypedArrayElementSize(O); // step 6
  29. return length * elementSize; // step 7
  30. };