| 42 | return entry.value |
| 43 | }, |
| 44 | set(key, value) { |
| 45 | if (cache.size >= max && oldest) { |
| 46 | const toDelete = oldest |
| 47 | cache.delete(toDelete.key) |
| 48 | if (toDelete.next) { |
| 49 | oldest = toDelete.next |
| 50 | toDelete.next.prev = undefined |
| 51 | } |
| 52 | if (toDelete === newest) { |
| 53 | newest = undefined |
| 54 | } |
| 55 | } |
| 56 | const existing = cache.get(key) |
| 57 | if (existing) { |
| 58 | existing.value = value |
| 59 | touch(existing) |
| 60 | } else { |
| 61 | const entry: Node = { key, value, prev: newest } |
| 62 | if (newest) newest.next = entry |
| 63 | newest = entry |
| 64 | if (!oldest) oldest = entry |
| 65 | cache.set(key, entry) |
| 66 | } |
| 67 | }, |
| 68 | clear() { |
| 69 | cache.clear() |
| 70 | oldest = undefined |