Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@dwelle/toad-cache
Advanced tools
Least-Recently-Used and First-In-First-Out caches for Client or Server.
import { Lru, Fifo } from 'toad-cache'
const lruCache = new Lru(max, ttl = 0)
const fifoCache = new Fifo(max, ttl = 0)
Clears the contents of the cache
Example
cache.clear()
Removes item from cache
param {String} key Item key
Example
cache.delete('myKey')
Removes items from cache
param {String[]} keys Item keys
Example
cache.deleteMany(['myKey', 'myKey2'])
Evicts the least recently used item from cache
Example
cache.evict()
Gets expiration time for cached item
param {String} key Item key
return {Mixed} Undefined or number (epoch time)
Example
const item = cache.expiresAt('myKey')
Item in "first" or "bottom" position
Example
const cache = new Lru()
cache.first // null - it's a new cache!
Gets cached item and marks it as recently used (pushes to the back of the list of the candidates for the eviction)
param {String} key Item key
return {Mixed} Undefined or Item value
Example
const item = cache.get('myKey')
Gets multiple cached items and marks them as recently used (pushes to the back of the list of the candidates for the eviction)
param {String[]} keys Item keys
return {Mixed[]} Undefined or Item values
Example
const item = cache.getMany(['myKey', 'myKey2'])
Returns an Array
of cache item keys.
return {Array} Array of keys
Example
console.log(cache.keys())
Max items to hold in cache (1000)
Example
const cache = new Lru(500)
cache.max // 500
Item in "last" or "top" position
Example
const cache = new Lru()
cache.last // null - it's a new cache!
Sets item in cache as first
param {String} key Item key
param {Mixed} value Item value
Example
cache.set('myKey', { prop: true })
Number of items in cache
Example
const cache = new Lru()
cache.size // 0 - it's a new cache!
Milliseconds an item will remain in cache; lazy expiration upon next get()
of an item
Example
const cache = new Lru()
cache.ttl = 3e4
In case you want to gather information on cache hit/miss/expiration ratio, you can use LruHitStatistics class:
const sharedRecord = new HitStatisticsRecord() // if you want to use single record object for all of caches, create it manually and pass to each cache
const cache = new LruHitStatistics({
cacheId: 'some-cache-id',
globalStatisticsRecord: sharedRecord,
statisticTtlInHours: 24, // how often to rotate statistics. On every rotation, data, that is older than one day, is removed
max: 1000,
ttlInMsecs: 0,
})
You can retrieve accumulated statistics from the cache, or from the record directly:
// this is the same
const statistics = sharedRecord.getStatistics()
const alsoStatistics = cache.getStatistics()
/*
{
'some-cache-id': {
'2023-04-06': {
expirations: 0,
hits: 0,
misses: 1,
},
},
}
Note that date here reflects start of the rotation. If statistics weren't rotated yet, and another day started, it will still be counted against the day of the rotation start
*/
Copyright (c) 2023 Igor Savin
Based on tiny-lru, created by Jason Mulligan
Licensed under the MIT license.
FAQs
LRU and FIFO caches for Client or Server
We found that @dwelle/toad-cache demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.