piral-core
Version:
The core library for creating a Piral instance.
106 lines (98 loc) • 3.21 kB
text/typescript
import type { Disposable } from './utils';
export type NavigationAction = 'POP' | 'PUSH' | 'REPLACE';
export interface NavigationLocation {
/**
* The fully qualified URL incl. the origin and base path.
*/
href: string;
/**
* The location.pathname property is a string that contains an initial "/"
* followed by the remainder of the URL up to the ?.
*/
pathname: string;
/**
* The location.search property is a string that contains an initial "?"
* followed by the key=value pairs in the query string. If there are no
* parameters, this value may be the empty string (i.e. '').
*/
search: string;
/**
* The location.hash property is a string that contains an initial "#"
* followed by fragment identifier of the URL. If there is no fragment
* identifier, this value may be the empty string (i.e. '').
*/
hash: string;
/**
* The location.state property is a user-supplied State object that is
* associated with this location. This can be a useful place to store
* any information you do not want to put in the URL, e.g. session-specific
* data.
*/
state: unknown;
/**
* The location.key property is a unique string associated with this location.
* On the initial location, this will be the string default. On all subsequent
* locations, this string will be a unique identifier.
*/
key?: string;
}
export interface NavigationListener {
(update: NavigationUpdate): void;
}
export interface NavigationBlocker {
(tx: NavigationTransition): void;
}
export interface NavigationUpdate {
action: NavigationAction;
location: NavigationLocation;
}
export interface NavigationTransition extends NavigationUpdate {
retry?(): void;
}
export interface NavigationApi {
/**
* Pushes a new location onto the history stack.
*/
push(target: string, state?: any): void;
/**
* Replaces the current location with another.
*/
replace(target: string, state?: any): void;
/**
* Changes the current index in the history stack by a given delta.
*/
go(n: number): void;
/**
* Prevents changes to the history stack from happening.
* This is useful when you want to prevent the user navigating
* away from the current page, for example when they have some
* unsaved data on the current page.
* @param blocker The function being called with a transition request.
* @returns The disposable for stopping the block.
*/
block(blocker: NavigationBlocker): Disposable;
/**
* Starts listening for location changes and calls the given
* callback with an Update when it does.
* @param listener The function being called when the route changes.
* @returns The disposable for stopping the block.
*/
listen(listener: NavigationListener): Disposable;
/**
* Gets the current navigation / application path.
*/
path: string;
/**
* Gets the current navigation path incl. search and hash parts.
*/
url: string;
/**
* The original router behind the navigation. Don't depend on this
* as the implementation is router specific and may change over time.
*/
router: any;
/**
* Gets the public path of the application.
*/
publicPath: string;
}