@esfaenza/localizations 11.2.9 → 11.2.11

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 (48) hide show
  1. package/bundles/esfaenza-localizations.umd.js +622 -182
  2. package/bundles/esfaenza-localizations.umd.js.map +1 -1
  3. package/bundles/esfaenza-localizations.umd.min.js +15 -1
  4. package/bundles/esfaenza-localizations.umd.min.js.map +1 -1
  5. package/esfaenza-localizations.d.ts +2 -1
  6. package/esfaenza-localizations.metadata.json +1 -1
  7. package/esm2015/esfaenza-localizations.js +3 -2
  8. package/esm2015/lib/core/localization.base.js +82 -158
  9. package/esm2015/lib/core/localization.persistor.js +103 -0
  10. package/esm2015/lib/locale-persistor/LocalStorageCachePersistor.js +22 -0
  11. package/esm2015/lib/locale-persistor/LocalePersistor.js +8 -0
  12. package/esm2015/lib/localizations.module.js +12 -4
  13. package/esm2015/lib/localizations.service.js +54 -34
  14. package/esm2015/lib/models/BaseLocalizationTokens.js +14 -0
  15. package/esm2015/lib/models/ItemLocalization.js +18 -0
  16. package/esm2015/lib/models/LocaleDefinitions.js +32 -0
  17. package/esm2015/lib/models/LocaleObject.js +18 -0
  18. package/esm2015/lib/models/LocalizationMissingPolicy.js +11 -0
  19. package/esm2015/lib/models/LocalizationModuleConfig.js +6 -0
  20. package/esm2015/lib/models/SpecializedLocalization.js +16 -0
  21. package/esm2015/lib/tokens.js +4 -4
  22. package/esm2015/public-api.js +5 -2
  23. package/fesm2015/esfaenza-localizations.js +260 -172
  24. package/fesm2015/esfaenza-localizations.js.map +1 -1
  25. package/lib/core/localization.base.d.ts +12 -59
  26. package/lib/core/localization.persistor.d.ts +57 -0
  27. package/lib/locale-persistor/LocalStorageCachePersistor.d.ts +8 -0
  28. package/lib/locale-persistor/LocalePersistor.d.ts +18 -0
  29. package/lib/localizations.module.d.ts +1 -1
  30. package/lib/localizations.service.d.ts +11 -17
  31. package/lib/models/BaseLocalizationTokens.d.ts +12 -0
  32. package/lib/models/LocalizationMissingPolicy.d.ts +9 -0
  33. package/lib/models/LocalizationModuleConfig.d.ts +17 -0
  34. package/lib/tokens.d.ts +4 -3
  35. package/package.json +1 -1
  36. package/public-api.d.ts +4 -1
  37. package/esm2015/lib/models/classes/ItemLocalization.js +0 -18
  38. package/esm2015/lib/models/classes/LocaleDefinitions.js +0 -32
  39. package/esm2015/lib/models/classes/LocaleObject.js +0 -18
  40. package/esm2015/lib/models/classes/LocalizationModuleConfig.js +0 -6
  41. package/esm2015/lib/models/classes/SpecializedLocalization.js +0 -16
  42. package/esm2015/lib/models/index.js +0 -6
  43. package/lib/models/classes/LocalizationModuleConfig.d.ts +0 -9
  44. package/lib/models/index.d.ts +0 -5
  45. /package/lib/models/{classes/ItemLocalization.d.ts → ItemLocalization.d.ts} +0 -0
  46. /package/lib/models/{classes/LocaleDefinitions.d.ts → LocaleDefinitions.d.ts} +0 -0
  47. /package/lib/models/{classes/LocaleObject.d.ts → LocaleObject.d.ts} +0 -0
  48. /package/lib/models/{classes/SpecializedLocalization.d.ts → SpecializedLocalization.d.ts} +0 -0
