UNPKG

@prezly/theme-kit-core

Version:

Data layer and utility library for developing Prezly themes with JavaScript

56 lines 1.46 kB
export var RECORDS_LIMIT = 10000; var GC_PROBABILITY = 1 / 100; var CACHE = new Map(); export function createSharedMemoryCache() { var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return { get(key, latestVersion) { var entry = CACHE.get("".concat(prefix).concat(key)); if (!entry) { return undefined; } if (entry.version < latestVersion) { CACHE.delete("".concat(prefix).concat(key)); return undefined; } var { value, version } = entry; CACHE.set("".concat(prefix).concat(key), { value, version, accessed: new Date().getTime() }); return value; }, set(key, value, version) { var entry = { value, version, accessed: new Date().getTime() }; CACHE.set("".concat(prefix).concat(key), entry); if (CACHE.size > RECORDS_LIMIT && Math.random() < GC_PROBABILITY) { gc(); } }, namespace(namespace) { return createSharedMemoryCache("".concat(prefix).concat(namespace, ":")); } }; } function gc() { Array.from(CACHE.entries()).sort((_ref, _ref2) => { var [, a] = _ref; var [, b] = _ref2; return -cmp(a.accessed, b.accessed); }).slice(RECORDS_LIMIT).forEach(_ref3 => { var [key] = _ref3; CACHE.delete(key); }); } function cmp(a, b) { if (a === b) return 0; return a < b ? -1 : 1; }