@o3r/localization 10.2.0-prerelease.40 → 10.2.0-prerelease.42

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 (38) hide show
  1. package/devkit/localization-devkit.interface.d.ts +45 -2
  2. package/devkit/localization-devkit.interface.d.ts.map +1 -1
  3. package/devkit/localization-devtools.console.service.d.ts +6 -6
  4. package/devkit/localization-devtools.console.service.d.ts.map +1 -1
  5. package/devkit/localization-devtools.message.service.d.ts +11 -3
  6. package/devkit/localization-devtools.message.service.d.ts.map +1 -1
  7. package/devkit/localization-devtools.service.d.ts +30 -1
  8. package/devkit/localization-devtools.service.d.ts.map +1 -1
  9. package/devkit/localization-devtools.token.d.ts.map +1 -1
  10. package/esm2022/devkit/localization-devkit.interface.mjs +1 -1
  11. package/esm2022/devkit/localization-devtools.console.service.mjs +15 -22
  12. package/esm2022/devkit/localization-devtools.message.service.mjs +72 -10
  13. package/esm2022/devkit/localization-devtools.service.mjs +56 -5
  14. package/esm2022/devkit/localization-devtools.token.mjs +3 -2
  15. package/esm2022/tools/localization.service.mjs +7 -1
  16. package/fesm2022/o3r-localization.mjs +141 -29
  17. package/fesm2022/o3r-localization.mjs.map +1 -1
  18. package/package.json +6 -6
  19. package/tools/localization.service.d.ts +4 -0
  20. package/tools/localization.service.d.ts.map +1 -1
  21. package/builders/helpers/localization.generator.js.map +0 -1
  22. package/builders/i18n/index.js.map +0 -1
  23. package/builders/i18n/schema.js.map +0 -1
  24. package/builders/localization/index.js.map +0 -1
  25. package/builders/localization/schema.js.map +0 -1
  26. package/builders/localization-extractor/index.js.map +0 -1
  27. package/builders/localization-extractor/schema.js.map +0 -1
  28. package/builders/localization-extractor/validations.js.map +0 -1
  29. package/schematics/add-localization-key/index.js.map +0 -1
  30. package/schematics/add-localization-key/schema.js.map +0 -1
  31. package/schematics/cms-adapter/index.js.map +0 -1
  32. package/schematics/localization-base/index.js.map +0 -1
  33. package/schematics/localization-to-component/index.js.map +0 -1
  34. package/schematics/localization-to-component/schema.js.map +0 -1
  35. package/schematics/ng-add/helpers/devtools-registration.js.map +0 -1
  36. package/schematics/ng-add/index.js.map +0 -1
  37. package/schematics/ng-add/schema.js.map +0 -1
  38. package/schematics/ng-update/v10-0/index.js.map +0 -1
@@ -1,10 +1,21 @@
1
- import { Injectable } from '@angular/core';
1
+ import { ApplicationRef, Injectable } from '@angular/core';
2
+ import { TranslateCompiler } from '@ngx-translate/core';
3
+ import { lastValueFrom } from 'rxjs';
2
4
  import { LocalizationService } from '../tools';
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "../tools";
7
+ import * as i2 from "@ngx-translate/core";
5
8
  export class OtterLocalizationDevtools {
6
- constructor(localizationService) {
9
+ constructor(localizationService, translateCompiler, appRef) {
7
10
  this.localizationService = localizationService;
11
+ this.translateCompiler = translateCompiler;
12
+ this.appRef = appRef;
13
+ }
14
+ /**
15
+ * Is the translation deactivation enabled
16
+ */
17
+ isTranslationDeactivationEnabled() {
18
+ return this.localizationService.isTranslationDeactivationEnabled();
8
19
  }
9
20
  /**
10
21
  * Show localization keys
@@ -12,6 +23,7 @@ export class OtterLocalizationDevtools {
12
23
  */
13
24
  showLocalizationKeys(value) {
14
25
  this.localizationService.toggleShowKeys(value);
26
+ this.appRef.tick();
15
27
  }
16
28
  /**
17
29
  * Returns the current language
@@ -31,10 +43,49 @@ export class OtterLocalizationDevtools {
31
43
  fn(lang);
32
44
  });
33
45
  }
34
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
46
+ /**
47
+ * Switch the current language to the specified value
48
+ * @param language new language to switch to
49
+ */
50
+ async switchLanguage(language) {
51
+ await lastValueFrom(this.localizationService.useLanguage(language));
52
+ this.appRef.tick();
53
+ }
54
+ /**
55
+ * Updates the specified localization key/values for the current language.
56
+ *
57
+ * Recommendation: To be used with a small number of keys to update to avoid performance issues.
58
+ * @param keyValues key/values to update
59
+ * @param language if not provided, the current language value
60
+ */
61
+ updateLocalizationKeys(keyValues, language) {
62
+ const lang = language || this.getCurrentLanguage();
63
+ const translateService = this.localizationService.getTranslateService();
64
+ Object.entries(keyValues).forEach(([key, value]) => {
65
+ translateService.set(key, value, lang);
66
+ });
67
+ this.appRef.tick();
68
+ }
69
+ /**
70
+ * Reload a language from the language file
71
+ * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490
72
+ * @param language language to reload
73
+ */
74
+ async reloadLocalizationKeys(language) {
75
+ const lang = language || this.getCurrentLanguage();
76
+ if (this.translateCompiler.clearCache) {
77
+ this.translateCompiler.clearCache();
78
+ }
79
+ const initialLocs = await lastValueFrom(this.localizationService
80
+ .getTranslateService()
81
+ .reloadLang(lang));
82
+ this.localizationService.getTranslateService().setTranslation(language || this.getCurrentLanguage(), initialLocs);
83
+ this.appRef.tick();
84
+ }
85
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: i1.LocalizationService }, { token: i2.TranslateCompiler }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
35
86
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools }); }
36
87
  }
