@bravissimolabs/react-router-config
Version:
Static route config matching for React Router
205 lines (156 loc) • 5.28 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react-router/matchPath'), require('react-router/Router'), require('react'), require('react-router/Switch'), require('react-router/Route')) :
typeof define === 'function' && define.amd ? define(['exports', 'react-router/matchPath', 'react-router/Router', 'react', 'react-router/Switch', 'react-router/Route'], factory) :
(factory((global.ReactRouterConfig = {}),global.ReactRouter.matchPath,global.ReactRouter.Router,global.React,global.ReactRouter.Switch,global.ReactRouter.Route));
}(this, (function (exports,matchPath,Router,React,Switch,Route) { 'use strict';
matchPath = matchPath && matchPath.hasOwnProperty('default') ? matchPath['default'] : matchPath;
Router = Router && Router.hasOwnProperty('default') ? Router['default'] : Router;
React = React && React.hasOwnProperty('default') ? React['default'] : React;
Switch = Switch && Switch.hasOwnProperty('default') ? Switch['default'] : Switch;
Route = Route && Route.hasOwnProperty('default') ? Route['default'] : Route;
// ensure we're using the exact code for default root match
var computeMatch = Router.prototype.computeMatch;
var matchRoutes = function matchRoutes(routes, pathname) {
var branch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
routes.some(function (route) {
var match = route.path ? matchPath(pathname, route) : branch.length ? branch[branch.length - 1].match // use parent match
: computeMatch(pathname); // use default "root" match
if (match) {
branch.push({ route: route, match: match });
if (route.routes) {
matchRoutes(route.routes, pathname, branch);
}
}
return match;
});
return branch;
};
var asyncGenerator = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
}
} catch (err) {
settle("throw", err);
}
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}
front = front.next;
if (front) {
resume(front.key, front.arg);
} else {
back = null;
}
}
this._invoke = send;
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
return {
wrap: function (fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
},
await: function (value) {
return new AwaitValue(value);
}
};
}();
var _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
var renderRoutes = function renderRoutes(routes) {
var extraProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var switchProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return routes ? React.createElement(
Switch,
switchProps,
routes.map(function (route, i) {
return React.createElement(Route, {
key: route.key || i,
path: route.path,
exact: route.exact,
strict: route.strict,
render: function render(props) {
return React.createElement(route.component, _extends({}, props, extraProps, { route: route }));
}
});
})
) : null;
};
exports.matchRoutes = matchRoutes;
exports.renderRoutes = renderRoutes;
Object.defineProperty(exports, '__esModule', { value: true });
})));