rpx-xui-translation 1.0.2 → 1.0.3-angular-upgrade-17-rc

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.
@@ -0,0 +1,10 @@
1
+ export const matchCase = (str1, str2) => {
2
+ if (str1.length === 0 || str2.length === 0) {
3
+ return str2;
4
+ }
5
+ if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {
6
+ return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;
7
+ }
8
+ return str2.toLowerCase();
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtY2FzZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ycHgteHVpLXRyYW5zbGF0aW9uL3NyYy9saWIvaGVscGVycy9tYXRjaC1jYXNlL21hdGNoLWNhc2UuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBtYXRjaENhc2UgPSAoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpID0+IHtcbiAgaWYgKHN0cjEubGVuZ3RoID09PSAwIHx8IHN0cjIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0cjI7XG4gIH1cblxuICBpZiAoc3RyMS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSA9PT0gc3RyMS5jaGFyQXQoMCkpIHtcbiAgICByZXR1cm4gYCR7c3RyMi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke3N0cjIuc2xpY2UoMSl9YDtcbiAgfVxuICByZXR1cm4gc3RyMi50b0xvd2VyQ2FzZSgpO1xufTtcbiJdfQ==
@@ -8,4 +8,4 @@ export const replacePlaceholders = (input, replacements) => {
8
8
  });
9
9
  return input;
10
10
  };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1wbGFjZWhvbGRlcnMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcnB4LXh1aS10cmFuc2xhdGlvbi9zcmMvbGliL2hlbHBlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYSxFQUFFLFlBQTBCLEVBQUUsRUFBRTtJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3hDLHdHQUF3RztRQUN4RyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwbGFjZW1lbnRzIH0gZnJvbSAnLi4vLi4vcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgcmVwbGFjZVBsYWNlaG9sZGVycyA9IChpbnB1dDogc3RyaW5nLCByZXBsYWNlbWVudHM6IFJlcGxhY2VtZW50cykgPT4ge1xuICBPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIC8vIElkZWFsbHkgdXNlIHJlcGxhY2VBbGwgaGVyZSwgYnV0IHRoYXQgaXNuJ3QgZnVsbHkgY29tcGF0aWJsZSB3aXRoIHRhcmdldGVkIGJyb3dzZXJzIGFuZCBwYWNrYWdpbmcgeWV0XG4gICAgY29uc3Qgc2VhcmNoID0gYCUke2tleX0lYDtcbiAgICB3aGlsZSAoaW5wdXQuaW5kZXhPZihzZWFyY2gpICE9PSAtMSkge1xuICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKHNlYXJjaCwgcmVwbGFjZW1lbnRzW2tleV0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlucHV0O1xufTtcbiJdfQ==
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1wbGFjZWhvbGRlcnMuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcnB4LXh1aS10cmFuc2xhdGlvbi9zcmMvbGliL2hlbHBlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYSxFQUFFLFlBQTBCLEVBQUUsRUFBRTtJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3hDLHdHQUF3RztRQUN4RyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxhY2VtZW50cyB9IGZyb20gJy4uLy4uL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHJlcGxhY2VQbGFjZWhvbGRlcnMgPSAoaW5wdXQ6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBSZXBsYWNlbWVudHMpID0+IHtcbiAgT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAvLyBJZGVhbGx5IHVzZSByZXBsYWNlQWxsIGhlcmUsIGJ1dCB0aGF0IGlzbid0IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCB0YXJnZXRlZCBicm93c2VycyBhbmQgcGFja2FnaW5nIHlldFxuICAgIGNvbnN0IHNlYXJjaCA9IGAlJHtrZXl9JWA7XG4gICAgd2hpbGUgKGlucHV0LmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpIHtcbiAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShzZWFyY2gsIHJlcGxhY2VtZW50c1trZXldKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpbnB1dDtcbn07XG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { ChangeDetectorRef, Pipe } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./rpx-translation.service";
5
+ export class RpxTranslatePipe {
6
+ constructor(translationService, injector) {
7
+ this.translationService = translationService;
8
+ this.injector = injector;
9
+ this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));
10
+ }
11
+ transform(value, replacements, yesOrNoValue) {
12
+ if (value && typeof value === 'string' && value.toString().trim()) {
13
+ let o;
14
+ if (replacements) {
15
+ o = this.translationService.getTranslationWithReplacements$(value, replacements);
16
+ }
17
+ else if (yesOrNoValue) {
18
+ o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);
19
+ }
20
+ else {
21
+ o = this.translationService.getTranslation$(value);
22
+ }
23
+ const ret = this.asyncPipe.transform(o);
24
+ return ret;
25
+ }
26
+ return null;
27
+ }
28
+ ngOnDestroy() {
29
+ this.asyncPipe.ngOnDestroy();
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, deps: [{ token: i1.RpxTranslationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe }); }
32
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, name: "rpxTranslate", pure: false }); }
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, decorators: [{
35
+ type: Pipe,
36
+ args: [{
37
+ name: 'rpxTranslate',
38
+ pure: false
39
+ }]
40
+ }], ctorParameters: () => [{ type: i1.RpxTranslationService }, { type: i0.Injector }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcnB4LXh1aS10cmFuc2xhdGlvbi9zcmMvbGliL3JweC10cmFuc2xhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUF1QixJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFRNUYsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUNVLGtCQUF5QyxFQUN6QyxRQUFrQjtRQURsQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sU0FBUyxDQUFhLEtBQVEsRUFBRSxZQUFrQyxFQUFFLFlBQXFCO1FBQzlGLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQXFCLENBQUM7WUFDMUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbkYsQ0FBQztpQkFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUN4QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sR0FBbUIsQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7OEdBOUJVLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0b3IsIE9uRGVzdHJveSwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwbGFjZW1lbnRzLCBScHhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAncnB4VHJhbnNsYXRlJyxcbiAgcHVyZTogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgYXN5bmNQaXBlOiBBc3luY1BpcGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFJweFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLmFzeW5jUGlwZSA9IG5ldyBBc3luY1BpcGUoaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKSk7XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtPFQgPSBzdHJpbmc+KHZhbHVlOiBULCByZXBsYWNlbWVudHM/OiBSZXBsYWNlbWVudHMgfCBudWxsLCB5ZXNPck5vVmFsdWU/OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudG9TdHJpbmcoKS50cmltKCkpIHtcbiAgICAgIGxldCBvOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgICBpZiAocmVwbGFjZW1lbnRzKSB7XG4gICAgICAgIG8gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbldpdGhSZXBsYWNlbWVudHMkKHZhbHVlLCByZXBsYWNlbWVudHMpO1xuICAgICAgfSBlbHNlIGlmICh5ZXNPck5vVmFsdWUpIHtcbiAgICAgICAgbyA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0aW9uV2l0aFllc09yTm8kKHZhbHVlLCB5ZXNPck5vVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbyA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0aW9uJCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IHRoaXMuYXN5bmNQaXBlLnRyYW5zZm9ybTxzdHJpbmc+KG8pO1xuICAgICAgcmV0dXJuIHJldCBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hc3luY1BpcGUubmdPbkRlc3Ryb3koKTtcbiAgfVxufVxuIl19
@@ -21,11 +21,11 @@ export class RpxTranslationModule {
21
21
  ngModule: RpxTranslationModule
22
22
  };
23
23
  }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, declarations: [RpxTranslatePipe], imports: [HttpClientModule], exports: [RpxTranslatePipe] }); }
26
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, imports: [HttpClientModule] }); }
24
27
  }
