PronounsPage/shared/domain.ts

48 lines
1.7 KiB
TypeScript

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<LocaleCode, string> => {
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;
};