@tolgee/ngx 4.10.0-rc.a11e1b6.0 → 5.0.0-alpha.2

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,94 +1,202 @@
1
- # Tolgee for Angular
1
+ <!-- This file was generated using pnpm generate-readmes script
2
+
3
+ Don't edit this file. Edit the README.md.njk. Macros can be found in readmeMacros/macros.njk
4
+
5
+ -->
6
+
7
+ <h1 align="center" style="border-bottom: none">
8
+ <b>
9
+ <a href="https://tolgee.io">Tolgee for Angular</a><br>
10
+ </b>
11
+ The Tolgee i18n SDK for Angular
12
+ <br>
13
+ </h1>
14
+
15
+ <div align="center">
16
+
17
+ [![Logo](https://user-images.githubusercontent.com/18496315/188628892-33fcc282-26f1-4035-8105-95952bd93de9.svg)](https://tolgee.io)
18
+
19
+ Tolgee is an open-source alternative to Crowdin, Phrase, or Lokalise with its very own revolutionary integrations.
2
20
 
3
21
  ![test workflow](https://github.com/tolgee/tolgee-js/actions/workflows/test.yml/badge.svg)
4
- ![@tolgee/ngx version](https://img.shields.io/npm/v/@tolgee/ngx?label=%40tolgee%2Fngx)
22
+
23
+ ![@tolgee/ngx version](https://img.shields.io/npm/v/@tolgee/ngx?label=@tolgee/ngx)
24
+
5
25
  ![types typescript](https://img.shields.io/badge/Types-Typescript-blue)
26
+ ![typescript](https://img.shields.io/github/languages/top/tolgee/tolgee-js)
6
27
  ![licence](https://img.shields.io/github/license/tolgee/tolgee-js)
7
- [![twitter](https://img.shields.io/twitter/follow/Tolgee_i18n?style=social)](https://twitter.com/Tolgee_i18n)
8
- [![github stars](https://img.shields.io/github/stars/tolgee/tolgee-js?style=social)](https://github.com/tolgee/tolgee-js)
28
+ [![github stars](https://img.shields.io/github/stars/tolgee/tolgee-js?style=social&label=Tolgee%20JS)](https://github.com/tolgee/tolgee-js)
29
+ [![github stars](https://img.shields.io/github/stars/tolgee/server?style=social&label=Tolgee%20Server)](https://github.com/tolgee/server)
30
+ [![Github discussions](https://img.shields.io/github/discussions/tolgee/tolgee-platform)](https://github.com/tolgee/tolgee-platform/discussions)
31
+ </div>
9
32
 
10
- [<img src="https://raw.githubusercontent.com/tolgee/documentation/main/tolgee_logo_text.svg" alt="Tolgee" width="200" />](https://tolgee.io)
33
+ <div align="center">
11
34
 
12
- Localize (translate) your Angular app to multiple languages with Tolgee. For more information about using Tolgee with
13
- Angular, visit our [documentation website](https://toolkit.tolgee.io/docs/web/using_with_angular/installation).
14
- Integration of Tolgee is extremely simple! 🇯🇵 🇰🇷 🇩🇪 🇨🇳 🇺🇸 🇫🇷 🇪🇸 🇮🇹 🇷🇺 🇬🇧
35
+ [<img src="https://img.shields.io/badge/-Facebook-424549?style=social&logo=facebook" height=25 />](https://www.facebook.com/Tolgee.i18n)
36
+ [<img src="https://img.shields.io/badge/-Twitter-424549?style=social&logo=twitter" height=25 />](https://twitter.com/Tolgee_i18n)
37
+ [<img src="https://img.shields.io/badge/-Linkedin-424549?style=social&logo=linkedin" height=25 />](https://www.linkedin.com/company/tolgee)
15
38
 
16
- ## Features
39
+ **Become part of the family. Join [slack channel <img src="https://img.shields.io/badge/-Tolgee Comunity-424549?style=social&logo=slack" height=25 />](https://join.slack.com/t/tolgeecommunity/shared_invite/zt-195isb5u8-_RcSRgVJfvgsPpOBIok~IQ)**
17
40
 
18
- - All in One localization solution for your JS application 🙌
19
- - Out of box in-context localization 🎉
20
- - Automated screenshot generation 📷
21
- - Translation management platform 🎈
22
- - Open-source 🔥
41
+ </div>
23
42
 
24
- ## Installation
25
43
 
26
- First, install the package.
27
44
 
28
- npm install @tolgee/ngx --save
45
+ # What's Tolgee for Angular?
46
+ Angular integration library of Tolgee. With this package. It's super simple to add i18n to your Angular app!
47
+ For more information about using Tolgee with Angular, visit the [docs 📖](https://tolgee.io/integrations/angular).
29
48
 
30
- Then import `NgxTolgeeModule` in your app.
31
49
 
32
- ```typescript
33
- import { NgxTolgeeModule } from "@tolgee/ngx";
34
- import { NgModule } from '@angular/core';
35
- import { environment } from '../environments/environment';
50
+ ## Quick links
51
+ - [Tolgee for Angular docs](https://tolgee.io/js-sdk/5.0.0-alpha.1/integrations/angular/installation)
52
+ - [Tolgee JS SDK docs](https://tolgee.io/js-sdk)
53
+ - [Tolgee Website](https://tolgee.io)
54
+ - Product (Learn more about the great features)
55
+ - [Dev tools](https://tolgee.io/features/dev-tools)
56
+ - [Translation assistance](https://tolgee.io/features/translation-assistance)
57
+ - [Collaboration](https://tolgee.io/features/collaboration)
58
+ - [Tolgee platform docs](https://tolgee.io/platform)
59
+
60
+
36
61
 
62
+ ## Installation
63
+
64
+ ```
65
+ npm install @tolgee/ngx
66
+ ```
37
67
 
68
+
69
+ Then use the library in your `app.module.ts`. You have to add `NgxTolgeeModule` to your imports section and
70
+ add factory provider for `TOLGEE_INSTANCE` token returning your Tolgee instance.
71
+
72
+ ```typescript
73
+ ...
74
+ import {
75
+ DevTools,
76
+ NgxTolgeeModule,
77
+ Tolgee,
78
+ TOLGEE_INSTANCE,
79
+ FormatSimple
80
+ } from '@tolgee/ngx';
81
+ ...
38
82
  @NgModule({
39
83
  declarations: [
40
84
  ...
41
85
  ],
42
86
  imports: [
43
- ...,
44
- NgxTolgeeModule.forRoot({
45
- apiUrl: environment.tolgeeApiUrl,
46
- apiKey: environment.tolgeeApiKey,
47
- ui:
48
- process.env.NODE_ENV === 'development'
49
- ? require('@tolgee/ui')
50
- : undefined,
51
- }),
52
- ...,
53
- ],
54
- ...,
87
+ NgxTolgeeModule,
88
+ ...
89
+ ],
90
+ providers: [
91
+ {
92
+ provide: TOLGEE_INSTANCE,
93
+ useFactory: () => {
94
+ return Tolgee()
95
+ .use(DevTools())
96
+ .use(FormatSimple())
97
+ .init({
98
+ language: 'en'
99
+
100
+ // for development
101
+ apiUrl: environment.tolgeeApiUrl,
102
+ apiKey: environment.tolgeeApiKey,
103
+
104
+ // for production
105
+ staticData: {
106
+ ...
107
+ }
108
+ });
109
+ },
110
+ },
111
+ ],
112
+ bootstrap: [AppComponent],
55
113
  })
56
-
57
- export class AppModule {
58
- }
114
+ export class AppModule {}
59
115
  ```
60
116
 
61
117
  ## Usage
118
+ Translating using pipe:
119
+ ```html
120
+ <h1>{{&#39;hello_world&#39; | translate}}</h1>
121
+ ```
62
122
 
63
- ![ngx-example-infinite](https://user-images.githubusercontent.com/18496315/137347353-9622c944-d021-4f02-a629-b411bc744c36.gif)
123
+ Or using t attribute
124
+ ```html
125
+ <h1 t key="providing_default_values"></h1>
126
+ ```
127
+
128
+
129
+ ## Prerequisites
64
130
 
65
- ### Using pipe
131
+ 1. You have some Angular-based project
132
+ 2. You have generated an API key from [Tolgee Cloud](https://app.tolgee.io) or a self-hosted Tolgee instance.
133
+
66
134
 
67
- ```angular2html
68
- <h1>{{'hello_world' | translate}}</h1>
135
+
136
+ ## Why to use Tolgee?
137
+ Because it saves a lot of time, you would spend on localization tasks without it. Because it enables you to provide perfectly translated software.
138
+
139
+ ### Features
140
+
141
+ - All-in-one localization solution for your JS application 🙌
142
+ - Out-of-box in-context localization 🎉
143
+ - Automated screenshot generation 📷
144
+ - Translation management platform 🎈
145
+ - Open-source 🔥
146
+
147
+ ![Frame 47](https://user-images.githubusercontent.com/18496315/188637819-ac4eb02d-7859-4ca8-9807-27818a52782d.png)
148
+ Read more on the [Tolgee website](https://tolgee.io)
149
+
150
+
151
+ ## Development
152
+
153
+ We welcome your PRs.
154
+
155
+ To develop the package locally:
156
+ 1. Clone [the repository](https://github.com/tolgee/tolgee-js)
157
+ 1. Install the packages in the repository root
158
+ ```
159
+ pnpm install
69
160
  ```
70
161
 
71
- ### Using translateService
72
162
 
73
- ```ts
74
- this.translateService
75
- .get('hello_world')
76
- .subscribe((r) => (this.helloWorld = r));
163
+ 1. Run the development script
77
164
  ```
165
+ pnpm develop:ngx
166
+ ```
167
+ This runs the development suite of this monorepo for the `ngx` integration. The changes in each dependency package are
168
+ automatically built and propagated to the test application, which you can open and play within the browser.
78
169
 
79
- ### Element with t attribute
80
170
 
81
- ```html
82
- <h1 t key="providing_default_values"></h1>
83
- <p t key="Peter has n dogs" [params]="params"></p>
171
+
172
+
173
+ ### Testing
174
+
175
+ To run Jest tests of this package, execute
176
+ ```
177
+ npm run test
84
178
  ```
179
+ In the `/packages/ngx` directory.
180
+
181
+
182
+
183
+
184
+ ### End-to-end (e2e) testing
185
+ To run the e2e tests, simply execute
186
+ ```
187
+ pnpm run e2e run ngx
188
+ ```
189
+
190
+ To open and play with e2e tests, run:
191
+ ```
192
+ pnpm run e2e open ngx
193
+ ```
194
+
85
195
 
86
- ## Prerequisites
87
196
 
88
- 1. You have some Angular based project
89
- 2. You have generated API key from [Tolgee Cloud](https://app.tolgee.io) or self-hosted Tolgee instance.
197
+ ## Contributors
90
198
 
91
- ## Quick integration guide
199
+ <a href="https://github.com/tolgee/tolgee-platform/graphs/contributors">
200
+ <img alt="contributors" src="https://contrib.rocks/image?repo=tolgee/tolgee-js"/>
201
+ </a>
92
202
 
93
- ![Integrate](https://user-images.githubusercontent.com/18496315/137345763-c318df07-2de0-4c35-a28d-bf1e93b42997.gif)
94
- Learn more at our [documentation website 📖](https://tolgee.io).
@@ -4,17 +4,9 @@ import { getTranslateProps, } from '@tolgee/web';
4
4
  import { TOLGEE_INSTANCE } from './tolgee-instance-token';
5
5
  import * as i0 from "@angular/core";
6
6
  export class TranslateService {
7
- constructor(_tolgee) {
7
+ constructor(_tolgee, _ngZone) {
8
8
  this._tolgee = _tolgee;
9
- /**
10
- * Instantly returns translated value. May return undefined or outdated value.
11
- * Use only when you cannot use translate.
12
- */
13
- this.instant = (...args) => {
14
- // @ts-ignore
15
- const params = getTranslateProps(...args);
16
- return this.tolgee.t(params);
17
- };
9
+ this._ngZone = _ngZone;
18
10
  /**
19
11
  * Returns translation asynchronously, this method always return
20
12
  */
@@ -39,29 +31,33 @@ export class TranslateService {
39
31
  };
40
32
  });
41
33
  };
34
+ /**
35
+ * Instantly returns translated value. May return undefined or outdated value.
36
+ * Use only when you cannot use translate.
37
+ */
38
+ this.instant = (...args) => {
39
+ // @ts-ignore
40
+ const params = getTranslateProps(...args);
41
+ return this.tolgee.t(params);
42
+ };
42
43
  }
43
44
  get tolgee() {
44
45
  return this._tolgee;
45
46
  }
46
47
  /**
47
- * Starts Tolgee if not started and subscribes for languageChange and translationChange events
48
+ * Starts Tolgee if not started.
49
+ *
50
+ * The Tolgee is run outside NgZone. The triggered events, doesn't
51
+ * trigger the change detection, when listening directly via Tolgee.on.
52
+ *
53
+ * However, all the emitting methods (on, translate, languageAsync)
54
+ * in this class are emitting back in Angular's NgZone,
55
+ * so the change detection works fine.
48
56
  */
49
57
  async start() {
50
- if (!this.runPromise) {
51
- this.runPromise = this.tolgee.run();
58
+ if (!this.isSSR()) {
59
+ await this.runIfNotRunning();
52
60
  }
53
- await this.runPromise;
54
- }
55
- ngOnDestroy() {
56
- this.tolgee.stop();
57
- }
58
- on(event) {
59
- return new Observable((subscriber) => {
60
- const subscription = this.tolgee.on(event, (value) => {
61
- subscriber.next(value);
62
- });
63
- return () => subscription.unsubscribe();
64
- });
65
61
  }
66
62
  /**
67
63
  * Returns current language
@@ -91,8 +87,40 @@ export class TranslateService {
91
87
  changeLanguage(lang) {
92
88
  return this.tolgee.changeLanguage(lang);
93
89
  }
90
+ /**
91
+ * Returns observable emitting when specified event is triggered.
92
+ *
93
+ * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,
94
+ * so change detection should work properly.
95
+ *
96
+ * @param event the event to listen
97
+ */
98
+ on(event) {
99
+ return new Observable((subscriber) => {
100
+ const subscription = this.tolgee.on(event, (value) => {
101
+ this._ngZone.run(() => {
102
+ subscriber.next(value);
103
+ });
104
+ });
105
+ return () => subscription.unsubscribe();
106
+ });
107
+ }
108
+ ngOnDestroy() {
109
+ this.tolgee.stop();
110
+ }
111
+ async runIfNotRunning() {
112
+ if (!this.runPromise) {
113
+ this.runPromise = this._ngZone.runOutsideAngular(() => {
114
+ return this.tolgee.run();
115
+ });
116
+ }
117
+ await this.runPromise;
118
+ }
119
+ isSSR() {
120
+ return typeof window === 'undefined';
121
+ }
94
122
  }
95
- TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE)); };
123
+ TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE), i0.ɵɵinject(i0.NgZone)); };
96
124
  TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac, providedIn: 'root' });
97
125
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateService, [{
98
126
  type: Injectable,
@@ -100,5 +128,5 @@ TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Transla
100
128
  }], function () { return [{ type: undefined, decorators: [{
101
129
  type: Inject,
102
130
  args: [TOLGEE_INSTANCE]
103
- }] }]; }, null); })();
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG9sZ2VlL3NyYy9saWIvdHJhbnNsYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBR0wsaUJBQWlCLEdBSWxCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFHMUQsTUFBTSxPQUFPLGdCQUFnQjtJQUczQixZQUE2QyxPQUF1QjtRQUF2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQStEcEU7OztXQUdHO1FBQ2EsWUFBTyxHQUFZLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM3QyxhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQztRQUVGOztXQUVHO1FBQ00sY0FBUyxHQUFrRCxDQUNsRSxHQUFHLElBQUksRUFDUCxFQUFFO1lBQ0YsYUFBYTtZQUNiLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUMsT0FBTyxJQUFJLFVBQVUsQ0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSSxFQUFFO29CQUMzQixNQUFNLFdBQVcsQ0FBQztvQkFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQztnQkFFRix3Q0FBd0M7Z0JBQ3hDLFNBQVMsRUFBRSxDQUFDO2dCQUVaLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNO3FCQUM3QixVQUFVLENBQUMsU0FBUyxDQUFDO3FCQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUUxQixPQUFPLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFyR3FFLENBQUM7SUFFeEUsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNyQztRQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELEVBQUUsQ0FBZ0MsS0FBWTtRQUM1QyxPQUFPLElBQUksVUFBVSxDQUNuQixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ25ELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBWSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsSUFBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7O2dGQWhFVSxnQkFBZ0IsY0FHUCxlQUFlO3NFQUh4QixnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQURILE1BQU07dUZBQ25CLGdCQUFnQjtjQUQ1QixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFJbkIsTUFBTTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERlZmF1bHRQYXJhbVR5cGUsXG4gIEV2ZW50VHlwZSxcbiAgZ2V0VHJhbnNsYXRlUHJvcHMsXG4gIExpc3RlbmVyRXZlbnQsXG4gIFRGblR5cGUsXG4gIFRvbGdlZUluc3RhbmNlLFxufSBmcm9tICdAdG9sZ2VlL3dlYic7XG5pbXBvcnQgeyBUT0xHRUVfSU5TVEFOQ0UgfSBmcm9tICcuL3RvbGdlZS1pbnN0YW5jZS10b2tlbic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcnVuUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRPTEdFRV9JTlNUQU5DRSkgcHJpdmF0ZSBfdG9sZ2VlOiBUb2xnZWVJbnN0YW5jZSkge31cblxuICBnZXQgdG9sZ2VlKCkge1xuICAgIHJldHVybiB0aGlzLl90b2xnZWU7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIFRvbGdlZSBpZiBub3Qgc3RhcnRlZCBhbmQgc3Vic2NyaWJlcyBmb3IgbGFuZ3VhZ2VDaGFuZ2UgYW5kIHRyYW5zbGF0aW9uQ2hhbmdlIGV2ZW50c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5ydW5Qcm9taXNlKSB7XG4gICAgICB0aGlzLnJ1blByb21pc2UgPSB0aGlzLnRvbGdlZS5ydW4oKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5ydW5Qcm9taXNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50b2xnZWUuc3RvcCgpO1xuICB9XG5cbiAgb248RXZlbnQgZXh0ZW5kcyBrZXlvZiBFdmVudFR5cGU+KGV2ZW50OiBFdmVudCkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxMaXN0ZW5lckV2ZW50PEV2ZW50VHlwZVtFdmVudF0+PihcbiAgICAgIChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudG9sZ2VlLm9uKGV2ZW50LCAodmFsdWUpID0+IHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUgYXMgYW55KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBsYW5ndWFnZVxuICAgKi9cbiAgZ2V0IGxhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9sZ2VlLmdldExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIGVtaXR0aW5nIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAqIEl0IGluc3RhbnRseSBlbWl0cyBjdXJyZW50IGxhbmd1YWdlXG4gICAqL1xuICBnZXQgbGFuZ3VhZ2VBc3luYygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMudG9sZ2VlLmdldExhbmd1YWdlKCkpO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5vbignbGFuZ3VhZ2UnKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZS52YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICogQHBhcmFtIGxhbmcgVGhlIG5ldyBjdXJyZW50IGxhbmd1YWdlIChlLmcuIGVuLCBlbi1VUylcbiAgICogQHJldHVybiBQcm9taXNlPHZvaWQ+IFJlc29sdmVzIHdoZW4gdHJhbnNsYXRpb25zXG4gICAqIGZvciBnaXZlbiBsYW5ndWFnZSBhcmUgbG9hZGVkXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlTGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudG9sZ2VlLmNoYW5nZUxhbmd1YWdlKGxhbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbnRseSByZXR1cm5zIHRyYW5zbGF0ZWQgdmFsdWUuIE1heSByZXR1cm4gdW5kZWZpbmVkIG9yIG91dGRhdGVkIHZhbHVlLlxuICAgKiBVc2Ugb25seSB3aGVuIHlvdSBjYW5ub3QgdXNlIHRyYW5zbGF0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW50OiBURm5UeXBlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgcGFyYW1zID0gZ2V0VHJhbnNsYXRlUHJvcHMoLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMudG9sZ2VlLnQocGFyYW1zKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0cmFuc2xhdGlvbiBhc3luY2hyb25vdXNseSwgdGhpcyBtZXRob2QgYWx3YXlzIHJldHVyblxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNsYXRlOiBURm5UeXBlPERlZmF1bHRQYXJhbVR5cGUsIE9ic2VydmFibGU8c3RyaW5nPj4gPSAoXG4gICAgLi4uYXJnc1xuICApID0+IHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgcGFyYW1zID0gZ2V0VHJhbnNsYXRlUHJvcHMoLi4uYXJncyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IGxvYWRQcm9taXNlID0gdGhpcy50b2xnZWUuYWRkQWN0aXZlTnMocGFyYW1zLm5zKTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgbG9hZFByb21pc2U7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnRvbGdlZS50KHBhcmFtcyk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh0cmFuc2xhdGVkKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICAgIHRyYW5zbGF0ZSgpO1xuXG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnRvbGdlZVxuICAgICAgICAub25Oc1VwZGF0ZSh0cmFuc2xhdGUpXG4gICAgICAgIC5zdWJzY3JpYmVOcyhwYXJhbXMubnMpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aGlzLnRvbGdlZS5yZW1vdmVBY3RpdmVOcyhwYXJhbXMubnMpO1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
131
+ }] }, { type: i0.NgZone }]; }, null); })();
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG9sZ2VlL3NyYy9saWIvdHJhbnNsYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUdMLGlCQUFpQixHQUlsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRzFELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFDbUMsT0FBdUIsRUFDaEQsT0FBZTtRQURVLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ2hELFlBQU8sR0FBUCxPQUFPLENBQVE7UUF1QnpCOztXQUVHO1FBQ00sY0FBUyxHQUFrRCxDQUNsRSxHQUFHLElBQUksRUFDUCxFQUFFO1lBQ0YsYUFBYTtZQUNiLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUMsT0FBTyxJQUFJLFVBQVUsQ0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sU0FBUyxHQUFHLEtBQUssSUFBSSxFQUFFO29CQUMzQixNQUFNLFdBQVcsQ0FBQztvQkFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQztnQkFFRix3Q0FBd0M7Z0JBQ3hDLFNBQVMsRUFBRSxDQUFD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QUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxLQUFLO1FBQ1gsT0FBTyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUM7SUFDdkMsQ0FBQzs7Z0ZBdElVLGdCQUFnQixjQUlqQixlQUFlO3NFQUpkLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBREgsTUFBTTt1RkFDbkIsZ0JBQWdCO2NBRDVCLFVBQVU7ZUFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O3NCQUs3QixNQUFNO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBEZWZhdWx0UGFyYW1UeXBlLFxuICBFdmVudFR5cGUsXG4gIGdldFRyYW5zbGF0ZVByb3BzLFxuICBMaXN0ZW5lckV2ZW50LFxuICBURm5UeXBlLFxuICBUb2xnZWVJbnN0YW5jZSxcbn0gZnJvbSAnQHRvbGdlZS93ZWInO1xuaW1wb3J0IHsgVE9MR0VFX0lOU1RBTkNFIH0gZnJvbSAnLi90b2xnZWUtaW5zdGFuY2UtdG9rZW4nO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJ1blByb21pc2U6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUT0xHRUVfSU5TVEFOQ0UpIHByaXZhdGUgX3RvbGdlZTogVG9sZ2VlSW5zdGFuY2UsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIGdldCB0b2xnZWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RvbGdlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgVG9sZ2VlIGlmIG5vdCBzdGFydGVkLlxuICAgKlxuICAgKiBUaGUgVG9sZ2VlIGlzIHJ1biBvdXRzaWRlIE5nWm9uZS4gVGhlIHRyaWdnZXJlZCBldmVudHMsIGRvZXNuJ3RcbiAgICogdHJpZ2dlciB0aGUgY2hhbmdlIGRldGVjdGlvbiwgd2hlbiBsaXN0ZW5pbmcgZGlyZWN0bHkgdmlhIFRvbGdlZS5vbi5cbiAgICpcbiAgICogSG93ZXZlciwgYWxsIHRoZSBlbWl0dGluZyBtZXRob2RzIChvbiwgdHJhbnNsYXRlLCBsYW5ndWFnZUFzeW5jKVxuICAgKiBpbiB0aGlzIGNsYXNzIGFyZSBlbWl0dGluZyBiYWNrIGluIEFuZ3VsYXIncyBOZ1pvbmUsXG4gICAqIHNvIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHdvcmtzIGZpbmUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzU1NSKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuSWZOb3RSdW5uaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJhbnNsYXRpb24gYXN5bmNocm9ub3VzbHksIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zbGF0ZTogVEZuVHlwZTxEZWZhdWx0UGFyYW1UeXBlLCBPYnNlcnZhYmxlPHN0cmluZz4+ID0gKFxuICAgIC4uLmFyZ3NcbiAgKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHBhcmFtcyA9IGdldFRyYW5zbGF0ZVByb3BzKC4uLmFyZ3MpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMudG9sZ2VlLmFkZEFjdGl2ZU5zKHBhcmFtcy5ucyk7XG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGxvYWRQcm9taXNlO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50b2xnZWUudChwYXJhbXMpO1xuICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJhbnNsYXRlZCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBub2luc3BlY3Rpb24gSlNJZ25vcmVkUHJvbWlzZUZyb21DYWxsXG4gICAgICB0cmFuc2xhdGUoKTtcblxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy50b2xnZWVcbiAgICAgICAgLm9uTnNVcGRhdGUodHJhbnNsYXRlKVxuICAgICAgICAuc3Vic2NyaWJlTnMocGFyYW1zLm5zKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGhpcy50b2xnZWUucmVtb3ZlQWN0aXZlTnMocGFyYW1zLm5zKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbnN0YW50bHkgcmV0dXJucyB0cmFuc2xhdGVkIHZhbHVlLiBNYXkgcmV0dXJuIHVuZGVmaW5lZCBvciBvdXRkYXRlZCB2YWx1ZS5cbiAgICogVXNlIG9ubHkgd2hlbiB5b3UgY2Fubm90IHVzZSB0cmFuc2xhdGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFudDogVEZuVHlwZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHBhcmFtcyA9IGdldFRyYW5zbGF0ZVByb3BzKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLnRvbGdlZS50KHBhcmFtcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBsYW5ndWFnZVxuICAgKi9cbiAgZ2V0IGxhbmd1YWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9sZ2VlLmdldExhbmd1YWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIGVtaXR0aW5nIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAqIEl0IGluc3RhbnRseSBlbWl0cyBjdXJyZW50IGxhbmd1YWdlXG4gICAqL1xuICBnZXQgbGFuZ3VhZ2VBc3luYygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMudG9sZ2VlLmdldExhbmd1YWdlKCkpO1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5vbignbGFuZ3VhZ2UnKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZS52YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICogQHBhcmFtIGxhbmcgVGhlIG5ldyBjdXJyZW50IGxhbmd1YWdlIChlLmcuIGVuLCBlbi1VUylcbiAgICogQHJldHVybiBQcm9taXNlPHZvaWQ+IFJlc29sdmVzIHdoZW4gdHJhbnNsYXRpb25zXG4gICAqIGZvciBnaXZlbiBsYW5ndWFnZSBhcmUgbG9hZGVkXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlTGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudG9sZ2VlLmNoYW5nZUxhbmd1YWdlKGxhbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgb2JzZXJ2YWJsZSBlbWl0dGluZyB3aGVuIHNwZWNpZmllZCBldmVudCBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEl0J3MgYSB3cmFwcGVyIG9mIFRvbGdlZS5vbiBtZXRob2QuIFRoZSBlbW1pdCBpcyB0cmlnZ2VyZWQgaW5zaWRlIG5nWm9uZSxcbiAgICogc28gY2hhbmdlIGRldGVjdGlvbiBzaG91bGQgd29yayBwcm9wZXJseS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBsaXN0ZW5cbiAgICovXG4gIG9uPEV2ZW50IGV4dGVuZHMga2V5b2YgRXZlbnRUeXBlPihldmVudDogRXZlbnQpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8TGlzdGVuZXJFdmVudDxFdmVudFR5cGVbRXZlbnRdPj4oKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudG9sZ2VlLm9uKGV2ZW50LCAodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlIGFzIGFueSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvbGdlZS5zdG9wKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1bklmTm90UnVubmluZygpIHtcbiAgICBpZiAoIXRoaXMucnVuUHJvbWlzZSkge1xuICAgICAgdGhpcy5ydW5Qcm9taXNlID0gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9sZ2VlLnJ1bigpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucnVuUHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTU1IoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnO1xuICB9XG59XG4iXX0=
@@ -4,9 +4,8 @@
4
4
  export * from './lib/translate.service';
5
5
  export * from './lib/translate.pipe';
6
6
  export * from './lib/t.component';
7
- export * from './lib/NgxPlugin';
8
7
  export * from './lib/ngx-tolgee.module';
9
8
  export * from './lib/tolgee-instance-token';
10
9
  export * from '@tolgee/web';
11
10
  export * from './lib/namespace.resolver';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC10b2xnZWUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtdG9sZ2VlXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RyYW5zbGF0ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL05neFBsdWdpbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC10b2xnZWUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGdlZS1pbnN0YW5jZS10b2tlbic7XG5cbmV4cG9ydCAqIGZyb20gJ0B0b2xnZWUvd2ViJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25hbWVzcGFjZS5yZXNvbHZlcic7XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC10b2xnZWUvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXRvbGdlZVxuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFuc2xhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90cmFuc2xhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90LmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL25neC10b2xnZWUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGdlZS1pbnN0YW5jZS10b2tlbic7XG5cbmV4cG9ydCAqIGZyb20gJ0B0b2xnZWUvd2ViJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25hbWVzcGFjZS5yZXNvbHZlcic7XG4iXX0=
@@ -2,23 +2,15 @@ import { __awaiter } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
3
  import { InjectionToken, Injectable, Inject, Pipe, Component, Input, APP_INITIALIZER, NgModule } from '@angular/core';
4
4
  import { Observable } from 'rxjs';
5
- import { getTranslateProps, DevTools } from '@tolgee/web';
5
+ import { getTranslateProps } from '@tolgee/web';
6
6
  export * from '@tolgee/web';
7
7
 
8
8
  const TOLGEE_INSTANCE = new InjectionToken('tolgee.instance');
9
9
 
10
10
  class TranslateService {
11
- constructor(_tolgee) {
11
+ constructor(_tolgee, _ngZone) {
12
12
  this._tolgee = _tolgee;
13
- /**
14
- * Instantly returns translated value. May return undefined or outdated value.
15
- * Use only when you cannot use translate.
16
- */
17
- this.instant = (...args) => {
18
- // @ts-ignore
19
- const params = getTranslateProps(...args);
20
- return this.tolgee.t(params);
21
- };
13
+ this._ngZone = _ngZone;
22
14
  /**
23
15
  * Returns translation asynchronously, this method always return
24
16
  */
@@ -43,30 +35,34 @@ class TranslateService {
43
35
  };
44
36
  });
45
37
  };
38
+ /**
39
+ * Instantly returns translated value. May return undefined or outdated value.
40
+ * Use only when you cannot use translate.
41
+ */
42
+ this.instant = (...args) => {
43
+ // @ts-ignore
44
+ const params = getTranslateProps(...args);
45
+ return this.tolgee.t(params);
46
+ };
46
47
  }
47
48
  get tolgee() {
48
49
  return this._tolgee;
49
50
  }
50
51
  /**
51
- * Starts Tolgee if not started and subscribes for languageChange and translationChange events
52
+ * Starts Tolgee if not started.
53
+ *
54
+ * The Tolgee is run outside NgZone. The triggered events, doesn't
55
+ * trigger the change detection, when listening directly via Tolgee.on.
56
+ *
57
+ * However, all the emitting methods (on, translate, languageAsync)
58
+ * in this class are emitting back in Angular's NgZone,
59
+ * so the change detection works fine.
52
60
  */
53
61
  start() {
54
62
  return __awaiter(this, void 0, void 0, function* () {
55
- if (!this.runPromise) {
56
- this.runPromise = this.tolgee.run();
63
+ if (!this.isSSR()) {
64
+ yield this.runIfNotRunning();
57
65
  }
58
- yield this.runPromise;
59
- });
60
- }
61
- ngOnDestroy() {
62
- this.tolgee.stop();
63
- }
64
- on(event) {
65
- return new Observable((subscriber) => {
66
- const subscription = this.tolgee.on(event, (value) => {
67
- subscriber.next(value);
68
- });
69
- return () => subscription.unsubscribe();
70
66
  });
71
67
  }
72
68
  /**
@@ -97,8 +93,42 @@ class TranslateService {
97
93
  changeLanguage(lang) {
98
94
  return this.tolgee.changeLanguage(lang);
99
95
  }
96
+ /**
97
+ * Returns observable emitting when specified event is triggered.
98
+ *
99
+ * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,
100
+ * so change detection should work properly.
101
+ *
102
+ * @param event the event to listen
103
+ */
104
+ on(event) {
105
+ return new Observable((subscriber) => {
106
+ const subscription = this.tolgee.on(event, (value) => {
107
+ this._ngZone.run(() => {
108
+ subscriber.next(value);
109
+ });
110
+ });
111
+ return () => subscription.unsubscribe();
112
+ });
113
+ }
114
+ ngOnDestroy() {
115
+ this.tolgee.stop();
116
+ }
117
+ runIfNotRunning() {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ if (!this.runPromise) {
120
+ this.runPromise = this._ngZone.runOutsideAngular(() => {
121
+ return this.tolgee.run();
122
+ });
123
+ }
124
+ yield this.runPromise;
125
+ });
126
+ }
127
+ isSSR() {
128
+ return typeof window === 'undefined';
129
+ }
100
130
  }
101
- TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE)); };
131
+ TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE), i0.ɵɵinject(i0.NgZone)); };
102
132
  TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac, providedIn: 'root' });
103
133
  (function () {
104
134
  (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateService, [{
@@ -108,7 +138,7 @@ TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Transla
108
138
  return [{ type: undefined, decorators: [{
109
139
  type: Inject,
110
140
  args: [TOLGEE_INSTANCE]
111
- }] }];
141
+ }] }, { type: i0.NgZone }];
112
142
  }, null);
