@esfaenza/localizations 15.2.1 → 15.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm2020/lib/core/localization.base.mjs +80 -160
  2. package/esm2020/lib/core/localization.persistor.mjs +103 -0
  3. package/esm2020/lib/locale-persistor/LocalStorageCachePersistor.mjs +25 -0
  4. package/esm2020/lib/locale-persistor/LocalePersistor.mjs +8 -0
  5. package/esm2020/lib/localizations.module.mjs +12 -4
  6. package/esm2020/lib/localizations.service.mjs +52 -38
  7. package/esm2020/lib/models/BaseLocalizationTokens.mjs +14 -0
  8. package/esm2020/lib/models/ItemLocalization.mjs +18 -0
  9. package/esm2020/lib/models/LocaleDefinitions.mjs +32 -0
  10. package/esm2020/lib/models/LocaleObject.mjs +18 -0
  11. package/esm2020/lib/models/LocalizationMissingPolicy.mjs +11 -0
  12. package/esm2020/lib/models/LocalizationModuleConfig.mjs +6 -0
  13. package/esm2020/lib/models/SpecializedLocalization.mjs +16 -0
  14. package/esm2020/lib/tokens.mjs +4 -4
  15. package/esm2020/public-api.mjs +5 -2
  16. package/fesm2015/esfaenza-localizations.mjs +269 -182
  17. package/fesm2015/esfaenza-localizations.mjs.map +1 -1
  18. package/fesm2020/esfaenza-localizations.mjs +262 -178
  19. package/fesm2020/esfaenza-localizations.mjs.map +1 -1
  20. package/lib/core/localization.base.d.ts +12 -59
  21. package/lib/core/localization.persistor.d.ts +57 -0
  22. package/lib/locale-persistor/LocalStorageCachePersistor.d.ts +11 -0
  23. package/lib/locale-persistor/LocalePersistor.d.ts +18 -0
  24. package/lib/localizations.module.d.ts +1 -1
  25. package/lib/localizations.service.d.ts +11 -17
  26. package/lib/models/BaseLocalizationTokens.d.ts +12 -0
  27. package/lib/models/LocalizationMissingPolicy.d.ts +9 -0
  28. package/lib/models/LocalizationModuleConfig.d.ts +17 -0
  29. package/lib/tokens.d.ts +4 -3
  30. package/package.json +1 -1
  31. package/public-api.d.ts +4 -1
  32. package/esm2020/lib/models/classes/ItemLocalization.mjs +0 -18
  33. package/esm2020/lib/models/classes/LocaleDefinitions.mjs +0 -32
  34. package/esm2020/lib/models/classes/LocaleObject.mjs +0 -18
  35. package/esm2020/lib/models/classes/LocalizationModuleConfig.mjs +0 -6
  36. package/esm2020/lib/models/classes/SpecializedLocalization.mjs +0 -16
  37. package/esm2020/lib/models/index.mjs +0 -6
  38. package/lib/models/classes/LocalizationModuleConfig.d.ts +0 -9
  39. package/lib/models/index.d.ts +0 -5
  40. /package/lib/models/{classes/ItemLocalization.d.ts → ItemLocalization.d.ts} +0 -0
  41. /package/lib/models/{classes/LocaleDefinitions.d.ts → LocaleDefinitions.d.ts} +0 -0
  42. /package/lib/models/{classes/LocaleObject.d.ts → LocaleObject.d.ts} +0 -0
  43. /package/lib/models/{classes/SpecializedLocalization.d.ts → SpecializedLocalization.d.ts} +0 -0
@@ -1,6 +1,11 @@
1
- import { Injectable } from "@angular/core";
2
- import { ItemLocalization, LocaleDefinitions, SpecializedLocalization } from "../models";
1
+ import { Inject, Injectable } from "@angular/core";
2
+ import { LocalizationPersistor } from "./localization.persistor";
3
+ import { BaseLocalizationTokens } from "../models/BaseLocalizationTokens";
4
+ import { take } from "rxjs/operators";
5
+ import { ReplaySubject } from "rxjs";
6
+ import { LOC_LOCALE } from "../tokens";
3
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "../locale-persistor/LocalePersistor";
4
9
  /**
5
10
  * Classe singleton che contiene le traduzioni di base (per evitare di ripeterle in oggi classe di traduzione) e le funzioni base per
6
11
  * inserire e leggere traduzioni in/da una cache
@@ -9,169 +14,84 @@ export class BaseLocalization {
9
14
  /**
10
15
  * Costruttore. Da qui utilizzando il metodo statico **BaseLocalization.set** si va a popolare la cache delle traduzioni **BaseTranslations**
11
16
  */
