···8080 );
81818282 // Group tracks by handle id & index by track uri
8383- const cache = cachedTracks.reduce((acc: Record<string, Record<string, Track>>, track: Track) => {
8383+ const cache: Record<string, Record<string, Track>> = {};
8484+8585+ cachedTracks.forEach((track: Track) => {
8486 const handleId = trackHandleId(track);
8585- if (!handleId) return acc;
8787+ if (!handleId) return;
86888787- return { ...acc, [handleId]: { ...(acc[handleId] || {}), [track.uri]: track } };
8888- }, {});
8989+ cache[handleId] ??= {};
9090+ cache[handleId][track.uri] = track;
9191+ });
89929093 // Replace indexes in groups of which we have the handle.
9194 // Keeping around tracks with handles we don't have access to,
9295 // and removing tracks that are no longer available (for handles we do have access to).
9696+9797+ // TODO: Refactor to not use `reduce`, for performance.
9398 const groups = processed.flat(1).reduce(
9499 (acc, track) => {
95100 const handleId = trackHandleId(track);