113
143
  })();
114
144
 
@@ -253,11 +283,6 @@ TComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TComponent, sele
253
283
  }] });
254
284
  })();
255
285
 
256
- const NgxPlugin = () => (tolgee) => {
257
- tolgee.addPlugin(DevTools());
258
- return tolgee;
259
- };
260
-
261
286
  class LoaderComponent {
262
287
  }
263
288
  LoaderComponent.ɵfac = function LoaderComponent_Factory(t) { return new (t || LoaderComponent)(); };
@@ -354,5 +379,5 @@ NamespaceResolver.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Namesp
354
379
  * Generated bundle index. Do not edit.
355
380
  */
356
381
 
357
- export { NamespaceResolver, NgxPlugin, NgxTolgeeModule, TComponent, TOLGEE_INSTANCE, TranslatePipe, TranslateService };
382
+ export { NamespaceResolver, NgxTolgeeModule, TComponent, TOLGEE_INSTANCE, TranslatePipe, TranslateService };
358
383
  //# sourceMappingURL=tolgee-ngx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/NgxPlugin.ts","../../../projects/ngx-tolgee/src/lib/loader.component.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<TolgeeInstance>(\n 'tolgee.instance'\n);\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n\n constructor(@Inject(TOLGEE_INSTANCE) private _tolgee: TolgeeInstance) {}\n\n get tolgee() {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started and subscribes for languageChange and translationChange events\n */\n public async start(): Promise<void> {\n if (!this.runPromise) {\n this.runPromise = this.tolgee.run();\n }\n await this.runPromise;\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n }\n\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<EventType[Event]>>(\n (subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n subscriber.next(value as any);\n });\n return () => subscription.unsubscribe();\n }\n );\n }\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Instantly returns translated value. May return undefined or outdated value.\n * Use only when you cannot use translate.\n */\n public readonly instant: TFnType = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns translation asynchronously, this method always return\n */\n readonly translate: TFnType<DefaultParamType, Observable<string>> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n subscriber.next(translated);\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee\n .onNsUpdate(translate)\n .subscribeNs(params.ns);\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n };\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport { getTranslateProps, TFnType, TranslateProps } from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n readonly transform: TFnType<string> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n const { key } = params;\n\n if (!key || key.length === 0) {\n return key;\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n };\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n return this.translateService.translate(props).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams } from '@tolgee/web';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy, OnChanges {\n @Input() key: string;\n @Input() ns: string;\n @Input() params?: TranslateParams<any>;\n @Input() default?: string;\n @Input() noWrap?: boolean = false;\n\n /**\n * When true, innerHTML property of element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n @Input() isHtml?: boolean = false;\n\n private subscription: Subscription;\n private initialized: boolean;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n this.renderInstantValue();\n }\n\n ngOnChanges(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n private renderInstantValue() {\n // get initial value first\n const translated = this.translateService.instant({\n ...this.getTranslateProps(),\n orEmpty: true,\n });\n this.setElementContent(translated);\n }\n\n private getTranslateProps() {\n return {\n key: this.key,\n ns: this.ns,\n params: this.params,\n defaultValue: this.default,\n noWrap: this.noWrap,\n };\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private async subscribe() {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(this.getTranslateProps())\n .subscribe((translated) => {\n this.setElementContent(translated);\n this.initialized = true;\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml) {\n this.getElement().innerHTML = translated;\n return;\n }\n this.getElement().textContent = translated;\n }\n\n private getElement() {\n return this.ref.nativeElement as HTMLElement;\n }\n}\n","import { TolgeePlugin, DevTools } from '@tolgee/web';\n\nexport const NgxPlugin = (): TolgeePlugin => (tolgee) => {\n tolgee.addPlugin(DevTools());\n return tolgee;\n};\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"loader-template\" [innerHTML]=\"html\"></div>\n `,\n})\nexport class LoaderComponent {\n @Input() html: string | undefined;\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TComponent } from './t.component';\nimport { TranslateService } from './translate.service';\nimport { LoaderComponent } from \"./loader.component\";\n\n@NgModule({\n declarations: [TranslatePipe, TComponent, LoaderComponent],\n exports: [TranslatePipe, TComponent],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (service: TranslateService) => {\n return async () => await service.start();\n },\n deps: [TranslateService],\n multi: true,\n },\n ],\n})\nexport class NgxTolgeeModule {}\n","import {\n ActivatedRouteSnapshot,\n Resolve,\n} from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceResolver implements Resolve<void> {\n constructor(public service: TranslateService) {}\n\n async resolve(\n route: ActivatedRouteSnapshot,\n ): Promise<void> {\n const ns = this.getNamespace(route);\n await this.service.tolgee.addActiveNs(ns, true)\n }\n\n private getNamespace(route: ActivatedRouteSnapshot) {\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n 'No namespace provided. Please add tolgeeNamespace to your route data. \\n' +\n 'If you really want to lazy load default namespace set tolgeeNamespace to empty string'\n );\n }\n return namespace;\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.component';\nexport * from './lib/NgxPlugin';\n\nexport * from './lib/ngx-tolgee.module';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/loader.component.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<TolgeeInstance>(\n 'tolgee.instance'\n);\n","import { Inject, Injectable, OnDestroy, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n\n constructor(\n @Inject(TOLGEE_INSTANCE) private _tolgee: TolgeeInstance,\n private _ngZone: NgZone\n ) {}\n\n get tolgee() {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started.\n *\n * The Tolgee is run outside NgZone. The triggered events, doesn't\n * trigger the change detection, when listening directly via Tolgee.on.\n *\n * However, all the emitting methods (on, translate, languageAsync)\n * in this class are emitting back in Angular's NgZone,\n * so the change detection works fine.\n */\n public async start(): Promise<void> {\n if (!this.isSSR()) {\n await this.runIfNotRunning();\n }\n }\n\n /**\n * Returns translation asynchronously, this method always return\n */\n readonly translate: TFnType<DefaultParamType, Observable<string>> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n subscriber.next(translated);\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee\n .onNsUpdate(translate)\n .subscribeNs(params.ns);\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n };\n\n /**\n * Instantly returns translated value. May return undefined or outdated value.\n * Use only when you cannot use translate.\n */\n public readonly instant: TFnType = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Returns observable emitting when specified event is triggered.\n *\n * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,\n * so change detection should work properly.\n *\n * @param event the event to listen\n */\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<EventType[Event]>>((subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n this._ngZone.run(() => {\n subscriber.next(value as any);\n });\n });\n return () => subscription.unsubscribe();\n });\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n }\n\n private async runIfNotRunning() {\n if (!this.runPromise) {\n this.runPromise = this._ngZone.runOutsideAngular(() => {\n return this.tolgee.run();\n });\n }\n await this.runPromise;\n }\n\n private isSSR() {\n return typeof window === 'undefined';\n }\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport { getTranslateProps, TFnType, TranslateProps } from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n readonly transform: TFnType<string> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n const { key } = params;\n\n if (!key || key.length === 0) {\n return key;\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n };\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n return this.translateService.translate(props).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams } from '@tolgee/web';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy, OnChanges {\n @Input() key: string;\n @Input() ns: string;\n @Input() params?: TranslateParams<any>;\n @Input() default?: string;\n @Input() noWrap?: boolean = false;\n\n /**\n * When true, innerHTML property of element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n @Input() isHtml?: boolean = false;\n\n private subscription: Subscription;\n private initialized: boolean;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n this.renderInstantValue();\n }\n\n ngOnChanges(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n private renderInstantValue() {\n // get initial value first\n const translated = this.translateService.instant({\n ...this.getTranslateProps(),\n orEmpty: true,\n });\n this.setElementContent(translated);\n }\n\n private getTranslateProps() {\n return {\n key: this.key,\n ns: this.ns,\n params: this.params,\n defaultValue: this.default,\n noWrap: this.noWrap,\n };\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private async subscribe() {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(this.getTranslateProps())\n .subscribe((translated) => {\n this.setElementContent(translated);\n this.initialized = true;\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml) {\n this.getElement().innerHTML = translated;\n return;\n }\n this.getElement().textContent = translated;\n }\n\n private getElement() {\n return this.ref.nativeElement as HTMLElement;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"loader-template\" [innerHTML]=\"html\"></div>\n `,\n})\nexport class LoaderComponent {\n @Input() html: string | undefined;\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TComponent } from './t.component';\nimport { TranslateService } from './translate.service';\nimport { LoaderComponent } from \"./loader.component\";\n\n@NgModule({\n declarations: [TranslatePipe, TComponent, LoaderComponent],\n exports: [TranslatePipe, TComponent],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (service: TranslateService) => {\n return async () => await service.start();\n },\n deps: [TranslateService],\n multi: true,\n },\n ],\n})\nexport class NgxTolgeeModule {}\n","import {\n ActivatedRouteSnapshot,\n Resolve,\n} from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceResolver implements Resolve<void> {\n constructor(public service: TranslateService) {}\n\n async resolve(\n route: ActivatedRouteSnapshot,\n ): Promise<void> {\n const ns = this.getNamespace(route);\n await this.service.tolgee.addActiveNs(ns, true)\n }\n\n private getNamespace(route: ActivatedRouteSnapshot) {\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n 'No namespace provided. Please add tolgeeNamespace to your route data. \\n' +\n 'If you really want to lazy load default namespace set tolgeeNamespace to empty string'\n );\n }\n return namespace;\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.component';\n\nexport * from './lib/ngx-tolgee.module';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":";;;;;;;MAGa,eAAe,GAAG,IAAI,cAAc,CAC/C,iBAAiB;;MCSN,gBAAgB,CAAA;IAG3B,WACmC,CAAA,OAAuB,EAChD,OAAe,EAAA;AADU,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AAChD,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;AAuBzB;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAkD,CAClE,GAAG,IAAI,KACL;;AAEF,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C,YAAA,OAAO,IAAI,UAAU,CAAS,CAAC,UAAU,KAAI;AAC3C,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvD,MAAM,SAAS,GAAG,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AAC3B,oBAAA,MAAM,WAAW,CAAC;oBAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzC,oBAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9B,iBAAC,CAAA,CAAC;;AAGF,gBAAA,SAAS,EAAE,CAAC;AAEZ,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM;qBAC7B,UAAU,CAAC,SAAS,CAAC;AACrB,qBAAA,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE1B,gBAAA,OAAO,MAAK;oBACV,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtC,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,iBAAC,CAAC;AACJ,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AAEF;;;AAGG;AACa,QAAA,IAAA,CAAA,OAAO,GAAY,CAAC,GAAG,IAAI,KAAI;;AAE7C,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/B,SAAC,CAAC;KA5DE;AAEJ,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED;;;;;;;;;AASG;IACU,KAAK,GAAA;;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;AACjB,gBAAA,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;AAC9B,aAAA;SACF,CAAA,CAAA;AAAA,KAAA;AA0CD;;AAEG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;KAClC;AAED;;;AAGG;AACH,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAAU,KAAI;YACnC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3C,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC3D,gBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/B,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;KACJ;AAED;;;;;AAKG;AACI,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KACzC;AAED;;;;;;;AAOG;AACH,IAAA,EAAE,CAAgC,KAAY,EAAA;AAC5C,QAAA,OAAO,IAAI,UAAU,CAAkC,CAAC,UAAU,KAAI;AACpE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAI;AACnD,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,oBAAA,UAAU,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC;AAChC,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;IAEa,eAAe,GAAA;;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AACpD,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AAC3B,iBAAC,CAAC,CAAC;AACJ,aAAA;YACD,MAAM,IAAI,CAAC,UAAU,CAAC;SACvB,CAAA,CAAA;AAAA,KAAA;IAEO,KAAK,GAAA;AACX,QAAA,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;KACtC;;AAtIU,gBAAA,CAAA,IAAA,GAAA,SAAA,wBAAA,CAAA,CAAA,EAAA,EAAA,OAAA,KAAA,CAAA,IAAA,gBAAgB,cAIjB,eAAe,CAAA,EAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA;sEAJd,gBAAgB,EAAA,OAAA,EAAhB,gBAAgB,CAAA,IAAA,EAAA,UAAA,EADH,MAAM,EAAA,CAAA,CAAA;;4EACnB,gBAAgB,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;8BAK7B,MAAM;+BAAC,eAAe,CAAA;;;;;MCRd,aAAa,CAAA;AAMxB,IAAA,WAAA,CAAsB,gBAAkC,EAAA;AAAlC,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AALhD,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAWV,QAAA,IAAA,CAAA,SAAS,GAAoB,CAAC,GAAG,IAAI,KAAI;;AAEhD,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;YAEvB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;gBACjC,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,aAAA;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;AAE5B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAEvB,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,SAAC,CAAC;KAzB0D;IAE5D,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAuBO,IAAA,IAAI,CAAC,KAAqB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;KAC5E;IAEO,WAAW,GAAA;;AACjB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;KAClC;AAEO,IAAA,SAAS,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,KAAK,CAAE,EAAA,EAAA,OAAO,EAAE,IAAI,IAAG,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KACvB;AAEO,IAAA,SAAS,CAAC,KAAqB,EAAA;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC5D,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;KACJ;;0EAnDU,aAAa,EAAA,EAAA,CAAA,iBAAA,CAAAA,gBAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;+EAAb,aAAa,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;4EAAb,aAAa,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,IAAI,EAAE,KAAK;iBACZ,CAAA;;;;;MCQY,UAAU,CAAA;IAgBrB,WACU,CAAA,GAAe,EACf,gBAAkC,EAAA;AADlC,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAY;AACf,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAbnC,QAAA,IAAM,CAAA,MAAA,GAAa,KAAK,CAAC;AAElC;;;AAGG;AACM,QAAA,IAAM,CAAA,MAAA,GAAa,KAAK,CAAC;KAQ9B;IAEJ,QAAQ,GAAA;;QAEN,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,WAAW,GAAA;;QAET,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAEO,kBAAkB,GAAA;;AAExB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC3C,IAAI,CAAC,iBAAiB,EAAE,CAAA,EAAA,EAC3B,OAAO,EAAE,IAAI,IACb,CAAC;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;KACpC;IAEO,iBAAiB,GAAA;QACvB,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;IAEO,WAAW,GAAA;;AACjB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;KAClC;IAEa,SAAS,GAAA;;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB;AACtC,iBAAA,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnC,iBAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC1B,aAAC,CAAC,CAAC;SACN,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAC1C,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC;YACzC,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,GAAG,UAAU,CAAC;KAC5C;IAEO,UAAU,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAA4B,CAAC;KAC9C;;oEA/EU,UAAU,EAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,CAAA,iBAAA,CAAAA,gBAAA,CAAA,CAAA,CAAA,EAAA,CAAA;6DAAV,UAAU,EAAA,SAAA,EAAA,CAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAA,mBAAA,CAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,aAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4EAAV,UAAU,EAAA,CAAA;kBAJtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,CAAE,CAAA;iBACb,CAAA;6FAEU,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAMG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;;MCpBK,eAAe,CAAA;;8EAAf,eAAe,GAAA,CAAA,EAAA,CAAA;kEAAf,eAAe,EAAA,SAAA,EAAA,CAAA,CAAA,cAAA,CAAA,CAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,WAAA,CAAA,CAAA,EAAA,QAAA,EAAA,SAAA,wBAAA,CAAA,EAAA,EAAA,GAAA,EAAA;QAAA,IAAA,EAAA,GAAA,CAAA,EAAA;YAHxB,EAAsD,CAAA,SAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA,CAAA,CAAA;;;AAAzB,YAAA,EAAkB,CAAA,UAAA,CAAA,WAAA,EAAA,GAAA,CAAA,IAAA,EAAA,EAAA,CAAA,cAAA,CAAA,CAAA;;;;4EAGtC,eAAe,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;AAET,EAAA,CAAA;iBACF,CAAA;oBAEU,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;;MCYK,eAAe,CAAA;;8EAAf,eAAe,GAAA,CAAA,EAAA,CAAA;iEAAf,eAAe,EAAA,CAAA,CAAA;AAXf,eAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,SAAA,EAAA;AACT,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,CAAC,OAAyB,KAAI;gBACxC,OAAO,MAAW,SAAA,CAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA,EAAC,OAAA,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA,EAAA,CAAA,CAAC;aAC1C;YACD,IAAI,EAAE,CAAC,gBAAgB,CAAC;AACxB,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACF,KAAA,EAAA,CAAA,CAAA;;4EAEU,eAAe,EAAA,CAAA;kBAd3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;AACpC,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;AACxB,4BAAA,UAAU,EAAE,CAAC,OAAyB,KAAI;gCACxC,OAAO,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA,EAAC,OAAA,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA,EAAA,CAAA,CAAC;6BAC1C;4BACD,IAAI,EAAE,CAAC,gBAAgB,CAAC;AACxB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;iBACF,CAAA;;;wFACY,eAAe,EAAA,EAAA,YAAA,EAAA,CAbX,aAAa,EAAE,UAAU,EAAE,eAAe,CAAA,EAAA,OAAA,EAAA,CAC/C,aAAa,EAAE,UAAU,CAAA,EAAA,CAAA,CAAA,EAAA,GAAA;;MCAxB,iBAAiB,CAAA;AAC5B,IAAA,WAAA,CAAmB,OAAyB,EAAA;AAAzB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;KAAI;AAE1C,IAAA,OAAO,CACX,KAA6B,EAAA;;YAE7B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACpC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;SAChD,CAAA,CAAA;AAAA,KAAA;AAEO,IAAA,YAAY,CAAC,KAA6B,EAAA;;AAChD,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,eAAe,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO,CAAC,IAAI,CACV,0EAA0E;AACxE,gBAAA,uFAAuF,CAC1F,CAAC;AACH,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;;kFAnBU,iBAAiB,EAAA,EAAA,CAAA,QAAA,CAAAA,gBAAA,CAAA,CAAA,CAAA,EAAA,CAAA;uEAAjB,iBAAiB,EAAA,OAAA,EAAjB,iBAAiB,CAAA,IAAA,EAAA,UAAA,EADJ,MAAM,EAAA,CAAA,CAAA;;4EACnB,iBAAiB,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;;ACPlC;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,23 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, Pipe, Component, Input, APP_INITIALIZER, NgModule } from '@angular/core';
