UNPKG

8.86 kBSource Map (JSON)View Raw
1{"version":3,"file":"use-router.js","sources":["../src/use-router/location.js","../src/use-router/parse.js","../src/use-router/use-router.js"],"sourcesContent":["/**\r\n * @return {string} pathname\r\n */\r\nexport function getPathname() {\r\n return location.pathname;\r\n}\r\n/**\r\n * Dispatch history a new pathname\r\n * @type {Redirect}\r\n */\r\nexport function redirect(pathname) {\r\n if (pathname == getPathname()) return;\r\n history.pushState({}, \"history\", pathname);\r\n window.dispatchEvent(new PopStateEvent(\"popstate\"));\r\n}\r\n\r\nexport function subscribe(handler) {\r\n window.addEventListener(\"popstate\", handler);\r\n return () => window.removeEventListener(\"popstate\", handler);\r\n}\r\n","const FOLDERS = /([^\\/]+)/g;\r\nconst FOLDER = \"[^\\\\/]\";\r\nconst SPLIT = \"(?:\\\\/){0,1}\";\r\nconst PARAM = /^(:)(\\w+)(\\?|(\\.){3}){0,1}/;\r\nconst PARAMS_EMPTY = {};\r\nconst MEMO = {};\r\n\r\nexport function format(path) {\r\n return path.replace(/(\\/){2,}/g, \"/\").replace(/([^\\/]+)\\/$/, \"$1\");\r\n}\r\n\r\nexport function join(a, b) {\r\n let split = \"/\";\r\n return format((a || split) + split + (b || split));\r\n}\r\n\r\nexport function parse(string) {\r\n let folders = string.match(FOLDERS) || [\"\"];\r\n let params = [];\r\n let regexp = new RegExp(\r\n \"^\" +\r\n folders\r\n .map(folder => {\r\n let [string, param, field, type] =\r\n folder.match(PARAM) || [];\r\n if (param) {\r\n params.push(field);\r\n if (type === \"...\") {\r\n return `(.*)`;\r\n } else if (type === \"?\") {\r\n return `${SPLIT}(${FOLDER}*)`;\r\n } else {\r\n return `\\\\/(${FOLDER}+)`;\r\n }\r\n } else {\r\n return `\\\\/(?:${folder\r\n .replace(/(\\.|\\-)/g, \"\\\\$1\")\r\n .replace(/\\*/g, FOLDER + \"+\")\r\n .replace(/\\((?!\\?\\:)/g, \"(?:\")})`;\r\n }\r\n })\r\n .join(\"\") +\r\n \"$\",\r\n \"i\"\r\n );\r\n\r\n return { regexp, params, logs: {} };\r\n}\r\n/**\r\n * permite comparar un patron de captura vs un ruta de entrada\r\n * @param {string} path - ruta de patron de captura\r\n * @param {string} value - ruta de comparacion a patron\r\n * @return {array} - [ inRoute:boolean, params:object ];\r\n */\r\nexport function match(path, value) {\r\n path = format(path);\r\n value = format(value);\r\n if (!MEMO[path]) {\r\n MEMO[path] = parse(path);\r\n }\r\n let { regexp, params, logs } = MEMO[path];\r\n if (logs[value]) {\r\n return logs[value];\r\n }\r\n let vs = value.match(regexp);\r\n return (logs[value] = [\r\n vs ? true : false,\r\n vs\r\n ? vs.slice(1).reduce((next, value, index) => {\r\n next[params[index] || index] = value;\r\n return next;\r\n }, {})\r\n : PARAMS_EMPTY\r\n ]);\r\n}\r\n","import { useState, useEffect, useCallback } from \"../core/core\";\r\nimport { redirect, getPathname, subscribe } from \"./location\";\r\nimport { match, join } from \"./parse\";\r\n\r\nexport function useHistory() {\r\n let pathname = getPathname();\r\n let [state, setState] = useState({ pathname });\r\n\r\n useEffect(() => {\r\n function handler() {\r\n let pathname = getPathname();\r\n setState(state =>\r\n state.pathname != pathname ? { pathname } : state\r\n );\r\n }\r\n return subscribe(handler);\r\n }, []);\r\n return [pathname, redirect];\r\n}\r\n\r\nexport function useMatchRoute(path) {\r\n return match(path, getPathname());\r\n}\r\n\r\nexport function useRoute(path, parentPath) {\r\n useHistory();\r\n return useMatchRoute(join(parentPath, path));\r\n}\r\n\r\nexport function useRedirect(path, parentPath) {\r\n return useCallback(\r\n replacePath =>\r\n redirect(\r\n join(\r\n parentPath,\r\n typeof replacePath == \"string\" ? replacePath : path\r\n )\r\n ),\r\n [path, parentPath]\r\n );\r\n}\r\n\r\nexport function useRouter(cases, parentPath) {\r\n let def = \"default\";\r\n let [pathname] = useHistory();\r\n for (let key in cases) {\r\n if (key != def) {\r\n let [status, params] = match(join(parentPath, key), pathname);\r\n if (status) return cases[key](params);\r\n }\r\n }\r\n return cases[def]();\r\n}\r\n"],"names":["useState","useEffect","useCallback"],"mappings":"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"}
\No newline at end of file