import { HookRemove } from './hooks'; import { Routes } from './route'; import { Rejections } from './rejection'; import { Hooks } from '../models/hooks'; import { ResolvedRoute } from './resolved'; import { RouterReject } from './routerReject'; import { RouterPush } from './routerPush'; import { RouterReplace } from './routerReplace'; import { CallbackContextAbort } from '../services/createRouterCallbackContext'; import { MaybePromise } from './utilities'; export type EmptyRouterPlugin = RouterPlugin<[], []>; export declare const IS_ROUTER_PLUGIN_SYMBOL: unique symbol; export declare function isRouterPlugin(value: unknown): value is RouterPlugin & RouterPluginInternal; export type RouterPluginInternal = { [IS_ROUTER_PLUGIN_SYMBOL]: true; hooks: Hooks; }; export type CreateRouterPluginOptions = { routes?: TRoutes; rejections?: TRejections; }; export type RouterPlugin = { /** * The routes supplied by the plugin. */ routes: TRoutes; /** * The rejections supplied by the plugin. */ rejections: TRejections; }; type PluginBeforeRouteHookContext = { from: ResolvedRoute | null; reject: RouterReject; push: RouterPush; replace: RouterReplace; abort: CallbackContextAbort; }; type PluginAfterRouteHookContext = { from: ResolvedRoute | null; reject: RouterReject; push: RouterPush; replace: RouterReplace; }; export type PluginBeforeRouteHook = (to: ResolvedRoute, context: PluginBeforeRouteHookContext) => MaybePromise; export type PluginAfterRouteHook = (to: ResolvedRoute, context: PluginAfterRouteHookContext) => MaybePromise; type AddPluginBeforeRouteHook = (hook: PluginBeforeRouteHook) => HookRemove; type AddPluginAfterRouteHook = (hook: PluginAfterRouteHook) => HookRemove; export type PluginErrorHookContext = { to: ResolvedRoute; from: ResolvedRoute | null; source: 'props' | 'loader' | 'hook' | 'component'; reject: RouterReject; push: RouterPush; replace: RouterReplace; }; export type PluginErrorHook = (error: unknown, context: PluginErrorHookContext) => void; export type AddPluginErrorHook = (hook: PluginErrorHook) => HookRemove; export type PluginRouteHooks = { /** * Registers a global hook to be called before a route is entered. */ onBeforeRouteEnter: AddPluginBeforeRouteHook; /** * Registers a global hook to be called before a route is left. */ onBeforeRouteLeave: AddPluginBeforeRouteHook; /** * Registers a global hook to be called before a route is updated. */ onBeforeRouteUpdate: AddPluginBeforeRouteHook; /** * Registers a global hook to be called after a route is entered. */ onAfterRouteEnter: AddPluginAfterRouteHook; /** * Registers a global hook to be called after a route is left. */ onAfterRouteLeave: AddPluginAfterRouteHook; /** * Registers a global hook to be called after a route is updated. */ onAfterRouteUpdate: AddPluginAfterRouteHook; /** * Registers a global hook to be called when an error occurs. */ onError: AddPluginErrorHook; }; export {};