{"version":3,"sources":["../src/index.ts","../src/app/bindings.tsx","../src/common/params-from-current-path/index.ts","../src/common/convert-to-number-if-possible/index.ts","../src/app/navigate-to-resource.tsx","../src/common/parse-table-params.ts"],"sourcesContent":["export * from \"./app/index.js\";\n\nexport { default } from \"./app/index.js\";\n","import {\n  type GoConfig,\n  type RouterProvider,\n  ResourceContext,\n  matchResourceFromRoute,\n  type ParseResponse,\n  QS_PARSE_DEPTH,\n} from \"@refinedev/core\";\nimport { useRouter, usePathname, useSearchParams } from \"next/navigation\";\nimport NextLink from \"next/link\";\nimport qs from \"qs\";\nimport React, { type ComponentProps, useContext } from \"react\";\nimport { paramsFromCurrentPath } from \"../common/params-from-current-path\";\nimport { convertToNumberIfPossible } from \"src/common/convert-to-number-if-possible\";\n\nexport const stringifyConfig = {\n  addQueryPrefix: true,\n  skipNulls: true,\n  arrayFormat: \"indices\" as const,\n  encode: false,\n  encodeValuesOnly: true,\n};\n\nexport const routerProvider: RouterProvider = {\n  go: () => {\n    const { push, replace } = useRouter();\n    const pathname = usePathname();\n    const searchParamsObj = useSearchParams();\n\n    const fn = React.useCallback(\n      ({\n        to,\n        type,\n        query,\n        options: { keepQuery, keepHash } = {},\n        hash,\n      }: GoConfig) => {\n        let urlHash = \"\";\n\n        if (keepHash && typeof document !== \"undefined\") {\n          urlHash = document.location.hash;\n        }\n\n        if (hash) {\n          urlHash = `#${hash.replace(/^#/, \"\")}`;\n        }\n\n        const urlQuery = {\n          ...(keepQuery\n            ? qs.parse(searchParamsObj.toString(), {\n                ignoreQueryPrefix: true,\n                depth: QS_PARSE_DEPTH,\n              })\n            : {}),\n          ...query,\n        };\n\n        if (urlQuery.to) {\n          urlQuery.to = encodeURIComponent(`${urlQuery.to}`);\n        }\n\n        const cleanPathname = pathname?.split(\"?\")[0].split(\"#\")[0] ?? \"\";\n\n        const urlTo = to || cleanPathname;\n\n        const hasUrlHash = urlHash.length > 1;\n        const hasUrlQuery = Object.keys(urlQuery).length > 0;\n\n        const fullPath = `${urlTo}${\n          hasUrlQuery ? qs.stringify(urlQuery, stringifyConfig) : \"\"\n        }${hasUrlHash ? urlHash : \"\"}`;\n\n        if (type === \"path\") {\n          return fullPath;\n        }\n\n        if (type === \"replace\") {\n          replace(fullPath);\n        } else {\n          push(fullPath);\n        }\n\n        return undefined;\n      },\n      [searchParamsObj, push, replace],\n    );\n\n    return fn;\n  },\n  back: () => {\n    const { back } = useRouter();\n\n    return back;\n  },\n  parse: () => {\n    const pathname = usePathname();\n    const searchParamsObj = useSearchParams();\n    const { resources } = useContext(ResourceContext);\n\n    const { resource, action, matchedRoute } = React.useMemo(() => {\n      if (!pathname) return { found: false };\n      return matchResourceFromRoute(pathname, resources);\n    }, [pathname, resources]);\n\n    const inferredParams =\n      matchedRoute && pathname\n        ? paramsFromCurrentPath(pathname, matchedRoute)\n        : {};\n\n    const inferredId = inferredParams.id;\n\n    const parsedParams = React.useMemo(() => {\n      const searchParams = searchParamsObj.toString();\n      return qs.parse(searchParams, {\n        ignoreQueryPrefix: true,\n        depth: QS_PARSE_DEPTH,\n      });\n    }, [searchParamsObj]);\n\n    const fn = React.useCallback(() => {\n      const combinedParams = {\n        ...inferredParams,\n        ...parsedParams,\n      };\n\n      const response: ParseResponse = {\n        ...(resource && { resource }),\n        ...(action && { action }),\n        ...(inferredId && { id: decodeURIComponent(inferredId) }),\n        pathname: pathname ? pathname : undefined,\n        params: {\n          ...combinedParams,\n          currentPage: convertToNumberIfPossible(\n            combinedParams.currentPage as string,\n          ) as number | undefined,\n          pageSize: convertToNumberIfPossible(\n            combinedParams.pageSize as string,\n          ) as number | undefined,\n          to: combinedParams.to\n            ? decodeURIComponent(combinedParams.to as string)\n            : undefined,\n        },\n      };\n\n      return response;\n    }, [pathname, parsedParams, inferredParams, inferredId, resource, action]);\n\n    return fn;\n  },\n  Link: React.forwardRef<\n    HTMLAnchorElement,\n    ComponentProps<NonNullable<RouterProvider[\"Link\"]>>\n  >(function RefineLink({ to, ...props }, ref) {\n    return <NextLink href={to} {...props} ref={ref} />;\n  }),\n};\n","export const paramsFromCurrentPath = (\n  pathname: string,\n  matchingRoute: string,\n) => {\n  const params: Record<string, string> = {};\n\n  // remove leading and trailing slashes\n  const sanitizedMatchingRoute = matchingRoute.replace(/^\\/|\\/$/g, \"\");\n  const sanitizedPathname = pathname.replace(/^\\/|\\/$/g, \"\");\n\n  const matchingRouteParts = sanitizedMatchingRoute.split(\"/\");\n  const pathnameParts = sanitizedPathname.split(\"/\");\n\n  matchingRouteParts.forEach((part, index) => {\n    if (part.startsWith(\":\")) {\n      if (pathnameParts[index]?.length > 0) {\n        params[part.replace(\":\", \"\")] = pathnameParts[index];\n      }\n    }\n  });\n\n  return params;\n};\n","export const convertToNumberIfPossible = (value: string | undefined) => {\n  if (typeof value === \"undefined\") {\n    return value;\n  }\n  const num = Number(value);\n  if (`${num}` === value) {\n    return num;\n  }\n  return value;\n};\n","import { useResourceParams, useGetToPath } from \"@refinedev/core\";\nimport React from \"react\";\nimport { useRouter } from \"next/navigation\";\n\ntype NavigateToResourceProps = {\n  resource?: string;\n  fallbackTo?: string;\n  meta?: Record<string, unknown>;\n};\n\nexport const NavigateToResource = ({\n  resource: resourceProp,\n  fallbackTo,\n  meta,\n}: NavigateToResourceProps) => {\n  const ran = React.useRef(false);\n  const { replace } = useRouter();\n  const getToPath = useGetToPath();\n  const { resource, resources } = useResourceParams({ resource: resourceProp });\n\n  const toResource = React.useMemo(\n    () => resource || resources.find((r) => r.list),\n    [resource, resources],\n  );\n\n  React.useEffect(() => {\n    if (toResource) {\n      if (!ran.current) {\n        const path = getToPath({\n          resource: toResource,\n          action: \"list\",\n          meta,\n        });\n\n        if (path) {\n          replace(path);\n        }\n        ran.current = true;\n      }\n    } else if (fallbackTo) {\n      console.warn(`No resource is found. navigation to ${fallbackTo}.`);\n      replace(fallbackTo);\n      ran.current = true;\n    }\n  }, [toResource, replace, meta, getToPath]);\n\n  return null;\n};\n","import qs from \"qs\";\nimport { type ParsedParams, QS_PARSE_DEPTH } from \"@refinedev/core\";\n\nconst parseTableParams = (search: string) => {\n  const parsed: ParsedParams = qs.parse(search, {\n    ignoreQueryPrefix: true,\n    depth: QS_PARSE_DEPTH,\n  });\n\n  const tableReady = {\n    ...parsed,\n    pagination: {\n      currentPage: parsed.currentPage,\n      pageSize: parsed.pageSize,\n    },\n  };\n\n  delete tableReady.currentPage;\n  delete tableReady.pageSize;\n\n  return tableReady;\n};\n\nexport default parseTableParams;\n"],"mappings":"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","names":["React","qs","NextLink","import_core","import_react","import_navigation","React","import_qs","import_core","qs"]}