{"version":3,"file":"index.mjs","sources":["../../src/Router.tsx","../../src/hooks.ts","../../src/matchRoutes.tsx","../../src/BrowserRouter.tsx","../../src/Route.tsx","../../src/RouterLink.tsx"],"sourcesContent":["import { parseUrlQuery, stringifyUrlQuery } from 'dew-qs'\nimport { WebsiteRoute } from 'dew-types'\nimport { compile, PathFunction } from 'path-to-regexp'\nimport React, { createContext, ReactNode, useCallback, useContext, useMemo } from 'react'\n\nimport {\n  LinkValue,\n  MatchedRoute,\n  RouterLocation,\n  RouterNavigator,\n  StringOrStringArray,\n  UrlParams,\n} from './types'\n\nexport interface LocationContextValue {\n  routes: WebsiteRoute[]\n  matchedRoutes: MatchedRoute[]\n  location: RouterLocation\n  navigator: RouterNavigator\n  query: Record<string, StringOrStringArray>\n  pathFnMap: Record<string, PathFunction<UrlParams>>\n}\n\nexport const LocationContext = createContext<LocationContextValue | undefined>(undefined)\n\nexport interface RouterProps {\n  routes: WebsiteRoute[]\n  matchedRoutes: MatchedRoute[]\n  children: ReactNode\n  location: RouterLocation\n  navigator: RouterNavigator\n}\n\nexport function makePathFnMap(_routes: WebsiteRoute[]) {\n  const routes = [..._routes]\n  const result: Record<string, PathFunction<UrlParams>> = {}\n  while (routes.length > 0) {\n    const r = routes.shift()\n    if (!r) {\n      break\n    }\n    const { children, name, lang, pattern } = r\n    result[`${name}:${lang}`] = compile(pattern)\n    if (Array.isArray(children)) {\n      routes.push(\n        ...children.map((child) => ({\n          ...child,\n          pattern: [pattern, child.pattern.replace(/^\\//, '')].join('/'),\n        })),\n      )\n    }\n  }\n  return result\n}\n\nexport function Router({\n  location,\n  routes,\n  matchedRoutes,\n  navigator,\n  children,\n}: RouterProps) {\n  const pathFnMap: Record<string, PathFunction<UrlParams>> = useMemo(() => {\n    return makePathFnMap(routes)\n  }, [routes])\n\n  return (\n    <LocationContext.Provider\n      value={{\n        location,\n        navigator,\n        routes,\n        matchedRoutes,\n        pathFnMap,\n        query: parseUrlQuery(location.search),\n      }}\n    >\n      {children}\n    </LocationContext.Provider>\n  )\n}\n\nexport function useRouter() {\n  const context = useContext(LocationContext)\n  if (!context) {\n    throw new Error('useRouter must be use within StaticRouter or BrowserRouter')\n  }\n  const { pathFnMap } = context\n\n  const parseLink = useCallback(\n    ({ name, lang, params, query }: LinkValue) => {\n      const key = `${name}:${lang}`\n      const fn = pathFnMap[key]\n      if (!fn) {\n        console.warn(`Cannot find route with key = ${key}`)\n        return null\n      }\n      return [fn(params), query && stringifyUrlQuery(query)].filter(Boolean).join('?')\n    },\n    [pathFnMap],\n  )\n\n  return {\n    routes: context.routes,\n    matchedRoutes: context.matchedRoutes,\n    location: context.location,\n    query: context.query,\n    navigator: context.navigator,\n    parseLink,\n    pathFnMap,\n  }\n}\n","import { useContext } from 'react'\n\nimport { LocationContext } from './Router'\nimport { StringOrStringArray } from './types'\n\nexport function useUrlParams() {\n  const ctx = useContext(LocationContext)\n  if (!ctx) {\n    throw new Error(\n      `useUrlParams must be use with Router (BrowserRouter or StaticRouter) component`,\n    )\n  }\n  const { matchedRoutes } = ctx\n  return matchedRoutes.reduce<Record<string, StringOrStringArray>>(\n    (acc, { params }) => ({\n      ...acc,\n      ...params,\n    }),\n    {},\n  )\n}\n\nexport function useUrlQuery() {\n  const ctx = useContext(LocationContext)\n  if (!ctx) {\n    throw new Error(\n      `useUrlQuery must be use with Router (BrowserRouter or StaticRouter) component`,\n    )\n  }\n  const { query } = ctx\n  return query\n}\n\nexport function useStringUrlParam(key: string): string {\n  const params = useUrlParams()\n  const v = params[key]\n  if (typeof v === 'string') return v\n  return (v && v[0]) ?? ''\n}\n\nexport function useIntUrlParam(key: string): number | undefined {\n  const v = useStringUrlParam(key)\n  return parseInt(v, 10) ?? undefined\n}\n\nexport function useFloatUrlParam(key: string): number | undefined {\n  const v = useStringUrlParam(key)\n  return parseFloat(v) ?? undefined\n}\n\nexport function useStringUrlQuery(key: string): string {\n  const params = useUrlQuery()\n  const v = params[key]\n  if (typeof v === 'string') return v\n  return (v && v[0]) ?? ''\n}\n\nexport function useIntUrlQuery(key: string): number | undefined {\n  const v = useStringUrlQuery(key)\n  return parseInt(v, 10) ?? undefined\n}\n\nexport function useFloatUrlQuery(key: string): number | undefined {\n  const v = useStringUrlQuery(key)\n  return parseFloat(v) ?? undefined\n}\n","import { WebsiteRoute } from 'dew-types'\nimport { compile, match } from 'path-to-regexp'\n\nimport { MatchedRoute, UrlParams } from './types'\n\nexport function matchRoutes(path: string, routes: WebsiteRoute[]) {\n  const result: MatchedRoute[] = []\n  let iter = [...routes]\n  let prefix = ''\n  while (iter.length > 0) {\n    const [current, ...nextIter] = iter\n    const hasChildren = !!current?.children?.length\n    let pattern = prefix + current.pattern\n    if (hasChildren) {\n      pattern = pattern + '/:others*'\n    }\n    if (pattern !== '/' && pattern.endsWith('/')) {\n      pattern = pattern.substring(0, pattern.length - 1)\n    }\n    const matcher = match<UrlParams>(pattern, { decode: decodeURIComponent })\n    const matchResult = matcher(path)\n    if (matchResult) {\n      prefix = prefix + current.pattern\n      iter = hasChildren ? [...(current.children || [])] : []\n      result.push({\n        name: current.name,\n        page: current.page,\n        pattern: current.pattern,\n        lang: current.lang,\n        path,\n        params: matchResult.params,\n        matcher,\n        pathFn: compile(pattern),\n      })\n    } else {\n      iter = nextIter\n    }\n  }\n  return result\n}\n","import { WebsiteRoute } from 'dew-types'\nimport React, { ReactNode, useEffect, useMemo, useState } from 'react'\n\nimport { Router } from './index'\nimport { matchRoutes } from './matchRoutes'\n\nexport interface BrowserRouterProps {\n  routes: WebsiteRoute[]\n  children: ReactNode\n}\n\nexport function BrowserRouter({ routes, children }: BrowserRouterProps) {\n  const [location, setLocation] = useState(() => {\n    return {\n      pathname: document.location.pathname,\n      search: document.location.search,\n    }\n  })\n\n  // Add events listenner when mounted\n  useEffect(() => {\n    const cb = () => {\n      setLocation({\n        pathname: document.location.pathname,\n        search: document.location.search,\n      })\n    }\n    const toTop = () => {\n      window.scrollTo({ top: 0 })\n    }\n    window.addEventListener('popstate', cb)\n    window.addEventListener('historychange', cb)\n    window.addEventListener('historychange', toTop)\n    return () => {\n      window.removeEventListener('popstate', cb)\n      window.removeEventListener('historychange', cb)\n      window.removeEventListener('historychange', toTop)\n    }\n  }, [])\n\n  const matchedRoutes = useMemo(() => {\n    return matchRoutes(location.pathname, routes)\n  }, [location, routes])\n\n  return (\n    <Router\n      navigator={{\n        pushState: (...args) => {\n          window.history.pushState(...args)\n          window.dispatchEvent(new Event('historychange', {}))\n        },\n        navigate: (to) => {\n          window.history.pushState({}, '', to)\n          window.dispatchEvent(new Event('historychange', {}))\n        },\n      }}\n      matchedRoutes={matchedRoutes}\n      routes={routes}\n      location={location}\n    >\n      {children}\n    </Router>\n  )\n}\n","import { cloneElement, ReactElement } from 'react'\n\nimport { useRouter } from './Router'\nimport { StringOrStringArray } from './types'\n\nexport function Route({\n  name,\n  lang,\n  children,\n}: {\n  name: string\n  lang: string\n  children:\n    | ((props: { params?: Record<string, StringOrStringArray> }) => ReactElement)\n    | ReactElement\n}) {\n  const { matchedRoutes } = useRouter()\n  const route = matchedRoutes.find((x) => x.name === name && x.lang === lang)\n  if (!route) {\n    return null\n  }\n  const props = { params: route.params }\n  if (typeof children === 'function') {\n    return children(props)\n  }\n  return cloneElement(children, props)\n}\n","import React from 'react'\n\nimport { useRouter } from './Router'\n\ntype HtmlAnchorProps = JSX.IntrinsicElements['a']\nexport interface RouterLinkProps extends HtmlAnchorProps {\n  to: string\n}\n\nexport function RouterLink({ to, onClick, ...rest }: RouterLinkProps) {\n  const { navigator } = useRouter()\n  return (\n    <a\n      {...rest}\n      onClick={(e) => {\n        e.preventDefault()\n        e.stopPropagation()\n        navigator.navigate(to)\n        if (onClick) {\n          onClick(e)\n        }\n      }}\n      href={to}\n    />\n  )\n}\n"],"names":["LocationContext","createContext","undefined","makePathFnMap","_routes","routes","result","r","shift","children","name","lang","pattern","compile","Array","isArray","push","map","child","replace","join","length","Router","location","matchedRoutes","navigator","pathFnMap","useMemo","query","parseUrlQuery","search","useRouter","context","useContext","Error","parseLink","useCallback","params","key","fn","console","warn","stringifyUrlQuery","filter","Boolean","useUrlParams","ctx","reduce","acc","useUrlQuery","useStringUrlParam","v","useIntUrlParam","parseInt","useFloatUrlParam","parseFloat","useStringUrlQuery","useIntUrlQuery","useFloatUrlQuery","matchRoutes","path","iter","prefix","current","nextIter","hasChildren","endsWith","substring","matcher","match","decode","decodeURIComponent","matchResult","page","pathFn","BrowserRouter","setLocation","useState","pathname","document","useEffect","cb","toTop","window","scrollTo","top","addEventListener","removeEventListener","pushState","history","dispatchEvent","Event","navigate","to","Route","route","find","x","props","cloneElement","RouterLink","onClick","rest","e","preventDefault","stopPropagation"],"mappings":"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"}