25
- RpxTranslationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
- RpxTranslationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, declarations: [RpxTranslatePipe], imports: [HttpClientModule], exports: [RpxTranslatePipe] });
27
- RpxTranslationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, imports: [HttpClientModule] });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, decorators: [{
29
29
  type: NgModule,
30
30
  args: [{
31
31
  declarations: [RpxTranslatePipe],
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
33
33
  exports: [RpxTranslatePipe]
34
34
  }]
35
35
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JweC14dWktdHJhbnNsYXRpb24vc3JjL2xpYi9ycHgtdHJhbnNsYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU9sRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBNEI7UUFDaEQsT0FBTztZQUNMLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTTtpQkFDaEQ7Z0JBQ0QscUJBQXFCO2FBQ3RCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNwQixPQUFPO1lBQ0wsUUFBUSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDO0lBQ0osQ0FBQzs7aUhBakJVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQUpoQixnQkFBZ0IsYUFDckIsZ0JBQWdCLGFBQ2hCLGdCQUFnQjtrSEFFZixvQkFBb0IsWUFIckIsZ0JBQWdCOzJGQUdmLG9CQUFvQjtrQkFMaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ycHgtdHJhbnNsYXRpb24uY29uZmlnJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtScHhUcmFuc2xhdGVQaXBlXSxcbiAgaW1wb3J0czogW0h0dHBDbGllbnRNb2R1bGVdLFxuICBleHBvcnRzOiBbUnB4VHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25Nb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8UnB4VHJhbnNsYXRpb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJweFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBScHhUcmFuc2xhdGlvbkNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9LFxuICAgICAgICBScHhUcmFuc2xhdGlvblNlcnZpY2VcbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JDaGlsZCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFJweFRyYW5zbGF0aW9uTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBScHhUcmFuc2xhdGlvbk1vZHVsZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JweC14dWktdHJhbnNsYXRpb24vc3JjL2xpYi9ycHgtdHJhbnNsYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU9sRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBNEI7UUFDaEQsT0FBTztZQUNMLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTTtpQkFDaEQ7Z0JBQ0QscUJBQXFCO2FBQ3RCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUTtRQUNwQixPQUFPO1lBQ0wsUUFBUSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDO0lBQ0osQ0FBQzs4R0FqQlUsb0JBQW9COytHQUFwQixvQkFBb0IsaUJBSmhCLGdCQUFnQixhQUNyQixnQkFBZ0IsYUFDaEIsZ0JBQWdCOytHQUVmLG9CQUFvQixZQUhyQixnQkFBZ0I7OzJGQUdmLG9CQUFvQjtrQkFMaEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ycHgtdHJhbnNsYXRpb24uY29uZmlnJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtScHhUcmFuc2xhdGVQaXBlXSxcbiAgaW1wb3J0czogW0h0dHBDbGllbnRNb2R1bGVdLFxuICBleHBvcnRzOiBbUnB4VHJhbnNsYXRlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25Nb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8UnB4VHJhbnNsYXRpb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJweFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBScHhUcmFuc2xhdGlvbkNvbmZpZywgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9LFxuICAgICAgICBScHhUcmFuc2xhdGlvblNlcnZpY2VcbiAgICAgIF1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JDaGlsZCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFJweFRyYW5zbGF0aW9uTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBScHhUcmFuc2xhdGlvbk1vZHVsZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,163 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { liveQuery } from 'dexie';
3
+ import { DateTime } from 'luxon';
4
+ import { BehaviorSubject, from, of, timer } from 'rxjs';
5
+ import { catchError, map, tap } from 'rxjs/operators';
6
+ import { db, Translation } from './db';
7
+ import { matchCase } from './helpers/match-case/match-case.helper';
8
+ import { replacePlaceholders } from './helpers/replace-placeholders/replace-placeholders.helper';
9
+ import { YesOrNoValue } from './rpx-language.enum';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./rpx-translation.config";
12
+ import * as i2 from "@angular/common/http";
13
+ export class RpxTranslationService {
14
+ get language() {
15
+ return this.currentLanguage;
16
+ }
17
+ set language(lang) {
18
+ if (lang !== this.currentLanguage) {
19
+ this.currentLanguage = lang;
20
+ this.persistLanguage();
21
+ this.languageSource.next(lang);
22
+ Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));
23
+ }
24
+ }
25
+ constructor(config, http) {
26
+ this.config = config;
27
+ this.http = http;
28
+ this.currentLanguage = 'en';
29
+ this.languageKey = 'exui-preferred-language';
30
+ this.phrases = {};
31
+ this.observables = {};
32
+ this.requesting = {};
33
+ this.languageSource = new BehaviorSubject(this.currentLanguage);
34
+ const persistedLanguage = this.getPersistedLanguage();
35
+ if (persistedLanguage) {
36
+ this.language = persistedLanguage;
37
+ }
38
+ else {
39
+ // no language persisted yet, save default
40
+ this.persistLanguage();
41
+ }
42
+ this.language$ = this.languageSource.asObservable();
43
+ }
44
+ getTranslation$(phrase) {
45
+ return this.getTranslatedData(phrase).pipe(map((t) => t.translation));
46
+ }
47
+ getTranslationWithReplacements$(phrase, replacements) {
48
+ return this.getTranslatedData(phrase).pipe(map((translatedData) => replacePlaceholders(translatedData.translation, replacements)));
49
+ }
50
+ getTranslationWithYesOrNo$(phrase, yesOrNoValue) {
51
+ const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();
52
+ return this.getTranslatedData(phrase).pipe(map((translatedData) => {
53
+ const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)
54
+ : (translatedData.no || yesOrNoValue);
55
+ return matchCase(yesOrNoValue, yesOrNoTranslated);
56
+ }));
57
+ }
58
+ getTranslatedData(phrase) {
59
+ if (this.observables.hasOwnProperty(phrase)) {
60
+ return this.observables[phrase];
61
+ }
62
+ return this.translate(phrase);
63
+ }
64
+ translate(phrase) {
65
+ const lang = this.language;
66
+ if (!this.phrases.hasOwnProperty(phrase)) {
67
+ this.phrases[phrase] = new BehaviorSubject({ translation: phrase });
68
+ this.observables[phrase] = this.phrases[phrase].asObservable();
69
+ }
70
+ if (lang === 'en') {
71
+ this.phrases[phrase].next({ translation: phrase });
72
+ }
73
+ else {
74
+ from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(tap((t) => {
75
+ if (t && !t.isExpired()) {
76
+ this.phrases[phrase].next(t.translation);
77
+ }
78
+ else {
79
+ if (t) {
80
+ // expired, clean up DB
81
+ db.translations.delete(t.id);
82
+ }
83
+ this.phrases[phrase].next({
84
+ translation: `${phrase} [Translation in progress]`,
85
+ yes: 'Yes [Translation in progress]',
86
+ no: 'No [Translation in progress]'
87
+ });
88
+ this.load(phrase, lang);
89
+ }
90
+ })).subscribe(() => ({}));
91
+ }
92
+ return this.observables[phrase];
93
+ }
94
+ load(phrase, lang) {
95
+ if (lang === 'en') {
96
+ this.phrases[phrase].next({
97
+ translation: phrase,
98
+ yes: 'Yes',
99
+ no: 'No'
100
+ });
101
+ return;
102
+ }
103
+ if (!this.requesting.hasOwnProperty(lang)) {
104
+ this.requesting[lang] = [];
105
+ }
106
+ if (this.requesting[lang].indexOf(phrase) !== -1) {
107
+ return;
108
+ }
109
+ // Prevent making a API call with empty array of phrase
110
+ if (phrase.length === 0) {
111
+ return;
112
+ }
113
+ this.requesting[lang].push(phrase);
114
+ if (this.requestTimerSubscription) {
115
+ this.requestTimerSubscription.unsubscribe();
116
+ }
117
+ this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {
118
+ const url = this.config.baseUrl + `/${lang}`;
119
+ const s = this.http.post(url, {
120
+ phrases: this.requesting[lang]
121
+ })
122
+ .pipe(map((t) => t.translations), map((translations) => {
123
+ const translatedData = {};
124
+ Object.keys(translations).forEach((p) => {
125
+ if (typeof (translations[p]) === 'string') {
126
+ translatedData[p] = { translation: translations[p] };
127
+ }
128
+ else {
129
+ translatedData[p] = translations[p];
130
+ }
131
+ });
132
+ return translatedData;
133
+ }), catchError(() => {
134
+ const translations = {};
135
+ this.requesting[lang].forEach((p) => (translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p }));
136
+ return of(translations);
137
+ })).subscribe((translations) => {
138
+ const toAdd = [];
139
+ Object.keys(translations).forEach((p) => {
140
+ toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));
141
+ this.phrases[p].next(translations[p]);
142
+ });
143
+ db.translations.bulkAdd(toAdd);
144
+ this.requesting[lang] = [];
145
+ this.requestTimerSubscription?.unsubscribe();
146
+ this.requestTimerSubscription = null;
147
+ s.unsubscribe();
148
+ });
149
+ });
150
+ }
151
+ persistLanguage() {
152
+ document.cookie = `${this.languageKey}=${this.currentLanguage};`;
153
+ }
154
+ getPersistedLanguage() {
155
+ return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim();
156
+ }
157
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService, deps: [{ token: i1.RpxTranslationConfig }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
158
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService }); }
159
+ }
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService, decorators: [{
161
+ type: Injectable
162
+ }], ctorParameters: () => [{ type: i1.RpxTranslationConfig }, { type: i2.HttpClient }] });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ycHgteHVpLXRyYW5zbGF0aW9uL3NyYy9saWIvcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRWpHLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVVoRSxNQUFNLE9BQU8scUJBQXFCO0lBV2hDLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLElBQWlCO1FBQ25DLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsTUFB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QyxXQUFXLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDO0lBQ25FLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQWlCLENBQUM7SUFDNUksQ0FBQzs4R0FyTFUscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGl2ZVF1ZXJ5IH0gZnJvbSAnZGV4aWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRiLCBUcmFuc2xhdGlvbiB9IGZyb20gJy4vZGInO1xuaW1wb3J0IHsgbWF0Y2hDYXNlIH0gZnJvbSAnLi9oZWxwZXJzL21hdGNoLWNhc2UvbWF0Y2gtY2FzZS5oZWxwZXInO1xuaW1wb3J0IHsgcmVwbGFjZVBsYWNlaG9sZGVycyB9IGZyb20gJy4vaGVscGVycy9yZXBsYWNlLXBsYWNlaG9sZGVycy9yZXBsYWNlLXBsYWNlaG9sZGVycy5oZWxwZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlZERhdGEgfSBmcm9tICcuL21vZGVscy90cmFuc2xhdGVkLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUnB4TGFuZ3VhZ2UsIFllc09yTm9WYWx1ZSB9IGZyb20gJy4vcnB4LWxhbmd1YWdlLmVudW0nO1xuaW1wb3J0IHsgUnB4VHJhbnNsYXRpb25Db25maWcgfSBmcm9tICcuL3JweC10cmFuc2xhdGlvbi5jb25maWcnO1xuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25zRFRPIHtcbiAgdHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBzdHJpbmcgfCBUcmFuc2xhdGVkRGF0YSB9O1xufVxuXG5leHBvcnQgdHlwZSBSZXBsYWNlbWVudHMgPSB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUnB4VHJhbnNsYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjdXJyZW50TGFuZ3VhZ2U6IFJweExhbmd1YWdlID0gJ2VuJztcbiAgcHJpdmF0ZSBsYW5ndWFnZUtleSA9ICdleHVpLXByZWZlcnJlZC1sYW5ndWFnZSc7XG5cbiAgcHJpdmF0ZSBwaHJhc2VzOiB7IFtwaHJhc2U6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxUcmFuc2xhdGVkRGF0YT4gfSA9IHt9O1xuICBwcml2YXRlIG9ic2VydmFibGVzOiB7IFtwaHJhc2U6IHN0cmluZ106IE9ic2VydmFibGU8VHJhbnNsYXRlZERhdGE+IH0gPSB7fTtcbiAgcHJpdmF0ZSByZXF1ZXN0aW5nOiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICBwcml2YXRlIGxhbmd1YWdlU291cmNlOiBCZWhhdmlvclN1YmplY3Q8UnB4TGFuZ3VhZ2U+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxScHhMYW5ndWFnZT4odGhpcy5jdXJyZW50TGFuZ3VhZ2UpO1xuICBwdWJsaWMgbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPFJweExhbmd1YWdlPjtcblxuICBwdWJsaWMgZ2V0IGxhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZ3VhZ2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IGxhbmd1YWdlKGxhbmc6IFJweExhbmd1YWdlKSB7XG4gICAgaWYgKGxhbmcgIT09IHRoaXMuY3VycmVudExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IGxhbmc7XG4gICAgICB0aGlzLnBlcnNpc3RMYW5ndWFnZSgpO1xuICAgICAgdGhpcy5sYW5ndWFnZVNvdXJjZS5uZXh0KGxhbmcpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5waHJhc2VzKS5mb3JFYWNoKChwaHJhc2UpID0+IHRoaXMudHJhbnNsYXRlKHBocmFzZSkpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBScHhUcmFuc2xhdGlvbkNvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7XG4gICAgY29uc3QgcGVyc2lzdGVkTGFuZ3VhZ2UgPSB0aGlzLmdldFBlcnNpc3RlZExhbmd1YWdlKCk7XG4gICAgaWYgKHBlcnNpc3RlZExhbmd1YWdlKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlID0gcGVyc2lzdGVkTGFuZ3VhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vIGxhbmd1YWdlIHBlcnNpc3RlZCB5ZXQsIHNhdmUgZGVmYXVsdFxuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5sYW5ndWFnZSQgPSB0aGlzLmxhbmd1YWdlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zbGF0aW9uJChwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZERhdGEocGhyYXNlKS5waXBlKFxuICAgICAgbWFwKCh0KSA9PiB0LnRyYW5zbGF0aW9uKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb25XaXRoUmVwbGFjZW1lbnRzJChwaHJhc2U6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBSZXBsYWNlbWVudHMpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWREYXRhKHBocmFzZSkucGlwZShcbiAgICAgIG1hcCgodHJhbnNsYXRlZERhdGEpID0+IHJlcGxhY2VQbGFjZWhvbGRlcnModHJhbnNsYXRlZERhdGEudHJhbnNsYXRpb24sIHJlcGxhY2VtZW50cykpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbldpdGhZZXNPck5vJChwaHJhc2U6IHN0cmluZywgeWVzT3JOb1ZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGlzWWVzID0geWVzT3JOb1ZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSBZZXNPck5vVmFsdWUuWUVTLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkRGF0YShwaHJhc2UpLnBpcGUobWFwKCh0cmFuc2xhdGVkRGF0YTogVHJhbnNsYXRlZERhdGEpID0+IHtcbiAgICAgIGNvbnN0IHllc09yTm9UcmFuc2xhdGVkID0gaXNZZXMgPyAodHJhbnNsYXRlZERhdGEueWVzIHx8IHllc09yTm9WYWx1ZSlcbiAgICAgICAgOiAodHJhbnNsYXRlZERhdGEubm8gfHwgeWVzT3JOb1ZhbHVlKTtcbiAgICAgIHJldHVybiBtYXRjaENhc2UoeWVzT3JOb1ZhbHVlISwgeWVzT3JOb1RyYW5zbGF0ZWQpO1xuICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNsYXRlZERhdGEocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRyYW5zbGF0ZWREYXRhPiB7XG4gICAgaWYgKHRoaXMub2JzZXJ2YWJsZXMuaGFzT3duUHJvcGVydHkocGhyYXNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUocGhyYXNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsYXRlKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGVkRGF0YT4ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmd1YWdlO1xuICAgIGlmICghdGhpcy5waHJhc2VzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmFuc2xhdGVkRGF0YT4oeyB0cmFuc2xhdGlvbjogcGhyYXNlIH0pO1xuICAgICAgdGhpcy5vYnNlcnZhYmxlc1twaHJhc2VdID0gdGhpcy5waHJhc2VzW3BocmFzZV0uYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoeyB0cmFuc2xhdGlvbjogcGhyYXNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tKGxpdmVRdWVyeSgoKSA9PiBkYi50cmFuc2xhdGlvbnMud2hlcmUoJ1twaHJhc2UrbGFuZ10nKS5lcXVhbHMoW3BocmFzZSwgbGFuZ10pLmZpcnN0KCkpKS5waXBlKFxuICAgICAgICB0YXAoKHQpID0+IHtcbiAgICAgICAgICBpZiAodCAmJiAhdC5pc0V4cGlyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh0LnRyYW5zbGF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgLy8gZXhwaXJlZCwgY2xlYW4gdXAgREJcbiAgICAgICAgICAgICAgZGIudHJhbnNsYXRpb25zLmRlbGV0ZSh0LmlkISk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb246IGAke3BocmFzZX0gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXWAsXG4gICAgICAgICAgICAgIHllczogJ1llcyBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdJyxcbiAgICAgICAgICAgICAgbm86ICdObyBbVHJhbnNsYXRpb24gaW4gcHJvZ3Jlc3NdJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWQocGhyYXNlLCBsYW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gKHt9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChwaHJhc2U6IHN0cmluZywgbGFuZzogUnB4TGFuZ3VhZ2UpOiB2b2lkIHtcbiAgICBpZiAobGFuZyA9PT0gJ2VuJykge1xuICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh7XG4gICAgICAgIHRyYW5zbGF0aW9uOiBwaHJhc2UsXG4gICAgICAgIHllczogJ1llcycsXG4gICAgICAgIG5vOiAnTm8nXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVxdWVzdGluZy5oYXNPd25Qcm9wZXJ0eShsYW5nKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVxdWVzdGluZ1tsYW5nXS5pbmRleE9mKHBocmFzZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBtYWtpbmcgYSBBUEkgY2FsbCB3aXRoIGVtcHR5IGFycmF5IG9mIHBocmFzZVxuICAgIGlmIChwaHJhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLnB1c2gocGhyYXNlKTtcblxuICAgIGlmICh0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IHRpbWVyKHRoaXMuY29uZmlnLmRlYm91bmNlVGltZU1zKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYmFzZVVybCArIGAvJHtsYW5nfWA7XG4gICAgICBjb25zdCBzID0gdGhpcy5odHRwLnBvc3Q8VHJhbnNsYXRpb25zRFRPPih1cmwsXG4gICAgICAgIHtcbiAgICAgICAgICBwaHJhc2VzOiB0aGlzLnJlcXVlc3RpbmdbbGFuZ11cbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHQpID0+IHQudHJhbnNsYXRpb25zKSxcbiAgICAgICAgICBtYXAoKHRyYW5zbGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZERhdGE6IHsgW2Zyb206IHN0cmluZ106IFRyYW5zbGF0ZWREYXRhIH0gPSB7fTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YodHJhbnNsYXRpb25zW3BdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YVtwXSA9IHsgdHJhbnNsYXRpb246IHRyYW5zbGF0aW9uc1twXSBhcyBzdHJpbmcgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRGF0YVtwXSA9IHRyYW5zbGF0aW9uc1twXSBhcyBUcmFuc2xhdGVkRGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkRGF0YTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogVHJhbnNsYXRlZERhdGEgfSA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddLmZvckVhY2goKHApID0+IChcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW3BdID0gdGhpcy5jb25maWcudGVzdE1vZGUgPyB7IHRyYW5zbGF0aW9uOiBgW1Rlc3QgdHJhbnNsYXRpb24gZm9yICR7cH1dYCB9IDogeyB0cmFuc2xhdGlvbjogcCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IFRyYW5zbGF0ZWREYXRhIH0pID0+IHtcbiAgICAgICAgICBjb25zdCB0b0FkZDogVHJhbnNsYXRpb25bXSA9IFtdO1xuICAgICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgdG9BZGQucHVzaChUcmFuc2xhdGlvbi5jcmVhdGUocCwgbGFuZywgdHJhbnNsYXRpb25zW3BdLCBEYXRlVGltZS5ub3coKS5wbHVzKHRoaXMuY29uZmlnLnZhbGlkaXR5KS50b0lTTygpKSk7XG4gICAgICAgICAgICB0aGlzLnBocmFzZXNbcF0ubmV4dCh0cmFuc2xhdGlvbnNbcF0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5idWxrQWRkKHRvQWRkKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RpbmdbbGFuZ10gPSBbXTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke3RoaXMubGFuZ3VhZ2VLZXl9PSR7dGhpcy5jdXJyZW50TGFuZ3VhZ2V9O2A7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcnNpc3RlZExhbmd1YWdlKCk6IFJweExhbmd1YWdlIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JykuZmluZCgoY29va2llKSA9PiBjb29raWUudHJpbSgpLnN0YXJ0c1dpdGgodGhpcy5sYW5ndWFnZUtleSArICc9JykpPy5zcGxpdCgnPScpWzFdLnRyaW0oKSBhcyBScHhMYW5ndWFnZTtcbiAgfVxufVxuIl19
@@ -105,7 +105,6 @@ class RpxTranslationService {
105
105
  }
