@ogs-gmbh/ngx-translate 1.0.1 → 1.2.0

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.
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # i18n Translation Library
2
2
 
3
- ![GitHub License](https://img.shields.io/github/license/OGS-GmbH/ngx-translate)
4
- ![NPM Version](https://img.shields.io/npm/v/%40ogs-gmbh%2Fngx-translate)
5
- ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/OGS-GmbH/ngx-translate/main-deploy.yml)
3
+ ![GitHub License](https://img.shields.io/github/license/OGS-GmbH/ngx-translate?color=0f434e)
4
+ ![NPM Version](https://img.shields.io/npm/v/%40ogs-gmbh%2Fngx-translate?color=0f434e)
5
+ ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/OGS-GmbH/ngx-translate/main-deploy.yml?color=0f434e)
6
6
 
7
7
  This Angular i18n library offers a REST-based approach to internationalization, with support for chunked and token-based translation loading.
8
8
 
@@ -33,7 +33,7 @@ pnpm install @ogs-gmbh/ngx-translate
33
33
  </details>
34
34
 
35
35
  ## License
36
- The MIT License (MIT) - Please have a look at the [LICENSE file](https://github.com/OGS-GmbH/ngx-translate/blob/main/LICENSE) for more details.
36
+ The MIT License (MIT) - Please have a look at the [LICENSE file](./LICENSE) for more details.
37
37
 
38
38
  ## Contributing
39
39
  Contributions are always welcome and greatly appreciated. Whether you want to report a bug, suggest a new feature, or improve the documentation, your input helps make the project better for everyone.
@@ -10,13 +10,16 @@ import { provideTranslationInterceptor } from "./providers/interceptor.provider"
10
10
  import * as i0 from "@angular/core";
11
11
  export class TranslationModule {
12
12
  static forRoot(translateConfig) {
13
+ const providers = [
14
+ provideTranslationConfig(translateConfig.translate),
15
+ provideTranslationHttpConfig(translateConfig.http.config)
16
+ ];
17
+ if (translateConfig.http.options !== undefined) {
18
+ providers.push(provideTranslationHttpOptions(translateConfig.http.options));
19
+ }
13
20
  return {
14
21
  ngModule: TranslationModule,
15
- providers: [
16
- provideTranslationConfig(translateConfig.translate),
17
- provideTranslationHttpConfig(translateConfig.http.config),
18
- provideTranslationHttpOptions(translateConfig.http.options)
19
- ]
22
+ providers
20
23
  };
21
24
  }
22
25
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -48,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
48
51
  ]
49
52
  }]
50
53
  }] });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBa0JqRixNQUFNLE9BQU8saUJBQWlCO0lBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUUsZUFBMEM7UUFDL0QsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUyxFQUFFO2dCQUNULHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25ELDRCQUE0QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN6RCw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUM1RDtTQUNGLENBQUM7SUFDSixDQUFDO3dHQVZVLGlCQUFpQjt5R0FBakIsaUJBQWlCLFlBZDFCLFlBQVk7WUFDWixxQkFBcUIsYUFTckIscUJBQXFCO3lHQUlaLGlCQUFpQixhQVhqQjtZQUNULHNCQUFzQjtZQUN0Qix1QkFBdUI7WUFDdkIsa0JBQWtCO1lBQ2xCLDZCQUE2QixFQUFFO1NBQ2hDLFlBUkMsWUFBWTtZQUNaLHFCQUFxQixFQVNyQixxQkFBcUI7OzRGQUlaLGlCQUFpQjtrQkFoQjdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1oscUJBQXFCO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Qsc0JBQXNCO3dCQUN0Qix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsNkJBQTZCLEVBQUU7cUJBQ2hDO29CQUNELE9BQU8sRUFBRTt3QkFDUCxxQkFBcUI7cUJBQ3RCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXMvY29uZmlnLnR5cGVcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uSHR0cFNlcml2Y2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1odHRwLnNlcml2Y2VcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uUGlwZU1vZHVsZSB9IGZyb20gXCIuL3BpcGUubW9kdWxlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblN0b3JlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXN0b3JlLnNlcnZpY2VcIjtcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3Byb3ZpZGVycy9jb25maWcucHJvdmlkZXJcIjtcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xhdGlvbkh0dHBDb25maWcsIHByb3ZpZGVUcmFuc2xhdGlvbkh0dHBPcHRpb25zIH0gZnJvbSBcIi4vcHJvdmlkZXJzL2h0dHAucHJvdmlkZXJcIjtcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xhdGlvbkludGVyY2VwdG9yIH0gZnJvbSBcIi4vcHJvdmlkZXJzL2ludGVyY2VwdG9yLnByb3ZpZGVyXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRpb25QaXBlTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRyYW5zbGF0aW9uSHR0cFNlcml2Y2UsXG4gICAgVHJhbnNsYXRpb25TdG9yZVNlcnZpY2UsXG4gICAgVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByb3ZpZGVUcmFuc2xhdGlvbkludGVyY2VwdG9yKClcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFRyYW5zbGF0aW9uUGlwZU1vZHVsZVxuICBdXG59KVxuLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0c2VzbGludC9uby1leHRyYW5lb3VzLWNsYXNzICovXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25Nb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3QgKHRyYW5zbGF0ZUNvbmZpZzogUmVhZG9ubHk8VHJhbnNsYXRlQ29uZmlnPik6IE1vZHVsZVdpdGhQcm92aWRlcnM8VHJhbnNsYXRpb25Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVUcmFuc2xhdGlvbkNvbmZpZyh0cmFuc2xhdGVDb25maWcudHJhbnNsYXRlKSxcbiAgICAgICAgcHJvdmlkZVRyYW5zbGF0aW9uSHR0cENvbmZpZyh0cmFuc2xhdGVDb25maWcuaHR0cC5jb25maWcpLFxuICAgICAgICBwcm92aWRlVHJhbnNsYXRpb25IdHRwT3B0aW9ucyh0cmFuc2xhdGVDb25maWcuaHR0cC5vcHRpb25zKVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBa0JqRixNQUFNLE9BQU8saUJBQWlCO0lBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUUsZUFBMEM7UUFDL0QsTUFBTSxTQUFTLEdBQWU7WUFDNUIsd0JBQXdCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUNuRCw0QkFBNEIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUMxRCxDQUFDO1FBRUYsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxTQUFTLENBQUMsSUFBSSxDQUNaLDZCQUE2QixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQzVELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUI7WUFDM0IsU0FBUztTQUNWLENBQUM7SUFDSixDQUFDO3dHQWpCVSxpQkFBaUI7eUdBQWpCLGlCQUFpQixZQWQxQixZQUFZO1lBQ1oscUJBQXFCLGFBU3JCLHFCQUFxQjt5R0FJWixpQkFBaUIsYUFYakI7WUFDVCxzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCLGtCQUFrQjtZQUNsQiw2QkFBNkIsRUFBRTtTQUNoQyxZQVJDLFlBQVk7WUFDWixxQkFBcUIsRUFTckIscUJBQXFCOzs0RkFJWixpQkFBaUI7a0JBaEI3QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLHFCQUFxQjtxQkFDdEI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLDZCQUE2QixFQUFFO3FCQUNoQztvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3FCQUN0QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBQcm92aWRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVDb25maWcgfSBmcm9tIFwiLi90eXBlcy9jb25maWcudHlwZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25IdHRwU2VyaXZjZSB9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLWh0dHAuc2VyaXZjZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25QaXBlTW9kdWxlIH0gZnJvbSBcIi4vcGlwZS5tb2R1bGVcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uU3RvcmVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdHJhbnNsYXRpb24tc3RvcmUuc2VydmljZVwiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbGF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vcHJvdmlkZXJzL2NvbmZpZy5wcm92aWRlclwiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbGF0aW9uSHR0cENvbmZpZywgcHJvdmlkZVRyYW5zbGF0aW9uSHR0cE9wdGlvbnMgfSBmcm9tIFwiLi9wcm92aWRlcnMvaHR0cC5wcm92aWRlclwiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbGF0aW9uSW50ZXJjZXB0b3IgfSBmcm9tIFwiLi9wcm92aWRlcnMvaW50ZXJjZXB0b3IucHJvdmlkZXJcIjtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGlvblBpcGVNb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVHJhbnNsYXRpb25IdHRwU2VyaXZjZSxcbiAgICBUcmFuc2xhdGlvblN0b3JlU2VydmljZSxcbiAgICBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJvdmlkZVRyYW5zbGF0aW9uSW50ZXJjZXB0b3IoKVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJhbnNsYXRpb25QaXBlTW9kdWxlXG4gIF1cbn0pXG4vKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHRzZXNsaW50L25vLWV4dHJhbmVvdXMtY2xhc3MgKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbk1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdCAodHJhbnNsYXRlQ29uZmlnOiBSZWFkb25seTxUcmFuc2xhdGVDb25maWc+KTogTW9kdWxlV2l0aFByb3ZpZGVyczxUcmFuc2xhdGlvbk1vZHVsZT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICAgIHByb3ZpZGVUcmFuc2xhdGlvbkNvbmZpZyh0cmFuc2xhdGVDb25maWcudHJhbnNsYXRlKSxcbiAgICAgIHByb3ZpZGVUcmFuc2xhdGlvbkh0dHBDb25maWcodHJhbnNsYXRlQ29uZmlnLmh0dHAuY29uZmlnKVxuICAgIF07XG5cbiAgICBpZiAodHJhbnNsYXRlQ29uZmlnLmh0dHAub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm92aWRlcnMucHVzaChcbiAgICAgICAgcHJvdmlkZVRyYW5zbGF0aW9uSHR0cE9wdGlvbnModHJhbnNsYXRlQ29uZmlnLmh0dHAub3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICAgIHByb3ZpZGVyc1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectorRef, Pipe, inject } from "@angular/core";
2
2
  import { TRANSLATION_CONFIG_TOKEN } from "../public-api";
3
- import { filter } from "rxjs";
3
+ import { EMPTY, catchError, filter } from "rxjs";
4
4
  import { TRANSLATION_SCOPE_TOKEN } from "../tokens/scope.token";
5
5
  import { TranslationService } from "../services/translation.service";
6
6
  import { resolveScope } from "../utils/translate.util";
@@ -13,11 +13,16 @@ export class TranslationPipe {
13
13
  _changeDetectorRef = inject(ChangeDetectorRef);
14
14
  _translationScopeToken = inject(TRANSLATION_SCOPE_TOKEN, { optional: true });
15
15
  _translationConfig = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });
