UNPKG

@bravissimolabs/react-router-config

Version:

Static route config matching for React Router

205 lines (156 loc) 5.28 kB
(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 }); })));