UNPKG

ngx-webstorage

Version:

This library provides an easy to use service to manage the web storages (local and session) from your Angular application. It provides also two decorators to synchronize the component attributes and the web storages.

74 lines 10.1 kB
import { Subject } from 'rxjs'; import { Inject, Injectable, Optional } from '@angular/core'; import { STORAGE_STRATEGIES } from '../strategies'; import { StorageStrategies } from '../constants/strategy'; import * as i0 from "@angular/core"; import * as i1 from "../strategies/index"; export const InvalidStrategyError = 'invalid_strategy'; export class StrategyIndex { constructor(strategies) { this.strategies = strategies; this.registration$ = new Subject(); if (!strategies) strategies = []; this.strategies = strategies.reverse() .map((strategy, index, arr) => strategy.name) .map((name, index, arr) => arr.indexOf(name) === index ? index : null) .filter((index) => index !== null) .map((index) => strategies[index]); } static get(name) { if (!this.isStrategyRegistered(name)) throw Error(InvalidStrategyError); let strategy = this.index[name]; if (!strategy.isAvailable) { strategy = this.index[StorageStrategies.InMemory]; } return strategy; } static set(name, strategy) { this.index[name] = strategy; } static clear(name) { if (name !== undefined) delete this.index[name]; else this.index = {}; } static isStrategyRegistered(name) { return name in this.index; } static hasRegistredStrategies() { return Object.keys(this.index).length > 0; } getStrategy(name) { return StrategyIndex.get(name); } indexStrategies() { this.strategies.forEach((strategy) => this.register(strategy.name, strategy)); } indexStrategy(name, overrideIfExists = false) { if (StrategyIndex.isStrategyRegistered(name) && !overrideIfExists) return StrategyIndex.get(name); const strategy = this.strategies.find((strategy) => strategy.name === name); if (!strategy) throw new Error(InvalidStrategyError); this.register(name, strategy, overrideIfExists); return strategy; } register(name, strategy, overrideIfExists = false) { if (!StrategyIndex.isStrategyRegistered(name) || overrideIfExists) { StrategyIndex.set(name, strategy); this.registration$.next(name); } } } StrategyIndex.index = {}; StrategyIndex.ɵprov = i0.ɵɵdefineInjectable({ factory: function StrategyIndex_Factory() { return new StrategyIndex(i0.ɵɵinject(i1.STORAGE_STRATEGIES, 8)); }, token: StrategyIndex, providedIn: "root" }); StrategyIndex.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; StrategyIndex.ctorParameters = () => [ { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [STORAGE_STRATEGIES,] }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3lJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC13ZWJzdG9yYWdlL3NyYy9saWIvc2VydmljZXMvc3RyYXRlZ3lJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7OztBQUV4RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztBQUd2RCxNQUFNLE9BQU8sYUFBYTtJQUt6QixZQUE4RCxVQUFrQztRQUFsQyxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUZ2RixrQkFBYSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR3ZELElBQUksQ0FBQyxVQUFVO1lBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUU7YUFDcEMsR0FBRyxDQUFDLENBQUMsUUFBOEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDN0UsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO2FBQ3pDLEdBQUcsQ0FB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c0NvbnRlbnQiOlsiaW1wb3J0IHtTdG9yYWdlU3RyYXRlZ3l9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcy9zdG9yYWdlU3RyYXRlZ3knO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NUT1JBR0VfU1RSQVRFR0lFU30gZnJvbSAnLi4vc3RyYXRlZ2llcyc7XG5pbXBvcnQge1N0b3JhZ2VTdHJhdGVnaWVzfSBmcm9tICcuLi9jb25zdGFudHMvc3RyYXRlZ3knO1xuXG5leHBvcnQgY29uc3QgSW52YWxpZFN0cmF0ZWd5RXJyb3IgPSAnaW52YWxpZF9zdHJhdGVneSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFN0cmF0ZWd5SW5kZXgge1xuXG5cdHN0YXRpYyBpbmRleDogeyBbbmFtZTogc3RyaW5nXTogU3RvcmFnZVN0cmF0ZWd5PGFueT4gfSA9IHt9O1xuXHRyZWFkb25seSByZWdpc3RyYXRpb24kOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG5cdGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoU1RPUkFHRV9TVFJBVEVHSUVTKSBwcm90ZWN0ZWQgc3RyYXRlZ2llczogU3RvcmFnZVN0cmF0ZWd5PGFueT5bXSkge1xuXHRcdGlmICghc3RyYXRlZ2llcykgc3RyYXRlZ2llcyA9IFtdO1xuXHRcdHRoaXMuc3RyYXRlZ2llcyA9IHN0cmF0ZWdpZXMucmV2ZXJzZSgpXG5cdFx0XHQubWFwKChzdHJhdGVneTogU3RvcmFnZVN0cmF0ZWd5PGFueT4sIGluZGV4LCBhcnIpID0+IHN0cmF0ZWd5Lm5hbWUpXG5cdFx0XHQubWFwKChuYW1lOiBzdHJpbmcsIGluZGV4LCBhcnIpID0+IGFyci5pbmRleE9mKG5hbWUpID09PSBpbmRleCA/IGluZGV4IDogbnVsbClcblx0XHRcdC5maWx0ZXIoKGluZGV4OiBudW1iZXIpID0+IGluZGV4ICE9PSBudWxsKVxuXHRcdFx0Lm1hcCgoaW5kZXg6IG51bWJlcikgPT4gc3RyYXRlZ2llc1tpbmRleF0pO1xuXHR9XG5cblx0c3RhdGljIGdldChuYW1lOiBzdHJpbmcpOiBTdG9yYWdlU3RyYXRlZ3k8YW55PiB7XG5cdFx0aWYgKCF0aGlzLmlzU3RyYXRlZ3lSZWdpc3RlcmVkKG5hbWUpKSB0aHJvdyBFcnJvcihJbnZhbGlkU3RyYXRlZ3lFcnJvcik7XG5cdFx0bGV0IHN0cmF0ZWd5OiBTdG9yYWdlU3RyYXRlZ3k8YW55PiA9IHRoaXMuaW5kZXhbbmFtZV07XG5cdFx0aWYgKCFzdHJhdGVneS5pc0F2YWlsYWJsZSkge1xuXHRcdFx0c3RyYXRlZ3kgPSB0aGlzLmluZGV4W1N0b3JhZ2VTdHJhdGVnaWVzLkluTWVtb3J5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0cmF0ZWd5O1xuXHR9XG5cblx0c3RhdGljIHNldChuYW1lOiBzdHJpbmcsIHN0cmF0ZWd5KTogdm9pZCB7XG5cdFx0dGhpcy5pbmRleFtuYW1lXSA9IHN0cmF0ZWd5O1xuXHR9XG5cblx0c3RhdGljIGNsZWFyKG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSBkZWxldGUgdGhpcy5pbmRleFtuYW1lXTtcblx0XHRlbHNlIHRoaXMuaW5kZXggPSB7fTtcblx0fVxuXG5cdHN0YXRpYyBpc1N0cmF0ZWd5UmVnaXN0ZXJlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gbmFtZSBpbiB0aGlzLmluZGV4O1xuXHR9XG5cblx0c3RhdGljIGhhc1JlZ2lzdHJlZFN0cmF0ZWdpZXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaW5kZXgpLmxlbmd0aCA+IDA7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U3RyYXRlZ3kobmFtZTogc3RyaW5nKTogU3RvcmFnZVN0cmF0ZWd5PGFueT4ge1xuXHRcdHJldHVybiBTdHJhdGVneUluZGV4LmdldChuYW1lKTtcblx0fVxuXG5cdHB1YmxpYyBpbmRleFN0cmF0ZWdpZXMoKSB7XG5cdFx0dGhpcy5zdHJhdGVnaWVzLmZvckVhY2goKHN0cmF0ZWd5OiBTdG9yYWdlU3RyYXRlZ3k8YW55PikgPT4gdGhpcy5yZWdpc3RlcihzdHJhdGVneS5uYW1lLCBzdHJhdGVneSkpO1xuXHR9XG5cblx0cHVibGljIGluZGV4U3RyYXRlZ3kobmFtZTogc3RyaW5nLCBvdmVycmlkZUlmRXhpc3RzOiBib29sZWFuID0gZmFsc2UpOiBTdG9yYWdlU3RyYXRlZ3k8YW55PiB7XG5cdFx0aWYgKFN0cmF0ZWd5SW5kZXguaXNTdHJhdGVneVJlZ2lzdGVyZWQobmFtZSkgJiYgIW92ZXJyaWRlSWZFeGlzdHMpIHJldHVybiBTdHJhdGVneUluZGV4LmdldChuYW1lKTtcblx0XHRjb25zdCBzdHJhdGVneTogU3RvcmFnZVN0cmF0ZWd5PGFueT4gPSB0aGlzLnN0cmF0ZWdpZXMuZmluZCgoc3RyYXRlZ3k6IFN0b3JhZ2VTdHJhdGVneTxhbnk+KSA9PiBzdHJhdGVneS5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAoIXN0cmF0ZWd5KSB0aHJvdyBuZXcgRXJyb3IoSW52YWxpZFN0cmF0ZWd5RXJyb3IpO1xuXHRcdHRoaXMucmVnaXN0ZXIobmFtZSwgc3RyYXRlZ3ksIG92ZXJyaWRlSWZFeGlzdHMpO1xuXHRcdHJldHVybiBzdHJhdGVneTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3RlcihuYW1lOiBzdHJpbmcsIHN0cmF0ZWd5OiBTdG9yYWdlU3RyYXRlZ3k8YW55Piwgb3ZlcnJpZGVJZkV4aXN0czogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdFx0aWYgKCFTdHJhdGVneUluZGV4LmlzU3RyYXRlZ3lSZWdpc3RlcmVkKG5hbWUpIHx8IG92ZXJyaWRlSWZFeGlzdHMpIHtcblx0XHRcdFN0cmF0ZWd5SW5kZXguc2V0KG5hbWUsIHN0cmF0ZWd5KTtcblx0XHRcdHRoaXMucmVnaXN0cmF0aW9uJC5uZXh0KG5hbWUpO1xuXHRcdH1cblx0fVxuXG59XG5cbiJdfQ==