Skip to main content

Class: ClientRouter

Defined in: packages/core/src/router/ClientRouter.ts:43

The client-side implementation of the Router interface.

Extends​

Constructors​

Constructor​

new ClientRouter(pageManager, factory, dispatcher, window, settings): ClientRouter

Defined in: packages/core/src/router/ClientRouter.ts:81

Initializes the client-side router.

Parameters​

pageManager​

PageManager

The page manager handling UI rendering, and transitions between pages if at the client side.

factory​

RouteFactory

Factory for routes.

dispatcher​

Dispatcher

Dispatcher fires events to app.

window​

Window

The current global client-side APIs provider.

settings​

$Router settings.

number |

{ isSPARouted?: (url, action?) => boolean; middlewareTimeout?: number; }

$Router settings.

isSPARouted?​

(url, action?) => boolean

middlewareTimeout?​

number

Middleware execution timeout, see https://imajs.io/basic-features/routing/middlewares#execution-timeout for more information. [ms]

| undefined

Returns​

ClientRouter

Overrides​

AbstractRouter.constructor

Properties​

_currentlyRoutedPath​

protected _currentlyRoutedPath: string = ''

Defined in: packages/core/src/router/AbstractRouter.ts:95

Inherited from​

AbstractRouter._currentlyRoutedPath


_currentMiddlewareId​

protected _currentMiddlewareId: number = 0

Defined in: packages/core/src/router/AbstractRouter.ts:94

Middleware ID counter which is used to auto-generate unique middleware names when adding them to routeHandlers map.

Inherited from​

AbstractRouter._currentMiddlewareId


_dispatcher​

protected _dispatcher: Dispatcher

Defined in: packages/core/src/router/AbstractRouter.ts:64

Dispatcher fires events to app.

Inherited from​

AbstractRouter._dispatcher


_factory​

protected _factory: RouteFactory

Defined in: packages/core/src/router/AbstractRouter.ts:60

Factory for routes.

Inherited from​

AbstractRouter._factory


_host​

protected _host: string = ''

Defined in: packages/core/src/router/AbstractRouter.ts:73

The application's host.

Inherited from​

AbstractRouter._host


_isSPARouted​

protected _isSPARouted: (url, action?) => boolean | undefined

Defined in: packages/core/src/router/AbstractRouter.ts:97

Inherited from​

AbstractRouter._isSPARouted


_languagePartPath​

protected _languagePartPath: string = ''

Defined in: packages/core/src/router/AbstractRouter.ts:82

The URL path fragment used as a suffix to the _root field that specifies the current language.

Inherited from​

AbstractRouter._languagePartPath


_middlewareTimeout​

protected _middlewareTimeout: number

Defined in: packages/core/src/router/AbstractRouter.ts:96

Inherited from​

AbstractRouter._middlewareTimeout


_mountedPromise​

protected _mountedPromise: { promise: Promise<void>; reject: () => void; resolve: () => void; } | null = null

Defined in: packages/core/src/router/ClientRouter.ts:55

Mounted promise to prevent routing until app is fully mounted.


_pageManager​

protected _pageManager: PageManager

Defined in: packages/core/src/router/AbstractRouter.ts:56

The page manager handling UI rendering, and transitions between pages if at the client side.

Inherited from​

AbstractRouter._pageManager


_protocol​

protected _protocol: string = ''

Defined in: packages/core/src/router/AbstractRouter.ts:69

The current protocol used to access the application, terminated by a colon (for example https:).

Inherited from​

AbstractRouter._protocol


_root​

protected _root: string = ''

Defined in: packages/core/src/router/AbstractRouter.ts:77

The URL path pointing to the application's root.

Inherited from​

AbstractRouter._root


_routeHandlers​

protected _routeHandlers: Map<string, AbstractRoute<string | RoutePathExpression> | RouterMiddleware>

Defined in: packages/core/src/router/AbstractRouter.ts:86

Storage of all known routes and middlewares. The key are their names.

Inherited from​

AbstractRouter._routeHandlers


_routerRoots​

protected _routerRoots: EventTarget[] = []

Defined in: packages/core/src/router/ClientRouter.ts:50


_window​

protected _window: Window

Defined in: packages/core/src/router/ClientRouter.ts:44