@@ -2,4 +2,5 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './public-api';
5
- export { BaseLocalization as ɵa } from './lib/core/localization.base';
5
+ export { LocalStorageLocalePersistor as ɵb } from './lib/locale-persistor/LocalStorageCachePersistor';
6
+ export { LocalePersistor as ɵa } from './lib/locale-persistor/LocalePersistor';
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"LocalizationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"LocalizePipe"},{"__symbolic":"reference","name":"LocDatePipe"}],"exports":[{"__symbolic":"reference","name":"LocalizePipe"},{"__symbolic":"reference","name":"LocDatePipe"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"LocalizationModule"},"providers":[{"__symbolic":"reference","name":"LocalizationService"},{"__symbolic":"reference","name":"ɵa"},{"provide":{"__symbolic":"reference","name":"LOC_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}}]}}}},"LocalizationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":23,"character":17},"arguments":[{"__symbolic":"reference","name":"LOC_LOCALE"}]}],null],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"ɵa"}]}],"setToken":[{"__symbolic":"method"}],"set":[{"__symbolic":"method"}],"token":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}],"locSeverity":[{"__symbolic":"method"}]}},"LocalizePipe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":7,"character":1},"arguments":[{"name":"localize","pure":true}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"LocalizationService"}]}],"transform":[{"__symbolic":"method"}]}},"LocDatePipe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":9,"character":1},"arguments":[{"name":"loc_date","pure":true}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":15,"character":17}}]],"parameters":[{"__symbolic":"reference","module":"@esfaenza/extensions","name":"DateService","line":15,"character":41}]}],"transform":[{"__symbolic":"method"}]}},"LOC_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":54},"arguments":["LOC_LOCALE"]},"LocalizationModuleConfig":{"__symbolic":"class","members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}]}}},"origins":{"LocalizationModule":"./lib/localizations.module","LocalizationService":"./lib/localizations.service","LocalizePipe":"./lib/pipes/localize.pipe","LocDatePipe":"./lib/pipes/loc_date.pipe","LOC_LOCALE":"./lib/tokens","LocalizationModuleConfig":"./lib/models/classes/LocalizationModuleConfig","ɵa":"./lib/core/localization.base"},"importAs":"@esfaenza/localizations"}
1
+ {"__symbolic":"module","version":4,"metadata":{"BaseLocalization":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":13,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":34,"character":58},"arguments":[{"__symbolic":"reference","name":"LOC_LOCALE"}]}]],"parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"string"}]}]},"statics":{"ɵprov":{}}},"LocalizationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":18,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"LocalizePipe"},{"__symbolic":"reference","name":"LocDatePipe"}],"exports":[{"__symbolic":"reference","name":"LocalizePipe"},{"__symbolic":"reference","name":"LocDatePipe"}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"LocalizationModule"},"providers":[{"__symbolic":"reference","name":"LocalizationService"},{"__symbolic":"reference","name":"BaseLocalization"},{"provide":{"__symbolic":"reference","name":"LOC_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"defaultLocale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"LOC_MISSING_POLICY"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"localizationMissingPolicy"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LocalizationMissingPolicy"},"member":"PrintEmpty"}}},{"provide":{"__symbolic":"reference","name":"ɵa"},"useClass":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"localePersistor"},"right":{"__symbolic":"reference","name":"ɵb"}}}]}}}},"LocalizationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":32,"character":34}]}],"setToken":[{"__symbolic":"method"}],"set":[{"__symbolic":"method"}],"token":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}],"changeLocale":[{"__symbolic":"method"}]}},"LocalizePipe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":7,"character":1},"arguments":[{"name":"localize","pure":true}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"LocalizationService"}]}],"transform":[{"__symbolic":"method"}]}},"LocDatePipe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Pipe","line":9,"character":1},"arguments":[{"name":"loc_date","pure":true}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":15,"character":17}}]],"parameters":[{"__symbolic":"reference","module":"@esfaenza/extensions","name":"DateService","line":15,"character":41}]}],"transform":[{"__symbolic":"method"}]}},"LOC_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":54},"arguments":["LOC_LOCALE"]},"LOC_MISSING_POLICY":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":81},"arguments":["LOC_MISSING_POLICY"]},"LocalizationModuleConfig":{"__symbolic":"class","members":{}},"BaseLocalizationTokens":{"getDateMonthPosition":"getDateMonthPosition","getDisplayDateMonthPosition":"getDisplayDateMonthPosition","getLocale":"getLocale","getSmallDateFormat":"getSmallDateFormat","getDefaultDateFormat":"getDefaultDateFormat","getSmallDateDisplayFormat":"getSmallDateDisplayFormat","getFullDateFormat":"getFullDateFormat","getFullDateDisplayFormat":"getFullDateDisplayFormat","getFullDateFormatNoSeconds":"getFullDateFormatNoSeconds","getFullDateDisplayFormatNoSeconds":"getFullDateDisplayFormatNoSeconds"},"LocalizationMissingPolicy":{"PrintEmpty":0,"PrintSource":1,"ThrowException":2},"ɵa":{"__symbolic":"class","members":{"persist":[{"__symbolic":"method"}],"recover":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"ɵa"},"decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1}}],"members":{"persist":[{"__symbolic":"method"}],"recover":[{"__symbolic":"method"}]}}},"origins":{"BaseLocalization":"./lib/core/localization.base","LocalizationModule":"./lib/localizations.module","LocalizationService":"./lib/localizations.service","LocalizePipe":"./lib/pipes/localize.pipe","LocDatePipe":"./lib/pipes/loc_date.pipe","LOC_LOCALE":"./lib/tokens","LOC_MISSING_POLICY":"./lib/tokens","LocalizationModuleConfig":"./lib/models/LocalizationModuleConfig","BaseLocalizationTokens":"./lib/models/BaseLocalizationTokens","LocalizationMissingPolicy":"./lib/models/LocalizationMissingPolicy","ɵa":"./lib/locale-persistor/LocalePersistor","ɵb":"./lib/locale-persistor/LocalStorageCachePersistor"},"importAs":"@esfaenza/localizations"}
@@ -2,5 +2,6 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './public-api';
5
- export { BaseLocalization as ɵa } from './lib/core/localization.base';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtbG9jYWxpemF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xvY2FsaXphdGlvbnMvc3JjL2VzZmFlbnphLWxvY2FsaXphdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG5cbmV4cG9ydCB7QmFzZUxvY2FsaXphdGlvbiBhcyDJtWF9IGZyb20gJy4vbGliL2NvcmUvbG9jYWxpemF0aW9uLmJhc2UnOyJdfQ==
5
+ export { LocalStorageLocalePersistor as ɵb } from './lib/locale-persistor/LocalStorageCachePersistor';
6
+ export { LocalePersistor as ɵa } from './lib/locale-persistor/LocalePersistor';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNmYWVuemEtbG9jYWxpemF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xvY2FsaXphdGlvbnMvc3JjL2VzZmFlbnphLWxvY2FsaXphdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsMkJBQTJCLElBQUksRUFBRSxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDcEcsT0FBTyxFQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtMb2NhbFN0b3JhZ2VMb2NhbGVQZXJzaXN0b3IgYXMgybVifSBmcm9tICcuL2xpYi9sb2NhbGUtcGVyc2lzdG9yL0xvY2FsU3RvcmFnZUNhY2hlUGVyc2lzdG9yJztcbmV4cG9ydCB7TG9jYWxlUGVyc2lzdG9yIGFzIMm1YX0gZnJvbSAnLi9saWIvbG9jYWxlLXBlcnNpc3Rvci9Mb2NhbGVQZXJzaXN0b3InOyJdfQ==
@@ -1,5 +1,14 @@
1
- import { Injectable } from "@angular/core";
2
- import { ItemLocalization, LocaleDefinitions, SpecializedLocalization } from "../models";
1
+ import { __awaiter } from "tslib";
2
+ import { Inject, Injectable } from "@angular/core";
3
+ import { LocalizationPersistor } from "./localization.persistor";
4
+ import { BaseLocalizationTokens } from "../models/BaseLocalizationTokens";
5
+ import { LocalePersistor } from "../locale-persistor/LocalePersistor";
6
+ import { take } from "rxjs/operators";
7
+ import { ReplaySubject } from "rxjs";
8
+ import { LOC_LOCALE } from "../tokens";
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../locale-persistor/LocalePersistor";
11
+ import * as i2 from "../tokens";
3
12
  /**
4
13
  * Classe singleton che contiene le traduzioni di base (per evitare di ripeterle in oggi classe di traduzione) e le funzioni base per
5
14
  * inserire e leggere traduzioni in/da una cache
@@ -8,168 +17,83 @@ export class BaseLocalization {
8
17
  /**
9
18
  * Costruttore. Da qui utilizzando il metodo statico **BaseLocalization.set** si va a popolare la cache delle traduzioni **BaseTranslations**
10
19
  */
11
- constructor() {
20
+ constructor(LocalePersistor, defaultLocale) {
21
+ this.LocalePersistor = LocalePersistor;
12
22
  /**
13
23
  * Cache di tutte le localizzazioni di base
14
24
  */
15
- this.BaseTranslations = {};
16
- // Odio sprecare caratteri... soprattutto quando rischio che non vengano minificati
17
- let bt = this.BaseTranslations;
18
- let bl = BaseLocalization;
19
- bl.set(bt, "en->it", "Remove", ["Elimina"]);
20
- bl.set(bt, "en->it", "Paging", ["Paginazione"]);
21
- bl.set(bt, "en->it", "Yes", ["Si"]);
22
- bl.set(bt, "en->it", "No", ["No"]);
23
- bl.set(bt, "en->it", "YES", ["SI'"]);
24
- bl.set(bt, "en->it", "NO", ["NO"]);
25
- bl.set(bt, "en->it", "Found objects", ["Risultati trovati"]);
26
- bl.set(bt, "en->it", "Loading data...", ["Carico i dati..."]);
27
- bl.set(bt, "en->it", "Error during save operations", ["Errori durante il salvataggio"]);
28
- bl.set(bt, "en->it", "Error", ["Errore"]);
29
- bl.set(bt, "en->it", "Warning", ["Avviso"]);
30
- bl.set(bt, "en->it", "Information", ["Informazione"]);
31
- bl.set(bt, "en->it", "Save", ["Salva"]);
32
- bl.set(bt, "en->it", "Back", ["Indietro"]);
33
- bl.set(bt, "en->it", "From", ["Da"]);
34
- bl.set(bt, "en->it", "To", ["A"]);
35
- bl.set(bt, "en->it", "View Chart", ["Vedi Grafico"]);
36
- bl.set(bt, "en->it", "View Table", ["Vedi Tabella"]);
37
- bl.set(bt, "en->it", "Notes", ["Note"]);
38
- bl.set(bt, "en->it", "Edit Notes", ["Modifica Note"]);
39
- bl.set(bt, "en->it", "Cancel", ["Annulla"]);
40
- bl.set(bt, "en->it", "Confirm", ["Conferma"]);
41
- bl.set(bt, "en->it", "View", ["Visualizza"]);
42
- bl.set(bt, "en->it", "Close", ["Chiudi"]);
43
- bl.set(bt, "en->it", "Select", ["Seleziona"]);
44
- bl.set(bt, "en->it", "Meter Reading registered successfully", ["Lettura registrata correttamente"]);
45
- bl.set(bt, "en->it", "Validation errors during save operations", ["Errori di validazione durante il salvataggio"]);
46
- bl.set(bt, "en->it", "Can't register reading", ["Impossibile registrare la lettura"]);
47
- bl.set(bt, "en->it", "Electricity", ["Elettricita"]);
48
- bl.set(bt, "en->it", "Gas", ["Gas"]);
49
- bl.set(bt, "en->it", "Water", ["Acqua"]);
50
- bl.set(bt, "en->it", "Delete", ["Elimina"]);
51
- bl.set(bt, "en->it", "This operation cannot be reverted", ["Questa operazione non puo' essere annullata"]);
52
- bl.set(bt, "en->it", "Hide", ["Nascondi"]);
25
+ this.LocCache = {};
26
+ /**
27
+ * Locale di riferimento per tutte le traduzioni
28
+ */
29
+ this.Locale = new ReplaySubject(1);
30
+ // Recupero il locale alla partenza del BaseLocalization in modo, spero di dare tempo all'applicazione di tirarlo su
31
+ this.LocalePersistor.recover().pipe(take(1)).subscribe((l) => __awaiter(this, void 0, void 0, function* () {
32
+ if (!l) {
33
+ l = defaultLocale;
34
+ this.LocalePersistor.persist(defaultLocale);
35
+ }
36
+ this.Locale.next(l);
37
+ }));
38
+ this.Persistor = new LocalizationPersistor(this.LocCache);
39
+ this.Persistor.set("en->it", "Remove", ["Elimina"]);
40
+ this.Persistor.set("en->it", "Paging", ["Paginazione"]);
41
+ this.Persistor.set("en->it", "Yes", ["Si"]);
42
+ this.Persistor.set("en->it", "No", ["No"]);
43
+ this.Persistor.set("en->it", "YES", ["SI'"]);
44
+ this.Persistor.set("en->it", "NO", ["NO"]);
45
+ this.Persistor.set("en->it", "Found objects", ["Risultati trovati"]);
46
+ this.Persistor.set("en->it", "Loading data...", ["Carico i dati..."]);
47
+ this.Persistor.set("en->it", "Error during save operations", ["Errori durante il salvataggio"]);
48
+ this.Persistor.set("en->it", "Error", ["Errore"]);
49
+ this.Persistor.set("en->it", "Warning", ["Avviso"]);
50
+ this.Persistor.set("en->it", "Information", ["Informazione"]);
51
+ this.Persistor.set("en->it", "Save", ["Salva"]);
52
+ this.Persistor.set("en->it", "Back", ["Indietro"]);
53
+ this.Persistor.set("en->it", "From", ["Da"]);
54
+ this.Persistor.set("en->it", "To", ["A"]);
55
+ this.Persistor.set("en->it", "View Chart", ["Vedi Grafico"]);
56
+ this.Persistor.set("en->it", "View Table", ["Vedi Tabella"]);
57
+ this.Persistor.set("en->it", "Notes", ["Note"]);
58
+ this.Persistor.set("en->it", "Edit Notes", ["Modifica Note"]);
59
+ this.Persistor.set("en->it", "Cancel", ["Annulla"]);
60
+ this.Persistor.set("en->it", "Confirm", ["Conferma"]);
61
+ this.Persistor.set("en->it", "View", ["Visualizza"]);
62
+ this.Persistor.set("en->it", "Close", ["Chiudi"]);
63
+ this.Persistor.set("en->it", "Select", ["Seleziona"]);
64
+ this.Persistor.set("en->it", "Meter Reading registered successfully", ["Lettura registrata correttamente"]);
65
+ this.Persistor.set("en->it", "Validation errors during save operations", ["Errori di validazione durante il salvataggio"]);
66
+ this.Persistor.set("en->it", "Can't register reading", ["Impossibile registrare la lettura"]);
67
+ this.Persistor.set("en->it", "Electricity", ["Elettricita"]);
68
+ this.Persistor.set("en->it", "Gas", ["Gas"]);
69
+ this.Persistor.set("en->it", "Water", ["Acqua"]);
70
+ this.Persistor.set("en->it", "Delete", ["Elimina"]);
71
+ this.Persistor.set("en->it", "This operation cannot be reverted", ["Questa operazione non puo' essere annullata"]);
72
+ this.Persistor.set("en->it", "Hide", ["Nascondi"]);
53
73
  // Helper validazione
54
- bl.set(bt, "en->it", "Required field", ["Campo richiesto"]);
55
- bl.set(bt, "en->it", "Wrong field format", ["Formato campo errato"]);
56
- bl.set(bt, "en->it", "Wrong field format or field missing", ["Formato campo errato o campo mancante"]);
57
- 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"]);
74
+ this.Persistor.set("en->it", "Required field", ["Campo richiesto"]);
75
+ this.Persistor.set("en->it", "Wrong field format", ["Formato campo errato"]);
76
+ this.Persistor.set("en->it", "Wrong field format or field missing", ["Formato campo errato o campo mancante"]);
77
+ 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"]);
58
78
  // Informazioni sulle date
59
- bl.setToken(bt, "en->it", "getDateMonthPosition", "0", ["1"]);
60
- bl.setToken(bt, "en->it", "getDisplayDateMonthPosition", "1", ["1"]);
61
- bl.setToken(bt, "en->it", "getLocale", "en-US", ["it-IT"]);
62
- bl.setToken(bt, "en->it", "getSmallDateFormat", "MM/DD/YYYY", ["DD/MM/YYYY"]);
63
- bl.setToken(bt, "en->it", "getDefaultDateFormat", "MM/DD/YYYY", ["MM/DD/YYYY"]);
64
- bl.setToken(bt, "en->it", "getSmallDateDisplayFormat", "DD/MM/YYYY", ["DD/MM/YYYY"]);
65
- bl.setToken(bt, "en->it", "getFullDateFormat", "MM/DD/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
66
- bl.setToken(bt, "en->it", "getFullDateDisplayFormat", "DD/MM/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
67
- bl.setToken(bt, "en->it", "getFullDateFormatNoSeconds", "MM/DD/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
68
- bl.setToken(bt, "en->it", "getFullDateDisplayFormatNoSeconds", "DD/MM/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
69
- }
70
- /**
71
- * Imposta la localizzazione di un token all'interno della cache scelta
72
- *
73
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione del token con le localizzazioni
74
- * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
75
- * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
76
- * è 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"
77
- * @param {string} token Nome del token
78
- * @param {string} left Valore del token per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
79
- * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
80
- */
81
- static setToken(locCache, direction, token, left, right) {
82
- let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
83
- var parsingRes = parsingRegex.exec(direction);
84
- let from = parsingRes[1];
85
- let to = parsingRes[2].replace(/\s/g, '').split(',');
86
- let localeFrom = LocaleDefinitions.getByAlias(from);
87
- BaseLocalization._set(locCache, token, localeFrom.id, left, true);
88
- to.forEach((t, index) => {
89
- let localeTo = LocaleDefinitions.getByAlias(t);
90
- BaseLocalization._set(locCache, token, localeTo.id, right[index], true);
91
- });
92
- }
93
- /**
94
- * Imposta la localizzazione di una frase all'interno della cache scelta
95
- *
96
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione della frase con le localizzazioni
97
- * @param {string} direction Direzione della traduzione, rappresenta la lingua base in cui aspettarsi il testo e le varie lingue in cui viene tradotta.
98
- * Ad esempio, "en->it" indica che il parametro **left** è valido per le localizzazioni in inglese, mentre nell'elemento 0 del parametro **right**
99
- * è 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"
100
- * @param {string} left Valore della frase per la lingua specificata nel lato immediatamente sinistro alla freccia del parametro **direction**
101
- * @param {string} right Array con i valori facenti riferimento all'N-esima lingua del lato destro del parametro **direction**
102
- */
103
- static set(locCache, direction, left, right) {
104
- let parsingRegex = /([a-zA-Z]+)[\s]*->[\s]*([a-zA-Z,\s]+)+/g;
105
- var parsingRes = parsingRegex.exec(direction);
106
- let from = parsingRes[1];
107
- let to = parsingRes[2].replace(/\s/g, '').split(',');
108
- let localeFrom = LocaleDefinitions.getByAlias(from);
109
- BaseLocalization._set(locCache, left, localeFrom.id, left);
110
- to.forEach((t, index) => {
111
- let localeTo = LocaleDefinitions.getByAlias(t);
112
- BaseLocalization._set(locCache, left, localeTo.id, right[index]);
113
- });
114
- }
115
- /**
116
- * Imposta all'interno della cache specificata un'unica traduzione partendo da un testo di base
117
- *
118
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno della quale inserire l'informazione del testo con le localizzazioni
119
- * @param {string} text Testo da tradurre
120
- * @param {string} culture Lingua per cui inserire la traduzione
121
- * @param {string} translation Traduzione del **text** nella lingua specificata da **culture**
122
- * @param {boolean} token Indica se il **text** è un token o è una frase normale
123
- */
124
- static _set(locCache, text, culture, translation, token) {
125
- let item = BaseLocalization.findByText(locCache, text, token);
126
- if (!item) {
127
- locCache[text] = new ItemLocalization(token, text, [new SpecializedLocalization(culture, translation)]);
128
- return;
129
- }
130
- var trs = BaseLocalization.translationByCulture(item, culture);
131
- if (trs) {
132
- console.warn("Localization already loaded for sentence '" + text + "' and culture " + culture);
133
- return;
134
- }
135
- item.translations.push(new SpecializedLocalization(culture, translation));
136
- }
137
- /**
138
- * Partendo da una cache di localizzazione, dato un testo che può essere o meno un token, cerca quell'elemento all'interno della cache
139
- *
140
- * @param {{ [id: string]: ItemLocalization }} locCache Cache all'interno del quale cercare il **text**
141
- * @param {string} text Testo da cercare nella **locCache**
142
- * @param {boolean} allowtokens Indica se l'elemento cercato può essere un token o se dev'essere per forza una frase (per evitare rari
143
- * casi di collisione in cui magari un token è uguale a una frase tradotta)
144
- *
145
- * @returns {ItemLocalization} Informazioni di localizzazione per il **text** cercato
146
- */
147
- static findByText(locCache, text, allowtokens) {
148
- let possibleItem = locCache[text];
149
- if (!possibleItem)
150
- return null;
151
- var item = allowtokens || !possibleItem.token ? possibleItem : null;
152
- return item;
153
- }
154
- /**
155
- * Date le informazioni di localizzazione per un testo cerca e restituisce la traduzione per una lingua specifica
156
- *
157
- * @param {ItemLocalization} Informazioni di localizzazione
158
- * @param {string} culture Lingua della traduzione richiesta
159
- *
160
- * @returns {SpecializedLocalization} Informazioni di localizzazione specifiche della lingua richiesta
161
- */
162
- static translationByCulture(item, culture) {
163
- for (let i = 0; i < item.translations.length; i++) {
164
- let trl = item.translations[i];
165
- if (trl.culture == culture)
166
- return trl;
167
- }
168
- return null;
79
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDateMonthPosition, "0", ["1"]);
80
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDisplayDateMonthPosition, "1", ["1"]);
81
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getLocale, "en-US", ["it-IT"]);
82
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getSmallDateFormat, "MM/DD/YYYY", ["DD/MM/YYYY"]);
83
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getDefaultDateFormat, "MM/DD/YYYY", ["MM/DD/YYYY"]);
84
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getSmallDateDisplayFormat, "DD/MM/YYYY", ["DD/MM/YYYY"]);
85
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateFormat, "MM/DD/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
86
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateDisplayFormat, "DD/MM/YYYY HH:mm:ss", ["DD/MM/YYYY HH:mm:ss"]);
87
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateFormatNoSeconds, "MM/DD/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
88
+ this.Persistor.setToken("en->it", BaseLocalizationTokens.getFullDateDisplayFormatNoSeconds, "DD/MM/YYYY HH:mm", ["DD/MM/YYYY HH:mm"]);
169
89
  }
