UNPKG

ngforage

Version:

localForage bindings for Angular

75 lines 8.81 kB
import { Injectable } from '@angular/core'; import { NgForage } from '../main'; import { CachedItemImpl } from './cached-item-impl.class'; import * as i0 from "@angular/core"; /** @internal */ function calculateCacheKeys(mainKey) { return { data: `${mainKey}_data`, expiry: `${mainKey}_expiry` }; } /** * An extension of {@link NgForage} which adds expiration support */ export class NgForageCache extends NgForage { /** * Cache time in milliseconds * @default 300000 */ get cacheTime() { return this.config.cacheTime ?? this.baseConfig.cacheTime; } set cacheTime(t) { this.config.cacheTime = t; this.storeNeedsRecalc = true; } /** @inheritDoc */ clone(config) { const inst = new NgForageCache(this.baseConfig, this.fact); inst.configure({ ...this.finalConfig, ...config }); return inst; } /** * Retrieve data * @param key Data key */ async getCached(key) { const keys = calculateCacheKeys(key); const [data, expiry] = await Promise .all([this.getItem(keys.data), this.getItem(keys.expiry)]); return new CachedItemImpl(data, expiry); } /** * Remove data * @param key Data key */ async removeCached(key) { const keys = calculateCacheKeys(key); await Promise .all([this.removeItem(keys.data), this.removeItem(keys.expiry)]); } /** * Set data * @param key Data key * @param data Data to set * @param [cacheTime] Override cache set in {@link CacheConfigurable#cacheTime global or instance config}. */ async setCached(key, data, cacheTime = this.cacheTime) { const keys = calculateCacheKeys(key); const [out] = await Promise .all([this.setItem(keys.data, data), this.setItem(keys.expiry, Date.now() + cacheTime)]); return out; } /** @internal */ toJSON() { return Object.assign(super.toJSON(), { cacheTime: this.cacheTime }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageCache, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageCache, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgForageCache, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9yYWdlLWNhY2hlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ2ZvcmFnZS9zcmMvbGliL2NhY2hlL25nLWZvcmFnZS1jYWNoZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBU3hELGdCQUFnQjtBQUNoQixTQUFTLGtCQUFrQixDQUFDLE9BQWU7SUFDekMsT0FBTztRQUNMLElBQUksRUFBRSxHQUFHLE9BQU8sT0FBTztRQUN2QixNQUFNLEVBQUUsR0FBRyxPQUFPLFNBQVM7S0FDNUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUVILE1BQU0sT0FBTyxhQUFjLFNBQVEsUUFBUTtJQUV6Qzs7O09BR0c7SUFDSCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBVyxTQUFTLENBQUMsQ0FBUztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsa0JBQWtCO0lBQ0YsS0FBSyxDQUFDLE1BQXdCO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUksR0FBVztRQUNuQyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTzthQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEUsT0FBTyxJQUFJLGNBQWMsQ0FBSSxJQUFLLEVBQUUsTUFBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBVztRQUNuQyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLE9BQU87YUFDVixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFNBQVMsQ0FBSSxHQUFXLEVBQUUsSUFBTyxFQUFFLFlBQW9CLElBQUksQ0FBQyxTQUFTO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLE9BQU87YUFDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGdCQUFnQjtJQUNBLE1BQU07UUFDcEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQXFCLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQzt1R0FoRVUsYUFBYTsyR0FBYixhQUFhLGNBREQsTUFBTTs7MkZBQ2xCLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtOZ0ZvcmFnZU9wdGlvbnN9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0NhY2hlQ29uZmlndXJhYmxlfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHtOZ0ZvcmFnZX0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgdHlwZSB7Q2FjaGVkSXRlbX0gZnJvbSAnLi9jYWNoZWQtaXRlbSc7XG5pbXBvcnQge0NhY2hlZEl0ZW1JbXBsfSBmcm9tICcuL2NhY2hlZC1pdGVtLWltcGwuY2xhc3MnO1xuXG4vKiogQGludGVybmFsICovXG5pbnRlcmZhY2UgQ2FjaGVLZXlzIHtcbiAgZGF0YTogc3RyaW5nO1xuXG4gIGV4cGlyeTogc3RyaW5nO1xufVxuXG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBjYWxjdWxhdGVDYWNoZUtleXMobWFpbktleTogc3RyaW5nKTogQ2FjaGVLZXlzIHtcbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBgJHttYWluS2V5fV9kYXRhYCxcbiAgICBleHBpcnk6IGAke21haW5LZXl9X2V4cGlyeWBcbiAgfTtcbn1cblxuLyoqXG4gKiBBbiBleHRlbnNpb24gb2Yge0BsaW5rIE5nRm9yYWdlfSB3aGljaCBhZGRzIGV4cGlyYXRpb24gc3VwcG9ydFxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZ0ZvcmFnZUNhY2hlIGV4dGVuZHMgTmdGb3JhZ2UgaW1wbGVtZW50cyBDYWNoZUNvbmZpZ3VyYWJsZSB7XG5cbiAgLyoqXG4gICAqIENhY2hlIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEBkZWZhdWx0IDMwMDAwMFxuICAgKi9cbiAgcHVibGljIGdldCBjYWNoZVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2FjaGVUaW1lID8/IHRoaXMuYmFzZUNvbmZpZy5jYWNoZVRpbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNhY2hlVGltZSh0OiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmZpZy5jYWNoZVRpbWUgPSB0O1xuICAgIHRoaXMuc3RvcmVOZWVkc1JlY2FsYyA9IHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG92ZXJyaWRlIGNsb25lKGNvbmZpZz86IE5nRm9yYWdlT3B0aW9ucyk6IE5nRm9yYWdlQ2FjaGUge1xuICAgIGNvbnN0IGluc3QgPSBuZXcgTmdGb3JhZ2VDYWNoZSh0aGlzLmJhc2VDb25maWcsIHRoaXMuZmFjdCk7XG4gICAgaW5zdC5jb25maWd1cmUoey4uLnRoaXMuZmluYWxDb25maWcsIC4uLmNvbmZpZ30pO1xuXG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGF0YVxuICAgKiBAcGFyYW0ga2V5IERhdGEga2V5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2FjaGVkPFQ+KGtleTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZWRJdGVtPFQ+PiB7XG4gICAgY29uc3Qga2V5cyA9IGNhbGN1bGF0ZUNhY2hlS2V5cyhrZXkpO1xuXG4gICAgY29uc3QgW2RhdGEsIGV4cGlyeV0gPSBhd2FpdCBQcm9taXNlXG4gICAgICAuYWxsKFt0aGlzLmdldEl0ZW08VD4oa2V5cy5kYXRhKSwgdGhpcy5nZXRJdGVtPG51bWJlcj4oa2V5cy5leHBpcnkpXSk7XG5cbiAgICByZXR1cm4gbmV3IENhY2hlZEl0ZW1JbXBsPFQ+KGRhdGEhLCBleHBpcnkhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZGF0YVxuICAgKiBAcGFyYW0ga2V5IERhdGEga2V5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlQ2FjaGVkKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5cyA9IGNhbGN1bGF0ZUNhY2hlS2V5cyhrZXkpO1xuICAgIGF3YWl0IFByb21pc2VcbiAgICAgIC5hbGwoW3RoaXMucmVtb3ZlSXRlbShrZXlzLmRhdGEpLCB0aGlzLnJlbW92ZUl0ZW0oa2V5cy5leHBpcnkpXSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGFcbiAgICogQHBhcmFtIGtleSBEYXRhIGtleVxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIHNldFxuICAgKiBAcGFyYW0gW2NhY2hlVGltZV0gT3ZlcnJpZGUgY2FjaGUgc2V0IGluIHtAbGluayBDYWNoZUNvbmZpZ3VyYWJsZSNjYWNoZVRpbWUgZ2xvYmFsIG9yIGluc3RhbmNlIGNvbmZpZ30uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q2FjaGVkPFQ+KGtleTogc3RyaW5nLCBkYXRhOiBULCBjYWNoZVRpbWU6IG51bWJlciA9IHRoaXMuY2FjaGVUaW1lKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3Qga2V5cyA9IGNhbGN1bGF0ZUNhY2hlS2V5cyhrZXkpO1xuXG4gICAgY29uc3QgW291dF0gPSBhd2FpdCBQcm9taXNlXG4gICAgICAuYWxsKFt0aGlzLnNldEl0ZW08VD4oa2V5cy5kYXRhLCBkYXRhKSwgdGhpcy5zZXRJdGVtKGtleXMuZXhwaXJ5LCBEYXRlLm5vdygpICsgY2FjaGVUaW1lKV0pO1xuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIHRvSlNPTigpOiBOZ0ZvcmFnZU9wdGlvbnMge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLnRvSlNPTigpIGFzIE5nRm9yYWdlT3B0aW9ucywge2NhY2hlVGltZTogdGhpcy5jYWNoZVRpbWV9KTtcbiAgfVxufVxuIl19