{"version":3,"file":"useViteRoutes.js","names":[],"sources":["esm/router/useViteRoutes.js"],"sourcesContent":["import { hasWebHistory, isNative } from \"../constants\";\nimport { handleSkewError, isChunkLoadError } from \"../utils/dynamicImport\";\nimport { diagnoseRouteLoadFailure } from \"./diagnoseRouteLoadFailure\";\nimport { hmrImport } from \"./hmrImport\";\nlet lastVersion = 0;\nlet context;\nfunction useViteRoutes(routes, routerRoot, options, version) {\n  if (version && version > lastVersion) {\n    context = null;\n    lastVersion = version;\n    for (const key of Object.keys(preloadedModules)) {\n      delete preloadedModules[key];\n    }\n  }\n  if (!context) {\n    loadRoutes(routes, routerRoot, options);\n  }\n  return context;\n}\nconst preloadedModules = {};\nfunction registerPreloadedRoute(key, module) {\n  preloadedModules[key] = module;\n}\nfunction getPreloadedModule(key) {\n  return preloadedModules[key];\n}\nfunction getPreloadedModuleKeys() {\n  return Object.keys(preloadedModules);\n}\nfunction matchDynamicRoute(routePattern, actualPath) {\n  const routeSegments = routePattern.split(\"/\");\n  const pathSegments = actualPath.split(\"/\");\n  const hasCatchAll = routeSegments.some((s) => s.startsWith(\"[...\"));\n  if (hasCatchAll) {\n    const catchAllIdx = routeSegments.findIndex((s) => s.startsWith(\"[...\"));\n    for (let i = 0; i < catchAllIdx; i++) {\n      if (!routeSegments[i]) continue;\n      if (routeSegments[i].startsWith(\"[\")) continue;\n      if (routeSegments[i] !== pathSegments[i]) return false;\n    }\n    return pathSegments.length >= catchAllIdx;\n  }\n  if (routeSegments.length !== pathSegments.length) return false;\n  for (let i = 0; i < routeSegments.length; i++) {\n    const routeSeg = routeSegments[i];\n    const pathSeg = pathSegments[i];\n    if (routeSeg.startsWith(\"[\") && routeSeg.endsWith(\"]\")) {\n      continue;\n    }\n    if (routeSeg !== pathSeg) return false;\n  }\n  return true;\n}\nasync function preloadRouteModules(href) {\n  const globbed = globalThis[\"__importMetaGlobbed\"];\n  if (!globbed) return;\n  const normalizedHref = href === \"/\" ? \"\" : href.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n  const promises = [];\n  for (const key of Object.keys(globbed)) {\n    let routePath = key.replace(/^\\/[^/]+\\//, \"\");\n    routePath = routePath.replace(/\\([^)]+\\)\\//g, \"\");\n    routePath = routePath.replace(/\\/_layout\\.tsx$/, \"\").replace(/\\/index(\\+[a-z]+)?\\.tsx$/, \"\").replace(/(\\+[a-z]+)?\\.tsx$/, \"\");\n    routePath = routePath.replace(/^\\//, \"\");\n    const isStaticMatch = routePath === normalizedHref || // exact match\n    routePath.startsWith(normalizedHref + \"/\") || // child route\n    normalizedHref.startsWith(routePath + \"/\") || // parent layout\n    routePath === \"\" || // root layout\n    normalizedHref !== \"\" && routePath === normalizedHref.split(\"/\")[0];\n    const isDynamicMatch = routePath.includes(\"[\") && matchDynamicRoute(routePath, normalizedHref);\n    if ((isStaticMatch || isDynamicMatch) && typeof globbed[key] === \"function\") {\n      promises.push(\n        globbed[key]().then((mod) => {\n          preloadedModules[key] = mod;\n        })\n      );\n    }\n  }\n  await Promise.all(promises);\n}\nfunction loadRoutes(paths, routerRoot, options) {\n  if (context) return context;\n  globalThis[\"__importMetaGlobbed\"] = paths;\n  context = globbedRoutesToRouteContext(paths, routerRoot, options);\n  return context;\n}\nfunction globbedRoutesToRouteContext(paths, routerRoot, options) {\n  const routesSync = {};\n  const routePaths = {};\n  const promises = {};\n  const loadedRoutes = {};\n  const clears = {};\n  Object.keys(paths).forEach((path) => {\n    if (!paths[path]) {\n      console.error(`Error: Missing route at path ${path}`);\n      return;\n    }\n    const loadRouteFunction = paths[path];\n    const pathWithoutRelative = path.replace(`/${routerRoot}/`, \"./\");\n    const originalPath = pathWithoutRelative.slice(1).replace(/\\.[jt]sx?$/, \"\");\n    if (options?.routeModes?.[originalPath] === \"spa\") {\n      console.info(`Spa mode: ${originalPath}`);\n      loadedRoutes[pathWithoutRelative] = () => {\n        return null;\n      };\n    } else {\n      routesSync[pathWithoutRelative] = loadRouteFunction;\n      routePaths[pathWithoutRelative] = path;\n    }\n  });\n  const moduleKeys = Object.keys(routesSync);\n  let hmrVersion = 0;\n  if (typeof window !== \"undefined\") {\n    ;\n    window.__oneRouteCache = {\n      clear: () => {\n        hmrVersion++;\n        Object.keys(loadedRoutes).forEach((key) => {\n          delete loadedRoutes[key];\n        });\n        Object.keys(promises).forEach((key) => {\n          delete promises[key];\n        });\n        Object.keys(preloadedModules).forEach((key) => {\n          delete preloadedModules[key];\n        });\n      },\n      clearFile: (file) => {\n        const normalizedFile = file.replace(/\\\\/g, \"/\").replace(/^\\//, \"\");\n        const routeId = moduleKeys.find(\n          (key) => routePaths[key].replace(/\\\\/g, \"/\").replace(/^\\//, \"\") === normalizedFile\n        );\n        if (!routeId) return false;\n        hmrVersion++;\n        delete loadedRoutes[routeId];\n        delete promises[routeId];\n        delete preloadedModules[routePaths[routeId]];\n        return true;\n      },\n      getVersion: () => hmrVersion\n    };\n  }\n  function resolve(id) {\n    clearTimeout(clears[id]);\n    if (loadedRoutes[id]) {\n      return loadedRoutes[id];\n    }\n    const preloadKey = id.replace(\"./\", `/${routerRoot}/`);\n    const preloaded = getPreloadedModule(preloadKey);\n    if (preloaded) {\n      loadedRoutes[id] = preloaded;\n      return preloaded;\n    }\n    if (typeof routesSync[id] !== \"function\") {\n      return routesSync[id];\n    }\n    if (!promises[id]) {\n      let importPromise;\n      if (process.env.NODE_ENV === \"development\" && hmrVersion > 0 && routePaths[id]) {\n        importPromise = isNative ? routesSync[id]().then(() => hmrImport(routePaths[id])) : hmrImport(routePaths[id]);\n      } else {\n        importPromise = routesSync[id]();\n      }\n      promises[id] = importPromise.then((val) => {\n        loadedRoutes[id] = val;\n        delete promises[id];\n        if (process.env.NODE_ENV === \"development\") {\n          clears[id] = setTimeout(() => {\n            delete loadedRoutes[id];\n          }, 500);\n        }\n        return val;\n      }).catch((err) => {\n        console.error(`Error loading route`, id, err, new Error().stack);\n        const reloading = isChunkLoadError(err) && handleSkewError();\n        if (process.env.NODE_ENV === \"development\") {\n          ;\n          globalThis.__oneReportRouteLoadError?.({\n            id,\n            message: err instanceof Error ? err.message : String(err),\n            stack: err instanceof Error ? err.stack : void 0\n          });\n          if (hasWebHistory && routePaths[id] && !reloading) {\n            diagnoseRouteLoadFailure(id, routePaths[id]).then((message) => {\n              if (message) console.error(message);\n            }).catch(() => {\n            });\n          }\n        }\n        loadedRoutes[id] = {\n          default: () => null\n        };\n        delete promises[id];\n      });\n      if (process.env.NODE_ENV === \"development\") {\n        promises[id].stack = new Error().stack;\n      }\n    }\n    throw promises[id];\n  }\n  resolve.keys = () => moduleKeys;\n  resolve.id = \"\";\n  resolve.resolve = (id) => id;\n  return resolve;\n}\nexport {\n  getPreloadedModule,\n  getPreloadedModuleKeys,\n  globbedRoutesToRouteContext,\n  loadRoutes,\n  preloadRouteModules,\n  registerPreloadedRoute,\n  useViteRoutes\n};\n//# sourceMappingURL=useViteRoutes.js.map\n"],"mappings":"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"}