universal-router
Version:
Isomorphic router for JavaScript web applications
1 lines • 5.74 kB
Source Map (JSON)
{"version":3,"file":"main.mjs","sources":["../src/generateUrls.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\n/* eslint no-param-reassign: ['error', { props: false }] */\n\nimport UniversalRouter from './UniversalRouter';\n\nconst { pathToRegexp } = UniversalRouter;\nconst cache = new Map();\n\nfunction cacheRoutes(routesByName, route, routes) {\n if (routesByName.has(route.name)) {\n throw new Error(`Route \"${route.name}\" already exists`);\n }\n\n if (route.name) {\n routesByName.set(route.name, route);\n }\n\n if (routes) {\n for (let i = 0; i < routes.length; i += 1) {\n const childRoute = routes[i];\n childRoute.parent = route;\n cacheRoutes(routesByName, childRoute, childRoute.children);\n }\n }\n}\n\nfunction generateUrls(router, options = {}) {\n if (!(router instanceof UniversalRouter)) {\n throw new TypeError('An instance of UniversalRouter is expected');\n }\n\n router.routesByName = router.routesByName || new Map();\n\n return (routeName, params) => {\n let route = router.routesByName.get(routeName);\n if (!route) {\n router.routesByName.clear(); // clear cache\n cacheRoutes(router.routesByName, router.root, router.root.children);\n\n route = router.routesByName.get(routeName);\n if (!route) {\n throw new Error(`Route \"${routeName}\" not found`);\n }\n }\n\n let regexp = cache.get(route.fullPath);\n if (!regexp) {\n let fullPath = '';\n let rt = route;\n while (rt) {\n const path = Array.isArray(rt.path) ? rt.path[0] : rt.path;\n if (path) {\n fullPath = path + fullPath;\n }\n rt = rt.parent;\n }\n const tokens = pathToRegexp.parse(fullPath);\n const toPath = pathToRegexp.tokensToFunction(tokens);\n const keys = Object.create(null);\n for (let i = 0; i < tokens.length; i += 1) {\n if (typeof tokens[i] !== 'string') {\n keys[tokens[i].name] = true;\n }\n }\n regexp = { toPath, keys };\n cache.set(fullPath, regexp);\n route.fullPath = fullPath;\n }\n\n let url = router.baseUrl + regexp.toPath(params, options) || '/';\n\n if (options.stringifyQueryParams && params) {\n const queryParams = {};\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n if (!regexp.keys[key]) {\n queryParams[key] = params[key];\n }\n }\n const query = options.stringifyQueryParams(queryParams);\n if (query) {\n url += query.charAt(0) === '?' ? query : `?${query}`;\n }\n }\n\n return url;\n };\n}\n\nUniversalRouter.generateUrls = generateUrls;\n\nexport default generateUrls;\n"],"names":["pathToRegexp","UniversalRouter","cache","Map","cacheRoutes","routesByName","route","routes","has","name","Error","set","i","length","childRoute","parent","children","generateUrls","router","options","TypeError","routeName","params","get","clear","root","regexp","fullPath","rt","path","Array","isArray","tokens","parse","toPath","tokensToFunction","keys","Object","create","url","baseUrl","stringifyQueryParams","queryParams","key","query","charAt"],"mappings":"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"}