ngx-webstorage
Version:
### Local and session storage - Angular service 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
77 lines • 10.6 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";
export const InvalidStrategyError = 'invalid_strategy';
export class StrategyIndex {
static { this.index = {}; }
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);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StrategyIndex, deps: [{ token: STORAGE_STRATEGIES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StrategyIndex, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: StrategyIndex, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [STORAGE_STRATEGIES]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3lJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC13ZWJzdG9yYWdlL3NyYy9saWIvc2VydmljZXMvc3RyYXRlZ3lJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7O0FBRXhELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGtCQUFrQixDQUFDO0FBR3ZELE1BQU0sT0FBTyxhQUFhO2FBRWxCLFVBQUssR0FBNkMsRUFBRSxBQUEvQyxDQUFnRDtJQUc1RCxZQUE4RCxVQUFrQztRQUFsQyxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUZ2RixrQkFBYSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR3ZELElBQUksQ0FBQyxVQUFVO1lBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUU7YUFDcEMsR0FBRyxDQUFDLENBQUMsUUFBOEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDN0UsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxL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RHpCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFNbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VTdHJhdGVneX0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzL3N0b3JhZ2VTdHJhdGVneSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U1RPUkFHRV9TVFJBVEVHSUVTfSBmcm9tICcuLi9zdHJhdGVnaWVzJztcbmltcG9ydCB7U3RvcmFnZVN0cmF0ZWdpZXN9IGZyb20gJy4uL2NvbnN0YW50cy9zdHJhdGVneSc7XG5cbmV4cG9ydCBjb25zdCBJbnZhbGlkU3RyYXRlZ3lFcnJvciA9ICdpbnZhbGlkX3N0cmF0ZWd5JztcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgU3RyYXRlZ3lJbmRleCB7XG5cblx0c3RhdGljIGluZGV4OiB7IFtuYW1lOiBzdHJpbmddOiBTdG9yYWdlU3RyYXRlZ3k8YW55PiB9ID0ge307XG5cdHJlYWRvbmx5IHJlZ2lzdHJhdGlvbiQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XG5cblx0Y29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChTVE9SQUdFX1NUUkFURUdJRVMpIHByb3RlY3RlZCBzdHJhdGVnaWVzOiBTdG9yYWdlU3RyYXRlZ3k8YW55PltdKSB7XG5cdFx0aWYgKCFzdHJhdGVnaWVzKSBzdHJhdGVnaWVzID0gW107XG5cdFx0dGhpcy5zdHJhdGVnaWVzID0gc3RyYXRlZ2llcy5yZXZlcnNlKClcblx0XHRcdC5tYXAoKHN0cmF0ZWd5OiBTdG9yYWdlU3RyYXRlZ3k8YW55PiwgaW5kZXgsIGFycikgPT4gc3RyYXRlZ3kubmFtZSlcblx0XHRcdC5tYXAoKG5hbWU6IHN0cmluZywgaW5kZXgsIGFycikgPT4gYXJyLmluZGV4T2YobmFtZSkgPT09IGluZGV4ID8gaW5kZXggOiBudWxsKVxuXHRcdFx0LmZpbHRlcigoaW5kZXg6IG51bWJlcikgPT4gaW5kZXggIT09IG51bGwpXG5cdFx0XHQubWFwKChpbmRleDogbnVtYmVyKSA9PiBzdHJhdGVnaWVzW2luZGV4XSk7XG5cdH1cblxuXHRzdGF0aWMgZ2V0KG5hbWU6IHN0cmluZyk6IFN0b3JhZ2VTdHJhdGVneTxhbnk+IHtcblx0XHRpZiAoIXRoaXMuaXNTdHJhdGVneVJlZ2lzdGVyZWQobmFtZSkpIHRocm93IEVycm9yKEludmFsaWRTdHJhdGVneUVycm9yKTtcblx0XHRsZXQgc3RyYXRlZ3k6IFN0b3JhZ2VTdHJhdGVneTxhbnk+ID0gdGhpcy5pbmRleFtuYW1lXTtcblx0XHRpZiAoIXN0cmF0ZWd5LmlzQXZhaWxhYmxlKSB7XG5cdFx0XHRzdHJhdGVneSA9IHRoaXMuaW5kZXhbU3RvcmFnZVN0cmF0ZWdpZXMuSW5NZW1vcnldO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyYXRlZ3k7XG5cdH1cblxuXHRzdGF0aWMgc2V0KG5hbWU6IHN0cmluZywgc3RyYXRlZ3kpOiB2b2lkIHtcblx0XHR0aGlzLmluZGV4W25hbWVdID0gc3RyYXRlZ3k7XG5cdH1cblxuXHRzdGF0aWMgY2xlYXIobmFtZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIGRlbGV0ZSB0aGlzLmluZGV4W25hbWVdO1xuXHRcdGVsc2UgdGhpcy5pbmRleCA9IHt9O1xuXHR9XG5cblx0c3RhdGljIGlzU3RyYXRlZ3lSZWdpc3RlcmVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBuYW1lIGluIHRoaXMuaW5kZXg7XG5cdH1cblxuXHRzdGF0aWMgaGFzUmVnaXN0cmVkU3RyYXRlZ2llcygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbmRleCkubGVuZ3RoID4gMDtcblx0fVxuXG5cdHB1YmxpYyBnZXRTdHJhdGVneShuYW1lOiBzdHJpbmcpOiBTdG9yYWdlU3RyYXRlZ3k8YW55PiB7XG5cdFx0cmV0dXJuIFN0cmF0ZWd5SW5kZXguZ2V0KG5hbWUpO1xuXHR9XG5cblx0cHVibGljIGluZGV4U3RyYXRlZ2llcygpIHtcblx0XHR0aGlzLnN0cmF0ZWdpZXMuZm9yRWFjaCgoc3RyYXRlZ3k6IFN0b3JhZ2VTdHJhdGVneTxhbnk+KSA9PiB0aGlzLnJlZ2lzdGVyKHN0cmF0ZWd5Lm5hbWUsIHN0cmF0ZWd5KSk7XG5cdH1cblxuXHRwdWJsaWMgaW5kZXhTdHJhdGVneShuYW1lOiBzdHJpbmcsIG92ZXJyaWRlSWZFeGlzdHM6IGJvb2xlYW4gPSBmYWxzZSk6IFN0b3JhZ2VTdHJhdGVneTxhbnk+IHtcblx0XHRpZiAoU3RyYXRlZ3lJbmRleC5pc1N0cmF0ZWd5UmVnaXN0ZXJlZChuYW1lKSAmJiAhb3ZlcnJpZGVJZkV4aXN0cykgcmV0dXJuIFN0cmF0ZWd5SW5kZXguZ2V0KG5hbWUpO1xuXHRcdGNvbnN0IHN0cmF0ZWd5OiBTdG9yYWdlU3RyYXRlZ3k8YW55PiA9IHRoaXMuc3RyYXRlZ2llcy5maW5kKChzdHJhdGVneTogU3RvcmFnZVN0cmF0ZWd5PGFueT4pID0+IHN0cmF0ZWd5Lm5hbWUgPT09IG5hbWUpO1xuXHRcdGlmICghc3RyYXRlZ3kpIHRocm93IG5ldyBFcnJvcihJbnZhbGlkU3RyYXRlZ3lFcnJvcik7XG5cdFx0dGhpcy5yZWdpc3RlcihuYW1lLCBzdHJhdGVneSwgb3ZlcnJpZGVJZkV4aXN0cyk7XG5cdFx0cmV0dXJuIHN0cmF0ZWd5O1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyKG5hbWU6IHN0cmluZywgc3RyYXRlZ3k6IFN0b3JhZ2VTdHJhdGVneTxhbnk+LCBvdmVycmlkZUlmRXhpc3RzOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHRpZiAoIVN0cmF0ZWd5SW5kZXguaXNTdHJhdGVneVJlZ2lzdGVyZWQobmFtZSkgfHwgb3ZlcnJpZGVJZkV4aXN0cykge1xuXHRcdFx0U3RyYXRlZ3lJbmRleC5zZXQobmFtZSwgc3RyYXRlZ3kpO1xuXHRcdFx0dGhpcy5yZWdpc3RyYXRpb24kLm5leHQobmFtZSk7XG5cdFx0fVxuXHR9XG5cbn1cblxuZXhwb3J0IHtTdG9yYWdlU3RyYXRlZ3l9O1xuIl19