@esfaenza/preferences 11.2.19 → 11.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/bundles/esfaenza-preferences.umd.js +316 -237
  2. package/bundles/esfaenza-preferences.umd.js.map +1 -1
  3. package/bundles/esfaenza-preferences.umd.min.js +2 -2
  4. package/bundles/esfaenza-preferences.umd.min.js.map +1 -1
  5. package/esfaenza-preferences.d.ts +5 -2
  6. package/esfaenza-preferences.metadata.json +1 -1
  7. package/esm2015/esfaenza-preferences.js +5 -3
  8. package/esm2015/lib/models/PreferencesModuleConfig.js +1 -1
  9. package/esm2015/lib/persistor/base/CachePersistor.js +31 -0
  10. package/esm2015/lib/persistor/base/IBasePersistor.js +2 -0
  11. package/esm2015/lib/persistor/base/PreferencesPersistor.js +33 -0
  12. package/esm2015/lib/persistor/implementation/LocalStorageCachePersistor.js +52 -0
  13. package/esm2015/lib/persistor/implementation/LocalStoragePreferencesPersistor.js +52 -0
  14. package/esm2015/lib/preferences.module.js +10 -5
  15. package/esm2015/lib/services/base/IBaseStorage.js +2 -0
  16. package/esm2015/lib/services/base/base.service.js +114 -0
  17. package/esm2015/lib/services/cache.service.js +21 -0
  18. package/esm2015/lib/services/preferences.service.js +21 -0
  19. package/esm2015/public-api.js +5 -3
  20. package/fesm2015/esfaenza-preferences.js +190 -115
  21. package/fesm2015/esfaenza-preferences.js.map +1 -1
  22. package/lib/models/PreferencesModuleConfig.d.ts +8 -2
  23. package/lib/persistor/base/CachePersistor.d.ts +57 -0
  24. package/lib/persistor/base/IBasePersistor.d.ts +17 -0
  25. package/lib/persistor/base/{BasePreferencesPersistor.d.ts → PreferencesPersistor.d.ts} +7 -10
  26. package/lib/persistor/implementation/{LocalStoragePersistor.d.ts → LocalStorageCachePersistor.d.ts} +3 -4
  27. package/lib/persistor/implementation/LocalStoragePreferencesPersistor.d.ts +19 -0
  28. package/lib/services/base/IBaseStorage.d.ts +9 -0
  29. package/lib/{preferences.service.d.ts → services/base/base.service.d.ts} +11 -19
  30. package/lib/services/cache.service.d.ts +7 -0
  31. package/lib/services/preferences.service.d.ts +7 -0
  32. package/package.json +1 -1
  33. package/public-api.d.ts +4 -2
  34. package/esm2015/lib/persistor/base/BasePreferencesPersistor.js +0 -34
  35. package/esm2015/lib/persistor/implementation/LocalStoragePersistor.js +0 -52
  36. package/esm2015/lib/preferences.service.js +0 -147
@@ -1,9 +1,10 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { BaseSessionRetriever } from "../../session/base/BaseSessionRetriever";
3
+ import { IBasePersistor } from "./IBasePersistor";
3
4
  /**
4
5
  * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage
5
6
  */