37
88
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, decorators: [{
38
89
  type: Injectable
39
- }], ctorParameters: () => [{ type: i1.LocalizationService }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZ0b29scy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFHL0MsTUFBTSxPQUFPLHlCQUF5QjtJQUVwQyxZQUE2QixtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUFHLENBQUM7SUFFekU7OztPQUdHO0lBQ0ksb0JBQW9CLENBQUMsS0FBZTtRQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxFQUE2QjtRQUNuRCxPQUFPLElBQUksQ0FBQyxtQkFBbUI7YUFDNUIsbUJBQW1CLEVBQUU7YUFDckIsWUFBWTthQUNaLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN0QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7aUlBOUJVLHlCQUF5QjtxSUFBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3R0ZXJMb2NhbGl6YXRpb25EZXZ0b29scyB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBTaG93IGxvY2FsaXphdGlvbiBrZXlzXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBlbmZvcmNlZCBieSB0aGUgRGV2VG9vbHMgZXh0ZW5zaW9uXG4gICAqL1xuICBwdWJsaWMgc2hvd0xvY2FsaXphdGlvbktleXModmFsdWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLnRvZ2dsZVNob3dLZXlzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0dXAgYSBsaXN0ZW5lciBvbiBsYW5ndWFnZSBjaGFuZ2VcbiAgICogQHBhcmFtIGZuIGNhbGxlZCB3aGVuIHRoZSBsYW5ndWFnZSBpcyBjaGFuZ2VkIGluIHRoZSBhcHBcbiAgICovXG4gIHB1YmxpYyBvbkxhbmd1YWdlQ2hhbmdlKGZuOiAobGFuZ3VhZ2U6IHN0cmluZykgPT4gYW55KTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAuZ2V0VHJhbnNsYXRlU2VydmljZSgpXG4gICAgICAub25MYW5nQ2hhbmdlXG4gICAgICAuc3Vic2NyaWJlKCh7IGxhbmcgfSkgPT4ge1xuICAgICAgICBmbihsYW5nKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
90
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i2.TranslateCompiler }, { type: i0.ApplicationRef }] });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGV2a2l0L2xvY2FsaXphdGlvbi1kZXZ0b29scy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUkvQyxNQUFNLE9BQU8seUJBQXlCO0lBRXBDLFlBQ21CLG1CQUF3QyxFQUN4QyxpQkFBb0MsRUFDcEMsTUFBc0I7UUFGdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBQ3RDLENBQUM7SUFFSjs7T0FFRztJQUNJLGdDQUFnQztRQUNyQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFlO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsRUFBNkI7UUFDbkQsT0FBTyxJQUFJLENBQUMsbUJBQW1CO2FBQzVCLG1CQUFtQixFQUFFO2FBQ3JCLFlBQVk7YUFDWixTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDdEIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFnQjtRQUMxQyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsU0FBb0MsRUFBRSxRQUFpQjtRQUNuRixNQUFNLElBQUksR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4RSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDakQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQixDQUFDLFFBQWlCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuRCxJQUFLLElBQUksQ0FBQyxpQkFBd0QsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3RSxJQUFJLENBQUMsaUJBQXdELENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUUsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUNyQyxJQUFJLENBQUMsbUJBQW1CO2FBQ3JCLG1CQUFtQixFQUFFO2FBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGNBQWMsQ0FDM0QsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUNyQyxXQUFXLENBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztpSUF6RlUseUJBQXlCO3FJQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlQ29tcGlsZXIgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL3Rvb2xzJztcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRlTWVzc2FnZUZvcm1hdExhenlDb21waWxlciB9IGZyb20gJy4uL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3R0ZXJMb2NhbGl6YXRpb25EZXZ0b29scyB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlQ29tcGlsZXI6IFRyYW5zbGF0ZUNvbXBpbGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZlxuICApIHt9XG5cbiAgLyoqXG4gICAqIElzIHRoZSB0cmFuc2xhdGlvbiBkZWFjdGl2YXRpb24gZW5hYmxlZFxuICAgKi9cbiAgcHVibGljIGlzVHJhbnNsYXRpb25EZWFjdGl2YXRpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaXNUcmFuc2xhdGlvbkRlYWN0aXZhdGlvbkVuYWJsZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGxvY2FsaXphdGlvbiBrZXlzXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBlbmZvcmNlZCBieSB0aGUgRGV2VG9vbHMgZXh0ZW5zaW9uXG4gICAqL1xuICBwdWJsaWMgc2hvd0xvY2FsaXphdGlvbktleXModmFsdWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLnRvZ2dsZVNob3dLZXlzKHZhbHVlKTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHVwIGEgbGlzdGVuZXIgb24gbGFuZ3VhZ2UgY2hhbmdlXG4gICAqIEBwYXJhbSBmbiBjYWxsZWQgd2hlbiB0aGUgbGFuZ3VhZ2UgaXMgY2hhbmdlZCBpbiB0aGUgYXBwXG4gICAqL1xuICBwdWJsaWMgb25MYW5ndWFnZUNoYW5nZShmbjogKGxhbmd1YWdlOiBzdHJpbmcpID0+IGFueSk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uU2VydmljZVxuICAgICAgLmdldFRyYW5zbGF0ZVNlcnZpY2UoKVxuICAgICAgLm9uTGFuZ0NoYW5nZVxuICAgICAgLnN1YnNjcmliZSgoeyBsYW5nIH0pID0+IHtcbiAgICAgICAgZm4obGFuZyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKiBAcGFyYW0gbGFuZ3VhZ2UgbmV3IGxhbmd1YWdlIHRvIHN3aXRjaCB0b1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHN3aXRjaExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICBhd2FpdCBsYXN0VmFsdWVGcm9tKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS51c2VMYW5ndWFnZShsYW5ndWFnZSkpO1xuICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzcGVjaWZpZWQgbG9jYWxpemF0aW9uIGtleS92YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlLlxuICAgKlxuICAgKiBSZWNvbW1lbmRhdGlvbjogVG8gYmUgdXNlZCB3aXRoIGEgc21hbGwgbnVtYmVyIG9mIGtleXMgdG8gdXBkYXRlIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlcy5cbiAgICogQHBhcmFtIGtleVZhbHVlcyBrZXkvdmFsdWVzIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gbGFuZ3VhZ2UgaWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBsYW5ndWFnZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUxvY2FsaXphdGlvbktleXMoa2V5VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBsYW5ndWFnZT86IHN0cmluZyk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2UgfHwgdGhpcy5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICBjb25zdCB0cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0ZVNlcnZpY2UoKTtcbiAgICBPYmplY3QuZW50cmllcyhrZXlWYWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdHJhbnNsYXRlU2VydmljZS5zZXQoa2V5LCB2YWx1ZSwgbGFuZyk7XG4gICAgfSk7XG4gICAgdGhpcy5hcHBSZWYudGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZCBhIGxhbmd1YWdlIGZyb20gdGhlIGxhbmd1YWdlIGZpbGVcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmd4LXRyYW5zbGF0ZS9jb3JlL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2NvcmUvbGliL3RyYW5zbGF0ZS5zZXJ2aWNlLnRzI0w0OTBcbiAgICogQHBhcmFtIGxhbmd1YWdlIGxhbmd1YWdlIHRvIHJlbG9hZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbG9hZExvY2FsaXphdGlvbktleXMobGFuZ3VhZ2U/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBsYW5nID0gbGFuZ3VhZ2UgfHwgdGhpcy5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICBpZiAoKHRoaXMudHJhbnNsYXRlQ29tcGlsZXIgYXMgVHJhbnNsYXRlTWVzc2FnZUZvcm1hdExhenlDb21waWxlcikuY2xlYXJDYWNoZSkge1xuICAgICAgKHRoaXMudHJhbnNsYXRlQ29tcGlsZXIgYXMgVHJhbnNsYXRlTWVzc2FnZUZvcm1hdExhenlDb21waWxlcikuY2xlYXJDYWNoZSgpO1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsTG9jcyA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2VcbiAgICAgICAgLmdldFRyYW5zbGF0ZVNlcnZpY2UoKVxuICAgICAgICAucmVsb2FkTGFuZyhsYW5nKVxuICAgICk7XG4gICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0ZVNlcnZpY2UoKS5zZXRUcmFuc2xhdGlvbihcbiAgICAgIGxhbmd1YWdlIHx8IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlKCksXG4gICAgICBpbml0aWFsTG9jc1xuICAgICk7XG4gICAgdGhpcy5hcHBSZWYudGljaygpO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,8 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS = {
3
3
  isActivatedOnBootstrap: false,
4
- isActivatedOnBootstrapWhenCMSContext: true
4
+ isActivatedOnBootstrapWhenCMSContext: true,
5
+ metadataFilePath: './metadata/localisation.metadata.json'
5
6
  };
6
7
  export const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localization Devtools options');
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RldmtpdC9sb2NhbGl6YXRpb24tZGV2dG9vbHMudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBdUM7SUFDN0Ysc0JBQXNCLEVBQUUsS0FBSztJQUM3QixvQ0FBb0MsRUFBRSxJQUFJO0NBQzNDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBdUQsSUFBSSxjQUFjLENBQXFDLHFDQUFxQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLWRldmtpdC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgT1RURVJfTE9DQUxJWkFUSU9OX0RFVlRPT0xTX0RFRkFVTFRfT1BUSU9OUzogTG9jYWxpemF0aW9uRGV2dG9vbHNTZXJ2aWNlT3B0aW9ucyA9IHtcbiAgaXNBY3RpdmF0ZWRPbkJvb3RzdHJhcDogZmFsc2UsXG4gIGlzQWN0aXZhdGVkT25Cb290c3RyYXBXaGVuQ01TQ29udGV4dDogdHJ1ZVxufTtcblxuZXhwb3J0IGNvbnN0IE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19PUFRJT05TOiBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPignT3R0ZXIgTG9jYWxpemF0aW9uIERldnRvb2xzIG9wdGlvbnMnKTtcbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWRldnRvb2xzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RldmtpdC9sb2NhbGl6YXRpb24tZGV2dG9vbHMudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQyxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBdUM7SUFDN0Ysc0JBQXNCLEVBQUUsS0FBSztJQUM3QixvQ0FBb0MsRUFBRSxJQUFJO0lBQzFDLGdCQUFnQixFQUFFLHVDQUF1QztDQUMxRCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQXVELElBQUksY0FBYyxDQUFxQyxxQ0FBcUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgfSBmcm9tICcuL2xvY2FsaXphdGlvbi1kZXZraXQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19ERUZBVUxUX09QVElPTlM6IExvY2FsaXphdGlvbkRldnRvb2xzU2VydmljZU9wdGlvbnMgPSB7XG4gIGlzQWN0aXZhdGVkT25Cb290c3RyYXA6IGZhbHNlLFxuICBpc0FjdGl2YXRlZE9uQm9vdHN0cmFwV2hlbkNNU0NvbnRleHQ6IHRydWUsXG4gIG1ldGFkYXRhRmlsZVBhdGg6ICcuL21ldGFkYXRhL2xvY2FsaXNhdGlvbi5tZXRhZGF0YS5qc29uJ1xufTtcblxuZXhwb3J0IGNvbnN0IE9UVEVSX0xPQ0FMSVpBVElPTl9ERVZUT09MU19PUFRJT05TOiBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGl6YXRpb25EZXZ0b29sc1NlcnZpY2VPcHRpb25zPignT3R0ZXIgTG9jYWxpemF0aW9uIERldnRvb2xzIG9wdGlvbnMnKTtcbiJdfQ==
@@ -113,6 +113,12 @@ export class LocalizationService {
113
113
  this.translateService.setDefaultLang(language);
114
114
  this.useLanguage(language);
115
115
  }
