diff --git a/app/components/Avatar.tsx b/app/components/Avatar.tsx index 0b4573a82..1e07e5557 100644 --- a/app/components/Avatar.tsx +++ b/app/components/Avatar.tsx @@ -25,6 +25,7 @@ export function Avatar({ (arr: T[], n: number) { + const result = at(arr, n); + if (result === undefined) { + throw new Error(`Index ${n} out of bounds. Array length is ${arr.length}`); + } + return result; +} + +// https://github.com/tc39/proposal-relative-indexing-method#polyfill +/** Array.at polyfill */ +function at(arr: T[], n: number) { + // ToInteger() abstract op + n = Math.trunc(n) || 0; + // Allow negative indexing from the end + if (n < 0) n += arr.length; + // OOB access is guaranteed to return undefined + if (n < 0 || n >= arr.length) return undefined; + // Otherwise, this is just normal property access + return arr[n]; +}