@astrolicious/i18n
Version:
Yet another i18n integration for Astro with server and client utilities, type safety and translations built-in.
37 lines (35 loc) • 1.21 kB
TypeScript
type DataEntryConstraint = {
id: string;
collection: string;
data: Record<string, unknown>;
};
type ContentEntryConstraint = DataEntryConstraint & {
slug: string;
};
type EntryConstraint = DataEntryConstraint | ContentEntryConstraint;
type ReferenceConstraint<TEntry extends EntryConstraint> = {
collection: TEntry["collection"];
} & (TEntry extends ContentEntryConstraint ? {
slug: TEntry["slug"];
} : {
id: TEntry["id"];
});
type PickKeysByValue<T, ValueType> = {
[Key in keyof T as T[Key] extends ValueType ? Key : never]: T[Key];
};
declare const handleI18nSlug: (slug: string) => {
locale: string;
slug: string;
};
declare const collectionFilters: {
byLocale: <TEntry extends EntryConstraint>(entry: TEntry, { locale }: {
locale: string;
}) => boolean;
matchingEntries: <TEntry_1 extends EntryConstraint, TKey extends keyof PickKeysByValue<TEntry_1["data"], ReferenceConstraint<TEntry_1> | undefined>>(entry: TEntry_1, { key, currentEntry, locale, defaultLocale, }: {
currentEntry: TEntry_1;
key: TKey;
locale: string;
defaultLocale: string;
}) => boolean;
};
export { collectionFilters, handleI18nSlug };