{"version":3,"sources":["../../../src/client/core/radix-router.ts"],"names":["createRouter","RadixRouter","route","path","options","hasQuery","parseQuery","routeIndex","result","queries","queryPair","queryPairSplit","key","value"],"mappings":"AAIA,OAAS,gBAAAA,MAAoB,SAEtB,MAAMC,CAAmC,CAAzC,cACN,KAAiB,QAAUD,EAAa,EACxC,KAAiB,QAAU,CAAC,EAE5B,SAASE,EAA0B,CAClC,KAAK,QAAQ,OAAOA,EAAM,KAAMA,CAAK,EACrC,KAAK,QAAQ,KAAKA,CAAK,CACxB,CAEA,KAAKC,EAAcC,EAA+C,CACjEA,EAAQ,MAAM,IAAI,QAAS,qBAAqBD,IAAO,EAGvD,MAAME,EAAWF,EAAK,SAAS,GAAG,EAC5BD,EAAQ,KAAK,QAAQ,OAAOG,EAAWF,EAAK,UAAU,EAAGA,EAAK,QAAQ,GAAG,CAAC,EAAIA,CAAI,EACxF,OAAAC,EAAQ,MAAM,IAAI,QAAS,uCAAuC,KAAK,UAAUF,CAAK,GAAG,EAElFA,EACJ,CACA,UAAWA,EAAM,UACjB,SAAUA,EAAM,SAChB,aAAcA,EAAM,aACpB,OAAQA,EAAM,OACd,KAAMA,EAAM,KACZ,MAAOG,EAAWC,EAAWH,CAAI,EAAI,CAAC,CACtC,EACA,IACJ,CAEA,YAAYA,EAAc,CACzB,KAAK,QAAQ,OAAOA,CAAI,EACxB,MAAMI,EAAa,KAAK,QAAQ,UAAWL,GAAUA,EAAM,OAASC,CAAI,EACxE,KAAK,QAAQ,OAAOI,EAAY,CAAC,CAClC,CAEA,OAAQ,CACP,MAAO,CACN,IAAK,eACL,UAAW,KAAK,QAAQ,OACxB,OAAQ,KAAK,OACd,CACD,CACD,CAEA,MAAMD,EAAcH,GAAyC,CAC5D,IAAIK,EAAS,CAAC,EAGd,MAAMC,EAAUN,EAAK,UAAUA,EAAK,QAAQ,GAAG,EAAI,CAAC,EAAE,MAAM,GAAG,EAC/D,QAASO,KAAaD,EAAS,CAC9B,MAAME,EAAiBD,EAAU,QAAQ,GAAG,EACtCE,EAAMF,EAAU,UAAU,EAAGC,CAAc,EAC3CE,EAAQH,EAAU,UAAUC,EAAiB,CAAC,EACpDH,EAAOI,IAAOC,GAAA,YAAAA,EAAO,MAAM,OAAQ,CAAC,EAEpC,QAAS,EAAI,EAAG,EAAIL,EAAOI,GAAK,OAAQ,IACvCJ,EAAOI,GAAK,GAAK,mBAAmBJ,EAAOI,GAAK,EAAE,EAI/CJ,EAAOI,GAAK,SAAW,IAC1BJ,EAAOI,GAAOJ,EAAOI,GAAK,GAE5B,CAEA,OAAOJ,CACR","sourcesContent":["/**\n * © 2022 WavePlay <dev@waveplay.com>\n */\nimport type { PilotRouter, PilotRouteOptions, PilotRouteResult, PilotRouterOptions } from '../types'\nimport { createRouter } from 'radix3'\n\nexport class RadixRouter implements PilotRouter {\n\tprivate readonly _router = createRouter()\n\tprivate readonly _routes = []\n\n\taddRoute(route: PilotRouteOptions) {\n\t\tthis._router.insert(route.path, route)\n\t\tthis._routes.push(route)\n\t}\n\n\tfind(path: string, options: PilotRouterOptions): PilotRouteResult {\n\t\toptions.pilot.log('debug', `RadixRouter: find(${path})`)\n\n\t\t// Find using radix3 library. We also remove query params from the path to avoid param issues.\n\t\tconst hasQuery = path.includes('?')\n\t\tconst route = this._router.lookup(hasQuery ? path.substring(0, path.indexOf('?')) : path)\n\t\toptions.pilot.log('debug', `RadixRouter: Found matching page... ${JSON.stringify(route)}`)\n\n\t\treturn route\n\t\t\t? {\n\t\t\t\t\tComponent: route.Component,\n\t\t\t\t\tgetProps: route.getProps,\n\t\t\t\t\tgetPropsType: route.getPropsType,\n\t\t\t\t\tparams: route.params,\n\t\t\t\t\tpath: route.path,\n\t\t\t\t\tquery: hasQuery ? parseQuery(path) : {}\n\t\t\t  }\n\t\t\t: null\n\t}\n\n\tremoveRoute(path: string) {\n\t\tthis._router.remove(path)\n\t\tconst routeIndex = this._routes.findIndex((route) => route.path === path)\n\t\tthis._routes.splice(routeIndex, 1)\n\t}\n\n\tstats() {\n\t\treturn {\n\t\t\tkey: 'radix-router',\n\t\t\tnumRoutes: this._routes.length,\n\t\t\troutes: this._routes\n\t\t}\n\t}\n}\n\nconst parseQuery = (path: string): { [key: string]: any } => {\n\tlet result = {}\n\n\t// Parse out queries!\n\tconst queries = path.substring(path.indexOf('?') + 1).split('&')\n\tfor (let queryPair of queries) {\n\t\tconst queryPairSplit = queryPair.indexOf('=')\n\t\tconst key = queryPair.substring(0, queryPairSplit)\n\t\tconst value = queryPair.substring(queryPairSplit + 1)\n\t\tresult[key] = value?.split(',') || []\n\n\t\tfor (let i = 0; i < result[key].length; i++) {\n\t\t\tresult[key][i] = decodeURIComponent(result[key][i])\n\t\t}\n\n\t\t// Don't store as array if there's only one value\n\t\tif (result[key].length === 1) {\n\t\t\tresult[key] = result[key][0]\n\t\t}\n\t}\n\n\treturn result\n}\n"]}