UNPKG

angular-caching

Version:

Lightweight library for data caching

55 lines 7.85 kB
import { Observable } from 'rxjs'; import { publishReplay, refCount, take } from 'rxjs/operators'; export function InMemoryCache(params) { if (params === void 0) { params = {}; } var originalFunc; var cacheSize = params.cacheSize || 1; var chacheTTL = params.ttl; var cacheMap = new Map(); var timersMap = new Map(); return function (target, propertyKey, descriptor) { originalFunc = descriptor.value; descriptor.value = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!args.length && cacheSize > 1) { throw new Error("If you don't provide arguments, cache size could not be bigger then 1"); } var id = JSON.stringify(args); var currentCacheSize = cacheMap.size; var data = cacheMap.get(id); if (!data) { data = originalFunc.apply(this, args); if (data instanceof Observable) { data = data.pipe(publishReplay(1), refCount(), take(1)); } if (currentCacheSize >= cacheSize) { if (timersMap.has(cacheMap.keys()[0])) { clearTimeout(timersMap.get(cacheMap.keys()[0])); timersMap.delete(cacheMap.keys()[0]); } cacheMap.delete(cacheMap.keys()[0]); } if (params.sync) { cacheMap.set(id, data); } else { Promise.resolve().then(function () { cacheMap.set(id, data); }); } if (chacheTTL || chacheTTL === 0) { var timerId = setTimeout(function () { cacheMap.delete(id); timersMap.delete(id); }, chacheTTL); timersMap.set(id, timerId); } } return data; }; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5tZW1vcnktY2FjaGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1jYWNoaW5nL2lubWVtb3J5LWNhY2hlLyIsInNvdXJjZXMiOlsiaW5tZW1vcnktY2FjaGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVL0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFpQztJQUFqQyx1QkFBQSxFQUFBLFdBQWlDO0lBQzdELElBQUksWUFBc0IsQ0FBQztJQUMzQixJQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUN4QyxJQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQzdCLElBQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQy9DLElBQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0lBRW5FLE9BQU8sVUFDTCxNQUFXLEVBQ1gsV0FBbUIsRUFDbkIsVUFBOEI7UUFFOUIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFaEMsVUFBVSxDQUFDLEtBQUssR0FBRztZQUFVLGNBQU87aUJBQVAsVUFBTyxFQUFQLHFCQUFPLEVBQVAsSUFBTztnQkFBUCx5QkFBTzs7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQzthQUNIO1lBQ0QsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDdkMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFdEMsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFO29CQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2dCQUNELElBQUksZ0JBQWdCLElBQUksU0FBUyxFQUFFO29CQUNqQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3JDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2hELFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3RDO29CQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO2dCQUNELElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDZixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDeEI7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDckIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7b0JBQ2hDLElBQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQzt3QkFDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdkIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNkLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUM1QjthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5NZW1vcnlDYWNoZU9wdGlvbnMge1xyXG4gIHR0bD86IG51bWJlcjtcclxuICBjYWNoZVNpemU/OiBudW1iZXI7XHJcbiAgc3luYz86IGJvb2xlYW47XHJcbn1cclxuXHJcbnR5cGUgQ2FjaGVkRGF0YSA9IFByb21pc2U8YW55PiB8IE9ic2VydmFibGU8YW55PiB8IGFueTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBJbk1lbW9yeUNhY2hlKHBhcmFtczogSW5NZW1vcnlDYWNoZU9wdGlvbnMgPSB7fSkge1xyXG4gIGxldCBvcmlnaW5hbEZ1bmM6IEZ1bmN0aW9uO1xyXG4gIGNvbnN0IGNhY2hlU2l6ZSA9IHBhcmFtcy5jYWNoZVNpemUgfHwgMTtcclxuICBjb25zdCBjaGFjaGVUVEwgPSBwYXJhbXMudHRsO1xyXG4gIGNvbnN0IGNhY2hlTWFwID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlZERhdGE+KCk7XHJcbiAgY29uc3QgdGltZXJzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PigpO1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKFxyXG4gICAgdGFyZ2V0OiBhbnksXHJcbiAgICBwcm9wZXJ0eUtleTogc3RyaW5nLFxyXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXHJcbiAgKSB7XHJcbiAgICBvcmlnaW5hbEZ1bmMgPSBkZXNjcmlwdG9yLnZhbHVlO1xyXG5cclxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gICAgICBpZiAoIWFyZ3MubGVuZ3RoICYmIGNhY2hlU2l6ZSA+IDEpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgSWYgeW91IGRvbid0IHByb3ZpZGUgYXJndW1lbnRzLCBjYWNoZSBzaXplIGNvdWxkIG5vdCBiZSBiaWdnZXIgdGhlbiAxYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaWQgPSBKU09OLnN0cmluZ2lmeShhcmdzKTtcclxuICAgICAgY29uc3QgY3VycmVudENhY2hlU2l6ZSA9IGNhY2hlTWFwLnNpemU7XHJcbiAgICAgIGxldCBkYXRhID0gY2FjaGVNYXAuZ2V0KGlkKTtcclxuICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgZGF0YSA9IG9yaWdpbmFsRnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICBkYXRhID0gZGF0YS5waXBlKHB1Ymxpc2hSZXBsYXkoMSksIHJlZkNvdW50KCksIHRha2UoMSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VycmVudENhY2hlU2l6ZSA+PSBjYWNoZVNpemUpIHtcclxuICAgICAgICAgIGlmICh0aW1lcnNNYXAuaGFzKGNhY2hlTWFwLmtleXMoKVswXSkpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyc01hcC5nZXQoY2FjaGVNYXAua2V5cygpWzBdKSk7XHJcbiAgICAgICAgICAgIHRpbWVyc01hcC5kZWxldGUoY2FjaGVNYXAua2V5cygpWzBdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhY2hlTWFwLmRlbGV0ZShjYWNoZU1hcC5rZXlzKClbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1zLnN5bmMpIHtcclxuICAgICAgICAgIGNhY2hlTWFwLnNldChpZCwgZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBjYWNoZU1hcC5zZXQoaWQsIGRhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFjaGVUVEwgfHwgY2hhY2hlVFRMID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhY2hlTWFwLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIHRpbWVyc01hcC5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgfSwgY2hhY2hlVFRMKTtcclxuICAgICAgICAgIHRpbWVyc01hcC5zZXQoaWQsIHRpbWVySWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=