@esfaenza/preferences 13.3.2 → 14.2.0

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 (33) hide show
  1. package/esm2020/lib/models/PreferencesModuleConfig.mjs +1 -1
  2. package/esm2020/lib/persistor/base/CachePersistor.mjs +31 -0
  3. package/esm2020/lib/persistor/base/IBasePersistor.mjs +2 -0
  4. package/esm2020/lib/persistor/base/PreferencesPersistor.mjs +33 -0
  5. package/esm2020/lib/persistor/implementation/LocalStorageCachePersistor.mjs +51 -0
  6. package/esm2020/lib/persistor/implementation/LocalStoragePreferencesPersistor.mjs +51 -0
  7. package/esm2020/lib/preferences.module.mjs +14 -9
  8. package/esm2020/lib/services/base/IBaseStorage.mjs +2 -0
  9. package/esm2020/lib/services/base/base.service.mjs +119 -0
  10. package/esm2020/lib/services/cache.service.mjs +25 -0
  11. package/esm2020/lib/services/preferences.service.mjs +25 -0
  12. package/esm2020/lib/session/implementation/DefaultSessionRetriever.mjs +4 -4
  13. package/esm2020/public-api.mjs +5 -3
  14. package/fesm2015/esfaenza-preferences.mjs +208 -126
  15. package/fesm2015/esfaenza-preferences.mjs.map +1 -1
  16. package/fesm2020/esfaenza-preferences.mjs +206 -126
  17. package/fesm2020/esfaenza-preferences.mjs.map +1 -1
  18. package/{esfaenza-preferences.d.ts → index.d.ts} +0 -0
  19. package/lib/models/PreferencesModuleConfig.d.ts +8 -2
  20. package/lib/persistor/base/CachePersistor.d.ts +57 -0
  21. package/lib/persistor/base/IBasePersistor.d.ts +17 -0
  22. package/lib/persistor/base/{BasePreferencesPersistor.d.ts → PreferencesPersistor.d.ts} +7 -10
  23. package/lib/persistor/implementation/{LocalStoragePersistor.d.ts → LocalStorageCachePersistor.d.ts} +5 -6
  24. package/lib/persistor/implementation/LocalStoragePreferencesPersistor.d.ts +22 -0
  25. package/lib/services/base/IBaseStorage.d.ts +9 -0
  26. package/lib/{preferences.service.d.ts → services/base/base.service.d.ts} +11 -22
  27. package/lib/services/cache.service.d.ts +10 -0
  28. package/lib/services/preferences.service.d.ts +10 -0
  29. package/package.json +3 -3
  30. package/public-api.d.ts +4 -2
  31. package/esm2020/lib/persistor/base/BasePreferencesPersistor.mjs +0 -34
  32. package/esm2020/lib/persistor/implementation/LocalStoragePersistor.mjs +0 -52
  33. package/esm2020/lib/preferences.service.mjs +0 -150