12
- constructor() {
17
+ constructor(LocalePersistor, defaultLocale) {
18
+ this.LocalePersistor = LocalePersistor;
13
19
  /**
14
20
  * Cache di tutte le localizzazioni di base
15
21
  */
16
- this.BaseTranslations = {};
17
- // Odio sprecare caratteri... soprattutto quando rischio che non vengano minificati
18
- let bt = this.BaseTranslations;
19
- let bl = BaseLocalization;
20
- bl.set(bt, "en->it", "Remove", ["Elimina"]);
21
- bl.set(bt, "en->it", "Paging", ["Paginazione"]);
22
- bl.set(bt, "en->it", "Yes", ["Si"]);
23
- bl.set(bt, "en->it", "No", ["No"]);
24
- bl.set(bt, "en->it", "YES", ["SI'"]);
25
- bl.set(bt, "en->it", "NO", ["NO"]);
26
- bl.set(bt, "en->it", "Found objects", ["Risultati trovati"]);
27
- bl.set(bt, "en->it", "Loading data...", ["Carico i dati..."]);
28
- bl.set(bt, "en->it", "Error during save operations", ["Errori durante il salvataggio"]);
29
- bl.set(bt, "en->it", "Error", ["Errore"]);
30
- bl.set(bt, "en->it", "Warning", ["Avviso"]);
31
- bl.set(bt, "en->it", "Information", ["Informazione"]);
32
- bl.set(bt, "en->it", "Save", ["Salva"]);
33
- bl.set(bt, "en->it", "Back", ["Indietro"]);
34
- bl.set(bt, "en->it", "From", ["Da"]);
35
- bl.set(bt, "en->it", "To", ["A"]);
36
- bl.set(bt, "en->it", "View Chart", ["Vedi Grafico"]);
37
- bl.set(bt, "en->it", "View Table", ["Vedi Tabella"]);
38
- bl.set(bt, "en->it", "Notes", ["Note"]);
39
- bl.set(bt, "en->it", "Edit Notes", ["Modifica Note"]);
40
- bl.set(bt, "en->it", "Cancel", ["Annulla"]);
41
- bl.set(bt, "en->it", "Confirm", ["Conferma"]);
42
- bl.set(bt, "en->it", "View", ["Visualizza"]);
43
- bl.set(bt, "en->it", "Close", ["Chiudi"]);
44
- bl.set(bt, "en->it", "Select", ["Seleziona"]);
45
- bl.set(bt, "en->it", "Meter Reading registered successfully", ["Lettura registrata correttamente"]);
46
- bl.set(bt, "en->it", "Validation errors during save operations", ["Errori di validazione durante il salvataggio"]);
47
- bl.set(bt, "en->it", "Can't register reading", ["Impossibile registrare la lettura"]);
48
- bl.set(bt, "en->it", "Electricity", ["Elettricita"]);
49
- bl.set(bt, "en->it", "Gas", ["Gas"]);
50
- bl.set(bt, "en->it", "Water", ["Acqua"]);
51
- bl.set(bt, "en->it", "Delete", ["Elimina"]);
52
- bl.set(bt, "en->it", "This operation cannot be reverted", ["Questa operazione non puo' essere annullata"]);
53
- bl.set(bt, "en->it", "Hide", ["Nascondi"]);
22
+ this.LocCache = {};
23
+ /**
24
+ * Locale di riferimento per tutte le traduzioni
25
+ */
26
+ this.Locale = new ReplaySubject(1);
27
+ // Recupero il locale alla partenza del BaseLocalization in modo, spero di dare tempo all'applicazione di tirarlo su
28
+ this.LocalePersistor.recover().pipe(take(1)).subscribe(async (l) => {
29
+ if (!l) {
30
+ l = defaultLocale;
31
+ this.LocalePersistor.persist(defaultLocale);
32
+ }
33
+ this.Locale.next(l);
34
+ });
35
+ this.Persistor = new LocalizationPersistor(this.LocCache);
36
+ this.Persistor.set("en->it", "Remove", ["Elimina"]);
37
+ this.Persistor.set("en->it", "Paging", ["Paginazione"]);
38
+ this.Persistor.set("en->it", "Yes", ["Si"]);
39
+ this.Persistor.set("en->it", "No", ["No"]);
40
+ this.Persistor.set("en->it", "YES", ["SI'"]);
41
+ this.Persistor.set("en->it", "NO", ["NO"]);
42
+ this.Persistor.set("en->it", "Found objects", ["Risultati trovati"]);
43
+ this.Persistor.set("en->it", "Loading data...", ["Carico i dati..."]);
44
+ this.Persistor.set("en->it", "Error during save operations", ["Errori durante il salvataggio"]);
45
+ this.Persistor.set("en->it", "Error", ["Errore"]);
46
+ this.Persistor.set("en->it", "Warning", ["Avviso"]);
47
+ this.Persistor.set("en->it", "Information", ["Informazione"]);
48
+ this.Persistor.set("en->it", "Save", ["Salva"]);
49
+ this.Persistor.set("en->it", "Back", ["Indietro"]);
50
+ this.Persistor.set("en->it", "From", ["Da"]);
51
+ this.Persistor.set("en->it", "To", ["A"]);
52
+ this.Persistor.set("en->it", "View Chart", ["Vedi Grafico"]);
53
+ this.Persistor.set("en->it", "View Table", ["Vedi Tabella"]);
54
+ this.Persistor.set("en->it", "Notes", ["Note"]);
55
+ this.Persistor.set("en->it", "Edit Notes", ["Modifica Note"]);
56
+ this.Persistor.set("en->it", "Cancel", ["Annulla"]);
57
+ this.Persistor.set("en->it", "Confirm", ["Conferma"]);
58
+ this.Persistor.set("en->it", "View", ["Visualizza"]);
59
+ this.Persistor.set("en->it", "Close", ["Chiudi"]);
60
+ this.Persistor.set("en->it", "Select", ["Seleziona"]);
61
+ this.Persistor.set("en->it", "Meter Reading registered successfully", ["Lettura registrata correttamente"]);
62
+ this.Persistor.set("en->it", "Validation errors during save operations", ["Errori di validazione durante il salvataggio"]);
63
+ this.Persistor.set("en->it", "Can't register reading", ["Impossibile registrare la lettura"]);
64
+ this.Persistor.set("en->it", "Electricity", ["Elettricita"]);
65
+ this.Persistor.set("en->it", "Gas", ["Gas"]);
66
+ this.Persistor.set("en->it", "Water", ["Acqua"]);
67
+ this.Persistor.set("en->it", "Delete", ["Elimina"]);
68
+ this.Persistor.set("en->it", "This operation cannot be reverted", ["Questa operazione non puo' essere annullata"]);
69
+ this.Persistor.set("en->it", "Hide", ["Nascondi"]);
54
70
  // Helper validazione
55
- bl.set(bt, "en->it", "Required field", ["Campo richiesto"]);
56
- bl.set(bt, "en->it", "Wrong field format", ["Formato campo errato"]);
57
- bl.set(bt, "en->it", "Wrong field format or field missing", ["Formato campo errato o campo mancante"]);
58
- bl.set(bt, "en->it", "You don't have the required permissions to view this page. The navigation has been blocked", ["Non si hanno privilegi a sufficienza per accedere a questa pagina. La navigazione e' stata bloccata"]);
71
+ this.Persistor.set("en->it", "Required field", ["Campo richiesto"]);
72
+ this.Persistor.set("en->it", "Wrong field format", ["Formato campo errato"]);
73
+ this.Persistor.set("en->it", "Wrong field format or field missing", ["Formato campo errato o campo mancante"]);
74
+ this.Persistor.set("en->it", "You don't have the required permissions to view this page. The navigation has been blocked", ["Non si hanno privilegi a sufficienza per accedere a questa pagina. La navigazione e' stata bloccata"]);
59
75
  // Informazioni sulle date
60
- bl.setToken(bt, "en->it", "getDateMonthPosition", "0", ["1"]);
61
- bl.setToken(bt, "en->it", "getDisplayDateMonthPosition", "1", ["1"]);
62
- bl.setToken(bt, "en->it", "getLocale", "en-US", ["it-IT"]);
63
- bl.setToken(bt, "en->it", "getSmallDateFormat", "MM/DD/YYYY", ["DD/MM/YYYY"]);
64
- bl.setToken(bt, "en->it", "getDefaultDateFormat", "MM/DD/YYYY", ["MM/DD/YYYY"]);
65
- bl.setToken(bt, "en->it", "getSmallDateDisplayFormat", "DD/MM/YYYY", ["DD/MM/YYYY"]);
66
- bl.setToken(bt, "en->it", "getFullDateFormat", "MM/DD/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
67
- bl.setToken(bt, "en->it", "getFullDateDisplayFormat", "DD/MM/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
68
- bl.setToken(bt, "en->it", "getFullDateFormatNoSeconds", "MM/DD/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
69
- bl.setToken(bt, "en->it", "getFullDateDisplayFormatNoSeconds", "DD/MM/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
70
- }
71
- /**
72
- * Imposta la localizzazione di un token all'interno della cache scelta
73
- *
74
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione del token con le localizzazioni
75
- * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
76
- * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
77
- * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio "en->it,jp,ecc"
78
- * @param {string} token Nome del token
79
- * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
80
- * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
81
- */
82
- static setToken(locCache, direction, token, left, right) {
83
- let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
84
- var parsingRes = parsingRegex.exec(direction);
85
- let from = parsingRes[1];
86
- let to = parsingRes[2].replace(/\s/g, '').split(',');
87
- let localeFrom = LocaleDefinitions.getByAlias(from);
88
- BaseLocalization._set(locCache, token, localeFrom.id, left, true);
89
- to.forEach((t, index) => {
90
- let localeTo = LocaleDefinitions.getByAlias(t);
91
- BaseLocalization._set(locCache, token, localeTo.id, right[index], true);
92
- });
93
- }
94
- /**
95
- * Imposta la localizzazione di una frase all'interno della cache scelta
96
- *
97
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione della frase con le localizzazioni
98
- * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
99
- * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
100
- * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio "en->it,jp,ecc"
101
- * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
102
- * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
103
- */
104
- static set(locCache, direction, left, right) {
105
- let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
106
- var parsingRes = parsingRegex.exec(direction);
107
- let from = parsingRes[1];
108
- let to = parsingRes[2].replace(/\s/g, '').split(',');
109
- let localeFrom = LocaleDefinitions.getByAlias(from);
110
- BaseLocalization._set(locCache, left, localeFrom.id, left);
111
- to.forEach((t, index) => {
112
- let localeTo = LocaleDefinitions.getByAlias(t);
113
- BaseLocalization._set(locCache, left, localeTo.id, right[index]);
114
- });
115
- }
116
- /**
117
- * Imposta all'interno della cache specificata un'unica traduzione partendo da un testo di base
118
- *
119
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione del testo con le localizzazioni
120
- * @param {string} text Testo da tradurre
121
- * @param {string} culture Lingua per cui inserire la traduzione
122
- * @param {string} translation Traduzione del **text** nella lingua specificata da **culture**
123
- * @param {boolean} token Indica se il **text** è un token o è una frase normale
124
- */
125
- static _set(locCache, text, culture, translation, token) {
126
- let item = BaseLocalization.findByText(locCache, text, token);
127
- if (!item) {
128
- locCache[text] = new ItemLocalization(token, text, [new SpecializedLocalization(culture, translation)]);
129
- return;
130
- }
131
- var trs = BaseLocalization.translationByCulture(item, culture);
132
- if (trs) {
133
- console.warn("Localization already loaded for sentence '" + text + "' and culture " + culture);
134
- return;
135
- }
136
- item.translations.push(new SpecializedLocalization(culture, translation));
137
- }
138
- /**
139
- * Partendo da una cache di localizzazione, dato un testo che può essere o meno un token, cerca quell'elemento all'interno della cache
140
- *
141
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno del quale cercare il **text**
142
- * @param {string} text Testo da cercare nella **locCache**
143
- * @param {boolean} allowtokens Indica se l'elemento cercato può essere un token o se dev'essere per forza una frase (per evitare rari
144
- * casi di collisione in cui magari un token è uguale a una frase tradotta)
145
- *
146
- * @returns {ItemLocalization} Informazioni di localizzazione per il **text** cercato
147
- */
148
- static findByText(locCache, text, allowtokens) {
149
- let possibleItem = locCache[text];
150
- if (!possibleItem)
151
- return null;
152
- var item = allowtokens || !possibleItem.token ? possibleItem : null;
153
- return item;
154
- }
155
- /**
156
- * Date le informazioni di localizzazione per un testo cerca e restituisce la traduzione per una lingua specifica
157
- *
158
- * @param {ItemLocalization} Informazioni di localizzazione
159
- * @param {string} culture Lingua della traduzione richiesta
160
- *
161
- * @returns {SpecializedLocalization} Informazioni di localizzazione specifiche della lingua richiesta
162
- */
163
- static translationByCulture(item, culture) {
164
- for (let i = 0; i < item.translations.length; i++) {
165
- let trl = item.translations[i];
166
- if (trl.culture == culture)
167
- return trl;
168
- }
169
- return null;
76
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDateMonthPosition, "0", ["1"]);
77
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDisplayDateMonthPosition, "1", ["1"]);
78
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getLocale, "en-US", ["it-IT"]);
79
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getSmallDateFormat, "MM/DD/YYYY", ["DD/MM/YYYY"]);
80
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDefaultDateFormat, "MM/DD/YYYY", ["MM/DD/YYYY"]);
81
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getSmallDateDisplayFormat, "DD/MM/YYYY", ["DD/MM/YYYY"]);
82
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateFormat, "MM/DD/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
83
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateDisplayFormat, "DD/MM/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
84
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateFormatNoSeconds, "MM/DD/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
85
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateDisplayFormatNoSeconds, "DD/MM/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
170
86
  }
171
87
  }
