Later Mom?
You know when you were a kid and mom told you to clean your room,
when you was busy with something else, your answer would always be the same: 'later, mom'.
This library is the universal 0 dependencies lazy cache implementation,
leveraging usage of es6 data structures.
Installation
yarn add @pietal.dev/cache --save
Usage
const { Cache } = require("@pietal.dev/cache")
const maxSize = 2
const getUser = async (id) => {
const response = await fetch("https://dummyjson.com/users/" + id)
const { firstName, lastName, address } = await response.json()
return {
id,
name: `${firstName} ${lastName}`,
address,
}
}
const usersCached = new Cache(getUser, maxSize)
Promise.all([
usersCached.get(1),
usersCached.get(2),
usersCached.get(3),
usersCached.get(4),
]).then((users) => {
console.log(usersCached.data)
console.log(usersCached.size)
})
const { Cache } = require("@pietal.dev/cache")
const cache = new Cache(() => Math.random())
const a = cache.get(1, 2, 3)
const b = cache.get(1, 2, 3)
const c = cache.get(1, 2)
const d = cache.get(1, 2, 4)
console.log(a === b)
console.log(a !== c)
console.log(a !== d)
API
class Cache<T = unknown> {
constructor(factoryFunction: (...args: any[]) => T, maxSize: number = Infinity) {
}
}
- creates a LaterMom (Lazy Map) instance with factory function for lazy cache
methods
get(...args: any[]): T - get entry at key created from args, lazy instantiated by factory
createKey(...args: any[]): string - creates string key
create(...args: any[]): T - wrapped factory function
hasKey(key: string): boolean - check if has entry at key
has(...args: any[]): boolean - check if has entry at key created from args
deleteKey(key: string): boolean - deletes entry from data at key
delete(...args): boolean - deletes entry from data at key created from args
size: number - returns size of data
maxSize: number - on insert the oldest items are deleted until reached maxSize
properties:
Tests
$ jest
PASS ./index.test.js
✓ Calls factory once when asked for same key many times (62 ms)
✓ Getter is able to handle multiple arguments
✓ Readme has working code (1 ms)
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 0.946 s, estimated 1 s
Ran all test suites.
Done in 1.44s.
License
MIT
Author
Jacek Pietal @ 2019-2021