UNPKG

angular-odata

Version:

Client side OData typescript library for Angular

57 lines 6.74 kB
import { ODataResponse } from '../resources'; import { ODataCache } from './cache'; export class ODataInStorageCache extends ODataCache { name; storage; constructor({ name, storage = sessionStorage, timeout, }) { super({ timeout }); this.name = name; this.storage = storage; this.restore(); window.addEventListener('beforeunload', () => this.store()); } /** * Store the cache in the storage */ store() { this.storage.setItem(this.name, JSON.stringify(Array.from(this.entries.entries()))); } /** * Restore the cache from the storage */ restore() { this.entries = new Map(JSON.parse(this.storage.getItem(this.name) || '[]')); } /** * Flush the cache and clean the storage */ flush() { super.flush(); this.store(); } /** * Store the response in the cache * @param req The request with the resource to store the response * @param res The response to store in the cache */ putResponse(req, res) { const scope = this.scope(req); const tags = this.tags(res); this.put(req.cacheKey, res.toJson(), { timeout: res.options.maxAge, scope, tags, }); } /** * Restore the response from the cache * @param req The request with the resource to get the response * @returns The response from the cache */ getResponse(req) { const scope = this.scope(req); const data = this.get(req.cacheKey, { scope }); return data !== undefined ? ODataResponse.fromJson(req, data) : undefined; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBQ2pELElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBVTtJQUVqQixZQUFZLEVBQ1YsSUFBSSxFQUNKLE9BQU8sR0FBRyxjQUFjLEVBQ3hCLE9BQU8sR0FLUjtRQUNDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ00sS0FBSztRQUNaLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEdBQXNCLEVBQUUsR0FBdUI7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQWUsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakQsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUMzQixLQUFLO1lBQ0wsSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEdBQXNCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDNUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IE9EYXRhQ2FjaGUsIE9EYXRhQ2FjaGVFbnRyeSB9IGZyb20gJy4vY2FjaGUnO1xuXG5pbnRlcmZhY2UgUmVzcG9uc2VKc29uIHtcbiAgYm9keTogYW55IHwgbnVsbDtcbiAgaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIHN0YXR1c1RleHQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFJblN0b3JhZ2VDYWNoZSBleHRlbmRzIE9EYXRhQ2FjaGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHN0b3JhZ2U6IFN0b3JhZ2U7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIG5hbWUsXG4gICAgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlLFxuICAgIHRpbWVvdXQsXG4gIH06IHtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdG9yYWdlPzogU3RvcmFnZTtcbiAgfSkge1xuICAgIHN1cGVyKHsgdGltZW91dCB9KTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3RvcmFnZSA9IHN0b3JhZ2U7XG4gICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsICgpID0+IHRoaXMuc3RvcmUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIGNhY2hlIGluIHRoZSBzdG9yYWdlXG4gICAqL1xuICBzdG9yZSgpIHtcbiAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odGhpcy5lbnRyaWVzLmVudHJpZXMoKSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgY2FjaGUgZnJvbSB0aGUgc3RvcmFnZVxuICAgKi9cbiAgcmVzdG9yZSgpIHtcbiAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgT0RhdGFDYWNoZUVudHJ5PGFueT4+KFxuICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLm5hbWUpIHx8ICdbXScpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGNhY2hlIGFuZCBjbGVhbiB0aGUgc3RvcmFnZVxuICAgKi9cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIHJlc3BvbnNlIGluIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIHN0b3JlIHRoZSByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVzIFRoZSByZXNwb25zZSB0byBzdG9yZSBpbiB0aGUgY2FjaGVcbiAgICovXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMudGFncyhyZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLmNhY2hlS2V5LCByZXMudG9Kc29uKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBjYWNoZVxuICAgKiBAcGFyYW0gcmVxIFRoZSByZXF1ZXN0IHdpdGggdGhlIHJlc291cmNlIHRvIGdldCB0aGUgcmVzcG9uc2VcbiAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBnZXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogT0RhdGFSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGUocmVxKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXQ8UmVzcG9uc2VKc29uPihyZXEuY2FjaGVLZXksIHsgc2NvcGUgfSk7XG5cbiAgICByZXR1cm4gZGF0YSAhPT0gdW5kZWZpbmVkID8gT0RhdGFSZXNwb25zZS5mcm9tSnNvbihyZXEsIGRhdGEpIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=