40 lines
759 B
TypeScript
40 lines
759 B
TypeScript
// adapted from https://stackoverflow.com/a/46432113/11613622
|
|
// eslint-disable-next-line ts/ban-ts-comment
|
|
// @ts-nocheck
|
|
export class LRUCache {
|
|
max
|
|
cache
|
|
constructor(max = 10) {
|
|
this.max = max
|
|
this.cache = new Map()
|
|
}
|
|
|
|
get(key) {
|
|
const item = this.cache.get(key)
|
|
if (item !== undefined) {
|
|
// refresh key
|
|
this.cache.delete(key)
|
|
this.cache.set(key, item)
|
|
}
|
|
return item
|
|
}
|
|
|
|
set(key, val) {
|
|
// refresh key
|
|
if (this.cache.has(key))
|
|
this.cache.delete(key)
|
|
// evict oldest
|
|
else if (this.cache.size === this.max)
|
|
this.cache.delete(this.first())
|
|
this.cache.set(key, val)
|
|
}
|
|
|
|
first() {
|
|
return this.cache.keys().next().value
|
|
}
|
|
|
|
clear() {
|
|
this.cache.clear()
|
|
}
|
|
}
|