16
- transform(value, token, scope) {
16
+ transform(value, token, scope, fallback) {
17
17
  if (this._translationServiceSubscription !== null)
18
18
  return this._lastValue;
19
19
  this._translationServiceSubscription = this._translationService.translateTokenByLocale$(token, value, this._resolveScope(scope))
20
- .pipe(filter((translation) => translation !== this._lastValue))
20
+ .pipe(catchError((_httpErrorResponse, _) => {
21
+ const fallbackToSourceLocale = fallback ?? this._translationConfig?.fallbackToSourceLocale;
22
+ if (fallbackToSourceLocale)
23
+ this._updateLastValue(value);
24
+ return EMPTY;
25
+ }), filter((translation) => translation !== this._lastValue))
21
26
  .subscribe({
22
27
  next: (translation) => {
23
28
  this._hasTranslationChanged = translation !== this._lastValue;
@@ -46,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
46
51
  pure: false
47
52
  }]
48
53
  }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9waXBlcy90cmFuc2xhdGlvbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQTJCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBZ0IsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsK0JBQStCLEdBQXdCLElBQUksQ0FBQztJQUU1RCxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUVqQyxzQkFBc0IsR0FBWSxLQUFLLENBQUM7SUFFL0IsbUJBQW1CLEdBQXVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXJFLGtCQUFrQixHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUVsRSxzQkFBc0IsR0FBa0IsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFNUYsa0JBQWtCLEdBQW1DLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXBILFNBQVMsQ0FBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEtBQXNEO1FBQ3BHLElBQUksSUFBSSxDQUFDLCtCQUErQixLQUFLLElBQUk7WUFDL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXpCLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdILElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFtQixFQUFXLEVBQUUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQy9FLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLFdBQW1CLEVBQVEsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVMLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsK0JBQStCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVPLGFBQWEsQ0FBeUQsS0FBUztRQUNyRixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBMkIsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxnQkFBZ0IsQ0FBRSxRQUFnQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hFLENBQUM7d0dBMUNVLGVBQWU7c0dBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNUcmFuc2xhdGVDb25maWcsIFRSQU5TTEFUSU9OX0NPTkZJR19UT0tFTiB9IGZyb20gXCIuLi9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBUUkFOU0xBVElPTl9TQ09QRV9UT0tFTiB9IGZyb20gXCIuLi90b2tlbnMvc2NvcGUudG9rZW5cIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyByZXNvbHZlU2NvcGUgfSBmcm9tIFwiLi4vdXRpbHMvdHJhbnNsYXRlLnV0aWxcIjtcblxuQFBpcGUoe1xuICBuYW1lOiBcInRyYW5zbGF0ZVwiLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF90cmFuc2xhdGlvblNlcnZpY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfaGFzVHJhbnNsYXRpb25DaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0aW9uU2NvcGVUb2tlbjogc3RyaW5nIHwgbnVsbCA9IGluamVjdChUUkFOU0xBVElPTl9TQ09QRV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvbkNvbmZpZzogU3BlY2lmaWNUcmFuc2xhdGVDb25maWcgfCBudWxsID0gaW5qZWN0KFRSQU5TTEFUSU9OX0NPTkZJR19UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwdWJsaWMgdHJhbnNmb3JtICh2YWx1ZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBzY29wZT86IFJlYWRvbmx5PEFycmF5PHN0cmluZyB8IG51bGw+IHwgc3RyaW5nIHwgbnVsbD4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5fdHJhbnNsYXRpb25TZXJ2aWNlU3Vic2NyaXB0aW9uICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RWYWx1ZTtcblxuICAgIHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVUb2tlbkJ5TG9jYWxlJCh0b2tlbiwgdmFsdWUsIHRoaXMuX3Jlc29sdmVTY29wZShzY29wZSkpXG4gICAgICAucGlwZShmaWx0ZXIoKHRyYW5zbGF0aW9uOiBzdHJpbmcpOiBib29sZWFuID0+IHRyYW5zbGF0aW9uICE9PSB0aGlzLl9sYXN0VmFsdWUpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh0cmFuc2xhdGlvbjogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5faGFzVHJhbnNsYXRpb25DaGFuZ2VkID0gdHJhbnNsYXRpb24gIT09IHRoaXMuX2xhc3RWYWx1ZTtcbiAgICAgICAgICB0aGlzLl91cGRhdGVMYXN0VmFsdWUodHJhbnNsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9sYXN0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3kgKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVTY29wZTxUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGw+KHNjb3BlPzogVCk6IFQge1xuICAgIHJldHVybiByZXNvbHZlU2NvcGUodGhpcy5fdHJhbnNsYXRpb25Db25maWcsIHNjb3BlID8/IHRoaXMuX3RyYW5zbGF0aW9uU2NvcGVUb2tlbiBhcyBUKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUxhc3RWYWx1ZSAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2xhc3RWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuX2hhc1RyYW5zbGF0aW9uQ2hhbmdlZCAmJiB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9waXBlcy90cmFuc2xhdGlvbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYSxJQUFJLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQTJCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxLQUFLLEVBQTRCLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU92RCxNQUFNLE9BQU8sZUFBZTtJQUNsQiwrQkFBK0IsR0FBd0IsSUFBSSxDQUFDO0lBRTVELFVBQVUsR0FBa0IsSUFBSSxDQUFDO0lBRWpDLHNCQUFzQixHQUFZLEtBQUssQ0FBQztJQUUvQixtQkFBbUIsR0FBdUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFckUsa0JBQWtCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWxFLHNCQUFzQixHQUFrQixNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1RixrQkFBa0IsR0FBbUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFcEgsU0FBUyxDQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBc0QsRUFBRSxRQUFrQjtRQUN4SCxJQUFJLElBQUksQ0FBQywrQkFBK0IsS0FBSyxJQUFJO1lBQy9DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUV6QixJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3SCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsa0JBQXFDLEVBQUUsQ0FBcUIsRUFBc0IsRUFBRTtZQUM5RixNQUFNLHNCQUFzQixHQUF3QixRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDO1lBRWhILElBQUksc0JBQXNCO2dCQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxXQUFtQixFQUFXLEVBQUUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUMxRTthQUNBLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLFdBQW1CLEVBQVEsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVMLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsK0JBQStCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVPLGFBQWEsQ0FBeUQsS0FBUztRQUNyRixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBMkIsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxnQkFBZ0IsQ0FBRSxRQUFnQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hFLENBQUM7d0dBcERVLGVBQWU7c0dBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3BlY2lmaWNUcmFuc2xhdGVDb25maWcsIFRSQU5TTEFUSU9OX0NPTkZJR19UT0tFTiB9IGZyb20gXCIuLi9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjYXRjaEVycm9yLCBmaWx0ZXIgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVFJBTlNMQVRJT05fU0NPUEVfVE9LRU4gfSBmcm9tIFwiLi4vdG9rZW5zL3Njb3BlLnRva2VuXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZVNjb3BlIH0gZnJvbSBcIi4uL3V0aWxzL3RyYW5zbGF0ZS51dGlsXCI7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuXG5AUGlwZSh7XG4gIG5hbWU6IFwidHJhbnNsYXRlXCIsXG4gIHB1cmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3RyYW5zbGF0aW9uU2VydmljZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbGFzdFZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9oYXNUcmFuc2xhdGlvbkNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25TY29wZVRva2VuOiBzdHJpbmcgfCBudWxsID0gaW5qZWN0KFRSQU5TTEFUSU9OX1NDT1BFX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0aW9uQ29uZmlnOiBTcGVjaWZpY1RyYW5zbGF0ZUNvbmZpZyB8IG51bGwgPSBpbmplY3QoVFJBTlNMQVRJT05fQ09ORklHX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHB1YmxpYyB0cmFuc2Zvcm0gKHZhbHVlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIHNjb3BlPzogUmVhZG9ubHk8QXJyYXk8c3RyaW5nIHwgbnVsbD4gfCBzdHJpbmcgfCBudWxsPiwgZmFsbGJhY2s/OiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZVN1YnNjcmlwdGlvbiAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLl9sYXN0VmFsdWU7XG5cbiAgICB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlVG9rZW5CeUxvY2FsZSQodG9rZW4sIHZhbHVlLCB0aGlzLl9yZXNvbHZlU2NvcGUoc2NvcGUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKF9odHRwRXJyb3JSZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UsIF86IE9ic2VydmFibGU8c3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nPiA9PiB7XG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tUb1NvdXJjZUxvY2FsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbGxiYWNrID8/IHRoaXMuX3RyYW5zbGF0aW9uQ29uZmlnPy5mYWxsYmFja1RvU291cmNlTG9jYWxlO1xuXG4gICAgICAgICAgaWYgKGZhbGxiYWNrVG9Tb3VyY2VMb2NhbGUpXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXN0VmFsdWUodmFsdWUpO1xuXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCh0cmFuc2xhdGlvbjogc3RyaW5nKTogYm9vbGVhbiA9PiB0cmFuc2xhdGlvbiAhPT0gdGhpcy5fbGFzdFZhbHVlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh0cmFuc2xhdGlvbjogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5faGFzVHJhbnNsYXRpb25DaGFuZ2VkID0gdHJhbnNsYXRpb24gIT09IHRoaXMuX2xhc3RWYWx1ZTtcbiAgICAgICAgICB0aGlzLl91cGRhdGVMYXN0VmFsdWUodHJhbnNsYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9sYXN0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3kgKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zbGF0aW9uU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc29sdmVTY29wZTxUIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGw+KHNjb3BlPzogVCk6IFQge1xuICAgIHJldHVybiByZXNvbHZlU2NvcGUodGhpcy5fdHJhbnNsYXRpb25Db25maWcsIHNjb3BlID8/IHRoaXMuX3RyYW5zbGF0aW9uU2NvcGVUb2tlbiBhcyBUKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUxhc3RWYWx1ZSAobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2xhc3RWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuX2hhc1RyYW5zbGF0aW9uQ2hhbmdlZCAmJiB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIl19
@@ -8,7 +8,7 @@ import * as i0 from "@angular/core";
8
8
  export class TranslationHttpSerivce {
9
9
  _translationHttpConfig = inject(TRANSLATION_HTTP_CONFIG);
10
10
  _translationConfig = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });
11
- _translationHttpOptions = inject(TRANSLATION_HTTP_OPTIONS);
11
+ _translationHttpOptions = inject(TRANSLATION_HTTP_OPTIONS, { optional: true });
12
12
  getWithRef$(httpClientRef, scopeName, httpOptions) {
13
13
  let path = this._translationHttpConfig;
14
14
  if (typeof scopeName === "string" || scopeName === null) {
@@ -25,7 +25,7 @@ export class TranslationHttpSerivce {
25
25
  path += `?${urlSearchParams.toString()}`;
26
26
  }
27
27
  let headers = new HttpHeaders();
28
- if (this._translationHttpOptions.headers !== undefined)
28
+ if (this._translationHttpOptions?.headers !== undefined)
29
29
  headers = mergeHttpHeaders(headers, this._translationHttpOptions.headers);
30
30
  if (httpOptions?.headers !== undefined)
31
31
  headers = mergeHttpHeaders(headers, httpOptions.headers);
@@ -44,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44
44
  providedIn: "root"
45
45
  }]
46
46
  }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24taHR0cC5zZXJpdmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3RyYW5zbGF0aW9uLWh0dHAuc2VyaXZjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUt6RixNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLHNCQUFzQixHQUFXLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRWpFLGtCQUFrQixHQUFtQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRyx1QkFBdUIsR0FBaUQsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFbkgsV0FBVyxDQUFJLGFBQW1DLEVBQUUsU0FBdUQsRUFBRSxXQUEwRDtRQUM1SyxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFFL0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hELElBQUksU0FBUyxLQUFLLElBQUk7Z0JBQ3BCLElBQUksSUFBSSxVQUFXLGtCQUFrQixDQUFDLFNBQVMsQ0FBRSxFQUFFLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGVBQWUsR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUUvRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBNEIsRUFBUSxFQUFFO2dCQUN2RCxJQUFJLGFBQWEsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRW5DLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksSUFBSyxlQUFlLENBQUMsUUFBUSxFQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFN0MsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFDcEQsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUUsSUFBSSxXQUFXLEVBQUUsT0FBTyxLQUFLLFNBQVM7WUFDcEMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0QsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFJLElBQUksRUFBRTtZQUNoQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixPQUFPLEVBQUUsTUFBTTtZQUNmLE9BQU87U0FDUixDQUFDLENBQUMsSUFBSSxDQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUNqRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ1QsQ0FBQztJQUNKLENBQUM7d0dBeENVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVyc09wdGlvbiwgSHR0cE9wdGlvbnMsIG1lcmdlSHR0cEhlYWRlcnMgfSBmcm9tIFwiQG9ncy1nbWJoL25neC1odHRwXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHJldHJ5LCB0aW1lb3V0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL2NvbmZpZy50eXBlXCI7XG5pbXBvcnQgeyBUUkFOU0xBVElPTl9DT05GSUdfVE9LRU4gfSBmcm9tIFwiLi4vdG9rZW5zL2NvbmZpZy50b2tlblwiO1xuaW1wb3J0IHsgVFJBTlNMQVRJT05fSFRUUF9DT05GSUcsIFRSQU5TTEFUSU9OX0hUVFBfT1BUSU9OUyB9IGZyb20gXCIuLi90b2tlbnMvaHR0cC50b2tlblwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uSHR0cFNlcml2Y2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvbkh0dHBDb25maWc6IHN0cmluZyA9IGluamVjdChUUkFOU0xBVElPTl9IVFRQX0NPTkZJRyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25Db25maWc6IFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnIHwgbnVsbCA9IGluamVjdChUUkFOU0xBVElPTl9DT05GSUdfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25IdHRwT3B0aW9uczogSHR0cE9wdGlvbnM8bmV2ZXIsIEh0dHBIZWFkZXJzT3B0aW9uLCBuZXZlcj4gPSBpbmplY3QoVFJBTlNMQVRJT05fSFRUUF9PUFRJT05TKTtcblxuICBwdWJsaWMgZ2V0V2l0aFJlZiQ8VD4oaHR0cENsaWVudFJlZjogUmVhZG9ubHk8SHR0cENsaWVudD4sIHNjb3BlTmFtZTogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogSHR0cE9wdGlvbnM8bmV2ZXIsIEh0dHBIZWFkZXJzT3B0aW9uLCBuZXZlcj4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBsZXQgcGF0aDogc3RyaW5nID0gdGhpcy5fdHJhbnNsYXRpb25IdHRwQ29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZU5hbWUgPT09IFwic3RyaW5nXCIgfHwgc2NvcGVOYW1lID09PSBudWxsKSB7XG4gICAgICBpZiAoc2NvcGVOYW1lICE9PSBudWxsKVxuICAgICAgICBwYXRoICs9IGA/c2NvcGU9JHsgZW5jb2RlVVJJQ29tcG9uZW50KHNjb3BlTmFtZSkgfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgICBzY29wZU5hbWUuZm9yRWFjaCgoc2NvcGVOYW1lSXRlbTogc3RyaW5nIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoc2NvcGVOYW1lSXRlbSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBlbmNvZGVVUklDb21wb25lbnQoc2NvcGVOYW1lSXRlbSkpO1xuICAgICAgfSk7XG4gICAgICBwYXRoICs9IGA/JHsgdXJsU2VhcmNoUGFyYW1zLnRvU3RyaW5nKCkgfWA7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG5cbiAgICBpZiAodGhpcy5fdHJhbnNsYXRpb25IdHRwT3B0aW9ucy5oZWFkZXJzICE9PSB1bmRlZmluZWQpXG4gICAgICBoZWFkZXJzID0gbWVyZ2VIdHRwSGVhZGVycyhoZWFkZXJzLCB0aGlzLl90cmFuc2xhdGlvbkh0dHBPcHRpb25zLmhlYWRlcnMpO1xuXG4gICAgaWYgKGh0dHBPcHRpb25zPy5oZWFkZXJzICE9PSB1bmRlZmluZWQpXG4gICAgICBoZWFkZXJzID0gbWVyZ2VIdHRwSGVhZGVycyhoZWFkZXJzLCBodHRwT3B0aW9ucy5oZWFkZXJzKTtcblxuICAgIHJldHVybiBodHRwQ2xpZW50UmVmLmdldDxUPihwYXRoLCB7XG4gICAgICByZXNwb25zZVR5cGU6IFwianNvblwiLFxuICAgICAgb2JzZXJ2ZTogXCJib2R5XCIsXG4gICAgICBoZWFkZXJzXG4gICAgfSkucGlwZShcbiAgICAgIHRpbWVvdXQodGhpcy5fdHJhbnNsYXRpb25Db25maWc/LnRpbWVvdXQgPz8gMzAwMCksXG4gICAgICByZXRyeSgwKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24taHR0cC5zZXJpdmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3RyYW5zbGF0aW9uLWh0dHAuc2VyaXZjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtDLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUt6RixNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLHNCQUFzQixHQUFXLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRWpFLGtCQUFrQixHQUFtQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRyx1QkFBdUIsR0FBd0QsTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFOUksV0FBVyxDQUFJLGFBQW1DLEVBQUUsU0FBdUQsRUFBRSxXQUEwRDtRQUM1SyxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFFL0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hELElBQUksU0FBUyxLQUFLLElBQUk7Z0JBQ3BCLElBQUksSUFBSSxVQUFXLGtCQUFrQixDQUFDLFNBQVMsQ0FBRSxFQUFFLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGVBQWUsR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUUvRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBNEIsRUFBUSxFQUFFO2dCQUN2RCxJQUFJLGFBQWEsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBRW5DLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksSUFBSyxlQUFlLENBQUMsUUFBUSxFQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFN0MsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxLQUFLLFNBQVM7WUFDckQsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUUsSUFBSSxXQUFXLEVBQUUsT0FBTyxLQUFLLFNBQVM7WUFDcEMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0QsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFJLElBQUksRUFBRTtZQUNoQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixPQUFPLEVBQUUsTUFBTTtZQUNmLE9BQU87U0FDUixDQUFDLENBQUMsSUFBSSxDQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUNqRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ1QsQ0FBQztJQUNKLENBQUM7d0dBeENVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVyc09wdGlvbiwgSHR0cE9wdGlvbnMsIG1lcmdlSHR0cEhlYWRlcnMgfSBmcm9tIFwiQG9ncy1nbWJoL25neC1odHRwXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHJldHJ5LCB0aW1lb3V0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL2NvbmZpZy50eXBlXCI7XG5pbXBvcnQgeyBUUkFOU0xBVElPTl9DT05GSUdfVE9LRU4gfSBmcm9tIFwiLi4vdG9rZW5zL2NvbmZpZy50b2tlblwiO1xuaW1wb3J0IHsgVFJBTlNMQVRJT05fSFRUUF9DT05GSUcsIFRSQU5TTEFUSU9OX0hUVFBfT1BUSU9OUyB9IGZyb20gXCIuLi90b2tlbnMvaHR0cC50b2tlblwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uSHR0cFNlcml2Y2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvbkh0dHBDb25maWc6IHN0cmluZyA9IGluamVjdChUUkFOU0xBVElPTl9IVFRQX0NPTkZJRyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25Db25maWc6IFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnIHwgbnVsbCA9IGluamVjdChUUkFOU0xBVElPTl9DT05GSUdfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNsYXRpb25IdHRwT3B0aW9uczogSHR0cE9wdGlvbnM8bmV2ZXIsIEh0dHBIZWFkZXJzT3B0aW9uLCBuZXZlcj4gfCBudWxsID0gaW5qZWN0KFRSQU5TTEFUSU9OX0hUVFBfT1BUSU9OUywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwdWJsaWMgZ2V0V2l0aFJlZiQ8VD4oaHR0cENsaWVudFJlZjogUmVhZG9ubHk8SHR0cENsaWVudD4sIHNjb3BlTmFtZTogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudWxsPiB8IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogSHR0cE9wdGlvbnM8bmV2ZXIsIEh0dHBIZWFkZXJzT3B0aW9uLCBuZXZlcj4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBsZXQgcGF0aDogc3RyaW5nID0gdGhpcy5fdHJhbnNsYXRpb25IdHRwQ29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZU5hbWUgPT09IFwic3RyaW5nXCIgfHwgc2NvcGVOYW1lID09PSBudWxsKSB7XG4gICAgICBpZiAoc2NvcGVOYW1lICE9PSBudWxsKVxuICAgICAgICBwYXRoICs9IGA/c2NvcGU9JHsgZW5jb2RlVVJJQ29tcG9uZW50KHNjb3BlTmFtZSkgfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgICBzY29wZU5hbWUuZm9yRWFjaCgoc2NvcGVOYW1lSXRlbTogc3RyaW5nIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoc2NvcGVOYW1lSXRlbSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIHVybFNlYXJjaFBhcmFtcy5hcHBlbmQoXCJzY29wZVwiLCBlbmNvZGVVUklDb21wb25lbnQoc2NvcGVOYW1lSXRlbSkpO1xuICAgICAgfSk7XG4gICAgICBwYXRoICs9IGA/JHsgdXJsU2VhcmNoUGFyYW1zLnRvU3RyaW5nKCkgfWA7XG4gICAgfVxuXG4gICAgbGV0IGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG5cbiAgICBpZiAodGhpcy5fdHJhbnNsYXRpb25IdHRwT3B0aW9ucz8uaGVhZGVycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgaGVhZGVycyA9IG1lcmdlSHR0cEhlYWRlcnMoaGVhZGVycywgdGhpcy5fdHJhbnNsYXRpb25IdHRwT3B0aW9ucy5oZWFkZXJzKTtcblxuICAgIGlmIChodHRwT3B0aW9ucz8uaGVhZGVycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgaGVhZGVycyA9IG1lcmdlSHR0cEhlYWRlcnMoaGVhZGVycywgaHR0cE9wdGlvbnMuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gaHR0cENsaWVudFJlZi5nZXQ8VD4ocGF0aCwge1xuICAgICAgcmVzcG9uc2VUeXBlOiBcImpzb25cIixcbiAgICAgIG9ic2VydmU6IFwiYm9keVwiLFxuICAgICAgaGVhZGVyc1xuICAgIH0pLnBpcGUoXG4gICAgICB0aW1lb3V0KHRoaXMuX3RyYW5zbGF0aW9uQ29uZmlnPy50aW1lb3V0ID8/IDMwMDApLFxuICAgICAgcmV0cnkoMClcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHlwZXMvY29uZmlnLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3RpbmdTdHJhdGVnaWVzIH0gZnJvbSBcIi4uL2VudW1zL2NvbGxlY3Rpbmctc3RyYXRlZ2llcy5lbnVtXCI7XG5pbXBvcnQgeyBIdHRwQ29uZmlnLCBIdHRwSGVhZGVyc09wdGlvbiwgSHR0cE9wdGlvbnMgfSBmcm9tIFwiQG9ncy1nbWJoL25neC1odHRwXCI7XG5cbmV4cG9ydCB0eXBlIExvY2FsZUNvbmZpZyA9IHtcbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaXNTb3VyY2U/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnID0ge1xuICByZWFkb25seSBsb2NhbGVzOiBMb2NhbGVDb25maWdbXTtcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVmYXVsdFNjb3BlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBzdG9yYWdlQ29uZmlnPzoge1xuICAgIHJlYWRvbmx5IGNvbGxlY3RpbmdTdHJhdGVneT86IENvbGxlY3RpbmdTdHJhdGVnaWVzIHwgdW5kZWZpbmVkO1xuICAgIHJlYWRvbmx5IGxvY2FsZT86IHtcbiAgICAgIHJlYWRvbmx5IGtleT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlYWRvbmx5IHR5cGU/OiBTdG9yYWdlIHwgdW5kZWZpbmVkO1xuICAgICAgcmVhZG9ubHkgc3RvcmU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIH0gfCB1bmRlZmluZWQ7XG4gICAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzoge1xuICAgICAgcmVhZG9ubHkga2V5Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgcmVhZG9ubHkgdHlwZT86IFN0b3JhZ2UgfCB1bmRlZmluZWQ7XG4gICAgICByZWFkb25seSBzdG9yZT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgfSB8IHVuZGVmaW5lZDtcbiAgfSB8IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgdHlwZSBUcmFuc2xhdGVDb25maWcgPSB7XG4gIHJlYWRvbmx5IGh0dHA6IHtcbiAgICBjb25maWc6IEh0dHBDb25maWc7XG4gICAgb3B0aW9uczogSHR0cE9wdGlvbnM8bmV2ZXIsIEh0dHBIZWFkZXJzT3B0aW9uLCBuZXZlcj47XG4gIH07XG4gIHJlYWRvbmx5IHRyYW5zbGF0ZTogU3BlY2lmaWNUcmFuc2xhdGVDb25maWc7XG59O1xuXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHlwZXMvY29uZmlnLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3RpbmdTdHJhdGVnaWVzIH0gZnJvbSBcIi4uL2VudW1zL2NvbGxlY3Rpbmctc3RyYXRlZ2llcy5lbnVtXCI7XG5pbXBvcnQgeyBIdHRwQ29uZmlnLCBIdHRwSGVhZGVyc09wdGlvbiwgSHR0cE9wdGlvbnMgfSBmcm9tIFwiQG9ncy1nbWJoL25neC1odHRwXCI7XG5cbmV4cG9ydCB0eXBlIExvY2FsZUNvbmZpZyA9IHtcbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaXNTb3VyY2U/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIFNwZWNpZmljVHJhbnNsYXRlQ29uZmlnID0ge1xuICByZWFkb25seSBsb2NhbGVzOiBMb2NhbGVDb25maWdbXTtcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZGVmYXVsdFNjb3BlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBmYWxsYmFja1RvU291cmNlTG9jYWxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc3RvcmFnZUNvbmZpZz86IHtcbiAgICByZWFkb25seSBjb2xsZWN0aW5nU3RyYXRlZ3k/OiBDb2xsZWN0aW5nU3RyYXRlZ2llcyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBsb2NhbGU/OiB7XG4gICAgICByZWFkb25seSBrZXk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZWFkb25seSB0eXBlPzogU3RvcmFnZSB8IHVuZGVmaW5lZDtcbiAgICAgIHJlYWRvbmx5IHN0b3JlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICB9IHwgdW5kZWZpbmVkO1xuICAgIHJlYWRvbmx5IHRyYW5zbGF0aW9ucz86IHtcbiAgICAgIHJlYWRvbmx5IGtleT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlYWRvbmx5IHR5cGU/OiBTdG9yYWdlIHwgdW5kZWZpbmVkO1xuICAgICAgcmVhZG9ubHkgc3RvcmU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIH0gfCB1bmRlZmluZWQ7XG4gIH0gfCB1bmRlZmluZWQ7XG59O1xuZXhwb3J0IHR5cGUgVHJhbnNsYXRlQ29uZmlnID0ge1xuICByZWFkb25seSBodHRwOiB7XG4gICAgY29uZmlnOiBIdHRwQ29uZmlnO1xuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9uczxuZXZlciwgSHR0cEhlYWRlcnNPcHRpb24sIG5ldmVyPjtcbiAgfTtcbiAgcmVhZG9ubHkgdHJhbnNsYXRlOiBTcGVjaWZpY1RyYW5zbGF0ZUNvbmZpZztcbn07XG5cbiJdfQ==
