route-node
A package to create a tree (trie) of named routes, allowing you to build and match routes.
$ npm install route-node --save
Creating your tree
To read about how to define paths, look at path-parser README
// Create nodesconst usersNode = 'users' '/users' 'list' '/list' 'view' '/view/:id' // You can also use plain objectsconst ordersNode = 'orders' '/orders' name: 'pending' path: '/pending' name: 'completed' path: '/completed' name: 'view' path: '/view/:id' // Creating a top root nodeconst rootNode = '' '' ordersNode usersNode // Add nodes programmaticallyrootNode
/
paths (empty paths)
When using a deeply nested /
path, it will automatically be matched when its parent is matched.
const tree = '' '' 'admin' '/admin' 'home' '/' 'users' '/users' tree // => { name: 'admin.home', params: {} }tree // => '/admin'
Options
const node = 'admin' '/admin' options
Where options can contain:
onAdd
: a callback called when adding routes (with contructor or.add
), you can pass a callback which will be executed for each route added successfully to the tree.parent
: the node parentfinalSort
: to sort children (matching order) after having added all children routes (rather than on each add)sort
: whether to sort on each add or not (default to true, overriden byfinalSort
)
Building and matching routes
node.buildPath(routeName: string, params?: object, options?: BuildOptions): string
rootNode // => "/users/view/1"
Performance
Node children need to be sorted for matching purposes. By default this operation happens after having added all routes.
matchPath(path: string, options?: MatchOptions): RouteNodeState | null
rootNode// => {name: "users.view", params: {id: "1"}}
Options
Options available:
'urlParamsEncoding
, to specify how URL parameters are encoded and decoded:'default'
:encodeURIComponent
anddecodeURIComponent
are used but some characters to encode and decode URL parameters, but some characters are preserved when encoding (sub-delimiters:+
,:
,'
,!
,,
,;
,*
).'uriComponent'
: useencodeURIComponent
anddecodeURIComponent
for encoding and decoding URL parameters.'uri'
: useencodeURI
and `decodeURI for encoding amd decoding URL parameters.'none'
: no encoding or decoding is performed'legacy'
: the approach for version 5.x and below (not recommended)
trailingSlashMode
:'default'
: building follows path definitions'never'
: when building, trailing slash is removed'always'
: when building, trailing slash is added
queryParamsMode
:'default'
: a path will match with any query parameters added, but when building, extra parameters won't appear in the returned path.'strict'
: a path with query parameters which were not listed in node definition will cause a match to be unsuccessful. When building, extra parameters won't appear in the returned path.'loose'
: a path will match with any query parameters added, and when building, extra parameters will appear in the returned path.
queryParams
: options for query parameterscaseSensitive
: whether path matching is case sensitive or not (default tofalse
)