import { OneVoteVetoController } from './utils/OneVoteVeto'; import { ProtectedEventEmitter } from './utils/ProtectedEventEmitter'; import { CounterController } from './utils/Counter'; import { Debugger } from './utils/Debugger'; interface CancelableEventRecord { event: HashChangeEvent | PopStateEvent; isCanceled?: boolean; } export interface RouterNavigation extends Partial { newUrl: string; newState: unknown; oldUrl: string; oldState: unknown; } export declare type RerouteConsumer = { accept(descriptor: RerouteDescriptor): Promise; }; export declare class RerouteDescriptor { navigation: RouterNavigation; cancelOneVoteVeto: OneVoteVetoController; domReadyCounter: CounterController; constructor(navigation: RouterNavigation, cancelOneVoteVeto: OneVoteVetoController, domReadyCounter: CounterController); toString(): string; } declare const originalReplaceState: (data: any, unused: string, url?: string | URL | null | undefined) => void; declare const originalPushState: (data: any, unused: string, url?: string | URL | null | undefined) => void; export interface RouterEvent { deadloopdetect: void; } declare class Router extends Debugger implements ProtectedEventEmitter { #private; readonly originalReplaceState: (data: any, unused: string, url?: string | URL | null | undefined) => void; readonly originalPushState: (data: any, unused: string, url?: string | URL | null | undefined) => void; readonly originalAddEventListener: { (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions | undefined): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void; } & typeof addEventListener; readonly originalRemoveEventListener: { (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | EventListenerOptions | undefined): void; (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions | undefined): void; } & typeof removeEventListener; private constructor(); on(event: T, listener: (event: RouterEvent[T]) => unknown, context?: unknown): this; once(event: T, listener: (event: RouterEvent[T]) => unknown, context?: unknown): this; off(event: T, listener: (event: RouterEvent[T]) => unknown, context?: unknown): this; get [Symbol.toStringTag](): string; protected get debugName(): string; get version(): number; /** * Get the only router instance. * @returns The only router instance. */ static getInstance(): Router; /** * Register a RerouteConsumer instance. * @param consumer The RerouteConsumer instance to be registered. * @returns If registered successfully. */ registerConsumer(consumer: RerouteConsumer): boolean; /** * Unregister a RerouteConsumer instance. * @param consumer The RerouteConsumer instance to be unregistered. * @returns If unregistered successfully. */ unregisterConsumer(consumer: RerouteConsumer): boolean; reroute(routerNavigation?: RouterNavigation): void; /** * Call the original(before patched) history.replace. * @param args Same parameters as history.replace. * @returns void */ originalReplace(...args: Parameters): ReturnType; /** * Call the original(before patched) history.push. * @param args Same parameters as history.push. * @returns void */ originalPush(...args: Parameters): ReturnType; } export type { Router }; export declare const getRouter: () => Router;