[![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url]

# [conglomerate-router](https://github.com/eitherlands/conglomerate-router)

[hapijs/call](https://github.com/hapijs/call) for browsers. Supports all modern
browsers, tested on IE 9+, Chrome 16+, FireFox 5+, Safari 6+, Opera 12+.

## Path matching order

The router iterates through the routing table and executes the first (and only
the first) matching route. Route matching is done based on the combination of
the request path and the HTTP verb (e.g. 'GET, 'POST'). The query is excluded
from the routing logic. Requests are matched in a deterministic order where the
order in which routes are added does not matter.

Routes are matched based on the specificity of the route which is evaluated at
each segment of the path. Each path is split into its segment (the parts
separated by `'/'`).  The segments are compared to the routing table one at a
time and are matched against the most specific path until a match is found. If
no match is found, the next match is tried.

When matching routes, string literals (no path parameter) have the highest
priority, followed by mixed parameters (`'/a{p}b'`), parameters (`'/{p}'`), and
then wildcard (`/{p*}`).

Note that mixed parameters are slower to compare as they cannot be hashed and
require an array iteration over all the regular expressions representing the
various mixed parameter at each routing table node.

## Catch all route

If the application needs to override the default Not Found (404) error
response, it can add a catch-all route `{method: '*', path: '/{p*}'}` for a
specific method or all methods. Only one catch-all route can be defined per
router.

# [Thanks](https://github.com/eitherlands/conglomerate-router#Thanks)

Thanks to [Eran Hammer](@hueniverse) and @hapijs community for the quality
engineering behind hapi.

Thanks to [Sauce Labs](https://saucelabs.com) for providing the infrastructure
that allows us to run our build in real browsers.

# [License](https://github.com/eitherlands/conglomerate-router#License)

conglomerate-router is released under the terms of the BSD-3-Clause license.

[npm-url]: https://www.npmjs.com/package/@conglomerate/router

[npm-image]: https://img.shields.io/npm/v/@conglomerate/router.svg

[travis-url]: https://travis-ci.org/eitherlands/conglomerate-router

[travis-image]: https://img.shields.io/travis/eitherlands/conglomerate-router.svg
