@fingerprintsoft/angular-spring-hal
Version:
This Angular module offers a HAL/JSON http-client to easily interact with a Spring Data Rest API or any API that implements the Spring Data Rest resource model
97 lines • 14.4 kB
JavaScript
import * as hash from 'hash.js';
export var EvictStrategy;
(function (EvictStrategy) {
EvictStrategy[EvictStrategy["EvictTrivial"] = 0] = "EvictTrivial";
EvictStrategy[EvictStrategy["EvictSmart"] = 1] = "EvictSmart";
})(EvictStrategy || (EvictStrategy = {}));
// @dynamic
export class CacheHelper {
static initClearCacheProcess() {
if (this.isActive) {
setInterval(() => {
Date.now();
if (CacheHelper.evictStrategy == EvictStrategy.EvictTrivial)
this.evictAll();
else if (CacheHelper.evictStrategy == EvictStrategy.EvictSmart) {
this.cacheMap.forEach((value, key) => {
if (value.expire > 0 && Date.now() > value.expire)
this.evict(key);
});
}
}, 15 * 60 * 1000);
}
}
static ifPresent(link, body, params, isActiveLocal = true) {
if (!this.isActive || !isActiveLocal)
return false;
return this.cacheMap.has(CacheHelper.key(link, body, params));
}
static getArray(link, body, params) {
return this.cacheMap.get(CacheHelper.key(link, body, params)).entity;
}
static putArray(link, array, expireMs = 10 * 60 * 1000, body, params) {
if (this.isActive) {
let resourceExpire = { entity: array, expire: CacheHelper.expireDate(expireMs) };
this.cacheMap.set(CacheHelper.key(link, body, params), resourceExpire);
}
}
static get(link, body, params) {
return this.cacheMap.get(CacheHelper.key(link, body, params)).entity;
}
static put(link, array, expireMs = 10 * 60 * 1000, body, params) {
if (this.isActive) {
let resourceExpire = { entity: array, expire: CacheHelper.expireDate(expireMs) };
this.cacheMap.set(CacheHelper.key(link, body, params), resourceExpire);
}
}
static expireDate(expireMs) {
if (expireMs == 0)
return 0;
return Date.now() + expireMs;
}
static key(link, body, halOptions) {
let k = link;
if (body)
k += body;
if (halOptions)
k += CacheHelper.toStringParams(halOptions);
let key = hash.sha256().update(k).digest('hex');
return key;
}
static toStringParams(options) {
let s = '';
if (options.size) {
s = 'size=' + options.size.toString() + '&';
}
if (options.notPaged) {
s += 'notPaged=true&';
}
if (options.params) {
options.params.forEach(param => {
s += param.key + '=' + param.value + '&';
});
}
if (options.sort) {
options.sort.forEach(sortInfo => {
let sortString = '';
sortString = sortInfo.path ? sortString.concat(sortInfo.path) : sortString;
sortString = sortInfo.order ? sortString.concat(',').concat(sortInfo.order) : sortString;
s += 'sort' + sortString + '&';
});
}
return s;
}
static evict(key) {
this.cacheMap.delete(key);
}
static evictAll() {
this.cacheMap.clear();
}
}
CacheHelper.cacheMap = new Map();
CacheHelper.isActive = true;
// TODO
CacheHelper.maxEntries = 100;
CacheHelper.evictStrategy = EvictStrategy.EvictTrivial;
CacheHelper.defaultExpire = 10 * 60 * 1000; //10 minutes
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmluZ2VycHJpbnRzb2Z0L2FuZ3VsYXItc3ByaW5nLWhhbC9zcmMvbGliL2NhY2hlL2NhY2hlLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUtoQyxNQUFNLENBQU4sSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3JCLGlFQUFZLENBQUE7SUFDWiw2REFBVSxDQUFBO0FBQ2QsQ0FBQyxFQUhXLGFBQWEsS0FBYixhQUFhLFFBR3hCO0FBRUQsV0FBVztBQUNYLE1BQU0sT0FBTyxXQUFXO0lBU3BCLE1BQU0sQ0FBQyxxQkFBcUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxZQUFZO29CQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ2YsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7b0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBMEIsRUFBRSxHQUFXLEVBQUUsRUFBRTt3QkFDOUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU07NEJBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLFNB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QUFNLENBQUMsUUFBUTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7QUF4R2Msb0JBQVEsR0FBcUMsSUFBSSxHQUFHLEVBQStCLENBQUM7QUFFNUYsb0JBQVEsR0FBRyxJQUFJLENBQUM7QUFDdkIsT0FBTztBQUNBLHNCQUFVLEdBQVcsR0FBRyxDQUFDO0FBQ3pCLHlCQUFhLEdBQWtCLGFBQWEsQ0FBQyxZQUFZLENBQUM7QUFDMUQseUJBQWEsR0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscy9yZXNvdXJjZSc7XG5pbXBvcnQgKiBhcyBoYXNoIGZyb20gJ2hhc2guanMnO1xuaW1wb3J0IHsgSGFsT3B0aW9ucyB9IGZyb20gJy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlRXhwaXJlPFQgZXh0ZW5kcyBSZXNvdXJjZT4gPSB7IGVudGl0eTogYW55LCBib2R5PzogYW55LCBwYXJhbXM/OiBIYWxPcHRpb25zLCBleHBpcmU6IG51bWJlciB9O1xuXG5leHBvcnQgZW51bSBFdmljdFN0cmF0ZWd5IHtcbiAgICBFdmljdFRyaXZpYWwsXG4gICAgRXZpY3RTbWFydFxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIENhY2hlSGVscGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBjYWNoZU1hcDogTWFwPHN0cmluZywgUmVzb3VyY2VFeHBpcmU8YW55Pj4gPSBuZXcgTWFwPHN0cmluZywgUmVzb3VyY2VFeHBpcmU8YW55Pj4oKTtcblxuICAgIHN0YXRpYyBpc0FjdGl2ZSA9IHRydWU7XG4gICAgLy8gVE9ET1xuICAgIHN0YXRpYyBtYXhFbnRyaWVzOiBudW1iZXIgPSAxMDA7XG4gICAgc3RhdGljIGV2aWN0U3RyYXRlZ3k6IEV2aWN0U3RyYXRlZ3kgPSBFdmljdFN0cmF0ZWd5LkV2aWN0VHJpdmlhbDtcbiAgICBzdGF0aWMgZGVmYXVsdEV4cGlyZTogbnVtYmVyID0gMTAgKiA2MCAqIDEwMDA7IC8vMTAgbWludXRlc1xuXG4gICAgc3RhdGljIGluaXRDbGVhckNhY2hlUHJvY2VzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChDYWNoZUhlbHBlci5ldmljdFN0cmF0ZWd5ID09IEV2aWN0U3RyYXRlZ3kuRXZpY3RUcml2aWFsKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2aWN0QWxsKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQ2FjaGVIZWxwZXIuZXZpY3RTdHJhdGVneSA9PSBFdmljdFN0cmF0ZWd5LkV2aWN0U21hcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZU1hcC5mb3JFYWNoKCh2YWx1ZTogUmVzb3VyY2VFeHBpcmU8YW55Piwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5leHBpcmUgPiAwICYmIERhdGUubm93KCkgPiB2YWx1ZS5leHBpcmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmljdChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxNSAqIDYwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaWZQcmVzZW50PFQgZXh0ZW5kcyBSZXNvdXJjZT4obGluazogc3RyaW5nLCBib2R5Pzogc3RyaW5nLCBwYXJhbXM/OiBIYWxPcHRpb25zLCBpc0FjdGl2ZUxvY2FsOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUgfHwgIWlzQWN0aXZlTG9jYWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlTWFwLmhhcyhDYWNoZUhlbHBlci5rZXkobGluaywgYm9keSwgcGFyYW1zKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFycmF5PFQgZXh0ZW5kcyBSZXNvdXJjZT4obGluazogc3RyaW5nLCBib2R5Pzogc3RyaW5nLCBwYXJhbXM/OiBIYWxPcHRpb25zKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVNYXAuZ2V0KENhY2hlSGVscGVyLmtleShsaW5rLCBib2R5LCBwYXJhbXMpKS5lbnRpdHk7XG4gICAgfVxuXG4gICAgc3RhdGljIHB1dEFycmF5PFQgZXh0ZW5kcyBSZXNvdXJjZT4obGluazogc3RyaW5nLCBhcnJheTogVFtdLCBleHBpcmVNczogbnVtYmVyID0gMTAgKiA2MCAqIDEwMDAsIGJvZHk/OiBzdHJpbmcsIHBhcmFtcz86IEhhbE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGxldCByZXNvdXJjZUV4cGlyZTogUmVzb3VyY2VFeHBpcmU8VD4gPSB7ZW50aXR5OiBhcnJheSwgZXhwaXJlOiBDYWNoZUhlbHBlci5leHBpcmVEYXRlKGV4cGlyZU1zKX07XG4gICAgICAgICAgICB0aGlzLmNhY2hlTWFwLnNldChDYWNoZUhlbHBlci5rZXkobGluaywgYm9keSwgcGFyYW1zKSwgcmVzb3VyY2VFeHBpcmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldDxUIGV4dGVuZHMgUmVzb3VyY2U+KGxpbms6IHN0cmluZywgYm9keT86IHN0cmluZywgcGFyYW1zPzogSGFsT3B0aW9ucyk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZU1hcC5nZXQoQ2FjaGVIZWxwZXIua2V5KGxpbmssIGJvZHksIHBhcmFtcykpLmVudGl0eTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHV0PFQgZXh0ZW5kcyBSZXNvdXJjZT4obGluazogc3RyaW5nLCBhcnJheTogVCwgZXhwaXJlTXM6IG51bWJlciA9IDEwICogNjAgKiAxMDAwLCBib2R5Pzogc3RyaW5nLCBwYXJhbXM/OiBIYWxPcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBsZXQgcmVzb3VyY2VFeHBpcmU6IFJlc291cmNlRXhwaXJlPFQ+ID0ge2VudGl0eTogYXJyYXksIGV4cGlyZTogQ2FjaGVIZWxwZXIuZXhwaXJlRGF0ZShleHBpcmVNcyl9O1xuICAgICAgICAgICAgdGhpcy5jYWNoZU1hcC5zZXQoQ2FjaGVIZWxwZXIua2V5KGxpbmssIGJvZHksIHBhcmFtcyksIHJlc291cmNlRXhwaXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGV4cGlyZURhdGUoZXhwaXJlTXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChleHBpcmVNcyA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdygpICsgZXhwaXJlTXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMga2V5KGxpbms6IHN0cmluZywgYm9keT86IHN0cmluZywgaGFsT3B0aW9ucz86IEhhbE9wdGlvbnMpOiBzdHJpbmcge1xuXG4gICAgICAgIGxldCBrOiBzdHJpbmcgPSBsaW5rO1xuICAgICAgICBpZiAoYm9keSlcbiAgICAgICAgICAgIGsgKz0gYm9keTtcblxuICAgICAgICBpZiAoaGFsT3B0aW9ucylcbiAgICAgICAgICAgIGsgKz0gQ2FjaGVIZWxwZXIudG9TdHJpbmdQYXJhbXMoaGFsT3B0aW9ucyk7XG5cbiAgICAgICAgbGV0IGtleTogc3RyaW5nID0gaGFzaC5zaGEyNTYoKS51cGRhdGUoaykuZGlnZXN0KCdoZXgnKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0b1N0cmluZ1BhcmFtcyhvcHRpb25zOiBIYWxPcHRpb25zKSB7XG4gICAgICAgIGxldCBzOiBzdHJpbmcgPSAnJztcbiAgICAgICAgaWYgKG9wdGlvbnMuc2l6ZSkge1xuICAgICAgICAgICAgcyA9ICdzaXplPScgKyBvcHRpb25zLnNpemUudG9TdHJpbmcoKSArICcmJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm5vdFBhZ2VkKSB7XG4gICAgICAgICAgICBzICs9ICdub3RQYWdlZD10cnVlJic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFyYW1zLmZvckVhY2gocGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIHMgKz0gcGFyYW0ua2V5ICsgJz0nICsgcGFyYW0udmFsdWUgKyAnJic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydC5mb3JFYWNoKHNvcnRJbmZvID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgc29ydFN0cmluZyA9ICcnO1xuICAgICAgICAgICAgICAgIHNvcnRTdHJpbmcgPSBzb3J0SW5mby5wYXRoID8gc29ydFN0cmluZy5jb25jYXQoc29ydEluZm8ucGF0aCkgOiBzb3J0U3RyaW5nO1xuICAgICAgICAgICAgICAgIHNvcnRTdHJpbmcgPSBzb3J0SW5mby5vcmRlciA/IHNvcnRTdHJpbmcuY29uY2F0KCcsJykuY29uY2F0KHNvcnRJbmZvLm9yZGVyKSA6IHNvcnRTdHJpbmc7XG4gICAgICAgICAgICAgICAgcyArPSAnc29ydCcgKyBzb3J0U3RyaW5nICsgJyYnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2aWN0KGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY2FjaGVNYXAuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2aWN0QWxsKCkge1xuICAgICAgICB0aGlzLmNhY2hlTWFwLmNsZWFyKCk7XG4gICAgfVxufVxuIl19