@esfaenza/preferences 13.1.2 → 13.1.6

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.
@@ -12,11 +12,12 @@ export class BasePreferencesPersistor {
12
12
  * Effettua il **persist** massivo di una lista di Chiave - Valore
13
13
  *
14
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
15
16
  */
16
- persistAll(dictionary) {
17
+ persistAll(dictionary, storeLevel) {
17
18
  let observables = [];
18
19
  for (let key in dictionary)
19
- observables.push(this.persist(key, dictionary[key]));
20
+ observables.push(this.persist(key, dictionary[key], storeLevel));
20
21
  return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
21
22
  }
22
23
  /**
@@ -30,4 +31,4 @@ export class BasePreferencesPersistor {
30
31
  return this.session.getSessionKey() + "§" + key + "§";
31
32
  }
32
33
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLHdCQUF3QjtJQUUxQywwQkFBMEI7SUFDMUIsWUFBc0IsT0FBNkI7UUFBN0IsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7SUFBRyxDQUFDO0lBNEJ2RDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLFVBQXFDO1FBQ25ELElBQUksV0FBVyxHQUEwQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVO1lBQ3RCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDMUQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbi9iYXNlL0Jhc2VTZXNzaW9uUmV0cmlldmVyXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGFzdHJhdHRhIGNoZSByYXBwcmVzZW50YSBsbyBzdGF0byBkaSBwZXJzaXN0ZW56YSBmcmEgbGEgbGlicmVyaWEgZSB1bm8gc3RvcmFnZVxyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VQcmVmZXJlbmNlc1BlcnNpc3RvciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZXNzaW9uOiBCYXNlU2Vzc2lvblJldHJpZXZlcikge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhbHZhLCBwZXIgdW5hIHNlc3Npb25lLCB1bmEgY2hpYXZlIGNvbiB1biB2YWxvcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgc3RvcmljaXp6YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBwZXJzaXN0PFQ+KGtleTogc3RyaW5nLCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY3VwZXJhLCBwZXIgdW5hIHNlc3Npb25lLCBpbCB2YWxvcmUgYXNzZWduYXRvIGFkIHVuYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgcmVjdXBlcmFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gVmFsb3JlIHNhbHZhdG8gcGVyIGxhIGNoaWF2ZSAqKmtleSoqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWNvdmVyPFQ+KGtleT86IHN0cmluZyk6IE9ic2VydmFibGU8VD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXIgdW5hIHNlc3Npb25lIHJlY3VwZXJhIHR1dHRlIGxlIGNvcHBpZSBDaGlhdmUgLSBWYWxvcmUgc2FsdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+fSBEaXppb25hcmlvIGNvbiB0dXR0ZSBsZSBwcmVmZXJlbmNlIHNhbHZhdGUgcGVyIGxhIHNlc3Npb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWNvdmVyQWxsKCk6IE9ic2VydmFibGU8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9PjtcclxuXHJcbiAgICAvKiogUmlwdWxpc2NlIGxlIHByZWZlcmVuY2Ugc2FsdmF0ZSByZWxhdGl2ZSBhZCB1bmEgc2Vzc2lvbmUgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgKipwZXJzaXN0KiogbWFzc2l2byBkaSB1bmEgbGlzdGEgZGkgQ2hpYXZlIC0gVmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfX0gZGljdGlvbmFyeSBEaXppb25hcmlvIChsaXN0YSBkaSBDaGlhdmUgLSBWYWxvcmUpIGRhIHBlcnNpc3RlcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBlcnNpc3RBbGwoZGljdGlvbmFyeTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCBvYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxib29sZWFuPltdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5wZXJzaXN0KGtleSwgZGljdGlvbmFyeVtrZXldKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZShtYXAocmVzID0+IHJlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgJiYgdmFsLCB0cnVlKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBsYSBjaGlhdmUgXCJSZWFsZVwiIGRhIHV0aWxpenphcmUgcGVyIGxhIHBlcnNpc3RlbnphIGRpIHVuYSBjaGlhdmUgZ2VuZXJpY2FcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgc3RvcmljaXp6YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaW9uZSBmcmEgbCdpZGVudGlmaWNhdGl2byBkZWxsYSBzZXNzaW9uZSBlIGxhIGNoaWF2ZSBzcGVjaWZpY2F0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNlc3Npb25LZXkoKSArIFwiwqdcIiArIGtleSArIFwiwqdcIjtcclxuICAgIH1cclxufSJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckM7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLHdCQUF3QjtJQUUxQywwQkFBMEI7SUFDMUIsWUFBc0IsT0FBNkI7UUFBN0IsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7SUFBRyxDQUFDO0lBd0N2RDs7Ozs7T0FLRztJQUNJLFVBQVUsQ0FBQyxVQUFxQyxFQUFFLFVBQWtDO1FBQ3ZGLElBQUksV0FBVyxHQUEwQixFQUFFLENBQUM7UUFDNUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVO1lBQ3RCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFckUsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sTUFBTSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzFELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEJhc2VTZXNzaW9uUmV0cmlldmVyIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb24vYmFzZS9CYXNlU2Vzc2lvblJldHJpZXZlclwiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBhc3RyYXR0YSBjaGUgcmFwcHJlc2VudGEgbG8gc3RhdG8gZGkgcGVyc2lzdGVuemEgZnJhIGxhIGxpYnJlcmlhIGUgdW5vIHN0b3JhZ2VcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3Ige1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2Vzc2lvbjogQmFzZVNlc3Npb25SZXRyaWV2ZXIpIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWx2YSwgcGVyIHVuYSBzZXNzaW9uZSwgdW5hIGNoaWF2ZSBjb24gdW4gdmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHN0b3JpY2l6emFyZVxyXG4gICAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgc3RvcmljaXp6YXJlIGwnb2dnZXR0by4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwndXRlbnRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCBwZXJzaXN0PFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY3VwZXJhLCBwZXIgdW5hIHNlc3Npb25lLCBpbCB2YWxvcmUgYXNzZWduYXRvIGFkIHVuYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgcmVjdXBlcmFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gVmFsb3JlIHNhbHZhdG8gcGVyIGxhIGNoaWF2ZSAqKmtleSoqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWNvdmVyPFQ+KGtleT86IHN0cmluZyk6IE9ic2VydmFibGU8VD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXIgdW5hIHNlc3Npb25lIHJlY3VwZXJhIHR1dHRlIGxlIGNvcHBpZSBDaGlhdmUgLSBWYWxvcmUgc2FsdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55IH0+fSBEaXppb25hcmlvIGNvbiB0dXR0ZSBsZSBwcmVmZXJlbmNlIHNhbHZhdGUgcGVyIGxhIHNlc3Npb25lXHJcbiAgICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IHJlY292ZXJBbGwoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBSaXB1bGlzY2UgbGUgcHJlZmVyZW5jZSBzYWx2YXRlIHJlbGF0aXZlIGFkIHVuYSBzZXNzaW9uZVxyXG4gICAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnIHwgJ2FsbCd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSByaXB1bGlyZSBsYSBjYWNoZS4gVXRpbGl6emFyZSAqKmNhY2hlKiogcGVyIGNhbmNlbGxhcmUgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjYW5jZWxsYXJlIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgY2xlYXIoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyB8ICdhbGwnKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVsaW1pbmEgdW4gb2dnZXR0byBkYWxsYSBjYWNoZSBwZXJzaXN0aXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHJpbXVvdmVyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsICoqcGVyc2lzdCoqIG1hc3Npdm8gZGkgdW5hIGxpc3RhIGRpIENoaWF2ZSAtIFZhbG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgW2tleTogc3RyaW5nXTogc3RyaW5nIH19IGRpY3Rpb25hcnkgRGl6aW9uYXJpbyAobGlzdGEgZGkgQ2hpYXZlIC0gVmFsb3JlKSBkYSBwZXJzaXN0ZXJlXHJcbiAgICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBlcnNpc3RBbGwoZGljdGlvbmFyeTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCBvYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxib29sZWFuPltdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGRpY3Rpb25hcnkpXHJcbiAgICAgICAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5wZXJzaXN0KGtleSwgZGljdGlvbmFyeVtrZXldLCBzdG9yZUxldmVsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZShtYXAocmVzID0+IHJlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgJiYgdmFsLCB0cnVlKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBsYSBjaGlhdmUgXCJSZWFsZVwiIGRhIHV0aWxpenphcmUgcGVyIGxhIHBlcnNpc3RlbnphIGRpIHVuYSBjaGlhdmUgZ2VuZXJpY2FcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBDaGlhdmUgZGEgc3RvcmljaXp6YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVuaW9uZSBmcmEgbCdpZGVudGlmaWNhdGl2byBkZWxsYSBzZXNzaW9uZSBlIGxhIGNoaWF2ZSBzcGVjaWZpY2F0YVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNlc3Npb25LZXkoKSArIFwiwqdcIiArIGtleSArIFwiwqdcIjtcclxuICAgIH1cclxufSJdfQ==
@@ -22,6 +22,11 @@ export class LocalStoragePersistor extends BasePreferencesPersistor {
22
22
  return of(ret).pipe(first());
23
23
  }
24
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 */
25
30
  recoverAll() {
26
31
  var ret = {};
27
32
  for (var k in localStorage) {
@@ -44,4 +49,4 @@ LocalStoragePersistor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0"
44
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LocalStoragePersistor, decorators: [{
45
50
  type: Injectable
46
51
  }], ctorParameters: function () { return [{ type: i1.BaseSessionRetriever }]; } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvaW1wbGVtZW50YXRpb24vTG9jYWxTdG9yYWdlUGVyc2lzdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLFNBQVM7QUFDVCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUc1RSxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV2Qyw0RUFBNEU7QUFFNUUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHdCQUF3QjtJQUUvRCwwQkFBMEI7SUFDMUIsWUFBWSxPQUE2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsK0JBQStCO0lBQ3hCLE9BQU8sQ0FBSSxHQUFXLEVBQUUsSUFBTztRQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsT0FBTyxDQUFJLEdBQVc7UUFDekIsSUFBSSxHQUFHLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsVUFBVTtRQUNiLElBQUksR0FBRyxHQUFpQyxFQUFFLENBQUM7UUFDM0MsS0FBSyxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsS0FBSztRQUNSLEtBQUssSUFBSSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdELFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDOztrSEFuQ1EscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDbGFzc2lcclxuaW1wb3J0IHsgQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yIH0gZnJvbSBcIi4uL2Jhc2UvQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7IEJhc2VTZXNzaW9uUmV0cmlldmVyIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb24vYmFzZS9CYXNlU2Vzc2lvblJldHJpZXZlclwiO1xyXG5cclxuLy8gUlhKU1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKiogSW1wbGVtZW50YXppb25lIGRpIGRlZmF1bHQgcGVyIGxhIGNsYXNzZSAqKkJhc2VQcmVmZXJlbmNlc1BlcnNpc3RvcioqICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZVBlcnNpc3RvciBleHRlbmRzIEJhc2VQcmVmZXJlbmNlc1BlcnNpc3RvciB7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHNlc3Npb246IEJhc2VTZXNzaW9uUmV0cmlldmVyKSB7IHN1cGVyKHNlc3Npb24pOyB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHBlcnNpc3Q8VD4oa2V5OiBzdHJpbmcsIGl0ZW06IFQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldEtleShrZXkpLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHJlY292ZXI8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgICAgICB2YXIgcmV0ID0gPFQ+SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldEtleShrZXkpKSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHJldCkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcmVjb3ZlckFsbCgpOiBPYnNlcnZhYmxlPHsgW2luZGV4OiBzdHJpbmddOiBhbnk7IH0+IHtcclxuICAgICAgICB2YXIgcmV0OiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgayBpbiBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGsuaW5jbHVkZXMoXCLCp1wiKSAmJiBrLnN0YXJ0c1dpdGgodGhpcy5zZXNzaW9uLmdldFNlc3Npb25LZXkoKSkpXHJcbiAgICAgICAgICAgICAgICByZXRbay5tYXRjaCgvwqcoLiopwqcvKVsxXV0gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGspKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZihyZXQpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIGNsZWFyKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChrLmluY2x1ZGVzKFwiwqdcIikgJiYgay5zdGFydHNXaXRoKHRoaXMuc2Vzc2lvbi5nZXRTZXNzaW9uS2V5KCkpKVxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZih0cnVlKS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG59Il19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlZmVyZW5jZXMvc3JjL2xpYi9wZXJzaXN0b3IvaW1wbGVtZW50YXRpb24vTG9jYWxTdG9yYWdlUGVyc2lzdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLFNBQVM7QUFDVCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUc1RSxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV2Qyw0RUFBNEU7QUFFNUUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHdCQUF3QjtJQUUvRCwwQkFBMEI7SUFDMUIsWUFBWSxPQUE2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsK0JBQStCO0lBQ3hCLE9BQU8sQ0FBSSxHQUFXLEVBQUUsSUFBTztRQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsT0FBTyxDQUFJLEdBQVc7UUFDekIsSUFBSSxHQUFHLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsTUFBTSxDQUFDLEdBQVc7UUFDckIsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixVQUFVO1FBQ2IsSUFBSSxHQUFHLEdBQWlDLEVBQUUsQ0FBQztRQUMzQyxLQUFLLElBQUksQ0FBQyxJQUFJLFlBQVksRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM3RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixLQUFLO1FBQ1IsS0FBSyxJQUFJLENBQUMsSUFBSSxZQUFZLEVBQUU7WUFDeEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O2tIQXpDUSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENsYXNzaVxyXG5pbXBvcnQgeyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSBmcm9tIFwiLi4vYmFzZS9CYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3JcIjtcclxuaW1wb3J0IHsgQmFzZVNlc3Npb25SZXRyaWV2ZXIgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbi9iYXNlL0Jhc2VTZXNzaW9uUmV0cmlldmVyXCI7XHJcblxyXG4vLyBSWEpTXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKiBJbXBsZW1lbnRhemlvbmUgZGkgZGVmYXVsdCBwZXIgbGEgY2xhc3NlICoqQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yKiogKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlUGVyc2lzdG9yIGV4dGVuZHMgQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3Ioc2Vzc2lvbjogQmFzZVNlc3Npb25SZXRyaWV2ZXIpIHsgc3VwZXIoc2Vzc2lvbik7IH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcGVyc2lzdDxUPihrZXk6IHN0cmluZywgaXRlbTogVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSksIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcmVjb3ZlcjxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgICAgIHZhciByZXQgPSA8VD5KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0S2V5KGtleSkpKTtcclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICB2YXIgcmV0ID0gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRLZXkoa2V5KSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHJlY292ZXJBbGwoKTogT2JzZXJ2YWJsZTx7IFtpbmRleDogc3RyaW5nXTogYW55OyB9PiB7XHJcbiAgICAgICAgdmFyIHJldDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGsgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChrLmluY2x1ZGVzKFwiwqdcIikgJiYgay5zdGFydHNXaXRoKHRoaXMuc2Vzc2lvbi5nZXRTZXNzaW9uS2V5KCkpKVxyXG4gICAgICAgICAgICAgICAgcmV0W2subWF0Y2goL8KnKC4qKcKnLylbMV1dID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICBmb3IgKHZhciBrIGluIGxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBpZiAoay5pbmNsdWRlcyhcIsKnXCIpICYmIGsuc3RhcnRzV2l0aCh0aGlzLnNlc3Npb24uZ2V0U2Vzc2lvbktleSgpKSlcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShmaXJzdCgpKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,7 +1,7 @@
1
1
  // Angular
2
2
  import { Inject, Injectable, Optional } from '@angular/core';
3
- import { of } from 'rxjs';
4
- import { concatMap, tap } from 'rxjs/operators';
3
+ import { forkJoin, of } from 'rxjs';
4
+ import { take, tap } from 'rxjs/operators';
5
5
  import { PREF_FULL_RETRIEVE_AT_START } from './tokens';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "./persistor/base/BasePreferencesPersistor";
@@ -17,36 +17,66 @@ export class PreferencesService {
17
17
  constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
18
18
  this.persistor = persistor;
19
19
  this.PREF_FULL_RETRIEVE_AT_START = PREF_FULL_RETRIEVE_AT_START;
20
- /**
21
- * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,
22
- * se configurato bene) mai più modificata
23
- */
24
- this.FirstRetrieve = true;
25
20
  /**
26
21
  * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
27
22
  */
28
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
+ }
29
44
  }
30
45
  /**
31
- * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
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
32
51
  */
33
- clear() {
34
- this.LocalPreferences = {};
35
- return this.persistor.clear();
52
+ setItem(key, item, storeLevel = 'cache') {
53
+ this.setLocalItem(key, item, storeLevel);
54
+ return this.persist(key, item, storeLevel);
36
55
  }
37
56
  /**
38
- * Salva un oggetto sia nella cache locale che nel persistor
57
+ * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
39
58
  *
40
59
  * @param {string} key Chiave di persistenza
41
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
42
62
  */
43
- store(key, item) {
63
+ setLocalItem(key, item, storeLevel = 'cache') {
44
64
  this.LocalPreferences[key] = item;
45
- return this.persistor.persist(key, item);
65
+ this.LocalPreferenceType[key] = storeLevel;
66
+ return true;
46
67
  }
47
68
  /**
48
- * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita ed in caso fosse il primo caricamento e l'impostazione
49
- * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale
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.
50
80
  *
51
81
  * @param {string} key Chiave del valore da recuperare
52
82
  * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito,
@@ -54,21 +84,7 @@ export class PreferencesService {
54
84
  *
55
85
  * @returns {T} Oggetto richiesto
56
86
  */
57
- retrieve(key, cacheBust = false) {
58
- // Se è il primo retrieve e sono configurato per recuperare tutta la configurazione all'inizio
59
- // eseguo, altrimenti prendo l'oggetto se lo trovo e se non lo trovo lo carico prima in cache
60
- if (this.FirstRetrieve) {
61
- if (this.PREF_FULL_RETRIEVE_AT_START)
62
- return this.persistor.recoverAll().pipe(concatMap(res => {
63
- this.LocalPreferences = res;
64
- this.FirstRetrieve = false;
65
- return this.internalRetrieve(key, cacheBust);
66
- }));
67
- }
68
- return this.internalRetrieve(key, cacheBust);
69
- }
70
- /** @ignore Vedi **retrieve** */
71
- internalRetrieve(key, cacheBust = false) {
87
+ getItem(key, cacheBust = false) {
72
88
  if (this.LocalPreferences[key] && !cacheBust)
73
89
  return of(this.LocalPreferences[key]);
74
90
  else {
@@ -79,6 +95,47 @@ export class PreferencesService {
79
95
  return obj;
80
96
  }
81
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
+ }
82
139
  }
83
140
  PreferencesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService, deps: [{ token: i1.BasePreferencesPersistor }, { token: PREF_FULL_RETRIEVE_AT_START, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
84
141
  PreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService });
@@ -90,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
90
147
  type: Inject,
91
148
  args: [PREF_FULL_RETRIEVE_AT_START]
92
149
  }] }]; } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZWZlcmVuY2VzL3NyYy9saWIvcHJlZmVyZW5jZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUV2RDs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFhN0I7Ozs7T0FJRztJQUNILFlBQW9CLFNBQW1DLEVBQTJELDJCQUFvQztRQUFsSSxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUEyRCxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQVM7UUFoQnRKOzs7V0FHRztRQUNLLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRXRDOztXQUVHO1FBQ0sscUJBQWdCLEdBQTZCLEVBQUUsQ0FBQztJQU9rRyxDQUFDO0lBRTNKOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBSSxHQUFXLEVBQUUsSUFBTztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLENBQUksR0FBVyxFQUFFLFlBQXFCLEtBQUs7UUFDakQsOEZBQThGO1FBQzlGLDZGQUE2RjtRQUM3RixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsMkJBQTJCO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFJLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNQO1FBRUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxnQ0FBZ0M7SUFDeEIsZ0JBQWdCLENBQUksR0FBVyxFQUFFLFlBQXFCLEtBQUs7UUFDakUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQzFDLE9BQU8sRUFBRSxDQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUksR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLEdBQUc7Z0JBQ04sT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM3RCxPQUFPLEdBQUcsQ0FBQztTQUNaO0lBQ0gsQ0FBQzs7K0dBM0VVLGtCQUFrQiwwREFrQmdELDJCQUEyQjttSEFsQjdGLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFtQmlELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSBmcm9tICcuL3BlcnNpc3Rvci9iYXNlL0Jhc2VQcmVmZXJlbmNlc1BlcnNpc3Rvcic7XHJcbmltcG9ydCB7IFBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVCB9IGZyb20gJy4vdG9rZW5zJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGNoZSBzaSBvY2N1cGEgZGkgc2FsdmFyZSBlIHJlY3VwZXJhcmUgbGUgcHJlZmVyZW56ZSB1dGVudGUgcmlzcGV0dG8gYWxsZSBjaGlhdmkgc2FsdmF0ZVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJlZmVyZW5jZXNTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhIHNlIMOoIGxhIHByaW1hIHZvbHRhIGNoZSB2aWVuZSBlZmZldHR1YXRhIHVuJ29wZXJhemlvbmUgZGkgcmV0cmlldmUuIEFwcGVuYSBlZmZldHR1YXRhIHF1ZXN0YSB2YXJpYWJpbGUgdmllbmUgaW1wb3N0YXRhIGEgKipmYWxzZSoqIGUgKGluIHF1YW50byBzaW5nbGV0b24sXHJcbiAgICogc2UgY29uZmlndXJhdG8gYmVuZSkgbWFpIHBpw7kgbW9kaWZpY2F0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgRmlyc3RSZXRyaWV2ZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIGluIG1lbW9yaWEgZGVsbGUgcHJlZmVyZW56ZSBsb2NhbGkgY2hlIHNhcsOgIHBlcnNpc3RpdG8gcGVyIG1lenpvIGRlbGxhIGNsYXNzZSBjaGUgZmEgbGUgdmVjaSBkZWwgKipCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IqKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgTG9jYWxQcmVmZXJlbmNlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIENvc3RydXR0b3JlXHJcbiAgICogXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVyc2lzdG9yOiBCYXNlUHJlZmVyZW5jZXNQZXJzaXN0b3IsIEBPcHRpb25hbCgpIEBJbmplY3QoUFJFRl9GVUxMX1JFVFJJRVZFX0FUX1NUQVJUKSBwcml2YXRlIFBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVDogYm9vbGVhbikgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpcHVsaXNjZSBsZSBpbXBvc3RhemlvbmkgbG9jYWxpIGUgbGUgaW1wb3N0YXppb25pIHNhbHZhdGUgZGFsIHBlcnNpc3RvclxyXG4gICAqL1xyXG4gIGNsZWFyKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzID0ge307XHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbHZhIHVuIG9nZ2V0dG8gc2lhIG5lbGxhIGNhY2hlIGxvY2FsZSBjaGUgbmVsIHBlcnNpc3RvclxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRpIHBlcnNpc3RlbnphXHJcbiAgICogQHBhcmFtIHtUfSBpdGVtIE9nZ2V0dG8gZGEgc2FsdmFyZVxyXG4gICAqL1xyXG4gIHN0b3JlPFQ+KGtleTogc3RyaW5nLCBpdGVtOiBUKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSA9IGl0ZW07XHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IucGVyc2lzdChrZXksIGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjdXBlcmEgdW4gb2dnZXR0byBpbiBiYXNlIGEgdW5hIGNoaWF2ZS4gUGVybWV0dGUgZGkgYWNjZWRlcmUgYWxsYSBjb3BpYSBsb2NhbGUgbyBhbGxhIGNvcGlhIHBlcnNpc3RpdGEgZWQgaW4gY2FzbyBmb3NzZSBpbCBwcmltbyBjYXJpY2FtZW50byBlIGwnaW1wb3N0YXppb25lIFxyXG4gICAqICoqcmV0cmlldmVBbGxBdFN0YXJ0KiogZGVsbGEgY2xhc3NlIGRpIGNvbmZpZ3VyYXppb25lIGZvc3NlICoqdHJ1ZSoqIHNpIG9jY3VwYSBhbmNoZSBkZWxsYSBwcmltYSB2YWxvcml6emF6aW9uZSBkZWxsYSBjYWNoZSBsb2NhbGVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgdmFsb3JlIGRhIHJlY3VwZXJhcmVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhY2hlQnVzdCBJbmRpY2Egc2UgaWdub3JhcmUgaWwgdmFsb3JlIGRlbGxhIGNhY2hlIGxvY2FsZSBlIHJlY3VwZXJhcmUgbCdvZ2dldHRvIGRhbGxvIHN0b3JlIHBlcnNpc3RpdG8sIFxyXG4gICAqIGluIGNhc28gZm9zc2Ugc3RhdG8gbW9kaWZpY2F0byBmdW9yaSBzaXN0ZW1hIG8gZGEgdW4gYWx0cm8gc2lzdGVtYVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtUfSBPZ2dldHRvIHJpY2hpZXN0b1xyXG4gICAqL1xyXG4gIHJldHJpZXZlPFQ+KGtleTogc3RyaW5nLCBjYWNoZUJ1c3Q6IGJvb2xlYW4gPSBmYWxzZSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgLy8gU2Ugw6ggaWwgcHJpbW8gcmV0cmlldmUgZSBzb25vIGNvbmZpZ3VyYXRvIHBlciByZWN1cGVyYXJlIHR1dHRhIGxhIGNvbmZpZ3VyYXppb25lIGFsbCdpbml6aW9cclxuICAgIC8vIGVzZWd1bywgYWx0cmltZW50aSBwcmVuZG8gbCdvZ2dldHRvIHNlIGxvIHRyb3ZvIGUgc2Ugbm9uIGxvIHRyb3ZvIGxvIGNhcmljbyBwcmltYSBpbiBjYWNoZVxyXG4gICAgaWYgKHRoaXMuRmlyc3RSZXRyaWV2ZSkge1xyXG4gICAgICBpZiAodGhpcy5QUkVGX0ZVTExfUkVUUklFVkVfQVRfU1RBUlQpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdG9yLnJlY292ZXJBbGwoKS5waXBlKGNvbmNhdE1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5GaXJzdFJldHJpZXZlID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFJldHJpZXZlPFQ+KGtleSwgY2FjaGVCdXN0KTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxSZXRyaWV2ZTxUPihrZXksIGNhY2hlQnVzdCk7XHJcbiAgfVxyXG5cclxuICAvKiogQGlnbm9yZSBWZWRpICoqcmV0cmlldmUqKiAqL1xyXG4gIHByaXZhdGUgaW50ZXJuYWxSZXRyaWV2ZTxUPihrZXk6IHN0cmluZywgY2FjaGVCdXN0OiBib29sZWFuID0gZmFsc2UpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSAmJiAhY2FjaGVCdXN0KVxyXG4gICAgICByZXR1cm4gb2YoPFQ+dGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHZhciBvYmogPSB0aGlzLnBlcnNpc3Rvci5yZWNvdmVyPFQ+KGtleSk7XHJcbiAgICAgIGlmICghb2JqKVxyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgb2JqLnBpcGUodGFwKGl0ZW0gPT4geyB0aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XSA9IGl0ZW07IH0pKVxyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZWZlcmVuY2VzL3NyYy9saWIvcHJlZmVyZW5jZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFFdkQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCOzs7O09BSUc7SUFDSCxZQUFvQixTQUFtQyxFQUEyRCwyQkFBb0M7UUFBbEksY0FBUyxHQUFULFNBQVMsQ0FBMEI7UUFBMkQsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFTO1FBZnRKOztXQUVHO1FBQ0sscUJBQWdCLEdBQTZCLEVBQUUsQ0FBQztRQUV4RDs7V0FFRztRQUNLLHdCQUFtQixHQUFnRCxFQUFFLENBQUM7UUFRNUUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsc0ZBQXNGO1lBQ3RGLFFBQVEsQ0FBQztnQkFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RELENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUF5RCxFQUFFLEVBQUU7Z0JBRXpFLEtBQUssSUFBSSxLQUFL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Q0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFVBQTBDO1FBQ3JELDBCQUEwQjtRQUMxQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2hELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQ0QsMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7K0dBeklVLGtCQUFrQiwwREFpQmdELDJCQUEyQjttSEFqQjdGLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFrQmlELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEJhc2VQcmVmZXJlbmNlc1BlcnNpc3RvciB9IGZyb20gJy4vcGVyc2lzdG9yL2Jhc2UvQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yJztcclxuaW1wb3J0IHsgUFJFRl9GVUxMX1JFVFJJRVZFX0FUX1NUQVJUIH0gZnJvbSAnLi90b2tlbnMnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIHNpIG9jY3VwYSBkaSBzYWx2YXJlIGUgcmVjdXBlcmFyZSBsZSBwcmVmZXJlbnplIHV0ZW50ZSByaXNwZXR0byBhbGxlIGNoaWF2aSBzYWx2YXRlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcmVmZXJlbmNlc1NlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBpbiBtZW1vcmlhIGRlbGxlIHByZWZlcmVuemUgbG9jYWxpIGNoZSBzYXLDoCBwZXJzaXN0aXRvIHBlciBtZXp6byBkZWxsYSBjbGFzc2UgY2hlIGZhIGxlIHZlY2kgZGVsICoqQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yKipcclxuICAgKi9cclxuICBwcml2YXRlIExvY2FsUHJlZmVyZW5jZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2EgbGUgY2hpYXZpIGNvbnRlbnV0ZSBpbiAqKkxvY2FsUHJlZmVyZW5jZXMqKiBkaSBjaGUgdGlwbyBzb25vIGluIG1vZG8gZGEgcmlwdWxpcmUgY29ycmV0dGFtZW50ZSBzdWxsYSBjbGVhclxyXG4gICAqL1xyXG4gIHByaXZhdGUgTG9jYWxQcmVmZXJlbmNlVHlwZTogeyBbaW5kZXg6IHN0cmluZ106ICdjYWNoZScgfCAncHJlZmVyZW5jZScgfSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlcnNpc3RvcjogQmFzZVByZWZlcmVuY2VzUGVyc2lzdG9yLCBAT3B0aW9uYWwoKSBASW5qZWN0KFBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVCkgcHJpdmF0ZSBQUkVGX0ZVTExfUkVUUklFVkVfQVRfU1RBUlQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLlBSRUZfRlVMTF9SRVRSSUVWRV9BVF9TVEFSVCkge1xyXG4gICAgICAvLyBSZWN1cGVybyB0dXR0aSBnbGkgb2dnZXR0aSBkaWZmZXJlbnppYW5kbyBhbmNoZSBsYXRvIGxvY2FsZSBmcmEgY2FjaGUgZSBwcmVmZXJlbmNlc1xyXG4gICAgICBmb3JrSm9pbihbXHJcbiAgICAgICAgdGhpcy5wZXJzaXN0b3IucmVjb3ZlckFsbCgnY2FjaGUnKS5waXBlKHRha2UoMSkpLFxyXG4gICAgICAgIHRoaXMucGVyc2lzdG9yLnJlY292ZXJBbGwoJ3ByZWZlcmVuY2UnKS5waXBlKHRha2UoMSkpXHJcbiAgICAgIF0pLnN1YnNjcmliZSgocmVzOiBbeyBbaW5kZXg6IHN0cmluZ106IGFueSB9LCB7IFtpbmRleDogc3RyaW5nXTogYW55IH1dKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNQcm9wIGluIHJlc1swXSkge1xyXG4gICAgICAgICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2NQcm9wXSA9IHJlc1swXVtjUHJvcF07XHJcbiAgICAgICAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGVbY1Byb3BdID0gJ2NhY2hlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgcFByb3AgaW4gcmVzWzFdKSB7XHJcbiAgICAgICAgICB0aGlzLkxvY2FsUHJlZmVyZW5jZXNbcFByb3BdID0gcmVzWzBdW3BQcm9wXTtcclxuICAgICAgICAgIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwUHJvcF0gPSAncHJlZmVyZW5jZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhbHZhIHVuIG9nZ2V0dG8gc2lhIG5lbGxhIGNhY2hlIGxvY2FsZSBjaGUgbmVsIHBlcnNpc3RvclxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRpIHBlcnNpc3RlbnphXHJcbiAgICogQHBhcmFtIHtUfSBpdGVtIE9nZ2V0dG8gZGEgc2FsdmFyZVxyXG4gICAqIEBwYXJhbSB7J2NhY2hlJyB8ICdwcmVmZXJlbmNlJ30gc3RvcmVMZXZlbCBMaXZlbGxvIGEgY3VpIHN0b3JpY2l6emFyZSBsJ29nZ2V0dG8uIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCdhcHBsaWNhemlvbmUsIHV0aWxpenphcmUgKipwcmVmZXJlbmNlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRJdGVtPFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnID0gJ2NhY2hlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5zZXRMb2NhbEl0ZW0oa2V5LCBpdGVtLCBzdG9yZUxldmVsKVxyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdChrZXksIGl0ZW0sIHN0b3JlTGV2ZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2FsdmEgdW4gb2dnZXR0byBzb2xvIG5lbGxhIGNhY2hlIGxvY2FsZS4gRG92csOgIGVzc2VyZSBwZXJzaXN0aXRvIG1hbnVhbG1lbnRlIG8gYW5kcsOgIHBlcnNvIGFsIHJpYXZ2aW8gZGVsbCdhcHBsaWNhemlvbmVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkaSBwZXJzaXN0ZW56YVxyXG4gICAqIEBwYXJhbSB7VH0gaXRlbSBPZ2dldHRvIGRhIHNhbHZhcmVcclxuICAgKiBAcGFyYW0geydjYWNoZScgfCAncHJlZmVyZW5jZSd9IHN0b3JlTGV2ZWwgTGl2ZWxsbyBhIGN1aSBzdG9yaWNpenphcmUgbCdvZ2dldHRvLiBVdGlsaXp6YXJlICoqY2FjaGUqKiBwZXIgY29zZSBzYWx2YXRlIGRhbGwnYXBwbGljYXppb25lLCB1dGlsaXp6YXJlICoqcHJlZmVyZW5jZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0TG9jYWxJdGVtPFQ+KGtleTogc3RyaW5nLCBpdGVtOiBULCBzdG9yZUxldmVsOiAnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnID0gJ2NhY2hlJyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gPSBpdGVtO1xyXG4gICAgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW2tleV0gPSBzdG9yZUxldmVsO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWx2YSwgcGVyIHVuYSBzZXNzaW9uZSwgdW5hIGNoaWF2ZSBjb24gdW4gdmFsb3JlLCB2aWVuZSBjaGlhbWF0byBhdXRvbWF0aWNhbWVudGUgZGFsIG1ldG9kbyAqKnN0b3JlKiogbWEgZGV2J2Vzc2VyZSBjaGlhbWF0byBtYW51YWxtZW50ZVxyXG4gICAqIG5lbCBjYXNvIHNpIHV0aWxpenppIGlsIG1ldG9kbyAqKnN0b3JlTG9jYWwqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHN0b3JpY2l6emFyZVxyXG4gICAqIEBwYXJhbSB7J2NhY2hlJyB8ICdwcmVmZXJlbmNlJ30gc3RvcmVMZXZlbCBMaXZlbGxvIGEgY3VpIHN0b3JpY2l6emFyZSBsJ29nZ2V0dG8uIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjb3NlIHNhbHZhdGUgZGFsbCdhcHBsaWNhemlvbmUsIHV0aWxpenphcmUgKipwcmVmZXJlbmNlKiogcGVyIGNvc2Ugc2FsdmF0ZSBkYWxsJ3V0ZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVyc2lzdDxUPihrZXk6IHN0cmluZywgaXRlbTogVCwgc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdG9yLnBlcnNpc3Qoa2V5LCBpdGVtLCBzdG9yZUxldmVsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY3VwZXJhIHVuIG9nZ2V0dG8gaW4gYmFzZSBhIHVuYSBjaGlhdmUuIFBlcm1ldHRlIGRpIGFjY2VkZXJlIGFsbGEgY29waWEgbG9jYWxlIG8gYWxsYSBjb3BpYSBwZXJzaXN0aXRhLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRlbCB2YWxvcmUgZGEgcmVjdXBlcmFyZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FjaGVCdXN0IEluZGljYSBzZSBpZ25vcmFyZSBpbCB2YWxvcmUgZGVsbGEgY2FjaGUgbG9jYWxlIGUgcmVjdXBlcmFyZSBsJ29nZ2V0dG8gZGFsbG8gc3RvcmUgcGVyc2lzdGl0bywgXHJcbiAgICogaW4gY2FzbyBmb3NzZSBzdGF0byBtb2RpZmljYXRvIGZ1b3JpIHNpc3RlbWEgbyBkYSB1biBhbHRybyBzaXN0ZW1hXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge1R9IE9nZ2V0dG8gcmljaGllc3RvXHJcbiAgICovXHJcbiAgcHVibGljIGdldEl0ZW08VD4oa2V5OiBzdHJpbmcsIGNhY2hlQnVzdDogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gJiYgIWNhY2hlQnVzdClcclxuICAgICAgcmV0dXJuIG9mKDxUPnRoaXMuTG9jYWxQcmVmZXJlbmNlc1trZXldKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB2YXIgb2JqID0gdGhpcy5wZXJzaXN0b3IucmVjb3ZlcjxUPihrZXkpO1xyXG4gICAgICBpZiAoIW9iailcclxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgIG9iai5waXBlKHRhcChpdGVtID0+IHsgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0gPSBpdGVtOyB9KSlcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY3VwZXJhIHVuIG9nZ2V0dG8gaW4gYmFzZSBhIHVuYSBjaGlhdmUuIFBlcm1ldHRlIGRpIGFjY2VkZXJlIHNvbG8gYWxsYSBjb3BpYSBsb2NhbGVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IENoaWF2ZSBkZWwgdmFsb3JlIGRhIHJlY3VwZXJhcmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7VH0gT2dnZXR0byByaWNoaWVzdG9cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TG9jYWxJdGVtPFQ+KGtleTogc3RyaW5nKTogVCB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pXHJcbiAgICAgIHJldHVybiA8VD50aGlzLkxvY2FsUHJlZmVyZW5jZXNba2V5XTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbGltaW5hIHVuIG9nZ2V0dG8gZGFsbGEgY2FjaGUgc2lhIGxvY2FsZSBjaGUgcGVyc2lzdGl0YVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQ2hpYXZlIGRhIHJpbXVvdmVyZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5Mb2NhbFByZWZlcmVuY2VzW2tleV0pIHtcclxuICAgICAgZGVsZXRlIHRoaXMuTG9jYWxQcmVmZXJlbmNlc1trZXldO1xyXG4gICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VUeXBlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGVyc2lzdG9yLnJlbW92ZShrZXkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmlwdWxpc2NlIGxlIGltcG9zdGF6aW9uaSBsb2NhbGkgZSBsZSBpbXBvc3Rhemlvbmkgc2FsdmF0ZSBkYWwgcGVyc2lzdG9yXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHsnY2FjaGUnIHwgJ3ByZWZlcmVuY2UnfSBzdG9yZUxldmVsIExpdmVsbG8gYSBjdWkgcmlwdWxpcmUgbGEgY2FjaGUuIFV0aWxpenphcmUgKipjYWNoZSoqIHBlciBjYW5jZWxsYXJlIGNvc2Ugc2FsdmF0ZSBkYWxsJ2FwcGxpY2F6aW9uZSwgdXRpbGl6emFyZSAqKnByZWZlcmVuY2UqKiBwZXIgY2FuY2VsbGFyZSBjb3NlIHNhbHZhdGUgZGFsbCd1dGVudGVcclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXIoc3RvcmVMZXZlbDogJ2NhY2hlJyB8ICdwcmVmZXJlbmNlJyB8ICdhbGwnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAvLyBQdWxpc2NvIGxhIGNhY2hlIGxvY2FsZVxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB0aGlzLkxvY2FsUHJlZmVyZW5jZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwcm9wXSA9PSBzdG9yZUxldmVsKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuTG9jYWxQcmVmZXJlbmNlVHlwZVtwcm9wXTtcclxuICAgICAgICBkZWxldGUgdGhpcy5Mb2NhbFByZWZlcmVuY2VzW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBcIkNvbW1pdHRvXCIgbGUgbW9kaWZpY2hlXHJcbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0b3IuY2xlYXIoc3RvcmVMZXZlbCk7XHJcbiAgfVxyXG59Il19
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject, NgModule } from '@angular/core';
3
3
  import { forkJoin, of } from 'rxjs';
