import type { I18nConfig } from './types.js'; /** * Minimal shape the path builder needs from a document. * * The plugin doesn't know the client's Pages type, so it depends only on * this contract: a map of locale code → slug for that locale. The template * supplies it (e.g. by reading the localized slug field across locales). */ export type LocalizedSlugs = Record; type BuildPathArgs = { config: I18nConfig; /** * Slug that represents the site root (served at /{locale} with no trailing * segment). Defaults to 'home'. Matched against the slug in the target locale. */ homeSlug?: string; /** Target locale to build the path for */ locale: string; /** * Localized segment the document lives under, e.g. * `{ pl: 'artykuly', en: 'articles' }` → /pl/artykuly/moj-post. * * These are the slugs of the collection's archive page, so the prefix is * whatever an editor named that page — and it differs per locale for free. * A document under a prefix is never the home page, so homeSlug is ignored. */ prefix?: LocalizedSlugs; /** slug per locale, e.g. { pl: 'strona-glowna', en: 'home' } */ slugs: LocalizedSlugs; }; /** * Builds a locale-prefixed path for a document in a target locale. * * Always prefixes the locale: /{locale} or /{locale}/{slug}. The home slug * collapses to the locale root. Returns undefined if the document has no slug * in the target locale (caller decides fallback behavior). * * @example * buildLocalizedPath({ slugs: { pl: 'strona-glowna', en: 'home' }, locale: 'en', config }) * // → '/en' (home slug collapses to root) * * buildLocalizedPath({ slugs: { pl: 'o-nas', en: 'about' }, locale: 'en', config }) * // → '/en/about' * * buildLocalizedPath({ * slugs: { pl: 'moj-post', en: 'my-post' }, * prefix: { pl: 'artykuly', en: 'articles' }, * locale: 'en', * config, * }) * // → '/en/articles/my-post' */ export declare function buildLocalizedPath({ config, homeSlug, locale, prefix, slugs, }: BuildPathArgs): string | undefined; type SwitchLocaleArgs = { config: I18nConfig; homeSlug?: string; prefix?: LocalizedSlugs; slugs: LocalizedSlugs; targetLocale: string; }; /** * Resolves the equivalent path for the same document in a different locale — * the language-switcher use case (/pl/strona-glowna → /en/home). * * Never dead-ends on a 404. When the document has no slug in the target locale, * falls back to the archive it belongs to (/en/articles) if there is one, and * to the locale root otherwise — the closest place the visitor would want. */ export declare function switchLocalePath({ config, homeSlug, prefix, slugs, targetLocale, }: SwitchLocaleArgs): string; export {};