Accessors​

$dependencies​

Get Signature​

get static $dependencies(): Dependencies

Defined in: packages/core/src/router/ClientRouter.ts:61

Returns​

Dependencies

Methods​

_boundHandleClick()​

protected _boundHandleClick(event): void

Defined in: packages/core/src/router/ClientRouter.ts:45

Parameters​

event​

Event

Returns​

void


_boundHandlePopState()​

protected _boundHandlePopState(event): void

Defined in: packages/core/src/router/ClientRouter.ts:47

Parameters​

event​

Event

Returns​

void


_extractRoutePath()​

protected _extractRoutePath(path): string

Defined in: packages/core/src/router/AbstractRouter.ts:546

Strips the URL path part that points to the application's root (base URL) from the provided path.

Parameters​

path​

string

Relative or absolute URL path.

Returns​

string

URL path relative to the application's base URL.

Inherited from​

AbstractRouter._extractRoutePath


_getAnchorElement()​

_getAnchorElement(target): Node

Defined in: packages/core/src/router/ClientRouter.ts:439

The method determines whether an anchor element or a child of an anchor element has been clicked, and if it was, the method returns anchor element else null.

Parameters​

target​

Node

Returns​

Node


_getCurrentlyRoutedPath()​

_getCurrentlyRoutedPath(): string

Defined in: packages/core/src/router/AbstractRouter.ts:684

Returns path that is stored in private property when a route method is called.

Returns​

string

Inherited from​

AbstractRouter._getCurrentlyRoutedPath


_getMiddlewaresForRoute()​

_getMiddlewaresForRoute(routeName): RouterMiddleware[]

Defined in: packages/core/src/router/AbstractRouter.ts:662

Returns middlewares preceding given route name.

Parameters​

routeName​

string

Returns​

RouterMiddleware[]

Inherited from​

AbstractRouter._getMiddlewaresForRoute


_handle()​

_handle(route, params, options?, action?): Promise<void | UnknownParameters>

Defined in: packages/core/src/router/AbstractRouter.ts:569

Handles the provided route and parameters by initializing the route's controller and rendering its state via the route's view.

The result is then sent to the client if used at the server side, or displayed if used as the client side.

Parameters​

route​

AbstractRoute<string | RoutePathExpression>

The route that should have its associated controller rendered via the associated view.

params​

RouteParams

Parameters extracted from the URL path and query.

options?​

Partial<RouteOptions>

The options overrides route options defined in the routes.js configuration file.

action?​

RouteAction

An action object describing what triggered this routing.

Returns​

Promise<void | UnknownParameters>

A promise that resolves when the page is rendered and the result is sent to the client, or displayed if used at the client side.

Inherited from​

AbstractRouter._handle


_handleClick()​

_handleClick(event): void

Defined in: packages/core/src/router/ClientRouter.ts:381

Handles a click event. The method performs navigation to the target location of the anchor (if it has one).

The navigation will be handled by the router if the protocol and domain of the anchor's target location (href) is the same as the current, otherwise the method results in a hard redirect.

Parameters​

event​

MouseEvent

The click event.

Returns​

void


_handleFatalError()​

_handleFatalError(error): void

Defined in: packages/core/src/router/ClientRouter.ts:336

Handle a fatal error application state. IMA handle fatal error when IMA handle error.

Parameters​

error​

Error

Returns​

void


_handlePopState()​

_handlePopState(event): void

Defined in: packages/core/src/router/ClientRouter.ts:357

Handles a popstate event. The method is performed when the active history entry changes.

The navigation will be handled by the router if the event state is defined and event is not defaultPrevented.

Parameters​

event​

PopStateEvent

The popstate event.

Returns​

void


_isHashLink(targetUrl): boolean

Defined in: packages/core/src/router/ClientRouter.ts:467

Tests whether the provided target URL contains only an update of the hash fragment of the current URL.

Parameters​

targetUrl​

string

The target URL.

Returns​

boolean

true if the navigation to target URL would result only in updating the hash fragment of the current URL.


_isSameDomain()​

_isSameDomain(url?): boolean

Defined in: packages/core/src/router/ClientRouter.ts:490

Tests whether the the protocol and domain of the provided URL are the same as the current.

Parameters​

url?​

string = ''

