Home

Awesome

switchPath

Advanced switch case for URLs, a small tool for routing in JavaScript

npm version

npm install switch-path

Looking for maintainers

Usage

Basic usage:

const {path, value} = switchPath('/home/foo', {
  '/bar': 123,
  '/home/foo': 456,
});
// path is `/home/foo`
// value is 456

Supports trailing slashes

const {path, value} = switchPath('/home/foo/', {
  '/bar': 123,
  '/home/foo': 456,
});
// path is `/home/foo`
// value is 456

Supports nested route configuration:

const {path, value} = switchPath('/home/foo', {
  '/bar': 123,
  '/home': {
    '/foo': 456,
  },
});
// path is `/home/foo`
// value is 456

Supports base paths in nested route configurations

const {path, value} = switchPath('/home', {
  '/bar': 123,
  '/home': {
    '/': 456,
    '/foo': 789
  }
});
// path is `/home`
// value is 456

Incomplete patterns will be optimistically matched:

const {path, value} = switchPath('/home/foo', {
  '/bar': 123,
  '/home': 456,
});
// path is `/home`
// value is 456

Optional not found pattern:

const {path, value} = switchPath('/home/33', {
  '/': 123,
  'books': {
    '/': 456,
    '/:id': 789
  },
  '*': 'Route not found'
});
// path = '/home/33'
// value = 'Route not found'

Match a route with :param parameters and get the parameter value in a function:

const {path, value} = switchPath('/home/1736', {
  '/bar': 123,
  '/home/:id': id => `id is ${id}`,
});
// path is `/home/1736`
// value is 'id is 1736'

Match a route with :param parameters also inside nested configurations:

const {path, value} = switchPath('/home/1736', {
  '/bar': 123,
  '/home': {
    '/:id': id => `id is ${id}`,
  },
});
// path is `/home/1736`
// value is 'id is 1736'

Match a route with :param parameters base inside nested configurations:

const {path, value} = switchPath('/1736', {
  '/bar': 123,
  '/:id': {
    '/': id => `id is ${id}`,
    '/home': 789
  }
});
// path is `/1736`
// value is 'id is 1736'