116
+ /**
117
+ * Is the translation deactivation enabled
118
+ */
119
+ isTranslationDeactivationEnabled() {
120
+ return this.configuration.enableTranslationDeactivation;
121
+ }
116
122
  /**
117
123
  * Wrapper to call the ngx-translate service TranslateService method getLangs().
118
124
  */
@@ -188,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
188
194
  }] }, { type: i3.Store, decorators: [{
189
195
  type: Optional
190
196
  }] }] });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaURBQWlEO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQTZCLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBRXhFOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBb0I5QixZQUNtQixnQkFBa0MsRUFDbEMsTUFBcUIsRUFDcUIsYUFBd0MsRUFDdEUsS0FBd0M7UUFIcEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3FCLGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtRQUN0RSxVQUFLLEdBQUwsS0FBSyxDQUFtQztRQXRCdEQsMEJBQXFCLEdBQVcsR0FBRyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsZ0VBQWdFO1FBQy9DLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU96RDs7V0FFRztR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QUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUMsRUFDM0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDO2lJQXZNVSxtQkFBbUIsK0VBdUJwQixnQ0FBZ0M7cUlBdkIvQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVU7OzBCQXdCTixNQUFNOzJCQUFDLGdDQUFnQzs7MEJBQ3ZDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzICovXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJ0BvM3IvbG9nZ2VyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29yZS9sb2NhbGl6YXRpb24uY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25PdmVycmlkZVN0b3JlLCBzZWxlY3RMb2NhbGl6YXRpb25PdmVycmlkZSB9IGZyb20gJy4uL3N0b3Jlcy9pbmRleCc7XG5pbXBvcnQgeyBMT0NBTElaQVRJT05fQ09ORklHVVJBVElPTl9UT0tFTiB9IGZyb20gJy4vbG9jYWxpemF0aW9uLnRva2VuJztcblxuLyoqXG4gKiBTZXJ2aWNlIHdoaWNoIGlzIHdyYXBwaW5nIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIG9mIFRyYW5zbGF0ZVNlcnZpY2UgZnJvbSBuZ3gtdHJhbnNsYXRlXG4gKiBBbnkgYXBwbGljYXRpb24gd2lsbGluZyB0byB1c2UgbG9jYWxpemF0aW9uIGp1c3QgbmVlZHMgdG8gaW5qZWN0IExvY2FsaXphdGlvblNlcnZpY2VcbiAqIGluIHRoZSByb290IGNvbXBvbmVudCBhbmQgY2FsbCBpdHMgY29uZmlndXJlKCkgbWV0aG9kLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uU2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGVTcGxpdElkZW50aWZpZXI6IHN0cmluZyA9ICctJztcblxuICAvKipcbiAgICogSW50ZXJuYWwgc3ViamVjdCB0aGF0IHdlIHVzZSB0byB0cmFjayBjaGFuZ2VzIGJldHdlZW4ga2V5cyBvbmx5IGFuZCB0cmFuc2xhdGlvbiBtb2RlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3dLZXlzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgbG9jYWxpemF0aW9uIGtleXMgdG8gcmVwbGFjZSBhIGtleSB0byBhbm90aGVyXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGtleU1hcHBpbmckPzogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogX3Nob3dLZXlzJCBleHBvc2VkIGFzIGFuIE9ic2VydmFibGVcbiAgICovXG4gIHB1YmxpYyBzaG93S2V5cyQgPSB0aGlzLl9zaG93S2V5cyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoTE9DQUxJWkFUSU9OX0NPTkZJR1VSQVRJT05fVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IHN0b3JlPzogU3RvcmU8TG9jYWxpemF0aW9uT3ZlcnJpZGVTdG9yZT4pIHtcbiAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgIGlmICh0aGlzLnN0b3JlKSB7XG4gICAgICB0aGlzLmtleU1hcHBpbmckID0gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgICBzZWxlY3Qoc2VsZWN0TG9jYWxpemF0aW9uT3ZlcnJpZGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgaGFuZGxlIHRoZSBmYWxsYmFjayBsYW5ndWFnZSBoaWVyYXJjaHkgdG8gZmluZCBvdXQgZmFsbGJhY2sgbGFuZ3VhZ2UuXG4gICAqIHN1cHBvcnRlZExvY2FsZXMgbGFuZ3VhZ2UgaGFzIGhpZ2hlc3QgcHJpb3JpdHksIG5leHQgcHJpb3JpdHkgZ29lcyB0byBmYWxsYmFja0xvY2FsZXNNYXAgYW5kIGRlZmF1bHQgd291bGQgYmVcbiAgICogZmFsbGJhY2tMYW5ndWFnZS5cbiAgICogQHBhcmFtIGxhbmd1YWdlIFNlbGVjdGVkIGxhbmd1YWdlLlxuICAgKiBAcmV0dXJucyBzZWxlY3RlZCBsYW5ndWFnZSBpZiBzdXBwb3J0ZWQsIGZhbGxiYWNrIGxhbmd1YWdlIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tGYWxsYmFja0xvY2FsZXNNYXA8VCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4obGFuZ3VhZ2U6IFQpIHtcbiAgICBpZiAobGFuZ3VhZ2UgJiYgdGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMuaW5kZXhPZihsYW5ndWFnZSkgPT09IC0xKSB7XG4gICAgICBjb25zdCBjbG9zZXN0U3VwcG9ydGVkTGFuZ3VhZ2VDb2RlID0gdGhpcy5nZXRGaXJzdENsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUobGFuZ3VhZ2UpO1xuICAgICAgY29uc3QgZmFsbGJhY2tGb3JMYW5ndWFnZSA9IHRoaXMuZ2V0RmFsbGJhY2tNYXBMYW5nQ29kZShsYW5ndWFnZSk7XG4gICAgICBjb25zdCBmYWxsYmFja1N0cmF0ZWd5RGVidWcgPSBmYWxsYmFja0Zvckxhbmd1YWdlICYmICcgYXNzb2NpYXRlZCBmYWxsYmFjayBsYW5ndWFnZSAnIHx8XG4gICAgICAgIGNsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUgJiYgJyBjbG9zZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSAnIHx8XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5mYWxsYmFja0xhbmd1YWdlICYmICcgY29uZmlndXJlZCBkZWZhdWx0IGxhbmd1YWdlICc7XG4gICAgICBjb25zdCBmYWxsYmFja0xhbmcgPSBmYWxsYmFja0Zvckxhbmd1YWdlIHx8IGNsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUgfHwgdGhpcy5jb25maWd1cmF0aW9uLmZhbGxiYWNrTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2U7XG4gICAgICBpZiAobGFuZ3VhZ2UgIT09IGZhbGxiYWNrTGFuZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTm9uIHN1cHBvcnRlZCBsYW5ndWFnZXMgJHtsYW5ndWFnZX0gd2lsbCBmYWxsYmFjayB0byAke2ZhbGxiYWNrU3RyYXRlZ3lEZWJ1Z30gJHtmYWxsYmFja0xhbmd9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsbGJhY2tMYW5nO1xuICAgIH0gZWxzZSBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTGFuZ3VhZ2UgaXMgbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGxhbmd1YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGZhbGxiYWNrIGxhbmd1YWdlIGNhbiBiZSBwcm92aWRlZCBmcm9tIGZhbGxiYWNrTG9jYWxlc01hcC5cbiAgICogc3VwcG9ydGVkTG9jYWxlczogWydlbi1HQicsICdlbi1VUycsICdmci1GUiddLCBmYWxsYmFja0xvY2FsZXNNYXA6IHsnZW4tQ0EnOiAnZW4tVVMnLCAnZGUnOiAnZnItRlInfVxuICAgKiB0cmFuc2xhdGUgdG8gZW4tQ0EgLT4gZmFsbGJhY2sgdG8gZW4tVVMsIHRyYW5zbGF0ZSB0byBkZS1ERSAtPiBmYWxsYmFjayB0byBmci1GUlxuICAgKiB0cmFuc2xhdGUgdG8gZW4tTlogLT4gZmFsbGJhY2sgdG8gZW4tR0JcbiAgICogQHBhcmFtIGxhbmd1YWdlIFNlbGVjdGVkIGxhbmd1YWdlLlxuICAgKiBAcmV0dXJucyBGYWxsYmFjayBsYW5ndWFnZSBpZiBhdmFpbGFibGUsIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIGdldEZhbGxiYWNrTWFwTGFuZ0NvZGUobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmFsbGJhY2tMb2NhbGVzTWFwID0gdGhpcy5jb25maWd1cmF0aW9uLmZhbGxiYWNrTG9jYWxlc01hcDtcbiAgICBjb25zdCBbbG9jYWxlXSA9IGxhbmd1YWdlLnNwbGl0KHRoaXMubG9jYWxlU3BsaXRJZGVudGlmaWVyKTtcblxuICAgIHJldHVybiBmYWxsYmFja0xvY2FsZXNNYXAgJiYgKGZhbGxiYWNrTG9jYWxlc01hcFtsYW5ndWFnZV0gfHwgZmFsbGJhY2tMb2NhbGVzTWFwW2xvY2FsZV0pO1xuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgY2xvc2VzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2UgYXZhaWxhYmxlIGluY2FzZSBvZiBzZWxlY3RlZCBsYW5ndWFnZSBpcyBub3RcbiAgICogc3VwcG9ydGVkIGxhbmd1YWdlLlxuICAgKiBzdXBwb3J0ZWRMb2NhbGVzOiBbJ2VuLUdCJywgJ2VuLVVTJywgJ2ZyLUZSJ11cbiAgICogdHJhbnNsYXRlIHRvIGVuLUNBIC0+IGZhbGxiYWNrIHRvIGVuLUdCXG4gICAqIEBwYXJhbSBsYW5ndWFnZSBTZWxlY3RlZCBsYW5ndWFnZS5cbiAgICogQHJldHVybnMgQ2xvc2VzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2UgaWYgYXZhaWxhYmxlLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdENsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICBjb25zdCBbbG9jYWxlXSA9IGxhbmd1YWdlLnNwbGl0KHRoaXMubG9jYWxlU3BsaXRJZGVudGlmaWVyKTtcbiAgICBjb25zdCBmaXJzdENsb3Nlc3RSZWd4ID0gbmV3IFJlZ0V4cChgXiR7bG9jYWxlfSR7dGhpcy5sb2NhbGVTcGxpdElkZW50aWZpZXJ9P2AsICdpJyk7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMuZmluZCgoc3VwcG9ydGVkTGFuZykgPT4gZmlyc3RDbG9zZXN0UmVneC50ZXN0KHN1cHBvcnRlZExhbmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIHRyYW5zbGF0ZWQgdmFsdWVzIG9mIGEga2V5IHdoaWNoIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB0cmFuc2xhdGlvbktleSBLZXkgdG8gdHJhbnNsYXRlXG4gICAqIEBwYXJhbSBpbnRlcnBvbGF0ZVBhcmFtcyBPYmplY3QgdG8gdXNlIGluIHRyYW5zbGF0aW9uIGJpbmRpbmdcbiAgICogQHJldHVybnMgQSBzdHJlYW0gb2YgdGhlIHRyYW5zbGF0ZWQga2V5XG4gICAqL1xuICBwcml2YXRlIGdldFRyYW5zbGF0aW9uU3RyZWFtKHRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRlUGFyYW1zPzogb2JqZWN0KSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb24kID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbktleSwgaW50ZXJwb2xhdGVQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMuY29uZmlndXJhdGlvbi5kZWJ1Z01vZGUgPyBgJHt0cmFuc2xhdGlvbktleX0gLSAke3ZhbHVlfWAgOiB2YWx1ZSlcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uZW5hYmxlVHJhbnNsYXRpb25EZWFjdGl2YXRpb24pIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbiQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdHJhbnNsYXRpb24kLFxuICAgICAgdGhpcy5zaG93S2V5cyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIHNob3dLZXlzXSkgPT4gc2hvd0tleXMgPyB0cmFuc2xhdGlvbktleSA6IHZhbHVlKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBUcmFuc2xhdGVTZXJ2aWNlIGFuZCByZWdpc3RlcnMgbG9jYWxlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIGxldmVsLlxuICAgKi9cbiAgcHVibGljIGNvbmZpZ3VyZSgpIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY2hlY2tGYWxsYmFja0xvY2FsZXNNYXAodGhpcy5jb25maWd1cmF0aW9uLmxhbmd1YWdlIHx8IHRoaXMuY29uZmlndXJhdGlvbi5mYWxsYmFja0xhbmd1YWdlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuYWRkTGFuZ3ModGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5ndWFnZSk7XG4gICAgdGhpcy51c2VMYW5ndWFnZShsYW5ndWFnZSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciB0byBjYWxsIHRoZSBuZ3gtdHJhbnNsYXRlIHNlcnZpY2UgVHJhbnNsYXRlU2VydmljZSBtZXRob2QgZ2V0TGFuZ3MoKS5cbiAgICovXG4gIHB1YmxpYyBnZXRMYW5ndWFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXRMYW5ncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgdG8gY2FsbCB0aGUgbmd4LXRyYW5zbGF0ZSBzZXJ2aWNlIFRyYW5zbGF0ZVNlcnZpY2UgbWV0aG9kIHVzZShsYW5ndWFnZSkuXG4gICAqIEBwYXJhbSBsYW5ndWFnZVxuICAgKi9cbiAgcHVibGljIHVzZUxhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgbGFuZ3VhZ2UgPSB0aGlzLmNoZWNrRmFsbGJhY2tMb2NhbGVzTWFwKGxhbmd1YWdlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5ndWFnZSk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciB0byBnZXQgdGhlIG5neC10cmFuc2xhdGUgc2VydmljZSBUcmFuc2xhdGVTZXJ2aWNlIGN1cnJlbnRMYW5nLlxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRMYW5ndWFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgdGhlIG5neC10cmFuc2xhdGUgVHJhbnNsYXRlU2VydmljZSB1c2VkIGJ5IExvY2FsaXphdGlvblNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNsYXRlU2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgU2hvd0tleXMgbW9kZSBiZXR3ZWVuIGFjdGl2ZSBhbmQgaW5hY3RpdmUuXG4gICAqIEBwYXJhbSB2YWx1ZSBpZiBzcGVjaWZpZWQsIHNldCB0aGUgU2hvd0tleXMgbW9kZSB0byB2YWx1ZS4gSWYgbm90IHNwZWNpZmllZCwgdG9nZ2xlIHRoZSBTaG93S2V5cyBtb2RlLlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNob3dLZXlzKHZhbHVlPzogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmVuYWJsZVRyYW5zbGF0aW9uRGVhY3RpdmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zbGF0aW9uIGRlYWN0aXZhdGlvbiBpcyBub3QgZW5hYmxlZC4gUGxlYXNlIHNldCB0aGUgTG9jYWxpemF0aW9uQ29uZmlndXJhdGlvbiBwcm9wZXJ0eSBcImVuYWJsZVRyYW5zbGF0aW9uRGVhY3RpdmF0aW9uXCIgYWNjb3JkaW5nbHkuJyk7XG4gICAgfVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogIXRoaXMuc2hvd0tleXM7XG4gICAgdGhpcy5fc2hvd0tleXMkLm5leHQobmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBkZWJ1ZyBzaG93L2hpZGUgdHJhbnNsYXRpb24ga2V5cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0tleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dLZXlzJC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gb2JzZXJ2YWJsZSBvZiB0cmFuc2xhdGlvbiBrZXkgYWZ0ZXIgZ2xvYmFsIG1hcHBpbmdcbiAgICogQHBhcmFtIHJlcXVlc3RlZEtleSBPcmlnaW5hbCB0cmFuc2xhdGlvbiBrZXlcbiAgICovXG4gIHB1YmxpYyBnZXRLZXkocmVxdWVzdGVkS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5rZXlNYXBwaW5nJCkge1xuICAgICAgcmV0dXJuIHRoaXMua2V5TWFwcGluZyQucGlwZShcbiAgICAgICAgbWFwKChrZXlNYXBwaW5nKSA9PiBrZXlNYXBwaW5nICYmIGtleU1hcHBpbmdbcmVxdWVzdGVkS2V5XSB8fCByZXF1ZXN0ZWRLZXkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YocmVxdWVzdGVkS2V5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmVhbSBvZiB0cmFuc2xhdGVkIHZhbHVlcyBvZiBhIGtleSB3aGljaCB1cGRhdGVzIHdoZW5ldmVyIHRoZSBsYW5ndWFnZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0ga2V5IEtleSB0byB0cmFuc2xhdGVcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIE9iamVjdCB0byB1c2UgaW4gdHJhbnNsYXRpb24gYmluZGluZ1xuICAgKiBAcmV0dXJucyBBIHN0cmVhbSBvZiB0aGUgdHJhbnNsYXRlZCBrZXlcbiAgICovXG4gIHB1YmxpYyB0cmFuc2xhdGUoa2V5OiBzdHJpbmcsIGludGVycG9sYXRlUGFyYW1zPzogb2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0S2V5KGtleSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25LZXkpID0+IHRoaXMuZ2V0VHJhbnNsYXRpb25TdHJlYW0odHJhbnNsYXRpb25LZXksIGludGVycG9sYXRlUGFyYW1zKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaURBQWlEO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQTZCLDBCQUEwQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBRXhFOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBb0I5QixZQUNtQixnQkFBa0MsRUFDbEMsTUFBcUIsRUFDcUIsYUFBd0MsRUFDdEUsS0FBd0M7UUFIcEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3FCLGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtRQUN0RSxVQUFLLEdBQUwsS0FBSyxDQUFtQztRQXRCdEQsMEJBQXFCLEdBQVcsR0FBRyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsZ0VBQWdFO1FBQy9DLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU96RDs7V0FFRztR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S0c7SUFDSSxTQUFTLENBQUMsR0FBVyxFQUFFLGlCQUEwQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUMxQixTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUMzRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7aUlBL01VLG1CQUFtQiwrRUF1QnBCLGdDQUFnQztxSUF2Qi9CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7MEJBd0JOLE1BQU07MkJBQUMsZ0NBQWdDOzswQkFDdkMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXMgKi9cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQG8zci9sb2dnZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvY2FsaXphdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb3JlL2xvY2FsaXphdGlvbi5jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IExvY2FsaXphdGlvbk92ZXJyaWRlU3RvcmUsIHNlbGVjdExvY2FsaXphdGlvbk92ZXJyaWRlIH0gZnJvbSAnLi4vc3RvcmVzL2luZGV4JztcbmltcG9ydCB7IExPQ0FMSVpBVElPTl9DT05GSUdVUkFUSU9OX1RPS0VOIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24udG9rZW4nO1xuXG4vKipcbiAqIFNlcnZpY2Ugd2hpY2ggaXMgd3JhcHBpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgb2YgVHJhbnNsYXRlU2VydmljZSBmcm9tIG5neC10cmFuc2xhdGVcbiAqIEFueSBhcHBsaWNhdGlvbiB3aWxsaW5nIHRvIHVzZSBsb2NhbGl6YXRpb24ganVzdCBuZWVkcyB0byBpbmplY3QgTG9jYWxpemF0aW9uU2VydmljZVxuICogaW4gdGhlIHJvb3QgY29tcG9uZW50IGFuZCBjYWxsIGl0cyBjb25maWd1cmUoKSBtZXRob2QuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNwbGl0SWRlbnRpZmllcjogc3RyaW5nID0gJy0nO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBzdWJqZWN0IHRoYXQgd2UgdXNlIHRvIHRyYWNrIGNoYW5nZXMgYmV0d2VlbiBrZXlzIG9ubHkgYW5kIHRyYW5zbGF0aW9uIG1vZGVcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvd0tleXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIE1hcCBvZiBsb2NhbGl6YXRpb24ga2V5cyB0byByZXBsYWNlIGEga2V5IHRvIGFub3RoZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5TWFwcGluZyQ/OiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBfc2hvd0tleXMkIGV4cG9zZWQgYXMgYW4gT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIHNob3dLZXlzJCA9IHRoaXMuX3Nob3dLZXlzJC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTElaQVRJT05fQ09ORklHVVJBVElPTl9UT0tFTikgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uOiBMb2NhbGl6YXRpb25Db25maWd1cmF0aW9uLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU/OiBTdG9yZTxMb2NhbGl6YXRpb25PdmVycmlkZVN0b3JlPlxuICApIHtcbiAgICB0aGlzLmNvbmZpZ3VyZSgpO1xuICAgIGlmICh0aGlzLnN0b3JlKSB7XG4gICAgICB0aGlzLmtleU1hcHBpbmckID0gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgICBzZWxlY3Qoc2VsZWN0TG9jYWxpemF0aW9uT3ZlcnJpZGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgaGFuZGxlIHRoZSBmYWxsYmFjayBsYW5ndWFnZSBoaWVyYXJjaHkgdG8gZmluZCBvdXQgZmFsbGJhY2sgbGFuZ3VhZ2UuXG4gICAqIHN1cHBvcnRlZExvY2FsZXMgbGFuZ3VhZ2UgaGFzIGhpZ2hlc3QgcHJpb3JpdHksIG5leHQgcHJpb3JpdHkgZ29lcyB0byBmYWxsYmFja0xvY2FsZXNNYXAgYW5kIGRlZmF1bHQgd291bGQgYmVcbiAgICogZmFsbGJhY2tMYW5ndWFnZS5cbiAgICogQHBhcmFtIGxhbmd1YWdlIFNlbGVjdGVkIGxhbmd1YWdlLlxuICAgKiBAcmV0dXJucyBzZWxlY3RlZCBsYW5ndWFnZSBpZiBzdXBwb3J0ZWQsIGZhbGxiYWNrIGxhbmd1YWdlIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tGYWxsYmFja0xvY2FsZXNNYXA8VCBleHRlbmRzIHN0cmluZyB8IHVuZGVmaW5lZD4obGFuZ3VhZ2U6IFQpIHtcbiAgICBpZiAobGFuZ3VhZ2UgJiYgdGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMuaW5kZXhPZihsYW5ndWFnZSkgPT09IC0xKSB7XG4gICAgICBjb25zdCBjbG9zZXN0U3VwcG9ydGVkTGFuZ3VhZ2VDb2RlID0gdGhpcy5nZXRGaXJzdENsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUobGFuZ3VhZ2UpO1xuICAgICAgY29uc3QgZmFsbGJhY2tGb3JMYW5ndWFnZSA9IHRoaXMuZ2V0RmFsbGJhY2tNYXBMYW5nQ29kZShsYW5ndWFnZSk7XG4gICAgICBjb25zdCBmYWxsYmFja1N0cmF0ZWd5RGVidWcgPSBmYWxsYmFja0Zvckxhbmd1YWdlICYmICcgYXNzb2NpYXRlZCBmYWxsYmFjayBsYW5ndWFnZSAnIHx8XG4gICAgICAgIGNsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUgJiYgJyBjbG9zZXN0IHN1cHBvcnRlZCBsYW5ndWFnZSAnIHx8XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5mYWxsYmFja0xhbmd1YWdlICYmICcgY29uZmlndXJlZCBkZWZhdWx0IGxhbmd1YWdlICc7XG4gICAgICBjb25zdCBmYWxsYmFja0xhbmcgPSBmYWxsYmFja0Zvckxhbmd1YWdlIHx8IGNsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUgfHwgdGhpcy5jb25maWd1cmF0aW9uLmZhbGxiYWNrTGFuZ3VhZ2UgfHwgbGFuZ3VhZ2U7XG4gICAgICBpZiAobGFuZ3VhZ2UgIT09IGZhbGxiYWNrTGFuZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTm9uIHN1cHBvcnRlZCBsYW5ndWFnZXMgJHtsYW5ndWFnZX0gd2lsbCBmYWxsYmFjayB0byAke2ZhbGxiYWNrU3RyYXRlZ3lEZWJ1Z30gJHtmYWxsYmFja0xhbmd9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsbGJhY2tMYW5nO1xuICAgIH0gZWxzZSBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTGFuZ3VhZ2UgaXMgbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGxhbmd1YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGZhbGxiYWNrIGxhbmd1YWdlIGNhbiBiZSBwcm92aWRlZCBmcm9tIGZhbGxiYWNrTG9jYWxlc01hcC5cbiAgICogc3VwcG9ydGVkTG9jYWxlczogWydlbi1HQicsICdlbi1VUycsICdmci1GUiddLCBmYWxsYmFja0xvY2FsZXNNYXA6IHsnZW4tQ0EnOiAnZW4tVVMnLCAnZGUnOiAnZnItRlInfVxuICAgKiB0cmFuc2xhdGUgdG8gZW4tQ0EgLT4gZmFsbGJhY2sgdG8gZW4tVVMsIHRyYW5zbGF0ZSB0byBkZS1ERSAtPiBmYWxsYmFjayB0byBmci1GUlxuICAgKiB0cmFuc2xhdGUgdG8gZW4tTlogLT4gZmFsbGJhY2sgdG8gZW4tR0JcbiAgICogQHBhcmFtIGxhbmd1YWdlIFNlbGVjdGVkIGxhbmd1YWdlLlxuICAgKiBAcmV0dXJucyBGYWxsYmFjayBsYW5ndWFnZSBpZiBhdmFpbGFibGUsIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIGdldEZhbGxiYWNrTWFwTGFuZ0NvZGUobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmFsbGJhY2tMb2NhbGVzTWFwID0gdGhpcy5jb25maWd1cmF0aW9uLmZhbGxiYWNrTG9jYWxlc01hcDtcbiAgICBjb25zdCBbbG9jYWxlXSA9IGxhbmd1YWdlLnNwbGl0KHRoaXMubG9jYWxlU3BsaXRJZGVudGlmaWVyKTtcblxuICAgIHJldHVybiBmYWxsYmFja0xvY2FsZXNNYXAgJiYgKGZhbGxiYWNrTG9jYWxlc01hcFtsYW5ndWFnZV0gfHwgZmFsbGJhY2tMb2NhbGVzTWFwW2xvY2FsZV0pO1xuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgY2xvc2VzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2UgYXZhaWxhYmxlIGluY2FzZSBvZiBzZWxlY3RlZCBsYW5ndWFnZSBpcyBub3RcbiAgICogc3VwcG9ydGVkIGxhbmd1YWdlLlxuICAgKiBzdXBwb3J0ZWRMb2NhbGVzOiBbJ2VuLUdCJywgJ2VuLVVTJywgJ2ZyLUZSJ11cbiAgICogdHJhbnNsYXRlIHRvIGVuLUNBIC0+IGZhbGxiYWNrIHRvIGVuLUdCXG4gICAqIEBwYXJhbSBsYW5ndWFnZSBTZWxlY3RlZCBsYW5ndWFnZS5cbiAgICogQHJldHVybnMgQ2xvc2VzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2UgaWYgYXZhaWxhYmxlLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaXJzdENsb3Nlc3RTdXBwb3J0ZWRMYW5ndWFnZUNvZGUobGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cbiAgICBjb25zdCBbbG9jYWxlXSA9IGxhbmd1YWdlLnNwbGl0KHRoaXMubG9jYWxlU3BsaXRJZGVudGlmaWVyKTtcbiAgICBjb25zdCBmaXJzdENsb3Nlc3RSZWd4ID0gbmV3IFJlZ0V4cChgXiR7bG9jYWxlfSR7dGhpcy5sb2NhbGVTcGxpdElkZW50aWZpZXJ9P2AsICdpJyk7XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMuZmluZCgoc3VwcG9ydGVkTGFuZykgPT4gZmlyc3RDbG9zZXN0UmVneC50ZXN0KHN1cHBvcnRlZExhbmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIHRyYW5zbGF0ZWQgdmFsdWVzIG9mIGEga2V5IHdoaWNoIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB0cmFuc2xhdGlvbktleSBLZXkgdG8gdHJhbnNsYXRlXG4gICAqIEBwYXJhbSBpbnRlcnBvbGF0ZVBhcmFtcyBPYmplY3QgdG8gdXNlIGluIHRyYW5zbGF0aW9uIGJpbmRpbmdcbiAgICogQHJldHVybnMgQSBzdHJlYW0gb2YgdGhlIHRyYW5zbGF0ZWQga2V5XG4gICAqL1xuICBwcml2YXRlIGdldFRyYW5zbGF0aW9uU3RyZWFtKHRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRlUGFyYW1zPzogb2JqZWN0KSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb24kID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbktleSwgaW50ZXJwb2xhdGVQYXJhbXMpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMuY29uZmlndXJhdGlvbi5kZWJ1Z01vZGUgPyBgJHt0cmFuc2xhdGlvbktleX0gLSAke3ZhbHVlfWAgOiB2YWx1ZSlcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uZW5hYmxlVHJhbnNsYXRpb25EZWFjdGl2YXRpb24pIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbiQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdHJhbnNsYXRpb24kLFxuICAgICAgdGhpcy5zaG93S2V5cyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbdmFsdWUsIHNob3dLZXlzXSkgPT4gc2hvd0tleXMgPyB0cmFuc2xhdGlvbktleSA6IHZhbHVlKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBUcmFuc2xhdGVTZXJ2aWNlIGFuZCByZWdpc3RlcnMgbG9jYWxlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGFwcGxpY2F0aW9uIGxldmVsLlxuICAgKi9cbiAgcHVibGljIGNvbmZpZ3VyZSgpIHtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuY2hlY2tGYWxsYmFja0xvY2FsZXNNYXAodGhpcy5jb25maWd1cmF0aW9uLmxhbmd1YWdlIHx8IHRoaXMuY29uZmlndXJhdGlvbi5mYWxsYmFja0xhbmd1YWdlKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuYWRkTGFuZ3ModGhpcy5jb25maWd1cmF0aW9uLnN1cHBvcnRlZExvY2FsZXMpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5ndWFnZSk7XG4gICAgdGhpcy51c2VMYW5ndWFnZShsYW5ndWFnZSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhlIHRyYW5zbGF0aW9uIGRlYWN0aXZhdGlvbiBlbmFibGVkXG4gICAqL1xuICBwdWJsaWMgaXNUcmFuc2xhdGlvbkRlYWN0aXZhdGlvbkVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5lbmFibGVUcmFuc2xhdGlvbkRlYWN0aXZhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIHRvIGNhbGwgdGhlIG5neC10cmFuc2xhdGUgc2VydmljZSBUcmFuc2xhdGVTZXJ2aWNlIG1ldGhvZCBnZXRMYW5ncygpLlxuICAgKi9cbiAgcHVibGljIGdldExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldExhbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlciB0byBjYWxsIHRoZSBuZ3gtdHJhbnNsYXRlIHNlcnZpY2UgVHJhbnNsYXRlU2VydmljZSBtZXRob2QgdXNlKGxhbmd1YWdlKS5cbiAgICogQHBhcmFtIGxhbmd1YWdlXG4gICAqL1xuICBwdWJsaWMgdXNlTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICBsYW5ndWFnZSA9IHRoaXMuY2hlY2tGYWxsYmFja0xvY2FsZXNNYXAobGFuZ3VhZ2UpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmd1YWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIHRvIGdldCB0aGUgbmd4LXRyYW5zbGF0ZSBzZXJ2aWNlIFRyYW5zbGF0ZVNlcnZpY2UgY3VycmVudExhbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExhbmd1YWdlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpbnN0YW5jZSBvZiB0aGUgbmd4LXRyYW5zbGF0ZSBUcmFuc2xhdGVTZXJ2aWNlIHVzZWQgYnkgTG9jYWxpemF0aW9uU2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGVTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBTaG93S2V5cyBtb2RlIGJldHdlZW4gYWN0aXZlIGFuZCBpbmFjdGl2ZS5cbiAgICogQHBhcmFtIHZhbHVlIGlmIHNwZWNpZmllZCwgc2V0IHRoZSBTaG93S2V5cyBtb2RlIHRvIHZhbHVlLiBJZiBub3Qgc3BlY2lmaWVkLCB0b2dnbGUgdGhlIFNob3dLZXlzIG1vZGUuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlU2hvd0tleXModmFsdWU/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uZW5hYmxlVHJhbnNsYXRpb25EZWFjdGl2YXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNsYXRpb24gZGVhY3RpdmF0aW9uIGlzIG5vdCBlbmFibGVkLiBQbGVhc2Ugc2V0IHRoZSBMb2NhbGl6YXRpb25Db25maWd1cmF0aW9uIHByb3BlcnR5IFwiZW5hYmxlVHJhbnNsYXRpb25EZWFjdGl2YXRpb25cIiBhY2NvcmRpbmdseS4nKTtcbiAgICB9XG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAhdGhpcy5zaG93S2V5cztcbiAgICB0aGlzLl9zaG93S2V5cyQubmV4dChuZXdWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGRlYnVnIHNob3cvaGlkZSB0cmFuc2xhdGlvbiBrZXlzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93S2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0tleXMkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBvYnNlcnZhYmxlIG9mIHRyYW5zbGF0aW9uIGtleSBhZnRlciBnbG9iYWwgbWFwcGluZ1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkS2V5IE9yaWdpbmFsIHRyYW5zbGF0aW9uIGtleVxuICAgKi9cbiAgcHVibGljIGdldEtleShyZXF1ZXN0ZWRLZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmtleU1hcHBpbmckKSB7XG4gICAgICByZXR1cm4gdGhpcy5rZXlNYXBwaW5nJC5waXBlKFxuICAgICAgICBtYXAoKGtleU1hcHBpbmcpID0+IGtleU1hcHBpbmcgJiYga2V5TWFwcGluZ1tyZXF1ZXN0ZWRLZXldIHx8IHJlcXVlc3RlZEtleSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihyZXF1ZXN0ZWRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIHRyYW5zbGF0ZWQgdmFsdWVzIG9mIGEga2V5IHdoaWNoIHVwZGF0ZXMgd2hlbmV2ZXIgdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBrZXkgS2V5IHRvIHRyYW5zbGF0ZVxuICAgKiBAcGFyYW0gaW50ZXJwb2xhdGVQYXJhbXMgT2JqZWN0IHRvIHVzZSBpbiB0cmFuc2xhdGlvbiBiaW5kaW5nXG4gICAqIEByZXR1cm5zIEEgc3RyZWFtIG9mIHRoZSB0cmFuc2xhdGVkIGtleVxuICAgKi9cbiAgcHVibGljIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgaW50ZXJwb2xhdGVQYXJhbXM/OiBvYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRLZXkoa2V5KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbktleSkgPT4gdGhpcy5nZXRUcmFuc2xhdGlvblN0cmVhbSh0cmFuc2xhdGlvbktleSwgaW50ZXJwb2xhdGVQYXJhbXMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,15 +1,15 @@