The URL.

Returns​

boolean

true if the protocol and domain of the provided URL are the same as the current.


_runMiddlewares()​

_runMiddlewares(middlewares, params, locals): Promise<void | typeof MIDDLEWARE_ABORT_ROUTE>

Defined in: packages/core/src/router/AbstractRouter.ts:700

Runs provided middlewares in sequence.

Parameters​

middlewares​

Array of middlewares.

RouterMiddleware[] | undefined

params​

RouteParams

Router params that can be mutated by middlewares.

locals​

RouteLocals

The locals param is used to pass local data between middlewares.

Returns​

Promise<void | typeof MIDDLEWARE_ABORT_ROUTE>

Promise resolving to MIDDLEWARE_ABORT_ROUTE if a middleware aborted the entire routing pipeline, or void if all middlewares completed normally (including early stop via MIDDLEWARE_STOP_PROPAGATION).

Inherited from​

AbstractRouter._runMiddlewares


add()​

add(name, pathExpression, controller, view, options?): ClientRouter

Defined in: packages/core/src/router/AbstractRouter.ts:169

Adds a new route to router.

Parameters​

name​

string

The unique name of this route, identifying it among the rest of the routes in the application.

pathExpression​

string

A path expression specifying the URL path part matching this route (must not contain a query string), optionally containing named parameter placeholders specified as :parameterName. The name of the parameter is terminated by a forward slash (/) or the end of the path expression string. The path expression may also contain optional parameters, which are specified as :?parameterName. It is recommended to specify the optional parameters at the end of the path expression.

controller​

AsyncRouteController

The full name of Object Container alias identifying the controller associated with this route.

view​

AsyncRouteView

The full name or Object Container alias identifying the view class associated with this route.

options?​

Partial<RouteOptions>

Additional route options, specified how the navigation to the route will be handled. The onlyUpdate can be either a flag signalling whether the current controller and view instances should be kept if they match the ones used by the previous route; or a callback function that will receive the previous controller and view identifiers used in the previously matching route, and returns a boolean representing the value of the flag. This flag is disabled by default. The autoScroll flag signals whether the page should be scrolled to the top when the navigation takes place. This flag is enabled by default.

Returns​

ClientRouter

This router.

Throws​

Thrown if a route with the same name already exists.

Inherited from​

AbstractRouter.add


getBaseUrl()​

getBaseUrl(): string

Defined in: packages/core/src/router/AbstractRouter.ts:245

Returns the application's absolute base URL, pointing to the public root of the application.

Returns​

string

The application's base URL.

Inherited from​

AbstractRouter.getBaseUrl


getCurrentRouteInfo()​

getCurrentRouteInfo(): object

Defined in: packages/core/src/router/AbstractRouter.ts:273

Returns the information about the currently active route.

Returns​

object

params​

params: RouteParams<{ }>

path​

path: string

route​

route: AbstractRoute<string | RoutePathExpression>

Throws​

Thrown if a route is not define for current path.

Inherited from​

AbstractRouter.getCurrentRouteInfo


getDomain()​

getDomain(): string

Defined in: packages/core/src/router/AbstractRouter.ts:252

Returns the application's domain in the following form ${protocol}//${host}.

Returns​

string

The current application's domain.

Inherited from​

AbstractRouter.getDomain


getHost()​

getHost(): string

Defined in: packages/core/src/router/AbstractRouter.ts:259

Returns application's host (domain and, if necessary, the port number).

Returns​

string

The current application's host.

Inherited from​

AbstractRouter.getHost


getPath()​

getPath(): string

Defined in: packages/core/src/router/ClientRouter.ts:122

Returns the current path part of the current URL, including the query string (if any).

Returns​

string

The path and query parts of the current URL.

Overrides​

AbstractRouter.getPath


getProtocol()​

getProtocol(): string

Defined in: packages/core/src/router/AbstractRouter.ts:266

Returns the current protocol used to access the application, terminated by a colon (for example https:).

Returns​

string

The current application protocol used to access the application.

Inherited from​

AbstractRouter.getProtocol


getRouteHandler()​

getRouteHandler(name): AbstractRoute<string | RoutePathExpression> | RouterMiddleware | undefined

Defined in: packages/core/src/router/AbstractRouter.ts:222