106
106
  getTranslationWithYesOrNo$(phrase, yesOrNoValue) {
107
107
  const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();
108
- const isNo = yesOrNoValue?.toLowerCase() === YesOrNoValue.NO.toLowerCase();
109
108
  return this.getTranslatedData(phrase).pipe(map((translatedData) => {
110
109
  const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)
111
110
  : (translatedData.no || yesOrNoValue);
@@ -211,12 +210,12 @@ class RpxTranslationService {
211
210
  getPersistedLanguage() {
212
211
  return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim();
213
212
  }
213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService, deps: [{ token: RpxTranslationConfig }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
214
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService }); }
214
215
  }
215
- RpxTranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, deps: [{ token: RpxTranslationConfig }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
216
- RpxTranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService });
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, decorators: [{
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationService, decorators: [{
218
217
  type: Injectable
219
- }], ctorParameters: function () { return [{ type: RpxTranslationConfig }, { type: i2.HttpClient }]; } });
218
+ }], ctorParameters: () => [{ type: RpxTranslationConfig }, { type: i2.HttpClient }] });
220
219
 
221
220
  class RpxTranslatePipe {
222
221
  constructor(translationService, injector) {
@@ -244,16 +243,16 @@ class RpxTranslatePipe {
244
243
  ngOnDestroy() {
245
244
  this.asyncPipe.ngOnDestroy();
246
245
  }
246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, deps: [{ token: RpxTranslationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe }); }
247
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, name: "rpxTranslate", pure: false }); }
247
248
  }
248
- RpxTranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, deps: [{ token: RpxTranslationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe });
249
- RpxTranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, name: "rpxTranslate", pure: false });
250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, decorators: [{
249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslatePipe, decorators: [{
251
250
  type: Pipe,
252
251
  args: [{
253
252
  name: 'rpxTranslate',
254
253
  pure: false
255
254
  }]
256
- }], ctorParameters: function () { return [{ type: RpxTranslationService }, { type: i0.Injector }]; } });
255
+ }], ctorParameters: () => [{ type: RpxTranslationService }, { type: i0.Injector }] });
257
256
 
258
257
  class RpxTranslationModule {
259
258
  static forRoot(config) {
@@ -272,11 +271,11 @@ class RpxTranslationModule {
272
271
  ngModule: RpxTranslationModule
273
272
  };
274
273
  }
274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
275
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, declarations: [RpxTranslatePipe], imports: [HttpClientModule], exports: [RpxTranslatePipe] }); }
276
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, imports: [HttpClientModule] }); }
275
277
  }
276
- RpxTranslationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
277
- RpxTranslationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, declarations: [RpxTranslatePipe], imports: [HttpClientModule], exports: [RpxTranslatePipe] });
278
- RpxTranslationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, imports: [HttpClientModule] });
279
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, decorators: [{
278
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RpxTranslationModule, decorators: [{
280
279
  type: NgModule,
281
280
  args: [{
282
281
  declarations: [RpxTranslatePipe],
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpx-xui-translation.mjs","sources":["../../../projects/rpx-xui-translation/src/lib/rpx-language.enum.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.config.ts","../../../projects/rpx-xui-translation/src/lib/db.ts","../../../projects/rpx-xui-translation/src/lib/helpers/match-case/match-case.helper.ts","../../../projects/rpx-xui-translation/src/lib/helpers/replace-placeholders/replace-placeholders.helper.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.service.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translate.pipe.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.module.ts","../../../projects/rpx-xui-translation/src/public-api.ts","../../../projects/rpx-xui-translation/src/rpx-xui-translation.ts"],"sourcesContent":["export type RpxLanguage = 'en' | 'cy';\nexport enum YesOrNoValue {\n YES = 'Yes',\n NO = 'No',\n}\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { TranslatedData } from './models/translated-data.model';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: TranslatedData;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: TranslatedData, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","export const matchCase = (str1: string, str2: string) => {\n if (str1.length === 0 || str2.length === 0) {\n return str2;\n }\n\n if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {\n return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;\n }\n return str2.toLowerCase();\n};\n","import { Replacements } from '../../rpx-translation.service';\n\nexport const replacePlaceholders = (input: string, replacements: Replacements) => {\n Object.keys(replacements).forEach((key) => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n\n return input;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { matchCase } from './helpers/match-case/match-case.helper';\nimport { replacePlaceholders } from './helpers/replace-placeholders/replace-placeholders.helper';\nimport { TranslatedData } from './models/translated-data.model';\nimport { RpxLanguage, YesOrNoValue } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string | TranslatedData };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<TranslatedData> } = {};\n private observables: { [phrase: string]: Observable<TranslatedData> } = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));\n }\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation$(phrase: string): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((t) => t.translation)\n );\n }\n\n public getTranslationWithReplacements$(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((translatedData) => replacePlaceholders(translatedData.translation, replacements))\n );\n }\n\n public getTranslationWithYesOrNo$(phrase: string, yesOrNoValue: string): Observable<string> {\n const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();\n\n return this.getTranslatedData(phrase).pipe(map((translatedData: TranslatedData) => {\n const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)\n : (translatedData.no || yesOrNoValue);\n return matchCase(yesOrNoValue!, yesOrNoTranslated);\n }\n ));\n }\n\n private getTranslatedData(phrase: string): Observable<TranslatedData> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n private translate(phrase: string): Observable<TranslatedData> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<TranslatedData>({ translation: phrase });\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next({ translation: phrase });\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap((t) => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next({\n translation: `${phrase} [Translation in progress]`,\n yes: 'Yes [Translation in progress]',\n no: 'No [Translation in progress]'\n });\n this.load(phrase, lang);\n }\n }),\n ).subscribe(() => ({}));\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next({\n translation: phrase,\n yes: 'Yes',\n no: 'No'\n });\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n // Prevent making a API call with empty array of phrase\n if (phrase.length === 0) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url,\n {\n phrases: this.requesting[lang]\n }\n )\n .pipe(\n map((t) => t.translations),\n map((translations) => {\n const translatedData: { [from: string]: TranslatedData } = {};\n\n Object.keys(translations).forEach((p) => {\n if (typeof(translations[p]) === 'string') {\n translatedData[p] = { translation: translations[p] as string };\n } else {\n translatedData[p] = translations[p] as TranslatedData;\n }\n });\n\n return translatedData;\n }),\n catchError(() => {\n const translations: { [from: string]: TranslatedData } = {};\n this.requesting[lang].forEach((p) => (\n translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p })\n );\n return of(translations);\n })\n ).subscribe((translations: { [from: string]: TranslatedData }) => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach((p) => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription?.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Injector, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Replacements, RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe implements PipeTransform, OnDestroy {\n private asyncPipe: AsyncPipe;\n\n constructor(\n private translationService: RpxTranslationService,\n private injector: Injector\n ) {\n this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));\n }\n\n public transform<T = string>(value: T, replacements?: Replacements | null, yesOrNoValue?: string): T | null {\n if (value && typeof value === 'string' && value.toString().trim()) {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements$(value, replacements);\n } else if (yesOrNoValue) {\n o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);\n } else {\n o = this.translationService.getTranslation$(value);\n }\n\n const ret = this.asyncPipe.transform<string>(o);\n return ret as unknown as T;\n }\n\n return null;\n }\n\n public ngOnDestroy(): void {\n this.asyncPipe.ngOnDestroy();\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.RpxTranslationConfig","i1.RpxTranslationService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rpx-xui-translation",
3
- "version": "1.0.2",
3
+ "version": "1.0.3-angular-upgrade-17-rc",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^15.2.9",
@@ -11,11 +11,7 @@
11
11
  "luxon": "^2.4.0",
