/** * This file is derived from https://github.com/WICG/app-history/blob/7c0332b30746b14863f717404402bc49e497a2b2/app_history.d.ts * * The main changes here is the usage of optional types over null, and support for updateCurrent()?.then; * * null is still included in places where properties have been marked as optional */ import { AsyncEventTarget as EventTarget, EventCallback, Event, EventTargetListeners, EventDescriptor, EventTargetAddListenerOptions, } from "../event-target"; export interface NavigationEventMap { navigate: NavigateEvent; navigatesuccess: Event; navigateerror: Event & { error?: unknown }; currententrychange: NavigationCurrentEntryChangeEvent; /** * @experimental */ entrieschange: NavigationEntriesChangeEvent; } export interface NavigationResult { committed: Promise>; finished: Promise>; } export interface Navigation extends EventTarget { readonly canGoBack: boolean; readonly canGoForward: boolean; readonly currentEntry?: NavigationHistoryEntry | null; readonly transition?: NavigationTransition | null; entries(): NavigationHistoryEntry[]; updateCurrentEntry(options: NavigationUpdateCurrentOptions): unknown; updateCurrentEntry(options: NavigationUpdateCurrentOptions): void; navigate( url: string|URL, options?: NavigationNavigateOptions ): NavigationResult; reload( options?: NavigationReloadOptions ): NavigationResult; traverseTo(key: string, options?: NavigationNavigationOptions): NavigationResult; back(options?: NavigationNavigationOptions): NavigationResult; forward(options?: NavigationNavigationOptions): NavigationResult; onnavigate?: | ((this: Navigation, ev: NavigateEvent) => unknown | void) | null; onnavigatesuccess?: ((this: Navigation, ev: Event) => unknown | void) | null; onnavigateerror?: | ((this: Navigation, ev: ErrorEvent) => unknown | void) | null; oncurrententrychange?: | ((this: Navigation, ev: NavigationCurrentEntryChangeEvent) => unknown) | null; /** * @experimental */ onentrieschange?: ((this: Navigation, ev: Event) => unknown | void) | null; addEventListener>( type: K, listener: (ev: NavigationEventMap[K]) => unknown | void, options?: boolean | EventTargetAddListenerOptions ): void; addEventListener( type: string, listener: EventCallback, options?: boolean | EventTargetAddListenerOptions ): void; removeEventListener>( type: K, listener: (ev: NavigationEventMap[K]) => unknown, options?: boolean | EventListenerOptions ): void; removeEventListener( type: string, listener: EventCallback, options?: boolean | EventListenerOptions ): void; } export interface NavigationTransitionInit { navigationType: NavigationNavigationType; from: NavigationHistoryEntry; finished: Promise>; } export interface NavigationTransition extends NavigationTransitionInit { readonly navigationType: NavigationNavigationType; readonly from: NavigationHistoryEntry; readonly finished: Promise>; rollback(options?: NavigationNavigationOptions): NavigationResult; } export interface NavigationHistoryEntryEventMap { navigateto: Event; navigatefrom: Event; finish: Event; dispose: Event; } export interface NavigationHistoryEntryInit extends NavigationNavigateOptions { key?: string; url?: string | null; index: number | (() => number); sameDocument?: boolean; [EventTargetListeners]?: EventDescriptor[]; } export interface NavigationHistoryEntry> extends EventTarget { readonly key: string; readonly id: string; readonly url?: string; readonly index: number; readonly sameDocument: boolean; getState(): ST; onnavigateto?: ((ev: Event) => unknown) | null; onnavigatefrom?: ((ev: Event) => unknown) | null; onfinish?: ((ev: Event) => unknown) | null; ondispose?: ((ev: Event) => unknown) | null; addEventListener( type: K, listener: EventCallback, options?: boolean | EventTargetAddListenerOptions ): void; addEventListener( type: string, listener: EventCallback, options?: boolean | EventTargetAddListenerOptions ): void; removeEventListener( type: K, listener: EventCallback, options?: boolean | EventListenerOptions ): void; removeEventListener( type: string, listener: EventCallback, options?: boolean | EventListenerOptions ): void; } export type NavigationNavigationType = | "reload" | "push" | "replace" | "traverse"; export interface NavigationUpdateCurrentOptions { state: S; } export interface NavigationNavigationOptions { info?: unknown; } export interface NavigationNavigateOptions extends NavigationNavigationOptions { state?: S; history?: "auto"|"push"|"replace"; } export interface NavigationReloadOptions extends NavigationNavigationOptions { state?: S; } export interface NavigationCurrentEntryChangeEventInit extends EventInit { navigationType?: NavigationNavigationType; from: NavigationHistoryEntry; startTime?: number; } export interface NavigationInterceptFn { (): Promise; } /** * @deprecated */ export type NavigationInterceptCommitManualOption = "manual"; export interface NavigationInterceptOptions { handler?: NavigationInterceptFn; focusReset?: "after-transition" | "manual"; scroll?: "after-transition" | "manual"; commit?: "after-transition" | "immediate" | NavigationInterceptCommitManualOption | string; } export type NavigationIntercept = NavigationInterceptFn | NavigationInterceptOptions | Promise; export interface NavigationCurrentEntryChangeEvent extends Event<"currententrychange">, NavigationCurrentEntryChangeEventInit { readonly navigationType?: NavigationNavigationType; readonly from: NavigationHistoryEntry; } export interface NavigateEvent extends Event<"navigate"> { preventDefault(): void; readonly navigationType: NavigationNavigationType; readonly canIntercept: boolean; readonly userInitiated: boolean; readonly hashChange: boolean; readonly destination: NavigationDestination; readonly signal: AbortSignal; readonly formData?: FormData; readonly downloadRequest?: string; readonly info: unknown; intercept(options?: NavigationIntercept): void; scroll(): void; /** * @deprecated use intercept */ transitionWhile?(options?: NavigationIntercept): void; commit(): void; /** * @experimental not part of spec yet */ reportError?(reason: unknown): void; } export interface NavigateEventInit extends EventInit { navigationType?: NavigationNavigationType; canIntercept?: boolean; userInitiated?: boolean; hashChange?: boolean; destination: NavigationDestination; signal: AbortSignal; formData?: FormData; downloadRequest?: string; info?: unknown; } export interface NavigationDestination { readonly url: string; readonly key?: string; readonly id?: string; readonly index: number; readonly sameDocument: boolean; getState(): GS; getState(): S; } export interface NavigationEntriesChangeEventInit { addedEntries: NavigationHistoryEntry[] removedEntries: NavigationHistoryEntry[] updatedEntries: NavigationHistoryEntry[] } export interface NavigationEntriesChangeEvent extends Event<"entrieschange">, NavigationEntriesChangeEventInit { }