https://github.com/substrate-system/routes
Route matcher devised for shared rendering JavaScript applications
https://github.com/substrate-system/routes
router
Last synced: 4 months ago
JSON representation
Route matcher devised for shared rendering JavaScript applications
- Host: GitHub
- URL: https://github.com/substrate-system/routes
- Owner: substrate-system
- License: other
- Created: 2024-02-08T23:08:03.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2026-01-02T04:57:52.000Z (6 months ago)
- Last Synced: 2026-01-07T23:10:19.901Z (5 months ago)
- Topics: router
- Language: TypeScript
- Homepage: https://substrate-system.github.io/routes/
- Size: 84 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# routes
[](https://github.com/substrate-system/routes/actions/workflows/nodejs.yml)
[](README.md)
[](README.md)
[](package.json)
[](https://packagephobia.com/result?p=@@substrate-system/routes/keys)
[](https://bundlephobia.com/package/@substrate-system/routes)
[](https://semver.org/)
[](LICENSE)
Route matcher devised for shared rendering JavaScript applications
Contents
## Install
```sh
npm install -S @substrate-system/routes
```
## ESM vs CJS
Featuring ESM or CJS versions via `package.json` `exports` field.
```js
// esm
import Router from '@substrate-system/routes'
```
```js
// cjs
const Router = require('@substrate-system/routes').default
```
## Example
Get a router instance
```js
import Router from '@substrate-system/routes'
var router = new Router()
```
### Add some routes
```js
router.addRoute('/articles', getArticles);
router.addRoute('/articles/:slug', getArticleBySlug);
router.addRoute('/articles/search/*', searchForArticles);
// can also chain the method calls
router
.addRoute('/foo', () => {/* ... */})
.addRoute('/bar', () => {/* ... */})
```
### Find a match
```js
const match = router.match('/articles');
// => RouteMatch
```
#### The match object
```ts
interface RouteMatch {
params:Record; // <-- e.g. { slug: 'article-title' }
splats:string[];
route:string;
next?:((...any)=>any)|null;
action?:(...any)=>any;
index?:number;
}
```
You'll get `null` back if no route matches the provided URL. Otherwise, the
route match will provide all the useful information you need inside an object.
Key | Description
------------------|---------------------------------------------------------------------------------------
`action` | The action passed to `addRoute` as a second argument. Using a function is recommended
`next` | Fall through to the next route, or `null` if no other routes match
`route` | The route passed to `addRoute` as the first argument
`params` | An object containing the values for named parameters in the route
`splats` | An object filled with the values for wildcard parameters
## fork
This is a fork of [ruta3](https://www.npmjs.com/package/ruta3), just adding types.