59 lines
1.3 KiB
JavaScript
59 lines
1.3 KiB
JavaScript
/**
|
|
* @author Toru Nagashima
|
|
* See LICENSE file in root directory for full license.
|
|
*/
|
|
"use strict"
|
|
|
|
const SKIP_TIME = 5000
|
|
|
|
/**
|
|
* The class of cache.
|
|
* The cache will dispose of each value if the value has not been accessed
|
|
* during 5 seconds.
|
|
*/
|
|
module.exports = class Cache {
|
|
/**
|
|
* Initialize this cache instance.
|
|
*/
|
|
constructor() {
|
|
this.map = new Map()
|
|
}
|
|
|
|
/**
|
|
* Get the cached value of the given key.
|
|
* @param {any} key The key to get.
|
|
* @returns {any} The cached value or null.
|
|
*/
|
|
get(key) {
|
|
const entry = this.map.get(key)
|
|
const now = Date.now()
|
|
|
|
if (entry) {
|
|
if (entry.expire > now) {
|
|
entry.expire = now + SKIP_TIME
|
|
return entry.value
|
|
}
|
|
this.map.delete(key)
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* Set the value of the given key.
|
|
* @param {any} key The key to set.
|
|
* @param {any} value The value to set.
|
|
* @returns {void}
|
|
*/
|
|
set(key, value) {
|
|
const entry = this.map.get(key)
|
|
const expire = Date.now() + SKIP_TIME
|
|
|
|
if (entry) {
|
|
entry.value = value
|
|
entry.expire = expire
|
|
} else {
|
|
this.map.set(key, { value, expire })
|
|
}
|
|
}
|
|
}
|