3
3
  import { Observable } from 'rxjs';
4
- import { getTranslateProps, DevTools } from '@tolgee/web';
4
+ import { getTranslateProps } from '@tolgee/web';
5
5
  export * from '@tolgee/web';
6
6
 
7
7
  const TOLGEE_INSTANCE = new InjectionToken('tolgee.instance');
8
8
 
9
9
  class TranslateService {
10
- constructor(_tolgee) {
10
+ constructor(_tolgee, _ngZone) {
11
11
  this._tolgee = _tolgee;
12
- /**
13
- * Instantly returns translated value. May return undefined or outdated value.
14
- * Use only when you cannot use translate.
15
- */
16
- this.instant = (...args) => {
17
- // @ts-ignore
18
- const params = getTranslateProps(...args);
19
- return this.tolgee.t(params);
20
- };
12
+ this._ngZone = _ngZone;
21
13
  /**
22
14
  * Returns translation asynchronously, this method always return
23
15
  */
@@ -42,29 +34,33 @@ class TranslateService {
42
34
  };
43
35
  });
44
36
  };
37
+ /**
38
+ * Instantly returns translated value. May return undefined or outdated value.
39
+ * Use only when you cannot use translate.
40
+ */
41
+ this.instant = (...args) => {
42
+ // @ts-ignore
43
+ const params = getTranslateProps(...args);
44
+ return this.tolgee.t(params);
45
+ };
45
46
  }