170
90
  }
91
+ BaseLocalization.ɵprov = i0.ɵɵdefineInjectable({ factory: function BaseLocalization_Factory() { return new BaseLocalization(i0.ɵɵinject(i1.LocalePersistor), i0.ɵɵinject(i2.LOC_LOCALE)); }, token: BaseLocalization, providedIn: "root" });
171
92
  BaseLocalization.decorators = [
172
- { type: Injectable }
93
+ { type: Injectable, args: [{ providedIn: 'root' },] }
94
+ ];
95
+ BaseLocalization.ctorParameters = () => [
96
+ { type: LocalePersistor },
97
+ { type: String, decorators: [{ type: Inject, args: [LOC_LOCALE,] }] }
173
98
  ];
174
- BaseLocalization.ctorParameters = () => [];
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvY29yZS9sb2NhbGl6YXRpb24uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6Rjs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBT3pCOztPQUVHO0lBQ0g7UUFSQTs7V0FFRztRQUNJLHFCQUFnQixHQUF1QyxFQUFFLENBQUM7UUFNN0QsbUZBQW1GO1FBQ25GLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQixJQUFJLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztRQUUxQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNoRCxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzdELEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM5RCxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsOEJBQThCLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7UUFDeEYsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDckQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDckQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLHVDQUF1QyxFQUFFLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLDhDQUE4QyxDQUFDLENBQUMsQ0FBQztRQUNuSCxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFR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QVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSXRlbUxvY2FsaXphdGlvbiwgTG9jYWxlRGVmaW5pdGlvbnMsIFNwZWNpYWxpemVkTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBzaW5nbGV0b24gY2hlIGNvbnRpZW5lIGxlIHRyYWR1emlvbmkgZGkgYmFzZSAocGVyIGV2aXRhcmUgZGkgcmlwZXRlcmxlIGluIG9nZ2kgY2xhc3NlIGRpIHRyYWR1emlvbmUpIGUgbGUgZnVuemlvbmkgYmFzZSBwZXIgXHJcbiAqIGluc2VyaXJlIGUgbGVnZ2VyZSB0cmFkdXppb25pIGluL2RhIHVuYSBjYWNoZVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQmFzZUxvY2FsaXphdGlvbiB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWNoZSBkaSB0dXR0ZSBsZSBsb2NhbGl6emF6aW9uaSBkaSBiYXNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBCYXNlVHJhbnNsYXRpb25zOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZS4gRGEgcXVpIHV0aWxpenphbmRvIGlsIG1ldG9kbyBzdGF0aWNvICoqQmFzZUxvY2FsaXphdGlvbi5zZXQqKiBzaSB2YSBhIHBvcG9sYXJlIGxhIGNhY2hlIGRlbGxlIHRyYWR1emlvbmkgKipCYXNlVHJhbnNsYXRpb25zKipcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgLy8gT2RpbyBzcHJlY2FyZSBjYXJhdHRlcmkuLi4gc29wcmF0dHV0dG8gcXVhbmRvIHJpc2NoaW8gY2hlIG5vbiB2ZW5nYW5vIG1pbmlmaWNhdGlcclxuICAgICAgICBsZXQgYnQgPSB0aGlzLkJhc2VUcmFuc2xhdGlvbnM7XHJcbiAgICAgICAgbGV0IGJsID0gQmFzZUxvY2FsaXphdGlvbjtcclxuXHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlJlbW92ZVwiLCBbXCJFbGltaW5hXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiUGFnaW5nXCIsIFtcIlBhZ2luYXppb25lXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiWWVzXCIsIFtcIlNpXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiTm9cIiwgW1wiTm9cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJZRVNcIiwgW1wiU0knXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiTk9cIiwgW1wiTk9cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJGb3VuZCBvYmplY3RzXCIsIFtcIlJpc3VsdGF0aSB0cm92YXRpXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiTG9hZGluZyBkYXRhLi4uXCIsIFtcIkNhcmljbyBpIGRhdGkuLi5cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJFcnJvciBkdXJpbmcgc2F2ZSBvcGVyYXRpb25zXCIsIFtcIkVycm9yaSBkdXJhbnRlIGlsIHNhbHZhdGFnZ2lvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiRXJyb3JcIiwgW1wiRXJyb3JlXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiV2FybmluZ1wiLCBbXCJBdnZpc29cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJJbmZvcm1hdGlvblwiLCBbXCJJbmZvcm1hemlvbmVcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJTYXZlXCIsIFtcIlNhbHZhXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiQmFja1wiLCBbXCJJbmRpZXRyb1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkZyb21cIiwgW1wiRGFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJUb1wiLCBbXCJBXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiVmlldyBDaGFydFwiLCBbXCJWZWRpIEdyYWZpY29cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJWaWV3IFRhYmxlXCIsIFtcIlZlZGkgVGFiZWxsYVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIk5vdGVzXCIsIFtcIk5vdGVcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJFZGl0IE5vdGVzXCIsIFtcIk1vZGlmaWNhIE5vdGVcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJDYW5jZWxcIiwgW1wiQW5udWxsYVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkNvbmZpcm1cIiwgW1wiQ29uZmVybWFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJWaWV3XCIsIFtcIlZpc3VhbGl6emFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJDbG9zZVwiLCBbXCJDaGl1ZGlcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJTZWxlY3RcIiwgW1wiU2VsZXppb25hXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiTWV0ZXIgUmVhZGluZyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseVwiLCBbXCJMZXR0dXJhIHJlZ2lzdHJhdGEgY29ycmV0dGFtZW50ZVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIlZhbGlkYXRpb24gZXJyb3JzIGR1cmluZyBzYXZlIG9wZXJhdGlvbnNcIiwgW1wiRXJyb3JpIGRpIHZhbGlkYXppb25lIGR1cmFudGUgaWwgc2FsdmF0YWdnaW9cIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJDYW4ndCByZWdpc3RlciByZWFkaW5nXCIsIFtcIkltcG9zc2liaWxlIHJlZ2lzdHJhcmUgbGEgbGV0dHVyYVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkVsZWN0cmljaXR5XCIsIFtcIkVsZXR0cmljaXRhXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiR2FzXCIsIFtcIkdhc1wiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIldhdGVyXCIsIFtcIkFjcXVhXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiRGVsZXRlXCIsIFtcIkVsaW1pbmFcIl0pO1xyXG4gICAgICAgIGJsLnNldChidCwgXCJlbi0+aXRcIiwgXCJUaGlzIG9wZXJhdGlvbiBjYW5ub3QgYmUgcmV2ZXJ0ZWRcIiwgW1wiUXVlc3RhIG9wZXJhemlvbmUgbm9uIHB1bycgZXNzZXJlIGFubnVsbGF0YVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIkhpZGVcIiwgW1wiTmFzY29uZGlcIl0pO1xyXG5cclxuICAgICAgICAvLyBIZWxwZXIgdmFsaWRhemlvbmVcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiUmVxdWlyZWQgZmllbGRcIiwgW1wiQ2FtcG8gcmljaGllc3RvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiV3JvbmcgZmllbGQgZm9ybWF0XCIsIFtcIkZvcm1hdG8gY2FtcG8gZXJyYXRvXCJdKTtcclxuICAgICAgICBibC5zZXQoYnQsIFwiZW4tPml0XCIsIFwiV3JvbmcgZmllbGQgZm9ybWF0IG9yIGZpZWxkIG1pc3NpbmdcIiwgW1wiRm9ybWF0byBjYW1wbyBlcnJhdG8gbyBjYW1wbyBtYW5jYW50ZVwiXSk7XHJcbiAgICAgICAgYmwuc2V0KGJ0LCBcImVuLT5pdFwiLCBcIllvdSBkb24ndCBoYXZlIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB2aWV3IHRoaXMgcGFnZS4gVGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gYmxvY2tlZFwiLCBbXCJOb24gc2kgaGFubm8gcHJpdmlsZWdpIGEgc3VmZmljaWVuemEgcGVyIGFjY2VkZXJlIGEgcXVlc3RhIHBhZ2luYS4gTGEgbmF2aWdhemlvbmUgZScgc3RhdGEgYmxvY2NhdGFcIl0pO1xyXG5cclxuICAgICAgICAvLyBJbmZvcm1hemlvbmkgc3VsbGUgZGF0ZVxyXG4gICAgICAgIGJsLnNldFRva2VuKGJ0LCBcImVuLT5pdFwiLCBcImdldERhdGVNb250aFBvc2l0aW9uXCIsIFwiMFwiLCBbXCIxXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXREaXNwbGF5RGF0ZU1vbnRoUG9zaXRpb25cIiwgXCIxXCIsIFtcIjFcIl0pO1xyXG4gICAgICAgIGJsLnNldFRva2VuKGJ0LCBcImVuLT5pdFwiLCBcImdldExvY2FsZVwiLCBcImVuLVVTXCIsIFtcIml0LUlUXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXRTbWFsbERhdGVGb3JtYXRcIiwgXCJNTS9ERC9ZWVlZXCIsIFtcIkREL01NL1lZWVlcIl0pO1xyXG4gICAgICAgIGJsLnNldFRva2VuKGJ0LCBcImVuLT5pdFwiLCBcImdldERlZmF1bHREYXRlRm9ybWF0XCIsIFwiTU0vREQvWVlZWVwiLCBbXCJNTS9ERC9ZWVlZXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0XCIsIFwiREQvTU0vWVlZWVwiLCBbXCJERC9NTS9ZWVlZXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXRGdWxsRGF0ZUZvcm1hdFwiLCBcIk1NL0REL1lZWVkgSEg6bW06c3NcIiwgW1wiREQvTU0vWVlZWSBISDptbTpzc1wiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0RnVsbERhdGVEaXNwbGF5Rm9ybWF0XCIsIFwiREQvTU0vWVlZWSBISDptbTpzc1wiLCBbXCJERC9NTS9ZWVlZIEhIOm1tOnNzXCJdKTtcclxuICAgICAgICBibC5zZXRUb2tlbihidCwgXCJlbi0+aXRcIiwgXCJnZXRGdWxsRGF0ZUZvcm1hdE5vU2Vjb25kc1wiLCBcIk1NL0REL1lZWVkgSEg6bW1cIiwgW1wiREQvTU0vWVlZWSBISDptbVwiXSk7XHJcbiAgICAgICAgYmwuc2V0VG9rZW4oYnQsIFwiZW4tPml0XCIsIFwiZ2V0RnVsbERhdGVEaXNwbGF5Rm9ybWF0Tm9TZWNvbmRzXCIsIFwiREQvTU0vWVlZWSBISDptbVwiLCBbXCJERC9NTS9ZWVlZIEhIOm1tXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9zdGEgbGEgbG9jYWxpenphemlvbmUgZGkgdW4gdG9rZW4gYWxsJ2ludGVybm8gZGVsbGEgY2FjaGUgc2NlbHRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7eyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfX0gbG9jQ2FjaGUgQ2FjaGUgYWxsJ2ludGVybm8gZGVsbGEgcXVhbGUgaW5zZXJpcmUgbCdpbmZvcm1hemlvbmUgZGVsIHRva2VuIGNvbiBsZSBsb2NhbGl6emF6aW9uaVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBEaXJlemlvbmUgZGVsbGEgdHJhZHV6aW9uZSwgcmFwcHJlc2VudGEgbGEgbGluZ3VhIGJhc2UgaW4gY3VpIGFzcGV0dGFyc2kgaWwgdGVzdG8gZSBsZSB2YXJpZSBsaW5ndWUgaW4gY3VpIHZpZW5lIHRyYWRvdHRhLlxyXG4gICAgICogQWQgZXNlbXBpbywgXCJlbi0+aXRcIiBpbmRpY2EgY2hlIGlsIHBhcmFtZXRybyAqKmxlZnQqKiDDqCB2YWxpZG8gcGVyIGxlIGxvY2FsaXp6YXppb25pIGluIGluZ2xlc2UsIG1lbnRyZSBuZWxsJ2VsZW1lbnRvIDAgZGVsIHBhcmFtZXRybyAqKnJpZ2h0KiogXHJcbiAgICAgKiDDqCBwcmVzZW50ZSBsJ3VuaWNhIHRyYWR1emlvbmUgaW4gaXRhbGlhbm8sIHBlciBkZWZpbmlyZSBwacO5IHRyYWR1emlvbmkgc3VsIGxhdG8gZGVzdHJvIGRlbGxhIGZyZWNjaWEgYmlzb2duYSBjb25jYXRlbmFybGUgY29uIGxhIHZpcmdvbGEsIGFkIGVzZW1waW8gXCJlbi0+aXQsanAsZWNjXCJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBOb21lIGRlbCB0b2tlblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxlZnQgVmFsb3JlIGRlbCB0b2tlbiBwZXIgbGEgbGluZ3VhIHNwZWNpZmljYXRhIG5lbCBsYXRvIGltbWVkaWF0YW1lbnRlIHNpbmlzdHJvIGFsbGEgZnJlY2NpYSBkZWwgcGFyYW1ldHJvICoqZGlyZWN0aW9uKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByaWdodCBBcnJheSBjb24gaSB2YWxvcmkgZmFjZW50aSByaWZlcmltZW50byBhbGwnTi1lc2ltYSBsaW5ndWEgZGVsIGxhdG8gZGVzdHJvIGRlbCBwYXJhbWV0cm8gKipkaXJlY3Rpb24qKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHNldFRva2VuKGxvY0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9LCBkaXJlY3Rpb246IHN0cmluZywgdG9rZW46IHN0cmluZywgbGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nW10pIHtcclxuICAgICAgICBsZXQgcGFyc2luZ1JlZ2V4ID0gLyhbYS16QS1aXSspW1xcc10qLT5bXFxzXSooW2EtekEtWixcXHNdKykrL2c7XHJcbiAgICAgICAgdmFyIHBhcnNpbmdSZXMgPSBwYXJzaW5nUmVnZXguZXhlYyhkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBsZXQgZnJvbSA9IHBhcnNpbmdSZXNbMV07XHJcbiAgICAgICAgbGV0IHRvOiBzdHJpbmdbXSA9IHBhcnNpbmdSZXNbMl0ucmVwbGFjZSgvXFxzL2csICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGxldCBsb2NhbGVGcm9tID0gTG9jYWxlRGVmaW5pdGlvbnMuZ2V0QnlBbGlhcyhmcm9tKTtcclxuICAgICAgICBCYXNlTG9jYWxpemF0aW9uLl9zZXQobG9jQ2FjaGUsIHRva2VuLCBsb2NhbGVGcm9tLmlkLCBsZWZ0LCB0cnVlKTtcclxuXHJcbiAgICAgICAgdG8uZm9yRWFjaCgodCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2FsZVRvID0gTG9jYWxlRGVmaW5pdGlvbnMuZ2V0QnlBbGlhcyh0KTtcclxuICAgICAgICAgICAgQmFzZUxvY2FsaXphdGlvbi5fc2V0KGxvY0NhY2hlLCB0b2tlbiwgbG9jYWxlVG8uaWQsIHJpZ2h0W2luZGV4XSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGxhIGxvY2FsaXp6YXppb25lIGRpIHVuYSBmcmFzZSBhbGwnaW50ZXJubyBkZWxsYSBjYWNoZSBzY2VsdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9fSBsb2NDYWNoZSBDYWNoZSBhbGwnaW50ZXJubyBkZWxsYSBxdWFsZSBpbnNlcmlyZSBsJ2luZm9ybWF6aW9uZSBkZWxsYSBmcmFzZSBjb24gbGUgbG9jYWxpenphemlvbmlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24gRGlyZXppb25lIGRlbGxhIHRyYWR1emlvbmUsIHJhcHByZXNlbnRhIGxhIGxpbmd1YSBiYXNlIGluIGN1aSBhc3BldHRhcnNpIGlsIHRlc3RvIGUgbGUgdmFyaWUgbGluZ3VlIGluIGN1aSB2aWVuZSB0cmFkb3R0YS5cclxuICAgICAqIEFkIGVzZW1waW8sIFwiZW4tPml0XCIgaW5kaWNhIGNoZSBpbCBwYXJhbWV0cm8gKipsZWZ0Kiogw6ggdmFsaWRvIHBlciBsZSBsb2NhbGl6emF6aW9uaSBpbiBpbmdsZXNlLCBtZW50cmUgbmVsbCdlbGVtZW50byAwIGRlbCBwYXJhbWV0cm8gKipyaWdodCoqIFxyXG4gICAgICogw6ggcHJlc2VudGUgbCd1bmljYSB0cmFkdXppb25lIGluIGl0YWxpYW5vLCBwZXIgZGVmaW5pcmUgcGnDuSB0cmFkdXppb25pIHN1bCBsYXRvIGRlc3RybyBkZWxsYSBmcmVjY2lhIGJpc29nbmEgY29uY2F0ZW5hcmxlIGNvbiBsYSB2aXJnb2xhLCBhZCBlc2VtcGlvIFwiZW4tPml0LGpwLGVjY1wiXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGVmdCBWYWxvcmUgZGVsbGEgZnJhc2UgcGVyIGxhIGxpbmd1YSBzcGVjaWZpY2F0YSBuZWwgbGF0byBpbW1lZGlhdGFtZW50ZSBzaW5pc3RybyBhbGxhIGZyZWNjaWEgZGVsIHBhcmFtZXRybyAqKmRpcmVjdGlvbioqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmlnaHQgQXJyYXkgY29uIGkgdmFsb3JpIGZhY2VudGkgcmlmZXJpbWVudG8gYWxsJ04tZXNpbWEgbGluZ3VhIGRlbCBsYXRvIGRlc3RybyBkZWwgcGFyYW1ldHJvICoqZGlyZWN0aW9uKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXQobG9jQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH0sIGRpcmVjdGlvbjogc3RyaW5nLCBsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGxldCBwYXJzaW5nUmVnZXggPSAvKFthLXpBLVpdKylbXFxzXSotPltcXHNdKihbYS16QS1aLFxcc10rKSsvZztcclxuICAgICAgICB2YXIgcGFyc2luZ1JlcyA9IHBhcnNpbmdSZWdleC5leGVjKGRpcmVjdGlvbik7XHJcblxyXG4gICAgICAgIGxldCBmcm9tID0gcGFyc2luZ1Jlc1sxXTtcclxuICAgICAgICBsZXQgdG86IHN0cmluZ1tdID0gcGFyc2luZ1Jlc1syXS5yZXBsYWNlKC9cXHMvZywgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgbGV0IGxvY2FsZUZyb20gPSBMb2NhbGVEZWZpbml0aW9ucy5nZXRCeUFsaWFzKGZyb20pO1xyXG4gICAgICAgIEJhc2VMb2NhbGl6YXRpb24uX3NldChsb2NDYWNoZSwgbGVmdCwgbG9jYWxlRnJvbS5pZCwgbGVmdCk7XHJcblxyXG4gICAgICAgIHRvLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhbGVUbyA9IExvY2FsZURlZmluaXRpb25zLmdldEJ5QWxpYXModCk7XHJcbiAgICAgICAgICAgIEJhc2VMb2NhbGl6YXRpb24uX3NldChsb2NDYWNoZSwgbGVmdCwgbG9jYWxlVG8uaWQsIHJpZ2h0W2luZGV4XSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBvc3RhIGFsbCdpbnRlcm5vIGRlbGxhIGNhY2hlIHNwZWNpZmljYXRhIHVuJ3VuaWNhIHRyYWR1emlvbmUgcGFydGVuZG8gZGEgdW4gdGVzdG8gZGkgYmFzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH19IGxvY0NhY2hlIENhY2hlIGFsbCdpbnRlcm5vIGRlbGxhIHF1YWxlIGluc2VyaXJlIGwnaW5mb3JtYXppb25lIGRlbCB0ZXN0byBjb24gbGUgbG9jYWxpenphemlvbmlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VsdHVyZSBMaW5ndWEgcGVyIGN1aSBpbnNlcmlyZSBsYSB0cmFkdXppb25lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNsYXRpb24gVHJhZHV6aW9uZSBkZWwgKip0ZXh0KiogbmVsbGEgbGluZ3VhIHNwZWNpZmljYXRhIGRhICoqY3VsdHVyZSoqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRva2VuIEluZGljYSBzZSBpbCAqKnRleHQqKiDDqCB1biB0b2tlbiBvIMOoIHVuYSBmcmFzZSBub3JtYWxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIF9zZXQobG9jQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH0sIHRleHQ6IHN0cmluZywgY3VsdHVyZTogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nLCB0b2tlbj86IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgaXRlbSA9IEJhc2VMb2NhbGl6YXRpb24uZmluZEJ5VGV4dChsb2NDYWNoZSwgdGV4dCwgdG9rZW4pO1xyXG4gICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICBsb2NDYWNoZVt0ZXh0XSA9IG5ldyBJdGVtTG9jYWxpemF0aW9uKHRva2VuLCB0ZXh0LCBbbmV3IFNwZWNpYWxpemVkTG9jYWxpemF0aW9uKGN1bHR1cmUsIHRyYW5zbGF0aW9uKV0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdHJzID0gQmFzZUxvY2FsaXphdGlvbi50cmFuc2xhdGlvbkJ5Q3VsdHVyZShpdGVtLCBjdWx0dXJlKTtcclxuICAgICAgICBpZiAodHJzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkxvY2FsaXphdGlvbiBhbHJlYWR5IGxvYWRlZCBmb3Igc2VudGVuY2UgJ1wiICsgdGV4dCArIFwiJyBhbmQgY3VsdHVyZSBcIiArIGN1bHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtLnRyYW5zbGF0aW9ucy5wdXNoKG5ldyBTcGVjaWFsaXplZExvY2FsaXphdGlvbihjdWx0dXJlLCB0cmFuc2xhdGlvbikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGEgdW5hIGNhY2hlIGRpIGxvY2FsaXp6YXppb25lLCBkYXRvIHVuIHRlc3RvIGNoZSBwdcOyIGVzc2VyZSBvIG1lbm8gdW4gdG9rZW4sIGNlcmNhIHF1ZWxsJ2VsZW1lbnRvIGFsbCdpbnRlcm5vIGRlbGxhIGNhY2hlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7eyBbaWQ6IHN0cmluZ106IEl0ZW1Mb2NhbGl6YXRpb24gfX0gbG9jQ2FjaGUgQ2FjaGUgYWxsJ2ludGVybm8gZGVsIHF1YWxlIGNlcmNhcmUgaWwgKip0ZXh0KipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIGNlcmNhcmUgbmVsbGEgKipsb2NDYWNoZSoqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93dG9rZW5zIEluZGljYSBzZSBsJ2VsZW1lbnRvIGNlcmNhdG8gcHXDsiBlc3NlcmUgdW4gdG9rZW4gbyBzZSBkZXYnZXNzZXJlIHBlciBmb3J6YSB1bmEgZnJhc2UgKHBlciBldml0YXJlIHJhcmkgXHJcbiAgICAgKiBjYXNpIGRpIGNvbGxpc2lvbmUgaW4gY3VpIG1hZ2FyaSB1biB0b2tlbiDDqCB1Z3VhbGUgYSB1bmEgZnJhc2UgdHJhZG90dGEpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtJdGVtTG9jYWxpemF0aW9ufSBJbmZvcm1hemlvbmkgZGkgbG9jYWxpenphemlvbmUgcGVyIGlsICoqdGV4dCoqIGNlcmNhdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBmaW5kQnlUZXh0KGxvY0NhY2hlOiB7IFtpZDogc3RyaW5nXTogSXRlbUxvY2FsaXphdGlvbiB9LCB0ZXh0OiBzdHJpbmcsIGFsbG93dG9rZW5zOiBib29sZWFuKTogSXRlbUxvY2FsaXphdGlvbiB7XHJcbiAgICAgICAgbGV0IHBvc3NpYmxlSXRlbTogSXRlbUxvY2FsaXphdGlvbiA9IGxvY0NhY2hlW3RleHRdO1xyXG4gICAgICAgIGlmICghcG9zc2libGVJdGVtKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBhbGxvd3Rva2VucyB8fCAhcG9zc2libGVJdGVtLnRva2VuID8gcG9zc2libGVJdGVtIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGUgbGUgaW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lIHBlciB1biB0ZXN0byBjZXJjYSBlIHJlc3RpdHVpc2NlIGxhIHRyYWR1emlvbmUgcGVyIHVuYSBsaW5ndWEgc3BlY2lmaWNhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SXRlbUxvY2FsaXphdGlvbn0gSW5mb3JtYXppb25pIGRpIGxvY2FsaXp6YXppb25lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3VsdHVyZSBMaW5ndWEgZGVsbGEgdHJhZHV6aW9uZSByaWNoaWVzdGFcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1NwZWNpYWxpemVkTG9jYWxpemF0aW9ufSBJbmZvcm1hemlvbmkgZGkgbG9jYWxpenphemlvbmUgc3BlY2lmaWNoZSBkZWxsYSBsaW5ndWEgcmljaGllc3RhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgdHJhbnNsYXRpb25CeUN1bHR1cmUoaXRlbTogSXRlbUxvY2FsaXphdGlvbiwgY3VsdHVyZTogc3RyaW5nKTogU3BlY2lhbGl6ZWRMb2NhbGl6YXRpb24ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS50cmFuc2xhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRybCA9IGl0ZW0udHJhbnNsYXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAodHJsLmN1bHR1cmUgPT0gY3VsdHVyZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufSJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvY29yZS9sb2NhbGl6YXRpb24uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7QUFFdkM7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGdCQUFnQjtJQWlCekI7O09BRUc7SUFDSCxZQUFtQixlQUFnQyxFQUFzQixhQUFxQjtRQUEzRSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFsQm5EOztXQUVHO1FBQ0ksYUFBUSxHQUF1QyxFQUFFLENBQUM7UUFPekQ7O1dBRUc7UUFDSSxXQUFNLEdBQTBCLElBQUksYUFBYSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2hFLG9IQUFvSDtRQUNwSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBTSxDQUFDLEVBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkIsQ0FBQyxDQUFBLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLDhCQUE4QixFQUFFLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUks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ZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEl0ZW1Mb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzL0l0ZW1Mb2NhbGl6YXRpb25cIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uUGVyc2lzdG9yIH0gZnJvbSBcIi4vbG9jYWxpemF0aW9uLnBlcnNpc3RvclwiO1xyXG5pbXBvcnQgeyBCYXNlTG9jYWxpemF0aW9uVG9rZW5zIH0gZnJvbSBcIi4uL21vZGVscy9CYXNlTG9jYWxpemF0aW9uVG9rZW5zXCI7XHJcbmltcG9ydCB7IExvY2FsZVBlcnNpc3RvciB9IGZyb20gXCIuLi9sb2NhbGUtcGVyc2lzdG9yL0xvY2FsZVBlcnNpc3RvclwiO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMT0NfTE9DQUxFIH0gZnJvbSBcIi4uL3Rva2Vuc1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBzaW5nbGV0b24gY2hlIGNvbnRpZW5lIGxlIHRyYWR1emlvbmkgZGkgYmFzZSAocGVyIGV2aXRhcmUgZGkgcmlwZXRlcmxlIGluIG9nZ2kgY2xhc3NlIGRpIHRyYWR1emlvbmUpIGUgbGUgZnVuemlvbmkgYmFzZSBwZXIgXHJcbiAqIGluc2VyaXJlIGUgbGVnZ2VyZSB0cmFkdXppb25pIGluL2RhIHVuYSBjYWNoZVxyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEJhc2VMb2NhbGl6YXRpb24ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGkgdHV0dGUgbGUgbG9jYWxpenphemlvbmkgZGkgYmFzZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgTG9jQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBJdGVtTG9jYWxpemF0aW9uIH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcnNpc3RvciBkZWxsZSBsb2NhbGl6emF6aW9uaSByZWxhdGl2byBhIHF1ZXN0YSBjbGFzc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIFBlcnNpc3RvcjogTG9jYWxpemF0aW9uUGVyc2lzdG9yO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9jYWxlIGRpIHJpZmVyaW1lbnRvIHBlciB0dXR0ZSBsZSB0cmFkdXppb25pXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBMb2NhbGU6IFJlcGxheVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZz4oMSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZS4gRGEgcXVpIHV0aWxpenphbmRvIGlsIG1ldG9kbyBzdGF0aWNvICoqQmFzZUxvY2FsaXphdGlvbi5zZXQqKiBzaSB2YSBhIHBvcG9sYXJlIGxhIGNhY2hlIGRlbGxlIHRyYWR1emlvbmkgKipCYXNlVHJhbnNsYXRpb25zKipcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIExvY2FsZVBlcnNpc3RvcjogTG9jYWxlUGVyc2lzdG9yLCBASW5qZWN0KExPQ19MT0NBTEUpIGRlZmF1bHRMb2NhbGU6IHN0cmluZykge1xyXG5cclxuICAgICAgICAvLyBSZWN1cGVybyBpbCBsb2NhbGUgYWxsYSBwYXJ0ZW56YSBkZWwgQmFzZUxvY2FsaXphdGlvbiBpbiBtb2RvLCBzcGVybyBkaSBkYXJlIHRlbXBvIGFsbCdhcHBsaWNhemlvbmUgZGkgdGlyYXJsbyBzdVxyXG4gICAgICAgIHRoaXMuTG9jYWxlUGVyc2lzdG9yLnJlY292ZXIoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShhc3luYyBsID0+IHtcclxuICAgICAgICAgICAgaWYgKCFsKSB7XHJcbiAgICAgICAgICAgICAgICBsID0gZGVmYXVsdExvY2FsZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuTG9jYWxlUGVyc2lzdG9yLnBlcnNpc3QoZGVmYXVsdExvY2FsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5Mb2NhbGUubmV4dChsKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLlBlcnNpc3RvciA9IG5ldyBMb2NhbGl6YXRpb25QZXJzaXN0b3IodGhpcy5Mb2NDYWNoZSk7IFxyXG5cclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJSZW1vdmVcIiwgW1wiRWxpbWluYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiUGFnaW5nXCIsIFtcIlBhZ2luYXppb25lXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJZZXNcIiwgW1wiU2lcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIk5vXCIsIFtcIk5vXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJZRVNcIiwgW1wiU0knXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJOT1wiLCBbXCJOT1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiRm91bmQgb2JqZWN0c1wiLCBbXCJSaXN1bHRhdGkgdHJvdmF0aVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiTG9hZGluZyBkYXRhLi4uXCIsIFtcIkNhcmljbyBpIGRhdGkuLi5cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkVycm9yIGR1cmluZyBzYXZlIG9wZXJhdGlvbnNcIiwgW1wiRXJyb3JpIGR1cmFudGUgaWwgc2FsdmF0YWdnaW9cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkVycm9yXCIsIFtcIkVycm9yZVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiV2FybmluZ1wiLCBbXCJBdnZpc29cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkluZm9ybWF0aW9uXCIsIFtcIkluZm9ybWF6aW9uZVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiU2F2ZVwiLCBbXCJTYWx2YVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiQmFja1wiLCBbXCJJbmRpZXRyb1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiRnJvbVwiLCBbXCJEYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiVG9cIiwgW1wiQVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiVmlldyBDaGFydFwiLCBbXCJWZWRpIEdyYWZpY29cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlZpZXcgVGFibGVcIiwgW1wiVmVkaSBUYWJlbGxhXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJOb3Rlc1wiLCBbXCJOb3RlXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJFZGl0IE5vdGVzXCIsIFtcIk1vZGlmaWNhIE5vdGVcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkNhbmNlbFwiLCBbXCJBbm51bGxhXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJDb25maXJtXCIsIFtcIkNvbmZlcm1hXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJWaWV3XCIsIFtcIlZpc3VhbGl6emFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkNsb3NlXCIsIFtcIkNoaXVkaVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiU2VsZWN0XCIsIFtcIlNlbGV6aW9uYVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiTWV0ZXIgUmVhZGluZyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseVwiLCBbXCJMZXR0dXJhIHJlZ2lzdHJhdGEgY29ycmV0dGFtZW50ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiVmFsaWRhdGlvbiBlcnJvcnMgZHVyaW5nIHNhdmUgb3BlcmF0aW9uc1wiLCBbXCJFcnJvcmkgZGkgdmFsaWRhemlvbmUgZHVyYW50ZSBpbCBzYWx2YXRhZ2dpb1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiQ2FuJ3QgcmVnaXN0ZXIgcmVhZGluZ1wiLCBbXCJJbXBvc3NpYmlsZSByZWdpc3RyYXJlIGxhIGxldHR1cmFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIkVsZWN0cmljaXR5XCIsIFtcIkVsZXR0cmljaXRhXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJHYXNcIiwgW1wiR2FzXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJXYXRlclwiLCBbXCJBY3F1YVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiRGVsZXRlXCIsIFtcIkVsaW1pbmFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIlRoaXMgb3BlcmF0aW9uIGNhbm5vdCBiZSByZXZlcnRlZFwiLCBbXCJRdWVzdGEgb3BlcmF6aW9uZSBub24gcHVvJyBlc3NlcmUgYW5udWxsYXRhXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJIaWRlXCIsIFtcIk5hc2NvbmRpXCJdKTtcclxuXHJcbiAgICAgICAgLy8gSGVscGVyIHZhbGlkYXppb25lXHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0KFwiZW4tPml0XCIsIFwiUmVxdWlyZWQgZmllbGRcIiwgW1wiQ2FtcG8gcmljaGllc3RvXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXQoXCJlbi0+aXRcIiwgXCJXcm9uZyBmaWVsZCBmb3JtYXRcIiwgW1wiRm9ybWF0byBjYW1wbyBlcnJhdG9cIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIldyb25nIGZpZWxkIGZvcm1hdCBvciBmaWVsZCBtaXNzaW5nXCIsIFtcIkZvcm1hdG8gY2FtcG8gZXJyYXRvIG8gY2FtcG8gbWFuY2FudGVcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldChcImVuLT5pdFwiLCBcIllvdSBkb24ndCBoYXZlIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB2aWV3IHRoaXMgcGFnZS4gVGhlIG5hdmlnYXRpb24gaGFzIGJlZW4gYmxvY2tlZFwiLCBbXCJOb24gc2kgaGFubm8gcHJpdmlsZWdpIGEgc3VmZmljaWVuemEgcGVyIGFjY2VkZXJlIGEgcXVlc3RhIHBhZ2luYS4gTGEgbmF2aWdhemlvbmUgZScgc3RhdGEgYmxvY2NhdGFcIl0pO1xyXG5cclxuICAgICAgICAvLyBJbmZvcm1hemlvbmkgc3VsbGUgZGF0ZVxyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldFRva2VuKFwiZW4tPml0XCIsIEJhc2VMb2NhbGl6YXRpb25Ub2tlbnMuZ2V0RGF0ZU1vbnRoUG9zaXRpb24sIFwiMFwiLCBbXCIxXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldERpc3BsYXlEYXRlTW9udGhQb3NpdGlvbiwgXCIxXCIsIFtcIjFcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldFRva2VuKFwiZW4tPml0XCIsIEJhc2VMb2NhbGl6YXRpb25Ub2tlbnMuZ2V0TG9jYWxlLCBcImVuLVVTXCIsIFtcIml0LUlUXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldFNtYWxsRGF0ZUZvcm1hdCwgXCJNTS9ERC9ZWVlZXCIsIFtcIkREL01NL1lZWVlcIl0pO1xyXG4gICAgICAgIHRoaXMuUGVyc2lzdG9yLnNldFRva2VuKFwiZW4tPml0XCIsIEJhc2VMb2NhbGl6YXRpb25Ub2tlbnMuZ2V0RGVmYXVsdERhdGVGb3JtYXQsIFwiTU0vREQvWVlZWVwiLCBbXCJNTS9ERC9ZWVlZXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldFNtYWxsRGF0ZURpc3BsYXlGb3JtYXQsIFwiREQvTU0vWVlZWVwiLCBbXCJERC9NTS9ZWVlZXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldEZ1bGxEYXRlRm9ybWF0LCBcIk1NL0REL1lZWVkgSEg6bW06c3NcIiwgW1wiREQvTU0vWVlZWSBISDptbTpzc1wiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRGdWxsRGF0ZURpc3BsYXlGb3JtYXQsIFwiREQvTU0vWVlZWSBISDptbTpzc1wiLCBbXCJERC9NTS9ZWVlZIEhIOm1tOnNzXCJdKTtcclxuICAgICAgICB0aGlzLlBlcnNpc3Rvci5zZXRUb2tlbihcImVuLT5pdFwiLCBCYXNlTG9jYWxpemF0aW9uVG9rZW5zLmdldEZ1bGxEYXRlRm9ybWF0Tm9TZWNvbmRzLCBcIk1NL0REL1lZWVkgSEg6bW1cIiwgW1wiREQvTU0vWVlZWSBISDptbVwiXSk7XHJcbiAgICAgICAgdGhpcy5QZXJzaXN0b3Iuc2V0VG9rZW4oXCJlbi0+aXRcIiwgQmFzZUxvY2FsaXphdGlvblRva2Vucy5nZXRGdWxsRGF0ZURpc3BsYXlGb3JtYXROb1NlY29uZHMsIFwiREQvTU0vWVlZWSBISDptbVwiLCBbXCJERC9NTS9ZWVlZIEhIOm1tXCJdKTtcclxuICAgIH1cclxufSJdfQ==
@@ -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,22 @@
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
+ export class LocalStorageLocalePersistor extends LocalePersistor {
8
+ /** @ignore Vedi classe base */
9
+ persist(locale) {
10
+ localStorage.setItem(this.LOCALE, locale);
11
+ return of(true).pipe(first());
12
+ }
13
+ /** @ignore Vedi classe base */
14
+ recover() {
15
+ var ret = localStorage.getItem(this.LOCALE);
16
+ return of(ret).pipe(first());
17
+ }
18
+ }
19
+ LocalStorageLocalePersistor.decorators = [
20
+ { type: Injectable }
21
+ ];
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2NhbGl6YXRpb25zL3NyYy9saWIvbG9jYWxlLXBlcnNpc3Rvci9Mb2NhbFN0b3JhZ2VDYWNoZVBlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE1BQU0sT0FBTywyQkFBNEIsU0FBUSxlQUFlO0lBRTVELCtCQUErQjtJQUN4QixPQUFPLENBQUMsTUFBYztRQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELCtCQUErQjtJQUN4QixPQUFPO1FBQ1YsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQzs7O1lBYkosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBSWEpTXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgTG9jYWxlUGVyc2lzdG9yIH0gZnJvbSBcIi4vTG9jYWxlUGVyc2lzdG9yXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VMb2NhbGVQZXJzaXN0b3IgZXh0ZW5kcyBMb2NhbGVQZXJzaXN0b3Ige1xyXG5cclxuICAgIC8qKiBAaWdub3JlIFZlZGkgY2xhc3NlIGJhc2UgKi9cclxuICAgIHB1YmxpYyBwZXJzaXN0KGxvY2FsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MT0NBTEUsIGxvY2FsZSk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgVmVkaSBjbGFzc2UgYmFzZSAqL1xyXG4gICAgcHVibGljIHJlY292ZXIoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICB2YXIgcmV0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTEUpO1xyXG4gICAgICAgIHJldHVybiBvZihyZXQpLnBpcGUoZmlyc3QoKSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -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