Returns specified handler from registered route handlers.

Parameters​

name​

string

The route's unique name.

Returns​

AbstractRoute<string | RoutePathExpression> | RouterMiddleware | undefined

Route with given name or undefined.

Inherited from​

AbstractRouter.getRouteHandler


getRouteHandlers()​

getRouteHandlers(): Map<string, AbstractRoute<string | RoutePathExpression> | RouterMiddleware>

Defined in: packages/core/src/router/AbstractRouter.ts:299

Returns​

Map<string, AbstractRoute<string | RoutePathExpression> | RouterMiddleware>

Inherit Doc​

Inherited from​

AbstractRouter.getRouteHandlers


getRouteHandlersByPath()​

getRouteHandlersByPath(path): object

Defined in: packages/core/src/router/AbstractRouter.ts:635

Returns the route matching the provided URL path part (the path may contain a query) and all middlewares preceding this route definition.

Parameters​

path​

string

The URL path.

Returns​

object

The route matching the path and middlewares preceding it or {} (empty object) if no such route exists.

middlewares​

middlewares: RouterMiddleware[]

route?​

optional route: AbstractRoute<string | RoutePathExpression>

Inherited from​

AbstractRouter.getRouteHandlersByPath


getUrl()​

getUrl(): string

Defined in: packages/core/src/router/ClientRouter.ts:115

Returns the current absolute URL (including protocol, host, query, etc).

Returns​

string

The current absolute URL.

Overrides​

AbstractRouter.getUrl


handleError()​

handleError(params, options?, locals?): Promise<void | UnknownParameters>

Defined in: packages/core/src/router/ClientRouter.ts:264

Handles an internal server error by responding with the appropriate "internal server error" error page.

Parameters​

params​

RouteParams

Parameters extracted from the current URL path and query.

options?​

Partial<RouteOptions>

The options overrides route options defined in the routes.js configuration file.

locals?​

RouteLocals

The locals param is used to pass local data between middlewares.

Returns​

Promise<void | UnknownParameters>

A promise resolved when the error has been handled and the response has been sent to the client, or displayed if used at the client side.

Overrides​

AbstractRouter.handleError


handleNotFound()​

handleNotFound(params, options, locals): Promise<void | UnknownParameters>

Defined in: packages/core/src/router/ClientRouter.ts:324

Handles a "not found" error by responding with the appropriate "not found" error page.

Parameters​

params​

StringParameters

Parameters extracted from the current URL path and query.

options​

The options overrides route options defined in the routes.js configuration file.

locals​

The locals param is used to pass local data between middlewares.

Returns​

Promise<void | UnknownParameters>

A promise resolved when the error has been handled and the response has been sent to the client, or displayed if used at the client side.

Overrides​

AbstractRouter.handleNotFound


init()​

init(config): ClientRouter

Defined in: packages/core/src/router/ClientRouter.ts:99

Initializes the router with the provided configuration.

Parameters​

config​

Router configuration. The $Protocol field must be the current protocol used to access the application, terminated by a colon (for example https:). The $Root field must specify the URL path pointing to the application's root. The $LanguagePartPath field must be the URL path fragment used as a suffix to the $Root field that specifies the current language. The $Host field must be the application's domain (and the port number if other than the default is used) in the following form: ${protocol}//${host}.

$Host​

string

$LanguagePartPath​

string

$Protocol​

string

$Root​

string

Returns​

ClientRouter

Overrides​

AbstractRouter.init


isClientError()​

isClientError(reason): boolean

Defined in: packages/core/src/router/AbstractRouter.ts:527

Tests, if possible, whether the specified error was caused by the client's action (for example wrong URL or request encoding) or by a failure at the server side.

Parameters​

reason​

The encountered error.

Error | Error

Returns​

boolean

true if the error was caused the action of the client.

Inherited from​

AbstractRouter.isClientError


isRedirection()​

isRedirection(reason): boolean

Defined in: packages/core/src/router/AbstractRouter.ts:534

Tests, if possible, whether the specified error lead to redirection.

Parameters​

reason​

The encountered error.

Error | Error

Returns​

boolean

true if the error was caused the action of the redirection.

Inherited from​

AbstractRouter.isRedirection


link(routeName, params): string

