rage-framework
Version:
## How to Install *server-side* ```bash npm install @rage-framework/server ```
71 lines • 2.24 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheLayer = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
class CacheLayer {
constructor(layer) {
this.items = new rxjs_1.BehaviorSubject([]);
this.map = new Map();
this.name = layer.name;
this.config = layer.config;
this.initHook(layer);
}
get(name) {
return this.map.get(name);
}
initHook(layer) {
if (this.config.maxAge) {
this.onExpireAll(layer);
}
}
onExpireAll(layer) {
layer.items.forEach(item => this.onExpire(item['key']));
}
putItemHook(layerItem) {
if (this.config.maxAge) {
this.onExpire(layerItem['key']);
}
}
getItem(key) {
if (this.map.has(key)) {
return this.get(key);
}
else {
return null;
}
}
putItem(layerItem) {
this.map.set(layerItem['key'], layerItem);
const item = this.get(layerItem['key']);
const filteredItems = this.items
.getValue()
.filter(item => item['key'] !== layerItem['key']);
this.items.next([...filteredItems, item]);
this.putItemHook(layerItem);
return layerItem;
}
onExpire(key) {
return new rxjs_1.Observable(observer => observer.next())
.pipe(operators_1.timeoutWith(this.config.maxAge, rxjs_1.of(1)), operators_1.skip(1), operators_1.take(1))
.subscribe(() => this.removeItem(key));
}
removeItem(key) {
const newLayerItems = this.items
.getValue()
.filter(item => item['key'] !== key);
this.map.delete(key);
this.items.next(newLayerItems);
}
getItemObservable(key) {
return this.items.asObservable().pipe(operators_1.filter(() => !!this.map.has(key)), operators_1.map(() => this.map.get(key)));
}
flushCache() {
return this.items.asObservable().pipe(operators_1.map(items => {
items.forEach(i => this.removeItem(i['key']));
return true;
}));
}
}
exports.CacheLayer = CacheLayer;
//# sourceMappingURL=cache-layer.js.map