A tiny and easy-to-use middleware-style router for client and server-side development. It is based on the new experimental URLPattern API and draws inspiration from universal-router.
URLPattern
polyfill, which is needed for browsers that do not support the URLPattern
API yet.URLPattern
is an experimental technology, a polyfill is required. The package includes the polyfill as a dependency for convenience but the polyfill is loaded conditionally, only for browsers that do not have native support for URLPattern
. Polyfill adds import { addNavigationListener, navigate, Router } from '@ausginer/router';
const router = new Router<string>([
{
path: '',
async action({ next }) {
return `<h1>My app</h1><div>${await next()}</div>`;
},
children: [
{
path: '/users/:id(\\d+)',
async action({
result: {
pathname: {
groups: { id },
},
},
}) {
return `User #${id} data`;
},
},
],
},
{
path: '*',
action({ url }) {
return `404: Page ${url.toString()} is not found.`;
},
},
]);
addNavigationListener((path) => {
router
.resolve(path)
.then((html) => {
document.body.innterHTML = html;
})
.catch((e: unknown) => {
throw e;
});
});
navigate('/user/100'); // Will render `<h1>My app</h1><div>User #100 data</div>`
navigate('/not-existing-page'); // Will render `404: Page https://example.com/not-existing-page is not found.`