@@ -0,0 +1,57 @@
1
+ import { Observable } from "rxjs";
2
+ import { BaseSessionRetriever } from "../../session/base/BaseSessionRetriever";
3
+ import { IBasePersistor } from "./IBasePersistor";
4
+ /** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */
5
+ export declare abstract class CachePersistor implements IBasePersistor {
6
+ protected session: BaseSessionRetriever;
7
+ /** @ignore Costruttore */
8
+ constructor(session: BaseSessionRetriever);
9
+ /**
10
+ * Salva, per una sessione, una chiave con un valore
11
+ *
12
+ * @param {string} key Chiave da storicizzare
13
+ */
14
+ abstract persist<T>(key: string, item: T): Observable<boolean>;
15
+ /**
16
+ * Recupera, per una sessione, il valore assegnato ad una chiave
17
+ *
18
+ * @param {string} key Chiave da recuperare
19
+ *
20
+ * @returns {Observable<T>} Valore salvato per la chiave **key**
21
+ */
22
+ abstract recover<T>(key?: string): Observable<T>;
23
+ /**
24
+ * Per una sessione recupera tutte le coppie Chiave - Valore salvate
25
+ *
26
+ * @returns {Observable<{ [index: string]: any }>} Dizionario con tutte le preference salvate per la sessione
27
+ */
28
+ abstract recoverAll(): Observable<{
29
+ [index: string]: any;
30
+ }>;
31
+ /**
32
+ * Ripulisce le preference salvate relative ad una sessione
33
+ */
34
+ abstract clear(): Observable<boolean>;
35
+ /**
36
+ * Elimina un oggetto dalla cache persistita
37
+ *
38
+ * @param {string} key Chiave da rimuovere
39
+ */
40
+ abstract remove(key: string): Observable<boolean>;
41
+ /**
42
+ * Effettua il **persist** massivo di una lista di Chiave - Valore
43
+ *
44
+ * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
45
+ */
46
+ persistAll(dictionary: {
47
+ [key: string]: string;
48
+ }): Observable<boolean>;
49
+ /**
50
+ * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
51
+ *
52
+ * @param {string} key Chiave da storicizzare
53
+ *
54
+ * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
55
+ */
56
+ getKey(key: string): string;
57
+ }
@@ -0,0 +1,17 @@
1
+ import { Observable } from "rxjs";
2
+ /**
3
+ * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage
4
+ */
5
+ export interface IBasePersistor {
6
+ persist<T>(key: string, item: T): Observable<boolean>;
7
+ recover<T>(key?: string): Observable<T>;
8
+ recoverAll(): Observable<{
9
+ [index: string]: any;
10
+ }>;
11
+ clear(): Observable<boolean>;
12
+ remove(key: string): Observable<boolean>;
13
+ persistAll(dictionary: {
14
+ [key: string]: string;
15
+ }): Observable<boolean>;
16
+ getKey(key: string): string;
17
+ }
@@ -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,10 +1,9 @@
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
5
  import * as i0 from "@angular/core";
