UNPKG

11 kBSource Map (JSON)View Raw
1{"version":3,"file":"main.mjs","sources":["../src/matchPath.js","../src/matchRoute.js","../src/resolveRoute.js","../src/Router.js"],"sourcesContent":["/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport pathToRegexp from 'path-to-regexp';\n\nconst cache = new Map();\n\nfunction decodeParam(val) {\n try {\n return decodeURIComponent(val);\n } catch (err) {\n return val;\n }\n}\n\nfunction matchPath(routePath, urlPath, end, parentParams) {\n const key = `${routePath}|${end}`;\n let regexp = cache.get(key);\n\n if (!regexp) {\n const keys = [];\n regexp = { pattern: pathToRegexp(routePath, keys, { end }), keys };\n cache.set(key, regexp);\n }\n\n const m = regexp.pattern.exec(urlPath);\n if (!m) {\n return null;\n }\n\n const path = m[0];\n const params = Object.create(null);\n\n if (parentParams) {\n Object.assign(params, parentParams);\n }\n\n for (let i = 1; i < m.length; i += 1) {\n params[regexp.keys[i - 1].name] = m[i] && decodeParam(m[i]);\n }\n\n return { path: path === '' ? '/' : path, keys: regexp.keys.slice(), params };\n}\n\nexport default matchPath;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport matchPath from './matchPath';\n\nfunction matchRoute(route, baseUrl, path, parentParams) {\n let match;\n let childMatches;\n let childIndex = 0;\n\n return {\n next() {\n if (!match) {\n match = matchPath(route.path, path, !route.children, parentParams);\n\n if (match) {\n return {\n done: false,\n value: {\n route,\n baseUrl,\n path: match.path,\n keys: match.keys,\n params: match.params,\n },\n };\n }\n }\n\n if (match && route.children) {\n while (childIndex < route.children.length) {\n if (!childMatches) {\n const newPath = path.substr(match.path.length);\n const childRoute = route.children[childIndex];\n childRoute.parent = route;\n\n childMatches = matchRoute(\n childRoute,\n baseUrl + (match.path === '/' ? '' : match.path),\n newPath.charAt(0) === '/' ? newPath : `/${newPath}`,\n match.params,\n );\n }\n\n const childMatch = childMatches.next();\n if (!childMatch.done) {\n return {\n done: false,\n value: childMatch.value,\n };\n }\n\n childMatches = null;\n childIndex += 1;\n }\n }\n\n return { done: true };\n },\n };\n}\n\nexport default matchRoute;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nfunction resolveRoute(context, params) {\n if (typeof context.route.action === 'function') {\n return context.route.action(context, params);\n }\n\n return null;\n}\n\nexport default resolveRoute;\n","/**\n * Universal Router (https://www.kriasoft.com/universal-router/)\n *\n * Copyright © 2015-present Kriasoft, LLC. All rights reserved.\n *\n * This source code is licensed under the Apache 2.0 license found in the\n * LICENSE.txt file in the root directory of this source tree.\n */\n\nimport pathToRegexp from 'path-to-regexp';\nimport matchPath from './matchPath';\nimport matchRoute from './matchRoute';\nimport resolveRoute from './resolveRoute';\n\nfunction isChildRoute(parentRoute, childRoute) {\n let route = childRoute;\n while (route) {\n route = route.parent;\n if (route === parentRoute) {\n return true;\n }\n }\n return false;\n}\n\nclass Router {\n constructor(routes, options = {}) {\n if (Object(routes) !== routes) {\n throw new TypeError('Invalid routes');\n }\n\n this.baseUrl = options.baseUrl || '';\n this.resolveRoute = options.resolveRoute || resolveRoute;\n this.context = Object.assign({ router: this }, options.context);\n this.root = Array.isArray(routes) ? { path: '/', children: routes, parent: null } : routes;\n this.root.parent = null;\n }\n\n resolve(pathOrContext) {\n const context = Object.assign({}, this.context,\n typeof pathOrContext === 'string' ? { path: pathOrContext } : pathOrContext);\n const match = matchRoute(this.root, this.baseUrl, context.path.substr(this.baseUrl.length));\n const resolve = this.resolveRoute;\n let matches = null;\n let nextMatches = null;\n\n function next(resume, parent = matches.value.route) {\n matches = nextMatches || match.next();\n nextMatches = null;\n\n if (!resume) {\n if (matches.done || !isChildRoute(parent, matches.value.route)) {\n nextMatches = matches;\n return Promise.resolve(null);\n }\n }\n\n if (matches.done) {\n return Promise.reject(Object.assign(\n new Error('Page not found'),\n { context, status: 404, statusCode: 404 },\n ));\n }\n\n return Promise.resolve(resolve(\n Object.assign({}, context, matches.value),\n matches.value.params,\n )).then((result) => {\n if (result !== null && result !== undefined) {\n return result;\n }\n\n return next(resume, parent);\n });\n }\n\n context.url = context.path;\n context.next = next;\n\n return next(true, this.root);\n }\n}\n\nRouter.pathToRegexp = pathToRegexp;\nRouter.matchPath = matchPath;\nRouter.matchRoute = matchRoute;\nRouter.resolveRoute = resolveRoute;\n\nexport default Router;\n"],"names":["cache","Map","decodeParam","val","decodeURIComponent","err","matchPath","routePath","urlPath","end","parentParams","key","regexp","get","keys","pattern","pathToRegexp","set","m","exec","path","params","Object","create","assign","i","length","name","slice","matchRoute","route","baseUrl","match","childMatches","childIndex","children","newPath","substr","childRoute","parent","charAt","childMatch","next","done","value","resolveRoute","context","action","isChildRoute","parentRoute","Router","routes","options","TypeError","router","root","Array","isArray","pathOrContext","resolve","matches","nextMatches","resume","Promise","reject","Error","status","statusCode","then","result","undefined","url"],"mappings":"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"}
\No newline at end of file