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
JavaScript
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==