6
- export declare abstract class BasePreferencesPersistor {
7
+ export declare abstract class PreferencesPersistor implements IBasePersistor {
7
8
  protected session: BaseSessionRetriever;
8
9
  /** @ignore Costruttore */
9
10
  constructor(session: BaseSessionRetriever);
@@ -11,9 +12,8 @@ export declare abstract class BasePreferencesPersistor {
11
12
  * Salva, per una sessione, una chiave con un valore
12
13
  *
13
14
  * @param {string} key Chiave da storicizzare
14
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
15
15
  */
16
- abstract persist<T>(key: string, item: T, storeLevel: 'cache' | 'preference'): Observable<boolean>;
16
+ abstract persist<T>(key: string, item: T): Observable<boolean>;
17
17
  /**
18
18
  * Recupera, per una sessione, il valore assegnato ad una chiave
19
19
  *
@@ -26,16 +26,14 @@ export declare abstract class BasePreferencesPersistor {
26
26
  * Per una sessione recupera tutte le coppie Chiave - Valore salvate
27
27
  *
28
28
  * @returns {Observable<{ [index: string]: any }>} Dizionario con tutte le preference salvate per la sessione
29
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
30
29
  */
31
- abstract recoverAll(storeLevel: 'cache' | 'preference'): Observable<{
30
+ abstract recoverAll(): Observable<{
32
31
  [index: string]: any;
33
32
  }>;
34
33
  /**
35
34
  * Ripulisce le preference salvate relative ad una sessione
36
- * @param {'cache' | 'preference' | 'all'} storeLevel Livello a cui ripulire la cache. Utilizzare **cache** per cancellare cose salvate dall'applicazione, utilizzare **preference** per cancellare cose salvate dall'utente
37
35
  */
38
- abstract clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;
36
+ abstract clear(): Observable<boolean>;
39
37
  /**
40
38
  * Elimina un oggetto dalla cache persistita
41
39
  *
@@ -46,11 +44,10 @@ export declare abstract class BasePreferencesPersistor {
46
44
  * Effettua il **persist** massivo di una lista di Chiave - Valore
47
45
  *
48
46
  * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
49
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
50
47
  */
51
48
  persistAll(dictionary: {
52
49
  [key: string]: string;
53
- }, storeLevel: 'cache' | 'preference'): Observable<boolean>;
50
+ }): Observable<boolean>;
54
51
  /**
55
52
  * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
56
53
  *
@@ -58,5 +55,5 @@ export declare abstract class BasePreferencesPersistor {
58
55
  *
59
56
  * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
60
57
  */
61
- protected getKey(key: string): string;
58
+ getKey(key: string): string;
62
59
  }
@@ -1,9 +1,8 @@
1
- import { BasePreferencesPersistor } from "../base/BasePreferencesPersistor";
2
1
  import { BaseSessionRetriever } from "../../session/base/BaseSessionRetriever";
2
+ import { CachePersistor } from "../base/CachePersistor";
3
+ import { IBasePersistor } from "../base/IBasePersistor";
3
4
  import { Observable } from "rxjs";
4
- /** Implementazione di default per la classe **BasePreferencesPersistor** */
5
- export declare class LocalStoragePersistor extends BasePreferencesPersistor {
6
- /** @ignore Costruttore */
5
+ export declare class LocalStorageCachePersistor extends CachePersistor implements IBasePersistor {
7
6
  constructor(session: BaseSessionRetriever);
8
7
  /** @ignore Vedi classe base */
9
8
  persist<T>(key: string, item: T): Observable<boolean>;
@@ -0,0 +1,19 @@
1
+ import { Observable } from "rxjs";
2
+ import { BaseSessionRetriever } from "../../session/base/BaseSessionRetriever";
3
+ import { PreferencesPersistor } from "../base/PreferencesPersistor";
4
+ import { IBasePersistor } from "../base/IBasePersistor";
5
+ export declare class LocalStoragePreferencesPersistor extends PreferencesPersistor implements IBasePersistor {
6
+ constructor(session: BaseSessionRetriever);
7
+ /** @ignore Vedi classe base */
8
+ persist<T>(key: string, item: T): Observable<boolean>;
9
+ /** @ignore Vedi classe base */
10
+ recover<T>(key: string): Observable<T>;
11
+ /** @ignore Vedi classe base */
12
+ remove(key: string): Observable<boolean>;
13
+ /** @ignore Vedi classe base */
14
+ recoverAll(): Observable<{
15
+ [index: string]: any;
16
+ }>;
17
+ /** @ignore Vedi classe base */
18
+ clear(): Observable<boolean>;
19
+ }
@@ -0,0 +1,9 @@
1
+ import { Observable } from 'rxjs';
2
+ export interface IBaseStorage {
3
+ setItem<T>(key: string, item: T): Observable<boolean>;
4
+ setLocalItem<T>(key: string, item: T): boolean;
5
+ getItem<T>(key: string, cacheBust: boolean): Observable<T>;
6
+ getLocalItem<T>(key: string): T;
7
+ removeItem(key: string): Observable<boolean>;
8
+ clear(): Observable<boolean>;
9
+ }
@@ -1,47 +1,41 @@
1
1
  import { Observable } from 'rxjs';
2
- import { BasePreferencesPersistor } from './persistor/base/BasePreferencesPersistor';
2
+ import { IBasePersistor } from '../../persistor/base/IBasePersistor';
3
+ import { IBaseStorage } from './IBaseStorage';
3
4
  /**
4
5
  * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate
5
6
  */
6
- export declare class PreferencesService {
7
+ export declare class BaseService implements IBaseStorage {
7
8
  private persistor;
8
9
  private PREF_FULL_RETRIEVE_AT_START;
9
- /**
10
- * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
11
- */
12
- private LocalPreferences;
13
- /**
14
- * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
15
- */
16
- private LocalPreferenceType;
10
+ /** Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor** */
11
+ protected LocalStore: {
12
+ [index: string]: any;
13
+ };
17
14
  /**
18
15
  * Costruttore
19
16
  *
20
17
  * @ignore
21
18
  */
22
- constructor(persistor: BasePreferencesPersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
19
+ constructor(persistor: IBasePersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
23
20
  /**
24
21
  * Salva un oggetto sia nella cache locale che nel persistor
25
22
  *
26
23
  * @param {string} key Chiave di persistenza
27
24
  * @param {T} item Oggetto da salvare
28
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
29
25
  */
30
- setItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): Observable<boolean>;
26
+ setItem<T>(key: string, item: T): Observable<boolean>;
31
27
  /**
32
28
  * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
33
29
  *
34
30
  * @param {string} key Chiave di persistenza
35
31
  * @param {T} item Oggetto da salvare
36
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
37
32
  */
38
- setLocalItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): boolean;
33
+ setLocalItem<T>(key: string, item: T): boolean;
39
34
  /**
40
35
  * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
41
36
  * nel caso si utilizzi il metodo **storeLocal**
42
37
  *
43
38
  * @param {string} key Chiave da storicizzare
44
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
45
39
  */
46
40
  private persist;
47
41
  /**
@@ -70,8 +64,6 @@ export declare class PreferencesService {
70
64
  removeItem(key: string): Observable<boolean>;
71
65
  /**
72
66
  * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
73
- *
74
- * @param {'cache' | 'preference'} storeLevel Livello a cui ripulire la cache. Utilizzare **cache** per cancellare cose salvate dall'applicazione, utilizzare **preference** per cancellare cose salvate dall'utente
75
67
  */
76
- clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;
68
+ clear(): Observable<boolean>;
77
69
  }
@@ -0,0 +1,7 @@
1
+ import { BaseService } from './base/base.service';
2
+ import { CachePersistor } from '../persistor/base/CachePersistor';
3
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
4
+ export declare class CacheService extends BaseService {
5
+ /** @ignore Costruttore */
6
+ constructor(persistor: CachePersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
7
+ }
@@ -0,0 +1,7 @@
1
+ import { BaseService } from './base/base.service';
2
+ import { PreferencesPersistor } from '../persistor/base/PreferencesPersistor';
3
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
4
+ export declare class PreferencesService extends BaseService {
5
+ /** @ignore Costruttore */
6
+ constructor(persistor: PreferencesPersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/preferences",
3
- "version": "11.2.19",
3
+ "version": "11.2.20",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
package/public-api.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- export * from './lib/preferences.service';
1
+ export * from './lib/services/cache.service';
2
+ export * from './lib/services/preferences.service';
2
3
  export * from './lib/models/PreferencesModuleConfig';
3
4
  export * from './lib/tokens';
4
5
  export * from './lib/preferences.module';
5
- export * from './lib/persistor/base/BasePreferencesPersistor';
6
+ export * from './lib/persistor/base/CachePersistor';
7
+ export * from './lib/persistor/base/PreferencesPersistor';
6
8
  export * from './lib/session/base/BaseSessionRetriever';
@@ -1,34 +0,0 @@
1
- import { forkJoin } from "rxjs";
2
- import { map } from "rxjs/operators";
3
- /**
4
- * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage
5
- */
6
- export class BasePreferencesPersistor {
7
- /** @ignore Costruttore */
8
- constructor(session) {
9
- this.session = session;
10
- }
11
- /**
12
- * Effettua il **persist** massivo di una lista di Chiave - Valore
13
- *
14
- * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
15
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
16
- */
17
- persistAll(dictionary, storeLevel) {
18
- let observables = [];
19
- for (let key in dictionary)
20
- observables.push(this.persist(key, dictionary[key], storeLevel));
21
- return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
22
- }
23
- /**
24
- * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
25
- *
26
- * @param {string} key Chiave da storicizzare
27
- *
28
- * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
29
- */
30
- getKey(key) {
31
- return this.session.getSessionKey() + "§" + key + "§";
32
- }
33
- }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLHdCQUF3QjtJQUUxQywwQkFBMEI7SUFDMUIsWUFBc0IsT0FBNkI7UUFBN0IsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7SUFBRyxDQUFDO0lBd0N2RDs7Ozs7T0FLRztJQUNJLFVBQVUsQ0FBQyxVQUFxQyxFQUFFLFVBQWtDO1FBQ3ZGLElBQUksV0FBVyxHQUEwQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVO1lBQ3RCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFckUsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sTUFBTSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzFELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEJhc2VTZXNzaW9uUmV0cmlldmVyIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb24vYmFzZS9CYXNlU2Vzc2lvblJldHJpZXZlclwiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBhc3RyYXR0YSBjaGUgcmFwcHJlc2VudGEgbG8gc3RhdG8gZGkgcGVyc2lzdGVuemEgZnJhIGxhIGxpYnJlcmlhIGUgdW5vIHN0b3JhZ2VcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3Ige1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2Vzc2lvbjogQmFzZVNlc3Npb25SZXRyaWV2ZXIpIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWx2YSwgcGVyIHVuYSBzZXNzaW9uZSwgdW5hIGNoaWF2ZSBjb24gdW4gdmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHN0b3JpY2l6emFyZVxyXG4gICAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgc3RvcmljaXp6YXJlIGwnb2dnZXR0by4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwndXRlbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBwZXJzaXN0PFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY3VwZXJhLCBwZXIgdW5hIHNlc3Npb25lLCBpbCB2YWxvcmUgYXNzZWduYXRvIGFkIHVuYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgcmVjdXBlcmFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gVmFsb3JlIHNhbHZhdG8gcGVyIGxhIGNoaWF2ZSAqKmtleSoqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWNvdmVyPFQ+KGtleT86IHN0cmluZyk6IE9ic2VydmFibGU8VD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXIgdW5hIHNlc3Npb25lIHJlY3VwZXJhIHR1dHRlIGxlIGNvcHBpZSBDaGlhdmUgLSBWYWxvcmUgc2FsdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+fSBEaXppb25hcmlvIGNvbiB0dXR0ZSBsZSBwcmVmZXJlbmNlIHNhbHZhdGUgcGVyIGxhIHNlc3Npb25lXHJcbiAgICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IHJlY292ZXJBbGwoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBSaXB1bGlzY2UgbGUgcHJlZmVyZW5jZSBzYWx2YXRlIHJlbGF0aXZlIGFkIHVuYSBzZXNzaW9uZVxyXG4gICAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnIHwgJ2FsbCd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSByaXB1bGlyZSBsYSBjYWNoZS4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNhbmNlbGxhcmUgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjYW5jZWxsYXJlIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgY2xlYXIoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyB8ICdhbGwnKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVsaW1pbmEgdW4gb2dnZXR0byBkYWxsYSBjYWNoZSBwZXJzaXN0aXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHJpbXVvdmVyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsICoqcGVyc2lzdCoqIG1hc3Npdm8gZGkgdW5hIGxpc3RhIGRpIENoaWF2ZSAtIFZhbG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgW2tleTogc3RyaW5nXTogc3RyaW5nIH19IGRpY3Rpb25hcnkgRGl6aW9uYXJpbyAobGlzdGEgZGkgQ2hpYXZlIC0gVmFsb3JlKSBkYSBwZXJzaXN0ZXJlXHJcbiAgICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBlcnNpc3RBbGwoZGljdGlvbmFyeTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCBvYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxib29sZWFuPltdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5wZXJzaXN0KGtleSwgZGljdGlvbmFyeVtrZXldLCBzdG9yZUxldmVsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZShtYXAocmVzID0+IHJlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgJiYgdmFsLCB0cnVlKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBsYSBjaGlhdmUgXCJSZWFsZVwiIGRhIHV0aWxpenphcmUgcGVyIGxhIHBlcnNpc3RlbnphIGRpIHVuYSBjaGlhdmUgZ2VuZXJpY2FcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgc3RvcmljaXp6YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaW9uZSBmcmEgbCdpZGVudGlmaWNhdGl2byBkZWxsYSBzZXNzaW9uZSBlIGxhIGNoaWF2ZSBzcGVjaWZpY2F0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNlc3Npb25LZXkoKSArIFwiwqdcIiArIGtleSArIFwiwqdcIjtcclxuICAgIH1cclxufSJdfQ==
@@ -1,52 +0,0 @@
1
- // Angular
2
- import { Injectable } from "@angular/core";
3
- // Classi
4
- import { BasePreferencesPersistor } from "../base/BasePreferencesPersistor";
5
- import { BaseSessionRetriever } from "../../session/base/BaseSessionRetriever";
6
- // RXJS
7
- import { of } from "rxjs";
8
- import { first } from "rxjs/operators";
9
- /** Implementazione di default per la classe **BasePreferencesPersistor** */
10
- export class LocalStoragePersistor extends BasePreferencesPersistor {
11
- /** @ignore Costruttore */
12
- constructor(session) { super(session); }
13
- /** @ignore Vedi classe base */
14
- persist(key, item) {
15
- localStorage.setItem(this.getKey(key), JSON.stringify(item));
16
- return of(true).pipe(first());
17
- }
18
- /** @ignore Vedi classe base */
19
- recover(key) {
20
- var ret = JSON.parse(localStorage.getItem(this.getKey(key)));
21
- return of(ret).pipe(first());
22
- }
23
- /** @ignore Vedi classe base */
24
- remove(key) {
25
- var ret = localStorage.removeItem(this.getKey(key));
26
- return of(true).pipe(first());
27
- }
28
- /** @ignore Vedi classe base */
29
- recoverAll() {
30
- var ret = {};
31
- for (var k in localStorage) {
32
- if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
33
- ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));
34
- }
35
- return of(ret).pipe(first());
36
- }
37
- /** @ignore Vedi classe base */
38
- clear() {
39
- for (var k in localStorage) {
40
- if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
41
- localStorage.removeItem(k);
42
- }
43
- return of(true).pipe(first());
44
- }
45
- }
46
- LocalStoragePersistor.decorators = [
47
- { type: Injectable }
48
- ];
49
- LocalStoragePersistor.ctorParameters = () => [
50
- { type: BaseSessionRetriever }
51
- ];
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvaW1wbGVtZW50YXRpb24vTG9jYWxTdG9yYWdlUGVyc2lzdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLFNBQVM7QUFDVCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUvRSxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsNEVBQTRFO0FBRTVFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSx3QkFBd0I7SUFFL0QsMEJBQTBCO0lBQzFCLFlBQVksT0FBNkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlELCtCQUErQjtJQUN4QixPQUFPLENBQUksR0FBVyxFQUFFLElBQU87UUFDbEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsK0JBQStCO0lBQ3hCLE9BQU8sQ0FBSSxHQUFXO1FBQ3pCLElBQUksR0FBRyxHQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsK0JBQStCO0lBQ3hCLE1BQU0sQ0FBQyxHQUFXO1FBQ3JCLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsVUFBVTtRQUNiLElBQUksR0FBRyxHQUFpQyxFQUFFLENBQUM7UUFDM0MsS0FBSyxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsS0FBSztRQUNSLEtBQUssSUFBSSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdELFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7WUExQ0osVUFBVTs7O1lBUEYsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSBmcm9tIFwiLi4vYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3JcIjtcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbi9iYXNlL0Jhc2VTZXNzaW9uUmV0cmlldmVyXCI7XHJcblxyXG4vLyBSWEpTXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKiBJbXBsZW1lbnRhemlvbmUgZGkgZGVmYXVsdCBwZXIgbGEgY2xhc3NlICoqQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yKiogKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlUGVyc2lzdG9yIGV4dGVuZHMgQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3Ioc2Vzc2lvbjogQmFzZVNlc3Npb25SZXRyaWV2ZXIpIHsgc3VwZXIoc2Vzc2lvbik7IH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcGVyc2lzdDxUPihrZXk6IHN0cmluZywgaXRlbTogVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSksIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcmVjb3ZlcjxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHZhciByZXQgPSA8VD5KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSkpKTtcclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgcmV0ID0gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRLZXkoa2V5KSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHJlY292ZXJBbGwoKTogT2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55OyB9PiB7XHJcbiAgICAgICAgdmFyIHJldDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChrLmluY2x1ZGVzKFwiwqdcIikgJiYgay5zdGFydHNXaXRoKHRoaXMuc2Vzc2lvbi5nZXRTZXNzaW9uS2V5KCkpKVxyXG4gICAgICAgICAgICAgICAgcmV0W2subWF0Y2goL8KnKC4qKcKnLylbMV1dID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBmb3IgKHZhciBrIGluIGxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBpZiAoay5pbmNsdWRlcyhcIsKnXCIpICYmIGsuc3RhcnRzV2l0aCh0aGlzLnNlc3Npb24uZ2V0U2Vzc2lvbktleSgpKSlcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,147 +0,0 @@
1
- // Angular
2
- import { Inject, Injectable, Optional } from '@angular/core';
3
- import { forkJoin, of } from 'rxjs';
4
- import { take, tap } from 'rxjs/operators';
5
- // Modelli
6
- import { BasePreferencesPersistor } from './persistor/base/BasePreferencesPersistor';
7
- import { PREF_FULL_RETRIEVE_AT_START } from './tokens';
8
- /**
9
- * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate
10
- */
11
- export class PreferencesService {
12
- /**
13
- * Costruttore
14
- *
15
- * @ignore
16
- */
17
- constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
18
- this.persistor = persistor;
19
- this.PREF_FULL_RETRIEVE_AT_START = PREF_FULL_RETRIEVE_AT_START;
20
- /**
21
- * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
22
- */
23
- this.LocalPreferences = {};
24
- /**
25
- * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
26
- */
27
- this.LocalPreferenceType = {};
28
- if (this.PREF_FULL_RETRIEVE_AT_START) {
29
- // Recupero tutti gli oggetti differenziando anche lato locale fra cache e preferences
30
- forkJoin([
31
- this.persistor.recoverAll('cache').pipe(take(1)),
32
- this.persistor.recoverAll('preference').pipe(take(1))
33
- ]).subscribe((res) => {
34
- for (let cProp in res[0]) {
35
- this.LocalPreferences[cProp] = res[0][cProp];
36
- this.LocalPreferenceType[cProp] = 'cache';
37
- }
38
- for (let pProp in res[1]) {
39
- this.LocalPreferences[pProp] = res[0][pProp];
40
- this.LocalPreferenceType[pProp] = 'preference';
41
- }
42
- });
43
- }
44
- }
45
- /**
46
- * Salva un oggetto sia nella cache locale che nel persistor
47
- *
48
- * @param {string} key Chiave di persistenza
49
- * @param {T} item Oggetto da salvare
50
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
51
- */
52
- setItem(key, item, storeLevel = 'cache') {
53
- this.setLocalItem(key, item, storeLevel);
54
- return this.persist(key, item, storeLevel);
55
- }
56
- /**
57
- * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
58
- *
59
- * @param {string} key Chiave di persistenza
60
- * @param {T} item Oggetto da salvare
61
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
62
- */
63
- setLocalItem(key, item, storeLevel = 'cache') {
64
- this.LocalPreferences[key] = item;
65
- this.LocalPreferenceType[key] = storeLevel;
66
- return true;
67
- }
68
- /**
69
- * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
70
- * nel caso si utilizzi il metodo **storeLocal**
71
- *
72
- * @param {string} key Chiave da storicizzare
73
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
74
- */
75
- persist(key, item, storeLevel) {
76
- return this.persistor.persist(key, item, storeLevel);
77
- }
78
- /**
79
- * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.
80
- *
81
- * @param {string} key Chiave del valore da recuperare
82
- * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito,
83
- * in caso fosse stato modificato fuori sistema o da un altro sistema
84
- *
85
- * @returns {T} Oggetto richiesto
86
- */
87
- getItem(key, cacheBust = false) {
88
- if (this.LocalPreferences[key] && !cacheBust)
89
- return of(this.LocalPreferences[key]);
90
- else {
91
- var obj = this.persistor.recover(key);
92
- if (!obj)
93
- return of(null);
94
- obj.pipe(tap(item => { this.LocalPreferences[key] = item; }));
95
- return obj;
96
- }
97
- }
98
- /**
99
- * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale
100
- *
101
- * @param {string} key Chiave del valore da recuperare
102
- *
103
- * @returns {T} Oggetto richiesto
104
- */
105
- getLocalItem(key) {
106
- if (this.LocalPreferences[key])
107
- return this.LocalPreferences[key];
108
- else
109
- return null;
110
- }
111
- /**
112
- * Elimina un oggetto dalla cache sia locale che persistita
113
- *
114
- * @param {string} key Chiave da rimuovere
115
- */
116
- removeItem(key) {
117
- if (this.LocalPreferences[key]) {
118
- delete this.LocalPreferences[key];
119
- delete this.LocalPreferenceType[key];
120
- }
121
- return this.persistor.remove(key);
122
- }
123
- /**
124
- * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
125
- *
126
- * @param {'cache' | 'preference'} storeLevel Livello a cui ripulire la cache. Utilizzare **cache** per cancellare cose salvate dall'applicazione, utilizzare **preference** per cancellare cose salvate dall'utente
127
- */
128
- clear(storeLevel) {
129
- // Pulisco la cache locale
130
- for (let prop in this.LocalPreferenceType) {
131
- if (this.LocalPreferenceType[prop] == storeLevel) {
132
- delete this.LocalPreferenceType[prop];
133
- delete this.LocalPreferences[prop];
134
- }
135
- }
136
- // "Committo" le modifiche
137
- return this.persistor.clear(storeLevel);
138
- }
139
- }
140
- PreferencesService.decorators = [
141
- { type: Injectable }
142
- ];
143
- PreferencesService.ctorParameters = () => [
144
- { type: BasePreferencesPersistor },
145
- { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [PREF_FULL_RETRIEVE_AT_START,] }] }
146
- ];
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZWZlcmVuY2VzL3NyYy9saWIvcHJlZmVyZW5jZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsVUFBVTtBQUNWLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2RDs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFZN0I7Ozs7T0FJRztJQUNILFlBQW9CLFNBQW1DLEVBQTJELDJCQUFvQztRQUFsSSxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUEyRCxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQVM7UUFmdEo7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBNkIsRUFBRSxDQUFDO1FBRXhEOztXQUVHO1FBQ0ssd0JBQW1CLEdBQWdELEVBQUUsQ0FBQztRQVE1RSxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxzRkFBc0Y7WUFDdEYsUUFBUSxDQUFDO2dCQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQsQ0FBQyxDQUFD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QztTQUN0QztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsVUFBMEM7UUFDckQsMEJBQTBCO1FBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsRUFBRTtnQkFDaEQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCwwQkFBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7WUExSUYsVUFBVTs7O1lBTkYsd0JBQXdCOzBDQXdCMkIsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yIH0gZnJvbSAnLi9wZXJzaXN0b3IvYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3InO1xyXG5pbXBvcnQgeyBQUkVGX0ZVTExfUkVUUklFVkVfQVRfU1RBUlQgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSBjaGUgc2kgb2NjdXBhIGRpIHNhbHZhcmUgZSByZWN1cGVyYXJlIGxlIHByZWZlcmVuemUgdXRlbnRlIHJpc3BldHRvIGFsbGUgY2hpYXZpIHNhbHZhdGVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFByZWZlcmVuY2VzU2VydmljZSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIGluIG1lbW9yaWEgZGVsbGUgcHJlZmVyZW56ZSBsb2NhbGkgY2hlIHNhcsOgIHBlcnNpc3RpdG8gcGVyIG1lenpvIGRlbGxhIGNsYXNzZSBjaGUgZmEgbGUgdmVjaSBkZWwgKipCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IqKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgTG9jYWxQcmVmZXJlbmNlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYSBsZSBjaGlhdmkgY29udGVudXRlIGluICoqTG9jYWxQcmVmZXJlbmNlcyoqIGRpIGNoZSB0aXBvIHNvbm8gaW4gbW9kbyBkYSByaXB1bGlyZSBjb3JyZXR0YW1lbnRlIHN1bGxhIGNsZWFyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBMb2NhbFByZWZlcmVuY2VUeXBlOiB7IFtpbmRleDogc3RyaW5nXTogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyB9ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVyc2lzdG9yOiBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IsIEBPcHRpb25hbCgpIEBJbmplY3QoUFJFRl9GVUxMX1JFVFJJRVZFX0FUX1NUQVJUKSBwcml2YXRlIFBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVDogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuUFJFRl9GVUxMX1JFVFJJRVZFX0FUX1NUQVJUKSB7XHJcbiAgICAgIC8vIFJlY3VwZXJvIHR1dHRpIGdsaSBvZ2dldHRpIGRpZmZlcmVuemlhbmRvIGFuY2hlIGxhdG8gbG9jYWxlIGZyYSBjYWNoZSBlIHByZWZlcmVuY2VzXHJcbiAgICAgIGZvcmtKb2luKFtcclxuICAgICAgICB0aGlzLnBlcnNpc3Rvci5yZWNvdmVyQWxsKCdjYWNoZScpLnBpcGUodGFrZSgxKSksXHJcbiAgICAgICAgdGhpcy5wZXJzaXN0b3IucmVjb3ZlckFsbCgncHJlZmVyZW5jZScpLnBpcGUodGFrZSgxKSlcclxuICAgICAgXSkuc3Vic2NyaWJlKChyZXM6IFt7IFtpbmRleDogc3RyaW5nXTogYW55IH0sIHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfV0pID0+IHtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgY1Byb3AgaW4gcmVzWzBdKSB7XHJcbiAgICAgICAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZXNbY1Byb3BdID0gcmVzWzBdW2NQcm9wXTtcclxuICAgICAgICAgIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtjUHJvcF0gPSAnY2FjaGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBwUHJvcCBpbiByZXNbMV0pIHtcclxuICAgICAgICAgIHRoaXMuTG9jYWxQcmVmZXJlbmNlc1twUHJvcF0gPSByZXNbMF1bcFByb3BdO1xyXG4gICAgICAgICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW3BQcm9wXSA9ICdwcmVmZXJlbmNlJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2FsdmEgdW4gb2dnZXR0byBzaWEgbmVsbGEgY2FjaGUgbG9jYWxlIGNoZSBuZWwgcGVyc2lzdG9yXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGkgcGVyc2lzdGVuemFcclxuICAgKiBAcGFyYW0ge1R9IGl0ZW0gT2dnZXR0byBkYSBzYWx2YXJlXHJcbiAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgc3RvcmljaXp6YXJlIGwnb2dnZXR0by4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwndXRlbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldEl0ZW08VD4oa2V5OiBzdHJpbmcsIGl0ZW06IFQsIHN0b3JlTGV2ZWw6ICdjYWNoZScgfCAncHJlZmVyZW5jZScgPSAnY2FjaGUnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnNldExvY2FsSXRlbShrZXksIGl0ZW0sIHN0b3JlTGV2ZWwpXHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0KGtleSwgaXRlbSwgc3RvcmVMZXZlbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWx2YSB1biBvZ2dldHRvIHNvbG8gbmVsbGEgY2FjaGUgbG9jYWxlLiBEb3Zyw6AgZXNzZXJlIHBlcnNpc3RpdG8gbWFudWFsbWVudGUgbyBhbmRyw6AgcGVyc28gYWwgcmlhdnZpbyBkZWxsJ2FwcGxpY2F6aW9uZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRpIHBlcnNpc3RlbnphXHJcbiAgICogQHBhcmFtIHtUfSBpdGVtIE9nZ2V0dG8gZGEgc2FsdmFyZVxyXG4gICAqIEBwYXJhbSB7J2NhY2hlJyB8ICdwcmVmZXJlbmNlJ30gc3RvcmVMZXZlbCBMaXZlbGxvIGEgY3VpIHN0b3JpY2l6emFyZSBsJ29nZ2V0dG8uIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCdhcHBsaWNhemlvbmUsIHV0aWxpenphcmUgKipwcmVmZXJlbmNlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRMb2NhbEl0ZW08VD4oa2V5OiBzdHJpbmcsIGl0ZW06IFQsIHN0b3JlTGV2ZWw6ICdjYWNoZScgfCAncHJlZmVyZW5jZScgPSAnY2FjaGUnKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSA9IGl0ZW07XHJcbiAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGVba2V5XSA9IHN0b3JlTGV2ZWw7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbHZhLCBwZXIgdW5hIHNlc3Npb25lLCB1bmEgY2hpYXZlIGNvbiB1biB2YWxvcmUsIHZpZW5lIGNoaWFtYXRvIGF1dG9tYXRpY2FtZW50ZSBkYWwgbWV0b2RvICoqc3RvcmUqKiBtYSBkZXYnZXNzZXJlIGNoaWFtYXRvIG1hbnVhbG1lbnRlXHJcbiAgICogbmVsIGNhc28gc2kgdXRpbGl6emkgaWwgbWV0b2RvICoqc3RvcmVMb2NhbCoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgc3RvcmljaXp6YXJlXHJcbiAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgc3RvcmljaXp6YXJlIGwnb2dnZXR0by4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwndXRlbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwZXJzaXN0PFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IucGVyc2lzdChrZXksIGl0ZW0sIHN0b3JlTGV2ZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjdXBlcmEgdW4gb2dnZXR0byBpbiBiYXNlIGEgdW5hIGNoaWF2ZS4gUGVybWV0dGUgZGkgYWNjZWRlcmUgYWxsYSBjb3BpYSBsb2NhbGUgbyBhbGxhIGNvcGlhIHBlcnNpc3RpdGEuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGVsIHZhbG9yZSBkYSByZWN1cGVyYXJlXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBjYWNoZUJ1c3QgSW5kaWNhIHNlIGlnbm9yYXJlIGlsIHZhbG9yZSBkZWxsYSBjYWNoZSBsb2NhbGUgZSByZWN1cGVyYXJlIGwnb2dnZXR0byBkYWxsbyBzdG9yZSBwZXJzaXN0aXRvLCBcclxuICAgKiBpbiBjYXNvIGZvc3NlIHN0YXRvIG1vZGlmaWNhdG8gZnVvcmkgc2lzdGVtYSBvIGRhIHVuIGFsdHJvIHNpc3RlbWFcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7VH0gT2dnZXR0byByaWNoaWVzdG9cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0SXRlbTxUPihrZXk6IHN0cmluZywgY2FjaGVCdXN0OiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSAmJiAhY2FjaGVCdXN0KVxyXG4gICAgICByZXR1cm4gb2YoPFQ+dGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHZhciBvYmogPSB0aGlzLnBlcnNpc3Rvci5yZWNvdmVyPFQ+KGtleSk7XHJcbiAgICAgIGlmICghb2JqKVxyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgb2JqLnBpcGUodGFwKGl0ZW0gPT4geyB0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSA9IGl0ZW07IH0pKVxyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjdXBlcmEgdW4gb2dnZXR0byBpbiBiYXNlIGEgdW5hIGNoaWF2ZS4gUGVybWV0dGUgZGkgYWNjZWRlcmUgc29sbyBhbGxhIGNvcGlhIGxvY2FsZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCB2YWxvcmUgZGEgcmVjdXBlcmFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtUfSBPZ2dldHRvIHJpY2hpZXN0b1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRMb2NhbEl0ZW08VD4oa2V5OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICh0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSlcclxuICAgICAgcmV0dXJuIDxUPnRoaXMuTG9jYWxQcmVmZXJlbmNlc1trZXldO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVsaW1pbmEgdW4gb2dnZXR0byBkYWxsYSBjYWNoZSBzaWEgbG9jYWxlIGNoZSBwZXJzaXN0aXRhXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgcmltdW92ZXJlXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSkge1xyXG4gICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV07XHJcbiAgICAgIGRlbGV0ZSB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IucmVtb3ZlKGtleSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaXB1bGlzY2UgbGUgaW1wb3N0YXppb25pIGxvY2FsaSBlIGxlIGltcG9zdGF6aW9uaSBzYWx2YXRlIGRhbCBwZXJzaXN0b3JcclxuICAgKiBcclxuICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSByaXB1bGlyZSBsYSBjYWNoZS4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNhbmNlbGxhcmUgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjYW5jZWxsYXJlIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbGVhcihzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnIHwgJ2FsbCcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIC8vIFB1bGlzY28gbGEgY2FjaGUgbG9jYWxlXHJcbiAgICBmb3IgKGxldCBwcm9wIGluIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZSkge1xyXG4gICAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW3Byb3BdID09IHN0b3JlTGV2ZWwpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW3Byb3BdO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLkxvY2FsUHJlZmVyZW5jZXNbcHJvcF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFwiQ29tbWl0dG9cIiBsZSBtb2RpZmljaGVcclxuICAgIHJldHVybiB0aGlzLnBlcnNpc3Rvci5jbGVhcihzdG9yZUxldmVsKTtcclxuICB9XHJcbn0iXX0=