4
- import { map, concatMap, tap, first } from 'rxjs/operators';
4
+ import { map, take, tap, first } from 'rxjs/operators';
5
5
 
6
6
  /**
7
7
  * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.
@@ -22,11 +22,12 @@ class BasePreferencesPersistor {
22
22
  * Effettua il **persist** massivo di una lista di Chiave - Valore
23
23
  *
24
24
  * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
25
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
25
26
  */
26
- persistAll(dictionary) {
27
+ persistAll(dictionary, storeLevel) {
27
28
  let observables = [];
28
29
  for (let key in dictionary)
29
- observables.push(this.persist(key, dictionary[key]));
30
+ observables.push(this.persist(key, dictionary[key], storeLevel));
30
31
  return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
31
32
  }
32
33
  /**
@@ -54,36 +55,66 @@ class PreferencesService {
54
55
  constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
55
56
  this.persistor = persistor;
56
57
  this.PREF_FULL_RETRIEVE_AT_START = PREF_FULL_RETRIEVE_AT_START;
57
- /**
58
- * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,
59
- * se configurato bene) mai più modificata
60
- */
61
- this.FirstRetrieve = true;
62
58
  /**
63
59
  * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
64
60
  */
65
61
  this.LocalPreferences = {};
62
+ /**
63
+ * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
64
+ */
65
+ this.LocalPreferenceType = {};
66
+ if (this.PREF_FULL_RETRIEVE_AT_START) {
67
+ // Recupero tutti gli oggetti differenziando anche lato locale fra cache e preferences
68
+ forkJoin([
69
+ this.persistor.recoverAll('cache').pipe(take(1)),
70
+ this.persistor.recoverAll('preference').pipe(take(1))
71
+ ]).subscribe((res) => {
72
+ for (let cProp in res[0]) {
73
+ this.LocalPreferences[cProp] = res[0][cProp];
74
+ this.LocalPreferenceType[cProp] = 'cache';
75
+ }
76
+ for (let pProp in res[1]) {
77
+ this.LocalPreferences[pProp] = res[0][pProp];
78
+ this.LocalPreferenceType[pProp] = 'preference';
79
+ }
80
+ });
81
+ }
66
82
  }