46
47
  get tolgee() {
47
48
  return this._tolgee;
48
49
  }
49
50
  /**
50
- * Starts Tolgee if not started and subscribes for languageChange and translationChange events
51
+ * Starts Tolgee if not started.
52
+ *
53
+ * The Tolgee is run outside NgZone. The triggered events, doesn't
54
+ * trigger the change detection, when listening directly via Tolgee.on.
55
+ *
56
+ * However, all the emitting methods (on, translate, languageAsync)
57
+ * in this class are emitting back in Angular's NgZone,
58
+ * so the change detection works fine.
51
59
  */
52
60
  async start() {
53
- if (!this.runPromise) {
54
- this.runPromise = this.tolgee.run();
61
+ if (!this.isSSR()) {
62
+ await this.runIfNotRunning();
55
63
  }
56
- await this.runPromise;
57
- }
58
- ngOnDestroy() {
59
- this.tolgee.stop();
60
- }
61
- on(event) {
62
- return new Observable((subscriber) => {
63
- const subscription = this.tolgee.on(event, (value) => {
64
- subscriber.next(value);
65
- });
66
- return () => subscription.unsubscribe();
67
- });
68
64
  }
69
65
  /**
70
66
  * Returns current language
@@ -94,8 +90,40 @@ class TranslateService {
94
90
  changeLanguage(lang) {
95
91
  return this.tolgee.changeLanguage(lang);
96
92
  }
93
+ /**
94
+ * Returns observable emitting when specified event is triggered.
95
+ *
96
+ * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,
97
+ * so change detection should work properly.
98
+ *
99
+ * @param event the event to listen
100
+ */
101
+ on(event) {
102
+ return new Observable((subscriber) => {
103
+ const subscription = this.tolgee.on(event, (value) => {
104
+ this._ngZone.run(() => {
105
+ subscriber.next(value);
106
+ });
107
+ });
108
+ return () => subscription.unsubscribe();
109
+ });
110
+ }
111
+ ngOnDestroy() {
112
+ this.tolgee.stop();
113
+ }
114
+ async runIfNotRunning() {
115
+ if (!this.runPromise) {
116
+ this.runPromise = this._ngZone.runOutsideAngular(() => {
117
+ return this.tolgee.run();
118
+ });
119
+ }
120
+ await this.runPromise;
121
+ }
122
+ isSSR() {
123
+ return typeof window === 'undefined';
124
+ }
97
125
  }