Defined in: packages/core/src/router/AbstractRouter.ts:347

Generates an absolute URL (including protocol, domain, etc) for the specified route by substituting the route's parameter placeholders with the provided parameter values.

Parameters​

routeName​

string

The unique name of the route, identifying the route to use.

params​

RouteParams

Parameter values for the route's parameter placeholders. Extraneous parameters will be added as URL query.

Returns​

string

An absolute URL for the specified route and parameters.

Inherited from​

AbstractRouter.link


listen()​

listen(target?): ClientRouter

Defined in: packages/core/src/router/ClientRouter.ts:129

Registers event listeners at the client side window object allowing the router to capture user's history (history pop state - going "back") and page (clicking links) navigation.

The router will start processing the navigation internally, handling the user's navigation to display the page related to the URL resulting from the user's action.

Note that the router will not prevent forms from being submitted to the server.

The effects of this method can be reverted with unlisten. This method has no effect at the server side.

Parameters​

target?​

EventTarget

Returns​

ClientRouter

This router.

Overrides​

AbstractRouter.listen


redirect()​

redirect(url, options?, action?, locals?): void

Defined in: packages/core/src/router/ClientRouter.ts:200

Redirects the client to the specified location.

At the server side the method results in responding to the client with a redirect HTTP status code and the Location header.

At the client side the method updates the current URL by manipulating the browser history (if the target URL is at the same domain and protocol as the current one) or performs a hard redirect (if the target URL points to a different protocol or domain).

The method will result in the router handling the new URL and routing the client to the related page if the URL is set at the client side and points to the same domain and protocol.

Parameters​

url​

string

The URL to which the client should be redirected.

options?​

Partial<RouteOptions>

The options overrides route options defined in the routes.js configuration file.

action?​

RouteAction

An action object describing what triggered this routing.

locals?​

RouteLocals

The locals param is used to pass local data between middlewares.

Returns​

void

Overrides​

AbstractRouter.redirect


remove()​

remove(name): ClientRouter

Defined in: packages/core/src/router/AbstractRouter.ts:213

Removes the specified route from the router's known routes.

Parameters​

name​

string

The route's unique name, identifying the route to remove.

Returns​

ClientRouter

This router.

Inherited from​

AbstractRouter.remove


route()​

route(path, options?, action?, locals?): Promise<void | UnknownParameters>

Defined in: packages/core/src/router/ClientRouter.ts:229

Routes the application to the route matching the providing path, renders the route page and sends the result to the client.

Parameters​

path​

string

The URL path part received from the client, with optional query.

options?​

Partial<RouteOptions>

The options overrides route options defined in the routes.js configuration file.

action?​

RouteAction

An action object describing what triggered this routing.

locals?​

RouteLocals

The locals param is used to pass local data between middlewares.

Returns​

Promise<void | UnknownParameters>

A promise resolved when the error has been handled and the response has been sent to the client, or displayed if used at the client side.

Overrides​

AbstractRouter.route


unlisten()​

unlisten(target?): ClientRouter

Defined in: packages/core/src/router/ClientRouter.ts:154

Unregisters event listeners at the client side window object allowing the router to capture user's history (history pop state - going "back") and page (clicking links) navigation.

The router will stop processing the navigation internally, handling the user's navigation to display the page related to the URL resulting from the user's action.

Note that the router will not prevent forms from being submitted to the server.

The effects of this method can be reverted with unlisten. This method has no effect at the server side.

Parameters​

target?​

EventTarget

Returns​

ClientRouter

This router.

Overrides​

AbstractRouter.unlisten


unlistenAll()​

unlistenAll(): this

Defined in: packages/core/src/router/ClientRouter.ts:188

Handles the cleanup and unregisters all registered router listeners.

Returns​

this

Overrides​

AbstractRouter.unlistenAll


use()​

use(middleware): ClientRouter

Defined in: packages/core/src/router/AbstractRouter.ts:201

Adds a new middleware to router.

Parameters​

middleware​

RouterMiddleware

Middleware function accepting routeParams as a first argument, which can be mutated and locals object as second argument. This can be used to pass data between middlewares.

Returns​

ClientRouter

This router.

Throws​

Thrown if a middleware with the same name already exists.

Inherited from​

AbstractRouter.use