UNPKG

@tanstack/router-core

Version:

Modern and scalable routing for React applications

1 lines 3.01 kB
{"version":3,"file":"lru-cache.cjs","names":[],"sources":["../../src/lru-cache.ts"],"sourcesContent":["export type LRUCache<TKey, TValue> = {\n get: (key: TKey) => TValue | undefined\n set: (key: TKey, value: TValue) => void\n clear: () => void\n}\n\nexport function createLRUCache<TKey, TValue>(\n max: number,\n): LRUCache<TKey, TValue> {\n type Node = { prev?: Node; next?: Node; key: TKey; value: TValue }\n const cache = new Map<TKey, Node>()\n let oldest: Node | undefined\n let newest: Node | undefined\n\n const touch = (entry: Node) => {\n if (!entry.next) return\n if (!entry.prev) {\n entry.next.prev = undefined\n oldest = entry.next\n entry.next = undefined\n if (newest) {\n entry.prev = newest\n newest.next = entry\n }\n } else {\n entry.prev.next = entry.next\n entry.next.prev = entry.prev\n entry.next = undefined\n if (newest) {\n newest.next = entry\n entry.prev = newest\n }\n }\n newest = entry\n }\n\n return {\n get(key) {\n const entry = cache.get(key)\n if (!entry) return undefined\n touch(entry)\n return entry.value\n },\n set(key, value) {\n if (cache.size >= max && oldest) {\n const toDelete = oldest\n cache.delete(toDelete.key)\n if (toDelete.next) {\n oldest = toDelete.next\n toDelete.next.prev = undefined\n }\n if (toDelete === newest) {\n newest = undefined\n }\n }\n const existing = cache.get(key)\n if (existing) {\n existing.value = value\n touch(existing)\n } else {\n const entry: Node = { key, value, prev: newest }\n if (newest) newest.next = entry\n newest = entry\n if (!oldest) oldest = entry\n cache.set(key, entry)\n }\n },\n clear() {\n cache.clear()\n oldest = undefined\n newest = undefined\n },\n }\n}\n"],"mappings":";AAMA,SAAgB,eACd,KACwB;CAExB,MAAM,wBAAQ,IAAI,IAAgB;CAClC,IAAI;CACJ,IAAI;CAEJ,MAAM,SAAS,UAAgB;EAC7B,IAAI,CAAC,MAAM,MAAM;EACjB,IAAI,CAAC,MAAM,MAAM;GACf,MAAM,KAAK,OAAO,KAAA;GAClB,SAAS,MAAM;GACf,MAAM,OAAO,KAAA;GACb,IAAI,QAAQ;IACV,MAAM,OAAO;IACb,OAAO,OAAO;GAChB;EACF,OAAO;GACL,MAAM,KAAK,OAAO,MAAM;GACxB,MAAM,KAAK,OAAO,MAAM;GACxB,MAAM,OAAO,KAAA;GACb,IAAI,QAAQ;IACV,OAAO,OAAO;IACd,MAAM,OAAO;GACf;EACF;EACA,SAAS;CACX;CAEA,OAAO;EACL,IAAI,KAAK;GACP,MAAM,QAAQ,MAAM,IAAI,GAAG;GAC3B,IAAI,CAAC,OAAO,OAAO,KAAA;GACnB,MAAM,KAAK;GACX,OAAO,MAAM;EACf;EACA,IAAI,KAAK,OAAO;GACd,IAAI,MAAM,QAAQ,OAAO,QAAQ;IAC/B,MAAM,WAAW;IACjB,MAAM,OAAO,SAAS,GAAG;IACzB,IAAI,SAAS,MAAM;KACjB,SAAS,SAAS;KAClB,SAAS,KAAK,OAAO,KAAA;IACvB;IACA,IAAI,aAAa,QACf,SAAS,KAAA;GAEb;GACA,MAAM,WAAW,MAAM,IAAI,GAAG;GAC9B,IAAI,UAAU;IACZ,SAAS,QAAQ;IACjB,MAAM,QAAQ;GAChB,OAAO;IACL,MAAM,QAAc;KAAE;KAAK;KAAO,MAAM;IAAO;IAC/C,IAAI,QAAQ,OAAO,OAAO;IAC1B,SAAS;IACT,IAAI,CAAC,QAAQ,SAAS;IACtB,MAAM,IAAI,KAAK,KAAK;GACtB;EACF;EACA,QAAQ;GACN,MAAM,MAAM;GACZ,SAAS,KAAA;GACT,SAAS,KAAA;EACX;CACF;AACF"}