5
- /** Implementazione di default per la classe **BasePreferencesPersistor** */
6
- export declare class LocalStoragePersistor extends BasePreferencesPersistor {
7
- /** @ignore Costruttore */
6
+ export declare class LocalStorageCachePersistor extends CachePersistor implements IBasePersistor {
8
7
  constructor(session: BaseSessionRetriever);
9
8
  /** @ignore Vedi classe base */
10
9
  persist<T>(key: string, item: T): Observable<boolean>;
@@ -18,6 +17,6 @@ export declare class LocalStoragePersistor extends BasePreferencesPersistor {
18
17
  }>;
19
18
  /** @ignore Vedi classe base */
20
19
  clear(): Observable<boolean>;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<LocalStoragePersistor, never>;
22
- static ɵprov: i0.ɵɵInjectableDeclaration<LocalStoragePersistor>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalStorageCachePersistor, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalStorageCachePersistor>;
23
22
  }
@@ -0,0 +1,22 @@
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
+ import * as i0 from "@angular/core";
6
+ export declare class LocalStoragePreferencesPersistor extends PreferencesPersistor implements IBasePersistor {
7
+ constructor(session: BaseSessionRetriever);
8
+ /** @ignore Vedi classe base */
9
+ persist<T>(key: string, item: T): Observable<boolean>;
10
+ /** @ignore Vedi classe base */
11
+ recover<T>(key: string): Observable<T>;
12
+ /** @ignore Vedi classe base */
13
+ remove(key: string): Observable<boolean>;
14
+ /** @ignore Vedi classe base */
15
+ recoverAll(): Observable<{
16
+ [index: string]: any;
17
+ }>;
18
+ /** @ignore Vedi classe base */
19
+ clear(): Observable<boolean>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalStoragePreferencesPersistor, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalStoragePreferencesPersistor>;
22
+ }
@@ -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,48 +1,41 @@
1
1
  import { Observable } from 'rxjs';
2
- import { BasePreferencesPersistor } from './persistor/base/BasePreferencesPersistor';
3
- import * as i0 from "@angular/core";
2
+ import { IBasePersistor } from '../../persistor/base/IBasePersistor';
3
+ import { IBaseStorage } from './IBaseStorage';
4
4
  /**
5
5
  * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate
6
6
  */
7
- export declare class PreferencesService {
7
+ export declare class BaseService implements IBaseStorage {
8
8
  private persistor;
9
9
  private PREF_FULL_RETRIEVE_AT_START;
10
- /**
11
- * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
12
- */
13
- private LocalPreferences;
14
- /**
15
- * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
16
- */
17
- 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
+ };
18
14
  /**
19
15
  * Costruttore
20
16
  *
21
17
  * @ignore
22
18
  */
23
- constructor(persistor: BasePreferencesPersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
19
+ constructor(persistor: IBasePersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
24
20
  /**
25
21
  * Salva un oggetto sia nella cache locale che nel persistor
26
22
  *
27
23
  * @param {string} key Chiave di persistenza
28
24
  * @param {T} item Oggetto da salvare
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
25
  */
31
- setItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): Observable<boolean>;
26
+ setItem<T>(key: string, item: T): Observable<boolean>;
32
27
  /**
33
28
  * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
34
29
  *
35
30
  * @param {string} key Chiave di persistenza
36
31
  * @param {T} item Oggetto da salvare
37
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
38
32
  */
39
- setLocalItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): boolean;
33
+ setLocalItem<T>(key: string, item: T): boolean;
40
34
  /**
41
35
  * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
42
36
  * nel caso si utilizzi il metodo **storeLocal**
43
37
  *
44
38
  * @param {string} key Chiave da storicizzare
45
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
46
39
  */
47
40
  private persist;
48
41
  /**
@@ -71,10 +64,6 @@ export declare class PreferencesService {
71
64
  removeItem(key: string): Observable<boolean>;
72
65
  /**
73
66
  * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
74
- *
75
- * @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
76
67
  */
77
- clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;
78
- static ɵfac: i0.ɵɵFactoryDeclaration<PreferencesService, [null, { optional: true; }]>;
79
- static ɵprov: i0.ɵɵInjectableDeclaration<PreferencesService>;
68
+ clear(): Observable<boolean>;
80
69
  }
@@ -0,0 +1,10 @@
1
+ import { BaseService } from './base/base.service';
2
+ import { CachePersistor } from '../persistor/base/CachePersistor';
3
+ import * as i0 from "@angular/core";
4
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
5
+ export declare class CacheService extends BaseService {
6
+ /** @ignore Costruttore */
7
+ constructor(persistor: CachePersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<CacheService, [null, { optional: true; }]>;
9
+ static ɵprov: i0.ɵɵInjectableDeclaration<CacheService>;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { BaseService } from './base/base.service';
2
+ import { PreferencesPersistor } from '../persistor/base/PreferencesPersistor';
3
+ import * as i0 from "@angular/core";
4
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
5
+ export declare class PreferencesService extends BaseService {
6
+ /** @ignore Costruttore */
7
+ constructor(persistor: PreferencesPersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<PreferencesService, [null, { optional: true; }]>;
9
+ static ɵprov: i0.ɵɵInjectableDeclaration<PreferencesService>;
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/preferences",
3
- "version": "13.3.2",
3
+ "version": "14.2.0",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
@@ -13,13 +13,13 @@
13
13
  "esm2020": "esm2020/esfaenza-preferences.mjs",
14
14
  "fesm2020": "fesm2020/esfaenza-preferences.mjs",
15
15
  "fesm2015": "fesm2015/esfaenza-preferences.mjs",
16
- "typings": "esfaenza-preferences.d.ts",
16
+ "typings": "index.d.ts",
17
17
  "exports": {
18
18
  "./package.json": {
19
19
  "default": "./package.json"
20
20
  },
21
21
  ".": {
22
- "types": "./esfaenza-preferences.d.ts",
22
+ "types": "./index.d.ts",
23
23
  "esm2020": "./esm2020/esfaenza-preferences.mjs",
24
24
  "es2020": "./fesm2020/esfaenza-preferences.mjs",
25
25
  "es2015": "./fesm2015/esfaenza-preferences.mjs",
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
- // RXJS
6
- import { of } from "rxjs";
7
- import { first } from "rxjs/operators";
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../../session/base/BaseSessionRetriever";
10
- /** Implementazione di default per la classe **BasePreferencesPersistor** */
11
- export class LocalStoragePersistor extends BasePreferencesPersistor {
12
- /** @ignore Costruttore */
13
- constructor(session) { super(session); }
14
- /** @ignore Vedi classe base */
15
- persist(key, item) {
16
- localStorage.setItem(this.getKey(key), JSON.stringify(item));
17
- return of(true).pipe(first());
18
- }
19
- /** @ignore Vedi classe base */
20
- recover(key) {
21
- var ret = JSON.parse(localStorage.getItem(this.getKey(key)));
22
- return of(ret).pipe(first());
23
- }
24
- /** @ignore Vedi classe base */
25
- remove(key) {
26
- var ret = localStorage.removeItem(this.getKey(key));
27
- return of(true).pipe(first());
28
- }
29
- /** @ignore Vedi classe base */
30
- recoverAll() {
31
- var ret = {};
32
- for (var k in localStorage) {
33
- if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
34
- ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));
35
- }
36
- return of(ret).pipe(first());
37
- }
38
- /** @ignore Vedi classe base */
39
- clear() {
40
- for (var k in localStorage) {
41
- if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
42
- localStorage.removeItem(k);
43
- }
44
- return of(true).pipe(first());
45
- }
46
- }
47
- LocalStoragePersistor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: LocalStoragePersistor, deps: [{ token: i1.BaseSessionRetriever }], target: i0.ɵɵFactoryTarget.Injectable });
48
- LocalStoragePersistor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: LocalStoragePersistor });
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: LocalStoragePersistor, decorators: [{
50
- type: Injectable
51
- }], ctorParameters: function () { return [{ type: i1.BaseSessionRetriever }]; } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvaW1wbGVtZW50YXRpb24vTG9jYWxTdG9yYWdlUGVyc2lzdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLFNBQVM7QUFDVCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUc1RSxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV2Qyw0RUFBNEU7QUFFNUUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHdCQUF3QjtJQUUvRCwwQkFBMEI7SUFDMUIsWUFBWSxPQUE2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsK0JBQStCO0lBQ3hCLE9BQU8sQ0FBSSxHQUFXLEVBQUUsSUFBTztRQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsT0FBTyxDQUFJLEdBQVc7UUFDekIsSUFBSSxHQUFHLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsTUFBTSxDQUFDLEdBQVc7UUFDckIsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixVQUFVO1FBQ2IsSUFBSSxHQUFHLEdBQWlDLEVBQUUsQ0FBQztRQUMzQyxLQUFLLElBQUksQ0FBQyxJQUFJLFlBQVksRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixLQUFLO1FBQ1IsS0FBSyxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O2tIQXpDUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSBmcm9tIFwiLi4vYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3JcIjtcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbi9iYXNlL0Jhc2VTZXNzaW9uUmV0cmlldmVyXCI7XHJcblxyXG4vLyBSWEpTXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKiBJbXBsZW1lbnRhemlvbmUgZGkgZGVmYXVsdCBwZXIgbGEgY2xhc3NlICoqQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yKiogKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlUGVyc2lzdG9yIGV4dGVuZHMgQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3Ioc2Vzc2lvbjogQmFzZVNlc3Npb25SZXRyaWV2ZXIpIHsgc3VwZXIoc2Vzc2lvbik7IH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcGVyc2lzdDxUPihrZXk6IHN0cmluZywgaXRlbTogVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSksIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcmVjb3ZlcjxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHZhciByZXQgPSA8VD5KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSkpKTtcclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgcmV0ID0gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRLZXkoa2V5KSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHJlY292ZXJBbGwoKTogT2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55OyB9PiB7XHJcbiAgICAgICAgdmFyIHJldDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChrLmluY2x1ZGVzKFwiwqdcIikgJiYgay5zdGFydHNXaXRoKHRoaXMuc2Vzc2lvbi5nZXRTZXNzaW9uS2V5KCkpKVxyXG4gICAgICAgICAgICAgICAgcmV0W2subWF0Y2goL8KnKC4qKcKnLylbMV1dID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBmb3IgKHZhciBrIGluIGxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBpZiAoay5pbmNsdWRlcyhcIsKnXCIpICYmIGsuc3RhcnRzV2l0aCh0aGlzLnNlc3Npb24uZ2V0U2Vzc2lvbktleSgpKSlcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,150 +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
- import { PREF_FULL_RETRIEVE_AT_START } from './tokens';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./persistor/base/BasePreferencesPersistor";
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.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PreferencesService, deps: [{ token: i1.BasePreferencesPersistor }, { token: PREF_FULL_RETRIEVE_AT_START, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
141
- PreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PreferencesService });
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: PreferencesService, decorators: [{
143
- type: Injectable
144
- }], ctorParameters: function () { return [{ type: i1.BasePreferencesPersistor }, { type: undefined, decorators: [{
145
- type: Optional
146
- }, {
147
- type: Inject,
148
- args: [PREF_FULL_RETRIEVE_AT_START]
149
- }] }]; } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZWZlcmVuY2VzL3NyYy9saWIvcHJlZmVyZW5jZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFFdkQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCOzs7O09BSUc7SUFDSCxZQUFvQixTQUFtQyxFQUEyRCwyQkFBb0M7UUFBbEksY0FBUyxHQUFULFNBQVMsQ0FBMEI7UUFBMkQsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFTO1FBZnRKOztXQUVHO1FBQ0sscUJBQWdCLEdBQTZCLEVBQUUsQ0FBQztRQUV4RDs7V0FFRztRQUNLLHdCQUFtQixHQUFnRCxFQUFFLENBQUM7UUFRNUUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsc0ZBQXNGO1lBQ3RGLFFBQVEsQ0FBQztnQkFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RELENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUF5RCxFQUFFLEVBQUU7Z0JBRXpFLEtBQUssSUFBSSxLQUFL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Q0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFVBQTBDO1FBQ3JELDBCQUEwQjtRQUMxQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2hELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQ0QsMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7K0dBeklVLGtCQUFrQiwwREFpQmdELDJCQUEyQjttSEFqQjdGLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFrQmlELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEJhc2VQcmVmZXJlbmNlc1BlcnNpc3RvciB9IGZyb20gJy4vcGVyc2lzdG9yL2Jhc2UvQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yJztcclxuaW1wb3J0IHsgUFJFRl9GVUxMX1JFVFJJRVZFX0FUX1NUQVJUIH0gZnJvbSAnLi90b2tlbnMnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIHNpIG9jY3VwYSBkaSBzYWx2YXJlIGUgcmVjdXBlcmFyZSBsZSBwcmVmZXJlbnplIHV0ZW50ZSByaXNwZXR0byBhbGxlIGNoaWF2aSBzYWx2YXRlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcmVmZXJlbmNlc1NlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBpbiBtZW1vcmlhIGRlbGxlIHByZWZlcmVuemUgbG9jYWxpIGNoZSBzYXLDoCBwZXJzaXN0aXRvIHBlciBtZXp6byBkZWxsYSBjbGFzc2UgY2hlIGZhIGxlIHZlY2kgZGVsICoqQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yKipcclxuICAgKi9cclxuICBwcml2YXRlIExvY2FsUHJlZmVyZW5jZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgY2hpYXZpIGNvbnRlbnV0ZSBpbiAqKkxvY2FsUHJlZmVyZW5jZXMqKiBkaSBjaGUgdGlwbyBzb25vIGluIG1vZG8gZGEgcmlwdWxpcmUgY29ycmV0dGFtZW50ZSBzdWxsYSBjbGVhclxyXG4gICAqL1xyXG4gIHByaXZhdGUgTG9jYWxQcmVmZXJlbmNlVHlwZTogeyBbaW5kZXg6IHN0cmluZ106ICdjYWNoZScgfCAncHJlZmVyZW5jZScgfSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlcnNpc3RvcjogQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yLCBAT3B0aW9uYWwoKSBASW5qZWN0KFBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVCkgcHJpdmF0ZSBQUkVGX0ZVTExfUkVUUklFVkVfQVRfU1RBUlQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLlBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVCkge1xyXG4gICAgICAvLyBSZWN1cGVybyB0dXR0aSBnbGkgb2dnZXR0aSBkaWZmZXJlbnppYW5kbyBhbmNoZSBsYXRvIGxvY2FsZSBmcmEgY2FjaGUgZSBwcmVmZXJlbmNlc1xyXG4gICAgICBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5wZXJzaXN0b3IucmVjb3ZlckFsbCgnY2FjaGUnKS5waXBlKHRha2UoMSkpLFxyXG4gICAgICAgIHRoaXMucGVyc2lzdG9yLnJlY292ZXJBbGwoJ3ByZWZlcmVuY2UnKS5waXBlKHRha2UoMSkpXHJcbiAgICAgIF0pLnN1YnNjcmliZSgocmVzOiBbeyBbaW5kZXg6IHN0cmluZ106IGFueSB9LCB7IFtpbmRleDogc3RyaW5nXTogYW55IH1dKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNQcm9wIGluIHJlc1swXSkge1xyXG4gICAgICAgICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2NQcm9wXSA9IHJlc1swXVtjUHJvcF07XHJcbiAgICAgICAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGVbY1Byb3BdID0gJ2NhY2hlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgcFByb3AgaW4gcmVzWzFdKSB7XHJcbiAgICAgICAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZXNbcFByb3BdID0gcmVzWzBdW3BQcm9wXTtcclxuICAgICAgICAgIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwUHJvcF0gPSAncHJlZmVyZW5jZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbHZhIHVuIG9nZ2V0dG8gc2lhIG5lbGxhIGNhY2hlIGxvY2FsZSBjaGUgbmVsIHBlcnNpc3RvclxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRpIHBlcnNpc3RlbnphXHJcbiAgICogQHBhcmFtIHtUfSBpdGVtIE9nZ2V0dG8gZGEgc2FsdmFyZVxyXG4gICAqIEBwYXJhbSB7J2NhY2hlJyB8ICdwcmVmZXJlbmNlJ30gc3RvcmVMZXZlbCBMaXZlbGxvIGEgY3VpIHN0b3JpY2l6emFyZSBsJ29nZ2V0dG8uIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCdhcHBsaWNhemlvbmUsIHV0aWxpenphcmUgKipwcmVmZXJlbmNlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRJdGVtPFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnID0gJ2NhY2hlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5zZXRMb2NhbEl0ZW0oa2V5LCBpdGVtLCBzdG9yZUxldmVsKVxyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdChrZXksIGl0ZW0sIHN0b3JlTGV2ZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2FsdmEgdW4gb2dnZXR0byBzb2xvIG5lbGxhIGNhY2hlIGxvY2FsZS4gRG92csOgIGVzc2VyZSBwZXJzaXN0aXRvIG1hbnVhbG1lbnRlIG8gYW5kcsOgIHBlcnNvIGFsIHJpYXZ2aW8gZGVsbCdhcHBsaWNhemlvbmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkaSBwZXJzaXN0ZW56YVxyXG4gICAqIEBwYXJhbSB7VH0gaXRlbSBPZ2dldHRvIGRhIHNhbHZhcmVcclxuICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0TG9jYWxJdGVtPFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnID0gJ2NhY2hlJyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gPSBpdGVtO1xyXG4gICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW2tleV0gPSBzdG9yZUxldmVsO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWx2YSwgcGVyIHVuYSBzZXNzaW9uZSwgdW5hIGNoaWF2ZSBjb24gdW4gdmFsb3JlLCB2aWVuZSBjaGlhbWF0byBhdXRvbWF0aWNhbWVudGUgZGFsIG1ldG9kbyAqKnN0b3JlKiogbWEgZGV2J2Vzc2VyZSBjaGlhbWF0byBtYW51YWxtZW50ZVxyXG4gICAqIG5lbCBjYXNvIHNpIHV0aWxpenppIGlsIG1ldG9kbyAqKnN0b3JlTG9jYWwqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHN0b3JpY2l6emFyZVxyXG4gICAqIEBwYXJhbSB7J2NhY2hlJyB8ICdwcmVmZXJlbmNlJ30gc3RvcmVMZXZlbCBMaXZlbGxvIGEgY3VpIHN0b3JpY2l6emFyZSBsJ29nZ2V0dG8uIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCdhcHBsaWNhemlvbmUsIHV0aWxpenphcmUgKipwcmVmZXJlbmNlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyc2lzdDxUPihrZXk6IHN0cmluZywgaXRlbTogVCwgc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdG9yLnBlcnNpc3Qoa2V5LCBpdGVtLCBzdG9yZUxldmVsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY3VwZXJhIHVuIG9nZ2V0dG8gaW4gYmFzZSBhIHVuYSBjaGlhdmUuIFBlcm1ldHRlIGRpIGFjY2VkZXJlIGFsbGEgY29waWEgbG9jYWxlIG8gYWxsYSBjb3BpYSBwZXJzaXN0aXRhLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCB2YWxvcmUgZGEgcmVjdXBlcmFyZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FjaGVCdXN0IEluZGljYSBzZSBpZ25vcmFyZSBpbCB2YWxvcmUgZGVsbGEgY2FjaGUgbG9jYWxlIGUgcmVjdXBlcmFyZSBsJ29nZ2V0dG8gZGFsbG8gc3RvcmUgcGVyc2lzdGl0bywgXHJcbiAgICogaW4gY2FzbyBmb3NzZSBzdGF0byBtb2RpZmljYXRvIGZ1b3JpIHNpc3RlbWEgbyBkYSB1biBhbHRybyBzaXN0ZW1hXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1R9IE9nZ2V0dG8gcmljaGllc3RvXHJcbiAgICovXHJcbiAgcHVibGljIGdldEl0ZW08VD4oa2V5OiBzdHJpbmcsIGNhY2hlQnVzdDogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gJiYgIWNhY2hlQnVzdClcclxuICAgICAgcmV0dXJuIG9mKDxUPnRoaXMuTG9jYWxQcmVmZXJlbmNlc1trZXldKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgb2JqID0gdGhpcy5wZXJzaXN0b3IucmVjb3ZlcjxUPihrZXkpO1xyXG4gICAgICBpZiAoIW9iailcclxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgIG9iai5waXBlKHRhcChpdGVtID0+IHsgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gPSBpdGVtOyB9KSlcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY3VwZXJhIHVuIG9nZ2V0dG8gaW4gYmFzZSBhIHVuYSBjaGlhdmUuIFBlcm1ldHRlIGRpIGFjY2VkZXJlIHNvbG8gYWxsYSBjb3BpYSBsb2NhbGVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgdmFsb3JlIGRhIHJlY3VwZXJhcmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7VH0gT2dnZXR0byByaWNoaWVzdG9cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TG9jYWxJdGVtPFQ+KGtleTogc3RyaW5nKTogVCB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pXHJcbiAgICAgIHJldHVybiA8VD50aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbGltaW5hIHVuIG9nZ2V0dG8gZGFsbGEgY2FjaGUgc2lhIGxvY2FsZSBjaGUgcGVyc2lzdGl0YVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pIHtcclxuICAgICAgZGVsZXRlIHRoaXMuTG9jYWxQcmVmZXJlbmNlc1trZXldO1xyXG4gICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdG9yLnJlbW92ZShrZXkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmlwdWxpc2NlIGxlIGltcG9zdGF6aW9uaSBsb2NhbGkgZSBsZSBpbXBvc3Rhemlvbmkgc2FsdmF0ZSBkYWwgcGVyc2lzdG9yXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgcmlwdWxpcmUgbGEgY2FjaGUuIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjYW5jZWxsYXJlIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY2FuY2VsbGFyZSBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXIoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyB8ICdhbGwnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAvLyBQdWxpc2NvIGxhIGNhY2hlIGxvY2FsZVxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwcm9wXSA9PSBzdG9yZUxldmVsKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwcm9wXTtcclxuICAgICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBcIkNvbW1pdHRvXCIgbGUgbW9kaWZpY2hlXHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IuY2xlYXIoc3RvcmVMZXZlbCk7XHJcbiAgfVxyXG59Il19