A simple cache wrapper for functions. Only need 1 line of code to cache the function result.
Highglights
- Simple wrapper for function (support async)
- Cache TTL
- Cache signature validation (Optional)
- Less pollution in your code
- Support Array/Set/Map in returned type
- Support LocalStorage or Memory as cache store
npm i side-cache
One Line for Cache
import { cacheable } from 'side-cache';
const getUser = async (userId) => {
const resp = await fetch('https://gorest.co.in/public/v1/users?id=' + userId);
return await resp.json()
}
const getCacheableUser = cacheable(getUser, (userId)=> `user.${userId}`)
const userInfo = getCacheableUser(1)
console.log(userInfo)
Cache Options
import { cacheable } from 'side-cache';
const getUser = async (userId) => {
const resp = await fetch('https://gorest.co.in/public/v1/users?id=' + userId);
return await resp.json()
}
//Cache will expired after 1 hour
const getCacheableUser = cacheable(
getUser,
(userId) => `user.${userId}`,
{timeToLive: 3600}
)
const userInfo = getCacheableUser(1)
console.log(userInfo)
Global Config
import { configure } from 'side-cache';
configure({
keyPrefix: "cacheable",
signer: (data:string) => createHash('sha256').update(data).digest('hex'), //Default is null
timeToLive: 3600 * 24 // Default ttl is 1 day (seconds)
//cacheStore: new LocalStorageCacheStore() - Defautl store in browser.
//cacheStore: new LocalMemCacheStore() - Default store in Node.
})
cacheable
declare const cacheable: (
target: Function, // support sync/async function
cacheKeyBuilder: string | Function, // only support sync function
options?: CacheOptions
) => any;
interface CacheOptions {
keyPrefix?: string | Function; // Support sync/async function
signer?: (data:string) => string; // Function use to do signature validation
timeToLive?: number;
}
configure
declare const configure: (options?: GlobalCacheOptions) => void;
interface GlobalCacheOptions extends CacheOptions {
cacheStore?: CacheStore;
serializer?: Serializer<any>;
}
-
What kind of storage policy support?
Currently we only support LocalStorage(in broswer) and LocalMemory(in node), it been selected automatically while launch your application.
-
Does Browser application supported?
Yes.
-
Please raise you questions in issues!