{"version":3,"file":"hug-ngx-g11n-internal.mjs","sources":["../../../projects/lib/internal/models/g11n-debug.enum.ts","../../../projects/lib/internal/main.ts","../../../projects/lib/internal/index.ts","../../../projects/lib/internal/hug-ngx-g11n-internal.ts"],"sourcesContent":["export enum G11nDebug {\n    SHOW_KEYS,\n    DUMMY_TRANSLATIONS,\n    NO_DEBUG\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { registerLocaleData } from '@angular/common';\nimport { APP_INITIALIZER, DEFAULT_CURRENCY_CODE, inject, LOCALE_ID, type Provider } from '@angular/core';\nimport { loadTranslations } from '@angular/localize';\n\nimport { G11N_OPTIONS, LOCALES } from '.';\nimport { G11nDebug, type G11nFile, type G11nLocale, type G11nOptions } from './models';\n\nconst STORAGE_KEY = 'hug-ngx-g11n:lang';\nlet QUERY_PARAM_NAME = 'lang';\nlet FORCE_DEBUG = G11nDebug.NO_DEBUG;\n\n/**\n * @internal\n */\nexport const DEFAULT_OPTIONS: G11nOptions = {\n    defaultLanguage: 'fr-CH',\n    defaultCurrency: 'CHF',\n    useNavigatorLanguage: true,\n    loadLocaleExtra: false,\n    useTranslations: true,\n    translationsPath: '/translations',\n    queryParamName: QUERY_PARAM_NAME,\n    storage: localStorage,\n    debug: G11nDebug.NO_DEBUG\n};\n\n// ---\n\nexport const currentLanguage = (): string => inject(LOCALE_ID);\n\nexport const setLanguage = (value: string): void => {\n    refreshUrl(value);\n    location.reload();\n};\n\n// --- HELPER(s) ---\n\nconst loadTranslationFile = async (filePath: string, debug: G11nDebug = G11nDebug.NO_DEBUG): Promise<void> => {\n    const debugMode = (FORCE_DEBUG !== G11nDebug.NO_DEBUG) ? FORCE_DEBUG : debug;\n    const response = await fetch(filePath);\n    const { translations } = await response.json() as G11nFile;\n    if (translations) {\n        if (debugMode === G11nDebug.SHOW_KEYS) {\n            Object.entries(translations).forEach(([key, value]) => {\n                translations[key] = `${value} (@${key})`;\n            });\n        } else if (debugMode === G11nDebug.DUMMY_TRANSLATIONS) {\n            Object.keys(translations).forEach(key => translations[key] = '-');\n        }\n        loadTranslations(translations);\n    } else {\n        throw new Error(`[@hug/ngx-g11n] No translations found in file: ${filePath}`);\n    }\n};\n\nconst refreshUrl = (localeId: string): void => {\n    const newUrl = new URL(location.href);\n    newUrl.searchParams.set(QUERY_PARAM_NAME, localeId);\n    history.pushState({}, '', newUrl); // update URL without reload\n};\n\nconst loadLanguage = async (localeId: string, locales: Record<string, G11nLocale>, options: G11nOptions): Promise<void> => {\n    // Sync language\n    document.documentElement.lang = localeId;\n    options.storage?.setItem(STORAGE_KEY, localeId);\n    refreshUrl(localeId);\n\n    // Register locale data\n    const locale = locales[localeId];\n    const localeBase = (await locale.base()).default;\n    const localeExtra = (options.loadLocaleExtra && locale.extra) ? (await locale.extra()).default : undefined;\n    registerLocaleData(localeBase, localeId, localeExtra);\n\n    // Load translations\n    if (options.useTranslations) {\n        await loadTranslationFile(`${options.translationsPath}/${localeId}.json`, options.debug);\n    }\n};\n\nconst getLocaleToUse = (locales: Record<string, G11nLocale>, options: G11nOptions): string => {\n    const localeIsSupported = (id: string): boolean => id in locales;\n\n    /**\n     * Initialize query param name\n     * We do it here as getLocaleToUse is called first in the injection tree (cf. provide: LOCALE_ID)\n     */\n    initQueryParamName(options);\n\n    // Priority 1 : query param\n    const localeIdFromUrl = new URL(location.href).searchParams.get(QUERY_PARAM_NAME);\n    if (localeIdFromUrl) {\n        if (localeIdFromUrl === 'keys') {\n            FORCE_DEBUG = G11nDebug.SHOW_KEYS;\n        } else if (localeIdFromUrl === 'dummy') {\n            FORCE_DEBUG = G11nDebug.DUMMY_TRANSLATIONS;\n        } else if (localeIsSupported(localeIdFromUrl)) {\n            return localeIdFromUrl;\n        } else {\n            console.warn(`[@hug/ngx-g11n] Locale ${localeIdFromUrl} from url was not found in given locales (will use storage if found)`);\n        }\n    }\n\n    // Priority 2 : storage\n    const localeIdFromStorage = options.storage?.getItem(STORAGE_KEY);\n    if (localeIdFromStorage) {\n        if (localeIsSupported(localeIdFromStorage)) {\n            return localeIdFromStorage;\n        } else {\n            console.warn(`[@hug/ngx-g11n] Locale ${localeIdFromStorage} from storage was not found in given locales (will use navigator if enabled)`);\n        }\n    }\n\n    // Priority 3 : browser\n    if (options.useNavigatorLanguage) {\n        if (localeIsSupported(navigator.language)) {\n            return navigator.language;\n        } else {\n            console.warn(`[@hug/ngx-g11n] Locale ${navigator.language} from browser was not found in given locales (will use default setting)`);\n        }\n    }\n\n    // Priority 4 : default setting\n    if (options.defaultLanguage && localeIsSupported(options.defaultLanguage)) {\n        return options.defaultLanguage;\n    }\n\n    throw new Error(`[@hug/ngx-g11n] Locale ${options.defaultLanguage} was not found in given locales`);\n};\n\n/**\n * We have to determine the query param name and export it globally as it will be used by the refreshUrl function, which\n * do not have access to the option object. We also have to support case-insensitive cases (ex: lang, Lang, LANG, etc.).\n * @internal\n */\nconst initQueryParamName = (options: G11nOptions): void => {\n    let value = options.queryParamName ?? DEFAULT_OPTIONS.queryParamName!;\n    // eslint-disable-next-line no-loops/no-loops\n    for (const key of new URL(location.href).searchParams.keys()) {\n        if (key.toLowerCase() === value.toLowerCase()) {\n            value = key;\n        }\n    }\n    QUERY_PARAM_NAME = value;\n};\n\n/**\n * @internal\n */\nexport const init = (): Provider[] => [\n    {\n        provide: G11N_OPTIONS,\n        useValue: DEFAULT_OPTIONS\n    },\n    {\n        provide: LOCALE_ID,\n        useFactory: getLocaleToUse,\n        deps: [LOCALES, G11N_OPTIONS]\n    },\n    {\n        provide: DEFAULT_CURRENCY_CODE,\n        useFactory: (options: G11nOptions) => options.defaultCurrency ?? DEFAULT_OPTIONS.defaultCurrency,\n        deps: [G11N_OPTIONS]\n    },\n    {\n        provide: APP_INITIALIZER,\n        useFactory: (localeId: string, locales: Record<string, G11nLocale>, options: G11nOptions) =>\n            async (): Promise<void> => {\n                await loadLanguage(localeId, locales, options);\n            },\n        deps: [LOCALE_ID, LOCALES, G11N_OPTIONS],\n        multi: true\n    }\n];\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { InjectionToken } from '@angular/core';\n\nimport type { G11nLocale, G11nOptions } from './models';\n\nexport const LOCALES = new InjectionToken<Record<string, G11nLocale>>('LOCALES');\nexport const G11N_OPTIONS = new InjectionToken<G11nOptions>('G11N_OPTIONS');\n\nexport {\n    type DefaultModuleImport,\n    type G11nLocale,\n    type G11nOptions,\n    type G11nFeature,\n    G11nDebug\n} from './models';\n\nexport { currentLanguage, setLanguage, init, DEFAULT_OPTIONS } from './main';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}