1
- import { immutablePrimitive, deepFill, otterComponentInfoPropertyName, filterMessageContent } from '@o3r/core';
1
+ import { immutablePrimitive, deepFill, otterComponentInfoPropertyName, sendOtterMessage, filterMessageContent } from '@o3r/core';
2
2
  import * as i0 from '@angular/core';
3
3
  import { InjectionToken, Injectable, Optional, Inject, NgModule, Directive, Input, Pipe, LOCALE_ID } from '@angular/core';
4
4
  import * as i2 from '@ngx-translate/core';
5
5
  import { TranslateCompiler, TranslateDirective, TranslatePipe, TranslateModule, TranslateLoader } from '@ngx-translate/core';
6
6
  import { IntlMessageFormat } from 'intl-messageformat';
7
- import { BehaviorSubject, combineLatest, of, from, lastValueFrom, Subscription, fromEvent } from 'rxjs';
8
- import { map, distinctUntilChanged, switchMap, shareReplay, startWith, catchError, take } from 'rxjs/operators';
7
+ import { BehaviorSubject, combineLatest, of, from, lastValueFrom, Subscription, firstValueFrom, fromEvent } from 'rxjs';
9
8
  import * as i3 from '@ngrx/store';
10
9
  import { createAction, props, on, createReducer, StoreModule, createFeatureSelector, createSelector, select } from '@ngrx/store';
