0.0.2 • Published 12 months ago

radix-rapid v0.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

cover npm version npm downloads bundle JSDocs License

🌳 radix-rapid

✨ Lightweight and fast router for JavaScript based on Radix Tree🌱.

📝 Usage

Install:

# nyxi
nyxi radix-rapid

# pnpm
pnpm i radix-rapid

# npm
npm i radix-rapid

# yarn
yarn add radix-rapid

Import:

// ESM
import { createRouter } from 'radix-rapid'

// CJS
const { createRouter } = require('radix-rapid')

Create a router instance and insert routes:

const router = createRouter(/* options */)

router.insert('/path', { payload: 'this path' })
router.insert('/path/:name', { payload: 'named route' })
router.insert('/path/foo/**', { payload: 'wildcard route' })
router.insert('/path/foo/**:name', { payload: 'named wildcard route' })

Match route to access matched data:

router.lookup('/path')
// { payload: 'this path' }

router.lookup('/path/fooval')
// { payload: 'named route', params: { name: 'fooval' } }

router.lookup('/path/foo/bar/baz')
// { payload: 'wildcard route' }

router.lookup('/')
// null (no route matched for/)

⚡️ Methods

router.insert(path, data)

path can be static or using :placeholder or ** for wildcard paths.

The data object will be returned on matching params. It should be an object like { handler } and not containing reserved keyword params.

🔍 router.lookup(path)

Returns matched data for path with optional params key if mached route using placeholders.

router.remove(path)

Remove route matching path.

⚙️ Options

You can initialize router instance with options:

const router = createRouter({
   strictTrailingSlash: true,
   routes: {
      '/foo': {}
   }
})
  • 🛣️ routes: An object specifying initial routes to add
  • 🚦 strictTrailingSlash: By default, the router ignores trailing slashes for matching and adding routes. When set to true, matching with trailing slashes is handled differently.

🔎 Route Matcher

Creates a multi matcher from router tree that can match all routes matching path:

import { createRouter, toRouteMatcher } from 'radix-rapid'

const router = createRouter({
   routes: {
      '/foo': { m: 'foo' }, // Matches /foo only
      '/foo/**': { m: 'foo/**' }, // Matches /foo/<any>
      '/foo/bar': { m: 'foo/bar' }, // Matches /foo/bar only
      '/foo/bar/baz': { m: 'foo/bar/baz' }, // Matches /foo/bar/baz only
      '/foo/*/baz': { m: 'foo/*/baz' } // Matches /foo/<any>/baz
   }
})

const matcher = toRouteMatcher(router)

const matches = matcher.matchAll('/foo/bar/baz')

// [
//   {
//     "m": "foo/**",
//   },
//   {
//     "m": "foo/*/baz",
//   },
//   {
//     "m": "foo/bar/baz",
//   },
// ]

⚡️ Performance

See benchmark.

📜 License

MIT - Made with 💞

0.0.2

12 months ago

0.0.1

12 months ago