1 |
|
2 | 'use strict';
|
3 |
|
4 | module.exports = function (config) {
|
5 | var extend = require('extend');
|
6 | var mapRoute = require('./map-route');
|
7 | var routes = config.routes;
|
8 | var defaultRoute = config.argv['route-config'] || 'default';
|
9 | var localhost = {};
|
10 | var override;
|
11 |
|
12 | if (config.argv['origin-override']) {
|
13 | localhost.changeOrigin = true;
|
14 | }
|
15 |
|
16 | if (config.argv['route-override']) {
|
17 | override = mapRoute(config.argv['route-override']);
|
18 | if (override.host) {
|
19 | routes = {localhost: {default: ''}};
|
20 | routes.localhost.default = extend(true, {}, localhost, override);
|
21 | defaultRoute = 'default';
|
22 | }
|
23 | }
|
24 |
|
25 | var matchRoute = function (pattern, url) {
|
26 | if (pattern.match(/^\/.+?\/$/)) {
|
27 | return url.match(new RegExp(pattern.replace(/^\//, '').replace(/\/$/, ''), 'i'));
|
28 | }
|
29 | return false;
|
30 | };
|
31 |
|
32 | return {
|
33 | map: function (domain, url) {
|
34 | domain = domain.replace(/:[0-9]+$/, '');
|
35 | if (!routes.hasOwnProperty(domain)) {
|
36 | domain = 'localhost';
|
37 | }
|
38 | if (!routes.hasOwnProperty(domain)) {
|
39 | return null;
|
40 | }
|
41 | for (var pattern in routes[domain]) {
|
42 | if (pattern !== defaultRoute && routes[domain].hasOwnProperty(pattern)) {
|
43 | if (matchRoute(pattern, url)) {
|
44 | return routes[domain][pattern];
|
45 | }
|
46 | }
|
47 | }
|
48 | return routes[domain][defaultRoute];
|
49 | }
|
50 | };
|
51 | };
|