98
- TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE)); };
126
+ TranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(i0.ɵɵinject(TOLGEE_INSTANCE), i0.ɵɵinject(i0.NgZone)); };
99
127
  TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac, providedIn: 'root' });
100
128
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateService, [{
101
129
  type: Injectable,
@@ -103,7 +131,7 @@ TranslateService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Transla
103
131
  }], function () { return [{ type: undefined, decorators: [{
104
132
  type: Inject,
105
133
  args: [TOLGEE_INSTANCE]
106
- }] }]; }, null); })();
134
+ }] }, { type: i0.NgZone }]; }, null); })();
107
135
 
108
136
  class TranslatePipe {
109
137
  constructor(translateService) {
@@ -241,11 +269,6 @@ TComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TComponent, sele
241
269
  type: Input
242
270
  }] }); })();
243
271
 
244
- const NgxPlugin = () => (tolgee) => {
245
- tolgee.addPlugin(DevTools());
246
- return tolgee;
247
- };
248
-
249
272
  class LoaderComponent {
250
273
  }
251
274
  LoaderComponent.ɵfac = function LoaderComponent_Factory(t) { return new (t || LoaderComponent)(); };
@@ -330,5 +353,5 @@ NamespaceResolver.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: Namesp
330
353
  * Generated bundle index. Do not edit.
