@esfaenza/preferences 13.3.2 → 13.4.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.
- package/esm2020/lib/models/PreferencesModuleConfig.mjs +1 -1
- package/esm2020/lib/persistor/base/CachePersistor.mjs +31 -0
- package/esm2020/lib/persistor/base/IBasePersistor.mjs +2 -0
- package/esm2020/lib/persistor/base/PreferencesPersistor.mjs +33 -0
- package/esm2020/lib/persistor/implementation/LocalStorageCachePersistor.mjs +51 -0
- package/esm2020/lib/persistor/implementation/LocalStoragePreferencesPersistor.mjs +51 -0
- package/esm2020/lib/preferences.module.mjs +14 -9
- package/esm2020/lib/services/base/IBaseStorage.mjs +2 -0
- package/esm2020/lib/services/base/base.service.mjs +121 -0
- package/esm2020/lib/services/cache.service.mjs +25 -0
- package/esm2020/lib/services/preferences.service.mjs +25 -0
- package/esm2020/lib/session/implementation/DefaultSessionRetriever.mjs +3 -3
- package/esm2020/public-api.mjs +5 -3
- package/fesm2015/esfaenza-preferences.mjs +210 -126
- package/fesm2015/esfaenza-preferences.mjs.map +1 -1
- package/fesm2020/esfaenza-preferences.mjs +208 -126
- package/fesm2020/esfaenza-preferences.mjs.map +1 -1
- package/lib/models/PreferencesModuleConfig.d.ts +8 -2
- package/lib/persistor/base/CachePersistor.d.ts +57 -0
- package/lib/persistor/base/IBasePersistor.d.ts +17 -0
- package/lib/persistor/base/{BasePreferencesPersistor.d.ts → PreferencesPersistor.d.ts} +7 -10
- package/lib/persistor/implementation/{LocalStoragePersistor.d.ts → LocalStorageCachePersistor.d.ts} +5 -6
- package/lib/persistor/implementation/LocalStoragePreferencesPersistor.d.ts +22 -0
- package/lib/services/base/IBaseStorage.d.ts +9 -0
- package/lib/{preferences.service.d.ts → services/base/base.service.d.ts} +11 -22
- package/lib/services/cache.service.d.ts +10 -0
- package/lib/services/preferences.service.d.ts +10 -0
- package/package.json +3 -3
- package/public-api.d.ts +4 -2
- package/esm2020/lib/persistor/base/BasePreferencesPersistor.mjs +0 -34
- package/esm2020/lib/persistor/implementation/LocalStoragePersistor.mjs +0 -52
- 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
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
}
|
|
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
|
-
|
|
58
|
+
getKey(key: string): string;
|
|
62
59
|
}
|
package/lib/persistor/implementation/{LocalStoragePersistor.d.ts → LocalStorageCachePersistor.d.ts}
RENAMED
|
@@ -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
|
-
|
|
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<
|
|
22
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
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 {
|
|
3
|
-
import
|
|
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
|
|
7
|
+
export declare class BaseService implements IBaseStorage {
|
|
8
8
|
private persistor;
|
|
9
9
|
private PREF_FULL_RETRIEVE_AT_START;
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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:
|
|
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
|
|
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
|
|
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(
|
|
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,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esfaenza/preferences",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.4.0",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"tslib": "^2.0.0"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "~13.
|
|
9
|
-
"@angular/core": "~13.
|
|
8
|
+
"@angular/common": "~13.4.0",
|
|
9
|
+
"@angular/core": "~13.4.0"
|
|
10
10
|
},
|
|
11
11
|
"module": "fesm2015/esfaenza-preferences.mjs",
|
|
12
12
|
"es2020": "fesm2020/esfaenza-preferences.mjs",
|
package/public-api.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export * from './lib/
|
|
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/
|
|
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
|