12
12
  "tslib": "^2.0.0"
13
13
  },
14
- "module": "fesm2015/rpx-xui-translation.mjs",
15
- "es2020": "fesm2020/rpx-xui-translation.mjs",
16
- "esm2020": "esm2020/rpx-xui-translation.mjs",
17
- "fesm2020": "fesm2020/rpx-xui-translation.mjs",
18
- "fesm2015": "fesm2015/rpx-xui-translation.mjs",
14
+ "module": "fesm2022/rpx-xui-translation.mjs",
19
15
  "typings": "index.d.ts",
20
16
  "exports": {
21
17
  "./package.json": {
@@ -23,11 +19,9 @@
23
19
  },
24
20
  ".": {
25
21
  "types": "./index.d.ts",
26
- "esm2020": "./esm2020/rpx-xui-translation.mjs",
27
- "es2020": "./fesm2020/rpx-xui-translation.mjs",
28
- "es2015": "./fesm2015/rpx-xui-translation.mjs",
29
- "node": "./fesm2015/rpx-xui-translation.mjs",
30
- "default": "./fesm2020/rpx-xui-translation.mjs"
22
+ "esm2022": "./esm2022/rpx-xui-translation.mjs",
23
+ "esm": "./esm2022/rpx-xui-translation.mjs",
24
+ "default": "./fesm2022/rpx-xui-translation.mjs"
31
25
  }
32
26
  },
33
27
  "sideEffects": false
