src/internal/base/baseIsTypedArray.ts
/** `Object#toString` result references. */
import { isObjectLike } from '~/is/isObject'
import isLength from '~/is/isLength'
import type { TagType } from './baseGetTag'
import baseGetTag from './baseGetTag'
const argumentsTag = '[object Arguments]',
arrayTag = '[object Array]',
boolTag = '[object Boolean]',
dateTag = '[object Date]',
errorTag = '[object Error]',
funcTag = '[object Function]',
mapTag = '[object Map]',
numberTag = '[object Number]',
objectTag = '[object Object]',
regexpTag = '[object RegExp]',
setTag = '[object Set]',
stringTag = '[object String]',
weakMapTag = '[object WeakMap]'
const arrayBufferTag = '[object ArrayBuffer]',
dataViewTag = '[object DataView]',
float32Tag = '[object Float32Array]',
float64Tag = '[object Float64Array]',
int8Tag = '[object Int8Array]',
int16Tag = '[object Int16Array]',
int32Tag = '[object Int32Array]',
uint8Tag = '[object Uint8Array]',
uint8ClampedTag = '[object Uint8ClampedArray]',
uint16Tag = '[object Uint16Array]',
uint32Tag = '[object Uint32Array]'
/** Used to identify `toStringTag` values of typed arrays. */
const typedArrayTags = <Record<TagType | string, boolean>>{}
typedArrayTags[float32Tag] =
typedArrayTags[float64Tag] =
typedArrayTags[int8Tag] =
typedArrayTags[int16Tag] =
typedArrayTags[int32Tag] =
typedArrayTags[uint8Tag] =
typedArrayTags[uint8ClampedTag] =
typedArrayTags[uint16Tag] =
typedArrayTags[uint32Tag] =
true
typedArrayTags[argumentsTag] =
typedArrayTags[arrayTag] =
typedArrayTags[arrayBufferTag] =
typedArrayTags[boolTag] =
typedArrayTags[dataViewTag] =
typedArrayTags[dateTag] =
typedArrayTags[errorTag] =
typedArrayTags[funcTag] =
typedArrayTags[mapTag] =
typedArrayTags[numberTag] =
typedArrayTags[objectTag] =
typedArrayTags[regexpTag] =
typedArrayTags[setTag] =
typedArrayTags[stringTag] =
typedArrayTags[weakMapTag] =
false
/**
* The base implementation of `isTypedArray` without Node.js optimizations.
*
* @private
*/
export default function baseIsTypedArray(value: any): boolean {
return isObjectLike(value) && isLength(value.length) && typedArrayTags[baseGetTag(value)]
}