diff --git a/packages/router-core/src/lru-cache.ts b/packages/router-core/src/lru-cache.ts index ee3ec7d7a0..a44d6251e3 100644 --- a/packages/router-core/src/lru-cache.ts +++ b/packages/router-core/src/lru-cache.ts @@ -45,8 +45,8 @@ export function createLRUCache( if (cache.size >= max && oldest) { const toDelete = oldest cache.delete(toDelete.key) + oldest = toDelete.next if (toDelete.next) { - oldest = toDelete.next toDelete.next.prev = undefined } if (toDelete === newest) { diff --git a/packages/router-core/tests/lru.test.ts b/packages/router-core/tests/lru.test.ts index f601816596..f1cb3d6011 100644 --- a/packages/router-core/tests/lru.test.ts +++ b/packages/router-core/tests/lru.test.ts @@ -21,4 +21,14 @@ describe('LRU Cache', () => { expect(cache.get('b')).toBeUndefined() expect(cache.get('a')).toBe(1) }) + + it('respects max=1 across multiple replacements', () => { + const cache = createLRUCache(1) + cache.set('a', 1) + cache.set('b', 2) // evicts 'a' + cache.set('c', 3) // evicts 'b' + expect(cache.get('a')).toBeUndefined() + expect(cache.get('b')).toBeUndefined() + expect(cache.get('c')).toBe(3) + }) })