Nikolay Vitkov | d76576c | 2024-12-02 14:10:15 | [diff] [blame] | 1 | 'use strict'; |
| 2 | |
| 3 | var $TypeError = require('es-errors/type'); |
| 4 | |
| 5 | var $byteLength = require('array-buffer-byte-length'); |
| 6 | |
| 7 | var isArrayBuffer = require('is-array-buffer'); |
| 8 | |
| 9 | var availableTypedArrays = require('available-typed-arrays')(); |
| 10 | |
| 11 | // https://262.ecma-international.org/6.0/#sec-isdetachedbuffer |
| 12 | |
| 13 | module.exports = function IsDetachedBuffer(arrayBuffer) { |
| 14 | if (!isArrayBuffer(arrayBuffer)) { |
| 15 | throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot'); |
| 16 | } |
| 17 | if ($byteLength(arrayBuffer) === 0) { |
| 18 | try { |
| 19 | new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new |
| 20 | } catch (error) { |
| 21 | return !!error && error.name === 'TypeError'; |
| 22 | } |
| 23 | } |
| 24 | return false; |
| 25 | }; |