46 lines
1.6 KiB
Plaintext
46 lines
1.6 KiB
Plaintext
import getFuncName from 'get-func-name'
|
|
import { truncator, truncate, inspectProperty, inspectList } from './helpers'
|
|
|
|
const getArrayName = array => {
|
|
// We need to special case Node.js' Buffers, which report to be Uint8Array
|
|
if (typeof Buffer === 'function' && array instanceof Buffer) {
|
|
return 'Buffer'
|
|
}
|
|
if (array[Symbol.toStringTag]) {
|
|
return array[Symbol.toStringTag]
|
|
}
|
|
return getFuncName(array.constructor)
|
|
}
|
|
|
|
export default function inspectTypedArray(array, options) {
|
|
const name = getArrayName(array)
|
|
options.truncate -= name.length + 4
|
|
// Object.keys will always output the Array indices first, so we can slice by
|
|
// `array.length` to get non-index properties
|
|
const nonIndexProperties = Object.keys(array).slice(array.length)
|
|
if (!array.length && !nonIndexProperties.length) return `${name}[]`
|
|
// As we know TypedArrays only contain Unsigned Integers, we can skip inspecting each one and simply
|
|
// stylise the toString() value of them
|
|
let output = ''
|
|
for (let i = 0; i < array.length; i++) {
|
|
const string = `${options.stylize(truncate(array[i], options.truncate), 'number')}${
|
|
i === array.length - 1 ? '' : ', '
|
|
}`
|
|
options.truncate -= string.length
|
|
if (array[i] !== array.length && options.truncate <= 3) {
|
|
output += `${truncator}(${array.length - array[i] + 1})`
|
|
break
|
|
}
|
|
output += string
|
|
}
|
|
let propertyContents = ''
|
|
if (nonIndexProperties.length) {
|
|
propertyContents = inspectList(
|
|
nonIndexProperties.map(key => [key, array[key]]),
|
|
options,
|
|
inspectProperty
|
|
)
|
|
}
|
|
return `${name}[ ${output}${propertyContents ? `, ${propertyContents}` : ''} ]`
|
|
}
|