{"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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"}