@@ -1,10 +0,0 @@
1
- export const matchCase = (str1, str2) => {
2
- if (str1.length === 0 || str2.length === 0) {
3
- return str2;
4
- }
5
- if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {
6
- return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;
7
- }
8
- return str2.toLowerCase();
9
- };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtY2FzZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ycHgteHVpLXRyYW5zbGF0aW9uL3NyYy9saWIvaGVscGVycy9tYXRjaC1jYXNlL21hdGNoLWNhc2UuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNuRCxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDMUQ7SUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgbWF0Y2hDYXNlID0gKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKSA9PiB7XG4gIGlmIChzdHIxLmxlbmd0aCA9PT0gMCB8fCBzdHIyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHIyO1xuICB9XG5cbiAgaWYgKHN0cjEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgPT09IHN0cjEuY2hhckF0KDApKSB7XG4gICAgcmV0dXJuIGAke3N0cjIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtzdHIyLnNsaWNlKDEpfWA7XG4gIH1cbiAgcmV0dXJuIHN0cjIudG9Mb3dlckNhc2UoKTtcbn07XG4iXX0=
@@ -1,41 +0,0 @@
1
- import { AsyncPipe } from '@angular/common';
2
- import { ChangeDetectorRef, Pipe } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./rpx-translation.service";
5
- export class RpxTranslatePipe {
6
- constructor(translationService, injector) {
7
- this.translationService = translationService;
8
- this.injector = injector;
9
- this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));
10
- }
11
- transform(value, replacements, yesOrNoValue) {
12
- if (value && typeof value === 'string' && value.toString().trim()) {
13
- let o;
14
- if (replacements) {
15
- o = this.translationService.getTranslationWithReplacements$(value, replacements);
16
- }
17
- else if (yesOrNoValue) {
18
- o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);
19
- }
20
- else {
21
- o = this.translationService.getTranslation$(value);
22
- }
23
- const ret = this.asyncPipe.transform(o);
24
- return ret;
25
- }
26
- return null;
27
- }
28
- ngOnDestroy() {
29
- this.asyncPipe.ngOnDestroy();
30
- }
31
- }
32
- RpxTranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, deps: [{ token: i1.RpxTranslationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe });
33
- RpxTranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, name: "rpxTranslate", pure: false });
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, decorators: [{
35
- type: Pipe,
36
- args: [{
37
- name: 'rpxTranslate',
38
- pure: false
39
- }]
40
- }], ctorParameters: function () { return [{ type: i1.RpxTranslationService }, { type: i0.Injector }]; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcnB4LXh1aS10cmFuc2xhdGlvbi9zcmMvbGliL3JweC10cmFuc2xhdGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUF1QixJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFRNUYsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUNVLGtCQUF5QyxFQUN6QyxRQUFrQjtRQURsQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sU0FBUyxDQUFhLEtBQVEsRUFBRSxZQUFrQyxFQUFFLFlBQXFCO1FBQzlGLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFxQixDQUFDO1lBQzFCLElBQUksWUFBWSxFQUFFO2dCQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLCtCQUErQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQzthQUNsRjtpQkFBTSxJQUFJLFlBQVksRUFBRTtnQkFDdkIsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDN0U7aUJBQU07Z0JBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEQ7WUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPLEdBQW1CLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7NkdBOUJVLGdCQUFnQjsyR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxLQUFLO2lCQUNaIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RvciwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBsYWNlbWVudHMsIFJweFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdycHhUcmFuc2xhdGUnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBScHhUcmFuc2xhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhc3luY1BpcGU6IEFzeW5jUGlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogUnB4VHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuYXN5bmNQaXBlID0gbmV3IEFzeW5jUGlwZShpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm08VCA9IHN0cmluZz4odmFsdWU6IFQsIHJlcGxhY2VtZW50cz86IFJlcGxhY2VtZW50cyB8IG51bGwsIHllc09yTm9WYWx1ZT86IHN0cmluZyk6IFQgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50b1N0cmluZygpLnRyaW0oKSkge1xuICAgICAgbGV0IG86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgIGlmIChyZXBsYWNlbWVudHMpIHtcbiAgICAgICAgbyA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldFRyYW5zbGF0aW9uV2l0aFJlcGxhY2VtZW50cyQodmFsdWUsIHJlcGxhY2VtZW50cyk7XG4gICAgICB9IGVsc2UgaWYgKHllc09yTm9WYWx1ZSkge1xuICAgICAgICBvID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0VHJhbnNsYXRpb25XaXRoWWVzT3JObyQodmFsdWUsIHllc09yTm9WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0VHJhbnNsYXRpb24kKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0ID0gdGhpcy5hc3luY1BpcGUudHJhbnNmb3JtPHN0cmluZz4obyk7XG4gICAgICByZXR1cm4gcmV0IGFzIHVua25vd24gYXMgVDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmFzeW5jUGlwZS5uZ09uRGVzdHJveSgpO1xuICB9XG59XG4iXX0=
@@ -1,164 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { liveQuery } from 'dexie';
3
- import { DateTime } from 'luxon';
4
- import { BehaviorSubject, from, of, timer } from 'rxjs';
5
- import { catchError, map, tap } from 'rxjs/operators';
6
- import { db, Translation } from './db';
7
- import { matchCase } from './helpers/match-case/match-case.helper';
8
- import { replacePlaceholders } from './helpers/replace-placeholders/replace-placeholders.helper';
9
- import { YesOrNoValue } from './rpx-language.enum';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./rpx-translation.config";
12
- import * as i2 from "@angular/common/http";
13
- export class RpxTranslationService {
14
- get language() {
15
- return this.currentLanguage;
16
- }
17
- set language(lang) {
18
- if (lang !== this.currentLanguage) {
19
- this.currentLanguage = lang;
20
- this.persistLanguage();
21
- this.languageSource.next(lang);
22
- Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));
23
- }
24
- }
25
- constructor(config, http) {
26
- this.config = config;
27
- this.http = http;
28
- this.currentLanguage = 'en';
29
- this.languageKey = 'exui-preferred-language';
30
- this.phrases = {};
31
- this.observables = {};
32
- this.requesting = {};
33
- this.languageSource = new BehaviorSubject(this.currentLanguage);
34
- const persistedLanguage = this.getPersistedLanguage();
35
- if (persistedLanguage) {
36
- this.language = persistedLanguage;
37
- }
38
- else {
39
- // no language persisted yet, save default
40
- this.persistLanguage();
41
- }
42
- this.language$ = this.languageSource.asObservable();
43
- }
44
- getTranslation$(phrase) {
45
- return this.getTranslatedData(phrase).pipe(map((t) => t.translation));
46
- }
47
- getTranslationWithReplacements$(phrase, replacements) {
48
- return this.getTranslatedData(phrase).pipe(map((translatedData) => replacePlaceholders(translatedData.translation, replacements)));
49
- }
50
- getTranslationWithYesOrNo$(phrase, yesOrNoValue) {
51
- const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();
52
- const isNo = yesOrNoValue?.toLowerCase() === YesOrNoValue.NO.toLowerCase();
53
- return this.getTranslatedData(phrase).pipe(map((translatedData) => {
54
- const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)
55
- : (translatedData.no || yesOrNoValue);
56
- return matchCase(yesOrNoValue, yesOrNoTranslated);
57
- }));
58
- }
59
- getTranslatedData(phrase) {
60
- if (this.observables.hasOwnProperty(phrase)) {
61
- return this.observables[phrase];
62
- }
63
- return this.translate(phrase);
64
- }
65
- translate(phrase) {
66
- const lang = this.language;
67
- if (!this.phrases.hasOwnProperty(phrase)) {
68
- this.phrases[phrase] = new BehaviorSubject({ translation: phrase });
69
- this.observables[phrase] = this.phrases[phrase].asObservable();
70
- }
71
- if (lang === 'en') {
72
- this.phrases[phrase].next({ translation: phrase });
73
- }
74
- else {
75
- from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(tap((t) => {
76
- if (t && !t.isExpired()) {
77
- this.phrases[phrase].next(t.translation);
78
- }
79
- else {
80
- if (t) {
81
- // expired, clean up DB
82
- db.translations.delete(t.id);
83
- }
84
- this.phrases[phrase].next({
85
- translation: `${phrase} [Translation in progress]`,
86
- yes: 'Yes [Translation in progress]',
87
- no: 'No [Translation in progress]'
88
- });
89
- this.load(phrase, lang);
90
- }
91
- })).subscribe(() => ({}));
92
- }
93
- return this.observables[phrase];
94
- }
95
- load(phrase, lang) {
96
- if (lang === 'en') {
97
- this.phrases[phrase].next({
98
- translation: phrase,
99
- yes: 'Yes',
100
- no: 'No'
101
- });
102
- return;
103
- }
104
- if (!this.requesting.hasOwnProperty(lang)) {
105
- this.requesting[lang] = [];
106
- }
107
- if (this.requesting[lang].indexOf(phrase) !== -1) {
108
- return;
109
- }
110
- // Prevent making a API call with empty array of phrase
111
- if (phrase.length === 0) {
112
- return;
113
- }
114
- this.requesting[lang].push(phrase);
115
- if (this.requestTimerSubscription) {
116
- this.requestTimerSubscription.unsubscribe();
117
- }
118
- this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {
119
- const url = this.config.baseUrl + `/${lang}`;
120
- const s = this.http.post(url, {
121
- phrases: this.requesting[lang]
122
- })
123
- .pipe(map((t) => t.translations), map((translations) => {
124
- const translatedData = {};
125
- Object.keys(translations).forEach((p) => {
126
- if (typeof (translations[p]) === 'string') {
127
- translatedData[p] = { translation: translations[p] };
128
- }
129
- else {
130
- translatedData[p] = translations[p];
131
- }
132
- });
133
- return translatedData;
134
- }), catchError(() => {
135
- const translations = {};
136
- this.requesting[lang].forEach((p) => (translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p }));
137
- return of(translations);
138
- })).subscribe((translations) => {
139
- const toAdd = [];
140
- Object.keys(translations).forEach((p) => {
141
- toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));
142
- this.phrases[p].next(translations[p]);
143
- });
144
- db.translations.bulkAdd(toAdd);
145
- this.requesting[lang] = [];
146
- this.requestTimerSubscription?.unsubscribe();
147
- this.requestTimerSubscription = null;
148
- s.unsubscribe();
149
- });
150
- });
151
- }
152
- persistLanguage() {
153
- document.cookie = `${this.languageKey}=${this.currentLanguage};`;
154
- }
155
- getPersistedLanguage() {
156
- return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim();
157
- }
158
- }
159
- RpxTranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, deps: [{ token: i1.RpxTranslationConfig }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
160
- RpxTranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService });
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, decorators: [{
162
- type: Injectable
163
- }], ctorParameters: function () { return [{ type: i1.RpxTranslationConfig }, { type: i2.HttpClient }]; } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ycHgteHVpLXRyYW5zbGF0aW9uL3NyYy9saWIvcnB4LXRyYW5zbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFnQixLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRWpHLE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVVoRSxNQUFNLE9BQU8scUJBQXFCO0lBV2hDLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLElBQWlCO1FBQ25DLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELFlBQ1UsTUFBNEIsRUFDNUIsSUFBZ0I7UUFEaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXpCbEIsb0JBQWUsR0FBZ0IsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7UUFFeEMsWUFBTyxHQUEwRCxFQUFFLENBQUM7UUFDcEUsZ0JBQVcsR0FBcUQsRUFBRSxDQUFDO1FBQ25FLGVBQVUsR0FBaUMsRUFBRSxDQUFDO1FBRTlDLG1CQUFjLEdBQWlDLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQW9CNUcsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0RCxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLENBQUM7U0FDbkM7YUFBTTtZQUNMLDBDQUEwQztZQUMxQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxNQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDO0lBRU0sK0JBQStCLENBQUMsTUFBYyxFQUFFLFlBQTBCO1FBQy9FLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQ3ZGLENBQUM7SUFDSixDQUFDO0lBRU0sMEJBQTBCLENBQUMsTUFBYyxFQUFFLFlBQW9CO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdFLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUE4QixFQUFFLEVBQUU7WUFDaEYsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUM7Z0JBQ3BFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUM7WUFDeEMsT0FBTyxTQUFTLENBQUMsWUFBYSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUNBLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3RDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxTQUFTLENBQUMsTUFBYztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNoRTtRQUVELElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9GLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzFDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxFQUFFO3dCQUNMLHVCQUF1Qjt3QkFDdkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDO3FCQUMvQjtvQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDeEIsV0FBVyxFQUFFLEdBQUcsTUFBTSw0QkFBNEI7d0JBQ2xELEdBQUcsRUFBRSwrQkFBK0I7d0JBQ3BDLEVBQUUsRUFBRSw4QkFBOEI7cUJBQ25DLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLElBQUksQ0FBQyxNQUFjLEVBQUUsSUFBaUI7UUFDNUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN4QixXQUFXLEVBQUUsTUFBTTtnQkFDbkIsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsRUFBRSxFQUFFLElBQUk7YUFDVCxDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hELE9BQU87U0FDUjtRQUVELHVEQUF1RDtRQUN2RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWtCLEdBQUcsRUFDM0M7Z0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2FBQy9CLENBQ0Y7aUJBQ0UsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUMxQixHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxjQUFjLEdBQXVDLEVBQUUsQ0FBQztnQkFFOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxPQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO3dCQUN4QyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBVyxFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFtQixDQUFDO3FCQUN2RDtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE1BQU0sWUFBWSxHQUF1QyxFQUFFLENBQUM7Z0JBQzVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNuQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUM5RyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLENBQUMsWUFBZ0QsRUFBRSxFQUFFO2dCQUMvRCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQztJQUNuRSxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFpQixDQUFDO0lBQzVJLENBQUM7O2tIQXRMVSxxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGxpdmVRdWVyeSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkYiwgVHJhbnNsYXRpb24gfSBmcm9tICcuL2RiJztcbmltcG9ydCB7IG1hdGNoQ2FzZSB9IGZyb20gJy4vaGVscGVycy9tYXRjaC1jYXNlL21hdGNoLWNhc2UuaGVscGVyJztcbmltcG9ydCB7IHJlcGxhY2VQbGFjZWhvbGRlcnMgfSBmcm9tICcuL2hlbHBlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMvcmVwbGFjZS1wbGFjZWhvbGRlcnMuaGVscGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZWREYXRhIH0gZnJvbSAnLi9tb2RlbHMvdHJhbnNsYXRlZC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFJweExhbmd1YWdlLCBZZXNPck5vVmFsdWUgfSBmcm9tICcuL3JweC1sYW5ndWFnZS5lbnVtJztcbmltcG9ydCB7IFJweFRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ycHgtdHJhbnNsYXRpb24uY29uZmlnJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uc0RUTyB7XG4gIHRyYW5zbGF0aW9uczogeyBbZnJvbTogc3RyaW5nXTogc3RyaW5nIHwgVHJhbnNsYXRlZERhdGEgfTtcbn1cblxuZXhwb3J0IHR5cGUgUmVwbGFjZW1lbnRzID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJweFRyYW5zbGF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgY3VycmVudExhbmd1YWdlOiBScHhMYW5ndWFnZSA9ICdlbic7XG4gIHByaXZhdGUgbGFuZ3VhZ2VLZXkgPSAnZXh1aS1wcmVmZXJyZWQtbGFuZ3VhZ2UnO1xuXG4gIHByaXZhdGUgcGhyYXNlczogeyBbcGhyYXNlOiBzdHJpbmddOiBCZWhhdmlvclN1YmplY3Q8VHJhbnNsYXRlZERhdGE+IH0gPSB7fTtcbiAgcHJpdmF0ZSBvYnNlcnZhYmxlczogeyBbcGhyYXNlOiBzdHJpbmddOiBPYnNlcnZhYmxlPFRyYW5zbGF0ZWREYXRhPiB9ID0ge307XG4gIHByaXZhdGUgcmVxdWVzdGluZzogeyBbbGFuZzogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICBwcml2YXRlIHJlcXVlc3RUaW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbDtcbiAgcHJpdmF0ZSBsYW5ndWFnZVNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PFJweExhbmd1YWdlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UnB4TGFuZ3VhZ2U+KHRoaXMuY3VycmVudExhbmd1YWdlKTtcbiAgcHVibGljIGxhbmd1YWdlJDogT2JzZXJ2YWJsZTxScHhMYW5ndWFnZT47XG5cbiAgcHVibGljIGdldCBsYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmd1YWdlO1xuICB9XG5cbiAgcHVibGljIHNldCBsYW5ndWFnZShsYW5nOiBScHhMYW5ndWFnZSkge1xuICAgIGlmIChsYW5nICE9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgdGhpcy5wZXJzaXN0TGFuZ3VhZ2UoKTtcbiAgICAgIHRoaXMubGFuZ3VhZ2VTb3VyY2UubmV4dChsYW5nKTtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucGhyYXNlcykuZm9yRWFjaCgocGhyYXNlKSA9PiB0aGlzLnRyYW5zbGF0ZShwaHJhc2UpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbmZpZzogUnB4VHJhbnNsYXRpb25Db25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIGNvbnN0IHBlcnNpc3RlZExhbmd1YWdlID0gdGhpcy5nZXRQZXJzaXN0ZWRMYW5ndWFnZSgpO1xuICAgIGlmIChwZXJzaXN0ZWRMYW5ndWFnZSkge1xuICAgICAgdGhpcy5sYW5ndWFnZSA9IHBlcnNpc3RlZExhbmd1YWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBubyBsYW5ndWFnZSBwZXJzaXN0ZWQgeWV0LCBzYXZlIGRlZmF1bHRcbiAgICAgIHRoaXMucGVyc2lzdExhbmd1YWdlKCk7XG4gICAgfVxuICAgIHRoaXMubGFuZ3VhZ2UkID0gdGhpcy5sYW5ndWFnZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbiQocGhyYXNlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWREYXRhKHBocmFzZSkucGlwZShcbiAgICAgIG1hcCgodCkgPT4gdC50cmFuc2xhdGlvbilcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zbGF0aW9uV2l0aFJlcGxhY2VtZW50cyQocGhyYXNlOiBzdHJpbmcsIHJlcGxhY2VtZW50czogUmVwbGFjZW1lbnRzKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkRGF0YShwaHJhc2UpLnBpcGUoXG4gICAgICBtYXAoKHRyYW5zbGF0ZWREYXRhKSA9PiByZXBsYWNlUGxhY2Vob2xkZXJzKHRyYW5zbGF0ZWREYXRhLnRyYW5zbGF0aW9uLCByZXBsYWNlbWVudHMpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb25XaXRoWWVzT3JObyQocGhyYXNlOiBzdHJpbmcsIHllc09yTm9WYWx1ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpc1llcyA9IHllc09yTm9WYWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gWWVzT3JOb1ZhbHVlLllFUy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTm8gPSB5ZXNPck5vVmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09IFllc09yTm9WYWx1ZS5OTy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZERhdGEocGhyYXNlKS5waXBlKG1hcCgodHJhbnNsYXRlZERhdGE6IFRyYW5zbGF0ZWREYXRhKSA9PiB7XG4gICAgICBjb25zdCB5ZXNPck5vVHJhbnNsYXRlZCA9IGlzWWVzID8gKHRyYW5zbGF0ZWREYXRhLnllcyB8fCB5ZXNPck5vVmFsdWUpXG4gICAgICAgIDogKHRyYW5zbGF0ZWREYXRhLm5vIHx8IHllc09yTm9WYWx1ZSk7XG4gICAgICByZXR1cm4gbWF0Y2hDYXNlKHllc09yTm9WYWx1ZSEsIHllc09yTm9UcmFuc2xhdGVkKTtcbiAgICB9XG4gICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRyYW5zbGF0ZWREYXRhKHBocmFzZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGVkRGF0YT4ge1xuICAgIGlmICh0aGlzLm9ic2VydmFibGVzLmhhc093blByb3BlcnR5KHBocmFzZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKHBocmFzZSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZShwaHJhc2U6IHN0cmluZyk6IE9ic2VydmFibGU8VHJhbnNsYXRlZERhdGE+IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIXRoaXMucGhyYXNlcy5oYXNPd25Qcm9wZXJ0eShwaHJhc2UpKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNsYXRlZERhdGE+KHsgdHJhbnNsYXRpb246IHBocmFzZSB9KTtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZXNbcGhyYXNlXSA9IHRoaXMucGhyYXNlc1twaHJhc2VdLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZW4nKSB7XG4gICAgICB0aGlzLnBocmFzZXNbcGhyYXNlXS5uZXh0KHsgdHJhbnNsYXRpb246IHBocmFzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbShsaXZlUXVlcnkoKCkgPT4gZGIudHJhbnNsYXRpb25zLndoZXJlKCdbcGhyYXNlK2xhbmddJykuZXF1YWxzKFtwaHJhc2UsIGxhbmddKS5maXJzdCgpKSkucGlwZShcbiAgICAgICAgdGFwKCh0KSA9PiB7XG4gICAgICAgICAgaWYgKHQgJiYgIXQuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQodC50cmFuc2xhdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgIC8vIGV4cGlyZWQsIGNsZWFuIHVwIERCXG4gICAgICAgICAgICAgIGRiLnRyYW5zbGF0aW9ucy5kZWxldGUodC5pZCEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BocmFzZV0ubmV4dCh7XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9uOiBgJHtwaHJhc2V9IFtUcmFuc2xhdGlvbiBpbiBwcm9ncmVzc11gLFxuICAgICAgICAgICAgICB5ZXM6ICdZZXMgW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXScsXG4gICAgICAgICAgICAgIG5vOiAnTm8gW1RyYW5zbGF0aW9uIGluIHByb2dyZXNzXSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2FkKHBocmFzZSwgbGFuZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+ICh7fSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVzW3BocmFzZV07XG4gIH1cblxuICBwcml2YXRlIGxvYWQocGhyYXNlOiBzdHJpbmcsIGxhbmc6IFJweExhbmd1YWdlKTogdm9pZCB7XG4gICAgaWYgKGxhbmcgPT09ICdlbicpIHtcbiAgICAgIHRoaXMucGhyYXNlc1twaHJhc2VdLm5leHQoe1xuICAgICAgICB0cmFuc2xhdGlvbjogcGhyYXNlLFxuICAgICAgICB5ZXM6ICdZZXMnLFxuICAgICAgICBubzogJ05vJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3RpbmcuaGFzT3duUHJvcGVydHkobGFuZykpIHtcbiAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlcXVlc3RpbmdbbGFuZ10uaW5kZXhPZihwaHJhc2UpICE9PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZlbnQgbWFraW5nIGEgQVBJIGNhbGwgd2l0aCBlbXB0eSBhcnJheSBvZiBwaHJhc2VcbiAgICBpZiAocGhyYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5wdXNoKHBocmFzZSk7XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVxdWVzdFRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWVNcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwgKyBgLyR7bGFuZ31gO1xuICAgICAgY29uc3QgcyA9IHRoaXMuaHR0cC5wb3N0PFRyYW5zbGF0aW9uc0RUTz4odXJsLFxuICAgICAgICB7XG4gICAgICAgICAgcGhyYXNlczogdGhpcy5yZXF1ZXN0aW5nW2xhbmddXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh0KSA9PiB0LnRyYW5zbGF0aW9ucyksXG4gICAgICAgICAgbWFwKCh0cmFuc2xhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWREYXRhOiB7IFtmcm9tOiBzdHJpbmddOiBUcmFuc2xhdGVkRGF0YSB9ID0ge307XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mKHRyYW5zbGF0aW9uc1twXSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlZERhdGFbcF0gPSB7IHRyYW5zbGF0aW9uOiB0cmFuc2xhdGlvbnNbcF0gYXMgc3RyaW5nIH07XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlZERhdGFbcF0gPSB0cmFuc2xhdGlvbnNbcF0gYXMgVHJhbnNsYXRlZERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZERhdGE7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2Zyb206IHN0cmluZ106IFRyYW5zbGF0ZWREYXRhIH0gPSB7fTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdGluZ1tsYW5nXS5mb3JFYWNoKChwKSA9PiAoXG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1twXSA9IHRoaXMuY29uZmlnLnRlc3RNb2RlID8geyB0cmFuc2xhdGlvbjogYFtUZXN0IHRyYW5zbGF0aW9uIGZvciAke3B9XWAgfSA6IHsgdHJhbnNsYXRpb246IHAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJhbnNsYXRpb25zKTtcbiAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSgodHJhbnNsYXRpb25zOiB7IFtmcm9tOiBzdHJpbmddOiBUcmFuc2xhdGVkRGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgdG9BZGQ6IFRyYW5zbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIHRvQWRkLnB1c2goVHJhbnNsYXRpb24uY3JlYXRlKHAsIGxhbmcsIHRyYW5zbGF0aW9uc1twXSwgRGF0ZVRpbWUubm93KCkucGx1cyh0aGlzLmNvbmZpZy52YWxpZGl0eSkudG9JU08oKSkpO1xuICAgICAgICAgICAgdGhpcy5waHJhc2VzW3BdLm5leHQodHJhbnNsYXRpb25zW3BdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkYi50cmFuc2xhdGlvbnMuYnVsa0FkZCh0b0FkZCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0aW5nW2xhbmddID0gW107XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0VGltZXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHt0aGlzLmxhbmd1YWdlS2V5fT0ke3RoaXMuY3VycmVudExhbmd1YWdlfTtgO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzaXN0ZWRMYW5ndWFnZSgpOiBScHhMYW5ndWFnZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLmZpbmQoKGNvb2tpZSkgPT4gY29va2llLnRyaW0oKS5zdGFydHNXaXRoKHRoaXMubGFuZ3VhZ2VLZXkgKyAnPScpKT8uc3BsaXQoJz0nKVsxXS50cmltKCkgYXMgUnB4TGFuZ3VhZ2U7XG4gIH1cbn1cbiJdfQ==
@@ -1,299 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, ChangeDetectorRef, Pipe, NgModule } from '@angular/core';
3
- import Dexie, { liveQuery } from 'dexie';
4
- import { DateTime } from 'luxon';
5
- import { BehaviorSubject, from, timer, of } from 'rxjs';
6
- import { map, tap, catchError } from 'rxjs/operators';
7
- import * as i2 from '@angular/common/http';
8
- import { HttpClientModule } from '@angular/common/http';
9
- import { AsyncPipe } from '@angular/common';
10
-
11
- var YesOrNoValue;
12
- (function (YesOrNoValue) {
13
- YesOrNoValue["YES"] = "Yes";
14
- YesOrNoValue["NO"] = "No";
15
- })(YesOrNoValue || (YesOrNoValue = {}));
16
-
17
- class RpxTranslationConfig {
18
- constructor() {
19
- this.debounceTimeMs = 300;
20
- this.testMode = false;
21
- }
22
- }
23
-
24
- class Translation {
25
- static create(phrase, lang, translation, validity) {
26
- const t = new Translation();
27
- t.phrase = phrase;
28
- t.lang = lang;
29
- t.translation = translation;
30
- t.validity = validity;
31
- return t;
32
- }
33
- isExpired() {
34
- return DateTime.fromISO(this.validity) < DateTime.now();
35
- }
36
- }
37
- class TranslationDB extends Dexie {
38
- constructor() {
39
- super('RpxTranslations');
40
- this.version(1).stores({
41
- translations: '++id, [phrase+lang]'
42
- });
43
- this.translations.mapToClass(Translation);
44
- }
45
- }
46
- const db = new TranslationDB();
47
-
48
- const matchCase = (str1, str2) => {
49
- if (str1.length === 0 || str2.length === 0) {
50
- return str2;
51
- }
52
- if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {
53
- return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;
54
- }
55
- return str2.toLowerCase();
56
- };
57
-
58
- const replacePlaceholders = (input, replacements) => {
59
- Object.keys(replacements).forEach((key) => {
60
- // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet
61
- const search = `%${key}%`;
62
- while (input.indexOf(search) !== -1) {
63
- input = input.replace(search, replacements[key]);
64
- }
65
- });
66
- return input;
67
- };
68
-
69
- class RpxTranslationService {
70
- get language() {
71
- return this.currentLanguage;
72
- }
73
- set language(lang) {
74
- if (lang !== this.currentLanguage) {
75
- this.currentLanguage = lang;
76
- this.persistLanguage();
77
- this.languageSource.next(lang);
78
- Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));
79
- }
80
- }
81
- constructor(config, http) {
82
- this.config = config;
83
- this.http = http;
84
- this.currentLanguage = 'en';
85
- this.languageKey = 'exui-preferred-language';
86
- this.phrases = {};
87
- this.observables = {};
88
- this.requesting = {};
89
- this.languageSource = new BehaviorSubject(this.currentLanguage);
90
- const persistedLanguage = this.getPersistedLanguage();
91
- if (persistedLanguage) {
92
- this.language = persistedLanguage;
93
- }
94
- else {
95
- // no language persisted yet, save default
96
- this.persistLanguage();
97
- }
98
- this.language$ = this.languageSource.asObservable();
99
- }
100
- getTranslation$(phrase) {
101
- return this.getTranslatedData(phrase).pipe(map((t) => t.translation));
102
- }
103
- getTranslationWithReplacements$(phrase, replacements) {
104
- return this.getTranslatedData(phrase).pipe(map((translatedData) => replacePlaceholders(translatedData.translation, replacements)));
105
- }
106
- getTranslationWithYesOrNo$(phrase, yesOrNoValue) {
107
- const isYes = (yesOrNoValue === null || yesOrNoValue === void 0 ? void 0 : yesOrNoValue.toLowerCase()) === YesOrNoValue.YES.toLowerCase();
108
- const isNo = (yesOrNoValue === null || yesOrNoValue === void 0 ? void 0 : yesOrNoValue.toLowerCase()) === YesOrNoValue.NO.toLowerCase();
109
- return this.getTranslatedData(phrase).pipe(map((translatedData) => {
110
- const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)
111
- : (translatedData.no || yesOrNoValue);
112
- return matchCase(yesOrNoValue, yesOrNoTranslated);
113
- }));
114
- }
115
- getTranslatedData(phrase) {
116
- if (this.observables.hasOwnProperty(phrase)) {
117
- return this.observables[phrase];
118
- }
119
- return this.translate(phrase);
120
- }
121
- translate(phrase) {
122
- const lang = this.language;
123
- if (!this.phrases.hasOwnProperty(phrase)) {
124
- this.phrases[phrase] = new BehaviorSubject({ translation: phrase });
125
- this.observables[phrase] = this.phrases[phrase].asObservable();
126
- }
127
- if (lang === 'en') {
128
- this.phrases[phrase].next({ translation: phrase });
129
- }
130
- else {
131
- from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(tap((t) => {
132
- if (t && !t.isExpired()) {
133
- this.phrases[phrase].next(t.translation);
134
- }
135
- else {
136
- if (t) {
137
- // expired, clean up DB
138
- db.translations.delete(t.id);
139
- }
140
- this.phrases[phrase].next({
141
- translation: `${phrase} [Translation in progress]`,
142
- yes: 'Yes [Translation in progress]',
143
- no: 'No [Translation in progress]'
144
- });
145
- this.load(phrase, lang);
146
- }
147
- })).subscribe(() => ({}));
148
- }
149
- return this.observables[phrase];
150
- }
151
- load(phrase, lang) {
152
- if (lang === 'en') {
153
- this.phrases[phrase].next({
154
- translation: phrase,
155
- yes: 'Yes',
156
- no: 'No'
157
- });
158
- return;
159
- }
160
- if (!this.requesting.hasOwnProperty(lang)) {
161
- this.requesting[lang] = [];
162
- }
163
- if (this.requesting[lang].indexOf(phrase) !== -1) {
164
- return;
165
- }
166
- // Prevent making a API call with empty array of phrase
167
- if (phrase.length === 0) {
168
- return;
169
- }
170
- this.requesting[lang].push(phrase);
171
- if (this.requestTimerSubscription) {
172
- this.requestTimerSubscription.unsubscribe();
173
- }
174
- this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {
175
- const url = this.config.baseUrl + `/${lang}`;
176
- const s = this.http.post(url, {
177
- phrases: this.requesting[lang]
178
- })
179
- .pipe(map((t) => t.translations), map((translations) => {
180
- const translatedData = {};
181
- Object.keys(translations).forEach((p) => {
182
- if (typeof (translations[p]) === 'string') {
183
- translatedData[p] = { translation: translations[p] };
184
- }
185
- else {
186
- translatedData[p] = translations[p];
187
- }
188
- });
189
- return translatedData;
190
- }), catchError(() => {
191
- const translations = {};
192
- this.requesting[lang].forEach((p) => (translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p }));
193
- return of(translations);
194
- })).subscribe((translations) => {
195
- var _a;
196
- const toAdd = [];
197
- Object.keys(translations).forEach((p) => {
198
- toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));
199
- this.phrases[p].next(translations[p]);
200
- });
201
- db.translations.bulkAdd(toAdd);
202
- this.requesting[lang] = [];
203
- (_a = this.requestTimerSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
204
- this.requestTimerSubscription = null;
205
- s.unsubscribe();
206
- });
207
- });
208
- }
209
- persistLanguage() {
210
- document.cookie = `${this.languageKey}=${this.currentLanguage};`;
211
- }
212
- getPersistedLanguage() {
213
- var _a;
214
- return (_a = document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))) === null || _a === void 0 ? void 0 : _a.split('=')[1].trim();
215
- }
216
- }
217
- RpxTranslationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, deps: [{ token: RpxTranslationConfig }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
218
- RpxTranslationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService });
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationService, decorators: [{
220
- type: Injectable
221
- }], ctorParameters: function () { return [{ type: RpxTranslationConfig }, { type: i2.HttpClient }]; } });
222
-
223
- class RpxTranslatePipe {
224
- constructor(translationService, injector) {
225
- this.translationService = translationService;
226
- this.injector = injector;
227
- this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));
228
- }
229
- transform(value, replacements, yesOrNoValue) {
230
- if (value && typeof value === 'string' && value.toString().trim()) {
231
- let o;
232
- if (replacements) {
233
- o = this.translationService.getTranslationWithReplacements$(value, replacements);
234
- }
235
- else if (yesOrNoValue) {
236
- o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);
237
- }
238
- else {
239
- o = this.translationService.getTranslation$(value);
240
- }
241
- const ret = this.asyncPipe.transform(o);
242
- return ret;
243
- }
244
- return null;
245
- }
246
- ngOnDestroy() {
247
- this.asyncPipe.ngOnDestroy();
248
- }
249
- }
250
- RpxTranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, deps: [{ token: RpxTranslationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Pipe });
251
- RpxTranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, name: "rpxTranslate", pure: false });
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslatePipe, decorators: [{
253
- type: Pipe,
254
- args: [{
255
- name: 'rpxTranslate',
256
- pure: false
257
- }]
258
- }], ctorParameters: function () { return [{ type: RpxTranslationService }, { type: i0.Injector }]; } });
259
-
260
- class RpxTranslationModule {
261
- static forRoot(config) {
262
- return {
263
- ngModule: RpxTranslationModule,
264
- providers: [
265
- {
266
- provide: RpxTranslationConfig, useValue: config
267
- },
268
- RpxTranslationService
269
- ]
270
- };
271
- }
272
- static forChild() {
273
- return {
274
- ngModule: RpxTranslationModule
275
- };
276
- }
277
- }
278
- RpxTranslationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
279
- RpxTranslationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, declarations: [RpxTranslatePipe], imports: [HttpClientModule], exports: [RpxTranslatePipe] });
280
- RpxTranslationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, imports: [HttpClientModule] });
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RpxTranslationModule, decorators: [{
282
- type: NgModule,
283
- args: [{
284
- declarations: [RpxTranslatePipe],
285
- imports: [HttpClientModule],
286
- exports: [RpxTranslatePipe]
287
- }]
288
- }] });
289
-
290
- /*
291
- * Public API Surface of rpx-translation
292
- */
293
-
294
- /**
295
- * Generated bundle index. Do not edit.
296
- */
297
-
298
- export { RpxTranslatePipe, RpxTranslationConfig, RpxTranslationModule, RpxTranslationService, YesOrNoValue };
299
- //# sourceMappingURL=rpx-xui-translation.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpx-xui-translation.mjs","sources":["../../../projects/rpx-xui-translation/src/lib/rpx-language.enum.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.config.ts","../../../projects/rpx-xui-translation/src/lib/db.ts","../../../projects/rpx-xui-translation/src/lib/helpers/match-case/match-case.helper.ts","../../../projects/rpx-xui-translation/src/lib/helpers/replace-placeholders/replace-placeholders.helper.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.service.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translate.pipe.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.module.ts","../../../projects/rpx-xui-translation/src/public-api.ts","../../../projects/rpx-xui-translation/src/rpx-xui-translation.ts"],"sourcesContent":["export type RpxLanguage = 'en' | 'cy';\nexport enum YesOrNoValue {\n YES = 'Yes',\n NO = 'No',\n}\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { TranslatedData } from './models/translated-data.model';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: TranslatedData;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: TranslatedData, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","export const matchCase = (str1: string, str2: string) => {\n if (str1.length === 0 || str2.length === 0) {\n return str2;\n }\n\n if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {\n return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;\n }\n return str2.toLowerCase();\n};\n","import { Replacements } from '../../rpx-translation.service';\n\nexport const replacePlaceholders = (input: string, replacements: Replacements) => {\n Object.keys(replacements).forEach((key) => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n\n return input;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { matchCase } from './helpers/match-case/match-case.helper';\nimport { replacePlaceholders } from './helpers/replace-placeholders/replace-placeholders.helper';\nimport { TranslatedData } from './models/translated-data.model';\nimport { RpxLanguage, YesOrNoValue } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string | TranslatedData };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<TranslatedData> } = {};\n private observables: { [phrase: string]: Observable<TranslatedData> } = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));\n }\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation$(phrase: string): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((t) => t.translation)\n );\n }\n\n public getTranslationWithReplacements$(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((translatedData) => replacePlaceholders(translatedData.translation, replacements))\n );\n }\n\n public getTranslationWithYesOrNo$(phrase: string, yesOrNoValue: string): Observable<string> {\n const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();\n const isNo = yesOrNoValue?.toLowerCase() === YesOrNoValue.NO.toLowerCase();\n\n return this.getTranslatedData(phrase).pipe(map((translatedData: TranslatedData) => {\n const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)\n : (translatedData.no || yesOrNoValue);\n return matchCase(yesOrNoValue!, yesOrNoTranslated);\n }\n ));\n }\n\n private getTranslatedData(phrase: string): Observable<TranslatedData> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n private translate(phrase: string): Observable<TranslatedData> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<TranslatedData>({ translation: phrase });\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next({ translation: phrase });\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap((t) => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next({\n translation: `${phrase} [Translation in progress]`,\n yes: 'Yes [Translation in progress]',\n no: 'No [Translation in progress]'\n });\n this.load(phrase, lang);\n }\n }),\n ).subscribe(() => ({}));\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next({\n translation: phrase,\n yes: 'Yes',\n no: 'No'\n });\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n // Prevent making a API call with empty array of phrase\n if (phrase.length === 0) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url,\n {\n phrases: this.requesting[lang]\n }\n )\n .pipe(\n map((t) => t.translations),\n map((translations) => {\n const translatedData: { [from: string]: TranslatedData } = {};\n\n Object.keys(translations).forEach((p) => {\n if (typeof(translations[p]) === 'string') {\n translatedData[p] = { translation: translations[p] as string };\n } else {\n translatedData[p] = translations[p] as TranslatedData;\n }\n });\n\n return translatedData;\n }),\n catchError(() => {\n const translations: { [from: string]: TranslatedData } = {};\n this.requesting[lang].forEach((p) => (\n translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p })\n );\n return of(translations);\n })\n ).subscribe((translations: { [from: string]: TranslatedData }) => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach((p) => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription?.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Injector, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Replacements, RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe implements PipeTransform, OnDestroy {\n private asyncPipe: AsyncPipe;\n\n constructor(\n private translationService: RpxTranslationService,\n private injector: Injector\n ) {\n this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));\n }\n\n public transform<T = string>(value: T, replacements?: Replacements | null, yesOrNoValue?: string): T | null {\n if (value && typeof value === 'string' && value.toString().trim()) {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements$(value, replacements);\n } else if (yesOrNoValue) {\n o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);\n } else {\n o = this.translationService.getTranslation$(value);\n }\n\n const ret = this.asyncPipe.transform<string>(o);\n return ret as unknown as T;\n }\n\n return null;\n }\n\n public ngOnDestroy(): void {\n this.asyncPipe.ngOnDestroy();\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.RpxTranslationConfig","i1.RpxTranslationService"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpx-xui-translation.mjs","sources":["../../../projects/rpx-xui-translation/src/lib/rpx-language.enum.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.config.ts","../../../projects/rpx-xui-translation/src/lib/db.ts","../../../projects/rpx-xui-translation/src/lib/helpers/match-case/match-case.helper.ts","../../../projects/rpx-xui-translation/src/lib/helpers/replace-placeholders/replace-placeholders.helper.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.service.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translate.pipe.ts","../../../projects/rpx-xui-translation/src/lib/rpx-translation.module.ts","../../../projects/rpx-xui-translation/src/public-api.ts","../../../projects/rpx-xui-translation/src/rpx-xui-translation.ts"],"sourcesContent":["export type RpxLanguage = 'en' | 'cy';\nexport enum YesOrNoValue {\n YES = 'Yes',\n NO = 'No',\n}\n","export type ValidityDurationSpec = {\n years?: number;\n quarters?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n milliseconds?: number;\n};\n\nexport class RpxTranslationConfig {\n validity: ValidityDurationSpec;\n baseUrl: string;\n\n debounceTimeMs = 300;\n testMode = false;\n}\n","import Dexie, { Table } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { RpxLanguage } from './rpx-language.enum';\nimport { TranslatedData } from './models/translated-data.model';\n\nexport class Translation {\n id?: number;\n phrase: string;\n lang: RpxLanguage;\n translation: TranslatedData;\n validity: string;\n\n public static create(phrase: string, lang: RpxLanguage, translation: TranslatedData, validity: string): Translation {\n const t = new Translation();\n t.phrase = phrase;\n t.lang = lang;\n t.translation = translation;\n t.validity = validity;\n return t;\n }\n\n isExpired(): boolean {\n return DateTime.fromISO(this.validity) < DateTime.now();\n }\n}\n\nexport class TranslationDB extends Dexie {\n translations: Table<Translation, number>;\n\n constructor() {\n super('RpxTranslations');\n this.version(1).stores({\n translations: '++id, [phrase+lang]'\n });\n this.translations.mapToClass(Translation);\n }\n}\n\nexport const db = new TranslationDB();\n","export const matchCase = (str1: string, str2: string) => {\n if (str1.length === 0 || str2.length === 0) {\n return str2;\n }\n\n if (str1.charAt(0).toUpperCase() === str1.charAt(0)) {\n return `${str2.charAt(0).toUpperCase()}${str2.slice(1)}`;\n }\n return str2.toLowerCase();\n};\n","import { Replacements } from '../../rpx-translation.service';\n\nexport const replacePlaceholders = (input: string, replacements: Replacements) => {\n Object.keys(replacements).forEach((key) => {\n // Ideally use replaceAll here, but that isn't fully compatible with targeted browsers and packaging yet\n const search = `%${key}%`;\n while (input.indexOf(search) !== -1) {\n input = input.replace(search, replacements[key]);\n }\n });\n\n return input;\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { liveQuery } from 'dexie';\nimport { DateTime } from 'luxon';\nimport { BehaviorSubject, from, Observable, of, Subscription, timer } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { db, Translation } from './db';\nimport { matchCase } from './helpers/match-case/match-case.helper';\nimport { replacePlaceholders } from './helpers/replace-placeholders/replace-placeholders.helper';\nimport { TranslatedData } from './models/translated-data.model';\nimport { RpxLanguage, YesOrNoValue } from './rpx-language.enum';\nimport { RpxTranslationConfig } from './rpx-translation.config';\n\ninterface TranslationsDTO {\n translations: { [from: string]: string | TranslatedData };\n}\n\nexport type Replacements = { [key: string]: string };\n\n@Injectable()\nexport class RpxTranslationService {\n private currentLanguage: RpxLanguage = 'en';\n private languageKey = 'exui-preferred-language';\n\n private phrases: { [phrase: string]: BehaviorSubject<TranslatedData> } = {};\n private observables: { [phrase: string]: Observable<TranslatedData> } = {};\n private requesting: { [lang: string]: string[] } = {};\n private requestTimerSubscription: Subscription | null;\n private languageSource: BehaviorSubject<RpxLanguage> = new BehaviorSubject<RpxLanguage>(this.currentLanguage);\n public language$: Observable<RpxLanguage>;\n\n public get language(): RpxLanguage {\n return this.currentLanguage;\n }\n\n public set language(lang: RpxLanguage) {\n if (lang !== this.currentLanguage) {\n this.currentLanguage = lang;\n this.persistLanguage();\n this.languageSource.next(lang);\n Object.keys(this.phrases).forEach((phrase) => this.translate(phrase));\n }\n }\n\n constructor(\n private config: RpxTranslationConfig,\n private http: HttpClient\n ) {\n const persistedLanguage = this.getPersistedLanguage();\n if (persistedLanguage) {\n this.language = persistedLanguage;\n } else {\n // no language persisted yet, save default\n this.persistLanguage();\n }\n this.language$ = this.languageSource.asObservable();\n }\n\n public getTranslation$(phrase: string): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((t) => t.translation)\n );\n }\n\n public getTranslationWithReplacements$(phrase: string, replacements: Replacements): Observable<string> {\n return this.getTranslatedData(phrase).pipe(\n map((translatedData) => replacePlaceholders(translatedData.translation, replacements))\n );\n }\n\n public getTranslationWithYesOrNo$(phrase: string, yesOrNoValue: string): Observable<string> {\n const isYes = yesOrNoValue?.toLowerCase() === YesOrNoValue.YES.toLowerCase();\n const isNo = yesOrNoValue?.toLowerCase() === YesOrNoValue.NO.toLowerCase();\n\n return this.getTranslatedData(phrase).pipe(map((translatedData: TranslatedData) => {\n const yesOrNoTranslated = isYes ? (translatedData.yes || yesOrNoValue)\n : (translatedData.no || yesOrNoValue);\n return matchCase(yesOrNoValue!, yesOrNoTranslated);\n }\n ));\n }\n\n private getTranslatedData(phrase: string): Observable<TranslatedData> {\n if (this.observables.hasOwnProperty(phrase)) {\n return this.observables[phrase];\n }\n\n return this.translate(phrase);\n }\n\n private translate(phrase: string): Observable<TranslatedData> {\n const lang = this.language;\n if (!this.phrases.hasOwnProperty(phrase)) {\n this.phrases[phrase] = new BehaviorSubject<TranslatedData>({ translation: phrase });\n this.observables[phrase] = this.phrases[phrase].asObservable();\n }\n\n if (lang === 'en') {\n this.phrases[phrase].next({ translation: phrase });\n } else {\n from(liveQuery(() => db.translations.where('[phrase+lang]').equals([phrase, lang]).first())).pipe(\n tap((t) => {\n if (t && !t.isExpired()) {\n this.phrases[phrase].next(t.translation);\n } else {\n if (t) {\n // expired, clean up DB\n db.translations.delete(t.id!);\n }\n this.phrases[phrase].next({\n translation: `${phrase} [Translation in progress]`,\n yes: 'Yes [Translation in progress]',\n no: 'No [Translation in progress]'\n });\n this.load(phrase, lang);\n }\n }),\n ).subscribe(() => ({}));\n }\n\n return this.observables[phrase];\n }\n\n private load(phrase: string, lang: RpxLanguage): void {\n if (lang === 'en') {\n this.phrases[phrase].next({\n translation: phrase,\n yes: 'Yes',\n no: 'No'\n });\n return;\n }\n\n if (!this.requesting.hasOwnProperty(lang)) {\n this.requesting[lang] = [];\n }\n\n if (this.requesting[lang].indexOf(phrase) !== -1) {\n return;\n }\n\n // Prevent making a API call with empty array of phrase\n if (phrase.length === 0) {\n return;\n }\n\n this.requesting[lang].push(phrase);\n\n if (this.requestTimerSubscription) {\n this.requestTimerSubscription.unsubscribe();\n }\n\n this.requestTimerSubscription = timer(this.config.debounceTimeMs).subscribe(() => {\n const url = this.config.baseUrl + `/${lang}`;\n const s = this.http.post<TranslationsDTO>(url,\n {\n phrases: this.requesting[lang]\n }\n )\n .pipe(\n map((t) => t.translations),\n map((translations) => {\n const translatedData: { [from: string]: TranslatedData } = {};\n\n Object.keys(translations).forEach((p) => {\n if (typeof(translations[p]) === 'string') {\n translatedData[p] = { translation: translations[p] as string };\n } else {\n translatedData[p] = translations[p] as TranslatedData;\n }\n });\n\n return translatedData;\n }),\n catchError(() => {\n const translations: { [from: string]: TranslatedData } = {};\n this.requesting[lang].forEach((p) => (\n translations[p] = this.config.testMode ? { translation: `[Test translation for ${p}]` } : { translation: p })\n );\n return of(translations);\n })\n ).subscribe((translations: { [from: string]: TranslatedData }) => {\n const toAdd: Translation[] = [];\n Object.keys(translations).forEach((p) => {\n toAdd.push(Translation.create(p, lang, translations[p], DateTime.now().plus(this.config.validity).toISO()));\n this.phrases[p].next(translations[p]);\n });\n db.translations.bulkAdd(toAdd);\n this.requesting[lang] = [];\n this.requestTimerSubscription?.unsubscribe();\n this.requestTimerSubscription = null;\n s.unsubscribe();\n });\n });\n }\n\n private persistLanguage(): void {\n document.cookie = `${this.languageKey}=${this.currentLanguage};`;\n }\n\n private getPersistedLanguage(): RpxLanguage {\n return document.cookie.split(';').find((cookie) => cookie.trim().startsWith(this.languageKey + '='))?.split('=')[1].trim() as RpxLanguage;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectorRef, Injector, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Replacements, RpxTranslationService } from './rpx-translation.service';\n\n@Pipe({\n name: 'rpxTranslate',\n pure: false\n})\nexport class RpxTranslatePipe implements PipeTransform, OnDestroy {\n private asyncPipe: AsyncPipe;\n\n constructor(\n private translationService: RpxTranslationService,\n private injector: Injector\n ) {\n this.asyncPipe = new AsyncPipe(injector.get(ChangeDetectorRef));\n }\n\n public transform<T = string>(value: T, replacements?: Replacements | null, yesOrNoValue?: string): T | null {\n if (value && typeof value === 'string' && value.toString().trim()) {\n let o: Observable<string>;\n if (replacements) {\n o = this.translationService.getTranslationWithReplacements$(value, replacements);\n } else if (yesOrNoValue) {\n o = this.translationService.getTranslationWithYesOrNo$(value, yesOrNoValue);\n } else {\n o = this.translationService.getTranslation$(value);\n }\n\n const ret = this.asyncPipe.transform<string>(o);\n return ret as unknown as T;\n }\n\n return null;\n }\n\n public ngOnDestroy(): void {\n this.asyncPipe.ngOnDestroy();\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RpxTranslatePipe } from './rpx-translate.pipe';\nimport { RpxTranslationConfig } from './rpx-translation.config';\nimport { RpxTranslationService } from './rpx-translation.service';\n\n@NgModule({\n declarations: [RpxTranslatePipe],\n imports: [HttpClientModule],\n exports: [RpxTranslatePipe]\n})\nexport class RpxTranslationModule {\n public static forRoot(config: RpxTranslationConfig): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule,\n providers: [\n {\n provide: RpxTranslationConfig, useValue: config\n },\n RpxTranslationService\n ]\n };\n }\n\n public static forChild(): ModuleWithProviders<RpxTranslationModule> {\n return {\n ngModule: RpxTranslationModule\n };\n }\n}\n","/*\n * Public API Surface of rpx-translation\n */\n\nexport * from './lib/rpx-language.enum';\nexport * from './lib/rpx-translation.config';\nexport * from './lib/rpx-translation.service';\nexport * from './lib/rpx-translate.pipe';\nexport * from './lib/rpx-translation.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.RpxTranslationConfig","i1.RpxTranslationService"],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes