123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 'use strict';
- var forEach = require('for-each');
- var availableTypedArrays = require('available-typed-arrays');
- var callBound = require('call-bind/callBound');
- var $toString = callBound('Object.prototype.toString');
- var hasToStringTag = require('has-tostringtag/shams')();
- var gOPD = require('gopd');
- var g = typeof globalThis === 'undefined' ? global : globalThis;
- var typedArrays = availableTypedArrays();
- var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
- for (var i = 0; i < array.length; i += 1) {
- if (array[i] === value) {
- return i;
- }
- }
- return -1;
- };
- var $slice = callBound('String.prototype.slice');
- var toStrTags = {};
- var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
- if (hasToStringTag && gOPD && getPrototypeOf) {
- forEach(typedArrays, function (typedArray) {
- var arr = new g[typedArray]();
- if (Symbol.toStringTag in arr) {
- var proto = getPrototypeOf(arr);
- var descriptor = gOPD(proto, Symbol.toStringTag);
- if (!descriptor) {
- var superProto = getPrototypeOf(proto);
- descriptor = gOPD(superProto, Symbol.toStringTag);
- }
- toStrTags[typedArray] = descriptor.get;
- }
- });
- }
- var tryTypedArrays = function tryAllTypedArrays(value) {
- var anyTrue = false;
- forEach(toStrTags, function (getter, typedArray) {
- if (!anyTrue) {
- try {
- anyTrue = getter.call(value) === typedArray;
- } catch (e) { /**/ }
- }
- });
- return anyTrue;
- };
- module.exports = function isTypedArray(value) {
- if (!value || typeof value !== 'object') { return false; }
- if (!hasToStringTag || !(Symbol.toStringTag in value)) {
- var tag = $slice($toString(value), 8, -1);
- return $indexOf(typedArrays, tag) > -1;
- }
- if (!gOPD) { return false; }
- return tryTypedArrays(value);
- };
|