zhangnaisong
2023-08-05 24d66c8d82b628a06e93dbb1abfea2049b3d45ab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
'use strict';
 
var GetIntrinsic = require('get-intrinsic');
 
var $TypeError = GetIntrinsic('%TypeError%');
 
var callBound = require('call-bind/callBound');
 
var $byteLength = callBound('%ArrayBuffer.prototype.byteLength%', true)
    || function byteLength(ab) { return ab.byteLength; }; // in node < 0.11, byteLength is an own nonconfigurable property
 
var isArrayBuffer = require('is-array-buffer');
 
var availableTypedArrays = require('available-typed-arrays')();
 
// https://262.ecma-international.org/6.0/#sec-isdetachedbuffer
 
module.exports = function IsDetachedBuffer(arrayBuffer) {
    if (!isArrayBuffer(arrayBuffer)) {
        throw new $TypeError('Assertion failed: `arrayBuffer` must be an Object with an [[ArrayBufferData]] internal slot');
    }
    if ($byteLength(arrayBuffer) === 0) {
        try {
            new global[availableTypedArrays[0]](arrayBuffer); // eslint-disable-line no-new
        } catch (error) {
            return error.name === 'TypeError';
        }
    }
    return false;
};