import { Route } from './Route';
import { ModelsObject, RouteData, ContextType } from '../types';
declare class Router {
    models: ModelsObject;
    context: ContextType;
    mode: string;
    private pathHandler;
    private defaultPath;
    private isPoping;
    constructor(root: string, defaultPath: string, mode: string);
    /**
     * 通过 path 获取 Route
     * @param  {string} path
     * @return {Route}
     */
    private getRouteByPath(path);
    /**
     * 通过 path 获取 Page
     * @param  {string} path
     * @param  {number} copyIndex
     * @return {Page}
     */
    private getPageByPath(path, copyIndex);
    /**
     * 定义路由
     * @param  {RouteData}    routes
     * @return {Array<Route>}
     */
    defineRoute(routes: RouteData): Array<Route>;
    /**
     * 初始化 Router
     */
    private initRouter();
    /**
     * 开始路由
     */
    startRouting(): void;
    /**
     * 更新 URL
     * @param {string} path
     * @param {number} copyIndex
     * @param {any}    data
     */
    private updatePath(path, title, copyIndex, data, isShadow);
    /**
     * 模拟拦截用户点击返回按钮
     */
    private cancelBack();
    /**
     * 在 switchPage 之前执行，提供拦截方式
     * @param {Route}     matchedRoute
     * @param {UrlObject} urlObject
     */
    private beforeSwitchPage(matchedRoute, urlObject);
    /**
     * 切换页面，设置 context
     * @param {Route}     matchedRoute
     * @param {UrlObject} urlObject
     */
    private switchPage(matchedRoute, urlObject);
    /**
     * Page 执行跳转
     * @param {string} path
     * @param {any}    data
     */
    switchRoute(path: string, data?: any, copyIndex?: number, isShadow?: boolean): void;
    /**
     * Page pop 页面然后执行跳转
     * @param {number} popValue
     * @param {string} path
     * @param {any}    data
     */
    popAndSwitchRoute(popValue: number, path: string, data?: any, copyIndex?: number): void;
    /**
     * 设置默认插件辅助方法
     */
    initHook(): void;
}
export default Router;
