ngx-translate-multi-http-loader 9.0.1 → 9.1.1

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,4 +1,4 @@
1
- # @ngx-translate/multi-http-loader [![npm version](https://badge.fury.io/js/ngx-translate-multi-http-loader.svg)](https://badge.fury.io/js/ngx-translate-multi-http-loader)
1
+ # @ngx-translate/multi-http-loader [![npm version](https://img.shields.io/npm/v/ngx-translate-multi-http-loader.svg)](https://www.npmjs.com/package/ngx-translate-multi-http-loader)
2
2
 
3
3
 
4
4
  A loader for [ngx-translate](https://github.com/ngx-translate/core) that loads translations using http.
@@ -93,7 +93,8 @@ export function HttpLoaderFactory(_httpBackend: HttpBackend) {
93
93
  }
94
94
  ```
95
95
 
96
- The loader will merge all translation files from the server using [deepmerge](https://github.com/KyleAMathews/deepmerge).
96
+ The loader will merge all translation files from the server using [deepmerge-ts](https://www.npmjs.com/package/deepmerge-ts).
97
97
 
98
98
  ## Authors and acknowledgment
99
+ * maintainer [Raphaël Balet](https://github.com/rbalet)
99
100
  * Former maintainer [Dennis Keil](https://github.com/denniske)
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
- import * as merge from 'deepmerge';
2
+ import { deepmerge } from 'deepmerge-ts';
3
3
  import { forkJoin, of } from 'rxjs';
4
4
  import { catchError, map } from 'rxjs/operators';
5
5
  export class MultiTranslateHttpLoader {
@@ -12,16 +12,24 @@ export class MultiTranslateHttpLoader {
12
12
  let path;
13
13
  if (resource.prefix)
14
14
  path = `${resource.prefix}${lang}${resource.suffix || '.json'}`;
15
- else {
15
+ else
16
16
  path = `${resource}${lang}.json`;
17
- }
18
17
  return new HttpClient(this._handler).get(path).pipe(catchError((res) => {
19
18
  console.error('Something went wrong for the following translation file:', path);
20
19
  console.error(res.message);
21
20
  return of({});
22
21
  }));
23
22
  });
24
- return forkJoin(requests).pipe(map((response) => merge.all(response)));
23
+ return forkJoin(requests).pipe(map((response) => this._deepmergeAll(response)));
24
+ }
25
+ // @TODO : wait from https://github.com/RebeccaStevens/deepmerge-ts/issues/255 to be merged
26
+ _deepmergeAll(array) {
27
+ if (!Array.isArray(array)) {
28
+ return {};
29
+ }
30
+ return array.reduce((prev, next) => {
31
+ return deepmerge(prev, next);
32
+ }, {});
25
33
  }
26
34
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaHR0cC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tdWx0aS1odHRwLWxvYWRlci9zcmMvbGliL211bHRpLWh0dHAtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUU5RCxPQUFPLEtBQUssS0FBSyxNQUFNLFdBQVcsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBT2hELE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsWUFDVSxRQUFxQixFQUNyQixnQkFBbUQ7UUFEbkQsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1DO0lBQzFELENBQUM7SUFFRyxjQUFjLENBQUMsSUFBWTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEQsSUFBSSxJQUFZLENBQUE7WUFDaEIsSUFBSSxRQUFRLENBQUMsTUFBTTtnQkFBRSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFBO2lCQUMvRTtnQkFDSCxJQUFJLEdBQUcsR0FBRyxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUE7YUFDakM7WUFFRCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNqRCxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDL0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzFCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDeEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEJhY2tlbmQsIEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcclxuaW1wb3J0ICogYXMgbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJ1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zbGF0aW9uUmVzb3VyY2Uge1xyXG4gIHByZWZpeDogc3RyaW5nXHJcbiAgc3VmZml4Pzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNdWx0aVRyYW5zbGF0ZUh0dHBMb2FkZXIgaW1wbGVtZW50cyBUcmFuc2xhdGVMb2FkZXIge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlcjogSHR0cEJhY2tlbmQsXHJcbiAgICBwcml2YXRlIF9yZXNvdXJjZXNQcmVmaXg6IHN0cmluZ1tdIHwgSVRyYW5zbGF0aW9uUmVzb3VyY2VbXSxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihsYW5nOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLl9yZXNvdXJjZXNQcmVmaXgubWFwKChyZXNvdXJjZSkgPT4ge1xyXG4gICAgICBsZXQgcGF0aDogc3RyaW5nXHJcbiAgICAgIGlmIChyZXNvdXJjZS5wcmVmaXgpIHBhdGggPSBgJHtyZXNvdXJjZS5wcmVmaXh9JHtsYW5nfSR7cmVzb3VyY2Uuc3VmZml4IHx8ICcuanNvbid9YFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBwYXRoID0gYCR7cmVzb3VyY2V9JHtsYW5nfS5qc29uYFxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnQodGhpcy5faGFuZGxlcikuZ2V0KHBhdGgpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcigocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZyBmb3IgdGhlIGZvbGxvd2luZyB0cmFuc2xhdGlvbiBmaWxlOicsIHBhdGgpXHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKVxyXG4gICAgICAgICAgcmV0dXJuIG9mKHt9KVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihyZXF1ZXN0cykucGlwZShtYXAoKHJlc3BvbnNlKSA9PiBtZXJnZS5hbGwocmVzcG9uc2UpKSlcclxuICB9XHJcbn1cclxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaHR0cC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tdWx0aS1odHRwLWxvYWRlci9zcmMvbGliL211bHRpLWh0dHAtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFPaEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUNVLFFBQXFCLEVBQ3JCLGdCQUFtRDtRQURuRCxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUM7SUFDMUQsQ0FBQztJQUVHLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLE1BQU0sUUFBUSxHQUE4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakYsSUFBSSxJQUFZLENBQUE7WUFDaEIsSUFBSSxRQUFRLENBQUMsTUFBTTtnQkFBRSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFBOztnQkFDL0UsSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksT0FBTyxDQUFBO1lBRXJDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ2pELFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMvRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDMUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDZixDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBRUQsMkZBQTJGO0lBQ25GLGFBQWEsQ0FBQyxLQUFLO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDakMsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQzlCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNSLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBCYWNrZW5kLCBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxvYWRlciB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXHJcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ2RlZXBtZXJnZS10cydcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2xhdGlvblJlc291cmNlIHtcclxuICBwcmVmaXg6IHN0cmluZ1xyXG4gIHN1ZmZpeD86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTXVsdGlUcmFuc2xhdGVIdHRwTG9hZGVyIGltcGxlbWVudHMgVHJhbnNsYXRlTG9hZGVyIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2hhbmRsZXI6IEh0dHBCYWNrZW5kLFxyXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VzUHJlZml4OiBzdHJpbmdbXSB8IElUcmFuc2xhdGlvblJlc291cmNlW10sXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHJlcXVlc3RzOiBPYnNlcnZhYmxlPE9iamVjdCB8IHt9PltdID0gdGhpcy5fcmVzb3VyY2VzUHJlZml4Lm1hcCgocmVzb3VyY2UpID0+IHtcclxuICAgICAgbGV0IHBhdGg6IHN0cmluZ1xyXG4gICAgICBpZiAocmVzb3VyY2UucHJlZml4KSBwYXRoID0gYCR7cmVzb3VyY2UucHJlZml4fSR7bGFuZ30ke3Jlc291cmNlLnN1ZmZpeCB8fCAnLmpzb24nfWBcclxuICAgICAgZWxzZSBwYXRoID0gYCR7cmVzb3VyY2V9JHtsYW5nfS5qc29uYFxyXG5cclxuICAgICAgcmV0dXJuIG5ldyBIdHRwQ2xpZW50KHRoaXMuX2hhbmRsZXIpLmdldChwYXRoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKHJlcykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcgZm9yIHRoZSBmb2xsb3dpbmcgdHJhbnNsYXRpb24gZmlsZTonLCBwYXRoKVxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZXMubWVzc2FnZSlcclxuICAgICAgICAgIHJldHVybiBvZih7fSlcclxuICAgICAgICB9KSxcclxuICAgICAgKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4ocmVxdWVzdHMpLnBpcGUobWFwKChyZXNwb25zZSkgPT4gdGhpcy5fZGVlcG1lcmdlQWxsKHJlc3BvbnNlKSkpXHJcbiAgfVxyXG5cclxuICAvLyBAVE9ETyA6IHdhaXQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vUmViZWNjYVN0ZXZlbnMvZGVlcG1lcmdlLXRzL2lzc3Vlcy8yNTUgdG8gYmUgbWVyZ2VkXHJcbiAgcHJpdmF0ZSBfZGVlcG1lcmdlQWxsKGFycmF5KSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XHJcbiAgICAgIHJldHVybiB7fVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhcnJheS5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHtcclxuICAgICAgcmV0dXJuIGRlZXBtZXJnZShwcmV2LCBuZXh0KVxyXG4gICAgfSwge30pXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
- import * as merge from 'deepmerge';
2
+ import { deepmerge } from 'deepmerge-ts';
3
3
  import { of, forkJoin } from 'rxjs';
4
4
  import { catchError, map } from 'rxjs/operators';
5
5
 
@@ -13,16 +13,24 @@ class MultiTranslateHttpLoader {
13
13
  let path;
14
14
  if (resource.prefix)
15
15
  path = `${resource.prefix}${lang}${resource.suffix || '.json'}`;
16
- else {
16
+ else
17
17
  path = `${resource}${lang}.json`;
18
- }
19
18
  return new HttpClient(this._handler).get(path).pipe(catchError((res) => {
20
19
  console.error('Something went wrong for the following translation file:', path);
21
20
  console.error(res.message);
22
21
  return of({});
23
22
  }));
24
23
  });
25
- return forkJoin(requests).pipe(map((response) => merge.all(response)));
24
+ return forkJoin(requests).pipe(map((response) => this._deepmergeAll(response)));
25
+ }
26
+ // @TODO : wait from https://github.com/RebeccaStevens/deepmerge-ts/issues/255 to be merged
27
+ _deepmergeAll(array) {
28
+ if (!Array.isArray(array)) {
29
+ return {};
30
+ }
31
+ return array.reduce((prev, next) => {
32
+ return deepmerge(prev, next);
33
+ }, {});
26
34
  }
27
35
  }
28
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-translate-multi-http-loader.mjs","sources":["../../../projects/multi-http-loader/src/lib/multi-http-loader.ts","../../../projects/multi-http-loader/src/ngx-translate-multi-http-loader.ts"],"sourcesContent":["import { HttpBackend, HttpClient } from '@angular/common/http'\r\nimport { TranslateLoader } from '@ngx-translate/core'\r\nimport * as merge from 'deepmerge'\r\nimport { forkJoin, Observable, of } from 'rxjs'\r\nimport { catchError, map } from 'rxjs/operators'\r\n\r\nexport interface ITranslationResource {\r\n prefix: string\r\n suffix?: string\r\n}\r\n\r\nexport class MultiTranslateHttpLoader implements TranslateLoader {\r\n constructor(\r\n private _handler: HttpBackend,\r\n private _resourcesPrefix: string[] | ITranslationResource[],\r\n ) {}\r\n\r\n public getTranslation(lang: string): Observable<any> {\r\n const requests = this._resourcesPrefix.map((resource) => {\r\n let path: string\r\n if (resource.prefix) path = `${resource.prefix}${lang}${resource.suffix || '.json'}`\r\n else {\r\n path = `${resource}${lang}.json`\r\n }\r\n\r\n return new HttpClient(this._handler).get(path).pipe(\r\n catchError((res) => {\r\n console.error('Something went wrong for the following translation file:', path)\r\n console.error(res.message)\r\n return of({})\r\n }),\r\n )\r\n })\r\n\r\n return forkJoin(requests).pipe(map((response) => merge.all(response)))\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAWa,wBAAwB,CAAA;IACnC,WACU,CAAA,QAAqB,EACrB,gBAAmD,EAAA;AADnD,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;AACrB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAmC;KACzD;AAEG,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACtD,YAAA,IAAI,IAAY,CAAA;YAChB,IAAI,QAAQ,CAAC,MAAM;AAAE,gBAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAG,EAAA,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAA;AAC/E,iBAAA;AACH,gBAAA,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAG,EAAA,IAAI,OAAO,CAAA;AACjC,aAAA;YAED,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,CAAA;AAC/E,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1B,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;aACd,CAAC,CACH,CAAA;AACH,SAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KACvE;AACF;;ACpCD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-translate-multi-http-loader.mjs","sources":["../../../projects/multi-http-loader/src/lib/multi-http-loader.ts","../../../projects/multi-http-loader/src/ngx-translate-multi-http-loader.ts"],"sourcesContent":["import { HttpBackend, HttpClient } from '@angular/common/http'\r\nimport { TranslateLoader } from '@ngx-translate/core'\r\nimport { deepmerge } from 'deepmerge-ts'\r\nimport { forkJoin, Observable, of } from 'rxjs'\r\nimport { catchError, map } from 'rxjs/operators'\r\n\r\nexport interface ITranslationResource {\r\n prefix: string\r\n suffix?: string\r\n}\r\n\r\nexport class MultiTranslateHttpLoader implements TranslateLoader {\r\n constructor(\r\n private _handler: HttpBackend,\r\n private _resourcesPrefix: string[] | ITranslationResource[],\r\n ) {}\r\n\r\n public getTranslation(lang: string): Observable<any> {\r\n const requests: Observable<Object | {}>[] = this._resourcesPrefix.map((resource) => {\r\n let path: string\r\n if (resource.prefix) path = `${resource.prefix}${lang}${resource.suffix || '.json'}`\r\n else path = `${resource}${lang}.json`\r\n\r\n return new HttpClient(this._handler).get(path).pipe(\r\n catchError((res) => {\r\n console.error('Something went wrong for the following translation file:', path)\r\n console.error(res.message)\r\n return of({})\r\n }),\r\n )\r\n })\r\n\r\n return forkJoin(requests).pipe(map((response) => this._deepmergeAll(response)))\r\n }\r\n\r\n // @TODO : wait from https://github.com/RebeccaStevens/deepmerge-ts/issues/255 to be merged\r\n private _deepmergeAll(array) {\r\n if (!Array.isArray(array)) {\r\n return {}\r\n }\r\n\r\n return array.reduce((prev, next) => {\r\n return deepmerge(prev, next)\r\n }, {})\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAWa,wBAAwB,CAAA;IACnC,WACU,CAAA,QAAqB,EACrB,gBAAmD,EAAA;AADnD,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;AACrB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAmC;KACzD;AAEG,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,MAAM,QAAQ,GAA8B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACjF,YAAA,IAAI,IAAY,CAAA;YAChB,IAAI,QAAQ,CAAC,MAAM;AAAE,gBAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAG,EAAA,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAA;;AAC/E,gBAAA,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAG,EAAA,IAAI,OAAO,CAAA;YAErC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,CAAA;AAC/E,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1B,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;aACd,CAAC,CACH,CAAA;AACH,SAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KAChF;;AAGO,IAAA,aAAa,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AACjC,YAAA,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAC7B,EAAE,EAAE,CAAC,CAAA;KACP;AACF;;AC7CD;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
- import * as merge from 'deepmerge';
2
+ import { deepmerge } from 'deepmerge-ts';
3
3
  import { of, forkJoin } from 'rxjs';
4
4
  import { catchError, map } from 'rxjs/operators';
5
5
 
@@ -13,16 +13,24 @@ class MultiTranslateHttpLoader {
13
13
  let path;
14
14
  if (resource.prefix)
15
15
  path = `${resource.prefix}${lang}${resource.suffix || '.json'}`;
16
- else {
16
+ else
17
17
  path = `${resource}${lang}.json`;
18
- }
19
18
  return new HttpClient(this._handler).get(path).pipe(catchError((res) => {
20
19
  console.error('Something went wrong for the following translation file:', path);
21
20
  console.error(res.message);
22
21
  return of({});
23
22
  }));
24
23
  });
25
- return forkJoin(requests).pipe(map((response) => merge.all(response)));
24
+ return forkJoin(requests).pipe(map((response) => this._deepmergeAll(response)));
25
+ }
26
+ // @TODO : wait from https://github.com/RebeccaStevens/deepmerge-ts/issues/255 to be merged
27
+ _deepmergeAll(array) {
28
+ if (!Array.isArray(array)) {
29
+ return {};
30
+ }
31
+ return array.reduce((prev, next) => {
32
+ return deepmerge(prev, next);
33
+ }, {});
26
34
  }
27
35
  }
28
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-translate-multi-http-loader.mjs","sources":["../../../projects/multi-http-loader/src/lib/multi-http-loader.ts","../../../projects/multi-http-loader/src/ngx-translate-multi-http-loader.ts"],"sourcesContent":["import { HttpBackend, HttpClient } from '@angular/common/http'\r\nimport { TranslateLoader } from '@ngx-translate/core'\r\nimport * as merge from 'deepmerge'\r\nimport { forkJoin, Observable, of } from 'rxjs'\r\nimport { catchError, map } from 'rxjs/operators'\r\n\r\nexport interface ITranslationResource {\r\n prefix: string\r\n suffix?: string\r\n}\r\n\r\nexport class MultiTranslateHttpLoader implements TranslateLoader {\r\n constructor(\r\n private _handler: HttpBackend,\r\n private _resourcesPrefix: string[] | ITranslationResource[],\r\n ) {}\r\n\r\n public getTranslation(lang: string): Observable<any> {\r\n const requests = this._resourcesPrefix.map((resource) => {\r\n let path: string\r\n if (resource.prefix) path = `${resource.prefix}${lang}${resource.suffix || '.json'}`\r\n else {\r\n path = `${resource}${lang}.json`\r\n }\r\n\r\n return new HttpClient(this._handler).get(path).pipe(\r\n catchError((res) => {\r\n console.error('Something went wrong for the following translation file:', path)\r\n console.error(res.message)\r\n return of({})\r\n }),\r\n )\r\n })\r\n\r\n return forkJoin(requests).pipe(map((response) => merge.all(response)))\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAWa,wBAAwB,CAAA;IACnC,WACU,CAAA,QAAqB,EACrB,gBAAmD,EAAA;QADnD,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;QACrB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAmC;KACzD;AAEG,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACtD,YAAA,IAAI,IAAY,CAAA;YAChB,IAAI,QAAQ,CAAC,MAAM;AAAE,gBAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAG,EAAA,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAA;AAC/E,iBAAA;AACH,gBAAA,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAG,EAAA,IAAI,OAAO,CAAA;AACjC,aAAA;YAED,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,CAAA;AAC/E,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1B,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;aACd,CAAC,CACH,CAAA;AACH,SAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KACvE;AACF;;ACpCD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-translate-multi-http-loader.mjs","sources":["../../../projects/multi-http-loader/src/lib/multi-http-loader.ts","../../../projects/multi-http-loader/src/ngx-translate-multi-http-loader.ts"],"sourcesContent":["import { HttpBackend, HttpClient } from '@angular/common/http'\r\nimport { TranslateLoader } from '@ngx-translate/core'\r\nimport { deepmerge } from 'deepmerge-ts'\r\nimport { forkJoin, Observable, of } from 'rxjs'\r\nimport { catchError, map } from 'rxjs/operators'\r\n\r\nexport interface ITranslationResource {\r\n prefix: string\r\n suffix?: string\r\n}\r\n\r\nexport class MultiTranslateHttpLoader implements TranslateLoader {\r\n constructor(\r\n private _handler: HttpBackend,\r\n private _resourcesPrefix: string[] | ITranslationResource[],\r\n ) {}\r\n\r\n public getTranslation(lang: string): Observable<any> {\r\n const requests: Observable<Object | {}>[] = this._resourcesPrefix.map((resource) => {\r\n let path: string\r\n if (resource.prefix) path = `${resource.prefix}${lang}${resource.suffix || '.json'}`\r\n else path = `${resource}${lang}.json`\r\n\r\n return new HttpClient(this._handler).get(path).pipe(\r\n catchError((res) => {\r\n console.error('Something went wrong for the following translation file:', path)\r\n console.error(res.message)\r\n return of({})\r\n }),\r\n )\r\n })\r\n\r\n return forkJoin(requests).pipe(map((response) => this._deepmergeAll(response)))\r\n }\r\n\r\n // @TODO : wait from https://github.com/RebeccaStevens/deepmerge-ts/issues/255 to be merged\r\n private _deepmergeAll(array) {\r\n if (!Array.isArray(array)) {\r\n return {}\r\n }\r\n\r\n return array.reduce((prev, next) => {\r\n return deepmerge(prev, next)\r\n }, {})\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAWa,wBAAwB,CAAA;IACnC,WACU,CAAA,QAAqB,EACrB,gBAAmD,EAAA;QADnD,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;QACrB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAmC;KACzD;AAEG,IAAA,cAAc,CAAC,IAAY,EAAA;QAChC,MAAM,QAAQ,GAA8B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AACjF,YAAA,IAAI,IAAY,CAAA;YAChB,IAAI,QAAQ,CAAC,MAAM;AAAE,gBAAA,IAAI,GAAG,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAG,EAAA,IAAI,CAAG,EAAA,QAAQ,CAAC,MAAM,IAAI,OAAO,EAAE,CAAA;;AAC/E,gBAAA,IAAI,GAAG,CAAG,EAAA,QAAQ,CAAG,EAAA,IAAI,OAAO,CAAA;YAErC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,gBAAA,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,IAAI,CAAC,CAAA;AAC/E,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC1B,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;aACd,CAAC,CACH,CAAA;AACH,SAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;KAChF;;AAGO,IAAA,aAAa,CAAC,KAAK,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,EAAE,CAAA;AACV,SAAA;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AACjC,YAAA,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SAC7B,EAAE,EAAE,CAAC,CAAA;KACP;AACF;;AC7CD;;AAEG;;;;"}
@@ -10,4 +10,5 @@ export declare class MultiTranslateHttpLoader implements TranslateLoader {
10
10
  private _resourcesPrefix;
11
11
  constructor(_handler: HttpBackend, _resourcesPrefix: string[] | ITranslationResource[]);
12
12
  getTranslation(lang: string): Observable<any>;
13
+ private _deepmergeAll;
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-translate-multi-http-loader",
3
- "version": "9.0.1",
3
+ "version": "9.1.1",
4
4
  "license": "MIT",
5
5
  "author": "Raphael Balet",
6
6
  "maintainers": [
@@ -26,7 +26,7 @@
26
26
  "@angular/common": ">=12.0.0",
27
27
  "@angular/core": ">=12.0.0",
28
28
  "@ngx-translate/core": ">=14.0.0",
29
- "deepmerge": ">=4.2.2",
29
+ "deepmerge-ts": "^4.2.2",
30
30
  "rxjs": "7.5.7"
31
31
  },
32
32
  "module": "fesm2015/ngx-translate-multi-http-loader.mjs",