UNPKG

@virtualstate/app-history

Version:

Native JavaScript [app-history](https://github.com/WICG/app-history) implementation

166 lines (135 loc) 6.25 kB
/** * 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 AppHistoryEventMap { "navigate": AppHistoryNavigateEvent; "navigatesuccess": Event; "navigateerror": Event & { error?: unknown }; "currentchange": AppHistoryCurrentChangeEvent; } export interface AppHistoryResult { committed: Promise<AppHistoryEntry>; finished: Promise<AppHistoryEntry>; } export interface AppHistory extends EventTarget { readonly canGoBack: boolean; readonly canGoForward: boolean; readonly current?: AppHistoryEntry | null; readonly transition?: AppHistoryTransition | null; entries(): AppHistoryEntry[]; updateCurrent(options: AppHistoryUpdateCurrentOptions): Promise<void>; updateCurrent(options: AppHistoryUpdateCurrentOptions): void; navigate(url: string, options?: AppHistoryNavigateOptions): AppHistoryResult; reload(options?: AppHistoryReloadOptions): AppHistoryResult; goTo(key: string, options?: AppHistoryNavigationOptions): AppHistoryResult; back(options?: AppHistoryNavigationOptions): AppHistoryResult; forward(options?: AppHistoryNavigationOptions): AppHistoryResult; onnavigate?: ((this: AppHistory, ev: AppHistoryNavigateEvent) => unknown) | null; onnavigatesuccess?: ((this: AppHistory, ev: Event) => unknown) | null; onnavigateerror?: ((this: AppHistory, ev: ErrorEvent) => unknown) | null; oncurrentchange?: ((this: AppHistory, ev: AppHistoryCurrentChangeEvent) => unknown) | null; addEventListener<K extends keyof AppHistoryEventMap>(type: K, listener: (ev: AppHistoryEventMap[K]) => unknown, options?: boolean | EventTargetAddListenerOptions): void; addEventListener(type: string, listener: EventCallback, options?: boolean | EventTargetAddListenerOptions): void; removeEventListener<K extends keyof AppHistoryEventMap>(type: K, listener: (ev: AppHistoryEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventCallback, options?: boolean | EventListenerOptions): void; } export interface AppHistoryTransitionInit { navigationType: AppHistoryNavigationType; from: AppHistoryEntry; finished: Promise<AppHistoryEntry>; } export interface AppHistoryTransition extends AppHistoryTransitionInit { readonly navigationType: AppHistoryNavigationType; readonly from: AppHistoryEntry; readonly finished: Promise<AppHistoryEntry>; rollback(options?: AppHistoryNavigationOptions): AppHistoryResult; } export interface AppHistoryEntryEventMap { "navigateto": Event; "navigatefrom": Event; "finish": Event; "dispose": Event; } export interface AppHistoryEntryInit<S = unknown> extends AppHistoryNavigateOptions<S> { key?: string; url?: string | null; index: number | (() => number); sameDocument?: boolean; [EventTargetListeners]?: EventDescriptor[]; } export interface AppHistoryEntry<S = unknown> extends EventTarget { readonly key: string; readonly id: string; readonly url?: string; readonly index: number; readonly sameDocument: boolean; getState<ST extends S>(): ST; onnavigateto?: ((ev: Event) => unknown)|null; onnavigatefrom?: ((ev: Event) => unknown)|null; onfinish?: ((ev: Event) => unknown)|null; ondispose?: ((ev: Event) => unknown)|null; addEventListener<K extends keyof AppHistoryEntryEventMap>(type: K, listener: EventCallback<AppHistoryEntryEventMap[K]>, options?: boolean | EventTargetAddListenerOptions): void; addEventListener(type: string, listener: EventCallback, options?: boolean | EventTargetAddListenerOptions): void; removeEventListener<K extends keyof AppHistoryEntryEventMap>(type: K, listener: EventCallback, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventCallback, options?: boolean | EventListenerOptions): void; } export type AppHistoryNavigationType = 'reload'|'push'|'replace'|'traverse'; export interface AppHistoryUpdateCurrentOptions { state: unknown; } export interface AppHistoryNavigationOptions { info?: unknown; } export interface AppHistoryNavigateOptions<S = unknown> extends AppHistoryNavigationOptions { state?: S; replace?: boolean; } export interface AppHistoryReloadOptions<S = unknown> extends AppHistoryNavigationOptions { state?: S; } export interface AppHistoryCurrentChangeEventInit extends EventInit { navigationType?: AppHistoryNavigationType ; from?: AppHistoryEntry; startTime?: number; } export interface AppHistoryCurrentChangeEvent extends Event, AppHistoryCurrentChangeEventInit { readonly navigationType?: AppHistoryNavigationType ; readonly from?: AppHistoryEntry; transitionWhile?(newNavigationAction: Promise<unknown>): void; } export interface AppHistoryNavigateEvent extends Event { preventDefault(): void; readonly navigationType: AppHistoryNavigationType; readonly canTransition: boolean; readonly userInitiated: boolean; readonly hashChange: boolean; readonly destination: AppHistoryDestination; readonly signal: AbortSignal; readonly formData?: FormData ; readonly info: unknown; transitionWhile(newNavigationAction: Promise<unknown>): void; } export interface AppHistoryNavigateEventInit extends EventInit { navigationType?: AppHistoryNavigationType; canTransition?: boolean; userInitiated?: boolean; hashChange?: boolean; destination: AppHistoryDestination; signal: AbortSignal; formData?: FormData ; info?: unknown; } export interface AppHistoryDestination { readonly url: string; readonly key?: string; readonly id?: string ; readonly index: number; readonly sameDocument: boolean; getState<S>(): S; getState(): unknown; }