331
354
  */
332
355
 
333
- export { NamespaceResolver, NgxPlugin, NgxTolgeeModule, TComponent, TOLGEE_INSTANCE, TranslatePipe, TranslateService };
356
+ export { NamespaceResolver, NgxTolgeeModule, TComponent, TOLGEE_INSTANCE, TranslatePipe, TranslateService };
334
357
  //# sourceMappingURL=tolgee-ngx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/NgxPlugin.ts","../../../projects/ngx-tolgee/src/lib/loader.component.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<TolgeeInstance>(\n 'tolgee.instance'\n);\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n\n constructor(@Inject(TOLGEE_INSTANCE) private _tolgee: TolgeeInstance) {}\n\n get tolgee() {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started and subscribes for languageChange and translationChange events\n */\n public async start(): Promise<void> {\n if (!this.runPromise) {\n this.runPromise = this.tolgee.run();\n }\n await this.runPromise;\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n }\n\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<EventType[Event]>>(\n (subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n subscriber.next(value as any);\n });\n return () => subscription.unsubscribe();\n }\n );\n }\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Instantly returns translated value. May return undefined or outdated value.\n * Use only when you cannot use translate.\n */\n public readonly instant: TFnType = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns translation asynchronously, this method always return\n */\n readonly translate: TFnType<DefaultParamType, Observable<string>> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n subscriber.next(translated);\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee\n .onNsUpdate(translate)\n .subscribeNs(params.ns);\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n };\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport { getTranslateProps, TFnType, TranslateProps } from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n readonly transform: TFnType<string> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n const { key } = params;\n\n if (!key || key.length === 0) {\n return key;\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n };\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n return this.translateService.translate(props).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams } from '@tolgee/web';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy, OnChanges {\n @Input() key: string;\n @Input() ns: string;\n @Input() params?: TranslateParams<any>;\n @Input() default?: string;\n @Input() noWrap?: boolean = false;\n\n /**\n * When true, innerHTML property of element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n @Input() isHtml?: boolean = false;\n\n private subscription: Subscription;\n private initialized: boolean;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n this.renderInstantValue();\n }\n\n ngOnChanges(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n private renderInstantValue() {\n // get initial value first\n const translated = this.translateService.instant({\n ...this.getTranslateProps(),\n orEmpty: true,\n });\n this.setElementContent(translated);\n }\n\n private getTranslateProps() {\n return {\n key: this.key,\n ns: this.ns,\n params: this.params,\n defaultValue: this.default,\n noWrap: this.noWrap,\n };\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private async subscribe() {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(this.getTranslateProps())\n .subscribe((translated) => {\n this.setElementContent(translated);\n this.initialized = true;\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml) {\n this.getElement().innerHTML = translated;\n return;\n }\n this.getElement().textContent = translated;\n }\n\n private getElement() {\n return this.ref.nativeElement as HTMLElement;\n }\n}\n","import { TolgeePlugin, DevTools } from '@tolgee/web';\n\nexport const NgxPlugin = (): TolgeePlugin => (tolgee) => {\n tolgee.addPlugin(DevTools());\n return tolgee;\n};\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"loader-template\" [innerHTML]=\"html\"></div>\n `,\n})\nexport class LoaderComponent {\n @Input() html: string | undefined;\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TComponent } from './t.component';\nimport { TranslateService } from './translate.service';\nimport { LoaderComponent } from \"./loader.component\";\n\n@NgModule({\n declarations: [TranslatePipe, TComponent, LoaderComponent],\n exports: [TranslatePipe, TComponent],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (service: TranslateService) => {\n return async () => await service.start();\n },\n deps: [TranslateService],\n multi: true,\n },\n ],\n})\nexport class NgxTolgeeModule {}\n","import {\n ActivatedRouteSnapshot,\n Resolve,\n} from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceResolver implements Resolve<void> {\n constructor(public service: TranslateService) {}\n\n async resolve(\n route: ActivatedRouteSnapshot,\n ): Promise<void> {\n const ns = this.getNamespace(route);\n await this.service.tolgee.addActiveNs(ns, true)\n }\n\n private getNamespace(route: ActivatedRouteSnapshot) {\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n 'No namespace provided. Please add tolgeeNamespace to your route data. \\n' +\n 'If you really want to lazy load default namespace set tolgeeNamespace to empty string'\n );\n }\n return namespace;\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.component';\nexport * from './lib/NgxPlugin';\n\nexport * from './lib/ngx-tolgee.module';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":"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"}
