UNPKG

5.44 kBSource Map (JSON)View Raw
1{"version":3,"file":"universal-router-generate-urls.js","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 Router from './Router';\n\nconst cache = new Map();\n\nfunction cacheRoutes(routesByName, route, routes) {\n if (routesByName[route.name]) {\n throw new Error(`Route \"${route.name}\" already exists`);\n }\n\n if (route.name) {\n routesByName[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 Router)) {\n throw new TypeError('An instance of Router is expected');\n }\n\n router.routesByName = router.routesByName || {};\n\n return (routeName, params) => {\n let route = router.routesByName[routeName];\n if (!route) {\n router.routesByName = {}; // clear cache\n cacheRoutes(router.routesByName, router.root, router.root.children);\n\n route = router.routesByName[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 if (rt.path !== '/') {\n fullPath = rt.path + fullPath;\n }\n rt = rt.parent;\n }\n const tokens = Router.pathToRegexp.parse(fullPath);\n const toPath = Router.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 = Object.create(null);\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\nRouter.generateUrls = generateUrls;\n\nexport default generateUrls;\n"],"names":["cache","Map","cacheRoutes","routesByName","route","routes","name","Error","i","length","childRoute","parent","children","generateUrls","router","options","Router","TypeError","routeName","params","root","regexp","get","fullPath","rt","path","tokens","pathToRegexp","parse","toPath","tokensToFunction","keys","Object","create","set","url","baseUrl","stringifyQueryParams","queryParams","key","query","charAt"],"mappings":";;;;;;;;;;AAAA;;;;;;;;;;;AAWA,AAEA,IAAMA,QAAQ,IAAIC,GAAJ,EAAd;;AAEA,SAASC,WAAT,CAAqBC,YAArB,EAAmCC,KAAnC,EAA0CC,MAA1C,EAAkD;MAC5CF,aAAaC,MAAME,IAAnB,CAAJ,EAA8B;UACtB,IAAIC,KAAJ,aAAoBH,MAAME,IAA1B,sBAAN;;;MAGEF,MAAME,IAAV,EAAgB;iBACDF,MAAME,IAAnB,IAA2BF,KAA3B;;;MAGEC,MAAJ,EAAY;SACL,IAAIG,IAAI,CAAb,EAAgBA,IAAIH,OAAOI,MAA3B,EAAmCD,KAAK,CAAxC,EAA2C;UACnCE,aAAaL,OAAOG,CAAP,CAAnB;iBACWG,MAAX,GAAoBP,KAApB;kBACYD,YAAZ,EAA0BO,UAA1B,EAAsCA,WAAWE,QAAjD;;;;;AAKN,SAASC,YAAT,CAAsBC,MAAtB,EAA4C;MAAdC,OAAc,uEAAJ,EAAI;;MACtC,EAAED,kBAAkBE,MAApB,CAAJ,EAAiC;UACzB,IAAIC,SAAJ,CAAc,mCAAd,CAAN;;;SAGKd,YAAP,GAAsBW,OAAOX,YAAP,IAAuB,EAA7C;;SAEO,UAACe,SAAD,EAAYC,MAAZ,EAAuB;QACxBf,QAAQU,OAAOX,YAAP,CAAoBe,SAApB,CAAZ;QACI,CAACd,KAAL,EAAY;aACHD,YAAP,GAAsB,EAAtB,CADU;kBAEEW,OAAOX,YAAnB,EAAiCW,OAAOM,IAAxC,EAA8CN,OAAOM,IAAP,CAAYR,QAA1D;;cAEQE,OAAOX,YAAP,CAAoBe,SAApB,CAAR;UACI,CAACd,KAAL,EAAY;cACJ,IAAIG,KAAJ,aAAoBW,SAApB,iBAAN;;;;QAIAG,SAASrB,MAAMsB,GAAN,CAAUlB,MAAMmB,QAAhB,CAAb;QACI,CAACF,MAAL,EAAa;UACPE,WAAW,EAAf;UACIC,KAAKpB,KAAT;aACOoB,EAAP,EAAW;YACLA,GAAGC,IAAH,KAAY,GAAhB,EAAqB;qBACRD,GAAGC,IAAH,GAAUF,QAArB;;aAEGC,GAAGb,MAAR;;UAEIe,SAASV,OAAOW,YAAP,CAAoBC,KAApB,CAA0BL,QAA1B,CAAf;UACMM,SAASb,OAAOW,YAAP,CAAoBG,gBAApB,CAAqCJ,MAArC,CAAf;UACMK,OAAOC,OAAOC,MAAP,CAAc,IAAd,CAAb;WACK,IAAIzB,IAAI,CAAb,EAAgBA,IAAIkB,OAAOjB,MAA3B,EAAmCD,KAAK,CAAxC,EAA2C;YACrC,OAAOkB,OAAOlB,CAAP,CAAP,KAAqB,QAAzB,EAAmC;eAC5BkB,OAAOlB,CAAP,EAAUF,IAAf,IAAuB,IAAvB;;;eAGK,EAAEuB,cAAF,EAAUE,UAAV,EAAT;YACMG,GAAN,CAAUX,QAAV,EAAoBF,MAApB;YACME,QAAN,GAAiBA,QAAjB;;;QAGEY,MAAMrB,OAAOsB,OAAP,GAAiBf,OAAOQ,MAAP,CAAcV,MAAd,EAAsBJ,OAAtB,CAAjB,IAAmD,GAA7D;;QAEIA,QAAQsB,oBAAR,IAAgClB,MAApC,EAA4C;UACpCmB,cAAcN,OAAOC,MAAP,CAAc,IAAd,CAApB;UACMF,QAAOC,OAAOD,IAAP,CAAYZ,MAAZ,CAAb;WACK,IAAIX,KAAI,CAAb,EAAgBA,KAAIuB,MAAKtB,MAAzB,EAAiCD,MAAK,CAAtC,EAAyC;YACjC+B,MAAMR,MAAKvB,EAAL,CAAZ;YACI,CAACa,OAAOU,IAAP,CAAYQ,GAAZ,CAAL,EAAuB;sBACTA,GAAZ,IAAmBpB,OAAOoB,GAAP,CAAnB;;;UAGEC,QAAQzB,QAAQsB,oBAAR,CAA6BC,WAA7B,CAAd;UACIE,KAAJ,EAAW;eACFA,MAAMC,MAAN,CAAa,CAAb,MAAoB,GAApB,GAA0BD,KAA1B,SAAsCA,KAA7C;;;;WAIGL,GAAP;GApDF;;;AAwDFnB,OAAOH,YAAP,GAAsBA,YAAtB,CAEA;;;;"}
\No newline at end of file