67
83
  /**
68
- * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
84
+ * Salva un oggetto sia nella cache locale che nel persistor
85
+ *
86
+ * @param {string} key Chiave di persistenza
87
+ * @param {T} item Oggetto da salvare
88
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
69
89
  */
70
- clear() {
71
- this.LocalPreferences = {};
72
- return this.persistor.clear();
90
+ setItem(key, item, storeLevel = 'cache') {
91
+ this.setLocalItem(key, item, storeLevel);
92
+ return this.persist(key, item, storeLevel);
73
93
  }
74
94
  /**
75
- * Salva un oggetto sia nella cache locale che nel persistor
95
+ * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
76
96
  *
77
97
  * @param {string} key Chiave di persistenza
78
98
  * @param {T} item Oggetto da salvare
99
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
79
100
  */
80
- store(key, item) {
101
+ setLocalItem(key, item, storeLevel = 'cache') {
81
102
  this.LocalPreferences[key] = item;
82
- return this.persistor.persist(key, item);
103
+ this.LocalPreferenceType[key] = storeLevel;
104
+ return true;
105
+ }
106
+ /**
107
+ * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
108
+ * nel caso si utilizzi il metodo **storeLocal**
109
+ *
110
+ * @param {string} key Chiave da storicizzare
111
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
112
+ */
113
+ persist(key, item, storeLevel) {
114
+ return this.persistor.persist(key, item, storeLevel);
83
115
  }
84
116
  /**
85
- * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita ed in caso fosse il primo caricamento e l'impostazione
86
- * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale
117
+ * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.
87
118
  *
88
119
  * @param {string} key Chiave del valore da recuperare
89
120
  * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito,
@@ -91,21 +122,7 @@ class PreferencesService {
91
122
  *
92
123
  * @returns {T} Oggetto richiesto
93
124
  */
94
- retrieve(key, cacheBust = false) {
95
- // Se è il primo retrieve e sono configurato per recuperare tutta la configurazione all'inizio
96
- // eseguo, altrimenti prendo l'oggetto se lo trovo e se non lo trovo lo carico prima in cache
97
- if (this.FirstRetrieve) {
98
- if (this.PREF_FULL_RETRIEVE_AT_START)
99
- return this.persistor.recoverAll().pipe(concatMap(res => {
100
- this.LocalPreferences = res;
101
- this.FirstRetrieve = false;
102
- return this.internalRetrieve(key, cacheBust);
103
- }));
104
- }
105
- return this.internalRetrieve(key, cacheBust);
106
- }
107
- /** @ignore Vedi **retrieve** */
108
- internalRetrieve(key, cacheBust = false) {
125
+ getItem(key, cacheBust = false) {
109
126
  if (this.LocalPreferences[key] && !cacheBust)
110
127
  return of(this.LocalPreferences[key]);
111
128
  else {
@@ -116,6 +133,47 @@ class PreferencesService {
116
133
  return obj;
117
134
  }
118
135
  }
136
+ /**
137
+ * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale
138
+ *
139
+ * @param {string} key Chiave del valore da recuperare
140
+ *
141
+ * @returns {T} Oggetto richiesto
142
+ */
143
+ getLocalItem(key) {
144
+ if (this.LocalPreferences[key])
145
+ return this.LocalPreferences[key];
146
+ else
147
+ return null;
148
+ }
149
+ /**
150
+ * Elimina un oggetto dalla cache sia locale che persistita
151
+ *
152
+ * @param {string} key Chiave da rimuovere
153
+ */
154
+ removeItem(key) {
155
+ if (this.LocalPreferences[key]) {
156
+ delete this.LocalPreferences[key];
157
+ delete this.LocalPreferenceType[key];
158
+ }
159
+ return this.persistor.remove(key);
160
+ }
161
+ /**
162
+ * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
163
+ *
164
+ * @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
165
+ */
166
+ clear(storeLevel) {
167
+ // Pulisco la cache locale
168
+ for (let prop in this.LocalPreferenceType) {
169
+ if (this.LocalPreferenceType[prop] == storeLevel) {
170
+ delete this.LocalPreferenceType[prop];
171
+ delete this.LocalPreferences[prop];
172
+ }
173
+ }
174
+ // "Committo" le modifiche
175
+ return this.persistor.clear(storeLevel);
176
+ }
119
177
  }
120
178
  PreferencesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService, deps: [{ token: BasePreferencesPersistor }, { token: PREF_FULL_RETRIEVE_AT_START, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
121
179
  PreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService });
@@ -158,6 +216,11 @@ class LocalStoragePersistor extends BasePreferencesPersistor {
158
216
  return of(ret).pipe(first());
159
217
  }
160
218
  /** @ignore Vedi classe base */
219
+ remove(key) {
220
+ var ret = localStorage.removeItem(this.getKey(key));
221
+ return of(true).pipe(first());
222
+ }
223
+ /** @ignore Vedi classe base */
161
224
  recoverAll() {
162
225
  var ret = {};
163
226
  for (var k in localStorage) {
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-preferences.mjs","sources":["../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/persistor/base/BasePreferencesPersistor.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 { 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');","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 */\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 /** Ripulisce le preference salvate relative ad una sessione */\r\n public abstract clear(): 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 protected 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 { Observable, of } from 'rxjs';\r\nimport { concatMap, 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 * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,\r\n * se configurato bene) mai più modificata\r\n */\r\n private FirstRetrieve: boolean = true;\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 * 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\r\n /**\r\n * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor\r\n */\r\n clear(): Observable<boolean> {\r\n this.LocalPreferences = {};\r\n return this.persistor.clear();\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 store<T>(key: string, item: T): Observable<boolean> {\r\n this.LocalPreferences[key] = item;\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 ed in caso fosse il primo caricamento e l'impostazione \r\n * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale\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 retrieve<T>(key: string, cacheBust: boolean = false): Observable<T> {\r\n // Se è il primo retrieve e sono configurato per recuperare tutta la configurazione all'inizio\r\n // eseguo, altrimenti prendo l'oggetto se lo trovo e se non lo trovo lo carico prima in cache\r\n if (this.FirstRetrieve) {\r\n if (this.PREF_FULL_RETRIEVE_AT_START)\r\n return this.persistor.recoverAll().pipe(concatMap(res => {\r\n this.LocalPreferences = res;\r\n this.FirstRetrieve = false;\r\n return this.internalRetrieve<T>(key, cacheBust);\r\n }));\r\n }\r\n\r\n return this.internalRetrieve<T>(key, cacheBust);\r\n }\r\n\r\n /** @ignore Vedi **retrieve** */\r\n private internalRetrieve<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}","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 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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-preferences.mjs","sources":["../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/persistor/base/BasePreferencesPersistor.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 { 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');","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}","// 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"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Optional, Inject, NgModule } from '@angular/core';
3
3
  import { forkJoin, of } from 'rxjs';
4
- import { map, concatMap, tap, first } from 'rxjs/operators';
4
+ import { map, take, tap, first } from 'rxjs/operators';
5
5
 
6
6
  /**
7
7
  * Indica se recuperare autonomamente tutte le configurazioni salvate al bootstrap della libreria o se aspettare le richieste specifiche.
@@ -22,11 +22,12 @@ class BasePreferencesPersistor {
22
22
  * Effettua il **persist** massivo di una lista di Chiave - Valore
23
23
  *
24
24
  * @param {{ [key: string]: string }} dictionary Dizionario (lista di Chiave - Valore) da persistere
25
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
25
26
  */
26
- persistAll(dictionary) {
27
+ persistAll(dictionary, storeLevel) {
27
28
  let observables = [];
28
29
  for (let key in dictionary)
29
- observables.push(this.persist(key, dictionary[key]));
30
+ observables.push(this.persist(key, dictionary[key], storeLevel));
30
31
  return forkJoin(observables).pipe(map(res => res.reduce((acc, val) => acc && val, true)));
31
32
  }
32
33
  /**
@@ -54,36 +55,66 @@ class PreferencesService {
54
55
  constructor(persistor, PREF_FULL_RETRIEVE_AT_START) {
55
56
  this.persistor = persistor;
56
57
  this.PREF_FULL_RETRIEVE_AT_START = PREF_FULL_RETRIEVE_AT_START;
57
- /**
58
- * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,
59
- * se configurato bene) mai più modificata
60
- */
61
- this.FirstRetrieve = true;
62
58
  /**
63
59
  * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
64
60
  */
65
61
  this.LocalPreferences = {};
62
+ /**
63
+ * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
64
+ */
65
+ this.LocalPreferenceType = {};
66
+ if (this.PREF_FULL_RETRIEVE_AT_START) {
67
+ // Recupero tutti gli oggetti differenziando anche lato locale fra cache e preferences
68
+ forkJoin([
69
+ this.persistor.recoverAll('cache').pipe(take(1)),
70
+ this.persistor.recoverAll('preference').pipe(take(1))
71
+ ]).subscribe((res) => {
72
+ for (let cProp in res[0]) {
73
+ this.LocalPreferences[cProp] = res[0][cProp];
74
+ this.LocalPreferenceType[cProp] = 'cache';
75
+ }
76
+ for (let pProp in res[1]) {
77
+ this.LocalPreferences[pProp] = res[0][pProp];
78
+ this.LocalPreferenceType[pProp] = 'preference';
79
+ }
80
+ });
81
+ }
66
82
  }
67
83
  /**
68
- * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
84
+ * Salva un oggetto sia nella cache locale che nel persistor
85
+ *
86
+ * @param {string} key Chiave di persistenza
87
+ * @param {T} item Oggetto da salvare
88
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
69
89
  */
70
- clear() {
71
- this.LocalPreferences = {};
72
- return this.persistor.clear();
90
+ setItem(key, item, storeLevel = 'cache') {
91
+ this.setLocalItem(key, item, storeLevel);
92
+ return this.persist(key, item, storeLevel);
73
93
  }
74
94
  /**
75
- * Salva un oggetto sia nella cache locale che nel persistor
95
+ * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
76
96
  *
77
97
  * @param {string} key Chiave di persistenza
78
98
  * @param {T} item Oggetto da salvare
99
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
79
100
  */
80
- store(key, item) {
101
+ setLocalItem(key, item, storeLevel = 'cache') {
81
102
  this.LocalPreferences[key] = item;
82
- return this.persistor.persist(key, item);
103
+ this.LocalPreferenceType[key] = storeLevel;
104
+ return true;
105
+ }
106
+ /**
107
+ * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
108
+ * nel caso si utilizzi il metodo **storeLocal**
109
+ *
110
+ * @param {string} key Chiave da storicizzare
111
+ * @param {'cache' | 'preference'} storeLevel Livello a cui storicizzare l'oggetto. Utilizzare **cache** per cose salvate dall'applicazione, utilizzare **preference** per cose salvate dall'utente
112
+ */
113
+ persist(key, item, storeLevel) {
114
+ return this.persistor.persist(key, item, storeLevel);
83
115
  }
84
116
  /**
85
- * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita ed in caso fosse il primo caricamento e l'impostazione
86
- * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale
117
+ * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.
87
118
  *
88
119
  * @param {string} key Chiave del valore da recuperare
89
120
  * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito,
@@ -91,21 +122,7 @@ class PreferencesService {
91
122
  *
92
123
  * @returns {T} Oggetto richiesto
93
124
  */
94
- retrieve(key, cacheBust = false) {
95
- // Se è il primo retrieve e sono configurato per recuperare tutta la configurazione all'inizio
96
- // eseguo, altrimenti prendo l'oggetto se lo trovo e se non lo trovo lo carico prima in cache
97
- if (this.FirstRetrieve) {
98
- if (this.PREF_FULL_RETRIEVE_AT_START)
99
- return this.persistor.recoverAll().pipe(concatMap(res => {
100
- this.LocalPreferences = res;
101
- this.FirstRetrieve = false;
102
- return this.internalRetrieve(key, cacheBust);
103
- }));
104
- }
105
- return this.internalRetrieve(key, cacheBust);
106
- }
107
- /** @ignore Vedi **retrieve** */
108
- internalRetrieve(key, cacheBust = false) {
125
+ getItem(key, cacheBust = false) {
109
126
  if (this.LocalPreferences[key] && !cacheBust)
110
127
  return of(this.LocalPreferences[key]);
111
128
  else {
@@ -116,6 +133,47 @@ class PreferencesService {
116
133
  return obj;
117
134
  }
118
135
  }
136
+ /**
137
+ * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale
138
+ *
139
+ * @param {string} key Chiave del valore da recuperare
140
+ *
141
+ * @returns {T} Oggetto richiesto
142
+ */
143
+ getLocalItem(key) {
144
+ if (this.LocalPreferences[key])
145
+ return this.LocalPreferences[key];
146
+ else
147
+ return null;
148
+ }
149
+ /**
150
+ * Elimina un oggetto dalla cache sia locale che persistita
151
+ *
152
+ * @param {string} key Chiave da rimuovere
153
+ */
154
+ removeItem(key) {
155
+ if (this.LocalPreferences[key]) {
156
+ delete this.LocalPreferences[key];
157
+ delete this.LocalPreferenceType[key];
158
+ }
159
+ return this.persistor.remove(key);
160
+ }
161
+ /**
162
+ * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
163
+ *
164
+ * @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
165
+ */
166
+ clear(storeLevel) {
167
+ // Pulisco la cache locale
168
+ for (let prop in this.LocalPreferenceType) {
169
+ if (this.LocalPreferenceType[prop] == storeLevel) {
170
+ delete this.LocalPreferenceType[prop];
171
+ delete this.LocalPreferences[prop];
172
+ }
173
+ }
174
+ // "Committo" le modifiche
175
+ return this.persistor.clear(storeLevel);
176
+ }
119
177
  }
120
178
  PreferencesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService, deps: [{ token: BasePreferencesPersistor }, { token: PREF_FULL_RETRIEVE_AT_START, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
121
179
  PreferencesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PreferencesService });
@@ -156,6 +214,11 @@ class LocalStoragePersistor extends BasePreferencesPersistor {
156
214
  return of(ret).pipe(first());
157
215
  }
158
216
  /** @ignore Vedi classe base */
217
+ remove(key) {
218
+ var ret = localStorage.removeItem(this.getKey(key));
219
+ return of(true).pipe(first());
220
+ }
221
+ /** @ignore Vedi classe base */
159
222
  recoverAll() {
160
223
  var ret = {};
161
224
  for (var k in localStorage) {
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-preferences.mjs","sources":["../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/persistor/base/BasePreferencesPersistor.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 { 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');","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 */\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 /** Ripulisce le preference salvate relative ad una sessione */\r\n public abstract clear(): 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 protected 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 { Observable, of } from 'rxjs';\r\nimport { concatMap, 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 * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,\r\n * se configurato bene) mai più modificata\r\n */\r\n private FirstRetrieve: boolean = true;\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 * 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\r\n /**\r\n * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor\r\n */\r\n clear(): Observable<boolean> {\r\n this.LocalPreferences = {};\r\n return this.persistor.clear();\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 store<T>(key: string, item: T): Observable<boolean> {\r\n this.LocalPreferences[key] = item;\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 ed in caso fosse il primo caricamento e l'impostazione \r\n * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale\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 retrieve<T>(key: string, cacheBust: boolean = false): Observable<T> {\r\n // Se è il primo retrieve e sono configurato per recuperare tutta la configurazione all'inizio\r\n // eseguo, altrimenti prendo l'oggetto se lo trovo e se non lo trovo lo carico prima in cache\r\n if (this.FirstRetrieve) {\r\n if (this.PREF_FULL_RETRIEVE_AT_START)\r\n return this.persistor.recoverAll().pipe(concatMap(res => {\r\n this.LocalPreferences = res;\r\n this.FirstRetrieve = false;\r\n return this.internalRetrieve<T>(key, cacheBust);\r\n }));\r\n }\r\n\r\n return this.internalRetrieve<T>(key, cacheBust);\r\n }\r\n\r\n /** @ignore Vedi **retrieve** */\r\n private internalRetrieve<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}","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 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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-preferences.mjs","sources":["../../../projects/preferences/src/lib/tokens.ts","../../../projects/preferences/src/lib/persistor/base/BasePreferencesPersistor.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 { 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');","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}","// 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"],"names":[],"mappings":";;;;;AAEA;;;;;MAKa,2BAA2B,GAA4B,IAAI,cAAc,CAAU,6BAA6B;;ACH7H;;;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;;;ACzEL;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;;+GAzIU,kBAAkB,uDAiBgD,2BAA2B;mHAjB7F,kBAAkB;2FAAlB,kBAAkB;kBAD9B,UAAU;;0BAkBiD,QAAQ;;0BAAI,MAAM;2BAAC,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;;kHAzCQ,qBAAqB;sHAArB,qBAAqB;2FAArB,qBAAqB;kBADjC,UAAU;;;ACTX;;;MAIa,uBAAwB,SAAQ,oBAAoB;;;;;;IAO7D,gBAAgB,KAAK,EAAE,CAAC,EAAE;;;;;;IAO1B,aAAa;QACT,OAAO,eAAe,CAAC;KAC1B;;oHAhBQ,uBAAuB;wHAAvB,uBAAuB;2FAAvB,uBAAuB;kBADnC,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,MAAM,EAAE,mBAAmB,IAAI,qBAAqB,EAAE;gBACrG,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,IAAI,uBAAuB,EAAE;gBAChG,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,IAAI,IAAI,EAAE;aACvF;SACF,CAAC;KACH;;8GAXU,iBAAiB;+GAAjB,iBAAiB;+GAAjB,iBAAiB;2FAAjB,iBAAiB;kBAD7B,QAAQ;;;ACbT;;;;;;"}
@@ -11,8 +11,9 @@ export declare abstract class BasePreferencesPersistor {
11
11
  * Salva, per una sessione, una chiave con un valore
12
12
  *
13
13
  * @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
14
15
  */
15
- abstract persist<T>(key: string, item: T): Observable<boolean>;
16
+ abstract persist<T>(key: string, item: T, storeLevel: 'cache' | 'preference'): Observable<boolean>;
16
17
  /**
17
18
  * Recupera, per una sessione, il valore assegnato ad una chiave
18
19
  *
@@ -25,20 +26,31 @@ export declare abstract class BasePreferencesPersistor {
25
26
  * Per una sessione recupera tutte le coppie Chiave - Valore salvate
26
27
  *
27
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
28
30
  */
29
- abstract recoverAll(): Observable<{
31
+ abstract recoverAll(storeLevel: 'cache' | 'preference'): Observable<{
30
32
  [index: string]: any;
31
33
  }>;
32
- /** Ripulisce le preference salvate relative ad una sessione */
33
- abstract clear(): Observable<boolean>;
34
+ /**
35
+ * 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
+ */
38
+ abstract clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;
39
+ /**
40
+ * Elimina un oggetto dalla cache persistita
41
+ *
42
+ * @param {string} key Chiave da rimuovere
43
+ */
44
+ abstract remove(key: string): Observable<boolean>;
34
45
  /**
35
46
  * Effettua il **persist** massivo di una lista di Chiave - Valore
36
47
  *
37
48
  * @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
38
50
  */
39
51
  persistAll(dictionary: {
40
52
  [key: string]: string;
41
- }): Observable<boolean>;
53
+ }, storeLevel: 'cache' | 'preference'): Observable<boolean>;
42
54
  /**
43
55
  * Ottiene la chiave "Reale" da utilizzare per la persistenza di una chiave generica
44
56
  *
@@ -11,6 +11,8 @@ export declare class LocalStoragePersistor extends BasePreferencesPersistor {
11
11
  /** @ignore Vedi classe base */
12
12
  recover<T>(key: string): Observable<T>;
13
13
  /** @ignore Vedi classe base */
14
+ remove(key: string): Observable<boolean>;
15
+ /** @ignore Vedi classe base */
14
16
  recoverAll(): Observable<{
15
17
  [index: string]: any;
16
18
  }>;
@@ -7,15 +7,14 @@ import * as i0 from "@angular/core";
7
7
  export declare class PreferencesService {
8
8
  private persistor;
9
9
  private PREF_FULL_RETRIEVE_AT_START;
10
- /**
11
- * Indica se è la prima volta che viene effettuata un'operazione di retrieve. Appena effettuata questa variabile viene impostata a **false** e (in quanto singleton,
12
- * se configurato bene) mai più modificata
13
- */
14
- private FirstRetrieve;
15
10
  /**
16
11
  * Store in memoria delle preferenze locali che sarà persistito per mezzo della classe che fa le veci del **BasePreferencesPersistor**
17
12
  */
18
13
  private LocalPreferences;
14
+ /**
15
+ * Indica le chiavi contenute in **LocalPreferences** di che tipo sono in modo da ripulire correttamente sulla clear
16
+ */
17
+ private LocalPreferenceType;
19
18
  /**
20
19
  * Costruttore
21
20
  *
@@ -23,19 +22,31 @@ export declare class PreferencesService {
23
22
  */
24
23
  constructor(persistor: BasePreferencesPersistor, PREF_FULL_RETRIEVE_AT_START: boolean);
25
24
  /**
26
- * Ripulisce le impostazioni locali e le impostazioni salvate dal persistor
25
+ * Salva un oggetto sia nella cache locale che nel persistor
26
+ *
27
+ * @param {string} key Chiave di persistenza
28
+ * @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
27
30
  */
28
- clear(): Observable<boolean>;
31
+ setItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): Observable<boolean>;
29
32
  /**
30
- * Salva un oggetto sia nella cache locale che nel persistor
33
+ * Salva un oggetto solo nella cache locale. Dovrà essere persistito manualmente o andrà perso al riavvio dell'applicazione
31
34
  *
32
35
  * @param {string} key Chiave di persistenza
33
36
  * @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
+ */
39
+ setLocalItem<T>(key: string, item: T, storeLevel?: 'cache' | 'preference'): boolean;
40
+ /**
41
+ * Salva, per una sessione, una chiave con un valore, viene chiamato automaticamente dal metodo **store** ma dev'essere chiamato manualmente
42
+ * nel caso si utilizzi il metodo **storeLocal**
43
+ *
44
+ * @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
34
46
  */
35
- store<T>(key: string, item: T): Observable<boolean>;
47
+ private persist;
36
48
  /**
37
- * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita ed in caso fosse il primo caricamento e l'impostazione
38
- * **retrieveAllAtStart** della classe di configurazione fosse **true** si occupa anche della prima valorizzazione della cache locale
49
+ * Recupera un oggetto in base a una chiave. Permette di accedere alla copia locale o alla copia persistita.
39
50
  *
40
51
  * @param {string} key Chiave del valore da recuperare
41
52
  * @param {boolean} cacheBust Indica se ignorare il valore della cache locale e recuperare l'oggetto dallo store persistito,
@@ -43,9 +54,27 @@ export declare class PreferencesService {
43
54
  *
44
55
  * @returns {T} Oggetto richiesto
45
56
  */
46
- retrieve<T>(key: string, cacheBust?: boolean): Observable<T>;
47
- /** @ignore Vedi **retrieve** */
48
- private internalRetrieve;
57
+ getItem<T>(key: string, cacheBust?: boolean): Observable<T>;
58
+ /**
59
+ * Recupera un oggetto in base a una chiave. Permette di accedere solo alla copia locale
60
+ *
61
+ * @param {string} key Chiave del valore da recuperare
62
+ *
63
+ * @returns {T} Oggetto richiesto
64
+ */
65
+ getLocalItem<T>(key: string): T;
66
+ /**
67
+ * Elimina un oggetto dalla cache sia locale che persistita
68
+ *
69
+ * @param {string} key Chiave da rimuovere
70
+ */
71
+ removeItem(key: string): Observable<boolean>;
72
+ /**
73
+ * 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
+ */
77
+ clear(storeLevel: 'cache' | 'preference' | 'all'): Observable<boolean>;
49
78
  static ɵfac: i0.ɵɵFactoryDeclaration<PreferencesService, [null, { optional: true; }]>;
50
79
  static ɵprov: i0.ɵɵInjectableDeclaration<PreferencesService>;
51
80
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/preferences",
3
- "version": "13.1.2",
3
+ "version": "13.1.6",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },