UNPKG

@ngx-translate/http-loader

Version:

http loader for dynamically loading translation files for @ngx-translate/core

1 lines 7.56 kB
{"version":3,"file":"ngx-translate-http-loader.mjs","sources":["../../../projects/http-loader/src/lib/http-loader.ts","../../../projects/http-loader/src/ngx-translate-http-loader.ts"],"sourcesContent":["import { HttpBackend, HttpClient, HttpErrorResponse } from \"@angular/common/http\";\nimport { inject, Injectable, InjectionToken, Provider } from \"@angular/core\";\nimport { mergeDeep, TranslateLoader, TranslationObject } from \"@ngx-translate/core\";\nimport { catchError, forkJoin, map, Observable, of } from \"rxjs\";\n\nexport interface TranslateHttpLoaderConfig {\n prefix?: string;\n suffix?: string;\n enforceLoading: boolean;\n useHttpBackend: boolean;\n /**\n * If true, a failed HTTP fetch (e.g. 404) propagates the error and fails\n * the whole language load (v17 behaviour). If false (default), each\n * resource failure is caught and replaced with an empty object, with a\n * `console.warn` per failure; remaining resources still contribute their\n * keys. Set this to `true` if you want deploys to fail loudly on a\n * missing translation file rather than serve partial translations.\n */\n failOnError?: boolean;\n}\n\nexport interface TranslateHttpLoaderResource {\n prefix: string;\n suffix?: string;\n}\n\nexport interface TranslateMultiHttpLoaderConfig {\n resources: (string | TranslateHttpLoaderResource)[];\n enforceLoading: boolean;\n useHttpBackend: boolean;\n /** See {@link TranslateHttpLoaderConfig.failOnError}. */\n failOnError?: boolean;\n}\n\nexport const TRANSLATE_HTTP_LOADER_CONFIG = new InjectionToken<\n Partial<TranslateMultiHttpLoaderConfig>\n>(\"TRANSLATE_HTTP_LOADER_CONFIG\");\n\n@Injectable()\nexport class TranslateHttpLoader implements TranslateLoader {\n private http: HttpClient;\n private config: TranslateMultiHttpLoaderConfig;\n\n constructor() {\n this.config = {\n resources: [],\n enforceLoading: false,\n useHttpBackend: false,\n ...inject(TRANSLATE_HTTP_LOADER_CONFIG),\n };\n\n this.http = this.config.useHttpBackend\n ? new HttpClient(inject(HttpBackend))\n : inject(HttpClient);\n }\n\n /**\n * Gets the translations from the server\n */\n public getTranslation(lang: string): Observable<TranslationObject> {\n const cacheBuster = this.config.enforceLoading ? `?enforceLoading=${Date.now()}` : \"\";\n\n const requests = this.config.resources.map((resource) => {\n const path =\n typeof resource === \"string\"\n ? `${resource}${lang}.json`\n : `${resource.prefix}${lang}${resource.suffix ?? \".json\"}`;\n\n const request$ = this.http.get<TranslationObject>(`${path}${cacheBuster}`);\n\n if (this.config.failOnError) {\n return request$;\n }\n\n return request$.pipe(\n catchError((err: HttpErrorResponse) => {\n console.warn(\n `@ngx-translate/http-loader: error loading translation for ${lang}:`,\n err,\n );\n return of({});\n }),\n );\n });\n\n if (requests.length === 0) {\n return of({});\n }\n\n return forkJoin(requests).pipe(\n map((response) => response.reduce((acc, curr) => mergeDeep(acc, curr), {})),\n ) as Observable<TranslationObject>;\n }\n}\n\nexport function provideTranslateHttpLoader(\n config: Partial<TranslateHttpLoaderConfig | TranslateMultiHttpLoaderConfig> = {},\n): Provider[] {\n // If config already has resources, it's a multi-config, pass it through\n if (\"resources\" in config && config.resources) {\n return provideTranslateMultiHttpLoader(config as Partial<TranslateMultiHttpLoaderConfig>);\n }\n\n // Otherwise, convert single config to multi-config\n const singleConfig = config as Partial<TranslateHttpLoaderConfig>;\n const multiConfig: Partial<TranslateMultiHttpLoaderConfig> = {\n enforceLoading: singleConfig.enforceLoading ?? false,\n useHttpBackend: singleConfig.useHttpBackend ?? false,\n failOnError: singleConfig.failOnError ?? false,\n resources: [\n {\n prefix: singleConfig.prefix ?? \"/assets/i18n/\",\n suffix: singleConfig.suffix ?? \".json\",\n },\n ],\n };\n\n return provideTranslateMultiHttpLoader(multiConfig);\n}\n\nexport function provideTranslateMultiHttpLoader(\n config: Partial<TranslateMultiHttpLoaderConfig> = {},\n): Provider[] {\n return [\n {\n provide: TRANSLATE_HTTP_LOADER_CONFIG,\n useValue: {\n resources: [\"/assets/i18n/\"],\n ...config,\n },\n },\n {\n provide: TranslateLoader,\n useClass: TranslateHttpLoader,\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}