kriasoft / universal-router

A simple middleware-style router for isomorphic JavaScript web apps
https://www.kriasoft.com/universal-router/
MIT License
1.7k stars 104 forks source link

Add support for repeat parameters #116

Closed frenzzy closed 6 years ago

frenzzy commented 6 years ago
import UniversalRouter from 'universal-router';

const action = context => context.params;

const router = new UniversalRouter([
  { name: 'a', action, path: '/a/:segment?' }, // optional
  { name: 'b', action, path: '/b/:segment*' }, // zero or more
  { name: 'c', action, path: '/c/:segment+' }, // one or more
]);

router.resolve('/a');                          // => { segment: undefined }
router.resolve('/a/foo');                      // => { segment: 'foo' }
router.resolve('/a/foo/bar');                  // => 404

router.resolve('/b');                          // => { segment: [] }
router.resolve('/b/foo');                      // => { segment: ['foo'] }
router.resolve('/b/foo/bar');                  // => { segment: ['foo', 'bar'] }

router.resolve('/c');                          // => 404
router.resolve('/c/foo');                      // => { segment: ['foo'] }
router.resolve('/c/foo/bar');                  // => { segment: ['foo', 'bar'] }
import generateUrls from 'universal-router/generateUrls';

const url = generateUrls(router);

url('a');                                      // => /a
url('a', { segment: 'foo' });                  // => /a/foo
url('a', { segment: [] });                     // => error
url('a', { segment: ['foo', 'bar'] });         // => error

url('b');                                      // => /b
url('b', { segment: [] });                     // => /b
url('b', { segment: ['foo'] });                // => /b/foo
url('b', { segment: ['foo', 'bar'] });         // => /b/foo/bar

url('c');                                      // => error
url('c', { segment: [] });                     // => error
url('c', { segment: ['foo'] });                // => /c/foo
url('c', { segment: ['foo', 'bar'] });         // => /c/foo/bar
coveralls commented 6 years ago

Coverage Status

Coverage remained the same at 100.0% when pulling c47e712b198fd5274f7d74f908ea3c0ca5a9bba9 on frenzzy:repeat-parameters into 510fa3d345f1f9c017e613808385b49785af54ed on kriasoft:master.

coveralls commented 6 years ago

Coverage Status

Coverage remained the same at 100.0% when pulling dc178532dae42751ca2799603d9249f6eb8f1d28 on frenzzy:repeat-parameters into 510fa3d345f1f9c017e613808385b49785af54ed on kriasoft:master.