const e=class e{static instance;translationsCache=new Map;manifestCache=new Map;static BASE_URL=`https://i18n.oneweb.mercedes-benz.com`;static BASE_PHRASE_URL=`${this.BASE_URL}/projects/`;static isBrowser=typeof window<`u`;constructor(){}static getInstance(){return e.instance||=new e,e.instance}async fetchCrowdinManifest(t){if(e.isBrowser&&this.manifestCache.has(t))return this.manifestCache.get(t);let n=`${e.BASE_URL}/${t}/manifest.json`;try{let r=await fetch(n);if(!r.ok)throw Error(`Error fetching Crowdin manifest: ${r.statusText}`);let i=await r.json(),a={files:i.files,languages:i.languages,custom_languages:i.custom_languages,timestamp:i.timestamp,content:i.content};return e.isBrowser&&this.manifestCache.set(t,a),a}catch(e){throw console.error(e),e}}async buildCrowdinTranslationUrl(t,n,r){let i=new URL(`${e.BASE_URL}/${n}${t}`);return i.searchParams.append(`timestamp`,r),i}async fetchCrowdinTranslation(t,n,r){if(!e.isBrowser){let e=await this.buildCrowdinTranslationUrl(t,n,r);return await this.fetchTranslation(e)}this.translationsCache.has(n)||this.translationsCache.set(n,{});let i=this.translationsCache.get(n);if(!i[t]){let e=await this.buildCrowdinTranslationUrl(t,n,r);i[t]=await this.fetchTranslation(e)}return i[t]}buildPhraseTranslationUrl(t,n,r,i){let a=new URL(`${e.BASE_PHRASE_URL}${n}/locales/${t}/download`);return a.searchParams.append(`file_format`,r),i&&Object.keys(i).forEach(e=>{a.searchParams.append(e,i[e])}),a}async fetchPhraseTranslation(t,n,r,i){if(!e.isBrowser){let e=this.buildPhraseTranslationUrl(t,n,r,i);return await this.fetchTranslation(e)}this.translationsCache.has(n)||this.translationsCache.set(n,{});let a=this.translationsCache.get(n);if(!a[t]){let e=this.buildPhraseTranslationUrl(t,n,r,i);a[t]=await this.fetchTranslation(e)}return a[t]}async fetchTranslation(e){try{let t=await fetch(e);if(!t.ok)throw Error(`Error fetching translation: ${t.statusText}`);return await t.json()}catch(e){throw console.error(`Error fetching translation: ${e}`),e}}async getFileTranslations(e,t,n){let{content:r,timestamp:i}=await this.fetchCrowdinManifest(t);e=Array.isArray(e)?e:[e];let a={};for(let o of e){if(r&&!Object.values(r).some(e=>e.includes(o)))throw Error(`File ${o} not found in the manifest`);let e=await this.fetchCrowdinTranslation(o,t,i);n?.merge?a={...a,...e}:a[o]=e}return a}async getLocaleTranslations(e,t,n,r){if(n)return this.fetchPhraseTranslation(e,t,n,r);let{languages:i,content:a,custom_languages:o,timestamp:s}=await this.fetchCrowdinManifest(t),c=this.findMatchingLocale(e,[...i,...o?Object.keys(o):[]]),l=a[c];if(l.length===0)throw Error(`No translation files found for locale ${c}`);let u={};return await Promise.all(l.map(async e=>{let n=await this.fetchCrowdinTranslation(e,t,s);u={...u,...n}})),u}findMatchingLocale(e,t){if(t.includes(e))return e;if(t.includes(e.toLowerCase()))return e.toLowerCase();let[n]=e.split(`-`),r=t.find(e=>e===n);if(!r)throw Error(`Locale ${e} not found in the manifest. Available languages: ${t.join(`, `)}`);return r}}.getInstance();function t(t,n,r,i){return e.getLocaleTranslations(t,n,r,i)}function n(t,n,r){return e.getFileTranslations(t,n,r)}export{n as getFileTranslation,t as getTranslation};
//# sourceMappingURL=index.mjs.map