astro-ghostcms/.pnpm-store/v3/files/40/a8c86f571a88710608e374ae395...

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}` : ''} ]`
}