12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 'use strict';
- var forEach = require('for-each');
- var availableTypedArrays = require('available-typed-arrays');
- var callBound = require('call-bind/callBound');
- var gOPD = require('gopd');
- var $toString = callBound('Object.prototype.toString');
- var hasToStringTag = require('has-tostringtag/shams')();
- var g = typeof globalThis === 'undefined' ? global : globalThis;
- var typedArrays = availableTypedArrays();
- var $slice = callBound('String.prototype.slice');
- var toStrTags = {};
- var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
- if (hasToStringTag && gOPD && getPrototypeOf) {
- forEach(typedArrays, function (typedArray) {
- if (typeof g[typedArray] === 'function') {
- 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 foundName = false;
- forEach(toStrTags, function (getter, typedArray) {
- if (!foundName) {
- try {
- var name = getter.call(value);
- if (name === typedArray) {
- foundName = name;
- }
- } catch (e) {}
- }
- });
- return foundName;
- };
- var isTypedArray = require('is-typed-array');
- module.exports = function whichTypedArray(value) {
- if (!isTypedArray(value)) { return false; }
- if (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }
- return tryTypedArrays(value);
- };
|