export type Params = Record; export type Query = Record; export type RouteData = { params: Params, query: Query }; export interface ComponentConstructor { new (options: { target: Node, data: any, hydrate: boolean }): Component; preload: (data: { params: Params, query: Query }) => Promise; }; export interface Component { destroy: () => void; } export type Route = { pattern: RegExp; load: () => Promise<{ default: ComponentConstructor }>; error?: string; params?: (match: RegExpExecArray) => Record; ignore?: boolean; }; export type ScrollPosition = { x: number; y: number; }; export type Target = { url: URL; route: Route; data: RouteData; };