export declare function isUnsafeKey(key: string): boolean; export declare function isComponentNode(value: unknown): value is { type: string; props: Record; }; /** Strip a trailing slash, defaulting empty string to "/". */ export declare function stripTrailingSlash(path: string): string; export declare function trimTrailingSlashes(path: string): string; export declare const PATH_REGEX: RegExp; /** * True when the path is one of the reserved app segments or lives beneath one. * Matches whole segments: "/p1" and "/p1/edit" are reserved, but a page slug * that merely starts with the same letters ("/p1-launch", "/puckish") is not. */ export declare function isReservedPath(normalized: string): boolean; /** * True for paths whose last segment ends in a known static-asset extension. * Page slugs may contain dots, so this matches an explicit extension list * rather than treating any dot as an extension. */ export declare function hasStaticAssetExtension(path: string): boolean; /** * Coerce unknown input to a trimmed, trailing-slash-stripped path, * then validate format and reject reserved prefixes and static-asset paths. * Returns `null` when the input is invalid, reserved, or unrenderable. */ export declare function normalizePath(path: unknown): string | null; /** * Add the leading slash that page paths carry everywhere they are validated. * Document records identify a page by its slug alone ("blog"), so a path read * off one has to be converted before it can be used as a page path. */ export declare function ensureLeadingSlash(path: string): string;