172
- BaseLocalization.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseLocalization, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
173
- BaseLocalization.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseLocalization });
88
+ BaseLocalization.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseLocalization, deps: [{ token: i1.LocalePersistor }, { token: LOC_LOCALE }], target: i0.ɵɵFactoryTarget.Injectable });
89
+ BaseLocalization.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseLocalization, providedIn: 'root' });
174
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: BaseLocalization, decorators: [{
175
- type: Injectable
176
- }], ctorParameters: function () { return []; } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvY29yZS9sb2NhbGl6YXRpb24uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFFekY7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQU96Qjs7T0FFRztJQUNIO1FBUkE7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBdUMsRUFBRSxDQUFDO1FBTTdELG1GQUFtRjtRQUNuRixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7UUFFMUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDaEQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFB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QkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEl0ZW1Mb2NhbGl6YXRpb24sIExvY2FsZURlZmluaXRpb25zLCBTcGVjaWFsaXplZExvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2Ugc2luZ2xldG9uIGNoZSBjb250aWVuZSBsZSB0cmFkdXppb25pIGRpIGJhc2UgKHBlciBldml0YXJlIGRpIHJpcGV0ZXJsZSBpbiBvZ2dpIGNsYXNzZSBkaSB0cmFkdXppb25lKSBlIGxlIGZ1bnppb25pIGJhc2UgcGVyIFxyXG4gKiBpbnNlcmlyZSBlIGxlZ2dlcmUgdHJhZHV6aW9uaSBpbi9kYSB1bmEgY2FjaGVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJhc2VMb2NhbGl6YXRpb24ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGkgdHV0dGUgbGUgbG9jYWxpenphemlvbmkgZGkgYmFzZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQmFzZVRyYW5zbGF0aW9uczogeyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfSA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmUuIERhIHF1aSB1dGlsaXp6YW5kbyBpbCBtZXRvZG8gc3RhdGljbyAqKkJhc2VMb2NhbGl6YXRpb24uc2V0Kiogc2kgdmEgYSBwb3BvbGFyZSBsYSBjYWNoZSBkZWxsZSB0cmFkdXppb25pICoqQmFzZVRyYW5zbGF0aW9ucyoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIC8vIE9kaW8gc3ByZWNhcmUgY2FyYXR0ZXJpLi4uIHNvcHJhdHR1dHRvIHF1YW5kbyByaXNjaGlvIGNoZSBub24gdmVuZ2FubyBtaW5pZmljYXRpXHJcbiAgICAgICAgbGV0IGJ0ID0gdGhpcy5CYXNlVHJhbnNsYXRpb25zO1xyXG4gICAgICAgIGxldCBibCA9IEJhc2VMb2NhbGl6YXRpb247XHJcblxyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJSZW1vdmVcIiwgW1wiRWxpbWluYVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlBhZ2luZ1wiLCBbXCJQYWdpbmF6aW9uZVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlllc1wiLCBbXCJTaVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIk5vXCIsIFtcIk5vXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiWUVTXCIsIFtcIlNJJ1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIk5PXCIsIFtcIk5PXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiRm91bmQgb2JqZWN0c1wiLCBbXCJSaXN1bHRhdGkgdHJvdmF0aVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkxvYWRpbmcgZGF0YS4uLlwiLCBbXCJDYXJpY28gaSBkYXRpLi4uXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiRXJyb3IgZHVyaW5nIHNhdmUgb3BlcmF0aW9uc1wiLCBbXCJFcnJvcmkgZHVyYW50ZSBpbCBzYWx2YXRhZ2dpb1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkVycm9yXCIsIFtcIkVycm9yZVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIldhcm5pbmdcIiwgW1wiQXZ2aXNvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiSW5mb3JtYXRpb25cIiwgW1wiSW5mb3JtYXppb25lXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiU2F2ZVwiLCBbXCJTYWx2YVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkJhY2tcIiwgW1wiSW5kaWV0cm9cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJGcm9tXCIsIFtcIkRhXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiVG9cIiwgW1wiQVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlZpZXcgQ2hhcnRcIiwgW1wiVmVkaSBHcmFmaWNvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiVmlldyBUYWJsZVwiLCBbXCJWZWRpIFRhYmVsbGFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJOb3Rlc1wiLCBbXCJOb3RlXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiRWRpdCBOb3Rlc1wiLCBbXCJNb2RpZmljYSBOb3RlXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiQ2FuY2VsXCIsIFtcIkFubnVsbGFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJDb25maXJtXCIsIFtcIkNvbmZlcm1hXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiVmlld1wiLCBbXCJWaXN1YWxpenphXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiQ2xvc2VcIiwgW1wiQ2hpdWRpXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiU2VsZWN0XCIsIFtcIlNlbGV6aW9uYVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIk1ldGVyIFJlYWRpbmcgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHlcIiwgW1wiTGV0dHVyYSByZWdpc3RyYXRhIGNvcnJldHRhbWVudGVcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJWYWxpZGF0aW9uIGVycm9ycyBkdXJpbmcgc2F2ZSBvcGVyYXRpb25zXCIsIFtcIkVycm9yaSBkaSB2YWxpZGF6aW9uZSBkdXJhbnRlIGlsIHNhbHZhdGFnZ2lvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiQ2FuJ3QgcmVnaXN0ZXIgcmVhZGluZ1wiLCBbXCJJbXBvc3NpYmlsZSByZWdpc3RyYXJlIGxhIGxldHR1cmFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJFbGVjdHJpY2l0eVwiLCBbXCJFbGV0dHJpY2l0YVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkdhc1wiLCBbXCJHYXNcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJXYXRlclwiLCBbXCJBY3F1YVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkRlbGV0ZVwiLCBbXCJFbGltaW5hXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiVGhpcyBvcGVyYXRpb24gY2Fubm90IGJlIHJldmVydGVkXCIsIFtcIlF1ZXN0YSBvcGVyYXppb25lIG5vbiBwdW8nIGVzc2VyZSBhbm51bGxhdGFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJIaWRlXCIsIFtcIk5hc2NvbmRpXCJdKTtcclxuXHJcbiAgICAgICAgLy8gSGVscGVyIHZhbGlkYXppb25lXHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlJlcXVpcmVkIGZpZWxkXCIsIFtcIkNhbXBvIHJpY2hpZXN0b1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIldyb25nIGZpZWxkIGZvcm1hdFwiLCBbXCJGb3JtYXRvIGNhbXBvIGVycmF0b1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIldyb25nIGZpZWxkIGZvcm1hdCBvciBmaWVsZCBtaXNzaW5nXCIsIFtcIkZvcm1hdG8gY2FtcG8gZXJyYXRvIG8gY2FtcG8gbWFuY2FudGVcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJZb3UgZG9uJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdmlldyB0aGlzIHBhZ2UuIFRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIGJsb2NrZWRcIiwgW1wiTm9uIHNpIGhhbm5vIHByaXZpbGVnaSBhIHN1ZmZpY2llbnphIHBlciBhY2NlZGVyZSBhIHF1ZXN0YSBwYWdpbmEuIExhIG5hdmlnYXppb25lIGUnIHN0YXRhIGJsb2NjYXRhXCJdKTtcclxuXHJcbiAgICAgICAgLy8gSW5mb3JtYXppb25pIHN1bGxlIGRhdGVcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXREYXRlTW9udGhQb3NpdGlvblwiLCBcIjBcIiwgW1wiMVwiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0RGlzcGxheURhdGVNb250aFBvc2l0aW9uXCIsIFwiMVwiLCBbXCIxXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXRMb2NhbGVcIiwgXCJlbi1VU1wiLCBbXCJpdC1JVFwiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0U21hbGxEYXRlRm9ybWF0XCIsIFwiTU0vREQvWVlZWVwiLCBbXCJERC9NTS9ZWVlZXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXREZWZhdWx0RGF0ZUZvcm1hdFwiLCBcIk1NL0REL1lZWVlcIiwgW1wiTU0vREQvWVlZWVwiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0U21hbGxEYXRlRGlzcGxheUZvcm1hdFwiLCBcIkREL01NL1lZWVlcIiwgW1wiREQvTU0vWVlZWVwiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0RnVsbERhdGVGb3JtYXRcIiwgXCJNTS9ERC9ZWVlZIEhIOm1tOnNzXCIsIFtcIkREL01NL1lZWVkgSEg6bW06c3NcIl0pO1xyXG4gICAgICAgIGJsLnNldFRva2VuKGJ0LCBcImVuLT5pdFwiLCBcImdldEZ1bGxEYXRlRGlzcGxheUZvcm1hdFwiLCBcIkREL01NL1lZWVkgSEg6bW06c3NcIiwgW1wiREQvTU0vWVlZWSBISDptbTpzc1wiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0RnVsbERhdGVGb3JtYXROb1NlY29uZHNcIiwgXCJNTS9ERC9ZWVlZIEhIOm1tXCIsIFtcIkREL01NL1lZWVkgSEg6bW1cIl0pO1xyXG4gICAgICAgIGJsLnNldFRva2VuKGJ0LCBcImVuLT5pdFwiLCBcImdldEZ1bGxEYXRlRGlzcGxheUZvcm1hdE5vU2Vjb25kc1wiLCBcIkREL01NL1lZWVkgSEg6bW1cIiwgW1wiREQvTU0vWVlZWSBISDptbVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGxhIGxvY2FsaXp6YXppb25lIGRpIHVuIHRva2VuIGFsbCdpbnRlcm5vIGRlbGxhIGNhY2hlIHNjZWx0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH19IGxvY0NhY2hlIENhY2hlIGFsbCdpbnRlcm5vIGRlbGxhIHF1YWxlIGluc2VyaXJlIGwnaW5mb3JtYXppb25lIGRlbCB0b2tlbiBjb24gbGUgbG9jYWxpenphemlvbmlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24gRGlyZXppb25lIGRlbGxhIHRyYWR1emlvbmUsIHJhcHByZXNlbnRhIGxhIGxpbmd1YSBiYXNlIGluIGN1aSBhc3BldHRhcnNpIGlsIHRlc3RvIGUgbGUgdmFyaWUgbGluZ3VlIGluIGN1aSB2aWVuZSB0cmFkb3R0YS5cclxuICAgICAqIEFkIGVzZW1waW8sIFwiZW4tPml0XCIgaW5kaWNhIGNoZSBpbCBwYXJhbWV0cm8gKipsZWZ0Kiogw6ggdmFsaWRvIHBlciBsZSBsb2NhbGl6emF6aW9uaSBpbiBpbmdsZXNlLCBtZW50cmUgbmVsbCdlbGVtZW50byAwIGRlbCBwYXJhbWV0cm8gKipyaWdodCoqIFxyXG4gICAgICogw6ggcHJlc2VudGUgbCd1bmljYSB0cmFkdXppb25lIGluIGl0YWxpYW5vLCBwZXIgZGVmaW5pcmUgcGnDuSB0cmFkdXppb25pIHN1bCBsYXRvIGRlc3RybyBkZWxsYSBmcmVjY2lhIGJpc29nbmEgY29uY2F0ZW5hcmxlIGNvbiBsYSB2aXJnb2xhLCBhZCBlc2VtcGlvIFwiZW4tPml0LGpwLGVjY1wiXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gTm9tZSBkZWwgdG9rZW5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZWZ0IFZhbG9yZSBkZWwgdG9rZW4gcGVyIGxhIGxpbmd1YSBzcGVjaWZpY2F0YSBuZWwgbGF0byBpbW1lZGlhdGFtZW50ZSBzaW5pc3RybyBhbGxhIGZyZWNjaWEgZGVsIHBhcmFtZXRybyAqKmRpcmVjdGlvbioqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmlnaHQgQXJyYXkgY29uIGkgdmFsb3JpIGZhY2VudGkgcmlmZXJpbWVudG8gYWxsJ04tZXNpbWEgbGluZ3VhIGRlbCBsYXRvIGRlc3RybyBkZWwgcGFyYW1ldHJvICoqZGlyZWN0aW9uKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXRUb2tlbihsb2NDYWNoZTogeyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfSwgZGlyZWN0aW9uOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgbGV0IHBhcnNpbmdSZWdleCA9IC8oW2EtekEtWl0rKVtcXHNdKi0+W1xcc10qKFthLXpBLVosXFxzXSspKy9nO1xyXG4gICAgICAgIHZhciBwYXJzaW5nUmVzID0gcGFyc2luZ1JlZ2V4LmV4ZWMoZGlyZWN0aW9uKTtcclxuXHJcbiAgICAgICAgbGV0IGZyb20gPSBwYXJzaW5nUmVzWzFdO1xyXG4gICAgICAgIGxldCB0bzogc3RyaW5nW10gPSBwYXJzaW5nUmVzWzJdLnJlcGxhY2UoL1xccy9nLCAnJykuc3BsaXQoJywnKTtcclxuICAgICAgICBsZXQgbG9jYWxlRnJvbSA9IExvY2FsZURlZmluaXRpb25zLmdldEJ5QWxpYXMoZnJvbSk7XHJcbiAgICAgICAgQmFzZUxvY2FsaXphdGlvbi5fc2V0KGxvY0NhY2hlLCB0b2tlbiwgbG9jYWxlRnJvbS5pZCwgbGVmdCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRvLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhbGVUbyA9IExvY2FsZURlZmluaXRpb25zLmdldEJ5QWxpYXModCk7XHJcbiAgICAgICAgICAgIEJhc2VMb2NhbGl6YXRpb24uX3NldChsb2NDYWNoZSwgdG9rZW4sIGxvY2FsZVRvLmlkLCByaWdodFtpbmRleF0sIHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBsYSBsb2NhbGl6emF6aW9uZSBkaSB1bmEgZnJhc2UgYWxsJ2ludGVybm8gZGVsbGEgY2FjaGUgc2NlbHRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7eyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfX0gbG9jQ2FjaGUgQ2FjaGUgYWxsJ2ludGVybm8gZGVsbGEgcXVhbGUgaW5zZXJpcmUgbCdpbmZvcm1hemlvbmUgZGVsbGEgZnJhc2UgY29uIGxlIGxvY2FsaXp6YXppb25pXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIERpcmV6aW9uZSBkZWxsYSB0cmFkdXppb25lLCByYXBwcmVzZW50YSBsYSBsaW5ndWEgYmFzZSBpbiBjdWkgYXNwZXR0YXJzaSBpbCB0ZXN0byBlIGxlIHZhcmllIGxpbmd1ZSBpbiBjdWkgdmllbmUgdHJhZG90dGEuXHJcbiAgICAgKiBBZCBlc2VtcGlvLCBcImVuLT5pdFwiIGluZGljYSBjaGUgaWwgcGFyYW1ldHJvICoqbGVmdCoqIMOoIHZhbGlkbyBwZXIgbGUgbG9jYWxpenphemlvbmkgaW4gaW5nbGVzZSwgbWVudHJlIG5lbGwnZWxlbWVudG8gMCBkZWwgcGFyYW1ldHJvICoqcmlnaHQqKiBcclxuICAgICAqIMOoIHByZXNlbnRlIGwndW5pY2EgdHJhZHV6aW9uZSBpbiBpdGFsaWFubywgcGVyIGRlZmluaXJlIHBpw7kgdHJhZHV6aW9uaSBzdWwgbGF0byBkZXN0cm8gZGVsbGEgZnJlY2NpYSBiaXNvZ25hIGNvbmNhdGVuYXJsZSBjb24gbGEgdmlyZ29sYSwgYWQgZXNlbXBpbyBcImVuLT5pdCxqcCxlY2NcIlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxlZnQgVmFsb3JlIGRlbGxhIGZyYXNlIHBlciBsYSBsaW5ndWEgc3BlY2lmaWNhdGEgbmVsIGxhdG8gaW1tZWRpYXRhbWVudGUgc2luaXN0cm8gYWxsYSBmcmVjY2lhIGRlbCBwYXJhbWV0cm8gKipkaXJlY3Rpb24qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJpZ2h0IEFycmF5IGNvbiBpIHZhbG9yaSBmYWNlbnRpIHJpZmVyaW1lbnRvIGFsbCdOLWVzaW1hIGxpbmd1YSBkZWwgbGF0byBkZXN0cm8gZGVsIHBhcmFtZXRybyAqKmRpcmVjdGlvbioqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgc2V0KGxvY0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9LCBkaXJlY3Rpb246IHN0cmluZywgbGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nW10pIHtcclxuICAgICAgICBsZXQgcGFyc2luZ1JlZ2V4ID0gLyhbYS16QS1aXSspW1xcc10qLT5bXFxzXSooW2EtekEtWixcXHNdKykrL2c7XHJcbiAgICAgICAgdmFyIHBhcnNpbmdSZXMgPSBwYXJzaW5nUmVnZXguZXhlYyhkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBsZXQgZnJvbSA9IHBhcnNpbmdSZXNbMV07XHJcbiAgICAgICAgbGV0IHRvOiBzdHJpbmdbXSA9IHBhcnNpbmdSZXNbMl0ucmVwbGFjZSgvXFxzL2csICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGxldCBsb2NhbGVGcm9tID0gTG9jYWxlRGVmaW5pdGlvbnMuZ2V0QnlBbGlhcyhmcm9tKTtcclxuICAgICAgICBCYXNlTG9jYWxpemF0aW9uLl9zZXQobG9jQ2FjaGUsIGxlZnQsIGxvY2FsZUZyb20uaWQsIGxlZnQpO1xyXG5cclxuICAgICAgICB0by5mb3JFYWNoKCh0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbG9jYWxlVG8gPSBMb2NhbGVEZWZpbml0aW9ucy5nZXRCeUFsaWFzKHQpO1xyXG4gICAgICAgICAgICBCYXNlTG9jYWxpemF0aW9uLl9zZXQobG9jQ2FjaGUsIGxlZnQsIGxvY2FsZVRvLmlkLCByaWdodFtpbmRleF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBhbGwnaW50ZXJubyBkZWxsYSBjYWNoZSBzcGVjaWZpY2F0YSB1bid1bmljYSB0cmFkdXppb25lIHBhcnRlbmRvIGRhIHVuIHRlc3RvIGRpIGJhc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9fSBsb2NDYWNoZSBDYWNoZSBhbGwnaW50ZXJubyBkZWxsYSBxdWFsZSBpbnNlcmlyZSBsJ2luZm9ybWF6aW9uZSBkZWwgdGVzdG8gY29uIGxlIGxvY2FsaXp6YXppb25pXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSB0cmFkdXJyZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1bHR1cmUgTGluZ3VhIHBlciBjdWkgaW5zZXJpcmUgbGEgdHJhZHV6aW9uZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zbGF0aW9uIFRyYWR1emlvbmUgZGVsICoqdGV4dCoqIG5lbGxhIGxpbmd1YSBzcGVjaWZpY2F0YSBkYSAqKmN1bHR1cmUqKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB0b2tlbiBJbmRpY2Egc2UgaWwgKip0ZXh0Kiogw6ggdW4gdG9rZW4gbyDDqCB1bmEgZnJhc2Ugbm9ybWFsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfc2V0KGxvY0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9LCB0ZXh0OiBzdHJpbmcsIGN1bHR1cmU6IHN0cmluZywgdHJhbnNsYXRpb246IHN0cmluZywgdG9rZW4/OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IGl0ZW0gPSBCYXNlTG9jYWxpemF0aW9uLmZpbmRCeVRleHQobG9jQ2FjaGUsIHRleHQsIHRva2VuKTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgbG9jQ2FjaGVbdGV4dF0gPSBuZXcgSXRlbUxvY2FsaXphdGlvbih0b2tlbiwgdGV4dCwgW25ldyBTcGVjaWFsaXplZExvY2FsaXphdGlvbihjdWx0dXJlLCB0cmFuc2xhdGlvbildKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRycyA9IEJhc2VMb2NhbGl6YXRpb24udHJhbnNsYXRpb25CeUN1bHR1cmUoaXRlbSwgY3VsdHVyZSk7XHJcbiAgICAgICAgaWYgKHRycykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJMb2NhbGl6YXRpb24gYWxyZWFkeSBsb2FkZWQgZm9yIHNlbnRlbmNlICdcIiArIHRleHQgKyBcIicgYW5kIGN1bHR1cmUgXCIgKyBjdWx0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXRlbS50cmFuc2xhdGlvbnMucHVzaChuZXcgU3BlY2lhbGl6ZWRMb2NhbGl6YXRpb24oY3VsdHVyZSwgdHJhbnNsYXRpb24pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhIHVuYSBjYWNoZSBkaSBsb2NhbGl6emF6aW9uZSwgZGF0byB1biB0ZXN0byBjaGUgcHXDsiBlc3NlcmUgbyBtZW5vIHVuIHRva2VuLCBjZXJjYSBxdWVsbCdlbGVtZW50byBhbGwnaW50ZXJubyBkZWxsYSBjYWNoZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH19IGxvY0NhY2hlIENhY2hlIGFsbCdpbnRlcm5vIGRlbCBxdWFsZSBjZXJjYXJlIGlsICoqdGV4dCoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSBjZXJjYXJlIG5lbGxhICoqbG9jQ2FjaGUqKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhbGxvd3Rva2VucyBJbmRpY2Egc2UgbCdlbGVtZW50byBjZXJjYXRvIHB1w7IgZXNzZXJlIHVuIHRva2VuIG8gc2UgZGV2J2Vzc2VyZSBwZXIgZm9yemEgdW5hIGZyYXNlIChwZXIgZXZpdGFyZSByYXJpIFxyXG4gICAgICogY2FzaSBkaSBjb2xsaXNpb25lIGluIGN1aSBtYWdhcmkgdW4gdG9rZW4gw6ggdWd1YWxlIGEgdW5hIGZyYXNlIHRyYWRvdHRhKVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7SXRlbUxvY2FsaXphdGlvbn0gSW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lIHBlciBpbCAqKnRleHQqKiBjZXJjYXRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZmluZEJ5VGV4dChsb2NDYWNoZTogeyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfSwgdGV4dDogc3RyaW5nLCBhbGxvd3Rva2VuczogYm9vbGVhbik6IEl0ZW1Mb2NhbGl6YXRpb24ge1xyXG4gICAgICAgIGxldCBwb3NzaWJsZUl0ZW06IEl0ZW1Mb2NhbGl6YXRpb24gPSBsb2NDYWNoZVt0ZXh0XTtcclxuICAgICAgICBpZiAoIXBvc3NpYmxlSXRlbSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIHZhciBpdGVtID0gYWxsb3d0b2tlbnMgfHwgIXBvc3NpYmxlSXRlbS50b2tlbiA/IHBvc3NpYmxlSXRlbSA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRlIGxlIGluZm9ybWF6aW9uaSBkaSBsb2NhbGl6emF6aW9uZSBwZXIgdW4gdGVzdG8gY2VyY2EgZSByZXN0aXR1aXNjZSBsYSB0cmFkdXppb25lIHBlciB1bmEgbGluZ3VhIHNwZWNpZmljYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1Mb2NhbGl6YXRpb259IEluZm9ybWF6aW9uaSBkaSBsb2NhbGl6emF6aW9uZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGN1bHR1cmUgTGluZ3VhIGRlbGxhIHRyYWR1emlvbmUgcmljaGllc3RhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtTcGVjaWFsaXplZExvY2FsaXphdGlvbn0gSW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lIHNwZWNpZmljaGUgZGVsbGEgbGluZ3VhIHJpY2hpZXN0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHRyYW5zbGF0aW9uQnlDdWx0dXJlKGl0ZW06IEl0ZW1Mb2NhbGl6YXRpb24sIGN1bHR1cmU6IHN0cmluZyk6IFNwZWNpYWxpemVkTG9jYWxpemF0aW9uIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udHJhbnNsYXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0cmwgPSBpdGVtLnRyYW5zbGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRybC5jdWx0dXJlID09IGN1bHR1cmUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn0iXX0=
91
+ type: Injectable,
92
+ args: [{ providedIn: 'root' }]
93
+ }], ctorParameters: function () { return [{ type: i1.LocalePersistor }, { type: undefined, decorators: [{
94
+ type: Inject,
95
+ args: [LOC_LOCALE]
96
+ }] }]; } });
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvY29yZS9sb2NhbGl6YXRpb24uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFFdkM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQWlCekI7O09BRUc7SUFDSCxZQUFtQixlQUFnQyxFQUFzQixhQUFxQjtRQUEzRSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFsQm5EOztXQUVHO1FBQ0ksYUFBUSxHQUF1QyxFQUFFLENBQUM7UUFPekQ7O1dBRUc7UUFDSSxXQUFNLEdBQTBCLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2hFLG9IQUFvSDtRQUNwSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxHQUFHLGFBQWEsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDL0M7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLDhCQUE4QixFQUFFLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUs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bmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBJdGVtTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9JdGVtTG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblBlcnNpc3RvciB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi5wZXJzaXN0b3JcIjtcclxuaW1wb3J0IHsgQmFzZUxvY2FsaXphdGlvblRva2VucyB9IGZyb20gXCIuLi9tb2RlbHMvQmFzZUxvY2FsaXphdGlvblRva2Vuc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGVQZXJzaXN0b3IgfSBmcm9tIFwiLi4vbG9jYWxlLXBlcnNpc3Rvci9Mb2NhbGVQZXJzaXN0b3JcIjtcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTE9DX0xPQ0FMRSB9IGZyb20gXCIuLi90b2tlbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2Ugc2luZ2xldG9uIGNoZSBjb250aWVuZSBsZSB0cmFkdXppb25pIGRpIGJhc2UgKHBlciBldml0YXJlIGRpIHJpcGV0ZXJsZSBpbiBvZ2dpIGNsYXNzZSBkaSB0cmFkdXppb25lKSBlIGxlIGZ1bnppb25pIGJhc2UgcGVyIFxyXG4gKiBpbnNlcmlyZSBlIGxlZ2dlcmUgdHJhZHV6aW9uaSBpbi9kYSB1bmEgY2FjaGVcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlTG9jYWxpemF0aW9uIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGRpIHR1dHRlIGxlIGxvY2FsaXp6YXppb25pIGRpIGJhc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIExvY0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJzaXN0b3IgZGVsbGUgbG9jYWxpenphemlvbmkgcmVsYXRpdm8gYSBxdWVzdGEgY2xhc3NlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBQZXJzaXN0b3I6IExvY2FsaXphdGlvblBlcnNpc3RvcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvY2FsZSBkaSByaWZlcmltZW50byBwZXIgdHV0dGUgbGUgdHJhZHV6aW9uaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgTG9jYWxlOiBSZXBsYXlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmUuIERhIHF1aSB1dGlsaXp6YW5kbyBpbCBtZXRvZG8gc3RhdGljbyAqKkJhc2VMb2NhbGl6YXRpb24uc2V0Kiogc2kgdmEgYSBwb3BvbGFyZSBsYSBjYWNoZSBkZWxsZSB0cmFkdXppb25pICoqQmFzZVRyYW5zbGF0aW9ucyoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBMb2NhbGVQZXJzaXN0b3I6IExvY2FsZVBlcnNpc3RvciwgQEluamVjdChMT0NfTE9DQUxFKSBkZWZhdWx0TG9jYWxlOiBzdHJpbmcpIHtcclxuXHJcbiAgICAgICAgLy8gUmVjdXBlcm8gaWwgbG9jYWxlIGFsbGEgcGFydGVuemEgZGVsIEJhc2VMb2NhbGl6YXRpb24gaW4gbW9kbywgc3Blcm8gZGkgZGFyZSB0ZW1wbyBhbGwnYXBwbGljYXppb25lIGRpIHRpcmFybG8gc3VcclxuICAgICAgICB0aGlzLkxvY2FsZVBlcnNpc3Rvci5yZWNvdmVyKCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoYXN5bmMgbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbCkge1xyXG4gICAgICAgICAgICAgICAgbCA9IGRlZmF1bHRMb2NhbGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxvY2FsZVBlcnNpc3Rvci5wZXJzaXN0KGRlZmF1bHRMb2NhbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuTG9jYWxlLm5leHQobClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3IgPSBuZXcgTG9jYWxpemF0aW9uUGVyc2lzdG9yKHRoaXMuTG9jQ2FjaGUpOyBcclxuXHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiUmVtb3ZlXCIsIFtcIkVsaW1pbmFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlBhZ2luZ1wiLCBbXCJQYWdpbmF6aW9uZVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiWWVzXCIsIFtcIlNpXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJOb1wiLCBbXCJOb1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiWUVTXCIsIFtcIlNJJ1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiTk9cIiwgW1wiTk9cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkZvdW5kIG9iamVjdHNcIiwgW1wiUmlzdWx0YXRpIHRyb3ZhdGlcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkxvYWRpbmcgZGF0YS4uLlwiLCBbXCJDYXJpY28gaSBkYXRpLi4uXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJFcnJvciBkdXJpbmcgc2F2ZSBvcGVyYXRpb25zXCIsIFtcIkVycm9yaSBkdXJhbnRlIGlsIHNhbHZhdGFnZ2lvXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJFcnJvclwiLCBbXCJFcnJvcmVcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIldhcm5pbmdcIiwgW1wiQXZ2aXNvXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJJbmZvcm1hdGlvblwiLCBbXCJJbmZvcm1hemlvbmVcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlNhdmVcIiwgW1wiU2FsdmFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkJhY2tcIiwgW1wiSW5kaWV0cm9cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkZyb21cIiwgW1wiRGFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlRvXCIsIFtcIkFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlZpZXcgQ2hhcnRcIiwgW1wiVmVkaSBHcmFmaWNvXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJWaWV3IFRhYmxlXCIsIFtcIlZlZGkgVGFiZWxsYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiTm90ZXNcIiwgW1wiTm90ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiRWRpdCBOb3Rlc1wiLCBbXCJNb2RpZmljYSBOb3RlXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJDYW5jZWxcIiwgW1wiQW5udWxsYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiQ29uZmlybVwiLCBbXCJDb25mZXJtYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiVmlld1wiLCBbXCJWaXN1YWxpenphXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJDbG9zZVwiLCBbXCJDaGl1ZGlcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlNlbGVjdFwiLCBbXCJTZWxlemlvbmFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIk1ldGVyIFJlYWRpbmcgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHlcIiwgW1wiTGV0dHVyYSByZWdpc3RyYXRhIGNvcnJldHRhbWVudGVcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlZhbGlkYXRpb24gZXJyb3JzIGR1cmluZyBzYXZlIG9wZXJhdGlvbnNcIiwgW1wiRXJyb3JpIGRpIHZhbGlkYXppb25lIGR1cmFudGUgaWwgc2FsdmF0YWdnaW9cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkNhbid0IHJlZ2lzdGVyIHJlYWRpbmdcIiwgW1wiSW1wb3NzaWJpbGUgcmVnaXN0cmFyZSBsYSBsZXR0dXJhXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJFbGVjdHJpY2l0eVwiLCBbXCJFbGV0dHJpY2l0YVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiR2FzXCIsIFtcIkdhc1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiV2F0ZXJcIiwgW1wiQWNxdWFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkRlbGV0ZVwiLCBbXCJFbGltaW5hXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJUaGlzIG9wZXJhdGlvbiBjYW5ub3QgYmUgcmV2ZXJ0ZWRcIiwgW1wiUXVlc3RhIG9wZXJhemlvbmUgbm9uIHB1bycgZXNzZXJlIGFubnVsbGF0YVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiSGlkZVwiLCBbXCJOYXNjb25kaVwiXSk7XHJcblxyXG4gICAgICAgIC8vIEhlbHBlciB2YWxpZGF6aW9uZVxyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlJlcXVpcmVkIGZpZWxkXCIsIFtcIkNhbXBvIHJpY2hpZXN0b1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiV3JvbmcgZmllbGQgZm9ybWF0XCIsIFtcIkZvcm1hdG8gY2FtcG8gZXJyYXRvXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJXcm9uZyBmaWVsZCBmb3JtYXQgb3IgZmllbGQgbWlzc2luZ1wiLCBbXCJGb3JtYXRvIGNhbXBvIGVycmF0byBvIGNhbXBvIG1hbmNhbnRlXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJZb3UgZG9uJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdmlldyB0aGlzIHBhZ2UuIFRoZSBuYXZpZ2F0aW9uIGhhcyBiZWVuIGJsb2NrZWRcIiwgW1wiTm9uIHNpIGhhbm5vIHByaXZpbGVnaSBhIHN1ZmZpY2llbnphIHBlciBhY2NlZGVyZSBhIHF1ZXN0YSBwYWdpbmEuIExhIG5hdmlnYXppb25lIGUnIHN0YXRhIGJsb2NjYXRhXCJdKTtcclxuXHJcbiAgICAgICAgLy8gSW5mb3JtYXppb25pIHN1bGxlIGRhdGVcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldERhdGVNb250aFBvc2l0aW9uLCBcIjBcIiwgW1wiMVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXREaXNwbGF5RGF0ZU1vbnRoUG9zaXRpb24sIFwiMVwiLCBbXCIxXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldExvY2FsZSwgXCJlbi1VU1wiLCBbXCJpdC1JVFwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRTbWFsbERhdGVGb3JtYXQsIFwiTU0vREQvWVlZWVwiLCBbXCJERC9NTS9ZWVlZXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldERlZmF1bHREYXRlRm9ybWF0LCBcIk1NL0REL1lZWVlcIiwgW1wiTU0vREQvWVlZWVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0LCBcIkREL01NL1lZWVlcIiwgW1wiREQvTU0vWVlZWVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRGdWxsRGF0ZUZvcm1hdCwgXCJNTS9ERC9ZWVlZIEhIOm1tOnNzXCIsIFtcIkREL01NL1lZWVkgSEg6bW06c3NcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldFRva2VuKFwiZW4tPml0XCIsIEJhc2VMb2NhbGl6YXRpb25Ub2tlbnMuZ2V0RnVsbERhdGVEaXNwbGF5Rm9ybWF0LCBcIkREL01NL1lZWVkgSEg6bW06c3NcIiwgW1wiREQvTU0vWVlZWSBISDptbTpzc1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRGdWxsRGF0ZUZvcm1hdE5vU2Vjb25kcywgXCJNTS9ERC9ZWVlZIEhIOm1tXCIsIFtcIkREL01NL1lZWVkgSEg6bW1cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldFRva2VuKFwiZW4tPml0XCIsIEJhc2VMb2NhbGl6YXRpb25Ub2tlbnMuZ2V0RnVsbERhdGVEaXNwbGF5Rm9ybWF0Tm9TZWNvbmRzLCBcIkREL01NL1lZWVkgSEg6bW1cIiwgW1wiREQvTU0vWVlZWSBISDptbVwiXSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,103 @@
1
+ import { ItemLocalization } from "../models/ItemLocalization";
2
+ import { LocaleDefinitions } from "../models/LocaleDefinitions";
3
+ import { SpecializedLocalization } from "../models/SpecializedLocalization";
4
+ export class LocalizationPersistor {
5
+ constructor(LocCache = null) {
6
+ this.LocCache = LocCache;
7
+ }
8
+ /**
9
+ * Imposta la localizzazione di un token all'interno della cache scelta
10
+ *
11
+ * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
12
+ * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
13
+ * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio "en->it,jp,ecc"
14
+ * @param {string} token Nome del token
15
+ * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
16
+ * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
17
+ */
18
+ setToken(direction, token, left, right) {
19
+ let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
20
+ var parsingRes = parsingRegex.exec(direction);
21
+ let from = parsingRes[1];
22
+ let to = parsingRes[2].replace(/\s/g, '').split(',');
23
+ let localeFrom = LocaleDefinitions.getByAlias(from);
24
+ this._set(token, localeFrom.id, left, true);
25
+ to.forEach((t, index) => {
26
+ let localeTo = LocaleDefinitions.getByAlias(t);
27
+ this._set(token, localeTo.id, right[index], true);
28
+ });
29
+ }
30
+ /**
31
+ * Imposta la localizzazione di una frase all'interno della cache scelta
32
+ *
33
+ * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
34
+ * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
35
+ * è presente l'unica traduzione in italiano, per definire più traduzioni sul lato destro della freccia bisogna concatenarle con la virgola, ad esempio "en->it,jp,ecc"
36
+ * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
37
+ * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
38
+ */
39
+ set(direction, left, right) {
40
+ let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
41
+ var parsingRes = parsingRegex.exec(direction);
42
+ let from = parsingRes[1];
43
+ let to = parsingRes[2].replace(/\s/g, '').split(',');
44
+ let localeFrom = LocaleDefinitions.getByAlias(from);
45
+ this._set(left, localeFrom.id, left);
46
+ to.forEach((t, index) => {
47
+ let localeTo = LocaleDefinitions.getByAlias(t);
48
+ this._set(left, localeTo.id, right[index]);
49
+ });
50
+ }
51
+ /**
52
+ * Imposta all'interno della cache specificata un'unica traduzione partendo da un testo di base
53
+ *
54
+ * @param {string} text Testo da tradurre
55
+ * @param {string} culture Lingua per cui inserire la traduzione
56
+ * @param {string} translation Traduzione del **text** nella lingua specificata da **culture**
57
+ * @param {boolean} token Indica se il **text** è un token o è una frase normale
58
+ */
59
+ _set(text, culture, translation, token) {
60
+ let item = this.get(text, token);
61
+ if (!item) {
62
+ this.LocCache[text] = new ItemLocalization(token, text, [new SpecializedLocalization(culture, translation)]);
63
+ return;
64
+ }
65
+ var trs = this.translationByCulture(item, culture);
66
+ if (trs) {
67
+ console.warn("Localization already loaded for sentence '" + text + "' and culture " + culture);
68
+ return;
69
+ }
70
+ item.translations.push(new SpecializedLocalization(culture, translation));
71
+ }
72
+ /**
73
+ * Partendo da una cache di localizzazione, dato un testo che può essere o meno un token, cerca quell'elemento all'interno della cache
74
+ *
75
+ * @param {string} text Testo da cercare nella **LocCache**
76
+ * @param {boolean} allowtokens Indica se l'elemento cercato può essere un token o se dev'essere per forza una frase (per evitare rari
77
+ * casi di collisione in cui magari un token è uguale a una frase tradotta)
78
+ *
79
+ * @returns {ItemLocalization} Informazioni di localizzazione per il **text** cercato
80
+ */
81
+ get(text, allowtokens) {
82
+ let possibleItem = this.LocCache[text];
83
+ var item = possibleItem && (allowtokens || !possibleItem.token) ? possibleItem : null;
84
+ return item;
85
+ }
86
+ /**
87
+ * Date le informazioni di localizzazione per un testo cerca e restituisce la traduzione per una lingua specifica
88
+ *
89
+ * @param {ItemLocalization} Informazioni di localizzazione
90
+ * @param {string} culture Lingua della traduzione richiesta
91
+ *
92
+ * @returns {SpecializedLocalization} Informazioni di localizzazione specifiche della lingua richiesta
93
+ */
94
+ translationByCulture(item, culture) {
95
+ for (let i = 0; i < item.translations.length; i++) {
96
+ let trl = item.translations[i];
97
+ if (trl.culture == culture)
98
+ return trl;
99
+ }
100
+ return null;
101
+ }
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnBlcnNpc3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xvY2FsaXphdGlvbnMvc3JjL2xpYi9jb3JlL2xvY2FsaXphdGlvbi5wZXJzaXN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsTUFBTSxPQUFPLHFCQUFxQjtJQUU5QixZQUFvQixXQUErQyxJQUFJO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQTJDO0lBQUksQ0FBQztJQUU1RTs7Ozs7Ozs7O09BU0c7SUFDSSxRQUFRLENBQUMsU0FBaUIsRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLEtBQWU7UUFDM0UsSUFBSSxZQUFZLEdBQUcseUNBQXlDLENBQUM7UUFDN0QsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QyxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxFQUFFLEdBQWEsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELElBQUksVUFBVSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU1QyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFF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QUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTztnQkFDdEIsT0FBTyxHQUFHLENBQUM7U0FDbEI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJdGVtTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9JdGVtTG9jYWxpemF0aW9uXCI7XHJcbmltcG9ydCB7IExvY2FsZURlZmluaXRpb25zIH0gZnJvbSBcIi4uL21vZGVscy9Mb2NhbGVEZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBTcGVjaWFsaXplZExvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvU3BlY2lhbGl6ZWRMb2NhbGl6YXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25QZXJzaXN0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgTG9jQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH0gPSBudWxsKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgbGEgbG9jYWxpenphemlvbmUgZGkgdW4gdG9rZW4gYWxsJ2ludGVybm8gZGVsbGEgY2FjaGUgc2NlbHRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24gRGlyZXppb25lIGRlbGxhIHRyYWR1emlvbmUsIHJhcHByZXNlbnRhIGxhIGxpbmd1YSBiYXNlIGluIGN1aSBhc3BldHRhcnNpIGlsIHRlc3RvIGUgbGUgdmFyaWUgbGluZ3VlIGluIGN1aSB2aWVuZSB0cmFkb3R0YS5cclxuICAgICAqIEFkIGVzZW1waW8sIFwiZW4tPml0XCIgaW5kaWNhIGNoZSBpbCBwYXJhbWV0cm8gKipsZWZ0Kiogw6ggdmFsaWRvIHBlciBsZSBsb2NhbGl6emF6aW9uaSBpbiBpbmdsZXNlLCBtZW50cmUgbmVsbCdlbGVtZW50byAwIGRlbCBwYXJhbWV0cm8gKipyaWdodCoqIFxyXG4gICAgICogw6ggcHJlc2VudGUgbCd1bmljYSB0cmFkdXppb25lIGluIGl0YWxpYW5vLCBwZXIgZGVmaW5pcmUgcGnDuSB0cmFkdXppb25pIHN1bCBsYXRvIGRlc3RybyBkZWxsYSBmcmVjY2lhIGJpc29nbmEgY29uY2F0ZW5hcmxlIGNvbiBsYSB2aXJnb2xhLCBhZCBlc2VtcGlvIFwiZW4tPml0LGpwLGVjY1wiXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gTm9tZSBkZWwgdG9rZW5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZWZ0IFZhbG9yZSBkZWwgdG9rZW4gcGVyIGxhIGxpbmd1YSBzcGVjaWZpY2F0YSBuZWwgbGF0byBpbW1lZGlhdGFtZW50ZSBzaW5pc3RybyBhbGxhIGZyZWNjaWEgZGVsIHBhcmFtZXRybyAqKmRpcmVjdGlvbioqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmlnaHQgQXJyYXkgY29uIGkgdmFsb3JpIGZhY2VudGkgcmlmZXJpbWVudG8gYWxsJ04tZXNpbWEgbGluZ3VhIGRlbCBsYXRvIGRlc3RybyBkZWwgcGFyYW1ldHJvICoqZGlyZWN0aW9uKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFRva2VuKGRpcmVjdGlvbjogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGxldCBwYXJzaW5nUmVnZXggPSAvKFthLXpBLVpdKylbXFxzXSotPltcXHNdKihbYS16QS1aLFxcc10rKSsvZztcclxuICAgICAgICB2YXIgcGFyc2luZ1JlcyA9IHBhcnNpbmdSZWdleC5leGVjKGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIGxldCBmcm9tID0gcGFyc2luZ1Jlc1sxXTtcclxuICAgICAgICBsZXQgdG86IHN0cmluZ1tdID0gcGFyc2luZ1Jlc1syXS5yZXBsYWNlKC9cXHMvZywgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgbGV0IGxvY2FsZUZyb20gPSBMb2NhbGVEZWZpbml0aW9ucy5nZXRCeUFsaWFzKGZyb20pO1xyXG4gICAgICAgIHRoaXMuX3NldCh0b2tlbiwgbG9jYWxlRnJvbS5pZCwgbGVmdCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRvLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhbGVUbyA9IExvY2FsZURlZmluaXRpb25zLmdldEJ5QWxpYXModCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldCh0b2tlbiwgbG9jYWxlVG8uaWQsIHJpZ2h0W2luZGV4XSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGxhIGxvY2FsaXp6YXppb25lIGRpIHVuYSBmcmFzZSBhbGwnaW50ZXJubyBkZWxsYSBjYWNoZSBzY2VsdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBEaXJlemlvbmUgZGVsbGEgdHJhZHV6aW9uZSwgcmFwcHJlc2VudGEgbGEgbGluZ3VhIGJhc2UgaW4gY3VpIGFzcGV0dGFyc2kgaWwgdGVzdG8gZSBsZSB2YXJpZSBsaW5ndWUgaW4gY3VpIHZpZW5lIHRyYWRvdHRhLlxyXG4gICAgICogQWQgZXNlbXBpbywgXCJlbi0+aXRcIiBpbmRpY2EgY2hlIGlsIHBhcmFtZXRybyAqKmxlZnQqKiDDqCB2YWxpZG8gcGVyIGxlIGxvY2FsaXp6YXppb25pIGluIGluZ2xlc2UsIG1lbnRyZSBuZWxsJ2VsZW1lbnRvIDAgZGVsIHBhcmFtZXRybyAqKnJpZ2h0KiogXHJcbiAgICAgKiDDqCBwcmVzZW50ZSBsJ3VuaWNhIHRyYWR1emlvbmUgaW4gaXRhbGlhbm8sIHBlciBkZWZpbmlyZSBwacO5IHRyYWR1emlvbmkgc3VsIGxhdG8gZGVzdHJvIGRlbGxhIGZyZWNjaWEgYmlzb2duYSBjb25jYXRlbmFybGUgY29uIGxhIHZpcmdvbGEsIGFkIGVzZW1waW8gXCJlbi0+aXQsanAsZWNjXCJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZWZ0IFZhbG9yZSBkZWxsYSBmcmFzZSBwZXIgbGEgbGluZ3VhIHNwZWNpZmljYXRhIG5lbCBsYXRvIGltbWVkaWF0YW1lbnRlIHNpbmlzdHJvIGFsbGEgZnJlY2NpYSBkZWwgcGFyYW1ldHJvICoqZGlyZWN0aW9uKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByaWdodCBBcnJheSBjb24gaSB2YWxvcmkgZmFjZW50aSByaWZlcmltZW50byBhbGwnTi1lc2ltYSBsaW5ndWEgZGVsIGxhdG8gZGVzdHJvIGRlbCBwYXJhbWV0cm8gKipkaXJlY3Rpb24qKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0KGRpcmVjdGlvbjogc3RyaW5nLCBsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGxldCBwYXJzaW5nUmVnZXggPSAvKFthLXpBLVpdKylbXFxzXSotPltcXHNdKihbYS16QS1aLFxcc10rKSsvZztcclxuICAgICAgICB2YXIgcGFyc2luZ1JlcyA9IHBhcnNpbmdSZWdleC5leGVjKGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIGxldCBmcm9tID0gcGFyc2luZ1Jlc1sxXTtcclxuICAgICAgICBsZXQgdG86IHN0cmluZ1tdID0gcGFyc2luZ1Jlc1syXS5yZXBsYWNlKC9cXHMvZywgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgbGV0IGxvY2FsZUZyb20gPSBMb2NhbGVEZWZpbml0aW9ucy5nZXRCeUFsaWFzKGZyb20pO1xyXG4gICAgICAgIHRoaXMuX3NldChsZWZ0LCBsb2NhbGVGcm9tLmlkLCBsZWZ0KTtcclxuXHJcbiAgICAgICAgdG8uZm9yRWFjaCgodCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2FsZVRvID0gTG9jYWxlRGVmaW5pdGlvbnMuZ2V0QnlBbGlhcyh0KTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0KGxlZnQsIGxvY2FsZVRvLmlkLCByaWdodFtpbmRleF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wb3N0YSBhbGwnaW50ZXJubyBkZWxsYSBjYWNoZSBzcGVjaWZpY2F0YSB1bid1bmljYSB0cmFkdXppb25lIHBhcnRlbmRvIGRhIHVuIHRlc3RvIGRpIGJhc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGVzdG8gZGEgdHJhZHVycmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjdWx0dXJlIExpbmd1YSBwZXIgY3VpIGluc2VyaXJlIGxhIHRyYWR1emlvbmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2xhdGlvbiBUcmFkdXppb25lIGRlbCAqKnRleHQqKiBuZWxsYSBsaW5ndWEgc3BlY2lmaWNhdGEgZGEgKipjdWx0dXJlKipcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdG9rZW4gSW5kaWNhIHNlIGlsICoqdGV4dCoqIMOoIHVuIHRva2VuIG8gw6ggdW5hIGZyYXNlIG5vcm1hbGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc2V0KHRleHQ6IHN0cmluZywgY3VsdHVyZTogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nLCB0b2tlbj86IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0KHRleHQsIHRva2VuKTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5Mb2NDYWNoZVt0ZXh0XSA9IG5ldyBJdGVtTG9jYWxpemF0aW9uKHRva2VuLCB0ZXh0LCBbbmV3IFNwZWNpYWxpemVkTG9jYWxpemF0aW9uKGN1bHR1cmUsIHRyYW5zbGF0aW9uKV0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdHJzID0gdGhpcy50cmFuc2xhdGlvbkJ5Q3VsdHVyZShpdGVtLCBjdWx0dXJlKTtcclxuICAgICAgICBpZiAodHJzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkxvY2FsaXphdGlvbiBhbHJlYWR5IGxvYWRlZCBmb3Igc2VudGVuY2UgJ1wiICsgdGV4dCArIFwiJyBhbmQgY3VsdHVyZSBcIiArIGN1bHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtLnRyYW5zbGF0aW9ucy5wdXNoKG5ldyBTcGVjaWFsaXplZExvY2FsaXphdGlvbihjdWx0dXJlLCB0cmFuc2xhdGlvbikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGEgdW5hIGNhY2hlIGRpIGxvY2FsaXp6YXppb25lLCBkYXRvIHVuIHRlc3RvIGNoZSBwdcOyIGVzc2VyZSBvIG1lbm8gdW4gdG9rZW4sIGNlcmNhIHF1ZWxsJ2VsZW1lbnRvIGFsbCdpbnRlcm5vIGRlbGxhIGNhY2hlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIGNlcmNhcmUgbmVsbGEgKipMb2NDYWNoZSoqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93dG9rZW5zIEluZGljYSBzZSBsJ2VsZW1lbnRvIGNlcmNhdG8gcHXDsiBlc3NlcmUgdW4gdG9rZW4gbyBzZSBkZXYnZXNzZXJlIHBlciBmb3J6YSB1bmEgZnJhc2UgKHBlciBldml0YXJlIHJhcmkgXHJcbiAgICAgKiBjYXNpIGRpIGNvbGxpc2lvbmUgaW4gY3VpIG1hZ2FyaSB1biB0b2tlbiDDqCB1Z3VhbGUgYSB1bmEgZnJhc2UgdHJhZG90dGEpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtJdGVtTG9jYWxpemF0aW9ufSBJbmZvcm1hemlvbmkgZGkgbG9jYWxpenphemlvbmUgcGVyIGlsICoqdGV4dCoqIGNlcmNhdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCh0ZXh0OiBzdHJpbmcsIGFsbG93dG9rZW5zOiBib29sZWFuKTogSXRlbUxvY2FsaXphdGlvbiB7XHJcbiAgICAgICAgbGV0IHBvc3NpYmxlSXRlbTogSXRlbUxvY2FsaXphdGlvbiA9IHRoaXMuTG9jQ2FjaGVbdGV4dF07XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBwb3NzaWJsZUl0ZW0gJiYgKGFsbG93dG9rZW5zIHx8ICFwb3NzaWJsZUl0ZW0udG9rZW4pID8gcG9zc2libGVJdGVtIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGUgbGUgaW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lIHBlciB1biB0ZXN0byBjZXJjYSBlIHJlc3RpdHVpc2NlIGxhIHRyYWR1emlvbmUgcGVyIHVuYSBsaW5ndWEgc3BlY2lmaWNhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SXRlbUxvY2FsaXphdGlvbn0gSW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VsdHVyZSBMaW5ndWEgZGVsbGEgdHJhZHV6aW9uZSByaWNoaWVzdGFcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1NwZWNpYWxpemVkTG9jYWxpemF0aW9ufSBJbmZvcm1hemlvbmkgZGkgbG9jYWxpenphemlvbmUgc3BlY2lmaWNoZSBkZWxsYSBsaW5ndWEgcmljaGllc3RhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmFuc2xhdGlvbkJ5Q3VsdHVyZShpdGVtOiBJdGVtTG9jYWxpemF0aW9uLCBjdWx0dXJlOiBzdHJpbmcpOiBTcGVjaWFsaXplZExvY2FsaXphdGlvbiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnRyYW5zbGF0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdHJsID0gaXRlbS50cmFuc2xhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0cmwuY3VsdHVyZSA9PSBjdWx0dXJlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,25 @@
1
+ // Angular
2
+ import { Injectable } from "@angular/core";
3
+ // RXJS
4
+ import { of } from "rxjs";
5
+ import { first } from "rxjs/operators";
6
+ import { LocalePersistor } from "./LocalePersistor";
7
+ import * as i0 from "@angular/core";
8
+ export class LocalStorageLocalePersistor extends LocalePersistor {
9
+ /** @ignore Vedi classe base */
10
+ persist(locale) {
11
+ localStorage.setItem(this.LOCALE, locale);
12
+ return of(true).pipe(first());
13
+ }
14
+ /** @ignore Vedi classe base */
15
+ recover() {
16
+ var ret = localStorage.getItem(this.LOCALE);
17
+ return of(ret).pipe(first());
18
+ }
19
+ }
20
+ LocalStorageLocalePersistor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocalStorageLocalePersistor, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
21
+ LocalStorageLocalePersistor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocalStorageLocalePersistor });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocalStorageLocalePersistor, decorators: [{
23
+ type: Injectable
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvbG9jYWxlLXBlcnNpc3Rvci9Mb2NhbFN0b3JhZ2VDYWNoZVBlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUdwRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsZUFBZTtJQUU1RCwrQkFBK0I7SUFDeEIsT0FBTyxDQUFDLE1BQWM7UUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQkFBK0I7SUFDeEIsT0FBTztRQUNWLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O3dIQVpRLDJCQUEyQjs0SEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gUlhKU1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IExvY2FsZVBlcnNpc3RvciB9IGZyb20gXCIuL0xvY2FsZVBlcnNpc3RvclwiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlTG9jYWxlUGVyc2lzdG9yIGV4dGVuZHMgTG9jYWxlUGVyc2lzdG9yIHtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBWZWRpIGNsYXNzZSBiYXNlICovXHJcbiAgICBwdWJsaWMgcGVyc2lzdChsb2NhbGU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxFLCBsb2NhbGUpO1xyXG4gICAgICAgIHJldHVybiBvZih0cnVlKS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyByZWNvdmVyKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHJldCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxFKTtcclxuICAgICAgICByZXR1cm4gb2YocmV0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,8 @@
1
+ /** Classe astratta che rappresenta lo stato di persistenza fra la libreria e uno storage */
2
+ export class LocalePersistor {
3
+ constructor() {
4
+ /** Chiave su cui salvare il locale */
5
+ this.LOCALE = "LOCALE";
6
+ }
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxlUGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbG9jYWxpemF0aW9ucy9zcmMvbGliL2xvY2FsZS1wZXJzaXN0b3IvTG9jYWxlUGVyc2lzdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLDRGQUE0RjtBQUM1RixNQUFNLE9BQWdCLGVBQWU7SUFBckM7UUFFSSxzQ0FBc0M7UUFDNUIsV0FBTSxHQUFXLFFBQVEsQ0FBQztJQWV4QyxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKiBDbGFzc2UgYXN0cmF0dGEgY2hlIHJhcHByZXNlbnRhIGxvIHN0YXRvIGRpIHBlcnNpc3RlbnphIGZyYSBsYSBsaWJyZXJpYSBlIHVubyBzdG9yYWdlICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMb2NhbGVQZXJzaXN0b3Ige1xyXG5cclxuICAgIC8qKiBDaGlhdmUgc3UgY3VpIHNhbHZhcmUgaWwgbG9jYWxlICovXHJcbiAgICBwcm90ZWN0ZWQgTE9DQUxFOiBzdHJpbmcgPSBcIkxPQ0FMRVwiO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2FsdmEgaWwgTG9jYWxlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGUgTG9jYWxlIGRhIHNhbHZhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IHBlcnNpc3QobG9jYWxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVjdXBlcmEgaWwgTG9jYWxlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHN0cmluZz59IFZhbG9yZSBzYWx2YXRvIHBlciBpbCBsb2NhbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFic3RyYWN0IHJlY292ZXIoKTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG59Il19
@@ -1,9 +1,15 @@
1
+ // Angular
1
2
  import { NgModule } from '@angular/core';
2
- import { LOC_LOCALE } from './tokens';
3
- import { LocalizationService } from './localizations.service';
3
+ // Pipe
4
4
  import { LocDatePipe } from './pipes/loc_date.pipe';
5
5
  import { LocalizePipe } from './pipes/localize.pipe';
6
+ // Servizi
7
+ import { LocalizationService } from './localizations.service';
6
8
  import { BaseLocalization } from './core/localization.base';
9
+ import { LocalePersistor } from './locale-persistor/LocalePersistor';
10
+ import { LocalStorageLocalePersistor } from './locale-persistor/LocalStorageCachePersistor';
11
+ import { LocalizationMissingPolicy } from './models/LocalizationMissingPolicy';
12
+ import { LOC_LOCALE, LOC_MISSING_POLICY } from './tokens';
7
13
  import * as i0 from "@angular/core";
8
14
  export class LocalizationModule {
9
15
  static forRoot(config) {
@@ -12,7 +18,9 @@ export class LocalizationModule {
12
18
  providers: [
13
19
  LocalizationService,
14
20
  BaseLocalization,
15
- { provide: LOC_LOCALE, useValue: config?.locale || 'it-IT' }
21
+ { provide: LOC_LOCALE, useValue: config?.defaultLocale || 'it-IT' },
22
+ { provide: LOC_MISSING_POLICY, useValue: config?.localizationMissingPolicy || LocalizationMissingPolicy.PrintEmpty },
23
+ { provide: LocalePersistor, useClass: config?.localePersistor || LocalStorageLocalePersistor },
16
24
  ]
17
25
  };
18
26
  }
@@ -27,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
27
35
  exports: [LocalizePipe, LocDatePipe]
28
36
  }]
29
37
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvbG9jYWxpemF0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQU01RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBaUM7UUFDOUMsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFO2dCQUNULG1CQUFtQjtnQkFDbkIsZ0JBQWdCO2dCQUNoQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFO2FBQzdEO1NBQ0YsQ0FBQztJQUNKLENBQUM7OytHQVZVLGtCQUFrQjtnSEFBbEIsa0JBQWtCLGlCQUhkLFlBQVksRUFBRSxXQUFXLGFBQzlCLFlBQVksRUFBRSxXQUFXO2dIQUV4QixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFKOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO29CQUN6QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO2lCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExPQ19MT0NBTEUgfSBmcm9tICcuL3Rva2Vucyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2xvY2FsaXphdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbk1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgTG9jRGF0ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2xvY19kYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBCYXNlTG9jYWxpemF0aW9uIH0gZnJvbSAnLi9jb3JlL2xvY2FsaXphdGlvbi5iYXNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbTG9jYWxpemVQaXBlLCBMb2NEYXRlUGlwZV0sXHJcbiAgZXhwb3J0czogW0xvY2FsaXplUGlwZSwgTG9jRGF0ZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25Nb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IExvY2FsaXphdGlvbk1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9jYWxpemF0aW9uTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTG9jYWxpemF0aW9uTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEJhc2VMb2NhbGl6YXRpb24sXHJcbiAgICAgICAgeyBwcm92aWRlOiBMT0NfTE9DQUxFLCB1c2VWYWx1ZTogY29uZmlnPy5sb2NhbGUgfHwgJ2l0LUlUJyB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59Il19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvbG9jYWxpemF0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBRTlELE9BQU87QUFDUCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELFVBQVU7QUFDVixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFJNUYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFNMUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWlDO1FBQzlDLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRTtnQkFDVCxtQkFBbUI7Z0JBQ25CLGdCQUFnQjtnQkFDaEIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsYUFBYSxJQUFJLE9BQU8sRUFBRTtnQkFDbkUsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLEVBQUM7Z0JBQ25ILEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGVBQWUsSUFBSSwyQkFBMkIsRUFBRTthQUMvRjtTQUNGLENBQUM7SUFDSixDQUFDOzsrR0FaVSxrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFIZCxZQUFZLEVBQUUsV0FBVyxhQUM5QixZQUFZLEVBQUUsV0FBVztnSEFFeEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBSjlCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztvQkFDekMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztpQkFDckMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vLyBQaXBlXHJcbmltcG9ydCB7IExvY0RhdGVQaXBlIH0gZnJvbSAnLi9waXBlcy9sb2NfZGF0ZS5waXBlJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuXHJcbi8vIFNlcnZpemlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4vbG9jYWxpemF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUxvY2FsaXphdGlvbiB9IGZyb20gJy4vY29yZS9sb2NhbGl6YXRpb24uYmFzZSc7XHJcbmltcG9ydCB7IExvY2FsZVBlcnNpc3RvciB9IGZyb20gJy4vbG9jYWxlLXBlcnNpc3Rvci9Mb2NhbGVQZXJzaXN0b3InO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VMb2NhbGVQZXJzaXN0b3IgfSBmcm9tICcuL2xvY2FsZS1wZXJzaXN0b3IvTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3InO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Nb2R1bGVDb25maWcgfSBmcm9tICcuL21vZGVscy9Mb2NhbGl6YXRpb25Nb2R1bGVDb25maWcnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25NaXNzaW5nUG9saWN5IH0gZnJvbSAnLi9tb2RlbHMvTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeSc7XHJcbmltcG9ydCB7IExPQ19MT0NBTEUsIExPQ19NSVNTSU5HX1BPTElDWSB9IGZyb20gJy4vdG9rZW5zJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbTG9jYWxpemVQaXBlLCBMb2NEYXRlUGlwZV0sXHJcbiAgZXhwb3J0czogW0xvY2FsaXplUGlwZSwgTG9jRGF0ZVBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25Nb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IExvY2FsaXphdGlvbk1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9jYWxpemF0aW9uTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTG9jYWxpemF0aW9uTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEJhc2VMb2NhbGl6YXRpb24sXHJcbiAgICAgICAgeyBwcm92aWRlOiBMT0NfTE9DQUxFLCB1c2VWYWx1ZTogY29uZmlnPy5kZWZhdWx0TG9jYWxlIHx8ICdpdC1JVCcgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IExPQ19NSVNTSU5HX1BPTElDWSwgdXNlVmFsdWU6IGNvbmZpZz8ubG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeSB8fCBMb2NhbGl6YXRpb25NaXNzaW5nUG9saWN5LlByaW50RW1wdHl9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxlUGVyc2lzdG9yLCB1c2VDbGFzczogY29uZmlnPy5sb2NhbGVQZXJzaXN0b3IgfHwgTG9jYWxTdG9yYWdlTG9jYWxlUGVyc2lzdG9yIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59Il19