import type { EntrySubrouteContextData, OccurrenceContextData } from '../contracts';
import type { ApiKeyType } from '../client/types';
import type { EntrySubrouteData } from '../routing/resolvePageContent';
import type { CreateCatchAllPageOptions } from './types';
import type { ThemeOptionsForResolver } from './resolveTheme';
type ThemeOptionsSource = Partial<Pick<CreateCatchAllPageOptions, 'getTheme' | 'theme' | 'themes' | 'themeSwitch'>>;
export declare function getThemeOptionsForResolver(options: ThemeOptionsSource): ThemeOptionsForResolver;
/**
 * Detect preview mode from client's API key type.
 *
 * The client automatically detects its key type from the prefix:
 * - bld_live_sk_* / bld_test_sk_* → content key → preview: false
 * - bld_preview_sk_* → preview key → preview: true
 *
 * This eliminates the need for separate env vars and ensures
 * the preview mode always matches the API key type.
 */
export declare function detectPreviewFromClient(getClient: () => {
    getKeyType: () => ApiKeyType;
}): boolean;
/**
 * Convert URL slug segments to a path string.
 *
 * @example
 * ```
 * slugToPath(undefined)        // '/'
 * slugToPath([])               // '/'
 * slugToPath(['about'])        // '/about'
 * slugToPath(['blog', 'post']) // '/blog/post'
 * ```
 */
export declare function slugToPath(slug?: string[]): string;
/**
 * Paths that are normally owned by Next.js, browsers, crawlers, or static assets.
 *
 * Optional catch-all routes also match these URLs when the app has not provided
 * the corresponding static file. Treat them as ordinary 404s instead of trying
 * to resolve CMS content and logging noisy API errors.
 */
export declare function isReservedStaticPath(path: string): boolean;
export declare function toOccurrenceContextFromEntrySubroute(entrySubrouteData: EntrySubrouteData | null): OccurrenceContextData | null;
export declare function toEntrySubrouteContext(entrySubrouteData: EntrySubrouteData | null): EntrySubrouteContextData | null;
export declare function getEntrySubrouteMetadataOverrides(args: {
    entrySubrouteContext: EntrySubrouteContextData | null;
    canonicalPath: string;
    siteUrl: string;
}): {
    canonicalUrl?: string;
    robots?: {
        index?: boolean;
        follow?: boolean;
    };
} | undefined;
export {};
