import buildLocaleList from '#shared/buildLocaleList.ts'; import localeDescriptions from '~~/locale/locales.ts'; import type { LocaleCode } from '~~/locale/locales.ts'; export const getLocaleUrls = (domainBase: string | undefined): Record => { if (domainBase) { return Object.fromEntries([ ['no', domainBase.replace('{locale}', 'no')], ...localeDescriptions.map((localeDescription) => { return [localeDescription.code, domainBase.replace('{locale}', localeDescription.code)]; }), ['_', domainBase.replace('{locale}', '') .replace('/.', '/') .replace('-.', '.')], ]); } return Object.fromEntries([ ['no', 'https://no.pronouns.page'], ...localeDescriptions.map((localeDescription) => { return [localeDescription.code, localeDescription.url]; }), ]); }; export const getUrlForLocaleBase = (locale: LocaleCode, domainBase: string) => { return getLocaleUrls(domainBase)[locale]; }; export const getUrlsForAllLocalesBase = ( locale: LocaleCode, includeUnpublished: boolean = false, domainBase: string, ) => { const locales = buildLocaleList(locale, includeUnpublished); const urls = getLocaleUrls(domainBase); const codes: LocaleCode[] = ['_', ...locales.map((locale) => locale.code)]; return codes.map((code) => urls[code]); }; export const getLocaleForUrlBase = (url: URL, domainBase: string): LocaleCode | undefined => { const match = Object.entries(getLocaleUrls(domainBase)).find(([_, origin]) => url.origin === origin); if (!match) { return undefined; } return match[0] as LocaleCode; };