import { Store } from '../interfaces'; export { Store }; export type Params = Record; export type Query = Record; export type RouteData = { params: Params, query: Query, path: string }; export interface ComponentConstructor { new (options: { target: Node, data: any, store: Store, hydrate: boolean }): Component; preload: (props: { params: Params, query: Query }) => Promise; }; export interface Component { set: (data: any) => void; destroy: () => void; } export type Page = { pattern: RegExp; parts: Array<{ component: () => Promise<{ default: ComponentConstructor }>; params?: (match: RegExpExecArray) => Record; }>; }; export type Manifest = { ignore: RegExp[]; root: ComponentConstructor; error: () => Promise<{ default: ComponentConstructor }>; pages: Page[] }; export type ScrollPosition = { x: number; y: number; }; export type Target = { url: URL; path: string; page: Page; match: RegExpExecArray; query: Record; }; export type Redirect = { statusCode: number; location: string; };