11
10
  import * as i1 from '@o3r/logger';
12
11
  import { LoggerService } from '@o3r/logger';
12
+ import { map, distinctUntilChanged, switchMap, shareReplay, startWith, catchError } from 'rxjs/operators';
13
13
  import * as i2$1 from '@angular/cdk/bidi';
14
14
  import { Directionality, DIR_DOCUMENT, BidiModule } from '@angular/cdk/bidi';
15
15
  import { CurrencyPipe, DatePipe, DecimalPipe, CommonModule } from '@angular/common';
@@ -304,6 +304,12 @@ class LocalizationService {
304
304
  this.translateService.setDefaultLang(language);
305
305
  this.useLanguage(language);
306
306
  }
307
+ /**
308
+ * Is the translation deactivation enabled
309
+ */
310
+ isTranslationDeactivationEnabled() {
311
+ return this.configuration.enableTranslationDeactivation;
312
+ }
307
313
  /**
308
314
  * Wrapper to call the ngx-translate service TranslateService method getLangs().
309
315
  */
@@ -864,8 +870,16 @@ const translateLoaderProvider = {
864
870
  };
865
871
 
866
872
  class OtterLocalizationDevtools {
867
- constructor(localizationService) {
873
+ constructor(localizationService, translateCompiler, appRef) {
868
874
  this.localizationService = localizationService;
875
+ this.translateCompiler = translateCompiler;
876
+ this.appRef = appRef;
877
+ }
878
+ /**
879
+ * Is the translation deactivation enabled
880
+ */
881
+ isTranslationDeactivationEnabled() {
882
+ return this.localizationService.isTranslationDeactivationEnabled();
869
883
  }
870
884
  /**
871
885
  * Show localization keys
@@ -873,6 +887,7 @@ class OtterLocalizationDevtools {
873
887
  */
874
888
  showLocalizationKeys(value) {
875
889
  this.localizationService.toggleShowKeys(value);
890
+ this.appRef.tick();
876
891
  }
877
892
  /**
878
893
  * Returns the current language
@@ -892,16 +907,56 @@ class OtterLocalizationDevtools {
892
907
  fn(lang);
893
908
  });
894
909
  }
895
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
910
+ /**
911
+ * Switch the current language to the specified value
912
+ * @param language new language to switch to
913
+ */
914
+ async switchLanguage(language) {
915
+ await lastValueFrom(this.localizationService.useLanguage(language));
916
+ this.appRef.tick();
917
+ }
918
+ /**
919
+ * Updates the specified localization key/values for the current language.
920
+ *
921
+ * Recommendation: To be used with a small number of keys to update to avoid performance issues.
922
+ * @param keyValues key/values to update
923
+ * @param language if not provided, the current language value
924
+ */
925
+ updateLocalizationKeys(keyValues, language) {
926
+ const lang = language || this.getCurrentLanguage();
927
+ const translateService = this.localizationService.getTranslateService();
928
+ Object.entries(keyValues).forEach(([key, value]) => {
929
+ translateService.set(key, value, lang);
930
+ });
931
+ this.appRef.tick();
932
+ }
933
+ /**
934
+ * Reload a language from the language file
935
+ * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490
936
+ * @param language language to reload
937
+ */
938
+ async reloadLocalizationKeys(language) {
939
+ const lang = language || this.getCurrentLanguage();
940
+ if (this.translateCompiler.clearCache) {
941
+ this.translateCompiler.clearCache();
942
+ }
943
+ const initialLocs = await lastValueFrom(this.localizationService
944
+ .getTranslateService()
945
+ .reloadLang(lang));
946
+ this.localizationService.getTranslateService().setTranslation(language || this.getCurrentLanguage(), initialLocs);
947
+ this.appRef.tick();
948
+ }
949
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, deps: [{ token: LocalizationService }, { token: i2.TranslateCompiler }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
896
950
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools }); }
897
951
  }
