import { Hooks } from '../models/hooks'; import { ResolvedRoute, RouterResolvedRouteUnion, ResolvedRouteUnion } from './resolved'; import { MaybePromise } from './utilities'; import { Route, Routes } from './route'; import { RouterReject } from './routerReject'; import { RouterPush } from './routerPush'; import { RouterReplace } from './routerReplace'; import { Rejection, Rejections } from './rejection'; import { RouteContext, RouteContextToRejection, RouteContextToRoute } from './routeContext'; import { RouterAbort } from './routerAbort'; import { CallbackContextAbort, CallbackContextPush, CallbackContextReject, CallbackContextSuccess } from './callbackContext'; import { RouteUpdate } from './routeUpdate'; export declare function getHooks(value: Record | undefined | null): Hooks[]; export declare function combineHooks(parent: Route, child: Route): Hooks[]; export type InternalRouteHooks = { /** * Registers a route hook to be called before the route is entered. */ onBeforeRouteEnter: AddBeforeEnterHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, TRoute, Route>; /** * Registers a route hook to be called before the route is left. */ onBeforeRouteLeave: AddBeforeLeaveHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, Route, TRoute>; /** * Registers a route hook to be called before the route is updated. */ onBeforeRouteUpdate: AddBeforeUpdateHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, TRoute, Route>; /** * Registers a route hook to be called after the route is entered. */ onAfterRouteEnter: AddAfterEnterHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, TRoute, Route>; /** * Registers a route hook to be called after the route is left. */ onAfterRouteLeave: AddAfterLeaveHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, Route, TRoute>; /** * Registers a route hook to be called after the route is updated. */ onAfterRouteUpdate: AddAfterUpdateHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, TRoute, Route>; }; export type ExternalRouteHooks = { /** * Registers a route hook to be called before the route is entered. */ onBeforeRouteEnter: AddBeforeEnterHook<[TRoute] | RouteContextToRoute, RouteContextToRejection, TRoute, Route>; }; export type RejectionHooks = { /** * Registers a route hook to be called when a rejection occurs. */ onRejection: AddRejectionHook; }; export type HookTiming = 'global' | 'component'; /** * Union type for all component route hooks. */ export type ComponentHook = BeforeEnterHook | BeforeUpdateHook | BeforeLeaveHook | AfterEnterHook | AfterUpdateHook | AfterLeaveHook; /** * Registration object for adding a component route hook. */ export type ComponentHookRegistration = { lifecycle: HookLifecycle; hook: ComponentHook; depth: number; }; /** * Function to add a component route hook with depth-based condition checking. */ export type AddComponentHook = (registration: ComponentHookRegistration) => HookRemove; export type AddGlobalHooks = (hooks: Hooks) => void; /** * A function to remove a previously added route hook. */ export type HookRemove = () => void; /** * Enumerates the lifecycle events for before route hooks. */ export type BeforeHookLifecycle = 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave'; /** * Enumerates the lifecycle events for after route hooks. */ export type AfterHookLifecycle = 'onAfterRouteEnter' | 'onAfterRouteUpdate' | 'onAfterRouteLeave'; /** * Union type for all route hook lifecycle events. */ export type HookLifecycle = BeforeHookLifecycle | AfterHookLifecycle; type AfterHookContext = { reject: RouterReject; push: RouterPush; replace: RouterReplace; update: RouteUpdate>; }; type BeforeHookContext = { reject: RouterReject; push: RouterPush; replace: RouterReplace; update: RouteUpdate>; abort: RouterAbort; }; export type BeforeEnterHookContext = BeforeHookContext & { from: ResolvedRouteUnion | null; }; export type BeforeEnterHook = (to: ResolvedRouteUnion, context: BeforeEnterHookContext) => MaybePromise; export type AddBeforeEnterHook = (hook: BeforeEnterHook) => HookRemove; export type BeforeUpdateHookContext = BeforeHookContext & { from: ResolvedRouteUnion | null; }; export type BeforeUpdateHook = (to: ResolvedRouteUnion, context: BeforeUpdateHookContext) => MaybePromise; export type AddBeforeUpdateHook = (hook: BeforeUpdateHook) => HookRemove; export type BeforeLeaveHookContext = BeforeHookContext & { from: ResolvedRouteUnion; }; export type BeforeLeaveHook = (to: ResolvedRouteUnion, context: BeforeLeaveHookContext) => MaybePromise; export type AddBeforeLeaveHook = (hook: BeforeLeaveHook) => HookRemove; export type AfterEnterHookContext = AfterHookContext & { from: ResolvedRouteUnion | null; }; export type AfterEnterHook = (to: ResolvedRouteUnion, context: AfterEnterHookContext) => MaybePromise; export type AddAfterEnterHook = (hook: AfterEnterHook) => HookRemove; export type AfterUpdateHookContext = AfterHookContext & { from: ResolvedRouteUnion | null; }; export type AfterUpdateHook = (to: ResolvedRouteUnion, context: AfterUpdateHookContext) => MaybePromise; export type AddAfterUpdateHook = (hook: AfterUpdateHook) => HookRemove; export type AfterLeaveHookContext = AfterHookContext & { from: ResolvedRouteUnion; }; export type AfterLeaveHook = (to: ResolvedRouteUnion, context: AfterLeaveHookContext) => MaybePromise; export type AddAfterLeaveHook = (hook: AfterLeaveHook) => HookRemove; export type BeforeHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject | CallbackContextAbort; export type AfterHookResponse = CallbackContextSuccess | CallbackContextPush | CallbackContextReject; export type BeforeHookRunner = (context: { to: RouterResolvedRouteUnion; from: RouterResolvedRouteUnion | null; }) => Promise; export type AfterHookRunner = (context: { to: RouterResolvedRouteUnion; from: RouterResolvedRouteUnion | null; }) => Promise; export type RejectionHookContext = { to: ResolvedRouteUnion | null; from: ResolvedRouteUnion | null; }; export type RejectionHook = (rejection: TRejection, context: RejectionHookContext) => MaybePromise; export type AddRejectionHook = (hook: RejectionHook) => HookRemove; export type RejectionHookRunner = (rejection: TRejection, context: { to: RouterResolvedRouteUnion | null; from: RouterResolvedRouteUnion | null; }) => void; export type ErrorHookContext = { to: RouterResolvedRouteUnion; from: RouterResolvedRouteUnion | null; source: 'props' | 'loader' | 'hook' | 'component'; reject: RouterReject; push: RouterPush; replace: RouterReplace; update: RouteUpdate>; }; export type ErrorHook = (error: unknown, context: ErrorHookContext) => void; export type AddErrorHook = (hook: ErrorHook) => HookRemove; export type ErrorHookRunnerContext = { to: RouterResolvedRouteUnion; from: RouterResolvedRouteUnion | null; source: 'props' | 'loader' | 'hook'; }; export type ErrorHookRunner = (error: unknown, context: ErrorHookRunnerContext) => void; export {};