https://github.com/andrejewski/tagged-routes
Routing with tagged unions
https://github.com/andrejewski/tagged-routes
routing tagged-unions
Last synced: 10 months ago
JSON representation
Routing with tagged unions
- Host: GitHub
- URL: https://github.com/andrejewski/tagged-routes
- Owner: andrejewski
- License: mit
- Created: 2018-01-17T04:01:39.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-05-11T17:14:45.000Z (almost 6 years ago)
- Last Synced: 2025-04-05T00:02:40.414Z (12 months ago)
- Topics: routing, tagged-unions
- Language: JavaScript
- Size: 74.2 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Tagged Routes
> Routing using tagged unions
```sh
npm install tagged-routes
```
[](https://www.npmjs.com/package/tagged-routes)
[](https://travis-ci.org/andrejewski/tagged-routes)
[](https://greenkeeper.io/)
## Example
```js
import { createRoutes } from 'tagged-routes'
const { Route, getRouteForURL, getURLForRoute } = routeTable(
{
AppList: '/',
AppMain: '/apps/:appId',
AppSettings: '/apps/:appId/settings',
Settings: '/settings/(.*)'
},
'NotFound'
)
console.log(getRouteForUrl('/apps/example?tab=hosting'))
/* => */
console.log(getRouteForUrl('/settings/can-be-anything'))
/* => */
console.log(getRouteForUrl('/bad/route-bad'))
/* => */
const exemplarRoute = Route.AppMain({
routeParams: { appId: 'exemplar' },
queryParams: { tab: 'billing' }
})
console.log(getURLForRoute(exemplarRoute))
// => /apps/exemplar?tab=billing
```
## Documentation
### `createRoutes(routeTable, catchAllRouteKind: string, options?: object)`
Accepts a `routeTable` object with route kinds (types of Route) as keys and valid [`path-to-regexp`](https://github.com/pillarjs/path-to-regexp) paths as values along with a catch-all route kind `catchAllRouteKind`. The `options` are passed to `path-to-regexp` and `options.encode` is passed to `path-to-regexp.compile` URL builders to override the `encodeURIComponent` default.
Returns an object containing the below `Route` union and functions.
### `Route`
A [`tagmeme`](https://github.com/andrejewski/tagmeme) union, has a `.match` method and constructors for each route kind.
### `getRouteForURL(url: string): Route`
Returns the route that matches the `url`, or the catch-all route if none match. The shape of route data is:
```ts
interface RouteData {
routeParams: {[key: string]: string}
queryParams: {[key: string]: string}
routeSplat?: string // only if route has a splat "(.*)" segment
routePath?: string // only if catch-all route
}
```
### `getURLForRoute(route: Route): string`
Returns the URL that matches the `route`.
Throws in development if:
- a route requiring certain `routeParams` values is missing values.
- the catch-all route does not have the `routePath` specified.