898
952
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: OtterLocalizationDevtools, decorators: [{
899
953
  type: Injectable
900
- }], ctorParameters: () => [{ type: LocalizationService }] });
954
+ }], ctorParameters: () => [{ type: LocalizationService }, { type: i2.TranslateCompiler }, { type: i0.ApplicationRef }] });
901
955
 
902
956
  const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS = {
903
957
  isActivatedOnBootstrap: false,
904
- isActivatedOnBootstrapWhenCMSContext: true
958
+ isActivatedOnBootstrapWhenCMSContext: true,
959
+ metadataFilePath: './metadata/localisation.metadata.json'
905
960
  };
906
961
  const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localization Devtools options');
907
962
 
@@ -909,10 +964,8 @@ const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken('Otter Localizati
909
964
  class LocalizationDevtoolsConsoleService {
910
965
  /** Name of the Window property to access to the devtools */
911
966
  static { this.windowModuleName = 'localization'; }
912
- constructor(localizationDevtools, localizationService, appRef, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
967
+ constructor(localizationDevtools, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
913
968
  this.localizationDevtools = localizationDevtools;
914
- this.localizationService = localizationService;
915
- this.appRef = appRef;
916
969
  this.options = options;
917
970
  if (this.options.isActivatedOnBootstrap
918
971
  || (this.options.isActivatedOnBootstrapWhenCMSContext
@@ -929,12 +982,17 @@ class LocalizationDevtoolsConsoleService {
929
982
  windowWithDevtools._OTTER_DEVTOOLS_[LocalizationDevtoolsConsoleService.windowModuleName] = this;
930
983
  console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);
931
984
  }
985
+ /**
986
+ * @inheritdoc
987
+ */
988
+ isTranslationDeactivationEnabled() {
989
+ return this.localizationDevtools.isTranslationDeactivationEnabled();
990
+ }
932
991
  /**
933
992
  * @inheritdoc
934
993
  */
935
994
  showLocalizationKeys(value) {
936
995
  this.localizationDevtools.showLocalizationKeys(value);
937
- this.appRef.tick();
938
996
  }
939
997
  /**
940
998
  * @inheritdoc
@@ -948,8 +1006,7 @@ class LocalizationDevtoolsConsoleService {
948
1006
  */
949
1007
  async switchLanguage(language) {
950
1008
  const previous = this.localizationDevtools.getCurrentLanguage();
951
- await lastValueFrom(this.localizationService.useLanguage(language));
952
- this.appRef.tick();
1009
+ await this.localizationDevtools.switchLanguage(language);
953
1010
  const current = this.localizationDevtools.getCurrentLanguage();
954
1011
  return {
955
1012
  requested: language,
@@ -967,25 +1024,20 @@ class LocalizationDevtoolsConsoleService {
967
1024
  * @inheritdoc
968
1025
  */
969
1026
  updateLocalizationKeys(keyValues, language) {
970
- this.localizationService.getTranslateService().setTranslation(language || this.localizationDevtools.getCurrentLanguage(), keyValues, true);
1027
+ return this.localizationDevtools.updateLocalizationKeys(keyValues, language);
971
1028
  }
972
1029
  /**
973
1030
  * @inheritdoc
974
1031
  */
975
- async reloadLocalizationKeys(language) {
976
- const lang = language || this.localizationDevtools.getCurrentLanguage();
977
- const initialLocs = await lastValueFrom(this.localizationService
978
- .getTranslateService()
979
- .reloadLang(lang)
980
- .pipe(take(1)));
981
- return this.updateLocalizationKeys(initialLocs, lang);
1032
+ reloadLocalizationKeys(language) {
1033
+ return this.localizationDevtools.reloadLocalizationKeys(language);
982
1034
  }
983
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: OtterLocalizationDevtools }, { token: LocalizationService }, { token: i0.ApplicationRef }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1035
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsConsoleService, deps: [{ token: OtterLocalizationDevtools }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
984
1036
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsConsoleService }); }
985
1037
  }
986
1038
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsConsoleService, decorators: [{
987
1039
  type: Injectable
988
- }], ctorParameters: () => [{ type: OtterLocalizationDevtools }, { type: LocalizationService }, { type: i0.ApplicationRef }, { type: undefined, decorators: [{
1040
+ }], ctorParameters: () => [{ type: OtterLocalizationDevtools }, { type: undefined, decorators: [{
989
1041
  type: Optional
990
1042
  }, {
991
1043
  type: Inject,
@@ -993,19 +1045,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
993
1045
  }] }] });
994
1046
 
995
1047
  const isLocalizationMessage = (message) => {
996
- return message && message.dataType === 'displayLocalizationKeys';
1048
+ return message && (message.dataType === 'displayLocalizationKeys'
1049
+ || message.dataType === 'languages'
1050
+ || message.dataType === 'switchLanguage'
1051
+ || message.dataType === 'localizations'
1052
+ || message.dataType === 'updateLocalization'
1053
+ || message.dataType === 'requestMessages'
1054
+ || message.dataType === 'connect'
1055
+ || message.dataType === 'reloadLocalizationKeys'
1056
+ || message.dataType === 'isTranslationDeactivationEnabled'
1057
+ || message.dataType === 'getTranslationValuesContentMessage');
997
1058
  };
998
1059
  class LocalizationDevtoolsMessageService {
999
- constructor(logger, appRef, localizationDevTools, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
1060
+ constructor(logger, localizationDevTools, localizationService, options = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS) {
1000
1061
  this.logger = logger;
1001
- this.appRef = appRef;
1002
1062
  this.localizationDevTools = localizationDevTools;
1063
+ this.localizationService = localizationService;
1003
1064
  this.options = options;
1004
1065
  this.subscriptions = new Subscription();
1066
+ this.sendMessage = (sendOtterMessage);
1067
+ this.options = {
1068
+ ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,
1069
+ ...this.options
1070
+ };
1005
1071
  if (this.options.isActivatedOnBootstrap) {
1006
1072
  this.activate();
1007
1073
  }
1008
1074
  }
1075
+ async sendLocalizationsMetadata() {
1076
+ const metadata = await (await fetch(this.options.metadataFilePath)).json();
1077
+ this.sendMessage('localizations', {
1078
+ localizations: metadata
1079
+ });
1080
+ }
1081
+ /**
1082
+ * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension
1083
+ * @param only restricted list of messages to re-send
1084
+ */
1085
+ async handleReEmitRequest(only) {
1086
+ if (!only || only.includes('localizations')) {
1087
+ void this.sendLocalizationsMetadata();
1088
+ }
1089
+ if (!only || only.includes('switchLanguage')) {
1090
+ this.sendMessage('switchLanguage', { language: this.localizationDevTools.getCurrentLanguage() });
1091
+ }
1092
+ if (!only || only.includes('languages')) {
1093
+ this.sendMessage('languages', { languages: this.localizationService.getLanguages() });
1094
+ }
1095
+ if (!only || only.includes('getTranslationValuesContentMessage')) {
1096
+ this.sendMessage('getTranslationValuesContentMessage', {
1097
+ translations: await firstValueFrom(this.localizationService.getTranslateService().getTranslation(this.localizationService.getCurrentLanguage()))
1098
+ });
1099
+ }
1100
+ if (!only || only.includes('isTranslationDeactivationEnabled')) {
1101
+ this.sendMessage('isTranslationDeactivationEnabled', { enabled: this.localizationService.isTranslationDeactivationEnabled() });
1102
+ }
1103
+ }
1009
1104
  /**
1010
1105
  * Function to handle the incoming messages from Otter Chrome DevTools extension
1011
1106
  * @param event Event coming from the Otter Chrome DevTools extension
@@ -1020,7 +1115,24 @@ class LocalizationDevtoolsMessageService {
1020
1115
  }
1021
1116
  case 'displayLocalizationKeys': {
1022
1117
  this.localizationDevTools.showLocalizationKeys(message.toggle);
1023
- this.appRef.tick();
1118
+ break;
1119
+ }
1120
+ case 'requestMessages': {
1121
+ void this.handleReEmitRequest(message.only);
1122
+ break;
1123
+ }
1124
+ case 'switchLanguage': {
1125
+ void this.localizationDevTools.switchLanguage(message.language);
1126
+ break;
1127
+ }
1128
+ case 'updateLocalization': {
1129
+ void this.localizationDevTools.updateLocalizationKeys({
1130
+ [message.key]: message.value
1131
+ }, message.lang);
1132
+ break;
1133
+ }
1134
+ case 'reloadLocalizationKeys': {
1135
+ void this.localizationDevTools.reloadLocalizationKeys(message.lang);
1024
1136
  break;
1025
1137
  }
1026
1138
  default: {
@@ -1042,12 +1154,12 @@ class LocalizationDevtoolsMessageService {
1042
1154
  ngOnDestroy() {
1043
1155
  this.subscriptions.unsubscribe();
1044
1156
  }
1045
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsMessageService, deps: [{ token: i1.LoggerService }, { token: i0.ApplicationRef }, { token: OtterLocalizationDevtools }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1157
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsMessageService, deps: [{ token: i1.LoggerService }, { token: OtterLocalizationDevtools }, { token: LocalizationService }, { token: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1046
1158
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsMessageService }); }
1047
1159
  }
1048
1160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LocalizationDevtoolsMessageService, decorators: [{
1049
1161
  type: Injectable
1050
- }], ctorParameters: () => [{ type: i1.LoggerService }, { type: i0.ApplicationRef }, { type: OtterLocalizationDevtools }, { type: undefined, decorators: [{
1162
+ }], ctorParameters: () => [{ type: i1.LoggerService }, { type: OtterLocalizationDevtools }, { type: LocalizationService }, { type: undefined, decorators: [{
1051
1163
  type: Optional
1052
1164
  }, {
1053
1165
  type: Inject,