1
+ {"version":3,"file":"tolgee-ngx.mjs","sources":["../../../projects/ngx-tolgee/src/lib/tolgee-instance-token.ts","../../../projects/ngx-tolgee/src/lib/translate.service.ts","../../../projects/ngx-tolgee/src/lib/translate.pipe.ts","../../../projects/ngx-tolgee/src/lib/t.component.ts","../../../projects/ngx-tolgee/src/lib/loader.component.ts","../../../projects/ngx-tolgee/src/lib/ngx-tolgee.module.ts","../../../projects/ngx-tolgee/src/lib/namespace.resolver.ts","../../../projects/ngx-tolgee/src/public-api.ts","../../../projects/ngx-tolgee/src/tolgee-ngx.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TolgeeInstance } from '@tolgee/web';\n\nexport const TOLGEE_INSTANCE = new InjectionToken<TolgeeInstance>(\n 'tolgee.instance'\n);\n","import { Inject, Injectable, OnDestroy, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n DefaultParamType,\n EventType,\n getTranslateProps,\n ListenerEvent,\n TFnType,\n TolgeeInstance,\n} from '@tolgee/web';\nimport { TOLGEE_INSTANCE } from './tolgee-instance-token';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService implements OnDestroy {\n private runPromise: Promise<void>;\n\n constructor(\n @Inject(TOLGEE_INSTANCE) private _tolgee: TolgeeInstance,\n private _ngZone: NgZone\n ) {}\n\n get tolgee() {\n return this._tolgee;\n }\n\n /**\n * Starts Tolgee if not started.\n *\n * The Tolgee is run outside NgZone. The triggered events, doesn't\n * trigger the change detection, when listening directly via Tolgee.on.\n *\n * However, all the emitting methods (on, translate, languageAsync)\n * in this class are emitting back in Angular's NgZone,\n * so the change detection works fine.\n */\n public async start(): Promise<void> {\n if (!this.isSSR()) {\n await this.runIfNotRunning();\n }\n }\n\n /**\n * Returns translation asynchronously, this method always return\n */\n readonly translate: TFnType<DefaultParamType, Observable<string>> = (\n ...args\n ) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return new Observable<string>((subscriber) => {\n const loadPromise = this.tolgee.addActiveNs(params.ns);\n const translate = async () => {\n await loadPromise;\n const translated = this.tolgee.t(params);\n subscriber.next(translated);\n };\n\n // noinspection JSIgnoredPromiseFromCall\n translate();\n\n const subscription = this.tolgee\n .onNsUpdate(translate)\n .subscribeNs(params.ns);\n\n return () => {\n this.tolgee.removeActiveNs(params.ns);\n subscription.unsubscribe();\n };\n });\n };\n\n /**\n * Instantly returns translated value. May return undefined or outdated value.\n * Use only when you cannot use translate.\n */\n public readonly instant: TFnType = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n return this.tolgee.t(params);\n };\n\n /**\n * Returns current language\n */\n get language(): string {\n return this.tolgee.getLanguage();\n }\n\n /**\n * Returns an observable emitting current language.\n * It instantly emits current language\n */\n get languageAsync(): Observable<string> {\n return new Observable((subscriber) => {\n subscriber.next(this.tolgee.getLanguage());\n const subscription = this.on('language').subscribe((value) => {\n subscriber.next(value.value);\n });\n\n return () => subscription.unsubscribe();\n });\n }\n\n /**\n * Changes the current language\n * @param lang The new current language (e.g. en, en-US)\n * @return Promise<void> Resolves when translations\n * for given language are loaded\n */\n public changeLanguage(lang: string) {\n return this.tolgee.changeLanguage(lang);\n }\n\n /**\n * Returns observable emitting when specified event is triggered.\n *\n * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,\n * so change detection should work properly.\n *\n * @param event the event to listen\n */\n on<Event extends keyof EventType>(event: Event) {\n return new Observable<ListenerEvent<EventType[Event]>>((subscriber) => {\n const subscription = this.tolgee.on(event, (value) => {\n this._ngZone.run(() => {\n subscriber.next(value as any);\n });\n });\n return () => subscription.unsubscribe();\n });\n }\n\n ngOnDestroy(): void {\n this.tolgee.stop();\n }\n\n private async runIfNotRunning() {\n if (!this.runPromise) {\n this.runPromise = this._ngZone.runOutsideAngular(() => {\n return this.tolgee.run();\n });\n }\n await this.runPromise;\n }\n\n private isSSR() {\n return typeof window === 'undefined';\n }\n}\n","import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subscription } from 'rxjs';\nimport { getTranslateProps, TFnType, TranslateProps } from '@tolgee/web';\n\n@Pipe({\n name: 'translate',\n pure: false,\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n private value = '';\n private previousHash: string;\n\n private subscription: Subscription;\n\n constructor(protected translateService: TranslateService) {}\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n readonly transform: TFnType<string> = (...args) => {\n // @ts-ignore\n const params = getTranslateProps(...args);\n const { key } = params;\n\n if (!key || key.length === 0) {\n return key;\n }\n\n const newHash = this.hash(params);\n if (this.previousHash === newHash) {\n return this.value;\n }\n\n this.previousHash = newHash;\n\n this.translate(params);\n\n return this.value;\n };\n\n private hash(props: TranslateProps) {\n return JSON.stringify([props, this.translateService.tolgee.getLanguage()]);\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private translate(props: TranslateProps) {\n this.value = this.translateService.instant({ ...props, orEmpty: true });\n this.subscribe(props);\n }\n\n private subscribe(props: TranslateProps) {\n this.unsubscribe();\n return this.translateService.translate(props).subscribe((r) => {\n this.value = r;\n });\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from './translate.service';\nimport { TranslateParams } from '@tolgee/web';\n\n@Component({\n selector: '[t]',\n template: ``,\n})\nexport class TComponent implements OnInit, OnDestroy, OnChanges {\n @Input() key: string;\n @Input() ns: string;\n @Input() params?: TranslateParams<any>;\n @Input() default?: string;\n @Input() noWrap?: boolean = false;\n\n /**\n * When true, innerHTML property of element is set.\n * Use only when you're sure the HTML is sanitized.\n */\n @Input() isHtml?: boolean = false;\n\n private subscription: Subscription;\n private initialized: boolean;\n\n constructor(\n private ref: ElementRef,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n this.renderInstantValue();\n }\n\n ngOnChanges(): void {\n // noinspection JSIgnoredPromiseFromCall\n this.subscribe();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe();\n }\n\n private renderInstantValue() {\n // get initial value first\n const translated = this.translateService.instant({\n ...this.getTranslateProps(),\n orEmpty: true,\n });\n this.setElementContent(translated);\n }\n\n private getTranslateProps() {\n return {\n key: this.key,\n ns: this.ns,\n params: this.params,\n defaultValue: this.default,\n noWrap: this.noWrap,\n };\n }\n\n private unsubscribe() {\n this.subscription?.unsubscribe();\n }\n\n private async subscribe() {\n this.unsubscribe();\n this.subscription = this.translateService\n .translate(this.getTranslateProps())\n .subscribe((translated) => {\n this.setElementContent(translated);\n this.initialized = true;\n });\n }\n\n private setElementContent(translated: string) {\n if (this.isHtml) {\n this.getElement().innerHTML = translated;\n return;\n }\n this.getElement().textContent = translated;\n }\n\n private getElement() {\n return this.ref.nativeElement as HTMLElement;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n template: `\n <div class=\"loader-template\" [innerHTML]=\"html\"></div>\n `,\n})\nexport class LoaderComponent {\n @Input() html: string | undefined;\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TComponent } from './t.component';\nimport { TranslateService } from './translate.service';\nimport { LoaderComponent } from \"./loader.component\";\n\n@NgModule({\n declarations: [TranslatePipe, TComponent, LoaderComponent],\n exports: [TranslatePipe, TComponent],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: (service: TranslateService) => {\n return async () => await service.start();\n },\n deps: [TranslateService],\n multi: true,\n },\n ],\n})\nexport class NgxTolgeeModule {}\n","import {\n ActivatedRouteSnapshot,\n Resolve,\n} from '@angular/router';\nimport { TranslateService } from './translate.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceResolver implements Resolve<void> {\n constructor(public service: TranslateService) {}\n\n async resolve(\n route: ActivatedRouteSnapshot,\n ): Promise<void> {\n const ns = this.getNamespace(route);\n await this.service.tolgee.addActiveNs(ns, true)\n }\n\n private getNamespace(route: ActivatedRouteSnapshot) {\n const namespace = route?.data?.tolgeeNamespace;\n if (namespace === undefined) {\n console.warn(\n 'No namespace provided. Please add tolgeeNamespace to your route data. \\n' +\n 'If you really want to lazy load default namespace set tolgeeNamespace to empty string'\n );\n }\n return namespace;\n }\n}\n","/*\n * Public API Surface of ngx-tolgee\n */\nexport * from './lib/translate.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/t.component';\n\nexport * from './lib/ngx-tolgee.module';\nexport * from './lib/tolgee-instance-token';\n\nexport * from '@tolgee/web';\nexport * from './lib/namespace.resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TranslateService"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { InjectionToken } from '@angular/core';
2
2
  export declare const TOLGEE_INSTANCE: InjectionToken<Readonly<{
3
3
  on: import("@tolgee/web").TolgeeOn<keyof import("@tolgee/web").EventType>;
4
4
  onNsUpdate: (handler: import("@tolgee/web").Listener<undefined>) => import("@tolgee/web").SubscriptionSelective;
5
+ setEmmiterActive: (active: boolean) => void;
5
6
  getLanguage: () => string;
6
7
  getPendingLanguage: () => string;
7
8
  changeLanguage: (language: string) => Promise<void>;
@@ -40,8 +41,9 @@ export declare const TOLGEE_INSTANCE: InjectionToken<Readonly<{
40
41
  fallbackNs?: import("@tolgee/web").FallbackGeneral;
41
42
  defaultNs: string;
42
43
  staticData?: import("@tolgee/web").TolgeeStaticData;
43
- observerOptions: import("@tolgee/web").ObserverOptionsInternal;
44
44
  observerType: "text" | "invisible";
45
+ observerOptions: import("@tolgee/web").ObserverOptionsInternal;
46
+ onFormatError: import("@tolgee/web").OnFormatError;
45
47
  };
46
48
  isDev: () => boolean;
47
49
  wrap: (params: import("@tolgee/web").WrapperWrapProps) => string;
@@ -1,14 +1,16 @@
1
- import { OnDestroy } from '@angular/core';
1
+ import { OnDestroy, NgZone } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { DefaultParamType, EventType, ListenerEvent, TFnType, TolgeeInstance } from '@tolgee/web';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class TranslateService implements OnDestroy {
6
6
  private _tolgee;
7
+ private _ngZone;
7
8
  private runPromise;
8
- constructor(_tolgee: TolgeeInstance);
9
+ constructor(_tolgee: TolgeeInstance, _ngZone: NgZone);
9
10
  get tolgee(): Readonly<{
10
11
  on: import("@tolgee/web").TolgeeOn<keyof EventType>;
11
12
  onNsUpdate: (handler: import("@tolgee/web").Listener<undefined>) => import("@tolgee/web").SubscriptionSelective;
13
+ setEmmiterActive: (active: boolean) => void;
12
14
  getLanguage: () => string;
13
15
  getPendingLanguage: () => string;
14
16
  changeLanguage: (language: string) => Promise<void>;
@@ -16,7 +18,13 @@ export declare class TranslateService implements OnDestroy {
16
18
  revert: () => void;
17
19
  };
18
20
  addActiveNs: (ns: import("@tolgee/web").NsFallback, forget?: boolean) => Promise<void>;
19
- removeActiveNs: (ns: import("@tolgee/web").NsFallback) => void;
21
+ /**
22
+ * Instantly returns translated value. May return undefined or outdated value.
23
+ * Use only when you cannot use translate.
24
+ */
25
+ removeActiveNs: (ns: import("@tolgee/web").NsFallback) => void; /**
26
+ * Returns current language
27
+ */
20
28
  loadRecords: (descriptors: import("@tolgee/web").CacheDescriptor[]) => Promise<import("@tolgee/web").TranslationsFlat[]>;
21
29
  loadRecord: (descriptor: import("@tolgee/web").CacheDescriptor) => Promise<import("@tolgee/web").TranslationsFlat>;
22
30
  addStaticData: (data: import("@tolgee/web").TolgeeStaticData) => void;
@@ -47,8 +55,9 @@ export declare class TranslateService implements OnDestroy {
47
55
  fallbackNs?: import("@tolgee/web").FallbackGeneral;
48
56
  defaultNs: string;
49
57
  staticData?: import("@tolgee/web").TolgeeStaticData;
50
- observerOptions: import("@tolgee/web").ObserverOptionsInternal;
51
58
  observerType: "text" | "invisible";
59
+ observerOptions: import("@tolgee/web").ObserverOptionsInternal;
60
+ onFormatError: import("@tolgee/web").OnFormatError;
52
61
  };
53
62
  isDev: () => boolean;
54
63
  wrap: (params: import("@tolgee/web").WrapperWrapProps) => string;
@@ -62,11 +71,25 @@ export declare class TranslateService implements OnDestroy {
62
71
  updateOptions(options?: import("@tolgee/web").TolgeeOptions): void;
63
72
  }>;
64
73
  /**
65
- * Starts Tolgee if not started and subscribes for languageChange and translationChange events
74
+ * Starts Tolgee if not started.
75
+ *
76
+ * The Tolgee is run outside NgZone. The triggered events, doesn't
77
+ * trigger the change detection, when listening directly via Tolgee.on.
78
+ *
79
+ * However, all the emitting methods (on, translate, languageAsync)
80
+ * in this class are emitting back in Angular's NgZone,
81
+ * so the change detection works fine.
66
82
  */
67
83
  start(): Promise<void>;
68
- ngOnDestroy(): void;
69
- on<Event extends keyof EventType>(event: Event): Observable<ListenerEvent<EventType[Event]>>;
84
+ /**
85
+ * Returns translation asynchronously, this method always return
86
+ */
87
+ readonly translate: TFnType<DefaultParamType, Observable<string>>;
88
+ /**
89
+ * Instantly returns translated value. May return undefined or outdated value.
90
+ * Use only when you cannot use translate.
91
+ */
92
+ readonly instant: TFnType;
70
93
  /**
71
94
  * Returns current language
72
95
  */
@@ -84,14 +107,17 @@ export declare class TranslateService implements OnDestroy {
84
107
  */
85
108
  changeLanguage(lang: string): Promise<void>;
86
109
  /**
87
- * Instantly returns translated value. May return undefined or outdated value.
88
- * Use only when you cannot use translate.
110
+ * Returns observable emitting when specified event is triggered.
111
+ *
112
+ * It's a wrapper of Tolgee.on method. The emmit is triggered inside ngZone,
113
+ * so change detection should work properly.
114
+ *
115
+ * @param event the event to listen
89
116
  */
90
- readonly instant: TFnType;
91
- /**
92
- * Returns translation asynchronously, this method always return
93
- */
94
- readonly translate: TFnType<DefaultParamType, Observable<string>>;
117
+ on<Event extends keyof EventType>(event: Event): Observable<ListenerEvent<EventType[Event]>>;
118
+ ngOnDestroy(): void;
119
+ private runIfNotRunning;
120
+ private isSSR;
95
121
  static ɵfac: i0.ɵɵFactoryDeclaration<TranslateService, never>;
96
122
  static ɵprov: i0.ɵɵInjectableDeclaration<TranslateService>;
97
123
  }
package/package.json CHANGED
@@ -6,10 +6,10 @@
6
6
  "url": "https://github.com/tolgee/tolgee-js"
7
7
  },
8
8
  "dependencies": {
9
- "@tolgee/web": "4.10.0-rc.a11e1b6.0",
9
+ "@tolgee/web": "^5.0.0-alpha.2",
10
10
  "tslib": "^2.3.0"
11
11
  },
12
- "version": "4.10.0-rc.a11e1b6.0",
12
+ "version": "5.0.0-alpha.2",
13
13
  "publishConfig": {
14
14
  "directory": "../../dist/ngx-tolgee",
15
15
  "access": "public"
package/public-api.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export * from './lib/translate.service';
2
2
  export * from './lib/translate.pipe';
3
3
  export * from './lib/t.component';
4
- export * from './lib/NgxPlugin';
5
4
  export * from './lib/ngx-tolgee.module';
6
5
  export * from './lib/tolgee-instance-token';
7
6
  export * from '@tolgee/web';
@@ -1,6 +0,0 @@
1
- import { DevTools } from '@tolgee/web';
2
- export const NgxPlugin = () => (tolgee) => {
3
- tolgee.addPlugin(DevTools());
4
- return tolgee;
5
- };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRvbGdlZS9zcmMvbGliL05neFBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBaUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7SUFDdEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvbGdlZVBsdWdpbiwgRGV2VG9vbHMgfSBmcm9tICdAdG9sZ2VlL3dlYic7XG5cbmV4cG9ydCBjb25zdCBOZ3hQbHVnaW4gPSAoKTogVG9sZ2VlUGx1Z2luID0+ICh0b2xnZWUpID0+IHtcbiAgdG9sZ2VlLmFkZFBsdWdpbihEZXZUb29scygpKTtcbiAgcmV0dXJuIHRvbGdlZTtcbn07XG4iXX0=
@@ -1,2 +0,0 @@
1
- import { TolgeePlugin } from '@tolgee/web';
2
- export declare const NgxPlugin: () => TolgeePlugin;