{"version":3,"file":"create-lru-cache.mjs","sources":["../../src/lib/create-lru-cache.ts"],"sourcesContent":["interface LruCache<Key, Value> {\n  get(key: Key): Value | undefined;\n  set(key: Key, value: Value): Value;\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport function createLruCache<Key, Value>(\n  maxCacheSize: number\n): LruCache<Key, Value> {\n  if (maxCacheSize < 1)\n    return { get: () => undefined, set: (_, value) => value };\n\n  let cacheSize = 0;\n  let cache = new Map<Key, Value>();\n  let previousCache = new Map<Key, Value>();\n\n  function update(key: Key, value: Value) {\n    cache.set(key, value);\n    cacheSize++;\n\n    if (cacheSize > maxCacheSize) {\n      cacheSize = 0;\n      previousCache = cache;\n      cache = new Map();\n    }\n  }\n\n  return {\n    get(key) {\n      let value = cache.get(key);\n      if (value !== undefined) return value;\n      if ((value = previousCache.get(key)) !== undefined) {\n        update(key, value);\n        return value;\n      }\n    },\n    set(key, value) {\n      if (cache.has(key)) cache.set(key, value);\n      else update(key, value);\n      return value;\n    },\n  };\n}\n"],"names":["createLruCache","maxCacheSize","get","undefined","set","_","value","cacheSize","cache","Map","previousCache","update","key","has"],"mappings":"AAKA;AACM,SAAUA,cAAc,CAC5BC,YAAoB,EAAA;AAEpB,EAAA,IAAIA,YAAY,GAAG,CAAC,EAClB,OAAO;AAAEC,IAAAA,GAAG,EAAE,SAAA,GAAA,GAAA;AAAA,MAAA,OAAMC,SAAS,CAAA;AAAA,KAAA;AAAEC,IAAAA,GAAG,EAAE,SAAA,GAAA,CAACC,CAAC,EAAEC,KAAK,EAAA;AAAA,MAAA,OAAKA,KAAK,CAAA;AAAA,KAAA;GAAE,CAAA;EAE3D,IAAIC,SAAS,GAAG,CAAC,CAAA;AACjB,EAAA,IAAIC,KAAK,GAAG,IAAIC,GAAG,EAAc,CAAA;AACjC,EAAA,IAAIC,aAAa,GAAG,IAAID,GAAG,EAAc,CAAA;AAEzC,EAAA,SAASE,MAAM,CAACC,GAAQ,EAAEN,KAAY,EAAA;AACpCE,IAAAA,KAAK,CAACJ,GAAG,CAACQ,GAAG,EAAEN,KAAK,CAAC,CAAA;AACrBC,IAAAA,SAAS,EAAE,CAAA;IAEX,IAAIA,SAAS,GAAGN,YAAY,EAAE;AAC5BM,MAAAA,SAAS,GAAG,CAAC,CAAA;AACbG,MAAAA,aAAa,GAAGF,KAAK,CAAA;MACrBA,KAAK,GAAG,IAAIC,GAAG,EAAE,CAAA;AAClB,KAAA;AACH,GAAA;EAEA,OAAO;IACLP,GAAG,EAAA,SAAA,GAAA,CAACU,GAAG,EAAA;AACL,MAAA,IAAIN,KAAK,GAAGE,KAAK,CAACN,GAAG,CAACU,GAAG,CAAC,CAAA;AAC1B,MAAA,IAAIN,KAAK,KAAKH,SAAS,EAAE,OAAOG,KAAK,CAAA;MACrC,IAAI,CAACA,KAAK,GAAGI,aAAa,CAACR,GAAG,CAACU,GAAG,CAAC,MAAMT,SAAS,EAAE;AAClDQ,QAAAA,MAAM,CAACC,GAAG,EAAEN,KAAK,CAAC,CAAA;AAClB,QAAA,OAAOA,KAAK,CAAA;AACb,OAAA;KACF;AACDF,IAAAA,GAAG,EAACQ,SAAAA,GAAAA,CAAAA,GAAG,EAAEN,KAAK,EAAA;MACZ,IAAIE,KAAK,CAACK,GAAG,CAACD,GAAG,CAAC,EAAEJ,KAAK,CAACJ,GAAG,CAACQ,GAAG,EAAEN,KAAK,CAAC,CAAC,KACrCK,MAAM,CAACC,GAAG,EAAEN,KAAK,CAAC,CAAA;AACvB,MAAA,OAAOA,KAAK,CAAA;AACd,KAAA;GACD,CAAA;AACH;;;;"}