@@ -370,7 +370,7 @@ const TRANSLATION_HTTP_OPTIONS = new InjectionToken("translation-http-options");
370
370
  class TranslationHttpSerivce {
371
371
  _translationHttpConfig = inject(TRANSLATION_HTTP_CONFIG);
372
372
  _translationConfig = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });
373
- _translationHttpOptions = inject(TRANSLATION_HTTP_OPTIONS);
373
+ _translationHttpOptions = inject(TRANSLATION_HTTP_OPTIONS, { optional: true });
374
374
  getWithRef$(httpClientRef, scopeName, httpOptions) {
375
375
  let path = this._translationHttpConfig;
376
376
  if (typeof scopeName === "string" || scopeName === null) {
@@ -387,7 +387,7 @@ class TranslationHttpSerivce {
387
387
  path += `?${urlSearchParams.toString()}`;
388
388
  }
389
389
  let headers = new HttpHeaders();
390
- if (this._translationHttpOptions.headers !== undefined)
390
+ if (this._translationHttpOptions?.headers !== undefined)
391
391
  headers = mergeHttpHeaders(headers, this._translationHttpOptions.headers);
392
392
  if (httpOptions?.headers !== undefined)
393
393
  headers = mergeHttpHeaders(headers, httpOptions.headers);
@@ -640,11 +640,16 @@ class TranslationPipe {
640
640
  _changeDetectorRef = inject(ChangeDetectorRef);
641
641
  _translationScopeToken = inject(TRANSLATION_SCOPE_TOKEN, { optional: true });
642
642
  _translationConfig = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });
643
- transform(value, token, scope) {
643
+ transform(value, token, scope, fallback) {
644
644
  if (this._translationServiceSubscription !== null)
645
645
  return this._lastValue;
646
646
  this._translationServiceSubscription = this._translationService.translateTokenByLocale$(token, value, this._resolveScope(scope))
647
- .pipe(filter((translation) => translation !== this._lastValue))
647
+ .pipe(catchError((_httpErrorResponse, _) => {
648
+ const fallbackToSourceLocale = fallback ?? this._translationConfig?.fallbackToSourceLocale;
649
+ if (fallbackToSourceLocale)
650
+ this._updateLastValue(value);
651
+ return EMPTY;
652
+ }), filter((translation) => translation !== this._lastValue))
648
653
  .subscribe({
649
654
  next: (translation) => {
650
655
  this._hasTranslationChanged = translation !== this._lastValue;
@@ -778,13 +783,16 @@ const provideTranslationHttpOptions = (httpOptions) => ({
778
783
 
779
784
  class TranslationModule {
780
785
  static forRoot(translateConfig) {
786
+ const providers = [
787
+ provideTranslationConfig(translateConfig.translate),
788
+ provideTranslationHttpConfig(translateConfig.http.config)
789
+ ];
790
+ if (translateConfig.http.options !== undefined) {
791
+ providers.push(provideTranslationHttpOptions(translateConfig.http.options));
792
+ }
781
793
  return {
782
794
  ngModule: TranslationModule,
783
- providers: [
784
- provideTranslationConfig(translateConfig.translate),
785
- provideTranslationHttpConfig(translateConfig.http.config),
786
- provideTranslationHttpOptions(translateConfig.http.options)
787
- ]
795
+ providers
788
796
  };
789
797
  }
790
798
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -1 +1 @@
1
- {"version":3,"file":"ogs-gmbh-ngx-translate.mjs","sources":["../../../src/enums/collecting-strategies.enum.ts","../../../src/enums/preloading-strategies.enum.ts","../../../src/errors/locale-not-defined.error.ts","../../../src/errors/source-locale-not-defined.error.ts","../../../src/tokens/config.token.ts","../../../src/services/translation-store.service.ts","../../../src/interceptors/translation.interceptor.ts","../../../src/tokens/scope.token.ts","../../../src/errors/scope-not-defined.error.ts","../../../src/errors/translation-not-defined.error.ts","../../../src/utils/file.util.ts","../../../src/utils/translate.util.ts","../../../src/tokens/http.token.ts","../../../src/services/translation-http.serivce.ts","../../../src/services/translation.service.ts","../../../src/pipes/translation.pipe.ts","../../../src/tokens/preload.token.ts","../../../src/providers/scope.provider.ts","../../../src/providers/preload.provider.ts","../../../src/providers/config.provider.ts","../../../src/providers/interceptor.provider.ts","../../../src/pipe.module.ts","../../../src/providers/http.provider.ts","../../../src/lib.module.ts"],"sourcesContent":["export enum CollectingStrategies {\n ALL = \"all\",\n CURRENT = \"current\"\n}\n","export enum PreloadingStrategies {\n INITIALIZATION = \"initialization\",\n RUNTIME = \"runtime\"\n}\n","import { LocaleConfig } from \"../public-api\";\n\nexport class LocaleNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor (locale: LocaleConfig) {\n super(`Locale \"${ locale.value }\" does not exists. Please check if the locale is provided in the translation config.`);\n this.name = \"LocaleNotDefinedError\";\n }\n}\n\n","export class SourceLocaleNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor () {\n super(`A source locale does not exists. Please check if a source locale is provided in the translation config.`);\n this.name = \"SourceLocaleNotDefinedError\";\n }\n}\n\n","import { InjectionToken } from \"@angular/core\";\nimport { SpecificTranslateConfig } from \"../types/config.type\";\n\nexport const TRANSLATION_CONFIG_TOKEN: InjectionToken<SpecificTranslateConfig> = new InjectionToken<SpecificTranslateConfig>(\"translation-config-token\");\n","import { BehaviorSubject, Observable, Subject, distinctUntilChanged } from \"rxjs\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { LoadedScope, LoadedScopes, LocaleLoadedScopes, NotifierScope, NotifierScopes, ScopedFile } from \"../types/store.type\";\nimport { LocaleConfig, SpecificTranslateConfig } from \"../types/config.type\";\nimport { CollectingStrategies } from \"../enums/collecting-strategies.enum\";\nimport { LocaleNotDefinedError } from \"../errors/locale-not-defined.error\";\nimport { SourceLocaleNotDefinedError } from \"../errors/source-locale-not-defined.error\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\n\ntype StorageAttributes = {\n collectingStrategy: CollectingStrategies;\n locale: {\n type: Storage;\n key: string;\n };\n translations: {\n type: Storage;\n key: string;\n };\n};\n\ntype StoreTranslations = LoadedScopes | LocaleLoadedScopes;\n\n/*\n * A scope name of null is the default scope, otherwise, it is the identifier for a translation file.\n */\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationStoreService {\n private _loadedScopes: LoadedScopes | LocaleLoadedScopes | null;\n\n private _notifierScopes: NotifierScopes | null = null;\n\n private readonly _translationConfig: SpecificTranslateConfig = inject(TRANSLATION_CONFIG_TOKEN);\n\n private readonly _locale: BehaviorSubject<LocaleConfig>;\n\n private readonly _locale$: Observable<LocaleConfig>;\n\n private readonly _storageAttributes: StorageAttributes = {\n collectingStrategy: this._translationConfig.storageConfig?.collectingStrategy ?? CollectingStrategies.CURRENT,\n locale: {\n type: this._translationConfig.storageConfig?.locale?.type ?? window.localStorage,\n key: this._translationConfig.storageConfig?.locale?.key ?? \"locale\"\n },\n translations: {\n type: this._translationConfig.storageConfig?.translations?.type ?? window.sessionStorage,\n key: this._translationConfig.storageConfig?.translations?.key ?? \"translations\"\n }\n };\n\n constructor () {\n const sourceLocale: LocaleConfig | undefined = this.getSourceLocale();\n\n if (sourceLocale === undefined)\n throw new SourceLocaleNotDefinedError();\n\n if (this._translationConfig.storageConfig?.locale?.store) {\n const localeStorageValue: LocaleConfig | null = this._getStorageValue(\"locale\") as LocaleConfig | null;\n const localeExists: boolean = localeStorageValue ? this._checkIfLocaleExists(localeStorageValue) : false;\n const isSourceLocale: boolean = localeStorageValue ? this._checkIfLocaleIsSourceLocale(localeStorageValue) : false;\n\n if (!localeExists || isSourceLocale)\n this._setStorageValue(\"locale\", null);\n\n this._locale = new BehaviorSubject<LocaleConfig>(localeStorageValue ?? sourceLocale);\n } else\n this._locale = new BehaviorSubject<LocaleConfig>(sourceLocale);\n\n if (this._translationConfig.storageConfig?.translations?.store) {\n const translationsStorageValue: StoreTranslations | null = this._getStorageValue(\"translations\") as StoreTranslations | null;\n\n this._loadedScopes = translationsStorageValue ?? null;\n } else\n this._loadedScopes = null;\n\n this._locale$ = this._locale.asObservable();\n }\n\n public getCurrentLocale (): LocaleConfig {\n return this._locale.value;\n }\n\n public getLocale$ (): Observable<LocaleConfig> {\n return this._locale$.pipe(distinctUntilChanged());\n }\n\n public setLocale (locale: LocaleConfig): void {\n if (!this._checkIfLocaleExists(locale))\n throw new LocaleNotDefinedError(locale);\n\n if (this._translationConfig.storageConfig?.locale?.store) {\n this._checkIfLocaleIsSourceLocale(locale)\n ? this._setStorageValue(\"locale\", null)\n : this._setStorageValue(\"locale\", locale);\n }\n\n if (this._translationConfig.storageConfig?.translations?.store && this._translationConfig.storageConfig.collectingStrategy === CollectingStrategies.CURRENT) this._setStorageValue(\"translations\", null);\n\n this._locale.next(locale);\n }\n\n public getLocales (): LocaleConfig[] {\n return this._translationConfig.locales;\n }\n\n public setScopedFile (scopeName: string | null, file: ScopedFile): void {\n const existingScope: LoadedScope | undefined = scopeName ? this._getScopeByScopeName(scopeName) : undefined;\n\n if (existingScope === undefined)\n this._appendScope(scopeName, file);\n else\n existingScope.file = file;\n\n\n if (this._translationConfig.storageConfig?.translations?.store) this._setStorageValue(\"translations\", this._loadedScopes);\n }\n\n public getScopedFile (scopeName: string | null): ScopedFile | undefined {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return existingScope ? existingScope.file : undefined;\n }\n\n public hasScopedFile (scopeName: string | null): boolean {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return Boolean(existingScope);\n }\n\n public hasScopedFiles (scopeNames: ReadonlyArray<string | null>): boolean {\n const existingScopes: LoadedScopes | undefined = this._getScopeByScopeNames(scopeNames);\n\n return Boolean(existingScopes);\n }\n\n public isScopeExisting (scopeName: string | null): boolean {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return existingScope !== undefined;\n }\n\n public getExistingScopes (scopeNames: ReadonlyArray<string | null>): Array<string | null> {\n return scopeNames.filter((scopeName: string | null): boolean => this.isScopeExisting(scopeName));\n }\n\n public isScopeNameInNotifierScopes (scopeName: string | null): boolean {\n return Boolean(this._notifierScopes?.find((notifierScope: Readonly<NotifierScope>): boolean => notifierScope.scope === scopeName));\n }\n\n public areScopeNamesInNotifierScopes (scopeNames: ReadonlyArray<string | null>): boolean {\n return scopeNames.map((scopeName: string | null): boolean => this.isScopeNameInNotifierScopes(scopeName))\n .reduce((previous: boolean, current: boolean): boolean => previous && current);\n }\n\n public getExistingNotifierScopes (scopeNames: ReadonlyArray<string | null>): Array<string | null> {\n return scopeNames.filter((scopeName: string | null): boolean => this.isScopeNameInNotifierScopes(scopeName));\n }\n\n public getNotiferScope (scopeName: string | null): NotifierScope | undefined {\n return this._notifierScopes?.find((notiferScope: NotifierScope): boolean => notiferScope.scope === scopeName);\n }\n\n public getNotifierScopes (scopeNames: ReadonlyArray<string | null>): NotifierScopes | undefined {\n const filteredScopes: NotifierScopes | [] = scopeNames.map((scopeName: string | null): NotifierScope | undefined => this.getNotiferScope(scopeName))\n .filter((notifierScope: Readonly<NotifierScope> | undefined): boolean => notifierScope !== undefined) as NotifierScopes | [];\n\n return filteredScopes.length === 0 ? filteredScopes : undefined;\n }\n\n public addNotifierScope (notifierScope: Readonly<NotifierScope>): void {\n this._notifierScopes === null\n ? this._notifierScopes = [ notifierScope ]\n : this._notifierScopes.push(notifierScope);\n }\n\n public addNotifierScopes (notifierScopes: NotifierScopes): void {\n this._notifierScopes === null\n ? this._notifierScopes = notifierScopes\n : this._notifierScopes.push(...notifierScopes);\n }\n\n public addNotifierToNotifierScope (scopeName: string | null, notifier: Subject<ScopedFile>): void {\n this._notifierScopes = this._notifierScopes?.map((notifierScope: NotifierScope): NotifierScope => {\n if (notifierScope.scope !== scopeName) return notifierScope;\n\n notifierScope.notifiers === null\n ? notifierScope.notifiers = [ notifier ]\n : notifierScope.notifiers.push(notifier);\n\n return notifierScope;\n }) ?? null;\n }\n\n public removeNotifierScope (scopeName: string | null): void {\n if (this._notifierScopes === null)\n return;\n\n this._notifierScopes = this._notifierScopes.filter((notifierScope: Readonly<NotifierScope>): boolean => notifierScope.scope !== scopeName);\n }\n\n public getSourceLocale (): LocaleConfig | undefined {\n return this._translationConfig.locales.find((localeConfig: LocaleConfig) => localeConfig.isSource);\n }\n\n private _checkIfLocaleExists (locale: LocaleConfig): boolean {\n return this._translationConfig.locales.some((configLocale: LocaleConfig): boolean => configLocale.value === locale.value);\n }\n\n private _checkIfLocaleIsSourceLocale (locale: LocaleConfig): boolean {\n return this._translationConfig.locales.some((localeConfig: LocaleConfig) => localeConfig.value === locale.value && localeConfig.isSource);\n }\n\n private _setStorageValue (dataType: \"locale\" | \"translations\", storageValue: unknown): void {\n storageValue === null\n ? this._storageAttributes[ dataType ].type.removeItem(this._storageAttributes[ dataType ].key)\n : this._storageAttributes[ dataType ].type.setItem(this._storageAttributes[ dataType ].key, JSON.stringify(storageValue));\n }\n\n private _getStorageValue (dataType: \"locale\" | \"translations\"): unknown {\n const serializedStorageValue: string | null = this._storageAttributes[ dataType ].type.getItem(this._storageAttributes[ dataType ].key);\n\n return serializedStorageValue ? JSON.parse(serializedStorageValue) : null;\n }\n\n private _getScopeByScopeName (scopeName: string | null): LoadedScope | undefined {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes;\n\n if (this._loadedScopes === null) return undefined;\n\n const _loadedScopes: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n return _loadedScopes?.find((loadedScope: LoadedScope): boolean => loadedScope.scope === scopeName);\n }\n\n const loadedScopes: LoadedScopes | null = this._loadedScopes as LoadedScopes | null;\n\n return loadedScopes?.find((loadedScope: LoadedScope): boolean => loadedScope.scope === scopeName);\n }\n\n private _getScopeByScopeNames (scopeNames: ReadonlyArray<string | null>): LoadedScopes | undefined {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes;\n\n if (this._loadedScopes === null) return undefined;\n\n const _loadedScopes: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n return _loadedScopes?.filter((loadedScope: LoadedScope): boolean => scopeNames.includes(loadedScope.scope));\n }\n\n const loadedScopes: LoadedScopes = this._loadedScopes as LoadedScopes;\n\n return loadedScopes.filter((loadedScope: LoadedScope): boolean => scopeNames.includes(loadedScope.scope));\n }\n\n private _appendScope (scopeName: string | null, file: ScopedFile): void {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes | null;\n\n if (localeLoadedScopes === null) {\n this._loadedScopes = { [ this._locale.value.value ]: [ { scope: scopeName, file } ] };\n\n return;\n }\n\n const loadedScope: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n if (loadedScope === undefined) {\n localeLoadedScopes[ this._locale.value.value ] = [ { scope: scopeName, file } ];\n\n return;\n }\n\n loadedScope.push({ scope: scopeName, file });\n\n return;\n }\n\n this._loadedScopes === null\n ? this._loadedScopes = [ { scope: scopeName, file } ]\n : (this._loadedScopes as LoadedScopes).push({ scope: scopeName, file });\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { LocaleConfig } from \"../types/config.type\";\nimport { Observable } from \"rxjs\";\nimport { TranslationStoreService } from \"../services/translation-store.service\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationInterceptor implements HttpInterceptor {\n private readonly _translationStoreService: TranslationStoreService = inject(TranslationStoreService);\n\n public intercept (httpRequest: Readonly<HttpRequest<unknown>>, httpHandler: Readonly<HttpHandler>): Observable<HttpEvent<unknown>> {\n const currentLocale: LocaleConfig = this._translationStoreService.getCurrentLocale();\n const clonedHttpRequest: HttpRequest<unknown> = httpRequest.clone({\n setHeaders: {\n language: currentLocale.value\n }\n });\n\n return httpHandler.handle(clonedHttpRequest);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const TRANSLATION_SCOPE_TOKEN: InjectionToken<string> = new InjectionToken<string>(\"translation-scope-token\");\n","export class ScopeNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor (isDefaultScope: boolean, scopeName?: string) {\n super(\n isDefaultScope\n ? `The default scope does not exists. Please check if the given scope is provided.`\n : `Scope \"${ scopeName }\" does not exists. Please check if the given scope is provided.`\n );\n this.name = \"ScopeNotDefinedError\";\n }\n}\n","export class TranslationNotDefinedError extends Error {\n public override name: string;\n\n constructor (token: string, value?: string) {\n super(`Translation for token \"${ token }\" ${ value && `and its default value \"${ value }\"` } does not exists. Please check if the translation for the given token is provided in the translations.`);\n this.name = \"TranslationNotDefinedError\";\n }\n}\n","import { MultiScopedFile, ParsedMultiScopedFiles, ScopedFile } from \"../types/store.type\";\nimport { ScopeNotDefinedError } from \"../errors/scope-not-defined.error\";\nimport { TranslationNotDefinedError } from \"../errors/translation-not-defined.error\";\n\n/**\n * Parse a multi scoped file by the defined scopes\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that should be parsed\n * @returns {ParsedMultiScopedFiles} - A partial scoped file for processing it further\n */\nexport const parseMultiScopedFile = (multiScopedFile: MultiScopedFile): ParsedMultiScopedFiles => {\n const splittedMultiScopedFile: ParsedMultiScopedFiles = [];\n const globalScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: ScopedFile | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && !Array.isArray(currentItem)))\n return;\n\n if (typeof currentItem === \"object\") {\n return void splittedMultiScopedFile.push({\n scopeName: key,\n file: currentItem\n });\n }\n\n globalScopedFile[ key ] = currentItem;\n });\n splittedMultiScopedFile.push({\n scopeName: null,\n file: globalScopedFile\n });\n\n return splittedMultiScopedFile;\n};\nexport const splitMultiScopedFile = (multiScopedFile: MultiScopedFile): ScopedFile[] => {\n const scopedFile: ScopedFile[] = [];\n const globalScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: Readonly<Record<string, string>> | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && !Array.isArray(currentItem)))\n return;\n\n if (typeof currentItem === \"object\")\n return void scopedFile.push(currentItem);\n\n globalScopedFile[ key ] = currentItem;\n });\n scopedFile.push(globalScopedFile);\n\n return scopedFile;\n};\n/**\n * Find a scope inside a multi scoped file\\\n * Throws an error if the scope could not be resolved out of the multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that should include the scope\n * @param {string | null} scopeName - The scope name, that'll be searched\n * @returns {ScopedFile} - The found scoped file\n */\nexport const findScopeInMultiScopedFile = (multiScopedFile: MultiScopedFile, scopeName: string | null): ScopedFile => {\n // Filter all not-nested elements to represent the global scope.\n if (scopeName === null) {\n const newScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: Readonly<Record<string, string>> | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && typeof currentItem !== \"object\" && !Array.isArray(currentItem)))\n return;\n\n newScopedFile[ key ] = currentItem;\n });\n\n return newScopedFile;\n }\n\n // Get the specific scoped file\n const scopedFile: ScopedFile | undefined = multiScopedFile[ scopeName ];\n\n if (scopedFile === undefined) throw new ScopeNotDefinedError(false, scopeName);\n\n return scopedFile;\n};\n/**\n * Parse a multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that'll be parsed\n * @param {string[] | string} scopeName - The scope name, that'll be resolved\n * @returns {ScopedFile[]} - All scoped files, that match the scope name\n */\nexport const parseMultiScopedFileByScope = (multiScopedFile: MultiScopedFile, scopeName: string[] | string): ScopedFile[] => {\n if (Array.isArray(scopeName))\n return scopeName.map((_scopeName: string): ScopedFile => findScopeInMultiScopedFile(multiScopedFile, _scopeName));\n\n\n return [ findScopeInMultiScopedFile(multiScopedFile, scopeName) ];\n};\nexport const findTokenInScopedFiles = (scopedFiles: readonly ScopedFile[], token: string): ScopedFile => {\n const foundScopedFile: ScopedFile | undefined = scopedFiles.find((scopedFile: ScopedFile): boolean => Object.keys(scopedFile).includes(token));\n\n if (foundScopedFile === undefined) throw new TranslationNotDefinedError(token);\n\n return foundScopedFile;\n};\n\n","import { SpecificTranslateConfig } from \"../public-api\";\nimport { MultiScopedFile, ScopedFile } from \"../types/store.type\";\nimport { findScopeInMultiScopedFile } from \"./file.util\";\n\n/**\n * Translate token by a scoped file\n * @param {ScopedFile} scopedFile - The scoped file, that should include the translation\n * @param {string} token - The token, that'll be translated\n * @returns {string | undefined} - string, that represents the translated token. If no translation was found undefined.\n */\nexport const translateTokenByScopedFile = (scopedFile: ScopedFile, token: string): string | undefined => {\n const isTokenValid: boolean = Object.keys(scopedFile).includes(token);\n\n if (!isTokenValid) return;\n\n return scopedFile[ token ];\n};\nexport const translateTokenByScopedFiles = (scopedFiles: ScopedFile[], token: string): string | undefined => {\n let translation: string | undefined;\n\n scopedFiles.some((scopedFile: ScopedFile): boolean => {\n const isTokenValid: boolean = Object.keys(scopedFile).includes(token);\n\n if (!isTokenValid) return false;\n\n translation = scopedFile[ token ];\n\n return true;\n });\n\n return translation;\n};\n/**\n * Translate token by a multi scoped file by first resolving the scope out of the multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The MultiScopedFile, that should includes the scope to search and the token\n * @param {string | null} scopeName - The scope name which should include the translation for the token\n * @param {string} token - The token, that'll be translated\n * @returns {string | undefined} - string, that represents the translated token. If no translation was found undefined.\n */\nexport const translateTokenByMultiScopedFile = (multiScopedFile: MultiScopedFile, scopeName: string | null, token: string): string | undefined => {\n const scopedFile: ScopedFile = findScopeInMultiScopedFile(multiScopedFile, scopeName);\n\n return translateTokenByScopedFile(scopedFile, token);\n};\nexport function resolveScope<T extends ReadonlyArray<string | null> | string | null> (translationConfig: SpecificTranslateConfig | null, scopeName?: T): T {\n return (scopeName ?? translationConfig?.defaultScope ?? null) as T;\n}\n\n","import { InjectionToken } from \"@angular/core\";\nimport { HttpHeadersOption, HttpOptions } from \"@ogs-gmbh/ngx-http\";\n\nexport const TRANSLATION_HTTP_CONFIG: InjectionToken<string> = new InjectionToken<string>(\"translation-http-config\");\nexport const TRANSLATION_HTTP_OPTIONS: InjectionToken<HttpOptions<never, HttpHeadersOption, never>> = new InjectionToken<HttpOptions<never, HttpHeadersOption, never>>(\"translation-http-options\");\n","import { HttpHeadersOption, HttpOptions, mergeHttpHeaders } from \"@ogs-gmbh/ngx-http\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { Observable, retry, timeout } from \"rxjs\";\nimport { SpecificTranslateConfig } from \"../types/config.type\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { TRANSLATION_HTTP_CONFIG, TRANSLATION_HTTP_OPTIONS } from \"../tokens/http.token\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationHttpSerivce {\n private readonly _translationHttpConfig: string = inject(TRANSLATION_HTTP_CONFIG);\n\n private readonly _translationConfig: SpecificTranslateConfig | null = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });\n\n private readonly _translationHttpOptions: HttpOptions<never, HttpHeadersOption, never> = inject(TRANSLATION_HTTP_OPTIONS);\n\n public getWithRef$<T>(httpClientRef: Readonly<HttpClient>, scopeName: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<T> {\n let path: string = this._translationHttpConfig;\n\n if (typeof scopeName === \"string\" || scopeName === null) {\n if (scopeName !== null)\n path += `?scope=${ encodeURIComponent(scopeName) }`;\n } else {\n const urlSearchParams: URLSearchParams = new URLSearchParams();\n\n scopeName.forEach((scopeNameItem: string | null): void => {\n if (scopeNameItem === null) return;\n\n urlSearchParams.append(\"scope\", encodeURIComponent(scopeNameItem));\n });\n path += `?${ urlSearchParams.toString() }`;\n }\n\n let headers: HttpHeaders = new HttpHeaders();\n\n if (this._translationHttpOptions.headers !== undefined)\n headers = mergeHttpHeaders(headers, this._translationHttpOptions.headers);\n\n if (httpOptions?.headers !== undefined)\n headers = mergeHttpHeaders(headers, httpOptions.headers);\n\n return httpClientRef.get<T>(path, {\n responseType: \"json\",\n observe: \"body\",\n headers\n }).pipe(\n timeout(this._translationConfig?.timeout ?? 3000),\n retry(0)\n );\n }\n}\n","import { HttpRequestStatus, HttpOptions, HttpHeadersOption } from \"@ogs-gmbh/ngx-http\";\nimport { BehaviorSubject, EMPTY, Observable, Subject, catchError, combineLatestWith, distinctUntilChanged, filter, map, of, switchMap, tap } from \"rxjs\";\nimport { Injectable, SkipSelf, inject } from \"@angular/core\";\nimport { LocaleConfig, SpecificTranslateConfig } from \"../types/config.type\";\nimport { MultiScopedFile, NotifierScope, ParsedMultiScopedFile, ParsedMultiScopedFiles, ScopedFile } from \"../types/store.type\";\nimport { findScopeInMultiScopedFile, findTokenInScopedFiles, parseMultiScopedFile, splitMultiScopedFile } from \"../utils/file.util\";\nimport { resolveScope, translateTokenByScopedFile, translateTokenByScopedFiles } from \"../utils/translate.util\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { TranslationHttpSerivce } from \"./translation-http.serivce\";\nimport { TranslationNotDefinedError } from \"../errors/translation-not-defined.error\";\nimport { TranslationStoreService } from \"./translation-store.service\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationService {\n @SkipSelf()\n private readonly _httpClient: HttpClient = inject(HttpClient);\n\n private readonly _translationConfig: SpecificTranslateConfig = inject(TRANSLATION_CONFIG_TOKEN);\n\n private readonly _translationStoreService: TranslationStoreService = inject(TranslationStoreService);\n\n private readonly _translationHttpService: TranslationHttpSerivce = inject(TranslationHttpSerivce);\n\n private readonly _isHttpLoading: BehaviorSubject<HttpRequestStatus | null> = new BehaviorSubject<HttpRequestStatus | null>(null);\n\n private readonly _isHttpLoading$: Observable<HttpRequestStatus | null> = this._isHttpLoading.asObservable();\n\n /**\n * Getter for getting an Observable, that will emit only when a HTTP-Request is made\n * @returns {Observable<HttpRequestStatus | null>} - An observable with the HttpRequestStatus if HTTP is currently under use. Otherwise an observable with null inside.\n */\n public isHttpLoading$ (): Observable<HttpRequestStatus | null> {\n return this._isHttpLoading$.pipe(\n distinctUntilChanged(),\n filter((isHttpLoading: HttpRequestStatus | null): boolean => isHttpLoading !== null)\n );\n }\n\n /**\n * Preload multiple translations with references to the required services\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {string} _locale - The locale, that should be preloaded\n * @param {string | null} scopeName - The scope name for the lookup of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<void>} - An observable to handle the status\n */\n /* eslint-disable-next-line @tseslint/class-methods-use-this, @tseslint/max-params */\n public _preloadWithRef$ (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n _locale: LocaleConfig,\n scopeName: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n /*\n * Handle resolve by store\n * Check if all scopes are in store\n */\n if ((typeof scopeName === \"string\" || scopeName === null) && translationStoreService.hasScopedFile(scopeName))\n return EMPTY;\n\n if (Array.isArray(scopeName) && translationStoreService.hasScopedFiles(scopeName))\n return EMPTY;\n\n // Check if scopes are in notifer scopes\n if ((typeof scopeName === \"string\" || scopeName === null) && translationStoreService.isScopeNameInNotifierScopes(scopeName))\n return EMPTY;\n\n if (Array.isArray(scopeName) && translationStoreService.areScopeNamesInNotifierScopes(scopeName as ReadonlyArray<string | null>))\n return EMPTY;\n\n // Check if scopes are not in store\n if (typeof scopeName === \"string\" || scopeName === null) {\n return translationHttpService.getWithRef$<ScopedFile>(\n httpClient,\n scopeName,\n httpOptions\n ).pipe(\n tap((scopedFile: ScopedFile): void => {\n translationStoreService.setScopedFile(scopeName, scopedFile);\n }),\n map((): void => void 0)\n );\n } else {\n const existingScopes: Array<string | null> = translationStoreService.getExistingScopes(scopeName);\n\n if (existingScopes.length === scopeName.length)\n return EMPTY;\n\n const extinctScopes: Array<string | null> = scopeName.filter((_scopeName: string | null): boolean => !existingScopes.includes(_scopeName));\n\n if (extinctScopes.length === 0)\n return EMPTY;\n\n return translationHttpService.getWithRef$<MultiScopedFile>(\n httpClient,\n extinctScopes,\n httpOptions\n ).pipe(\n tap((multiScopedFile: MultiScopedFile): void => {\n const parsedMultiScopedFiles: ParsedMultiScopedFiles = parseMultiScopedFile(multiScopedFile);\n\n parsedMultiScopedFiles.forEach((parsedScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(parsedScopedFile.scopeName, parsedScopedFile.file);\n });\n }),\n map((): void => void 0)\n );\n }\n }\n\n /**\n * Translates a token by the locale reactive\\\n * If the locale changes, a new translation based on the new locale will be emitted.\n * @param {string} token - The token to resolve the translation\n * @param {string | undefined} scopeName - A scope name to resolve the lookup\n * @param {string | undefined} value - The default value of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the current translation as string\n */\n public translateTokenByLocale$ (\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n return this._translationStoreService.getLocale$().pipe(switchMap((locale: LocaleConfig): Observable<string> => this._translateWithRef$(\n this._httpClient,\n this._translationStoreService,\n this._translationHttpService,\n locale,\n token,\n value,\n this._resolveScope(scopeName),\n httpOptions\n )));\n }\n\n /**\n * Translates a token by the current locale\\\n * If the locale changes, no new translation will be emitted.\n * @param {string} token - The token to resolve the translation\n * @param {string | undefined} scopeName - A scope name to resolve the lookup\n * @param {string | undefined} value - The default value of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the current translation as string\n */\n public translateTokenByCurrentLocale$ (\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n const currentLocale: LocaleConfig = this._translationStoreService.getCurrentLocale();\n\n return this._translateWithRef$(\n this._httpClient,\n this._translationStoreService,\n this._translationHttpService,\n currentLocale,\n token,\n value,\n scopeName,\n httpOptions\n );\n }\n\n /**\n * Preload translations by locale reactive.\n */\n /* eslint-disable-next-line @tseslint/max-params */\n public preloadByLocale (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scopeName: string | null | ReadonlyArray<string | null>,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n return translationStoreService.getLocale$().pipe(switchMap((locale: LocaleConfig): Observable<void> => this._preloadWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n locale,\n scopeName,\n httpOptions\n )));\n }\n\n /**\n * Preload translations by current locale.\n */\n /* eslint-disable-next-line @tseslint/max-params */\n public preloadByCurrentLocale (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scopeName: string | null | ReadonlyArray<string | null>,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n const currentLocale: LocaleConfig = translationStoreService.getCurrentLocale();\n\n return this._preloadWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n currentLocale,\n scopeName,\n httpOptions\n );\n }\n\n /**\n * Resolve scope(s) hierarchically\n * @param {Array<string | null> | string | null | undefined} scopeName - Scope name(s), that should be resolved\n * @returns {Array<string | null> | string | null} - based on type\n */\n private _resolveScope<T extends ReadonlyArray<string | null> | string | null>(scopeName?: T): T {\n return resolveScope(this._translationConfig, scopeName);\n }\n\n /**\n * Translate token by source locale\n * @param {string | undefined} value - The value, that should be translated\n * @param {string} token - The token, that is defined for the value\n * @returns {Observable<string>} - An observable with the translation as value\n */\n /* eslint-disable-next-line @tseslint/class-methods-use-this */\n private _translateBySourceLocale (token: string, value?: string): Observable<string> {\n if (!value)\n throw new TranslationNotDefinedError(token);\n\n return of(value);\n }\n\n /**\n * Translate token by resolving it from the storage\\\n * The first matching translation will be used if scope is provided here as an Array.\n * @param {string | null} scope - The scope, that will be looked up\n * @param {string} token - The token, that is defined for the value\n * @returns {Observable<string>} - An observable with the translation as value\n */\n private _translateByStore (scope: ReadonlyArray<string | null> | string | null, token: string): Observable<string> {\n if (typeof scope === \"string\" || scope === null) {\n /* eslint-disable-next-line @tseslint/no-non-null-assertion */\n const scopedFile: ScopedFile = this._translationStoreService.getScopedFile(scope)!;\n const _translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (_translatedToken === undefined) throw new TranslationNotDefinedError(token);\n\n return of(_translatedToken);\n }\n\n let translatedToken: string | undefined;\n\n scope.map((_scope: string | null): ScopedFile | undefined => this._translationStoreService.getScopedFile(_scope))\n .some((scopedFile: ScopedFile | undefined): boolean => {\n if (scopedFile === undefined) return false;\n\n const _translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (_translatedToken === undefined) return false;\n\n translatedToken = _translatedToken;\n\n return true;\n });\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token);\n\n return of(translatedToken);\n }\n\n /**\n * Get scoped file by notifier\\\n * The resolved scoped got requested by HTTP\n * @param {string|null} scope - The scope to identify the notifier by. string is an explicit scope and null is the global scope\n * @returns {Observable<ScopedFile>} - An observable as the new notifier.\n */\n private _getScopedFileByNotifier (scope: string | null): Observable<ScopedFile> {\n const currentNotifier: Subject<ScopedFile> = new Subject<ScopedFile>();\n\n this._translationStoreService.addNotifierToNotifierScope(scope, currentNotifier);\n\n return currentNotifier.asObservable();\n }\n\n /**\n * Get scoped file by adding a notifier\\\n * The resolved scope should be requested by HTTP\n * @param {string | null} scope - The scope to identify the notifier by. string is an explicit scope and null is the global socpe.\n * @returns {Observable<ScopedFile>} - An observable as the new notifier.\n */\n private _getScopedFileByAddingNotifier (scope: string | null): Observable<ScopedFile> {\n const currentNotifier: Subject<ScopedFile> = new Subject<ScopedFile>();\n\n this._translationStoreService.addNotifierScope({\n scope,\n notifiers: [ currentNotifier ]\n });\n\n return currentNotifier;\n }\n\n /**\n * Get a (multi-)scoped file by HTTP\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {Array<string | null>} scope - The scope as Array, where string is an explicit scope and null is the global scope\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable} - An observable with the (multi-)scoped file inside\n */\n /* eslint-disable-next-line @tseslint/max-params */\n private _getScopedFileByHttpWithRef$<T extends ReadonlyArray<string | null> | string | null>(\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scope: T,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile> {\n if (typeof scope === \"string\" || scope === null)\n translationStoreService.addNotifierScope({ scope, notifiers: null });\n else\n translationStoreService.addNotifierScopes(scope.map((_scope: string | null): NotifierScope => ({ scope: _scope, notifiers: null })));\n\n\n this._isHttpLoading.next(HttpRequestStatus.PENDING);\n\n return translationHttpService.getWithRef$<T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile>(httpClient, scope, httpOptions).pipe(\n catchError((): Observable<never> => {\n this._isHttpLoading.next(HttpRequestStatus.ERROR);\n this._isHttpLoading.next(null);\n\n if (typeof scope === \"string\" || scope === null)\n translationStoreService.isScopeNameInNotifierScopes(scope) && translationStoreService.removeNotifierScope(scope);\n else {\n scope.forEach((_scope: string | null): void => {\n if (!translationStoreService.isScopeNameInNotifierScopes(_scope))\n return;\n\n translationStoreService.removeNotifierScope(_scope);\n });\n }\n\n return of();\n }),\n tap((genericScopedFile: T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile): void => {\n this._isHttpLoading.next(HttpRequestStatus.SUCCESS);\n this._isHttpLoading.next(null);\n\n if (typeof scope === \"string\" || scope === null) {\n translationStoreService.setScopedFile(scope, genericScopedFile as ScopedFile);\n\n const notifierScope: NotifierScope | undefined = translationStoreService.getNotiferScope(scope);\n\n if (notifierScope === undefined) return;\n\n notifierScope.notifiers?.forEach((notifier: Subject<ScopedFile>): void => {\n notifier.next(genericScopedFile as ScopedFile);\n });\n translationStoreService.removeNotifierScope(scope);\n\n return;\n }\n\n scope.forEach((_scope: string | null): void => {\n const parsedScopedFile: ScopedFile = findScopeInMultiScopedFile(genericScopedFile as MultiScopedFile, _scope);\n const notifierScope: NotifierScope | undefined = translationStoreService.getNotiferScope(_scope);\n\n if (notifierScope === undefined) return;\n\n notifierScope.notifiers?.forEach((notifier: Subject<ScopedFile>): void => {\n notifier.next(parsedScopedFile);\n });\n translationStoreService.removeNotifierScope(_scope);\n });\n })\n );\n }\n\n /**\n * Translate one token by a scope\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {string} locale - The locale for resolving the translation\n * @param {string} scopeName - The scope name for resolving the translation\n * @param {string} token - The token for resolving the translation\n * @param {string | undefined} value - The default value for the token\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the translation as string inside\n *\n * Resolving steps:\n * 1. Check if it should not be translated\n * => If the current locale is the source locale\n * 2. Check if it can be translated by store\n * => If translation is stored in store\n * 3. Resolve translations by notifiers\n * => Exisiting scopes are resolved automatically\n * => Extinct scopes are resolved by HTTP\n * 4. Resolve by HTTP\n * => Every scope gets resolved by HTTP\n */\n /* eslint-disable-next-line @tseslint/max-params */\n private _translateWithRef$ (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n locale: LocaleConfig,\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n let resolvedScopes: ReadonlyArray<string | null> | string | null | undefined;\n\n const sourceLocale: LocaleConfig | undefined = this._translationStoreService.getSourceLocale();\n\n // Handle direct resolving\n if (sourceLocale !== undefined && sourceLocale === this._translationStoreService.getCurrentLocale())\n return this._translateBySourceLocale(token, value);\n\n // Handle store resolving\n if (typeof scopeName === \"string\" || scopeName === null) {\n resolvedScopes = this._resolveScope(scopeName);\n\n if (translationStoreService.hasScopedFile(resolvedScopes))\n return this._translateByStore(resolvedScopes, token);\n } else {\n resolvedScopes = this._resolveScope(scopeName);\n\n if (translationStoreService.hasScopedFiles(resolvedScopes))\n return this._translateByStore(resolvedScopes, token);\n }\n\n // Handle notifier resolving\n if (typeof resolvedScopes === \"string\" || resolvedScopes === null) {\n if (translationStoreService.isScopeNameInNotifierScopes(resolvedScopes)) {\n return this._getScopedFileByNotifier(resolvedScopes)\n .pipe(map((scopedFile: ScopedFile): string => {\n const translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n }));\n }\n } else {\n const existingScopes: Array<string | null> = translationStoreService.getExistingNotifierScopes(resolvedScopes);\n const extinctScopes: Array<string | null> = resolvedScopes.filter((resolvedScope: string | null): boolean => !existingScopes.includes(resolvedScope));\n const existingNotifiers: Array<Observable<ScopedFile>> = existingScopes.map((existingScope: string | null): Observable<ScopedFile> => this._getScopedFileByNotifier(existingScope));\n const extinctScopesHttp: Observable<ScopedFile> = this._getScopedFileByHttpWithRef$(httpClient, translationStoreService, translationHttpService, extinctScopes, httpOptions)\n .pipe(\n tap((multiScopedFile: ScopedFile | MultiScopedFile): void => {\n const castedMultiScopedFile: MultiScopedFile = multiScopedFile as MultiScopedFile;\n const parsedMultiScopedFile: ParsedMultiScopedFiles = parseMultiScopedFile(castedMultiScopedFile);\n\n parsedMultiScopedFile.forEach((_parsedMultiScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(\n _parsedMultiScopedFile.scopeName,\n _parsedMultiScopedFile.file\n );\n });\n }),\n map((multiScopedFile: ScopedFile | MultiScopedFile): ScopedFile => {\n const castedMultiScopedFile: MultiScopedFile = multiScopedFile as MultiScopedFile;\n const splittedMultiScopedFiles: ScopedFile[] = splitMultiScopedFile(castedMultiScopedFile);\n\n return findTokenInScopedFiles(splittedMultiScopedFiles, token);\n })\n );\n\n return extinctScopesHttp.pipe(\n combineLatestWith(...existingNotifiers),\n map((scopedFiles: ScopedFile[]): string => {\n const translatedToken: string | undefined = translateTokenByScopedFiles(scopedFiles, token);\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n })\n );\n }\n\n // Handle HTTP resolving\n return of(locale).pipe(switchMap((): Observable<string> => (\n /* eslint-disable-next-line @tseslint/no-unnecessary-condition */\n typeof resolvedScopes === \"string\" || resolvedScopes === null\n ? this._getScopedFileByHttpWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n resolvedScopes,\n httpOptions\n ).pipe(map((scopedFile: ScopedFile): string => {\n translationStoreService.setScopedFile(\n resolvedScopes,\n scopedFile\n );\n\n const translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (translatedToken === undefined)\n throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n }))\n // Handle array\n : this._getScopedFileByHttpWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n resolvedScopes,\n httpOptions\n ).pipe(\n tap((multiScopedFile: MultiScopedFile): void => {\n const parsedMultiScopedFile: ParsedMultiScopedFiles = parseMultiScopedFile(multiScopedFile);\n\n parsedMultiScopedFile.forEach((_parsedMultiScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(\n _parsedMultiScopedFile.scopeName,\n _parsedMultiScopedFile.file\n );\n });\n }),\n map((multiScopedFile: MultiScopedFile): string => {\n const splittedMultiScopedFiles: ScopedFile[] = splitMultiScopedFile(multiScopedFile);\n const foundScopedFile: ScopedFile = findTokenInScopedFiles(splittedMultiScopedFiles, token);\n const translatedToken: string | undefined = translateTokenByScopedFile(foundScopedFile, token);\n\n if (translatedToken === undefined)\n throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n })\n )\n )));\n }\n}\n\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from \"@angular/core\";\nimport { SpecificTranslateConfig, TRANSLATION_CONFIG_TOKEN } from \"../public-api\";\nimport { Subscription, filter } from \"rxjs\";\nimport { TRANSLATION_SCOPE_TOKEN } from \"../tokens/scope.token\";\nimport { TranslationService } from \"../services/translation.service\";\nimport { resolveScope } from \"../utils/translate.util\";\n\n@Pipe({\n name: \"translate\",\n pure: false\n})\nexport class TranslationPipe implements PipeTransform, OnDestroy {\n private _translationServiceSubscription: Subscription | null = null;\n\n private _lastValue: string | null = null;\n\n private _hasTranslationChanged: boolean = false;\n\n private readonly _translationService: TranslationService = inject(TranslationService);\n\n private readonly _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n private readonly _translationScopeToken: string | null = inject(TRANSLATION_SCOPE_TOKEN, { optional: true });\n\n private readonly _translationConfig: SpecificTranslateConfig | null = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });\n\n public transform (value: string, token: string, scope?: Readonly<Array<string | null> | string | null>): string | null {\n if (this._translationServiceSubscription !== null)\n return this._lastValue;\n\n this._translationServiceSubscription = this._translationService.translateTokenByLocale$(token, value, this._resolveScope(scope))\n .pipe(filter((translation: string): boolean => translation !== this._lastValue))\n .subscribe({\n next: (translation: string): void => {\n this._hasTranslationChanged = translation !== this._lastValue;\n this._updateLastValue(translation);\n }\n });\n\n return this._lastValue;\n }\n\n public ngOnDestroy (): void {\n this._translationServiceSubscription?.unsubscribe();\n }\n\n private _resolveScope<T extends ReadonlyArray<string | null> | string | null>(scope?: T): T {\n return resolveScope(this._translationConfig, scope ?? this._translationScopeToken as T);\n }\n\n private _updateLastValue (newValue: string): void {\n this._lastValue = newValue;\n this._hasTranslationChanged && this._changeDetectorRef.markForCheck();\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const TRANSLATION_PRELOAD_TOKEN: InjectionToken<string> = new InjectionToken<string>(\"translation-preload-token\");\n","import { TRANSLATION_SCOPE_TOKEN } from \"../tokens/scope.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationScope = (scope: string): ValueProvider => ({\n provide: TRANSLATION_SCOPE_TOKEN,\n useValue: scope,\n multi: false\n});\n\n","import { APP_INITIALIZER, FactoryProvider } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { PreloadingStrategies } from \"../enums/preloading-strategies.enum\";\nimport { TRANSLATION_PRELOAD_TOKEN } from \"../tokens/preload.token\";\nimport { TranslationHttpSerivce } from \"../services/translation-http.serivce\";\nimport { TranslationPreloadProvider } from \"../types/provider.type\";\nimport { TranslationService } from \"../services/translation.service\";\nimport { TranslationStoreService } from \"../services/translation-store.service\";\n\n/* eslint-disable @tseslint/max-params */\nconst handleInitializationStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => void => (): void => void translationSerivce.preloadByCurrentLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n/* eslint-enable @tseslint/max-params */\n/* eslint-disable @tseslint/max-params */\nconst handleRuntimeStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => Readonly<TranslationService> => (): Readonly<TranslationService> => {\n translationSerivce.preloadByCurrentLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n\n return translationSerivce;\n};\n/* eslint-enable @tseslint/max-params */\n\nexport const provideTranslationPreload = (preloadProvider: Readonly<TranslationPreloadProvider>): FactoryProvider => {\n switch (preloadProvider.preloadingStrategy) {\n case PreloadingStrategies.INITIALIZATION: {\n return {\n provide: APP_INITIALIZER,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ): () => void => handleInitializationStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: true\n };\n }\n\n case PreloadingStrategies.RUNTIME: {\n return {\n provide: TRANSLATION_PRELOAD_TOKEN,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ): () => void => handleRuntimeStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: false\n };\n }\n }\n};\n\n/* eslint-disable @tseslint/max-params */\nconst handleReactiveInitializationStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => void => (): void => void translationSerivce.preloadByLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n/* eslint-enable @tseslint/max-params */\n/* eslint-disable @tseslint/max-params */\nconst handleReactiveRuntimeStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => Readonly<TranslationService> => (): Readonly<TranslationService> => {\n translationSerivce.preloadByLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n\n return translationSerivce;\n};\n/* eslint-enable @tseslint/max-params */\n\nexport const provideTranslationPreloadReactive = (preloadProvider: Readonly<TranslationPreloadProvider>): FactoryProvider => {\n switch (preloadProvider.preloadingStrategy) {\n case PreloadingStrategies.INITIALIZATION: {\n return {\n provide: APP_INITIALIZER,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ) => handleReactiveInitializationStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: true\n };\n }\n\n case PreloadingStrategies.RUNTIME: {\n return {\n provide: TRANSLATION_PRELOAD_TOKEN,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ) => handleReactiveRuntimeStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: false\n };\n }\n }\n};\n\n","import { SpecificTranslateConfig } from \"../types/config.type\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationConfig = (translationConfig: Readonly<SpecificTranslateConfig>): ValueProvider => ({\n provide: TRANSLATION_CONFIG_TOKEN,\n useValue: translationConfig,\n multi: false\n});\n\n","import { ClassProvider } from \"@angular/core\";\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\nimport { TranslationInterceptor } from \"../interceptors/translation.interceptor\";\n\nexport const provideTranslationInterceptor = (): ClassProvider => ({\n provide: HTTP_INTERCEPTORS,\n useClass: TranslationInterceptor,\n multi: true\n});\n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { TranslationPipe } from \"./pipes/translation.pipe\";\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n TranslationPipe\n ],\n exports: [\n TranslationPipe\n ]\n})\n/* eslint-disable-next-line @tseslint/no-extraneous-class */\nexport class TranslationPipeModule {}\n","import { HttpConfig, HttpHeadersOption, HttpOptions, buildHttpConnectionString } from \"@ogs-gmbh/ngx-http\";\nimport { TRANSLATION_HTTP_CONFIG, TRANSLATION_HTTP_OPTIONS } from \"../tokens/http.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationHttpConfig = (httpConfig: Readonly<HttpConfig>): ValueProvider => ({\n provide: TRANSLATION_HTTP_CONFIG,\n useValue: buildHttpConnectionString(httpConfig),\n multi: false\n});\nexport const provideTranslationHttpOptions = (httpOptions: HttpOptions<never, HttpHeadersOption, never>): ValueProvider => ({\n provide: TRANSLATION_HTTP_OPTIONS,\n useValue: httpOptions,\n multi: false\n});\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TranslateConfig } from \"./types/config.type\";\nimport { TranslationHttpSerivce } from \"./services/translation-http.serivce\";\nimport { TranslationPipeModule } from \"./pipe.module\";\nimport { TranslationService } from \"./services/translation.service\";\nimport { TranslationStoreService } from \"./services/translation-store.service\";\nimport { provideTranslationConfig } from \"./providers/config.provider\";\nimport { provideTranslationHttpConfig, provideTranslationHttpOptions } from \"./providers/http.provider\";\nimport { provideTranslationInterceptor } from \"./providers/interceptor.provider\";\n\n@NgModule({\n imports: [\n CommonModule,\n TranslationPipeModule\n ],\n providers: [\n TranslationHttpSerivce,\n TranslationStoreService,\n TranslationService,\n provideTranslationInterceptor()\n ],\n exports: [\n TranslationPipeModule\n ]\n})\n/* eslint-disable-next-line @tseslint/no-extraneous-class */\nexport class TranslationModule {\n public static forRoot (translateConfig: Readonly<TranslateConfig>): ModuleWithProviders<TranslationModule> {\n return {\n ngModule: TranslationModule,\n providers: [\n provideTranslationConfig(translateConfig.translate),\n provideTranslationHttpConfig(translateConfig.http.config),\n provideTranslationHttpOptions(translateConfig.http.options)\n ]\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ogs-gmbh-ngx-translate.mjs","sources":["../../../src/enums/collecting-strategies.enum.ts","../../../src/enums/preloading-strategies.enum.ts","../../../src/errors/locale-not-defined.error.ts","../../../src/errors/source-locale-not-defined.error.ts","../../../src/tokens/config.token.ts","../../../src/services/translation-store.service.ts","../../../src/interceptors/translation.interceptor.ts","../../../src/tokens/scope.token.ts","../../../src/errors/scope-not-defined.error.ts","../../../src/errors/translation-not-defined.error.ts","../../../src/utils/file.util.ts","../../../src/utils/translate.util.ts","../../../src/tokens/http.token.ts","../../../src/services/translation-http.serivce.ts","../../../src/services/translation.service.ts","../../../src/pipes/translation.pipe.ts","../../../src/tokens/preload.token.ts","../../../src/providers/scope.provider.ts","../../../src/providers/preload.provider.ts","../../../src/providers/config.provider.ts","../../../src/providers/interceptor.provider.ts","../../../src/pipe.module.ts","../../../src/providers/http.provider.ts","../../../src/lib.module.ts"],"sourcesContent":["export enum CollectingStrategies {\n ALL = \"all\",\n CURRENT = \"current\"\n}\n","export enum PreloadingStrategies {\n INITIALIZATION = \"initialization\",\n RUNTIME = \"runtime\"\n}\n","import { LocaleConfig } from \"../public-api\";\n\nexport class LocaleNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor (locale: LocaleConfig) {\n super(`Locale \"${ locale.value }\" does not exists. Please check if the locale is provided in the translation config.`);\n this.name = \"LocaleNotDefinedError\";\n }\n}\n\n","export class SourceLocaleNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor () {\n super(`A source locale does not exists. Please check if a source locale is provided in the translation config.`);\n this.name = \"SourceLocaleNotDefinedError\";\n }\n}\n\n","import { InjectionToken } from \"@angular/core\";\nimport { SpecificTranslateConfig } from \"../types/config.type\";\n\nexport const TRANSLATION_CONFIG_TOKEN: InjectionToken<SpecificTranslateConfig> = new InjectionToken<SpecificTranslateConfig>(\"translation-config-token\");\n","import { BehaviorSubject, Observable, Subject, distinctUntilChanged } from \"rxjs\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { LoadedScope, LoadedScopes, LocaleLoadedScopes, NotifierScope, NotifierScopes, ScopedFile } from \"../types/store.type\";\nimport { LocaleConfig, SpecificTranslateConfig } from \"../types/config.type\";\nimport { CollectingStrategies } from \"../enums/collecting-strategies.enum\";\nimport { LocaleNotDefinedError } from \"../errors/locale-not-defined.error\";\nimport { SourceLocaleNotDefinedError } from \"../errors/source-locale-not-defined.error\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\n\ntype StorageAttributes = {\n collectingStrategy: CollectingStrategies;\n locale: {\n type: Storage;\n key: string;\n };\n translations: {\n type: Storage;\n key: string;\n };\n};\n\ntype StoreTranslations = LoadedScopes | LocaleLoadedScopes;\n\n/*\n * A scope name of null is the default scope, otherwise, it is the identifier for a translation file.\n */\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationStoreService {\n private _loadedScopes: LoadedScopes | LocaleLoadedScopes | null;\n\n private _notifierScopes: NotifierScopes | null = null;\n\n private readonly _translationConfig: SpecificTranslateConfig = inject(TRANSLATION_CONFIG_TOKEN);\n\n private readonly _locale: BehaviorSubject<LocaleConfig>;\n\n private readonly _locale$: Observable<LocaleConfig>;\n\n private readonly _storageAttributes: StorageAttributes = {\n collectingStrategy: this._translationConfig.storageConfig?.collectingStrategy ?? CollectingStrategies.CURRENT,\n locale: {\n type: this._translationConfig.storageConfig?.locale?.type ?? window.localStorage,\n key: this._translationConfig.storageConfig?.locale?.key ?? \"locale\"\n },\n translations: {\n type: this._translationConfig.storageConfig?.translations?.type ?? window.sessionStorage,\n key: this._translationConfig.storageConfig?.translations?.key ?? \"translations\"\n }\n };\n\n constructor () {\n const sourceLocale: LocaleConfig | undefined = this.getSourceLocale();\n\n if (sourceLocale === undefined)\n throw new SourceLocaleNotDefinedError();\n\n if (this._translationConfig.storageConfig?.locale?.store) {\n const localeStorageValue: LocaleConfig | null = this._getStorageValue(\"locale\") as LocaleConfig | null;\n const localeExists: boolean = localeStorageValue ? this._checkIfLocaleExists(localeStorageValue) : false;\n const isSourceLocale: boolean = localeStorageValue ? this._checkIfLocaleIsSourceLocale(localeStorageValue) : false;\n\n if (!localeExists || isSourceLocale)\n this._setStorageValue(\"locale\", null);\n\n this._locale = new BehaviorSubject<LocaleConfig>(localeStorageValue ?? sourceLocale);\n } else\n this._locale = new BehaviorSubject<LocaleConfig>(sourceLocale);\n\n if (this._translationConfig.storageConfig?.translations?.store) {\n const translationsStorageValue: StoreTranslations | null = this._getStorageValue(\"translations\") as StoreTranslations | null;\n\n this._loadedScopes = translationsStorageValue ?? null;\n } else\n this._loadedScopes = null;\n\n this._locale$ = this._locale.asObservable();\n }\n\n public getCurrentLocale (): LocaleConfig {\n return this._locale.value;\n }\n\n public getLocale$ (): Observable<LocaleConfig> {\n return this._locale$.pipe(distinctUntilChanged());\n }\n\n public setLocale (locale: LocaleConfig): void {\n if (!this._checkIfLocaleExists(locale))\n throw new LocaleNotDefinedError(locale);\n\n if (this._translationConfig.storageConfig?.locale?.store) {\n this._checkIfLocaleIsSourceLocale(locale)\n ? this._setStorageValue(\"locale\", null)\n : this._setStorageValue(\"locale\", locale);\n }\n\n if (this._translationConfig.storageConfig?.translations?.store && this._translationConfig.storageConfig.collectingStrategy === CollectingStrategies.CURRENT) this._setStorageValue(\"translations\", null);\n\n this._locale.next(locale);\n }\n\n public getLocales (): LocaleConfig[] {\n return this._translationConfig.locales;\n }\n\n public setScopedFile (scopeName: string | null, file: ScopedFile): void {\n const existingScope: LoadedScope | undefined = scopeName ? this._getScopeByScopeName(scopeName) : undefined;\n\n if (existingScope === undefined)\n this._appendScope(scopeName, file);\n else\n existingScope.file = file;\n\n\n if (this._translationConfig.storageConfig?.translations?.store) this._setStorageValue(\"translations\", this._loadedScopes);\n }\n\n public getScopedFile (scopeName: string | null): ScopedFile | undefined {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return existingScope ? existingScope.file : undefined;\n }\n\n public hasScopedFile (scopeName: string | null): boolean {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return Boolean(existingScope);\n }\n\n public hasScopedFiles (scopeNames: ReadonlyArray<string | null>): boolean {\n const existingScopes: LoadedScopes | undefined = this._getScopeByScopeNames(scopeNames);\n\n return Boolean(existingScopes);\n }\n\n public isScopeExisting (scopeName: string | null): boolean {\n const existingScope: LoadedScope | undefined = this._getScopeByScopeName(scopeName);\n\n return existingScope !== undefined;\n }\n\n public getExistingScopes (scopeNames: ReadonlyArray<string | null>): Array<string | null> {\n return scopeNames.filter((scopeName: string | null): boolean => this.isScopeExisting(scopeName));\n }\n\n public isScopeNameInNotifierScopes (scopeName: string | null): boolean {\n return Boolean(this._notifierScopes?.find((notifierScope: Readonly<NotifierScope>): boolean => notifierScope.scope === scopeName));\n }\n\n public areScopeNamesInNotifierScopes (scopeNames: ReadonlyArray<string | null>): boolean {\n return scopeNames.map((scopeName: string | null): boolean => this.isScopeNameInNotifierScopes(scopeName))\n .reduce((previous: boolean, current: boolean): boolean => previous && current);\n }\n\n public getExistingNotifierScopes (scopeNames: ReadonlyArray<string | null>): Array<string | null> {\n return scopeNames.filter((scopeName: string | null): boolean => this.isScopeNameInNotifierScopes(scopeName));\n }\n\n public getNotiferScope (scopeName: string | null): NotifierScope | undefined {\n return this._notifierScopes?.find((notiferScope: NotifierScope): boolean => notiferScope.scope === scopeName);\n }\n\n public getNotifierScopes (scopeNames: ReadonlyArray<string | null>): NotifierScopes | undefined {\n const filteredScopes: NotifierScopes | [] = scopeNames.map((scopeName: string | null): NotifierScope | undefined => this.getNotiferScope(scopeName))\n .filter((notifierScope: Readonly<NotifierScope> | undefined): boolean => notifierScope !== undefined) as NotifierScopes | [];\n\n return filteredScopes.length === 0 ? filteredScopes : undefined;\n }\n\n public addNotifierScope (notifierScope: Readonly<NotifierScope>): void {\n this._notifierScopes === null\n ? this._notifierScopes = [ notifierScope ]\n : this._notifierScopes.push(notifierScope);\n }\n\n public addNotifierScopes (notifierScopes: NotifierScopes): void {\n this._notifierScopes === null\n ? this._notifierScopes = notifierScopes\n : this._notifierScopes.push(...notifierScopes);\n }\n\n public addNotifierToNotifierScope (scopeName: string | null, notifier: Subject<ScopedFile>): void {\n this._notifierScopes = this._notifierScopes?.map((notifierScope: NotifierScope): NotifierScope => {\n if (notifierScope.scope !== scopeName) return notifierScope;\n\n notifierScope.notifiers === null\n ? notifierScope.notifiers = [ notifier ]\n : notifierScope.notifiers.push(notifier);\n\n return notifierScope;\n }) ?? null;\n }\n\n public removeNotifierScope (scopeName: string | null): void {\n if (this._notifierScopes === null)\n return;\n\n this._notifierScopes = this._notifierScopes.filter((notifierScope: Readonly<NotifierScope>): boolean => notifierScope.scope !== scopeName);\n }\n\n public getSourceLocale (): LocaleConfig | undefined {\n return this._translationConfig.locales.find((localeConfig: LocaleConfig) => localeConfig.isSource);\n }\n\n private _checkIfLocaleExists (locale: LocaleConfig): boolean {\n return this._translationConfig.locales.some((configLocale: LocaleConfig): boolean => configLocale.value === locale.value);\n }\n\n private _checkIfLocaleIsSourceLocale (locale: LocaleConfig): boolean {\n return this._translationConfig.locales.some((localeConfig: LocaleConfig) => localeConfig.value === locale.value && localeConfig.isSource);\n }\n\n private _setStorageValue (dataType: \"locale\" | \"translations\", storageValue: unknown): void {\n storageValue === null\n ? this._storageAttributes[ dataType ].type.removeItem(this._storageAttributes[ dataType ].key)\n : this._storageAttributes[ dataType ].type.setItem(this._storageAttributes[ dataType ].key, JSON.stringify(storageValue));\n }\n\n private _getStorageValue (dataType: \"locale\" | \"translations\"): unknown {\n const serializedStorageValue: string | null = this._storageAttributes[ dataType ].type.getItem(this._storageAttributes[ dataType ].key);\n\n return serializedStorageValue ? JSON.parse(serializedStorageValue) : null;\n }\n\n private _getScopeByScopeName (scopeName: string | null): LoadedScope | undefined {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes;\n\n if (this._loadedScopes === null) return undefined;\n\n const _loadedScopes: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n return _loadedScopes?.find((loadedScope: LoadedScope): boolean => loadedScope.scope === scopeName);\n }\n\n const loadedScopes: LoadedScopes | null = this._loadedScopes as LoadedScopes | null;\n\n return loadedScopes?.find((loadedScope: LoadedScope): boolean => loadedScope.scope === scopeName);\n }\n\n private _getScopeByScopeNames (scopeNames: ReadonlyArray<string | null>): LoadedScopes | undefined {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes;\n\n if (this._loadedScopes === null) return undefined;\n\n const _loadedScopes: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n return _loadedScopes?.filter((loadedScope: LoadedScope): boolean => scopeNames.includes(loadedScope.scope));\n }\n\n const loadedScopes: LoadedScopes = this._loadedScopes as LoadedScopes;\n\n return loadedScopes.filter((loadedScope: LoadedScope): boolean => scopeNames.includes(loadedScope.scope));\n }\n\n private _appendScope (scopeName: string | null, file: ScopedFile): void {\n if (this._storageAttributes.collectingStrategy === CollectingStrategies.ALL) {\n const localeLoadedScopes: LocaleLoadedScopes | null = this._loadedScopes as LocaleLoadedScopes | null;\n\n if (localeLoadedScopes === null) {\n this._loadedScopes = { [ this._locale.value.value ]: [ { scope: scopeName, file } ] };\n\n return;\n }\n\n const loadedScope: LoadedScopes | undefined = localeLoadedScopes[ this._locale.value.value ];\n\n if (loadedScope === undefined) {\n localeLoadedScopes[ this._locale.value.value ] = [ { scope: scopeName, file } ];\n\n return;\n }\n\n loadedScope.push({ scope: scopeName, file });\n\n return;\n }\n\n this._loadedScopes === null\n ? this._loadedScopes = [ { scope: scopeName, file } ]\n : (this._loadedScopes as LoadedScopes).push({ scope: scopeName, file });\n }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { LocaleConfig } from \"../types/config.type\";\nimport { Observable } from \"rxjs\";\nimport { TranslationStoreService } from \"../services/translation-store.service\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationInterceptor implements HttpInterceptor {\n private readonly _translationStoreService: TranslationStoreService = inject(TranslationStoreService);\n\n public intercept (httpRequest: Readonly<HttpRequest<unknown>>, httpHandler: Readonly<HttpHandler>): Observable<HttpEvent<unknown>> {\n const currentLocale: LocaleConfig = this._translationStoreService.getCurrentLocale();\n const clonedHttpRequest: HttpRequest<unknown> = httpRequest.clone({\n setHeaders: {\n language: currentLocale.value\n }\n });\n\n return httpHandler.handle(clonedHttpRequest);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const TRANSLATION_SCOPE_TOKEN: InjectionToken<string> = new InjectionToken<string>(\"translation-scope-token\");\n","export class ScopeNotDefinedError extends Error {\n public override readonly name: string;\n\n constructor (isDefaultScope: boolean, scopeName?: string) {\n super(\n isDefaultScope\n ? `The default scope does not exists. Please check if the given scope is provided.`\n : `Scope \"${ scopeName }\" does not exists. Please check if the given scope is provided.`\n );\n this.name = \"ScopeNotDefinedError\";\n }\n}\n","export class TranslationNotDefinedError extends Error {\n public override name: string;\n\n constructor (token: string, value?: string) {\n super(`Translation for token \"${ token }\" ${ value && `and its default value \"${ value }\"` } does not exists. Please check if the translation for the given token is provided in the translations.`);\n this.name = \"TranslationNotDefinedError\";\n }\n}\n","import { MultiScopedFile, ParsedMultiScopedFiles, ScopedFile } from \"../types/store.type\";\nimport { ScopeNotDefinedError } from \"../errors/scope-not-defined.error\";\nimport { TranslationNotDefinedError } from \"../errors/translation-not-defined.error\";\n\n/**\n * Parse a multi scoped file by the defined scopes\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that should be parsed\n * @returns {ParsedMultiScopedFiles} - A partial scoped file for processing it further\n */\nexport const parseMultiScopedFile = (multiScopedFile: MultiScopedFile): ParsedMultiScopedFiles => {\n const splittedMultiScopedFile: ParsedMultiScopedFiles = [];\n const globalScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: ScopedFile | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && !Array.isArray(currentItem)))\n return;\n\n if (typeof currentItem === \"object\") {\n return void splittedMultiScopedFile.push({\n scopeName: key,\n file: currentItem\n });\n }\n\n globalScopedFile[ key ] = currentItem;\n });\n splittedMultiScopedFile.push({\n scopeName: null,\n file: globalScopedFile\n });\n\n return splittedMultiScopedFile;\n};\nexport const splitMultiScopedFile = (multiScopedFile: MultiScopedFile): ScopedFile[] => {\n const scopedFile: ScopedFile[] = [];\n const globalScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: Readonly<Record<string, string>> | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && !Array.isArray(currentItem)))\n return;\n\n if (typeof currentItem === \"object\")\n return void scopedFile.push(currentItem);\n\n globalScopedFile[ key ] = currentItem;\n });\n scopedFile.push(globalScopedFile);\n\n return scopedFile;\n};\n/**\n * Find a scope inside a multi scoped file\\\n * Throws an error if the scope could not be resolved out of the multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that should include the scope\n * @param {string | null} scopeName - The scope name, that'll be searched\n * @returns {ScopedFile} - The found scoped file\n */\nexport const findScopeInMultiScopedFile = (multiScopedFile: MultiScopedFile, scopeName: string | null): ScopedFile => {\n // Filter all not-nested elements to represent the global scope.\n if (scopeName === null) {\n const newScopedFile: Record<string, string> = {};\n\n Object.keys(multiScopedFile).forEach((key: string): void => {\n const currentItem: Readonly<Record<string, string>> | undefined = multiScopedFile[ key ];\n\n if (!(currentItem !== undefined && typeof currentItem !== \"object\" && !Array.isArray(currentItem)))\n return;\n\n newScopedFile[ key ] = currentItem;\n });\n\n return newScopedFile;\n }\n\n // Get the specific scoped file\n const scopedFile: ScopedFile | undefined = multiScopedFile[ scopeName ];\n\n if (scopedFile === undefined) throw new ScopeNotDefinedError(false, scopeName);\n\n return scopedFile;\n};\n/**\n * Parse a multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The multi scoped file, that'll be parsed\n * @param {string[] | string} scopeName - The scope name, that'll be resolved\n * @returns {ScopedFile[]} - All scoped files, that match the scope name\n */\nexport const parseMultiScopedFileByScope = (multiScopedFile: MultiScopedFile, scopeName: string[] | string): ScopedFile[] => {\n if (Array.isArray(scopeName))\n return scopeName.map((_scopeName: string): ScopedFile => findScopeInMultiScopedFile(multiScopedFile, _scopeName));\n\n\n return [ findScopeInMultiScopedFile(multiScopedFile, scopeName) ];\n};\nexport const findTokenInScopedFiles = (scopedFiles: readonly ScopedFile[], token: string): ScopedFile => {\n const foundScopedFile: ScopedFile | undefined = scopedFiles.find((scopedFile: ScopedFile): boolean => Object.keys(scopedFile).includes(token));\n\n if (foundScopedFile === undefined) throw new TranslationNotDefinedError(token);\n\n return foundScopedFile;\n};\n\n","import { SpecificTranslateConfig } from \"../public-api\";\nimport { MultiScopedFile, ScopedFile } from \"../types/store.type\";\nimport { findScopeInMultiScopedFile } from \"./file.util\";\n\n/**\n * Translate token by a scoped file\n * @param {ScopedFile} scopedFile - The scoped file, that should include the translation\n * @param {string} token - The token, that'll be translated\n * @returns {string | undefined} - string, that represents the translated token. If no translation was found undefined.\n */\nexport const translateTokenByScopedFile = (scopedFile: ScopedFile, token: string): string | undefined => {\n const isTokenValid: boolean = Object.keys(scopedFile).includes(token);\n\n if (!isTokenValid) return;\n\n return scopedFile[ token ];\n};\nexport const translateTokenByScopedFiles = (scopedFiles: ScopedFile[], token: string): string | undefined => {\n let translation: string | undefined;\n\n scopedFiles.some((scopedFile: ScopedFile): boolean => {\n const isTokenValid: boolean = Object.keys(scopedFile).includes(token);\n\n if (!isTokenValid) return false;\n\n translation = scopedFile[ token ];\n\n return true;\n });\n\n return translation;\n};\n/**\n * Translate token by a multi scoped file by first resolving the scope out of the multi scoped file\n * @param {MultiScopedFile} multiScopedFile - The MultiScopedFile, that should includes the scope to search and the token\n * @param {string | null} scopeName - The scope name which should include the translation for the token\n * @param {string} token - The token, that'll be translated\n * @returns {string | undefined} - string, that represents the translated token. If no translation was found undefined.\n */\nexport const translateTokenByMultiScopedFile = (multiScopedFile: MultiScopedFile, scopeName: string | null, token: string): string | undefined => {\n const scopedFile: ScopedFile = findScopeInMultiScopedFile(multiScopedFile, scopeName);\n\n return translateTokenByScopedFile(scopedFile, token);\n};\nexport function resolveScope<T extends ReadonlyArray<string | null> | string | null> (translationConfig: SpecificTranslateConfig | null, scopeName?: T): T {\n return (scopeName ?? translationConfig?.defaultScope ?? null) as T;\n}\n\n","import { InjectionToken } from \"@angular/core\";\nimport { HttpHeadersOption, HttpOptions } from \"@ogs-gmbh/ngx-http\";\n\nexport const TRANSLATION_HTTP_CONFIG: InjectionToken<string> = new InjectionToken<string>(\"translation-http-config\");\nexport const TRANSLATION_HTTP_OPTIONS: InjectionToken<HttpOptions<never, HttpHeadersOption, never>> = new InjectionToken<HttpOptions<never, HttpHeadersOption, never>>(\"translation-http-options\");\n","import { HttpHeadersOption, HttpOptions, mergeHttpHeaders } from \"@ogs-gmbh/ngx-http\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { Injectable, inject } from \"@angular/core\";\nimport { Observable, retry, timeout } from \"rxjs\";\nimport { SpecificTranslateConfig } from \"../types/config.type\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { TRANSLATION_HTTP_CONFIG, TRANSLATION_HTTP_OPTIONS } from \"../tokens/http.token\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationHttpSerivce {\n private readonly _translationHttpConfig: string = inject(TRANSLATION_HTTP_CONFIG);\n\n private readonly _translationConfig: SpecificTranslateConfig | null = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });\n\n private readonly _translationHttpOptions: HttpOptions<never, HttpHeadersOption, never> | null = inject(TRANSLATION_HTTP_OPTIONS, { optional: true });\n\n public getWithRef$<T>(httpClientRef: Readonly<HttpClient>, scopeName: ReadonlyArray<string | null> | string | null, httpOptions?: HttpOptions<never, HttpHeadersOption, never>): Observable<T> {\n let path: string = this._translationHttpConfig;\n\n if (typeof scopeName === \"string\" || scopeName === null) {\n if (scopeName !== null)\n path += `?scope=${ encodeURIComponent(scopeName) }`;\n } else {\n const urlSearchParams: URLSearchParams = new URLSearchParams();\n\n scopeName.forEach((scopeNameItem: string | null): void => {\n if (scopeNameItem === null) return;\n\n urlSearchParams.append(\"scope\", encodeURIComponent(scopeNameItem));\n });\n path += `?${ urlSearchParams.toString() }`;\n }\n\n let headers: HttpHeaders = new HttpHeaders();\n\n if (this._translationHttpOptions?.headers !== undefined)\n headers = mergeHttpHeaders(headers, this._translationHttpOptions.headers);\n\n if (httpOptions?.headers !== undefined)\n headers = mergeHttpHeaders(headers, httpOptions.headers);\n\n return httpClientRef.get<T>(path, {\n responseType: \"json\",\n observe: \"body\",\n headers\n }).pipe(\n timeout(this._translationConfig?.timeout ?? 3000),\n retry(0)\n );\n }\n}\n","import { HttpRequestStatus, HttpOptions, HttpHeadersOption } from \"@ogs-gmbh/ngx-http\";\nimport { BehaviorSubject, EMPTY, Observable, Subject, catchError, combineLatestWith, distinctUntilChanged, filter, map, of, switchMap, tap } from \"rxjs\";\nimport { Injectable, SkipSelf, inject } from \"@angular/core\";\nimport { LocaleConfig, SpecificTranslateConfig } from \"../types/config.type\";\nimport { MultiScopedFile, NotifierScope, ParsedMultiScopedFile, ParsedMultiScopedFiles, ScopedFile } from \"../types/store.type\";\nimport { findScopeInMultiScopedFile, findTokenInScopedFiles, parseMultiScopedFile, splitMultiScopedFile } from \"../utils/file.util\";\nimport { resolveScope, translateTokenByScopedFile, translateTokenByScopedFiles } from \"../utils/translate.util\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { TranslationHttpSerivce } from \"./translation-http.serivce\";\nimport { TranslationNotDefinedError } from \"../errors/translation-not-defined.error\";\nimport { TranslationStoreService } from \"./translation-store.service\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class TranslationService {\n @SkipSelf()\n private readonly _httpClient: HttpClient = inject(HttpClient);\n\n private readonly _translationConfig: SpecificTranslateConfig = inject(TRANSLATION_CONFIG_TOKEN);\n\n private readonly _translationStoreService: TranslationStoreService = inject(TranslationStoreService);\n\n private readonly _translationHttpService: TranslationHttpSerivce = inject(TranslationHttpSerivce);\n\n private readonly _isHttpLoading: BehaviorSubject<HttpRequestStatus | null> = new BehaviorSubject<HttpRequestStatus | null>(null);\n\n private readonly _isHttpLoading$: Observable<HttpRequestStatus | null> = this._isHttpLoading.asObservable();\n\n /**\n * Getter for getting an Observable, that will emit only when a HTTP-Request is made\n * @returns {Observable<HttpRequestStatus | null>} - An observable with the HttpRequestStatus if HTTP is currently under use. Otherwise an observable with null inside.\n */\n public isHttpLoading$ (): Observable<HttpRequestStatus | null> {\n return this._isHttpLoading$.pipe(\n distinctUntilChanged(),\n filter((isHttpLoading: HttpRequestStatus | null): boolean => isHttpLoading !== null)\n );\n }\n\n /**\n * Preload multiple translations with references to the required services\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {string} _locale - The locale, that should be preloaded\n * @param {string | null} scopeName - The scope name for the lookup of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<void>} - An observable to handle the status\n */\n /* eslint-disable-next-line @tseslint/class-methods-use-this, @tseslint/max-params */\n public _preloadWithRef$ (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n _locale: LocaleConfig,\n scopeName: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n /*\n * Handle resolve by store\n * Check if all scopes are in store\n */\n if ((typeof scopeName === \"string\" || scopeName === null) && translationStoreService.hasScopedFile(scopeName))\n return EMPTY;\n\n if (Array.isArray(scopeName) && translationStoreService.hasScopedFiles(scopeName))\n return EMPTY;\n\n // Check if scopes are in notifer scopes\n if ((typeof scopeName === \"string\" || scopeName === null) && translationStoreService.isScopeNameInNotifierScopes(scopeName))\n return EMPTY;\n\n if (Array.isArray(scopeName) && translationStoreService.areScopeNamesInNotifierScopes(scopeName as ReadonlyArray<string | null>))\n return EMPTY;\n\n // Check if scopes are not in store\n if (typeof scopeName === \"string\" || scopeName === null) {\n return translationHttpService.getWithRef$<ScopedFile>(\n httpClient,\n scopeName,\n httpOptions\n ).pipe(\n tap((scopedFile: ScopedFile): void => {\n translationStoreService.setScopedFile(scopeName, scopedFile);\n }),\n map((): void => void 0)\n );\n } else {\n const existingScopes: Array<string | null> = translationStoreService.getExistingScopes(scopeName);\n\n if (existingScopes.length === scopeName.length)\n return EMPTY;\n\n const extinctScopes: Array<string | null> = scopeName.filter((_scopeName: string | null): boolean => !existingScopes.includes(_scopeName));\n\n if (extinctScopes.length === 0)\n return EMPTY;\n\n return translationHttpService.getWithRef$<MultiScopedFile>(\n httpClient,\n extinctScopes,\n httpOptions\n ).pipe(\n tap((multiScopedFile: MultiScopedFile): void => {\n const parsedMultiScopedFiles: ParsedMultiScopedFiles = parseMultiScopedFile(multiScopedFile);\n\n parsedMultiScopedFiles.forEach((parsedScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(parsedScopedFile.scopeName, parsedScopedFile.file);\n });\n }),\n map((): void => void 0)\n );\n }\n }\n\n /**\n * Translates a token by the locale reactive\\\n * If the locale changes, a new translation based on the new locale will be emitted.\n * @param {string} token - The token to resolve the translation\n * @param {string | undefined} scopeName - A scope name to resolve the lookup\n * @param {string | undefined} value - The default value of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the current translation as string\n */\n public translateTokenByLocale$ (\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n return this._translationStoreService.getLocale$().pipe(switchMap((locale: LocaleConfig): Observable<string> => this._translateWithRef$(\n this._httpClient,\n this._translationStoreService,\n this._translationHttpService,\n locale,\n token,\n value,\n this._resolveScope(scopeName),\n httpOptions\n )));\n }\n\n /**\n * Translates a token by the current locale\\\n * If the locale changes, no new translation will be emitted.\n * @param {string} token - The token to resolve the translation\n * @param {string | undefined} scopeName - A scope name to resolve the lookup\n * @param {string | undefined} value - The default value of the translation\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the current translation as string\n */\n public translateTokenByCurrentLocale$ (\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n const currentLocale: LocaleConfig = this._translationStoreService.getCurrentLocale();\n\n return this._translateWithRef$(\n this._httpClient,\n this._translationStoreService,\n this._translationHttpService,\n currentLocale,\n token,\n value,\n scopeName,\n httpOptions\n );\n }\n\n /**\n * Preload translations by locale reactive.\n */\n /* eslint-disable-next-line @tseslint/max-params */\n public preloadByLocale (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scopeName: string | null | ReadonlyArray<string | null>,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n return translationStoreService.getLocale$().pipe(switchMap((locale: LocaleConfig): Observable<void> => this._preloadWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n locale,\n scopeName,\n httpOptions\n )));\n }\n\n /**\n * Preload translations by current locale.\n */\n /* eslint-disable-next-line @tseslint/max-params */\n public preloadByCurrentLocale (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scopeName: string | null | ReadonlyArray<string | null>,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<void> {\n const currentLocale: LocaleConfig = translationStoreService.getCurrentLocale();\n\n return this._preloadWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n currentLocale,\n scopeName,\n httpOptions\n );\n }\n\n /**\n * Resolve scope(s) hierarchically\n * @param {Array<string | null> | string | null | undefined} scopeName - Scope name(s), that should be resolved\n * @returns {Array<string | null> | string | null} - based on type\n */\n private _resolveScope<T extends ReadonlyArray<string | null> | string | null>(scopeName?: T): T {\n return resolveScope(this._translationConfig, scopeName);\n }\n\n /**\n * Translate token by source locale\n * @param {string | undefined} value - The value, that should be translated\n * @param {string} token - The token, that is defined for the value\n * @returns {Observable<string>} - An observable with the translation as value\n */\n /* eslint-disable-next-line @tseslint/class-methods-use-this */\n private _translateBySourceLocale (token: string, value?: string): Observable<string> {\n if (!value)\n throw new TranslationNotDefinedError(token);\n\n return of(value);\n }\n\n /**\n * Translate token by resolving it from the storage\\\n * The first matching translation will be used if scope is provided here as an Array.\n * @param {string | null} scope - The scope, that will be looked up\n * @param {string} token - The token, that is defined for the value\n * @returns {Observable<string>} - An observable with the translation as value\n */\n private _translateByStore (scope: ReadonlyArray<string | null> | string | null, token: string): Observable<string> {\n if (typeof scope === \"string\" || scope === null) {\n /* eslint-disable-next-line @tseslint/no-non-null-assertion */\n const scopedFile: ScopedFile = this._translationStoreService.getScopedFile(scope)!;\n const _translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (_translatedToken === undefined) throw new TranslationNotDefinedError(token);\n\n return of(_translatedToken);\n }\n\n let translatedToken: string | undefined;\n\n scope.map((_scope: string | null): ScopedFile | undefined => this._translationStoreService.getScopedFile(_scope))\n .some((scopedFile: ScopedFile | undefined): boolean => {\n if (scopedFile === undefined) return false;\n\n const _translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (_translatedToken === undefined) return false;\n\n translatedToken = _translatedToken;\n\n return true;\n });\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token);\n\n return of(translatedToken);\n }\n\n /**\n * Get scoped file by notifier\\\n * The resolved scoped got requested by HTTP\n * @param {string|null} scope - The scope to identify the notifier by. string is an explicit scope and null is the global scope\n * @returns {Observable<ScopedFile>} - An observable as the new notifier.\n */\n private _getScopedFileByNotifier (scope: string | null): Observable<ScopedFile> {\n const currentNotifier: Subject<ScopedFile> = new Subject<ScopedFile>();\n\n this._translationStoreService.addNotifierToNotifierScope(scope, currentNotifier);\n\n return currentNotifier.asObservable();\n }\n\n /**\n * Get scoped file by adding a notifier\\\n * The resolved scope should be requested by HTTP\n * @param {string | null} scope - The scope to identify the notifier by. string is an explicit scope and null is the global socpe.\n * @returns {Observable<ScopedFile>} - An observable as the new notifier.\n */\n private _getScopedFileByAddingNotifier (scope: string | null): Observable<ScopedFile> {\n const currentNotifier: Subject<ScopedFile> = new Subject<ScopedFile>();\n\n this._translationStoreService.addNotifierScope({\n scope,\n notifiers: [ currentNotifier ]\n });\n\n return currentNotifier;\n }\n\n /**\n * Get a (multi-)scoped file by HTTP\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {Array<string | null>} scope - The scope as Array, where string is an explicit scope and null is the global scope\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable} - An observable with the (multi-)scoped file inside\n */\n /* eslint-disable-next-line @tseslint/max-params */\n private _getScopedFileByHttpWithRef$<T extends ReadonlyArray<string | null> | string | null>(\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n scope: T,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile> {\n if (typeof scope === \"string\" || scope === null)\n translationStoreService.addNotifierScope({ scope, notifiers: null });\n else\n translationStoreService.addNotifierScopes(scope.map((_scope: string | null): NotifierScope => ({ scope: _scope, notifiers: null })));\n\n\n this._isHttpLoading.next(HttpRequestStatus.PENDING);\n\n return translationHttpService.getWithRef$<T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile>(httpClient, scope, httpOptions).pipe(\n catchError((): Observable<never> => {\n this._isHttpLoading.next(HttpRequestStatus.ERROR);\n this._isHttpLoading.next(null);\n\n if (typeof scope === \"string\" || scope === null)\n translationStoreService.isScopeNameInNotifierScopes(scope) && translationStoreService.removeNotifierScope(scope);\n else {\n scope.forEach((_scope: string | null): void => {\n if (!translationStoreService.isScopeNameInNotifierScopes(_scope))\n return;\n\n translationStoreService.removeNotifierScope(_scope);\n });\n }\n\n return of();\n }),\n tap((genericScopedFile: T extends ReadonlyArray<string | null> ? MultiScopedFile : ScopedFile): void => {\n this._isHttpLoading.next(HttpRequestStatus.SUCCESS);\n this._isHttpLoading.next(null);\n\n if (typeof scope === \"string\" || scope === null) {\n translationStoreService.setScopedFile(scope, genericScopedFile as ScopedFile);\n\n const notifierScope: NotifierScope | undefined = translationStoreService.getNotiferScope(scope);\n\n if (notifierScope === undefined) return;\n\n notifierScope.notifiers?.forEach((notifier: Subject<ScopedFile>): void => {\n notifier.next(genericScopedFile as ScopedFile);\n });\n translationStoreService.removeNotifierScope(scope);\n\n return;\n }\n\n scope.forEach((_scope: string | null): void => {\n const parsedScopedFile: ScopedFile = findScopeInMultiScopedFile(genericScopedFile as MultiScopedFile, _scope);\n const notifierScope: NotifierScope | undefined = translationStoreService.getNotiferScope(_scope);\n\n if (notifierScope === undefined) return;\n\n notifierScope.notifiers?.forEach((notifier: Subject<ScopedFile>): void => {\n notifier.next(parsedScopedFile);\n });\n translationStoreService.removeNotifierScope(_scope);\n });\n })\n );\n }\n\n /**\n * Translate one token by a scope\n * @param {HttpClient} httpClient - The HttpClient, that'll be used\n * @param {TranslationStoreService} translationStoreService - The TranslationStoreService, that'll be used\n * @param {TranslationHttpSerivce} translationHttpService - The TranslationHttpService, that'll be used\n * @param {string} locale - The locale for resolving the translation\n * @param {string} scopeName - The scope name for resolving the translation\n * @param {string} token - The token for resolving the translation\n * @param {string | undefined} value - The default value for the token\n * @param {HttpOptions | undefined} httpOptions - Additional HTTP Options for the request\n * @returns {Observable<string>} - An observable with the translation as string inside\n *\n * Resolving steps:\n * 1. Check if it should not be translated\n * => If the current locale is the source locale\n * 2. Check if it can be translated by store\n * => If translation is stored in store\n * 3. Resolve translations by notifiers\n * => Exisiting scopes are resolved automatically\n * => Extinct scopes are resolved by HTTP\n * 4. Resolve by HTTP\n * => Every scope gets resolved by HTTP\n */\n /* eslint-disable-next-line @tseslint/max-params */\n private _translateWithRef$ (\n httpClient: Readonly<HttpClient>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n locale: LocaleConfig,\n token: string,\n value: string,\n scopeName?: ReadonlyArray<string | null> | string | null,\n httpOptions?: HttpOptions<never, HttpHeadersOption, never>\n ): Observable<string> {\n let resolvedScopes: ReadonlyArray<string | null> | string | null | undefined;\n\n const sourceLocale: LocaleConfig | undefined = this._translationStoreService.getSourceLocale();\n\n // Handle direct resolving\n if (sourceLocale !== undefined && sourceLocale === this._translationStoreService.getCurrentLocale())\n return this._translateBySourceLocale(token, value);\n\n // Handle store resolving\n if (typeof scopeName === \"string\" || scopeName === null) {\n resolvedScopes = this._resolveScope(scopeName);\n\n if (translationStoreService.hasScopedFile(resolvedScopes))\n return this._translateByStore(resolvedScopes, token);\n } else {\n resolvedScopes = this._resolveScope(scopeName);\n\n if (translationStoreService.hasScopedFiles(resolvedScopes))\n return this._translateByStore(resolvedScopes, token);\n }\n\n // Handle notifier resolving\n if (typeof resolvedScopes === \"string\" || resolvedScopes === null) {\n if (translationStoreService.isScopeNameInNotifierScopes(resolvedScopes)) {\n return this._getScopedFileByNotifier(resolvedScopes)\n .pipe(map((scopedFile: ScopedFile): string => {\n const translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n }));\n }\n } else {\n const existingScopes: Array<string | null> = translationStoreService.getExistingNotifierScopes(resolvedScopes);\n const extinctScopes: Array<string | null> = resolvedScopes.filter((resolvedScope: string | null): boolean => !existingScopes.includes(resolvedScope));\n const existingNotifiers: Array<Observable<ScopedFile>> = existingScopes.map((existingScope: string | null): Observable<ScopedFile> => this._getScopedFileByNotifier(existingScope));\n const extinctScopesHttp: Observable<ScopedFile> = this._getScopedFileByHttpWithRef$(httpClient, translationStoreService, translationHttpService, extinctScopes, httpOptions)\n .pipe(\n tap((multiScopedFile: ScopedFile | MultiScopedFile): void => {\n const castedMultiScopedFile: MultiScopedFile = multiScopedFile as MultiScopedFile;\n const parsedMultiScopedFile: ParsedMultiScopedFiles = parseMultiScopedFile(castedMultiScopedFile);\n\n parsedMultiScopedFile.forEach((_parsedMultiScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(\n _parsedMultiScopedFile.scopeName,\n _parsedMultiScopedFile.file\n );\n });\n }),\n map((multiScopedFile: ScopedFile | MultiScopedFile): ScopedFile => {\n const castedMultiScopedFile: MultiScopedFile = multiScopedFile as MultiScopedFile;\n const splittedMultiScopedFiles: ScopedFile[] = splitMultiScopedFile(castedMultiScopedFile);\n\n return findTokenInScopedFiles(splittedMultiScopedFiles, token);\n })\n );\n\n return extinctScopesHttp.pipe(\n combineLatestWith(...existingNotifiers),\n map((scopedFiles: ScopedFile[]): string => {\n const translatedToken: string | undefined = translateTokenByScopedFiles(scopedFiles, token);\n\n if (translatedToken === undefined) throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n })\n );\n }\n\n // Handle HTTP resolving\n return of(locale).pipe(switchMap((): Observable<string> => (\n /* eslint-disable-next-line @tseslint/no-unnecessary-condition */\n typeof resolvedScopes === \"string\" || resolvedScopes === null\n ? this._getScopedFileByHttpWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n resolvedScopes,\n httpOptions\n ).pipe(map((scopedFile: ScopedFile): string => {\n translationStoreService.setScopedFile(\n resolvedScopes,\n scopedFile\n );\n\n const translatedToken: string | undefined = translateTokenByScopedFile(scopedFile, token);\n\n if (translatedToken === undefined)\n throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n }))\n // Handle array\n : this._getScopedFileByHttpWithRef$(\n httpClient,\n translationStoreService,\n translationHttpService,\n resolvedScopes,\n httpOptions\n ).pipe(\n tap((multiScopedFile: MultiScopedFile): void => {\n const parsedMultiScopedFile: ParsedMultiScopedFiles = parseMultiScopedFile(multiScopedFile);\n\n parsedMultiScopedFile.forEach((_parsedMultiScopedFile: ParsedMultiScopedFile): void => {\n translationStoreService.setScopedFile(\n _parsedMultiScopedFile.scopeName,\n _parsedMultiScopedFile.file\n );\n });\n }),\n map((multiScopedFile: MultiScopedFile): string => {\n const splittedMultiScopedFiles: ScopedFile[] = splitMultiScopedFile(multiScopedFile);\n const foundScopedFile: ScopedFile = findTokenInScopedFiles(splittedMultiScopedFiles, token);\n const translatedToken: string | undefined = translateTokenByScopedFile(foundScopedFile, token);\n\n if (translatedToken === undefined)\n throw new TranslationNotDefinedError(token, value);\n\n return translatedToken;\n })\n )\n )));\n }\n}\n\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from \"@angular/core\";\nimport { SpecificTranslateConfig, TRANSLATION_CONFIG_TOKEN } from \"../public-api\";\nimport { EMPTY, Observable, Subscription, catchError, filter } from \"rxjs\";\nimport { TRANSLATION_SCOPE_TOKEN } from \"../tokens/scope.token\";\nimport { TranslationService } from \"../services/translation.service\";\nimport { resolveScope } from \"../utils/translate.util\";\nimport { HttpErrorResponse } from \"@angular/common/http\";\n\n@Pipe({\n name: \"translate\",\n pure: false\n})\nexport class TranslationPipe implements PipeTransform, OnDestroy {\n private _translationServiceSubscription: Subscription | null = null;\n\n private _lastValue: string | null = null;\n\n private _hasTranslationChanged: boolean = false;\n\n private readonly _translationService: TranslationService = inject(TranslationService);\n\n private readonly _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n private readonly _translationScopeToken: string | null = inject(TRANSLATION_SCOPE_TOKEN, { optional: true });\n\n private readonly _translationConfig: SpecificTranslateConfig | null = inject(TRANSLATION_CONFIG_TOKEN, { optional: true });\n\n public transform (value: string, token: string, scope?: Readonly<Array<string | null> | string | null>, fallback?: boolean): string | null {\n if (this._translationServiceSubscription !== null)\n return this._lastValue;\n\n this._translationServiceSubscription = this._translationService.translateTokenByLocale$(token, value, this._resolveScope(scope))\n .pipe(\n catchError((_httpErrorResponse: HttpErrorResponse, _: Observable<string>): Observable<string> => {\n const fallbackToSourceLocale: boolean | undefined = fallback ?? this._translationConfig?.fallbackToSourceLocale;\n\n if (fallbackToSourceLocale)\n this._updateLastValue(value);\n\n return EMPTY;\n }),\n filter((translation: string): boolean => translation !== this._lastValue)\n )\n .subscribe({\n next: (translation: string): void => {\n this._hasTranslationChanged = translation !== this._lastValue;\n this._updateLastValue(translation);\n }\n });\n\n return this._lastValue;\n }\n\n public ngOnDestroy (): void {\n this._translationServiceSubscription?.unsubscribe();\n }\n\n private _resolveScope<T extends ReadonlyArray<string | null> | string | null>(scope?: T): T {\n return resolveScope(this._translationConfig, scope ?? this._translationScopeToken as T);\n }\n\n private _updateLastValue (newValue: string): void {\n this._lastValue = newValue;\n this._hasTranslationChanged && this._changeDetectorRef.markForCheck();\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const TRANSLATION_PRELOAD_TOKEN: InjectionToken<string> = new InjectionToken<string>(\"translation-preload-token\");\n","import { TRANSLATION_SCOPE_TOKEN } from \"../tokens/scope.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationScope = (scope: string): ValueProvider => ({\n provide: TRANSLATION_SCOPE_TOKEN,\n useValue: scope,\n multi: false\n});\n\n","import { APP_INITIALIZER, FactoryProvider } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { PreloadingStrategies } from \"../enums/preloading-strategies.enum\";\nimport { TRANSLATION_PRELOAD_TOKEN } from \"../tokens/preload.token\";\nimport { TranslationHttpSerivce } from \"../services/translation-http.serivce\";\nimport { TranslationPreloadProvider } from \"../types/provider.type\";\nimport { TranslationService } from \"../services/translation.service\";\nimport { TranslationStoreService } from \"../services/translation-store.service\";\n\n/* eslint-disable @tseslint/max-params */\nconst handleInitializationStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => void => (): void => void translationSerivce.preloadByCurrentLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n/* eslint-enable @tseslint/max-params */\n/* eslint-disable @tseslint/max-params */\nconst handleRuntimeStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => Readonly<TranslationService> => (): Readonly<TranslationService> => {\n translationSerivce.preloadByCurrentLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n\n return translationSerivce;\n};\n/* eslint-enable @tseslint/max-params */\n\nexport const provideTranslationPreload = (preloadProvider: Readonly<TranslationPreloadProvider>): FactoryProvider => {\n switch (preloadProvider.preloadingStrategy) {\n case PreloadingStrategies.INITIALIZATION: {\n return {\n provide: APP_INITIALIZER,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ): () => void => handleInitializationStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: true\n };\n }\n\n case PreloadingStrategies.RUNTIME: {\n return {\n provide: TRANSLATION_PRELOAD_TOKEN,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ): () => void => handleRuntimeStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: false\n };\n }\n }\n};\n\n/* eslint-disable @tseslint/max-params */\nconst handleReactiveInitializationStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => void => (): void => void translationSerivce.preloadByLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n/* eslint-enable @tseslint/max-params */\n/* eslint-disable @tseslint/max-params */\nconst handleReactiveRuntimeStrategy = (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>,\n scopes: Readonly<Array<string | null> | string | null>\n): () => Readonly<TranslationService> => (): Readonly<TranslationService> => {\n translationSerivce.preloadByLocale(httpClient, translationStoreService, translationHttpService, scopes).subscribe();\n\n return translationSerivce;\n};\n/* eslint-enable @tseslint/max-params */\n\nexport const provideTranslationPreloadReactive = (preloadProvider: Readonly<TranslationPreloadProvider>): FactoryProvider => {\n switch (preloadProvider.preloadingStrategy) {\n case PreloadingStrategies.INITIALIZATION: {\n return {\n provide: APP_INITIALIZER,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ) => handleReactiveInitializationStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: true\n };\n }\n\n case PreloadingStrategies.RUNTIME: {\n return {\n provide: TRANSLATION_PRELOAD_TOKEN,\n useFactory: (\n httpClient: Readonly<HttpClient>,\n translationHttpService: Readonly<TranslationHttpSerivce>,\n translationStoreService: Readonly<TranslationStoreService>,\n translationSerivce: Readonly<TranslationService>\n ) => handleReactiveRuntimeStrategy(httpClient, translationHttpService, translationStoreService, translationSerivce, preloadProvider.scopes),\n deps: [ HttpClient, TranslationHttpSerivce, TranslationStoreService, TranslationService ],\n multi: false\n };\n }\n }\n};\n\n","import { SpecificTranslateConfig } from \"../types/config.type\";\nimport { TRANSLATION_CONFIG_TOKEN } from \"../tokens/config.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationConfig = (translationConfig: Readonly<SpecificTranslateConfig>): ValueProvider => ({\n provide: TRANSLATION_CONFIG_TOKEN,\n useValue: translationConfig,\n multi: false\n});\n\n","import { ClassProvider } from \"@angular/core\";\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\nimport { TranslationInterceptor } from \"../interceptors/translation.interceptor\";\n\nexport const provideTranslationInterceptor = (): ClassProvider => ({\n provide: HTTP_INTERCEPTORS,\n useClass: TranslationInterceptor,\n multi: true\n});\n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { TranslationPipe } from \"./pipes/translation.pipe\";\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n TranslationPipe\n ],\n exports: [\n TranslationPipe\n ]\n})\n/* eslint-disable-next-line @tseslint/no-extraneous-class */\nexport class TranslationPipeModule {}\n","import { HttpConfig, HttpHeadersOption, HttpOptions, buildHttpConnectionString } from \"@ogs-gmbh/ngx-http\";\nimport { TRANSLATION_HTTP_CONFIG, TRANSLATION_HTTP_OPTIONS } from \"../tokens/http.token\";\nimport { ValueProvider } from \"@angular/core\";\n\nexport const provideTranslationHttpConfig = (httpConfig: Readonly<HttpConfig>): ValueProvider => ({\n provide: TRANSLATION_HTTP_CONFIG,\n useValue: buildHttpConnectionString(httpConfig),\n multi: false\n});\nexport const provideTranslationHttpOptions = (httpOptions: HttpOptions<never, HttpHeadersOption, never>): ValueProvider => ({\n provide: TRANSLATION_HTTP_OPTIONS,\n useValue: httpOptions,\n multi: false\n});\n","import { ModuleWithProviders, NgModule, Provider } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { TranslateConfig } from \"./types/config.type\";\nimport { TranslationHttpSerivce } from \"./services/translation-http.serivce\";\nimport { TranslationPipeModule } from \"./pipe.module\";\nimport { TranslationService } from \"./services/translation.service\";\nimport { TranslationStoreService } from \"./services/translation-store.service\";\nimport { provideTranslationConfig } from \"./providers/config.provider\";\nimport { provideTranslationHttpConfig, provideTranslationHttpOptions } from \"./providers/http.provider\";\nimport { provideTranslationInterceptor } from \"./providers/interceptor.provider\";\n\n@NgModule({\n imports: [\n CommonModule,\n TranslationPipeModule\n ],\n providers: [\n TranslationHttpSerivce,\n TranslationStoreService,\n TranslationService,\n provideTranslationInterceptor()\n ],\n exports: [\n TranslationPipeModule\n ]\n})\n/* eslint-disable-next-line @tseslint/no-extraneous-class */\nexport class TranslationModule {\n public static forRoot (translateConfig: Readonly<TranslateConfig>): ModuleWithProviders<TranslationModule> {\n const providers: Provider[] = [\n provideTranslationConfig(translateConfig.translate),\n provideTranslationHttpConfig(translateConfig.http.config)\n ];\n\n if (translateConfig.http.options !== undefined) {\n providers.push(\n provideTranslationHttpOptions(translateConfig.http.options)\n );\n }\n\n return {\n ngModule: TranslationModule,\n providers\n };\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ogs-gmbh/ngx-translate",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "A lightweight, REST-based Angular i18n library designed for seamless internationalization with minimal setup. It supports dynamic language switching & flexible translation management via RESTful APIs.",
5
5
  "keywords": [
6
6
  "i18n",
@@ -8,7 +8,7 @@ export declare class TranslationPipe implements PipeTransform, OnDestroy {
8
8
  private readonly _changeDetectorRef;
9
9
  private readonly _translationScopeToken;
10
10
  private readonly _translationConfig;
11
- transform(value: string, token: string, scope?: Readonly<Array<string | null> | string | null>): string | null;
11
+ transform(value: string, token: string, scope?: Readonly<Array<string | null> | string | null>, fallback?: boolean): string | null;
12
12
  ngOnDestroy(): void;
13
13
  private _resolveScope;
14
14
  private _updateLastValue;
@@ -9,6 +9,7 @@ export type SpecificTranslateConfig = {
9
9
  readonly locales: LocaleConfig[];
10
10
  readonly timeout?: number | undefined;
11
11
  readonly defaultScope?: string | undefined;
12
+ readonly fallbackToSourceLocale?: boolean | undefined;
12
13
  readonly storageConfig?: {
13
14
  readonly collectingStrategy?: CollectingStrategies | undefined;
14
15
  readonly locale?: {
@@ -26,7 +27,7 @@ export type SpecificTranslateConfig = {
26
27
  export type TranslateConfig = {
27
28
  readonly http: {
28
29
  config: HttpConfig;
29
- options: HttpOptions<never, HttpHeadersOption, never>;
30
+ options?: HttpOptions<never, HttpHeadersOption, never>;
30
31
  };
31
32
  readonly translate: SpecificTranslateConfig;
32
33
  };