export declare namespace BatchRouterTypes {
    type NextQueryValue = string | string[] | undefined;
    type WriteQueryValue = NextQueryValue | number | boolean | (string | number | boolean)[] | null;
    type NextQueryObject = Record<string, NextQueryValue>;
    type WriteQueryObject = Record<string, WriteQueryValue>;
    type SetQueryAction = WriteQueryObject | ((prev: NextQueryObject) => WriteQueryObject);
    type QueueItem = {
        query: SetQueryAction;
        asQuery: SetQueryAction;
        hash?: string | null;
    };
    type PartialUrlObject = {
        query?: SetQueryAction;
        hash?: string | null;
    };
    type TransitionOptions = {
        shallow?: boolean;
        locale?: string;
        scroll?: boolean;
    };
}
/**
 * Subset of next/router that allows for multiple consecutive query string changes by batch updating and functinoal update.
 *
 * `push` and `replace` calls are merged together and applied at the start of the next render cycle.
 *
 * `push` and `replace` calls only take `query` object and `hash` of the route.
 * Use original next/router for changing pathname or inserting query as a string.
 *
 * Unlike next/router, it preserves hash unless overwritten as `null`.
 */
export declare type BatchRouter = Pick<BatchRouterCore, "push" | "replace">;
export declare class BatchRouterCore implements BatchRouter {
    private forceRender;
    private queue;
    private pushHistory;
    private shallow;
    private scroll;
    private locale;
    private renderTriggered;
    private routePromise?;
    private resolveRoutePromise?;
    constructor(forceRender: () => void);
    push(url: BatchRouterTypes.PartialUrlObject, as?: BatchRouterTypes.PartialUrlObject, options?: BatchRouterTypes.TransitionOptions): Promise<boolean | undefined>;
    replace(url: BatchRouterTypes.PartialUrlObject, as?: BatchRouterTypes.PartialUrlObject, options?: BatchRouterTypes.TransitionOptions): Promise<boolean | undefined>;
    private change;
    flush(): Promise<boolean | undefined>;
    private clear;
}
