import type { FilledContentRelationshipField } from "../types/value/contentRelationship";
import type { PrismicDocument } from "../types/value/document";
import type { FilledLinkToWebField, LinkField } from "../types/value/link";
import type { FilledLinkToMediaField } from "../types/value/linkToMedia";
/**
 * Resolves a link to a Prismic document to a URL
 *
 * @typeParam ReturnType - Return type of your link resolver function, useful if
 *   you prefer to return a complex object
 *
 * @param linkToDocumentField - A document link field to resolve
 *
 * @returns Resolved URL
 *
 * @see Prismic link resolver documentation: {@link https://prismic.io/docs/route-resolver#link-resolver}
 */
export type LinkResolverFunction<ReturnType = string | null | undefined> = (linkToDocumentField: FilledContentRelationshipField) => ReturnType;
/**
 * Configuration that determines the output of `asLink()`.
 */
type AsLinkConfig<LinkResolverFunctionReturnType = string | null | undefined> = {
    /**
     * An optional link resolver function. Without it, you are expected to use
     * the `routes` options from the API.
     */
    linkResolver?: LinkResolverFunction<LinkResolverFunctionReturnType> | null;
};
/**
 * @deprecated Use object-style configuration instead.
 */
type AsLinkDeprecatedTupleConfig<LinkResolverFunctionReturnType = string | null | undefined> = [linkResolver?: LinkResolverFunction<LinkResolverFunctionReturnType> | null];
/**
 * The return type of `asLink()`.
 */
export type AsLinkReturnType<LinkResolverFunctionReturnType = string | null | undefined, Field extends LinkField | PrismicDocument | null | undefined = LinkField | PrismicDocument | null | undefined> = Field extends FilledLinkToWebField | FilledLinkToMediaField | FilledContentRelationshipField | PrismicDocument ? LinkResolverFunctionReturnType | string | null : null;
export declare const asLink: {
    /**
     * Resolves any type of link field or Prismic document to a URL.
     *
     * @typeParam LinkResolverFunctionReturnType - link resolver function return
     *   type
     * @typeParam Field - Link field or Prismic document to resolve to a URL
     *
     * @param linkFieldOrDocument - Any kind of link field or a document to
     *   resolve
     * @param config - Configuration that determines the output of `asLink()`
     *
     * @returns Resolved URL or, if the provided link field or document is empty,
     *   `null`
     *
     * @see Prismic link resolver documentation: {@link https://prismic.io/docs/route-resolver#link-resolver}
     * @see Prismic API `routes` options documentation: {@link https://prismic.io/docs/route-resolver}
     */
    <LinkResolverFunctionReturnType = string | null | undefined, Field extends LinkField | PrismicDocument | null | undefined = LinkField | PrismicDocument | null | undefined>(linkFieldOrDocument: Field, config?: AsLinkConfig<LinkResolverFunctionReturnType>): AsLinkReturnType<LinkResolverFunctionReturnType, Field>;
    /**
     * Resolves any type of link field or Prismic document to a URL.
     *
     * @deprecated Use object-style configuration instead.
     *
     * @typeParam LinkResolverFunctionReturnType - link resolver function return
     *   type
     * @typeParam Field - Link field or Prismic document to resolve to a URL
     *
     * @param linkFieldOrDocument - Any kind of link field or a document to
     *   resolve
     * @param linkResolver - An optional link resolver function. Without it, you
     *   are expected to use the `routes` options from the API
     *
     * @returns Resolved URL or, if the provided link field or document is empty,
     *   `null`
     *
     * @see Prismic link resolver documentation: {@link https://prismic.io/docs/route-resolver#link-resolver}
     * @see Prismic API `routes` options documentation: {@link https://prismic.io/docs/route-resolver}
     */
    <LinkResolverFunctionReturnType = string | null | undefined, Field extends LinkField | PrismicDocument | null | undefined = LinkField | PrismicDocument | null | undefined>(linkFieldOrDocument: Field, ...config: AsLinkDeprecatedTupleConfig<LinkResolverFunctionReturnType>): AsLinkReturnType<LinkResolverFunctionReturnType, Field>;
};
export {};
