@restorecommerce/chassis-srv
Version:
Restore Commerce microservice chassis
49 lines • 1.57 kB
JavaScript
import { isNullish } from 'remeda';
import { createCache } from 'cache-manager';
import Keyv from 'keyv';
import { LRUCache } from 'lru-cache';
/**
* A key, value map containing cache providers.
* Cache providers are registered with the register function.
*/
const providers = {};
/**
* Register a cache provider.
* Providers need to be compatible to the node-cache-manager module.
* https://github.com/BryanDonovan/node-cache-manager
* @param {string} name cache provider identifier
* @param {constructor} provider cache store constructor
*/
export const register = (name, provider) => {
providers[name] = provider;
};
// register defaults
// add memory provider by default, since it is included with the cache-manager.
register('memory', (config, logger) => {
const options = {
max: config?.max || 500,
dispose: config?.dispose,
allowStale: config?.allowStale,
ttl: config?.ttl || 5000,
};
const lruCache = new LRUCache(options);
const keyv = new Keyv({ store: lruCache });
const cache = createCache({ stores: [keyv] });
return cache;
});
/**
* Get a new cache instance.
* @param {Object} config Cache configuration
* @param [Logger] logger
* @return Cache instance
*/
export const get = (config, logger) => {
if (isNullish(config)) {
throw new Error('missing argument config');
}
const providerName = config[0].provider;
const provider = providers[providerName];
const cache = provider(config, logger);
return cache;
};
//# sourceMappingURL=index.js.map