@esfaenza/preferences 11.2.19 → 11.2.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/bundles/esfaenza-preferences.umd.js +316 -237
  2. package/bundles/esfaenza-preferences.umd.js.map +1 -1
  3. package/bundles/esfaenza-preferences.umd.min.js +2 -2
  4. package/bundles/esfaenza-preferences.umd.min.js.map +1 -1
  5. package/esfaenza-preferences.d.ts +5 -2
  6. package/esfaenza-preferences.metadata.json +1 -1
  7. package/esm2015/esfaenza-preferences.js +5 -3
  8. package/esm2015/lib/models/PreferencesModuleConfig.js +1 -1
  9. package/esm2015/lib/persistor/base/CachePersistor.js +31 -0
  10. package/esm2015/lib/persistor/base/IBasePersistor.js +2 -0
  11. package/esm2015/lib/persistor/base/PreferencesPersistor.js +33 -0
  12. package/esm2015/lib/persistor/implementation/LocalStorageCachePersistor.js +52 -0
  13. package/esm2015/lib/persistor/implementation/LocalStoragePreferencesPersistor.js +52 -0
  14. package/esm2015/lib/preferences.module.js +10 -5
  15. package/esm2015/lib/services/base/IBaseStorage.js +2 -0
  16. package/esm2015/lib/services/base/base.service.js +114 -0
  17. package/esm2015/lib/services/cache.service.js +21 -0
  18. package/esm2015/lib/services/preferences.service.js +21 -0
  19. package/esm2015/public-api.js +5 -3
  20. package/fesm2015/esfaenza-preferences.js +190 -115
  21. package/fesm2015/esfaenza-preferences.js.map +1 -1
  22. package/lib/models/PreferencesModuleConfig.d.ts +8 -2
  23. package/lib/persistor/base/CachePersistor.d.ts +57 -0
  24. package/lib/persistor/base/IBasePersistor.d.ts +17 -0
  25. package/lib/persistor/base/{BasePreferencesPersistor.d.ts → PreferencesPersistor.d.ts} +7 -10
  26. package/lib/persistor/implementation/{LocalStoragePersistor.d.ts → LocalStorageCachePersistor.d.ts} +3 -4
  27. package/lib/persistor/implementation/LocalStoragePreferencesPersistor.d.ts +19 -0
  28. package/lib/services/base/IBaseStorage.d.ts +9 -0
  29. package/lib/{preferences.service.d.ts → services/base/base.service.d.ts} +11 -19
  30. package/lib/services/cache.service.d.ts +7 -0
  31. package/lib/services/preferences.service.d.ts +7 -0
  32. package/package.json +1 -1
  33. package/public-api.d.ts +4 -2
  34. package/esm2015/lib/persistor/base/BasePreferencesPersistor.js +0 -34
  35. package/esm2015/lib/persistor/implementation/LocalStoragePersistor.js +0 -52
  36. package/esm2015/lib/preferences.service.js +0 -147
@@ -1,38 +1,6 @@
1
- import { InjectionToken, Injectable, Optional, Inject, NgModule } from '@angular/core';
2
- import { forkJoin, of } from 'rxjs';
3
- import { map, take, tap, first } from 'rxjs/operators';
4
-
5
- /**
6
- * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage
7
- */
8
- class BasePreferencesPersistor {
9
- /** @ignore Costruttore */
10
- constructor(session) {
11
- this.session = session;
12
- }
13
- /**
14
- * Effettua il **persist** massivo di una lista di Chiave - Valore
15
- *
16
- * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
17
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
18
- */
19
- persistAll(dictionary, storeLevel) {
20
- let observables = [];
21
- for (let key in dictionary)
22
- observables.push(this.persist(key, dictionary[key], storeLevel));
23
- return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
24
- }
25
- /**
26
- * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
27
- *
28
- * @param {string} key Chiave da storicizzare
29
- *
30
- * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
31
- */
32
- getKey(key) {
33
- return this.session.getSessionKey() + "§" + key + "§";
34
- }
35
- }
1
+ import { InjectionToken, Optional, Inject, Injectable, NgModule } from '@angular/core';
2
+ import { of, forkJoin } from 'rxjs';
3
+ import { take, tap, map, first } from 'rxjs/operators';
36
4
 
37
5
  /**
38
6
  * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.
@@ -45,7 +13,7 @@ const PREF_FULL_RETRIEVE_AT_START = new InjectionToken('PREF_FULL_RETRIEVE_AT_ST
45
13
  /**
46
14
  * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate
47
15
  */
