{"version":3,"file":"ngx-translate-core.mjs","sources":["../../../projects/ngx-translate/src/lib/extraction-marker.ts","../../../projects/ngx-translate/src/lib/missing-translation-handler.ts","../../../projects/ngx-translate/src/lib/translate.compiler.ts","../../../projects/ngx-translate/src/lib/translate.loader.ts","../../../projects/ngx-translate/src/lib/util.ts","../../../projects/ngx-translate/src/lib/translate.parser.ts","../../../projects/ngx-translate/src/lib/translate.store.ts","../../../projects/ngx-translate/src/lib/translate.service.ts","../../../projects/ngx-translate/src/lib/translate.directive.ts","../../../projects/ngx-translate/src/lib/translate.pipe.ts","../../../projects/ngx-translate/src/lib/translate.providers.ts","../../../projects/ngx-translate/src/lib/translate.module.ts","../../../projects/ngx-translate/src/ngx-translate-core.ts"],"sourcesContent":["export function _<T extends string | string[]>(key: T): T {\n    return key;\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { TranslateService, StrictTranslation } from \"./translate.service\";\n\nexport interface MissingTranslationHandlerParams {\n    /**\n     * the key that's missing in translation files\n     */\n    key: string;\n\n    /**\n     * an instance of the service that was unable to translate the key.\n     */\n    translateService: TranslateService;\n\n    /**\n     * interpolation params that were passed along for translating the given key.\n     */\n    interpolateParams?: object;\n}\n\nexport abstract class MissingTranslationHandler {\n    /**\n     * A function that handles missing translations.\n     *\n     * @param params context for resolving a missing translation\n     * @returns a value or an observable\n     *\n     * If it returns a value, then this value is used.\n     * If it returns an observable, the value returned by this observable will be used (except if the method was \"instant\").\n     * If it returns undefined, the key will be used as a value\n     */\n    abstract handle(\n        params: MissingTranslationHandlerParams,\n    ): StrictTranslation | Observable<StrictTranslation>;\n}\n\n/**\n * This handler is just a placeholder that does nothing; in case you don't need a missing translation handler at all\n */\n@Injectable()\nexport class DefaultMissingTranslationHandler implements MissingTranslationHandler {\n    handle(params: MissingTranslationHandlerParams): string {\n        return params.key;\n    }\n}\n","import { Injectable } from \"@angular/core\";\nimport { InterpolateFunction } from \"./translate.parser\";\nimport {\n    InterpolatableTranslation,\n    InterpolatableTranslationObject,\n    TranslationObject,\n} from \"./translate.service\";\n\nexport abstract class TranslateCompiler {\n    abstract compile(value: string, lang: string): InterpolatableTranslation;\n\n    abstract compileTranslations(\n        translations: TranslationObject,\n        lang: string,\n    ): InterpolatableTranslationObject;\n}\n\n/**\n * This compiler is just a placeholder that does nothing; in case you don't need a compiler at all\n */\n@Injectable()\nexport class TranslateNoOpCompiler extends TranslateCompiler {\n    compile(value: string, lang: string): string | InterpolateFunction {\n        void lang;\n        return value;\n    }\n\n    compileTranslations(\n        translations: TranslationObject,\n        lang: string,\n    ): InterpolatableTranslationObject {\n        void lang;\n        return translations;\n    }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { TranslationObject } from \"./translate.service\";\n\nexport abstract class TranslateLoader {\n    abstract getTranslation(lang: string): Observable<TranslationObject>;\n}\n\n/**\n * This loader is just a placeholder that does nothing; in case you don't need a loader at all\n */\n@Injectable()\nexport class TranslateNoOpLoader extends TranslateLoader {\n    getTranslation(lang: string): Observable<TranslationObject> {\n        void lang;\n        return of({});\n    }\n}\n","import { InterpolatableTranslationObject } from \"./translate.service\";\n\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `equals`.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: unknown, o2: unknown): boolean {\n    if (o1 === o2) return true;\n    if (o1 === null || o2 === null) return false;\n    if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN\n\n    const t1 = typeof o1,\n        t2 = typeof o2;\n    let length: number;\n\n    if (t1 == t2 && t1 == \"object\") {\n        if (Array.isArray(o1)) {\n            if (!Array.isArray(o2)) return false;\n            if ((length = o1.length) == o2.length) {\n                for (let key = 0; key < length; key++) {\n                    if (!equals(o1[key], o2[key])) return false;\n                }\n                return true;\n            }\n        } else {\n            if (Array.isArray(o2)) {\n                return false;\n            }\n            if (isDict(o1) && isDict(o2)) {\n                const keySet = Object.create(null);\n                for (const key in o1) {\n                    if (!equals(o1[key], o2[key])) {\n                        return false;\n                    }\n                    keySet[key] = true;\n                }\n                for (const key in o2) {\n                    if (!(key in keySet) && typeof o2[key] !== \"undefined\") {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nexport function isDefinedAndNotNull<T>(value: T | null | undefined): value is T {\n    return typeof value !== \"undefined\" && value !== null;\n}\n\nexport function isDefined<T>(value: T | null | undefined): value is T | null {\n    return value !== undefined;\n}\n\nexport function isDict(value: unknown): value is InterpolatableTranslationObject {\n    return isObject(value) && !isArray(value) && value !== null;\n}\n\nexport function isObject(value: unknown): value is Record<string, unknown> {\n    return typeof value === \"object\" && value !== null;\n}\n\nexport function isArray(value: unknown): value is unknown[] {\n    return Array.isArray(value);\n}\n\nexport function isString(value: unknown): value is string {\n    return typeof value === \"string\";\n}\n\nexport function isFunction(value: unknown): boolean {\n    return typeof value === \"function\";\n}\n\nfunction cloneDeep(value: unknown): unknown {\n    if (isArray(value)) {\n        return value.map((item) => cloneDeep(item));\n    } else if (isDict(value)) {\n        const cloned: Record<string, unknown> = {};\n        Object.keys(value).forEach((key) => {\n            cloned[key] = cloneDeep((value as Record<string, unknown>)[key]);\n        });\n        return cloned;\n    } else {\n        return value;\n    }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function mergeDeep(target: Readonly<unknown>, source: Readonly<unknown>): any {\n    if (!isObject(target)) {\n        return cloneDeep(source);\n    }\n\n    const output = cloneDeep(target);\n\n    if (isObject(output) && isObject(source)) {\n        /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n        Object.keys(source).forEach((key: any) => {\n            if (isDict(source[key])) {\n                if (key in target) {\n                    output[key] = mergeDeep(target[key] as Readonly<unknown>, source[key]);\n                } else {\n                    Object.assign(output, { [key]: source[key] });\n                }\n            } else {\n                Object.assign(output, { [key]: source[key] });\n            }\n        });\n    }\n    return output;\n}\n\n/**\n * Retrieves a value from a nested object using a dot-separated key path.\n *\n * Example usage:\n * ```ts\n * getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA'); // returns 'valueI'\n * ```\n *\n * @param target The source object from which to retrieve the value.\n * @param key Dot-separated key path specifying the value to retrieve.\n * @returns The value at the specified key path, or `undefined` if not found.\n */\nexport function getValue(target: unknown, key: string): unknown {\n    const keys = key.split(\".\");\n\n    key = \"\";\n    do {\n        key += keys.shift();\n        const isLastKey = !keys.length;\n\n        if (isDefinedAndNotNull(target)) {\n            if (\n                isDict(target) &&\n                isDefined(target[key]) &&\n                (isDict(target[key]) || isArray(target[key]) || isLastKey)\n            ) {\n                target = target[key];\n                key = \"\";\n                continue;\n            }\n\n            if (isArray(target)) {\n                const index = parseInt(key, 10);\n                if (\n                    isDefined(target[index]) &&\n                    (isDict(target[index]) || isArray(target[index]) || isLastKey)\n                ) {\n                    target = target[index];\n                    key = \"\";\n                    continue;\n                }\n            }\n        }\n\n        if (isLastKey) {\n            target = undefined;\n            continue;\n        }\n        key += \".\";\n    } while (keys.length);\n\n    return target;\n}\n\n/**\n * Sets a value on object using a dot separated key.\n * This function modifies the object in place\n * parser.setValue({a:{b:{c: \"test\"}}}, 'a.b.c', \"test2\") ==> {a:{b:{c: \"test2\"}}}\n * @param target an object\n * @param key E.g. \"a.b.c\"\n * @param value to set\n * @deprecated use insertValue() instead\n */\nexport function setValue(target: Record<string, unknown>, key: string, value: unknown): void {\n    const keys: string[] = key.split(\".\");\n    let current: Record<string, unknown> = target;\n\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n\n        if (i === keys.length - 1) {\n            current[key] = value;\n        } else {\n            current = current[key] && isDict(current[key]) ? current[key] : {};\n        }\n    }\n}\n\n/**\n * Sets a value on object using a dot separated key.\n * Returns a clone of the object without modifying it\n * parser.setValue({a:{b:{c: \"test\"}}}, 'a.b.c', \"test2\") ==> {a:{b:{c: \"test2\"}}}\n * @param target an object\n * @param key E.g. \"a.b.c\"\n * @param value to set\n */\nexport function insertValue<T>(target: Readonly<T>, key: string, value: unknown): T {\n    return mergeDeep(target, createNestedObject(key, value) as Readonly<unknown>);\n}\n\nfunction createNestedObject(\n    dotSeparatedKey: string,\n    value: unknown,\n): Record<string, unknown> | unknown {\n    return dotSeparatedKey.split(\".\").reduceRight<unknown>((acc, key) => ({ [key]: acc }), value);\n}\n","import { Injectable } from \"@angular/core\";\nimport { InterpolationParameters } from \"./translate.service\";\nimport { getValue, isString, isFunction, isArray, isObject } from \"./util\";\n\nexport type InterpolateFunction = (params?: InterpolationParameters) => string;\n\nexport abstract class TranslateParser {\n    /**\n     * Interpolates a string to replace parameters\n     * \"This is a {{ key }}\" ==> \"This is a value\", with params = { key: \"value\" }\n     * @param expr\n     * @param params\n     */\n    abstract interpolate(\n        expr: InterpolateFunction | string,\n        params?: InterpolationParameters,\n    ): string | undefined;\n}\n\n@Injectable()\nexport class TranslateDefaultParser extends TranslateParser {\n    templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n\n    public interpolate(\n        expr: InterpolateFunction | string,\n        params?: InterpolationParameters,\n    ): string | undefined {\n        if (isString(expr)) {\n            return this.interpolateString(expr as string, params);\n        } else if (isFunction(expr)) {\n            return this.interpolateFunction(expr as InterpolateFunction, params);\n        }\n        return undefined;\n    }\n\n    protected interpolateFunction(\n        fn: InterpolateFunction,\n        params?: InterpolationParameters,\n    ): string {\n        return fn(params);\n    }\n\n    protected interpolateString(expr: string, params?: InterpolationParameters): string {\n        if (!params) {\n            return expr;\n        }\n\n        return expr.replace(this.templateMatcher, (substring: string, key: string) => {\n            const replacement = this.getInterpolationReplacement(params, key);\n            return replacement !== undefined ? replacement : substring;\n        });\n    }\n\n    /**\n     * Returns the replacement for an interpolation parameter\n     * @params:\n     */\n    protected getInterpolationReplacement(\n        params: InterpolationParameters,\n        key: string,\n    ): string | undefined {\n        return this.formatValue(getValue(params, key));\n    }\n\n    /**\n     * Converts a value into a useful string representation.\n     * @param value The value to format.\n     * @returns A string representation of the value.\n     */\n    protected formatValue(value: unknown): string | undefined {\n        if (isString(value)) {\n            return value;\n        }\n        if (typeof value === \"number\" || typeof value === \"boolean\") {\n            return value.toString();\n        }\n        if (value === null) {\n            return \"null\";\n        }\n        if (isArray(value)) {\n            return value.join(\", \");\n        }\n        if (isObject(value)) {\n            if (\n                typeof value.toString === \"function\" &&\n                value.toString !== Object.prototype.toString\n            ) {\n                return value.toString();\n            }\n            return JSON.stringify(value); // Pretty-print JSON if no meaningful toString()\n        }\n\n        return undefined;\n    }\n}\n","import {\n    InterpolatableTranslationObject,\n    FallbackLangChangeEvent,\n    LangChangeEvent,\n    TranslationChangeEvent,\n    Language,\n    InterpolatableTranslation,\n} from \"./translate.service\";\nimport { Observable, Subject } from \"rxjs\";\nimport { getValue, mergeDeep } from \"./util\";\nimport { Injectable } from \"@angular/core\";\n\nexport type DeepReadonly<T> = {\n    readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];\n};\n\n@Injectable()\nexport class TranslateStore {\n    private _onTranslationChange: Subject<TranslationChangeEvent> =\n        new Subject<TranslationChangeEvent>();\n    private _onLangChange: Subject<LangChangeEvent> = new Subject<LangChangeEvent>();\n    private _onFallbackLangChange: Subject<FallbackLangChangeEvent> =\n        new Subject<FallbackLangChangeEvent>();\n\n    private fallbackLang: Language | null = null;\n    private currentLang!: Language;\n\n    private translations: Record<Language, InterpolatableTranslationObject> = {};\n    private languages: Language[] = [];\n\n    public getTranslations(language: Language): DeepReadonly<InterpolatableTranslationObject> {\n        return this.translations[language];\n    }\n\n    public setTranslations(\n        language: Language,\n        translations: InterpolatableTranslationObject,\n        extend: boolean,\n    ): void {\n        this.translations[language] =\n            extend && this.hasTranslationFor(language)\n                ? mergeDeep(this.translations[language], translations)\n                : translations;\n        this.addLanguages([language]);\n        this._onTranslationChange.next({\n            lang: language,\n            translations: this.getTranslations(language),\n        });\n    }\n\n    public getLanguages(): readonly Language[] {\n        return this.languages;\n    }\n\n    public getCurrentLang(): Language {\n        return this.currentLang;\n    }\n\n    public getFallbackLang(): Language | null {\n        return this.fallbackLang;\n    }\n\n    /**\n     * Changes the fallback lang\n     */\n    public setFallbackLang(lang: string, emitChange = true): void {\n        this.fallbackLang = lang;\n        if (emitChange) {\n            this._onFallbackLangChange.next({ lang: lang, translations: this.translations[lang] });\n        }\n    }\n\n    public setCurrentLang(lang: string, emitChange = true): void {\n        this.currentLang = lang;\n        if (emitChange) {\n            this._onLangChange.next({ lang: lang, translations: this.translations[lang] });\n        }\n    }\n\n    /**\n     * An Observable to listen to translation change events\n     * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n     *     // do something\n     * });\n     */\n    get onTranslationChange(): Observable<TranslationChangeEvent> {\n        return this._onTranslationChange.asObservable();\n    }\n\n    /**\n     * An Observable to listen to lang change events\n     * onLangChange.subscribe((params: LangChangeEvent) => {\n     *     // do something\n     * });\n     */\n    get onLangChange(): Observable<LangChangeEvent> {\n        return this._onLangChange.asObservable();\n    }\n\n    /**\n     * An Observable to listen to fallback lang change events\n     * onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {\n     *     // do something\n     * });\n     */\n    get onFallbackLangChange(): Observable<FallbackLangChangeEvent> {\n        return this._onFallbackLangChange.asObservable();\n    }\n\n    public addLanguages(languages: Language[]): void {\n        this.languages = Array.from(new Set([...this.languages, ...languages]));\n    }\n\n    public hasTranslationFor(lang: string) {\n        return typeof this.translations[lang] !== \"undefined\";\n    }\n\n    public deleteTranslations(lang: string) {\n        delete this.translations[lang];\n    }\n\n    public getTranslation(key: string): InterpolatableTranslation {\n        let text = this.getValue(this.currentLang, key);\n\n        if (\n            text === undefined &&\n            this.fallbackLang != null &&\n            this.fallbackLang !== this.currentLang\n        ) {\n            text = this.getValue(this.fallbackLang, key);\n        }\n        return text;\n    }\n\n    protected getValue(language: Language, key: string): InterpolatableTranslation {\n        return getValue(this.getTranslations(language), key) as InterpolatableTranslation;\n    }\n}\n","import { inject, Injectable, InjectionToken } from \"@angular/core\";\nimport { concat, defer, forkJoin, isObservable, Observable, of } from \"rxjs\";\nimport { concatMap, map, shareReplay, switchMap, take } from \"rxjs/operators\";\nimport { MissingTranslationHandler } from \"./missing-translation-handler\";\nimport { TranslateCompiler } from \"./translate.compiler\";\nimport { TranslateLoader } from \"./translate.loader\";\nimport { InterpolateFunction, TranslateParser } from \"./translate.parser\";\nimport { TranslateStore } from \"./translate.store\";\nimport { insertValue, isArray, isDefinedAndNotNull, isDict, isString } from \"./util\";\n\n/**\n * Configuration object for the translation service.\n *\n * Provides options to customize translation behavior, including setting the primary language,\n * specifying a fallback language, and other deprecated flags for legacy support.\n */\nexport interface TranslateServiceConfig {\n    lang?: Language;\n    fallbackLang?: Language | null;\n    extend: boolean;\n}\n\nexport const TRANSLATE_SERVICE_CONFIG = new InjectionToken<TranslateServiceConfig>(\n    \"TRANSLATE_CONFIG\",\n);\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type InterpolationParameters = Record<string, any>;\n\nexport type StrictTranslation = string | StrictTranslation[] | TranslationObject | undefined | null;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Translation = StrictTranslation | any;\n\nexport interface TranslationObject {\n    [key: string]: StrictTranslation;\n}\n\nexport type InterpolatableTranslation =\n    | string\n    | InterpolatableTranslation[]\n    | InterpolateFunction\n    | InterpolatableTranslationObject\n    | undefined\n    | null;\n\nexport interface InterpolatableTranslationObject {\n    [key: string]: InterpolatableTranslation;\n}\n\nexport type Language = string;\n\nexport interface TranslationChangeEvent {\n    translations: InterpolatableTranslationObject;\n    lang: string;\n}\n\nexport interface LangChangeEvent {\n    lang: string;\n    translations: InterpolatableTranslationObject;\n}\n\nexport interface FallbackLangChangeEvent {\n    lang: string;\n    translations: InterpolatableTranslationObject;\n}\n\n/** @deprecated use `FallbackLangChangeEvent` */\nexport type DefaultLangChangeEvent = FallbackLangChangeEvent;\n\ndeclare interface Window {\n    navigator: {\n        languages?: string[];\n        language?: string;\n        browserLanguage?: string;\n        userLanguage?: string;\n    };\n}\n\ndeclare const window: Window;\n\nconst makeObservable = <T>(value: T | Observable<T>): Observable<T> => {\n    return isObservable(value) ? value : of(value);\n};\n\nexport abstract class ITranslateService {\n    public abstract readonly onTranslationChange: Observable<TranslationChangeEvent>;\n    public abstract readonly onLangChange: Observable<LangChangeEvent>;\n    public abstract readonly onFallbackLangChange: Observable<FallbackLangChangeEvent>;\n\n    public abstract use(lang: Language): Observable<InterpolatableTranslationObject>;\n\n    public abstract setFallbackLang(lang: Language): Observable<InterpolatableTranslationObject>;\n    public abstract getFallbackLang(): Language | null;\n\n    public abstract addLangs(languages: Language[]): void;\n    public abstract getLangs(): readonly Language[];\n    public abstract reloadLang(lang: Language): Observable<InterpolatableTranslationObject>;\n    public abstract resetLang(lang: Language): void;\n\n    public abstract instant(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Translation;\n    public abstract stream(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation>;\n    public abstract getStreamOnTranslationChange(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation>;\n\n    public abstract set(\n        key: string,\n        translation: string | TranslationObject,\n        lang?: Language,\n    ): void;\n    public abstract get(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation>;\n\n    public abstract setTranslation(\n        lang: Language,\n        translations: TranslationObject,\n        shouldMerge?: boolean,\n    ): void;\n    public abstract getParsedResult(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): StrictTranslation | Observable<StrictTranslation>;\n\n    public abstract getBrowserLang(): Language | undefined;\n    public abstract getBrowserCultureLang(): Language | undefined;\n\n    /**\n     * Returns the current language\n     * @deprecated use `getCurrentLang()`\n     */\n    public abstract readonly currentLang: Language;\n\n    /**\n     * Returns a list of known languages - either loaded\n     * or set by using `addLangs()`\n     * @deprecated use `getLangs()`\n     */\n    public abstract readonly langs: readonly Language[];\n\n    /**\n     * Sets the fallback language\n     * @param lang The language to set\n     * @deprecated use `setFallbackLang(lang)`\n     */\n    public abstract setDefaultLang(lang: Language): Observable<InterpolatableTranslationObject>;\n\n    /**\n     * Gets the fallback language\n     * @deprecated use `getFallbackLang()`\n     */\n    public abstract getDefaultLang(): Language | null;\n\n    /**\n     * Returns the fallback language\n     * @deprectated use `getFallbackLang()`\n     */\n    public abstract readonly defaultLang: Language | null;\n\n    /**\n     * @deprectated use `getFallbackLang()`\n     */\n    public abstract readonly onDefaultLangChange: Observable<DefaultLangChangeEvent>;\n}\n\n@Injectable()\nexport class TranslateService implements ITranslateService {\n    private loadingTranslations!: Observable<InterpolatableTranslationObject>;\n    private pending = false;\n    private _translationRequests: Record<Language, Observable<TranslationObject>> = {};\n    private lastUseLanguage: Language | null = null;\n\n    public currentLoader = inject(TranslateLoader);\n    public compiler = inject(TranslateCompiler);\n    private parser = inject(TranslateParser);\n    private missingTranslationHandler = inject(MissingTranslationHandler);\n    private store: TranslateStore = inject(TranslateStore);\n\n    private readonly extend: boolean = false;\n\n    /**\n     * An Observable to listen to translation change events\n     * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n     *     // do something\n     * });\n     */\n    public get onTranslationChange(): Observable<TranslationChangeEvent> {\n        return this.store.onTranslationChange;\n    }\n\n    /**\n     * An Observable to listen to lang change events\n     * onLangChange.subscribe((params: LangChangeEvent) => {\n     *     // do something\n     * });\n     */\n    get onLangChange(): Observable<LangChangeEvent> {\n        return this.store.onLangChange;\n    }\n\n    /**\n     * An Observable to listen to fallback lang change events\n     * onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {\n     *     // do something\n     * });\n     */\n    get onFallbackLangChange(): Observable<FallbackLangChangeEvent> {\n        return this.store.onFallbackLangChange;\n    }\n\n    /**\n     * @deprecated Use onFallbackLangChange() instead\n     */\n    get onDefaultLangChange(): Observable<DefaultLangChangeEvent> {\n        return this.store.onFallbackLangChange;\n    }\n\n    constructor() {\n        const config: TranslateServiceConfig = {\n            extend: false,\n            fallbackLang: null,\n\n            ...inject<TranslateServiceConfig>(TRANSLATE_SERVICE_CONFIG, {\n                optional: true,\n            }),\n        };\n\n        if (config.lang) {\n            this.use(config.lang);\n        }\n\n        if (config.fallbackLang) {\n            this.setFallbackLang(config.fallbackLang);\n        }\n\n        if (config.extend) {\n            this.extend = true;\n        }\n    }\n\n    /**\n     * Sets the fallback language to use if a translation is not found in the\n     * current language\n     */\n    public setFallbackLang(lang: Language): Observable<InterpolatableTranslationObject> {\n        if (!this.getFallbackLang()) {\n            // on init set the fallbackLang immediately, but do not emit a change yet\n            this.store.setFallbackLang(lang, false);\n        }\n\n        const pending = this.loadOrExtendLanguage(lang);\n        if (isObservable(pending)) {\n            pending.pipe(take(1)).subscribe({\n                next: () => {\n                    this.store.setFallbackLang(lang);\n                },\n                error: () => {\n                    /* ignore here - user can handle it */\n                },\n            });\n            return pending;\n        }\n\n        this.store.setFallbackLang(lang);\n        return of(this.store.getTranslations(lang));\n    }\n\n    /**\n     * Changes the lang currently used\n     */\n    public use(lang: Language): Observable<InterpolatableTranslationObject> {\n        // remember the language that was called\n        // we need this with multiple fast calls to use()\n        // where translation loads might complete in random order\n        this.lastUseLanguage = lang;\n\n        if (!this.getCurrentLang()) {\n            // on init set the currentLang immediately, but do not emit a change yet\n            this.store.setCurrentLang(lang, false);\n        }\n\n        const pending = this.loadOrExtendLanguage(lang);\n        if (isObservable(pending)) {\n            pending.pipe(take(1)).subscribe({\n                next: () => {\n                    this.changeLang(lang);\n                },\n                error: () => {\n                    /* ignore here - use can handle it */\n                },\n            });\n            return pending;\n        }\n\n        this.changeLang(lang);\n        return of(this.store.getTranslations(lang));\n    }\n\n    /**\n     * Retrieves the given translations\n     */\n    private loadOrExtendLanguage(lang: Language): Observable<TranslationObject> | undefined {\n        // if this language is unavailable or extend is true, ask for it\n        if (!this.store.hasTranslationFor(lang) || this.extend) {\n            this._translationRequests[lang] =\n                this._translationRequests[lang] || this.loadAndCompileTranslations(lang);\n            return this._translationRequests[lang];\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Changes the current lang\n     */\n    private changeLang(lang: Language): void {\n        if (lang !== this.lastUseLanguage) {\n            // received new language data,\n            // but this was not the one requested last\n            return;\n        }\n\n        this.store.setCurrentLang(lang);\n    }\n\n    public getCurrentLang(): Language {\n        return this.store.getCurrentLang();\n    }\n\n    private loadAndCompileTranslations(\n        lang: Language,\n    ): Observable<InterpolatableTranslationObject> {\n        this.pending = true;\n\n        const loadingTranslations = this.currentLoader\n            .getTranslation(lang)\n            .pipe(shareReplay(1), take(1));\n\n        this.loadingTranslations = loadingTranslations.pipe(\n            map((res: TranslationObject) => this.compiler.compileTranslations(res, lang)),\n            shareReplay(1),\n            take(1),\n        );\n\n        this.loadingTranslations.subscribe({\n            next: (res: InterpolatableTranslationObject) => {\n                this.store.setTranslations(lang, res, this.extend);\n                this.pending = false;\n            },\n            error: (err) => {\n                void err;\n                this.pending = false;\n            },\n        });\n\n        return loadingTranslations;\n    }\n\n    /**\n     * Manually sets an object of translations for a given language\n     * after passing it through the compiler\n     */\n    public setTranslation(\n        lang: Language,\n        translations: TranslationObject,\n        shouldMerge = false,\n    ): void {\n        const interpolatableTranslations: InterpolatableTranslationObject =\n            this.compiler.compileTranslations(translations, lang);\n        this.store.setTranslations(lang, interpolatableTranslations, shouldMerge || this.extend);\n    }\n\n    public getLangs(): readonly Language[] {\n        return this.store.getLanguages();\n    }\n\n    /**\n     * Add available languages\n     */\n    public addLangs(languages: Language[]): void {\n        this.store.addLanguages(languages);\n    }\n\n    private getParsedResultForKey(\n        key: string,\n        interpolateParams?: InterpolationParameters,\n    ): StrictTranslation | Observable<StrictTranslation> {\n        const textToInterpolate = this.getTextToInterpolate(key);\n\n        if (isDefinedAndNotNull(textToInterpolate)) {\n            return this.runInterpolation(textToInterpolate, interpolateParams);\n        }\n\n        const res = this.missingTranslationHandler.handle({\n            key,\n            translateService: this,\n            ...(interpolateParams !== undefined && { interpolateParams }),\n        });\n\n        return res !== undefined ? res : key;\n    }\n\n    /**\n     * Gets the fallback language. null if none is defined\n     */\n    public getFallbackLang(): Language | null {\n        return this.store.getFallbackLang();\n    }\n\n    private getTextToInterpolate(key: string): InterpolatableTranslation | undefined {\n        return this.store.getTranslation(key);\n    }\n\n    private runInterpolation(\n        translations: InterpolatableTranslation,\n        interpolateParams?: InterpolationParameters,\n    ): StrictTranslation {\n        if (!isDefinedAndNotNull(translations)) {\n            return;\n        }\n\n        if (isArray(translations)) {\n            return this.runInterpolationOnArray(translations, interpolateParams);\n        }\n\n        if (isDict(translations)) {\n            return this.runInterpolationOnDict(translations, interpolateParams);\n        }\n\n        return this.parser.interpolate(translations, interpolateParams);\n    }\n\n    private runInterpolationOnArray(\n        translations: InterpolatableTranslation,\n        interpolateParams: InterpolationParameters | undefined,\n    ) {\n        return (translations as StrictTranslation[]).map((translation) =>\n            this.runInterpolation(translation, interpolateParams),\n        );\n    }\n\n    private runInterpolationOnDict(\n        translations: InterpolatableTranslationObject,\n        interpolateParams: InterpolationParameters | undefined,\n    ) {\n        const result: TranslationObject = {};\n        for (const key in translations) {\n            const res = this.runInterpolation(translations[key], interpolateParams);\n            if (res !== undefined) {\n                result[key] = res;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * Returns the parsed result of the translations\n     */\n    public getParsedResult(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): StrictTranslation | Observable<StrictTranslation> {\n        return key instanceof Array\n            ? this.getParsedResultForArray(key, interpolateParams)\n            : this.getParsedResultForKey(key, interpolateParams);\n    }\n\n    private getParsedResultForArray(\n        key: string[],\n        interpolateParams: InterpolationParameters | undefined,\n    ) {\n        const result: Record<string, StrictTranslation | Observable<StrictTranslation>> = {};\n\n        let observables = false;\n        for (const k of key) {\n            result[k] = this.getParsedResultForKey(k, interpolateParams);\n            observables = observables || isObservable(result[k]);\n        }\n\n        if (!observables) {\n            return result as TranslationObject;\n        }\n\n        const sources: Observable<StrictTranslation>[] = key.map((k) => makeObservable(result[k]));\n        return forkJoin(sources).pipe(\n            map((arr: StrictTranslation[]) => {\n                const obj: TranslationObject = {};\n                arr.forEach((value: StrictTranslation, index: number) => {\n                    obj[key[index]] = value;\n                });\n                return obj;\n            }),\n        );\n    }\n\n    /**\n     * Gets the translated value of a key (or an array of keys)\n     * @returns the translated key, or an object of translated keys\n     */\n    public get(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation> {\n        if (!isDefinedAndNotNull(key) || !key.length) {\n            throw new Error(`Parameter \"key\" is required and cannot be empty`);\n        }\n        // check if we are loading a new translation to use\n        if (this.pending) {\n            return this.loadingTranslations.pipe(\n                concatMap(() => {\n                    return makeObservable(this.getParsedResult(key, interpolateParams));\n                }),\n            );\n        }\n\n        return makeObservable(this.getParsedResult(key, interpolateParams));\n    }\n\n    /**\n     * Returns a stream of translated values of a key (or an array of keys) which updates\n     * whenever the translation changes.\n     * @returns A stream of the translated key, or an object of translated keys\n     */\n    public getStreamOnTranslationChange(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation> {\n        if (!isDefinedAndNotNull(key) || !key.length) {\n            throw new Error(`Parameter \"key\" is required and cannot be empty`);\n        }\n\n        return concat(\n            defer(() => this.get(key, interpolateParams)),\n            this.onTranslationChange.pipe(\n                switchMap(() => {\n                    const res = this.getParsedResult(key, interpolateParams);\n                    return makeObservable(res);\n                }),\n            ),\n        );\n    }\n\n    /**\n     * Returns a stream of translated values of a key (or an array of keys) which updates\n     * whenever the language changes.\n     * @returns A stream of the translated key, or an object of translated keys\n     */\n    public stream(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Observable<Translation> {\n        if (!isDefinedAndNotNull(key) || !key.length) {\n            throw new Error(`Parameter \"key\" required`);\n        }\n\n        return concat(\n            defer(() => this.get(key, interpolateParams)),\n            this.onLangChange.pipe(\n                switchMap(() => {\n                    const res = this.getParsedResult(key, interpolateParams);\n                    return makeObservable(res);\n                }),\n            ),\n        );\n    }\n\n    /**\n     * Returns a translation instantly from the internal state of loaded translation.\n     * All rules regarding the current language, the preferred language of even fallback languages\n     * will be used except any promise handling.\n     */\n    public instant(\n        key: string | string[],\n        interpolateParams?: InterpolationParameters,\n    ): Translation {\n        if (!isDefinedAndNotNull(key) || key.length === 0) {\n            throw new Error('Parameter \"key\" is required and cannot be empty');\n        }\n\n        const result = this.getParsedResult(key, interpolateParams);\n\n        if (isObservable(result)) {\n            if (Array.isArray(key)) {\n                return key.reduce((acc: Record<string, string>, currKey: string) => {\n                    acc[currKey] = currKey;\n                    return acc;\n                }, {});\n            }\n            return key;\n        }\n\n        return result;\n    }\n\n    /**\n     * Sets the translated value of a key, after compiling it\n     */\n    public set(\n        key: string,\n        translation: string | TranslationObject,\n        lang: Language = this.getCurrentLang(),\n    ): void {\n        this.store.setTranslations(\n            lang,\n            insertValue(\n                this.store.getTranslations(lang),\n                key,\n                isString(translation)\n                    ? this.compiler.compile(translation, lang)\n                    : this.compiler.compileTranslations(translation, lang),\n            ),\n            false,\n        );\n    }\n\n    /**\n     * Allows reloading the lang file from the file\n     */\n    public reloadLang(lang: Language): Observable<InterpolatableTranslationObject> {\n        this.resetLang(lang);\n        return this.loadAndCompileTranslations(lang);\n    }\n\n    /**\n     * Deletes inner translation\n     */\n    public resetLang(lang: Language): void {\n        delete this._translationRequests[lang];\n        this.store.deleteTranslations(lang);\n    }\n\n    /**\n     * Returns the language code name from the browser, e.g. \"de\"\n     */\n    public static getBrowserLang(): Language | undefined {\n        if (typeof window === \"undefined\" || !window.navigator) {\n            return undefined;\n        }\n\n        const browserLang = this.getBrowserCultureLang();\n\n        return browserLang ? browserLang.split(/[-_]/)[0] : undefined;\n    }\n\n    /**\n     * Returns the culture language code name from the browser, e.g. \"de-DE\"\n     */\n    public static getBrowserCultureLang(): Language | undefined {\n        if (typeof window === \"undefined\" || typeof window.navigator === \"undefined\") {\n            return undefined;\n        }\n\n        return window.navigator.languages\n            ? window.navigator.languages[0]\n            : window.navigator.language ||\n                  window.navigator.browserLanguage ||\n                  window.navigator.userLanguage;\n    }\n\n    public getBrowserLang(): Language | undefined {\n        return TranslateService.getBrowserLang();\n    }\n\n    public getBrowserCultureLang(): Language | undefined {\n        return TranslateService.getBrowserCultureLang();\n    }\n\n    /** Deprecations **/\n\n    /**\n     * @deprecated use `getFallbackLang()`\n     */\n    get defaultLang(): Language | null {\n        return this.getFallbackLang();\n    }\n\n    /**\n     * The lang currently used\n     * @deprecated use `getCurrentLang()`\n     */\n    get currentLang(): Language {\n        return this.store.getCurrentLang();\n    }\n\n    /**\n     * @deprecated use `getLangs()`\n     */\n    get langs(): readonly Language[] {\n        return this.store.getLanguages();\n    }\n\n    /**\n     * Sets the  language to use as a fallback\n     * @deprecated use setFallbackLanguage()\n     */\n    public setDefaultLang(lang: Language): Observable<InterpolatableTranslationObject> {\n        return this.setFallbackLang(lang);\n    }\n\n    /**\n     * Gets the fallback language used\n     * @deprecated use getFallbackLang()\n     */\n    public getDefaultLang(): Language | null {\n        return this.getFallbackLang();\n    }\n}\n","import {\n    AfterViewChecked,\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    inject,\n    Input,\n    OnDestroy,\n} from \"@angular/core\";\nimport { Subscription, isObservable } from \"rxjs\";\nimport {\n    FallbackLangChangeEvent,\n    InterpolatableTranslation,\n    LangChangeEvent,\n    TranslateService,\n    TranslationChangeEvent,\n    StrictTranslation,\n    InterpolationParameters,\n} from \"./translate.service\";\nimport { equals, isDefinedAndNotNull, isString } from \"./util\";\n\ninterface ExtendedNode extends Text {\n    originalContent: string;\n    currentValue: string;\n    lookupKey: string;\n    lastKey: string | null;\n    data: string;\n}\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: \"[translate],[ngx-translate]\",\n    standalone: true,\n})\nexport class TranslateDirective implements AfterViewChecked, OnDestroy {\n    private translateService: TranslateService = inject(TranslateService);\n    private element: ElementRef = inject(ElementRef);\n    private _ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n    private key!: string;\n    private lastParams?: InterpolationParameters;\n    private currentParams?: InterpolationParameters;\n    private readonly onLangChangeSub!: Subscription;\n    private readonly onFallbackLangChangeSub!: Subscription;\n    private readonly onTranslationChangeSub!: Subscription;\n\n    @Input() set translate(key: string) {\n        if (key) {\n            this.key = key;\n            this.checkNodes();\n        }\n    }\n\n    @Input() set translateParams(params: InterpolationParameters) {\n        if (!equals(this.currentParams, params)) {\n            this.currentParams = params;\n            this.checkNodes(true);\n        }\n    }\n\n    constructor() {\n        // subscribe to onTranslationChange event, in case the translations of the current lang change\n        if (!this.onTranslationChangeSub) {\n            this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe(\n                (event: TranslationChangeEvent) => {\n                    if (event.lang === this.translateService.currentLang) {\n                        this.checkNodes(true, event.translations);\n                    }\n                },\n            );\n        }\n\n        // subscribe to onLangChange event, in case the language changes\n        if (!this.onLangChangeSub) {\n            this.onLangChangeSub = this.translateService.onLangChange.subscribe(\n                (event: LangChangeEvent) => {\n                    this.checkNodes(true, event.translations);\n                },\n            );\n        }\n\n        // subscribe to onFallbackLangChange event, in case the fallback language changes\n        if (!this.onFallbackLangChangeSub) {\n            this.onFallbackLangChangeSub = this.translateService.onFallbackLangChange.subscribe(\n                (event: FallbackLangChangeEvent) => {\n                    void event;\n                    this.checkNodes(true);\n                },\n            );\n        }\n    }\n\n    ngAfterViewChecked() {\n        this.checkNodes();\n    }\n\n    checkNodes(forceUpdate = false, translations?: InterpolatableTranslation) {\n        let nodes: NodeList = this.element.nativeElement.childNodes;\n        // if the element is empty\n        if (!nodes.length) {\n            // we add the key as content\n            this.setContent(this.element.nativeElement, this.key);\n            nodes = this.element.nativeElement.childNodes;\n        }\n\n        nodes.forEach((n) => {\n            const node = n as ExtendedNode;\n            if (node.nodeType === 3) {\n                // node type 3 is a text node\n                let key!: string;\n                if (forceUpdate) {\n                    node.lastKey = null;\n                }\n                if (isDefinedAndNotNull(node.lookupKey)) {\n                    key = node.lookupKey;\n                } else if (this.key) {\n                    key = this.key;\n                } else {\n                    const content = this.getContent(node);\n                    const trimmedContent = content.trim();\n                    if (trimmedContent.length) {\n                        node.lookupKey = trimmedContent;\n                        // we want to use the content as a key, not the translation value\n                        if (content !== node.currentValue) {\n                            key = trimmedContent;\n                            // the content was changed from the user, we'll use it as a reference if needed\n                            node.originalContent = content || node.originalContent;\n                        } else if (node.originalContent) {\n                            // the content seems ok, but the lang has changed\n                            // the current content is the translation, not the key, use the last real content as key\n                            key = node.originalContent.trim();\n                        }\n                    }\n                }\n                this.updateValue(key, node, translations);\n            }\n        });\n    }\n\n    updateValue(key: string, node: ExtendedNode, translations?: InterpolatableTranslation) {\n        if (key) {\n            if (node.lastKey === key && this.lastParams === this.currentParams) {\n                return;\n            }\n\n            this.lastParams = this.currentParams;\n\n            const onTranslation = (res: StrictTranslation) => {\n                if (res !== key || !node.lastKey) {\n                    node.lastKey = key;\n                }\n                if (!node.originalContent) {\n                    node.originalContent = this.getContent(node);\n                }\n\n                if (isString(res)) {\n                    node.currentValue = res;\n                } else if (!isDefinedAndNotNull(res)) {\n                    node.currentValue = node.originalContent || key;\n                } else {\n                    node.currentValue = JSON.stringify(res);\n                }\n\n                // we replace in the original content to preserve spaces that we might have trimmed\n                this.setContent(\n                    node,\n                    this.key\n                        ? node.currentValue\n                        : node.originalContent.replace(key, node.currentValue),\n                );\n                this._ref.markForCheck();\n            };\n\n            if (isDefinedAndNotNull(translations)) {\n                const res = this.translateService.getParsedResult(key, this.currentParams);\n                if (isObservable(res)) {\n                    res.subscribe({ next: onTranslation });\n                } else {\n                    onTranslation(res);\n                }\n            } else {\n                this.translateService.get(key, this.currentParams).subscribe(onTranslation);\n            }\n        }\n    }\n\n    getContent(node: ExtendedNode): string {\n        return (isDefinedAndNotNull(node.textContent) ? node.textContent : node.data) as string;\n    }\n\n    setContent(node: ExtendedNode, content: string): void {\n        if (isDefinedAndNotNull(node.textContent)) {\n            node.textContent = content;\n        } else {\n            node.data = content;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.onLangChangeSub) {\n            this.onLangChangeSub.unsubscribe();\n        }\n\n        if (this.onFallbackLangChangeSub) {\n            this.onFallbackLangChangeSub.unsubscribe();\n        }\n\n        if (this.onTranslationChangeSub) {\n            this.onTranslationChangeSub.unsubscribe();\n        }\n    }\n}\n","import {\n    ChangeDetectorRef,\n    inject,\n    Injectable,\n    OnDestroy,\n    Pipe,\n    PipeTransform,\n} from \"@angular/core\";\nimport { isObservable, Subscription } from \"rxjs\";\nimport {\n    InterpolatableTranslationObject,\n    LangChangeEvent,\n    TranslateService,\n    TranslationChangeEvent,\n    StrictTranslation,\n    InterpolationParameters,\n} from \"./translate.service\";\nimport { equals, isDefinedAndNotNull, isDict, isString } from \"./util\";\n\n@Injectable()\n@Pipe({\n    name: \"translate\",\n    standalone: true,\n    pure: false, // required to update the value when the promise is resolved\n})\nexport class TranslatePipe implements PipeTransform, OnDestroy {\n    private translate: TranslateService = inject(TranslateService);\n    private _ref: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n    private value: StrictTranslation = \"\";\n    lastKey: string | null = null;\n    lastParams: InterpolationParameters[] = [];\n    onTranslationChange: Subscription | undefined;\n    onLangChange: Subscription | undefined;\n    onFallbackLangChange: Subscription | undefined;\n\n    updateValue(\n        key: string,\n        interpolateParams?: InterpolationParameters,\n        translations?: InterpolatableTranslationObject,\n    ): void {\n        const onTranslation = (res: StrictTranslation) => {\n            this.value = res !== undefined ? res : key;\n            this.lastKey = key;\n            this._ref.markForCheck();\n        };\n        if (translations) {\n            const res = this.translate.getParsedResult(key, interpolateParams);\n            if (isObservable(res)) {\n                res.subscribe(onTranslation);\n            } else {\n                onTranslation(res);\n            }\n        }\n        this.translate.get(key, interpolateParams).subscribe(onTranslation);\n    }\n\n    /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n    transform(query: string | undefined | null, ...args: any[]): any {\n        if (!query || !query.length) {\n            return query;\n        }\n\n        // if we ask another time for the same key, return the last value\n        if (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n            return this.value;\n        }\n\n        let interpolateParams: InterpolationParameters | undefined = undefined;\n        if (isDefinedAndNotNull(args[0]) && args.length) {\n            if (isString(args[0]) && args[0].length) {\n                // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n                // this is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n                const validArgs: string = args[0]\n                    .replace(/(')?([a-zA-Z0-9_]+)(')?(\\s)?:/g, '\"$2\":')\n                    .replace(/:(\\s)?(')(.*?)(')/g, ':\"$3\"');\n                try {\n                    interpolateParams = JSON.parse(validArgs);\n                } catch (e) {\n                    void e;\n                    throw new SyntaxError(\n                        `Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`,\n                    );\n                }\n            } else if (isDict(args[0])) {\n                interpolateParams = args[0];\n            }\n        }\n\n        // store the query in case it changes\n        this.lastKey = query;\n\n        // store the params in case they change\n        this.lastParams = args;\n\n        // set the value\n        this.updateValue(query, interpolateParams);\n\n        // if there is a subscription to onLangChange, clean it\n        this._dispose();\n\n        // subscribe to onTranslationChange event, in case the translations change\n        if (!this.onTranslationChange) {\n            this.onTranslationChange = this.translate.onTranslationChange.subscribe(\n                (event: TranslationChangeEvent) => {\n                    if (\n                        (this.lastKey && event.lang === this.translate.getCurrentLang()) ||\n                        event.lang === this.translate.getFallbackLang()\n                    ) {\n                        this.lastKey = null;\n                        this.updateValue(query, interpolateParams, event.translations);\n                    }\n                },\n            );\n        }\n\n        // subscribe to onLangChange event, in case the language changes\n        if (!this.onLangChange) {\n            this.onLangChange = this.translate.onLangChange.subscribe((event: LangChangeEvent) => {\n                if (this.lastKey) {\n                    this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n                    this.updateValue(query, interpolateParams, event.translations);\n                }\n            });\n        }\n\n        // subscribe to onDefaultLangChange event, in case the fallback language changes\n        if (!this.onFallbackLangChange) {\n            this.onFallbackLangChange = this.translate.onFallbackLangChange.subscribe(() => {\n                if (this.lastKey) {\n                    this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n                    this.updateValue(query, interpolateParams);\n                }\n            });\n        }\n\n        return this.value;\n    }\n\n    /**\n     * Clean any existing subscription to change events\n     */\n    private _dispose(): void {\n        if (typeof this.onTranslationChange !== \"undefined\") {\n            this.onTranslationChange.unsubscribe();\n            this.onTranslationChange = undefined;\n        }\n        if (typeof this.onLangChange !== \"undefined\") {\n            this.onLangChange.unsubscribe();\n            this.onLangChange = undefined;\n        }\n        if (typeof this.onFallbackLangChange !== \"undefined\") {\n            this.onFallbackLangChange.unsubscribe();\n            this.onFallbackLangChange = undefined;\n        }\n    }\n\n    ngOnDestroy(): void {\n        this._dispose();\n    }\n}\n","import {\n    Language,\n    TRANSLATE_SERVICE_CONFIG,\n    TranslateService,\n    TranslateServiceConfig,\n} from \"./translate.service\";\nimport { ClassProvider, Provider, Type } from \"@angular/core\";\nimport { TranslateNoOpLoader, TranslateLoader } from \"./translate.loader\";\nimport { TranslateCompiler, TranslateNoOpCompiler } from \"./translate.compiler\";\nimport { TranslateDefaultParser, TranslateParser } from \"./translate.parser\";\nimport {\n    DefaultMissingTranslationHandler,\n    MissingTranslationHandler,\n} from \"./missing-translation-handler\";\nimport { TranslateStore } from \"./translate.store\";\n\nexport interface TranslateProviders {\n    loader?: Provider;\n    compiler?: Provider;\n    parser?: Provider;\n    missingTranslationHandler?: Provider;\n}\n\nexport interface ChildTranslateServiceConfig extends Partial<TranslateProviders> {\n    extend?: boolean;\n}\n\nexport interface RootTranslateServiceConfig extends ChildTranslateServiceConfig {\n    fallbackLang?: Language;\n    lang?: Language;\n\n    /* @deprecated use `fallbackLang` */\n    useDefaultLang?: boolean;\n    /* @deprecated use `fallbackLang` */\n    defaultLanguage?: Language;\n}\n\nexport function provideTranslateLoader(loader: Type<TranslateLoader>): ClassProvider {\n    return { provide: TranslateLoader, useClass: loader };\n}\n\nexport function provideTranslateCompiler(compiler: Type<TranslateCompiler>): ClassProvider {\n    return { provide: TranslateCompiler, useClass: compiler };\n}\n\nexport function provideTranslateParser(parser: Type<TranslateParser>): ClassProvider {\n    return { provide: TranslateParser, useClass: parser };\n}\n\nexport function provideMissingTranslationHandler(\n    handler: Type<MissingTranslationHandler>,\n): ClassProvider {\n    return { provide: MissingTranslationHandler, useClass: handler };\n}\n\nexport function provideTranslateService(config: RootTranslateServiceConfig = {}): Provider[] {\n    return defaultProviders(\n        {\n            compiler: provideTranslateCompiler(TranslateNoOpCompiler),\n            parser: provideTranslateParser(TranslateDefaultParser),\n            loader: provideTranslateLoader(TranslateNoOpLoader),\n            missingTranslationHandler: provideMissingTranslationHandler(\n                DefaultMissingTranslationHandler,\n            ),\n            ...config,\n        },\n        true,\n    );\n}\n\nexport function provideChildTranslateService(config: ChildTranslateServiceConfig = {}): Provider[] {\n    return defaultProviders({ extend: true, ...config }, false);\n}\n\nexport function defaultProviders(\n    config: RootTranslateServiceConfig = {},\n    provideStore: boolean,\n): Provider[] {\n    const providers: Provider[] = [];\n\n    if (config.loader) {\n        providers.push(config.loader);\n    }\n    if (config.compiler) {\n        providers.push(config.compiler);\n    }\n    if (config.parser) {\n        providers.push(config.parser);\n    }\n    if (config.missingTranslationHandler) {\n        providers.push(config.missingTranslationHandler);\n    }\n\n    if (provideStore) {\n        providers.push(TranslateStore);\n    }\n\n    if (config.useDefaultLang || config.defaultLanguage) {\n        console.warn(\n            \"The `useDefaultLang` and `defaultLanguage` options are deprecated. Please use `fallbackLang` instead.\",\n        );\n\n        if (config.useDefaultLang === true && config.defaultLanguage) {\n            config.fallbackLang = config.defaultLanguage;\n        }\n    }\n\n    const serviceConfig: TranslateServiceConfig = {\n        fallbackLang: config.fallbackLang ?? null,\n        lang: config.lang,\n        extend: config.extend ?? false,\n    };\n\n    providers.push({\n        provide: TRANSLATE_SERVICE_CONFIG,\n        useValue: serviceConfig,\n    });\n\n    providers.push({\n        provide: TranslateService,\n        useClass: TranslateService,\n        deps: [\n            TranslateStore,\n            TranslateLoader,\n            TranslateCompiler,\n            TranslateParser,\n            MissingTranslationHandler,\n            TRANSLATE_SERVICE_CONFIG,\n        ],\n    });\n\n    return providers;\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { TranslatePipe } from \"./translate.pipe\";\nimport { TranslateDirective } from \"./translate.directive\";\nimport {\n    defaultProviders,\n    provideTranslateCompiler,\n    provideTranslateLoader,\n    provideMissingTranslationHandler,\n    provideTranslateParser,\n    TranslateProviders,\n} from \"./translate.providers\";\nimport { TranslateNoOpCompiler } from \"./translate.compiler\";\nimport { TranslateDefaultParser } from \"./translate.parser\";\nimport { TranslateNoOpLoader } from \"./translate.loader\";\nimport { DefaultMissingTranslationHandler } from \"./missing-translation-handler\";\nimport { Language } from \"./translate.service\";\n\nexport interface TranslateModuleConfig extends TranslateProviders {\n    isolate?: boolean;\n    extend?: boolean;\n    fallbackLang?: Language;\n    lang?: Language;\n\n    /** @deprecated use fallbackLang */\n    defaultLanguage?: string;\n    /** @deprecated use fallbackLang */\n    useDefaultLang?: boolean;\n}\n\n@NgModule({\n    imports: [TranslatePipe, TranslateDirective],\n    exports: [TranslatePipe, TranslateDirective],\n})\nexport class TranslateModule {\n    /**\n     * Use this method in your root module to provide the TranslateService\n     */\n    static forRoot(config: TranslateModuleConfig = {}): ModuleWithProviders<TranslateModule> {\n        return {\n            ngModule: TranslateModule,\n            providers: [\n                ...defaultProviders(\n                    {\n                        compiler: provideTranslateCompiler(TranslateNoOpCompiler),\n                        parser: provideTranslateParser(TranslateDefaultParser),\n                        loader: provideTranslateLoader(TranslateNoOpLoader),\n                        missingTranslationHandler: provideMissingTranslationHandler(\n                            DefaultMissingTranslationHandler,\n                        ),\n                        ...config,\n                    },\n                    true,\n                ),\n            ],\n        };\n    }\n\n    /**\n     * Use this method in your other (non-root) modules to import the directive/pipe\n     */\n    static forChild(config: TranslateModuleConfig = {}): ModuleWithProviders<TranslateModule> {\n        return {\n            ngModule: TranslateModule,\n            providers: [...defaultProviders(config, config.isolate ?? false)],\n        };\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}