48
- class PreferencesService {
16
+ class BaseService {
49
17
  /**
50
18
  * Costruttore
51
19
  *
@@ -54,28 +22,12 @@ class PreferencesService {
54
22
  constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
55
23
  this.persistor = persistor;
56
24
  this.PREF_FULL_RETRIEVE_AT_START = PREF_FULL_RETRIEVE_AT_START;
57
- /**
58
- * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
59
- */
60
- this.LocalPreferences = {};
61
- /**
62
- * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
63
- */
64
- this.LocalPreferenceType = {};
25
+ /** Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor** */
26
+ this.LocalStore = {};
65
27
  if (this.PREF_FULL_RETRIEVE_AT_START) {
66
- // Recupero tutti gli oggetti differenziando anche lato locale fra cache e preferences
67
- forkJoin([
68
- this.persistor.recoverAll('cache').pipe(take(1)),
69
- this.persistor.recoverAll('preference').pipe(take(1))
70
- ]).subscribe((res) => {
71
- for (let cProp in res[0]) {
72
- this.LocalPreferences[cProp] = res[0][cProp];
73
- this.LocalPreferenceType[cProp] = 'cache';
74
- }
75
- for (let pProp in res[1]) {
76
- this.LocalPreferences[pProp] = res[0][pProp];
77
- this.LocalPreferenceType[pProp] = 'preference';
78
- }
28
+ this.persistor.recoverAll().pipe(take(1)).subscribe(t => {
29
+ for (let cProp in t)
30
+ this.LocalStore[cProp] = t[cProp];
79
31
  });
80
32
  }
81
33
  }
@@ -84,22 +36,19 @@ class PreferencesService {
84
36
  *
85
37
  * @param {string} key Chiave di persistenza
86
38
  * @param {T} item Oggetto da salvare
87
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
88
39
  */
89
- setItem(key, item, storeLevel = 'cache') {
90
- this.setLocalItem(key, item, storeLevel);
91
- return this.persist(key, item, storeLevel);
40
+ setItem(key, item) {
41
+ this.setLocalItem(key, item);
42
+ return this.persist(key, item);
92
43
  }
93
44
  /**
94
45
  * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
95
46
  *
96
47
  * @param {string} key Chiave di persistenza
97
48
  * @param {T} item Oggetto da salvare
98
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
99
49
  */
100
- setLocalItem(key, item, storeLevel = 'cache') {
101
- this.LocalPreferences[key] = item;
102
- this.LocalPreferenceType[key] = storeLevel;
50
+ setLocalItem(key, item) {
51
+ this.LocalStore[key] = item;
103
52
  return true;
104
53
  }
105
54
  /**
@@ -107,10 +56,9 @@ class PreferencesService {
107
56
  * nel caso si utilizzi il metodo **storeLocal**
108
57
  *
109
58
  * @param {string} key Chiave da storicizzare
110
- * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
111
59
  */
112
- persist(key, item, storeLevel) {
113
- return this.persistor.persist(key, item, storeLevel);
60
+ persist(key, item) {
61
+ return this.persistor.persist(key, item);
114
62
  }
115
63
  /**
116
64
  * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.
@@ -122,13 +70,13 @@ class PreferencesService {
122
70
  * @returns {T} Oggetto richiesto
123
71
  */
124
72
  getItem(key, cacheBust = false) {
125
- if (this.LocalPreferences[key] && !cacheBust)
126
- return of(this.LocalPreferences[key]);
73
+ if (this.LocalStore[key] && !cacheBust)
74
+ return of(this.LocalStore[key]);
127
75
  else {
128
76
  var obj = this.persistor.recover(key);
129
77
  if (!obj)
130
78
  return of(null);
131
- obj.pipe(tap(item => { this.LocalPreferences[key] = item; }));
79
+ obj.pipe(tap(item => { this.LocalStore[key] = item; }));
132
80
  return obj;
133
81
  }
134
82
  }
@@ -140,8 +88,8 @@ class PreferencesService {
140
88
  * @returns {T} Oggetto richiesto
141
89
  */
142
90
  getLocalItem(key) {
143
- if (this.LocalPreferences[key])
144
- return this.LocalPreferences[key];
91
+ if (this.LocalStore[key])
92
+ return this.LocalStore[key];
145
93
  else
146
94
  return null;
147
95
  }
@@ -151,34 +99,114 @@ class PreferencesService {
151
99
  * @param {string} key Chiave da rimuovere
152
100
  */
153
101
  removeItem(key) {
154
- if (this.LocalPreferences[key]) {
155
- delete this.LocalPreferences[key];
156
- delete this.LocalPreferenceType[key];
157
- }
102
+ if (this.LocalStore[key])
103
+ delete this.LocalStore[key];
158
104
  return this.persistor.remove(key);
159
105
  }
160
106
  /**
161
107
  * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
162
- *
163
- * @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
164
108
  */
165
- clear(storeLevel) {
109
+ clear() {
166
110
  // Pulisco la cache locale
167
- for (let prop in this.LocalPreferenceType) {
168
- if (this.LocalPreferenceType[prop] == storeLevel) {
169
- delete this.LocalPreferenceType[prop];
170
- delete this.LocalPreferences[prop];
171
- }
172
- }
111
+ this.LocalStore = {};
173
112
  // "Committo" le modifiche
174
- return this.persistor.clear(storeLevel);
113
+ return this.persistor.clear();
114
+ }
115
+ }
116
+ BaseService.ctorParameters = () => [
117
+ { type: undefined },
118
+ { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [PREF_FULL_RETRIEVE_AT_START,] }] }
119
+ ];
120
+
121
+ /** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */
122
+ class CachePersistor {
123
+ /** @ignore Costruttore */
124
+ constructor(session) {
125
+ this.session = session;
126
+ }
127
+ /**
128
+ * Effettua il **persist** massivo di una lista di Chiave - Valore
129
+ *
130
+ * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
131
+ */
132
+ persistAll(dictionary) {
133
+ let observables = [];
134
+ for (let key in dictionary)
135
+ observables.push(this.persist(key, dictionary[key]));
136
+ return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
137
+ }
138
+ /**
139
+ * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
140
+ *
141
+ * @param {string} key Chiave da storicizzare
142
+ *
143
+ * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
144
+ */
145
+ getKey(key) {
146
+ return this.session.getSessionKey() + "§" + key + "§";
147
+ }
148
+ }
149
+
150
+ // Angular
151
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
152
+ class CacheService extends BaseService {
153
+ /** @ignore Costruttore */
154
+ constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
155
+ super(persistor, PREF_FULL_RETRIEVE_AT_START);
156
+ }
157
+ }
158
+ CacheService.decorators = [
159
+ { type: Injectable }
160
+ ];
161
+ CacheService.ctorParameters = () => [
162
+ { type: CachePersistor },
163
+ { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [PREF_FULL_RETRIEVE_AT_START,] }] }
164
+ ];
165
+
166
+ /**
167
+ * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage
168
+ */
169
+ class PreferencesPersistor {
170
+ /** @ignore Costruttore */
171
+ constructor(session) {
172
+ this.session = session;
173
+ }
174
+ /**
175
+ * Effettua il **persist** massivo di una lista di Chiave - Valore
176
+ *
177
+ * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
178
+ */
179
+ persistAll(dictionary) {
180
+ let observables = [];
181
+ for (let key in dictionary)
182
+ observables.push(this.persist(key, dictionary[key]));
183
+ return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
184
+ }
185
+ /**
186
+ * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
187
+ *
188
+ * @param {string} key Chiave da storicizzare
189
+ *
190
+ * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata
191
+ */
192
+ getKey(key) {
193
+ return this.session.getSessionKey() + "§" + key + "§";
194
+ }
195
+ }
196
+
197
+ // Angular
198
+ /** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */
199
+ class PreferencesService extends BaseService {
200
+ /** @ignore Costruttore */
201
+ constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
202
+ super(persistor, PREF_FULL_RETRIEVE_AT_START);
175
203
  }
176
204
  }
177
205
  PreferencesService.decorators = [
178
206
  { type: Injectable }
179
207
  ];
180
208
  PreferencesService.ctorParameters = () => [
181
- { type: BasePreferencesPersistor },
209
+ { type: PreferencesPersistor },
182
210
  { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [PREF_FULL_RETRIEVE_AT_START,] }] }
183
211
  ];
184
212
 
@@ -194,11 +222,35 @@ class PreferencesModuleConfig {
194
222
  class BaseSessionRetriever {
195
223
  }
196
224
 
225
+ /**
226
+ * Implementazione di default per la classe **BaseSessionRetriever**
227
+ */
228
+ class DefaultSessionRetriever extends BaseSessionRetriever {
229
+ /**
230
+ * Costruttore
231
+ *
232
+ * @ignore
233
+ */
234
+ constructor() { super(); }
235
+ /**
236
+ * Ottiene un ID sessione
237
+ *
238
+ * @returns {string} ID sessione
239
+ */
240
+ getSessionKey() {
241
+ return "DUMMY_SESSION";
242
+ }
243
+ }
244
+ DefaultSessionRetriever.decorators = [
245
+ { type: Injectable }
246
+ ];
247
+ DefaultSessionRetriever.ctorParameters = () => [];
248
+
197
249
  // Angular
198
- /** Implementazione di default per la classe **BasePreferencesPersistor** */
199
- class LocalStoragePersistor extends BasePreferencesPersistor {
200
- /** @ignore Costruttore */
201
- constructor(session) { super(session); }
250
+ class LocalStorageCachePersistor extends CachePersistor {
251
+ constructor(session) {
252
+ super(session);
253
+ }
202
254
  /** @ignore Vedi classe base */
203
255
  persist(key, item) {
204
256
  localStorage.setItem(this.getKey(key), JSON.stringify(item));
@@ -232,44 +284,67 @@ class LocalStoragePersistor extends BasePreferencesPersistor {
232
284
  return of(true).pipe(first());
233
285
  }
234
286
  }
235
- LocalStoragePersistor.decorators = [
287
+ LocalStorageCachePersistor.decorators = [
236
288
  { type: Injectable }
237
289
  ];
238
- LocalStoragePersistor.ctorParameters = () => [
290
+ LocalStorageCachePersistor.ctorParameters = () => [
239
291
  { type: BaseSessionRetriever }
240
292
  ];
241
293
 
242
- /**
243
- * Implementazione di default per la classe **BaseSessionRetriever**
244
- */
245
- class DefaultSessionRetriever extends BaseSessionRetriever {
246
- /**
247
- * Costruttore
248
- *
249
- * @ignore
250
- */
251
- constructor() { super(); }
252
- /**
253
- * Ottiene un ID sessione
254
- *
255
- * @returns {string} ID sessione
256
- */
257
- getSessionKey() {
258
- return "DUMMY_SESSION";
294
+ // Angular
295
+ class LocalStoragePreferencesPersistor extends PreferencesPersistor {
296
+ constructor(session) {
297
+ super(session);
298
+ }
299
+ /** @ignore Vedi classe base */
300
+ persist(key, item) {
301
+ localStorage.setItem(this.getKey(key), JSON.stringify(item));
302
+ return of(true).pipe(first());
303
+ }
304
+ /** @ignore Vedi classe base */
305
+ recover(key) {
306
+ var ret = JSON.parse(localStorage.getItem(this.getKey(key)));
307
+ return of(ret).pipe(first());
308
+ }
309
+ /** @ignore Vedi classe base */
310
+ remove(key) {
311
+ var ret = localStorage.removeItem(this.getKey(key));
312
+ return of(true).pipe(first());
313
+ }
314
+ /** @ignore Vedi classe base */
315
+ recoverAll() {
316
+ var ret = {};
317
+ for (var k in localStorage) {
318
+ if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
319
+ ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));
320
+ }
321
+ return of(ret).pipe(first());
322
+ }
323
+ /** @ignore Vedi classe base */
324
+ clear() {
325
+ for (var k in localStorage) {
326
+ if (k.includes("§") && k.startsWith(this.session.getSessionKey()))
327
+ localStorage.removeItem(k);
328
+ }
329
+ return of(true).pipe(first());
259
330
  }
260
331
  }
261
- DefaultSessionRetriever.decorators = [
332
+ LocalStoragePreferencesPersistor.decorators = [
262
333
  { type: Injectable }
263
334
  ];
264
- DefaultSessionRetriever.ctorParameters = () => [];
335
+ LocalStoragePreferencesPersistor.ctorParameters = () => [
336
+ { type: BaseSessionRetriever }
337
+ ];
265
338
 
266
339
  class PreferencesModule {
267
340
  static forRoot(config) {
268
341
  return {
269
342
  ngModule: PreferencesModule,
270
343
  providers: [
344
+ CacheService,
271
345
  PreferencesService,
272
- { provide: BasePreferencesPersistor, useClass: (config === null || config === void 0 ? void 0 : config.preferencePersistor) || LocalStoragePersistor },
346
+ { provide: PreferencesPersistor, useClass: (config === null || config === void 0 ? void 0 : config.preferencePersistor) || LocalStoragePreferencesPersistor },
347
+ { provide: CachePersistor, useClass: (config === null || config === void 0 ? void 0 : config.cachePersistor) || LocalStorageCachePersistor },
273
348
  { provide: BaseSessionRetriever, useClass: (config === null || config === void 0 ? void 0 : config.sessionRetriever) || DefaultSessionRetriever },
274
349
  { provide: PREF_FULL_RETRIEVE_AT_START, useValue: (config === null || config === void 0 ? void 0 : config.retrieveAllAtStart) || true }
275
350
  ]
@@ -284,5 +359,5 @@ PreferencesModule.decorators = [
284
359
  * Generated bundle index. Do not edit.
285
360
  */
286
361
 
287
- export { BasePreferencesPersistor, BaseSessionRetriever, PREF_FULL_RETRIEVE_AT_START, PreferencesModule, PreferencesModuleConfig, PreferencesService, LocalStoragePersistor as ɵa, DefaultSessionRetriever as ɵb };
362
+ export { BaseSessionRetriever, CachePersistor, CacheService, PREF_FULL_RETRIEVE_AT_START, PreferencesModule, PreferencesModuleConfig, PreferencesPersistor, PreferencesService, BaseService as ɵa, LocalStoragePreferencesPersistor as ɵc, LocalStorageCachePersistor as ɵd, DefaultSessionRetriever as ɵe };
288
363
  //# sourceMappingURL=esfaenza-preferences.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-preferences.js","sources":["../../../projects/preferences/src/lib/persistor/base/BasePreferencesPersistor.ts","../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/preferences.service.ts","../../../projects/preferences/src/lib/models/PreferencesModuleConfig.ts","../../../projects/preferences/src/lib/session/base/BaseSessionRetriever.ts","../../../projects/preferences/src/lib/persistor/implementation/LocalStoragePersistor.ts","../../../projects/preferences/src/lib/session/implementation/DefaultSessionRetriever.ts","../../../projects/preferences/src/lib/preferences.module.ts","../../../projects/preferences/src/esfaenza-preferences.ts"],"sourcesContent":["import { Observable, forkJoin } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\n\r\n/**\r\n * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage\r\n */\r\nexport abstract class BasePreferencesPersistor {\r\n\r\n /** @ignore Costruttore */\r\n constructor(protected session: BaseSessionRetriever) {}\r\n\r\n /**\r\n * Salva, per una sessione, una chiave con un valore\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n public abstract persist<T>(key: string, item: T, storeLevel: 'cache' | 'preference'): Observable<boolean>;\r\n\r\n /**\r\n * Recupera, per una sessione, il valore assegnato ad una chiave\r\n * \r\n * @param {string} key Chiave da recuperare\r\n * \r\n * @returns {Observable<T>} Valore salvato per la chiave **key**\r\n */\r\n public abstract recover<T>(key?: string): Observable<T>;\r\n\r\n /**\r\n * Per una sessione recupera tutte le coppie Chiave - Valore salvate\r\n * \r\n * @returns {Observable<{ [index: string]: any }>} Dizionario con tutte le preference salvate per la sessione\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n public abstract recoverAll(storeLevel: 'cache' | 'preference'): Observable<{ [index: string]: any }>;\r\n\r\n /**\r\n * Ripulisce le preference salvate relative ad una sessione\r\n * @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\r\n */\r\n public abstract clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;\r\n\r\n /**\r\n * Elimina un oggetto dalla cache persistita\r\n * \r\n * @param {string} key Chiave da rimuovere\r\n */\r\n public abstract remove(key: string): Observable<boolean>;\r\n\r\n /**\r\n * Effettua il **persist** massivo di una lista di Chiave - Valore\r\n * \r\n * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n public persistAll(dictionary: { [key: string]: string }, storeLevel: 'cache' | 'preference'): Observable<boolean> {\r\n let observables: Observable<boolean>[] = [];\r\n for (let key in dictionary)\r\n observables.push(this.persist(key, dictionary[key], storeLevel));\r\n\r\n return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));\r\n }\r\n\r\n /**\r\n * Ottiene la chiave \"Reale\" da utilizzare per la persistenza di una chiave generica\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n * \r\n * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata\r\n */\r\n protected getKey(key: string): string {\r\n return this.session.getSessionKey() + \"§\" + key + \"§\";\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.\r\n * \r\n * Utile se non vengono salvate tante cose, potrebbe creare un momento di irresponsività se le info da recuperare sono molte\r\n */\r\nexport const PREF_FULL_RETRIEVE_AT_START: InjectionToken<boolean> = new InjectionToken<boolean>('PREF_FULL_RETRIEVE_AT_START');","// Angular\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { take, tap } from 'rxjs/operators';\r\n\r\n// Modelli\r\nimport { BasePreferencesPersistor } from './persistor/base/BasePreferencesPersistor';\r\nimport { PREF_FULL_RETRIEVE_AT_START } from './tokens';\r\n\r\n/**\r\n * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate\r\n */\r\n@Injectable()\r\nexport class PreferencesService {\r\n\r\n /**\r\n * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**\r\n */\r\n private LocalPreferences: { [index: string]: any } = {};\r\n\r\n /**\r\n * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear\r\n */\r\n private LocalPreferenceType: { [index: string]: 'cache' | 'preference' } = {};\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private persistor: BasePreferencesPersistor, @Optional() @Inject(PREF_FULL_RETRIEVE_AT_START) private PREF_FULL_RETRIEVE_AT_START: boolean) {\r\n if (this.PREF_FULL_RETRIEVE_AT_START) {\r\n // Recupero tutti gli oggetti differenziando anche lato locale fra cache e preferences\r\n forkJoin([\r\n this.persistor.recoverAll('cache').pipe(take(1)),\r\n this.persistor.recoverAll('preference').pipe(take(1))\r\n ]).subscribe((res: [{ [index: string]: any }, { [index: string]: any }]) => {\r\n\r\n for (let cProp in res[0]) {\r\n this.LocalPreferences[cProp] = res[0][cProp];\r\n this.LocalPreferenceType[cProp] = 'cache';\r\n }\r\n for (let pProp in res[1]) {\r\n this.LocalPreferences[pProp] = res[0][pProp];\r\n this.LocalPreferenceType[pProp] = 'preference';\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Salva un oggetto sia nella cache locale che nel persistor\r\n * \r\n * @param {string} key Chiave di persistenza\r\n * @param {T} item Oggetto da salvare\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n public setItem<T>(key: string, item: T, storeLevel: 'cache' | 'preference' = 'cache'): Observable<boolean> {\r\n this.setLocalItem(key, item, storeLevel)\r\n return this.persist(key, item, storeLevel);\r\n }\r\n\r\n /**\r\n * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione\r\n * \r\n * @param {string} key Chiave di persistenza\r\n * @param {T} item Oggetto da salvare\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n public setLocalItem<T>(key: string, item: T, storeLevel: 'cache' | 'preference' = 'cache'): boolean {\r\n this.LocalPreferences[key] = item;\r\n this.LocalPreferenceType[key] = storeLevel;\r\n return true;\r\n }\r\n\r\n /**\r\n * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente\r\n * nel caso si utilizzi il metodo **storeLocal**\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente\r\n */\r\n private persist<T>(key: string, item: T, storeLevel: 'cache' | 'preference'): Observable<boolean> {\r\n return this.persistor.persist(key, item, storeLevel);\r\n }\r\n\r\n /**\r\n * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.\r\n * \r\n * @param {string} key Chiave del valore da recuperare\r\n * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito, \r\n * in caso fosse stato modificato fuori sistema o da un altro sistema\r\n * \r\n * @returns {T} Oggetto richiesto\r\n */\r\n public getItem<T>(key: string, cacheBust: boolean = false): Observable<T> {\r\n if (this.LocalPreferences[key] && !cacheBust)\r\n return of(<T>this.LocalPreferences[key]);\r\n else {\r\n var obj = this.persistor.recover<T>(key);\r\n if (!obj)\r\n return of(null);\r\n obj.pipe(tap(item => { this.LocalPreferences[key] = item; }))\r\n return obj;\r\n }\r\n }\r\n\r\n /**\r\n * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale\r\n * \r\n * @param {string} key Chiave del valore da recuperare\r\n * \r\n * @returns {T} Oggetto richiesto\r\n */\r\n public getLocalItem<T>(key: string): T {\r\n if (this.LocalPreferences[key])\r\n return <T>this.LocalPreferences[key];\r\n else\r\n return null;\r\n }\r\n\r\n /**\r\n * Elimina un oggetto dalla cache sia locale che persistita\r\n * \r\n * @param {string} key Chiave da rimuovere\r\n */\r\n public removeItem(key: string): Observable<boolean> {\r\n if (this.LocalPreferences[key]) {\r\n delete this.LocalPreferences[key];\r\n delete this.LocalPreferenceType[key];\r\n }\r\n\r\n return this.persistor.remove(key);\r\n }\r\n\r\n /**\r\n * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor\r\n * \r\n * @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\r\n */\r\n public clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean> {\r\n // Pulisco la cache locale\r\n for (let prop in this.LocalPreferenceType) {\r\n if (this.LocalPreferenceType[prop] == storeLevel) {\r\n delete this.LocalPreferenceType[prop];\r\n delete this.LocalPreferences[prop];\r\n }\r\n }\r\n // \"Committo\" le modifiche\r\n return this.persistor.clear(storeLevel);\r\n }\r\n}","import { Type } from \"@angular/core\";\r\nimport { BasePreferencesPersistor } from \"../persistor/base/BasePreferencesPersistor\";\r\nimport { BaseSessionRetriever } from \"../session/base/BaseSessionRetriever\";\r\n\r\n/**\r\n * Classe di Configurazione per la libreria\r\n */\r\nexport class PreferencesModuleConfig{\r\n\r\n /**\r\n * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.\r\n * \r\n * Utile se non vengono salvate tante cose, potrebbe creare un momento di irresponsività se le info da recuperare sono molte\r\n */\r\n retrieveAllAtStart?: boolean;\r\n\r\n /**\r\n * Classe che si deve occupare dello store \"Definitivo\" delle preferenze. Di default viene proposto uno store lato localStorage ma si può facilmente \r\n * fornire uno storage che porta le informazioni lato Database\r\n */\r\n preferencePersistor?: Type<BasePreferencesPersistor>;\r\n\r\n /**\r\n * Classe che si deve occupare per generare un ID univoco di sessione in base al quale verranno salvate le preferenze\r\n */\r\n sessionRetriever?: Type<BaseSessionRetriever>;\r\n}","/**\r\n * Classe astratta che si occupa di recuperare l'Id sessione univoco per applicazione ed utente collegato\r\n */\r\nexport abstract class BaseSessionRetriever {\r\n\r\n /**\r\n * Ottiene un ID sessione\r\n * \r\n * @returns {string} ID sessione\r\n */\r\n public abstract getSessionKey(): string;\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Classi\r\nimport { BasePreferencesPersistor } from \"../base/BasePreferencesPersistor\";\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\n\r\n// RXJS\r\nimport { Observable, of } from \"rxjs\";\r\nimport { first } from \"rxjs/operators\";\r\n\r\n/** Implementazione di default per la classe **BasePreferencesPersistor** */\r\n@Injectable()\r\nexport class LocalStoragePersistor extends BasePreferencesPersistor {\r\n\r\n /** @ignore Costruttore */\r\n constructor(session: BaseSessionRetriever) { super(session); }\r\n\r\n /** @ignore Vedi classe base */\r\n public persist<T>(key: string, item: T): Observable<boolean> {\r\n localStorage.setItem(this.getKey(key), JSON.stringify(item));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recover<T>(key: string): Observable<T> {\r\n var ret = <T>JSON.parse(localStorage.getItem(this.getKey(key)));\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public remove(key: string): Observable<boolean> {\r\n var ret = localStorage.removeItem(this.getKey(key));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recoverAll(): Observable<{ [index: string]: any; }> {\r\n var ret: { [index: string]: string; } = {};\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));\r\n }\r\n\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public clear(): Observable<boolean> {\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n localStorage.removeItem(k);\r\n }\r\n return of(true).pipe(first());\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { BaseSessionRetriever } from \"../base/BaseSessionRetriever\";\r\n\r\n/**\r\n * Implementazione di default per la classe **BaseSessionRetriever**\r\n */\r\n@Injectable()\r\nexport class DefaultSessionRetriever extends BaseSessionRetriever {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Ottiene un ID sessione\r\n * \r\n * @returns {string} ID sessione\r\n */\r\n getSessionKey(): string {\r\n return \"DUMMY_SESSION\";\r\n }\r\n}","// Angular\nimport { ModuleWithProviders } from '@angular/core';\nimport { NgModule } from '@angular/core';\n\n// Modelli\nimport { PreferencesModuleConfig } from './models/PreferencesModuleConfig';\nimport { BasePreferencesPersistor } from './persistor/base/BasePreferencesPersistor';\nimport { LocalStoragePersistor } from './persistor/implementation/LocalStoragePersistor';\nimport { BaseSessionRetriever } from './session/base/BaseSessionRetriever';\nimport { DefaultSessionRetriever } from './session/implementation/DefaultSessionRetriever';\nimport { PreferencesService } from './preferences.service';\nimport { PREF_FULL_RETRIEVE_AT_START } from './tokens';\n\n@NgModule()\nexport class PreferencesModule {\n static forRoot(config?: PreferencesModuleConfig): ModuleWithProviders<PreferencesModule> {\n return {\n ngModule: PreferencesModule,\n providers: [\n PreferencesService,\n { provide: BasePreferencesPersistor, useClass: config?.preferencePersistor || LocalStoragePersistor },\n { provide: BaseSessionRetriever, useClass: config?.sessionRetriever || DefaultSessionRetriever },\n { provide: PREF_FULL_RETRIEVE_AT_START, useValue: config?.retrieveAllAtStart || true }\n ]\n };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {LocalStoragePersistor as ɵa} from './lib/persistor/implementation/LocalStoragePersistor';\nexport {DefaultSessionRetriever as ɵb} from './lib/session/implementation/DefaultSessionRetriever';"],"names":[],"mappings":";;;;AAIA;;;MAGsB,wBAAwB;;IAG1C,YAAsB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;KAAI;;;;;;;IA8ChD,UAAU,CAAC,UAAqC,EAAE,UAAkC;QACvF,IAAI,WAAW,GAA0B,EAAE,CAAC;QAC5C,KAAK,IAAI,GAAG,IAAI,UAAU;YACtB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAErE,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7F;;;;;;;;IASS,MAAM,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACzD;;;ACvEL;;;;;MAKa,2BAA2B,GAA4B,IAAI,cAAc,CAAU,6BAA6B;;ACP7H;AASA;;;MAIa,kBAAkB;;;;;;IAiB7B,YAAoB,SAAmC,EAA2D,2BAAoC;QAAlI,cAAS,GAAT,SAAS,CAA0B;QAA2D,gCAA2B,GAA3B,2BAA2B,CAAS;;;;QAZ9I,qBAAgB,GAA6B,EAAE,CAAC;;;;QAKhD,wBAAmB,GAAgD,EAAE,CAAC;QAQ5E,IAAI,IAAI,CAAC,2BAA2B,EAAE;;YAEpC,QAAQ,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACtD,CAAC,CAAC,SAAS,CAAC,CAAC,GAAyD;gBAErE,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;oBACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;iBAC3C;gBACD,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;oBACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC7C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;iBAChD;aACF,CAAC,CAAC;SACJ;KACF;;;;;;;;IASM,OAAO,CAAI,GAAW,EAAE,IAAO,EAAE,aAAqC,OAAO;QAClF,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;KAC5C;;;;;;;;IASM,YAAY,CAAI,GAAW,EAAE,IAAO,EAAE,aAAqC,OAAO;QACvF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;QAC3C,OAAO,IAAI,CAAC;KACb;;;;;;;;IASO,OAAO,CAAI,GAAW,EAAE,IAAO,EAAE,UAAkC;QACzE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;KACtD;;;;;;;;;;IAWM,OAAO,CAAI,GAAW,EAAE,YAAqB,KAAK;QACvD,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS;YAC1C,OAAO,EAAE,CAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;YACH,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAI,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG;gBACN,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YAC7D,OAAO,GAAG,CAAC;SACZ;KACF;;;;;;;;IASM,YAAY,CAAI,GAAW;QAChC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAC5B,OAAU,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;;YAErC,OAAO,IAAI,CAAC;KACf;;;;;;IAOM,UAAU,CAAC,GAAW;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;SACtC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACnC;;;;;;IAOM,KAAK,CAAC,UAA0C;;QAErD,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE;YACzC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE;gBAChD,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACpC;SACF;;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACzC;;;YA1IF,UAAU;;;YANF,wBAAwB;0CAwB2B,QAAQ,YAAI,MAAM,SAAC,2BAA2B;;;AC1B1G;;;MAGa,uBAAuB;;;ACPpC;;;MAGsB,oBAAoB;;;ACH1C;AAWA;MAEa,qBAAsB,SAAQ,wBAAwB;;IAG/D,YAAY,OAA6B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;;IAGvD,OAAO,CAAI,GAAW,EAAE,IAAO;QAClC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACjC;;IAGM,OAAO,CAAI,GAAW;QACzB,IAAI,GAAG,GAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAChC;;IAGM,MAAM,CAAC,GAAW;QACrB,IAAI,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACjC;;IAGM,UAAU;QACb,IAAI,GAAG,GAAiC,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,IAAI,YAAY,EAAE;YACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC7D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACvE;QAED,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KAChC;;IAGM,KAAK;QACR,KAAK,IAAI,CAAC,IAAI,YAAY,EAAE;YACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC7D,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACjC;;;YA1CJ,UAAU;;;YAPF,oBAAoB;;;ACF7B;;;MAIa,uBAAwB,SAAQ,oBAAoB;;;;;;IAO7D,gBAAgB,KAAK,EAAE,CAAC,EAAE;;;;;;IAO1B,aAAa;QACT,OAAO,eAAe,CAAC;KAC1B;;;YAjBJ,UAAU;;;;MCQE,iBAAiB;IAC5B,OAAO,OAAO,CAAC,MAAgC;QAC7C,OAAO;YACL,QAAQ,EAAE,iBAAiB;YAC3B,SAAS,EAAE;gBACT,kBAAkB;gBAClB,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,KAAI,qBAAqB,EAAE;gBACrG,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,KAAI,uBAAuB,EAAE;gBAChG,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,kBAAkB,KAAI,IAAI,EAAE;aACvF;SACF,CAAC;KACH;;;YAZF,QAAQ;;;ACbT;;;;;;"}
1
+ {"version":3,"file":"esfaenza-preferences.js","sources":["../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/services/base/base.service.ts","../../../projects/preferences/src/lib/persistor/base/CachePersistor.ts","../../../projects/preferences/src/lib/services/cache.service.ts","../../../projects/preferences/src/lib/persistor/base/PreferencesPersistor.ts","../../../projects/preferences/src/lib/services/preferences.service.ts","../../../projects/preferences/src/lib/models/PreferencesModuleConfig.ts","../../../projects/preferences/src/lib/session/base/BaseSessionRetriever.ts","../../../projects/preferences/src/lib/session/implementation/DefaultSessionRetriever.ts","../../../projects/preferences/src/lib/persistor/implementation/LocalStorageCachePersistor.ts","../../../projects/preferences/src/lib/persistor/implementation/LocalStoragePreferencesPersistor.ts","../../../projects/preferences/src/lib/preferences.module.ts","../../../projects/preferences/src/esfaenza-preferences.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.\r\n * \r\n * Utile se non vengono salvate tante cose, potrebbe creare un momento di irresponsività se le info da recuperare sono molte\r\n */\r\nexport const PREF_FULL_RETRIEVE_AT_START: InjectionToken<boolean> = new InjectionToken<boolean>('PREF_FULL_RETRIEVE_AT_START');","// Angular\r\nimport { Inject, Optional } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { take, tap } from 'rxjs/operators';\r\nimport { IBasePersistor } from '../../persistor/base/IBasePersistor';\r\n\r\n// Modelli\r\nimport { PREF_FULL_RETRIEVE_AT_START } from '../../tokens';\r\nimport { IBaseStorage } from './IBaseStorage';\r\n\r\n/**\r\n * Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate\r\n */\r\nexport class BaseService implements IBaseStorage {\r\n\r\n /** Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor** */\r\n protected LocalStore: { [index: string]: any } = {};\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private persistor: IBasePersistor, @Optional() @Inject(PREF_FULL_RETRIEVE_AT_START) private PREF_FULL_RETRIEVE_AT_START: boolean) {\r\n if (this.PREF_FULL_RETRIEVE_AT_START) {\r\n\r\n this.persistor.recoverAll().pipe(take(1)).subscribe(t => {\r\n for (let cProp in t)\r\n this.LocalStore[cProp] = t[cProp];\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Salva un oggetto sia nella cache locale che nel persistor\r\n * \r\n * @param {string} key Chiave di persistenza\r\n * @param {T} item Oggetto da salvare\r\n */\r\n public setItem<T>(key: string, item: T): Observable<boolean> {\r\n this.setLocalItem(key, item)\r\n return this.persist(key, item);\r\n }\r\n\r\n /**\r\n * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione\r\n * \r\n * @param {string} key Chiave di persistenza\r\n * @param {T} item Oggetto da salvare\r\n */\r\n public setLocalItem<T>(key: string, item: T): boolean {\r\n this.LocalStore[key] = item;\r\n return true;\r\n }\r\n\r\n /**\r\n * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente\r\n * nel caso si utilizzi il metodo **storeLocal**\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n */\r\n private persist<T>(key: string, item: T): Observable<boolean> {\r\n return this.persistor.persist(key, item);\r\n }\r\n\r\n /**\r\n * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.\r\n * \r\n * @param {string} key Chiave del valore da recuperare\r\n * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito, \r\n * in caso fosse stato modificato fuori sistema o da un altro sistema\r\n * \r\n * @returns {T} Oggetto richiesto\r\n */\r\n public getItem<T>(key: string, cacheBust: boolean = false): Observable<T> {\r\n if (this.LocalStore[key] && !cacheBust)\r\n return of(<T>this.LocalStore[key]);\r\n else {\r\n var obj = this.persistor.recover<T>(key);\r\n if (!obj)\r\n return of(null);\r\n obj.pipe(tap(item => { this.LocalStore[key] = item; }))\r\n return obj;\r\n }\r\n }\r\n\r\n /**\r\n * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale\r\n * \r\n * @param {string} key Chiave del valore da recuperare\r\n * \r\n * @returns {T} Oggetto richiesto\r\n */\r\n public getLocalItem<T>(key: string): T {\r\n if (this.LocalStore[key])\r\n return <T>this.LocalStore[key];\r\n else\r\n return null;\r\n }\r\n\r\n /**\r\n * Elimina un oggetto dalla cache sia locale che persistita\r\n * \r\n * @param {string} key Chiave da rimuovere\r\n */\r\n public removeItem(key: string): Observable<boolean> {\r\n if (this.LocalStore[key])\r\n delete this.LocalStore[key];\r\n\r\n return this.persistor.remove(key);\r\n }\r\n\r\n /**\r\n * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor\r\n */\r\n public clear(): Observable<boolean> {\r\n // Pulisco la cache locale\r\n this.LocalStore = {};\r\n // \"Committo\" le modifiche\r\n return this.persistor.clear();\r\n }\r\n}","import { Observable, forkJoin } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\nimport { IBasePersistor } from \"./IBasePersistor\";\r\n\r\n/** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */\r\nexport abstract class CachePersistor implements IBasePersistor {\r\n\r\n /** @ignore Costruttore */\r\n constructor(protected session: BaseSessionRetriever) {}\r\n\r\n /**\r\n * Salva, per una sessione, una chiave con un valore\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n */\r\n public abstract persist<T>(key: string, item: T): Observable<boolean>;\r\n\r\n /**\r\n * Recupera, per una sessione, il valore assegnato ad una chiave\r\n * \r\n * @param {string} key Chiave da recuperare\r\n * \r\n * @returns {Observable<T>} Valore salvato per la chiave **key**\r\n */\r\n public abstract recover<T>(key?: string): Observable<T>;\r\n\r\n /**\r\n * Per una sessione recupera tutte le coppie Chiave - Valore salvate\r\n * \r\n * @returns {Observable<{ [index: string]: any }>} Dizionario con tutte le preference salvate per la sessione\r\n */\r\n public abstract recoverAll(): Observable<{ [index: string]: any }>;\r\n\r\n /**\r\n * Ripulisce le preference salvate relative ad una sessione\r\n */\r\n public abstract clear(): Observable<boolean>;\r\n\r\n /**\r\n * Elimina un oggetto dalla cache persistita\r\n * \r\n * @param {string} key Chiave da rimuovere\r\n */\r\n public abstract remove(key: string): Observable<boolean>;\r\n\r\n /**\r\n * Effettua il **persist** massivo di una lista di Chiave - Valore\r\n * \r\n * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere\r\n */\r\n public persistAll(dictionary: { [key: string]: string }): Observable<boolean> {\r\n let observables: Observable<boolean>[] = [];\r\n for (let key in dictionary)\r\n observables.push(this.persist(key, dictionary[key]));\r\n\r\n return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));\r\n }\r\n\r\n /**\r\n * Ottiene la chiave \"Reale\" da utilizzare per la persistenza di una chiave generica\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n * \r\n * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata\r\n */\r\n public getKey(key: string): string {\r\n return this.session.getSessionKey() + \"§\" + key + \"§\";\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { BaseService } from './base/base.service';\r\n\r\n// Modelli\r\nimport { PREF_FULL_RETRIEVE_AT_START } from './../tokens';\r\nimport { CachePersistor } from '../persistor/base/CachePersistor';\r\n\r\n/** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */\r\n@Injectable()\r\nexport class CacheService extends BaseService {\r\n\r\n /** @ignore Costruttore */\r\n constructor(persistor: CachePersistor, @Optional() @Inject(PREF_FULL_RETRIEVE_AT_START) PREF_FULL_RETRIEVE_AT_START: boolean) {\r\n super(persistor, PREF_FULL_RETRIEVE_AT_START);\r\n }\r\n}","import { Observable, forkJoin } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\nimport { IBasePersistor } from \"./IBasePersistor\";\r\n\r\n/**\r\n * Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage\r\n */\r\nexport abstract class PreferencesPersistor implements IBasePersistor {\r\n\r\n /** @ignore Costruttore */\r\n constructor(protected session: BaseSessionRetriever) {}\r\n\r\n /**\r\n * Salva, per una sessione, una chiave con un valore\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n */\r\n public abstract persist<T>(key: string, item: T): Observable<boolean>;\r\n\r\n /**\r\n * Recupera, per una sessione, il valore assegnato ad una chiave\r\n * \r\n * @param {string} key Chiave da recuperare\r\n * \r\n * @returns {Observable<T>} Valore salvato per la chiave **key**\r\n */\r\n public abstract recover<T>(key?: string): Observable<T>;\r\n\r\n /**\r\n * Per una sessione recupera tutte le coppie Chiave - Valore salvate\r\n * \r\n * @returns {Observable<{ [index: string]: any }>} Dizionario con tutte le preference salvate per la sessione\r\n */\r\n public abstract recoverAll(): Observable<{ [index: string]: any }>;\r\n\r\n /**\r\n * Ripulisce le preference salvate relative ad una sessione\r\n */\r\n public abstract clear(): Observable<boolean>;\r\n\r\n /**\r\n * Elimina un oggetto dalla cache persistita\r\n * \r\n * @param {string} key Chiave da rimuovere\r\n */\r\n public abstract remove(key: string): Observable<boolean>;\r\n\r\n /**\r\n * Effettua il **persist** massivo di una lista di Chiave - Valore\r\n * \r\n * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere\r\n */\r\n public persistAll(dictionary: { [key: string]: string }): Observable<boolean> {\r\n let observables: Observable<boolean>[] = [];\r\n for (let key in dictionary)\r\n observables.push(this.persist(key, dictionary[key]));\r\n\r\n return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));\r\n }\r\n\r\n /**\r\n * Ottiene la chiave \"Reale\" da utilizzare per la persistenza di una chiave generica\r\n * \r\n * @param {string} key Chiave da storicizzare\r\n * \r\n * @returns {string} Unione fra l'identificativo della sessione e la chiave specificata\r\n */\r\n public getKey(key: string): string {\r\n return this.session.getSessionKey() + \"§\" + key + \"§\";\r\n }\r\n}","// Angular\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { BaseService } from './base/base.service';\r\n\r\n// Modelli\r\nimport { PREF_FULL_RETRIEVE_AT_START } from './../tokens';\r\nimport { PreferencesPersistor } from '../persistor/base/PreferencesPersistor';\r\n\r\n/** Service che si occupa di salvare e recuperare le preferenze utente rispetto alle chiavi salvate */\r\n@Injectable()\r\nexport class PreferencesService extends BaseService {\r\n\r\n /** @ignore Costruttore */\r\n constructor(persistor: PreferencesPersistor, @Optional() @Inject(PREF_FULL_RETRIEVE_AT_START) PREF_FULL_RETRIEVE_AT_START: boolean) {\r\n super(persistor, PREF_FULL_RETRIEVE_AT_START);\r\n }\r\n}","import { Type } from \"@angular/core\";\r\nimport { CachePersistor } from \"../persistor/base/CachePersistor\";\r\nimport { PreferencesPersistor } from \"../persistor/base/PreferencesPersistor\";\r\nimport { BaseSessionRetriever } from \"../session/base/BaseSessionRetriever\";\r\n\r\n/**\r\n * Classe di Configurazione per la libreria\r\n */\r\nexport class PreferencesModuleConfig{\r\n\r\n /**\r\n * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.\r\n * \r\n * Utile se non vengono salvate tante cose, potrebbe creare un momento di irresponsività se le info da recuperare sono molte\r\n */\r\n retrieveAllAtStart?: boolean;\r\n\r\n /**\r\n * Classe che si deve occupare dello store \"Definitivo\" delle preferenze. Di default viene proposto uno store lato localStorage ma si può facilmente \r\n * fornire uno storage che porta le informazioni lato Database\r\n */\r\n preferencePersistor?: Type<PreferencesPersistor>;\r\n\r\n /**\r\n * Classe che si deve occupare dello store \"Definitivo\" delle cache. Di default viene proposto uno store lato localStorage ma si può facilmente \r\n * fornire uno storage che porta le informazioni lato Database\r\n */\r\n cachePersistor?: Type<CachePersistor>;\r\n\r\n /**\r\n * Classe che si deve occupare per generare un ID univoco di sessione in base al quale verranno salvate le preferenze\r\n */\r\n sessionRetriever?: Type<BaseSessionRetriever>;\r\n}","/**\r\n * Classe astratta che si occupa di recuperare l'Id sessione univoco per applicazione ed utente collegato\r\n */\r\nexport abstract class BaseSessionRetriever {\r\n\r\n /**\r\n * Ottiene un ID sessione\r\n * \r\n * @returns {string} ID sessione\r\n */\r\n public abstract getSessionKey(): string;\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { BaseSessionRetriever } from \"../base/BaseSessionRetriever\";\r\n\r\n/**\r\n * Implementazione di default per la classe **BaseSessionRetriever**\r\n */\r\n@Injectable()\r\nexport class DefaultSessionRetriever extends BaseSessionRetriever {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor() { super(); }\r\n\r\n /**\r\n * Ottiene un ID sessione\r\n * \r\n * @returns {string} ID sessione\r\n */\r\n getSessionKey(): string {\r\n return \"DUMMY_SESSION\";\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Classi\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\nimport { CachePersistor } from \"../base/CachePersistor\";\r\nimport { IBasePersistor } from \"../base/IBasePersistor\";\r\n\r\n// RXJS\r\nimport { Observable, of } from \"rxjs\";\r\nimport { first } from \"rxjs/operators\";\r\n\r\n@Injectable()\r\nexport class LocalStorageCachePersistor extends CachePersistor implements IBasePersistor {\r\n\r\n constructor(session: BaseSessionRetriever) {\r\n super(session);\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public persist<T>(key: string, item: T): Observable<boolean> {\r\n localStorage.setItem(this.getKey(key), JSON.stringify(item));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recover<T>(key: string): Observable<T> {\r\n var ret = <T>JSON.parse(localStorage.getItem(this.getKey(key)));\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public remove(key: string): Observable<boolean> {\r\n var ret = localStorage.removeItem(this.getKey(key));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recoverAll(): Observable<{ [index: string]: any; }> {\r\n var ret: { [index: string]: string; } = {};\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));\r\n }\r\n\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public clear(): Observable<boolean> {\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n localStorage.removeItem(k);\r\n }\r\n return of(true).pipe(first());\r\n }\r\n}\r\n\r\n","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// RXJS\r\nimport { Observable, of } from \"rxjs\";\r\nimport { first } from \"rxjs/operators\";\r\n\r\n// Classi\r\nimport { BaseSessionRetriever } from \"../../session/base/BaseSessionRetriever\";\r\nimport { PreferencesPersistor } from \"../base/PreferencesPersistor\";\r\nimport { IBasePersistor } from \"../base/IBasePersistor\";\r\n\r\n@Injectable()\r\nexport class LocalStoragePreferencesPersistor extends PreferencesPersistor implements IBasePersistor {\r\n\r\n constructor(session: BaseSessionRetriever) {\r\n super(session);\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public persist<T>(key: string, item: T): Observable<boolean> {\r\n localStorage.setItem(this.getKey(key), JSON.stringify(item));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recover<T>(key: string): Observable<T> {\r\n var ret = <T>JSON.parse(localStorage.getItem(this.getKey(key)));\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public remove(key: string): Observable<boolean> {\r\n var ret = localStorage.removeItem(this.getKey(key));\r\n return of(true).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public recoverAll(): Observable<{ [index: string]: any; }> {\r\n var ret: { [index: string]: string; } = {};\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n ret[k.match(/§(.*)§/)[1]] = JSON.parse(localStorage.getItem(k));\r\n }\r\n\r\n return of(ret).pipe(first());\r\n }\r\n\r\n /** @ignore Vedi classe base */\r\n public clear(): Observable<boolean> {\r\n for (var k in localStorage) {\r\n if (k.includes(\"§\") && k.startsWith(this.session.getSessionKey()))\r\n localStorage.removeItem(k);\r\n }\r\n return of(true).pipe(first());\r\n }\r\n}\r\n","// Angular\nimport { ModuleWithProviders } from '@angular/core';\nimport { NgModule } from '@angular/core';\n\n// Modelli\nimport { PreferencesModuleConfig } from './models/PreferencesModuleConfig';\nimport { CacheService } from './services/cache.service';\nimport { PreferencesService } from './services/preferences.service';\nimport { BaseSessionRetriever } from './session/base/BaseSessionRetriever';\nimport { DefaultSessionRetriever } from './session/implementation/DefaultSessionRetriever';\nimport { PREF_FULL_RETRIEVE_AT_START } from './tokens';\nimport { CachePersistor } from './persistor/base/CachePersistor';\nimport { PreferencesPersistor } from './persistor/base/PreferencesPersistor';\nimport { LocalStorageCachePersistor } from './persistor/implementation/LocalStorageCachePersistor';\nimport { LocalStoragePreferencesPersistor } from './persistor/implementation/LocalStoragePreferencesPersistor';\n\n@NgModule()\nexport class PreferencesModule {\n static forRoot(config?: PreferencesModuleConfig): ModuleWithProviders<PreferencesModule> {\n return {\n ngModule: PreferencesModule,\n providers: [\n CacheService,\n PreferencesService,\n { provide: PreferencesPersistor, useClass: config?.preferencePersistor || LocalStoragePreferencesPersistor },\n { provide: CachePersistor, useClass: config?.cachePersistor || LocalStorageCachePersistor },\n { provide: BaseSessionRetriever, useClass: config?.sessionRetriever || DefaultSessionRetriever },\n { provide: PREF_FULL_RETRIEVE_AT_START, useValue: config?.retrieveAllAtStart || true }\n ]\n };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {IBasePersistor as ɵb} from './lib/persistor/base/IBasePersistor';\nexport {LocalStorageCachePersistor as ɵd} from './lib/persistor/implementation/LocalStorageCachePersistor';\nexport {LocalStoragePreferencesPersistor as ɵc} from './lib/persistor/implementation/LocalStoragePreferencesPersistor';\nexport {BaseService as ɵa} from './lib/services/base/base.service';\nexport {DefaultSessionRetriever as ɵe} from './lib/session/implementation/DefaultSessionRetriever';"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { Type } from "@angular/core";
2
- import { BasePreferencesPersistor } from "../persistor/base/BasePreferencesPersistor";
2
+ import { CachePersistor } from "../persistor/base/CachePersistor";
3
+ import { PreferencesPersistor } from "../persistor/base/PreferencesPersistor";
3
4
  import { BaseSessionRetriever } from "../session/base/BaseSessionRetriever";
4
5
  /**
5
6
  * Classe di Configurazione per la libreria
@@ -15,7 +16,12 @@ export declare class PreferencesModuleConfig {
15
16
  * Classe che si deve occupare dello store "Definitivo" delle preferenze. Di default viene proposto uno store lato localStorage ma si può facilmente
16
17
  * fornire uno storage che porta le informazioni lato Database
17
18
  */
18
- preferencePersistor?: Type<BasePreferencesPersistor>;
19
+ preferencePersistor?: Type<PreferencesPersistor>;
20
+ /**
21
+ * Classe che si deve occupare dello store "Definitivo" delle cache. Di default viene proposto uno store lato localStorage ma si può facilmente
22
+ * fornire uno storage che porta le informazioni lato Database
23
+ */
24
+ cachePersistor?: Type<CachePersistor>;
19
25
  /**
20
26
  * Classe che si deve occupare per generare un ID univoco di sessione in base al quale verranno salvate le preferenze
21
27
  */
@@ -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
+ }