one 1.27.0 → 1.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/dist/cjs/Root.native.js.map +1 -1
  2. package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js.map +1 -1
  3. package/dist/cjs/__mocks__/expo-linking.native.js.map +1 -1
  4. package/dist/cjs/__mocks__/expo-modules-core.native.js.map +1 -1
  5. package/dist/cjs/__mocks__/react-native-screens.native.js.map +1 -1
  6. package/dist/cjs/__tests__/polyfills-mobile.test.native.js.map +1 -1
  7. package/dist/cjs/babel-plugins/environment-guard.native.js.map +1 -1
  8. package/dist/cjs/babel-plugins/inline-one-server-url.native.js.map +1 -1
  9. package/dist/cjs/babel-plugins/one-router-metro.native.js.map +1 -1
  10. package/dist/cjs/babel-plugins/one-router-metro.test.native.js.map +1 -1
  11. package/dist/cjs/babel-plugins/remove-server-code.native.js.map +1 -1
  12. package/dist/cjs/babel-preset/index.native.js.map +1 -1
  13. package/dist/cjs/babel-preset/index.test.native.js.map +1 -1
  14. package/dist/cjs/babel-preset/integration.test.native.js.map +1 -1
  15. package/dist/cjs/cli/build.native.js.map +1 -1
  16. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  17. package/dist/cjs/cli/buildPageWorker.native.js.map +1 -1
  18. package/dist/cjs/cli/checkNodeVersion.native.js.map +1 -1
  19. package/dist/cjs/cli/daemon.native.js.map +1 -1
  20. package/dist/cjs/cli/dev.native.js.map +1 -1
  21. package/dist/cjs/cli/generateBundlerConfig.native.js.map +1 -1
  22. package/dist/cjs/cli/generateBundlerConfig.test.native.js.map +1 -1
  23. package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
  24. package/dist/cjs/cli/generateSitemap.native.js.map +1 -1
  25. package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -1
  26. package/dist/cjs/cli/install-error-handlers.native.js.map +1 -1
  27. package/dist/cjs/cli/label-process.native.js.map +1 -1
  28. package/dist/cjs/cli/main.native.js.map +1 -1
  29. package/dist/cjs/cli/patch.native.js.map +1 -1
  30. package/dist/cjs/cli/patch.test.native.js.map +1 -1
  31. package/dist/cjs/cli/prebuild.native.js.map +1 -1
  32. package/dist/cjs/cli/prebuild.test.native.js.map +1 -1
  33. package/dist/cjs/cli/runAndroid.native.js.map +1 -1
  34. package/dist/cjs/cli/runIos.native.js.map +1 -1
  35. package/dist/cjs/cli/securityScan.native.js.map +1 -1
  36. package/dist/cjs/cli/serverRouteModules.native.js.map +1 -1
  37. package/dist/cjs/cli/workerPool.native.js.map +1 -1
  38. package/dist/cjs/cli.native.js.map +1 -1
  39. package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
  40. package/dist/cjs/config.native.js.map +1 -1
  41. package/dist/cjs/constants.native.js.map +1 -1
  42. package/dist/cjs/constants.test.native.js.map +1 -1
  43. package/dist/cjs/createAPIRoute.native.js.map +1 -1
  44. package/dist/cjs/createDevHandleRequest.native.js.map +1 -1
  45. package/dist/cjs/createHandleRequest.native.js.map +1 -1
  46. package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
  47. package/dist/cjs/createMiddleware.native.js.map +1 -1
  48. package/dist/cjs/daemon/index.native.js.map +1 -1
  49. package/dist/cjs/daemon/ipc.native.js.map +1 -1
  50. package/dist/cjs/daemon/picker.native.js.map +1 -1
  51. package/dist/cjs/daemon/proxy.native.js.map +1 -1
  52. package/dist/cjs/daemon/registry.native.js.map +1 -1
  53. package/dist/cjs/daemon/server.native.js.map +1 -1
  54. package/dist/cjs/daemon/tui.native.js.map +1 -1
  55. package/dist/cjs/daemon/types.native.js.map +1 -1
  56. package/dist/cjs/daemon/utils.native.js.map +1 -1
  57. package/dist/cjs/devtools/registry.native.js.map +1 -1
  58. package/dist/cjs/drawer.native.js.map +1 -1
  59. package/dist/cjs/fallbackViews/Sitemap.native.js.map +1 -1
  60. package/dist/cjs/fallbackViews/Unmatched.native.js.map +1 -1
  61. package/dist/cjs/fork/NavigationContainer.native.js.map +1 -1
  62. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +1 -1
  63. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
  64. package/dist/cjs/fork/_shared.native.js.map +1 -1
  65. package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
  66. package/dist/cjs/fork/createMemoryHistory.test.native.js.map +1 -1
  67. package/dist/cjs/fork/extractPathFromURL.native.js.map +1 -1
  68. package/dist/cjs/fork/extractPathFromURL.test.native.js.map +1 -1
  69. package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
  70. package/dist/cjs/fork/getPathFromState-mods.native.js.map +1 -1
  71. package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
  72. package/dist/cjs/fork/getPathFromState.test.native.js.map +1 -1
  73. package/dist/cjs/fork/getStateFromPath-mods.native.js.map +1 -1
  74. package/dist/cjs/fork/getStateFromPath.native.js.map +1 -1
  75. package/dist/cjs/fork/getStateFromPath.test.native.js.map +1 -1
  76. package/dist/cjs/fork/useLinking.native.test.native.js.map +1 -1
  77. package/dist/cjs/fork/useThenable.native.js.map +1 -1
  78. package/dist/cjs/fork/validatePathConfig.native.js.map +1 -1
  79. package/dist/cjs/getReactNavigationConfig.native.js.map +1 -1
  80. package/dist/cjs/getURL.native.test.native.js.map +1 -1
  81. package/dist/cjs/head/Head.native.js.map +1 -1
  82. package/dist/cjs/head/HeadModule.native.js.map +1 -1
  83. package/dist/cjs/head/index.native.js.map +1 -1
  84. package/dist/cjs/head/types.native.js.map +1 -1
  85. package/dist/cjs/head/url.native.js.map +1 -1
  86. package/dist/cjs/headless/Presentations.native.js.map +1 -1
  87. package/dist/cjs/headless/__tests__/useStack.test.native.js.map +1 -1
  88. package/dist/cjs/headless/children.native.js.map +1 -1
  89. package/dist/cjs/headless/keepMounted.native.js.map +1 -1
  90. package/dist/cjs/headless/types.native.js.map +1 -1
  91. package/dist/cjs/headless/useDrawer.native.js.map +1 -1
  92. package/dist/cjs/headless/useStack.native.js.map +1 -1
  93. package/dist/cjs/headless/useTabs.native.js.map +1 -1
  94. package/dist/cjs/headless-server.native.js.map +1 -1
  95. package/dist/cjs/headless.native.js.map +1 -1
  96. package/dist/cjs/hooks.native.js.map +1 -1
  97. package/dist/cjs/hooks.test.native.js.map +1 -1
  98. package/dist/cjs/href.native.js.map +1 -1
  99. package/dist/cjs/image/getImageData.native.js.map +1 -1
  100. package/dist/cjs/image.native.js.map +1 -1
  101. package/dist/cjs/index.native.js +1 -1
  102. package/dist/cjs/index.native.js.map +1 -1
  103. package/dist/cjs/interfaces/router.native.js.map +1 -1
  104. package/dist/cjs/layouts/Drawer.native.js.map +1 -1
  105. package/dist/cjs/layouts/NativeTabs.native.js.map +1 -1
  106. package/dist/cjs/layouts/NativeTabs.test.native.js.map +1 -1
  107. package/dist/cjs/layouts/Stack.native.js +1 -1
  108. package/dist/cjs/layouts/Stack.native.js.map +1 -1
  109. package/dist/cjs/layouts/Tabs.native.js.map +1 -1
  110. package/dist/cjs/layouts/stack-navigator.native.js.map +1 -1
  111. package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
  112. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
  113. package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
  114. package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
  115. package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
  116. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
  117. package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -1
  118. package/dist/cjs/layouts/stack-utils/StackToolbar.native.js.map +1 -1
  119. package/dist/cjs/layouts/stack-utils/StackToolbar.shared.native.js.map +1 -1
  120. package/dist/cjs/layouts/stack-utils/StackToolbar.types.native.js.map +1 -1
  121. package/dist/cjs/layouts/stack-utils/StackToolbarImplementation.native.js.map +1 -1
  122. package/dist/cjs/layouts/stack-utils/__tests__/StackToolbar.test.native.js.map +1 -1
  123. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
  124. package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -1
  125. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  126. package/dist/cjs/layouts/withLayoutContext.test.native.js.map +1 -1
  127. package/dist/cjs/lazyWithRetry.native.js.map +1 -1
  128. package/dist/cjs/link/Link.native.js.map +1 -1
  129. package/dist/cjs/link/Redirect.native.js.map +1 -1
  130. package/dist/cjs/link/Redirect.test.native.js.map +1 -1
  131. package/dist/cjs/link/getLinking.native.js.map +1 -1
  132. package/dist/cjs/link/href.native.js.map +1 -1
  133. package/dist/cjs/link/path.native.js.map +1 -1
  134. package/dist/cjs/link/prefetchIntent.native.js.map +1 -1
  135. package/dist/cjs/link/prefetchIntent.test.native.js.map +1 -1
  136. package/dist/cjs/link/prefetchViewport.native.js.map +1 -1
  137. package/dist/cjs/link/prefetchViewport.test.native.js.map +1 -1
  138. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  139. package/dist/cjs/link/useLoadedNavigation.native.js.map +1 -1
  140. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -1
  141. package/dist/cjs/metro-config/buildOneMetroResolverOverrides.test.native.js.map +1 -1
  142. package/dist/cjs/metro-config/getViteMetroPluginOptions.integration.test.native.js.map +1 -1
  143. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +1 -1
  144. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  145. package/dist/cjs/metro-config/withOne.native.js.map +1 -1
  146. package/dist/cjs/metro-config/withOne.test.native.js.map +1 -1
  147. package/dist/cjs/native-tabs.native.js.map +1 -1
  148. package/dist/cjs/native-transforms.native.js.map +1 -1
  149. package/dist/cjs/notFoundState.native.js.map +1 -1
  150. package/dist/cjs/package-exports.test.native.js.map +1 -1
  151. package/dist/cjs/polyfills-mobile.native.js.map +1 -1
  152. package/dist/cjs/polyfills-server.native.js.map +1 -1
  153. package/dist/cjs/router/FlagsContext.native.js.map +1 -1
  154. package/dist/cjs/router/Route.native.js.map +1 -1
  155. package/dist/cjs/router/RouteInfoContext.native.js.map +1 -1
  156. package/dist/cjs/router/RouterStore.native.js.map +1 -1
  157. package/dist/cjs/router/SpaShellContext.native.js.map +1 -1
  158. package/dist/cjs/router/conditionalSlotPathname.test.native.js.map +1 -1
  159. package/dist/cjs/router/createRoute.native.js.map +1 -1
  160. package/dist/cjs/router/diagnoseRouteLoadFailure.native.js.map +1 -1
  161. package/dist/cjs/router/filterRootHTML.native.js.map +1 -1
  162. package/dist/cjs/router/findRouteNode.native.js.map +1 -1
  163. package/dist/cjs/router/getLinkingConfig.native.js.map +1 -1
  164. package/dist/cjs/router/getLinkingConfig.test.native.js.map +1 -1
  165. package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
  166. package/dist/cjs/router/getRouteArtifactPath.native.js.map +1 -1
  167. package/dist/cjs/router/getRouteArtifactPath.test.native.js.map +1 -1
  168. package/dist/cjs/router/getRouteInfo.native.js.map +1 -1
  169. package/dist/cjs/router/getRouteInfo.test.native.js.map +1 -1
  170. package/dist/cjs/router/getRoutes.native.js.map +1 -1
  171. package/dist/cjs/router/getRoutes.test.native.js.map +1 -1
  172. package/dist/cjs/router/glob-patterns.native.js.map +1 -1
  173. package/dist/cjs/router/hmrImport.native.test.native.js.map +1 -1
  174. package/dist/cjs/router/imperative-api.native.js.map +1 -1
  175. package/dist/cjs/router/interceptRoutes.native.js.map +1 -1
  176. package/dist/cjs/router/isIndexPath.native.js.map +1 -1
  177. package/dist/cjs/router/isStateAwaitingNavigatorMount.native.js.map +1 -1
  178. package/dist/cjs/router/lastAction.native.js.map +1 -1
  179. package/dist/cjs/router/linkToOrphaned.test.native.js.map +1 -1
  180. package/dist/cjs/router/linkingConfig.native.js.map +1 -1
  181. package/dist/cjs/router/matchers.native.js.map +1 -1
  182. package/dist/cjs/router/matchers.test.native.js.map +1 -1
  183. package/dist/cjs/router/params.native.js.map +1 -1
  184. package/dist/cjs/router/path.native.js.map +1 -1
  185. package/dist/cjs/router/path.test.native.js.map +1 -1
  186. package/dist/cjs/router/protectedRoutes.test.native.js.map +1 -1
  187. package/dist/cjs/router/routeHmr.native.test.native.js.map +1 -1
  188. package/dist/cjs/router/router.cjs +5 -0
  189. package/dist/cjs/router/router.native.js.map +1 -1
  190. package/dist/cjs/router/serverLocationContext.native.js.map +1 -1
  191. package/dist/cjs/router/sitemap.native.js.map +1 -1
  192. package/dist/cjs/router/sitemap.test.native.js.map +1 -1
  193. package/dist/cjs/router/sortRoutes.native.js.map +1 -1
  194. package/dist/cjs/router/useInitializeOneRouter.native.js.map +1 -1
  195. package/dist/cjs/router/useInitializeOneRouter.preview-lifecycle.test.native.js.map +1 -1
  196. package/dist/cjs/router/useNavigation.native.js.map +1 -1
  197. package/dist/cjs/router/useScreens.native.js.map +1 -1
  198. package/dist/cjs/router/useScreens.test.native.js.map +1 -1
  199. package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
  200. package/dist/cjs/router/useViteRoutes.test.native.js.map +1 -1
  201. package/dist/cjs/router/utils/getNavigateAction.native.js.map +1 -1
  202. package/dist/cjs/router/utils/getNavigateAction.test.native.js.map +1 -1
  203. package/dist/cjs/router/web/WebStackNavigator.native.js.map +1 -1
  204. package/dist/cjs/router/web/WebStackView.native.js.map +1 -1
  205. package/dist/cjs/router/web/__tests__/stackStateUtils.test.native.js.map +1 -1
  206. package/dist/cjs/router/web/stackStateUtils.native.js.map +1 -1
  207. package/dist/cjs/serve-worker.native.js.map +1 -1
  208. package/dist/cjs/serve.native.js.map +1 -1
  209. package/dist/cjs/server/ServerContextScript.native.js.map +1 -1
  210. package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
  211. package/dist/cjs/server/getServerManifest.native.js.map +1 -1
  212. package/dist/cjs/server/getServerManifest.test.native.js.map +1 -1
  213. package/dist/cjs/server/oneServe.native.js.map +1 -1
  214. package/dist/cjs/server/routeExportsFromEntry.native.js.map +1 -1
  215. package/dist/cjs/server/setServerGlobals.native.js.map +1 -1
  216. package/dist/cjs/server/setupBuildOptions.native.js.map +1 -1
  217. package/dist/cjs/server/setupServerGlobals.native.js.map +1 -1
  218. package/dist/cjs/server/ssrLoaderData.native.js.map +1 -1
  219. package/dist/cjs/server/staticHtmlFetcher.native.js.map +1 -1
  220. package/dist/cjs/server/workerHandler.native.js.map +1 -1
  221. package/dist/cjs/server/workerHandler.test.native.js.map +1 -1
  222. package/dist/cjs/server-render.native.js.map +1 -1
  223. package/dist/cjs/skewProtection.native.js.map +1 -1
  224. package/dist/cjs/stack-toolbar-implementation.native.js.map +1 -1
  225. package/dist/cjs/testing-utils.native.js.map +1 -1
  226. package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
  227. package/dist/cjs/typed-routes/generateRouteTypes.test.native.js.map +1 -1
  228. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  229. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.test.native.js.map +1 -1
  230. package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -1
  231. package/dist/cjs/types.native.js.map +1 -1
  232. package/dist/cjs/ui/Slot.native.js.map +1 -1
  233. package/dist/cjs/ui/TabContext.native.js.map +1 -1
  234. package/dist/cjs/ui/TabList.native.js.map +1 -1
  235. package/dist/cjs/ui/TabRouter.native.js.map +1 -1
  236. package/dist/cjs/ui/TabSlot.native.js.map +1 -1
  237. package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
  238. package/dist/cjs/ui/Tabs.native.js.map +1 -1
  239. package/dist/cjs/ui/Tabs.shared.native.js.map +1 -1
  240. package/dist/cjs/ui/common.native.js.map +1 -1
  241. package/dist/cjs/ui/index.native.js.map +1 -1
  242. package/dist/cjs/ui/useComponent.native.js.map +1 -1
  243. package/dist/cjs/ui/useTabTrigger.native.js.map +1 -1
  244. package/dist/cjs/useFocusEffect.native.js.map +1 -1
  245. package/dist/cjs/useLoader.native.js.map +1 -1
  246. package/dist/cjs/useMatches.native.js.map +1 -1
  247. package/dist/cjs/useMatches.test.native.js.map +1 -1
  248. package/dist/cjs/useServerHeadInsertion.native.js.map +1 -1
  249. package/dist/cjs/utils/assertIsReady.native.js.map +1 -1
  250. package/dist/cjs/utils/buildOutputPointer.native.js.map +1 -1
  251. package/dist/cjs/utils/buildOutputPointer.test.native.js.map +1 -1
  252. package/dist/cjs/utils/children.native.js.map +1 -1
  253. package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
  254. package/dist/cjs/utils/cleanUrl.test.native.js.map +1 -1
  255. package/dist/cjs/utils/dynamicImport.native.js.map +1 -1
  256. package/dist/cjs/utils/dynamicImport.test.native.js.map +1 -1
  257. package/dist/cjs/utils/ensureExists.native.js.map +1 -1
  258. package/dist/cjs/utils/evictOldest.native.js.map +1 -1
  259. package/dist/cjs/utils/existsAsync.native.js.map +1 -1
  260. package/dist/cjs/utils/findRootLayout.native.js.map +1 -1
  261. package/dist/cjs/utils/getPageExport.native.js.map +1 -1
  262. package/dist/cjs/utils/getPathnameFromFilePath.native.js.map +1 -1
  263. package/dist/cjs/utils/getPathnameFromFilePath.test.native.js.map +1 -1
  264. package/dist/cjs/utils/getRouterRootFromOneOptions.native.js.map +1 -1
  265. package/dist/cjs/utils/globDir.native.js.map +1 -1
  266. package/dist/cjs/utils/hashString.native.js.map +1 -1
  267. package/dist/cjs/utils/htmlEscape.native.js.map +1 -1
  268. package/dist/cjs/utils/isResponse.native.js.map +1 -1
  269. package/dist/cjs/utils/isRolldown.native.js.map +1 -1
  270. package/dist/cjs/utils/isStatus.native.js.map +1 -1
  271. package/dist/cjs/utils/pLimit.native.js.map +1 -1
  272. package/dist/cjs/utils/platform.native.js.map +1 -1
  273. package/dist/cjs/utils/posixPathContract.test.native.js.map +1 -1
  274. package/dist/cjs/utils/promiseWithResolvers.native.js.map +1 -1
  275. package/dist/cjs/utils/rand.native.js.map +1 -1
  276. package/dist/cjs/utils/redirect.native.js.map +1 -1
  277. package/dist/cjs/utils/removeParams.native.js.map +1 -1
  278. package/dist/cjs/utils/removeSearch.native.js.map +1 -1
  279. package/dist/cjs/utils/removeUndefined.native.js.map +1 -1
  280. package/dist/cjs/utils/routeFileWatch.native.js.map +1 -1
  281. package/dist/cjs/utils/routeFileWatch.test.native.js.map +1 -1
  282. package/dist/cjs/utils/routeIndex.native.js.map +1 -1
  283. package/dist/cjs/utils/routeIndex.test.native.js.map +1 -1
  284. package/dist/cjs/utils/style.native.js.map +1 -1
  285. package/dist/cjs/utils/toAbsolute.native.js.map +1 -1
  286. package/dist/cjs/utils/toServerOutputPath.native.js.map +1 -1
  287. package/dist/cjs/utils/toServerOutputPath.test.native.js.map +1 -1
  288. package/dist/cjs/utils/trackLoaderDependencies.native.js.map +1 -1
  289. package/dist/cjs/utils/url.cjs +22 -1
  290. package/dist/cjs/utils/url.native.js +22 -1
  291. package/dist/cjs/utils/url.native.js.map +1 -1
  292. package/dist/cjs/utils/url.test.cjs +59 -0
  293. package/dist/cjs/utils/url.test.native.js +62 -0
  294. package/dist/cjs/utils/url.test.native.js.map +1 -0
  295. package/dist/cjs/utils/useConstant.native.js.map +1 -1
  296. package/dist/cjs/utils/watchFile.native.js.map +1 -1
  297. package/dist/cjs/utils/weakKey.native.js.map +1 -1
  298. package/dist/cjs/utils/weakMemo.native.js.map +1 -1
  299. package/dist/cjs/utils/withStaticProperties.native.js.map +1 -1
  300. package/dist/cjs/utils/workerImport.native.js.map +1 -1
  301. package/dist/cjs/validateParams.native.js.map +1 -1
  302. package/dist/cjs/validateSearch.native.js.map +1 -1
  303. package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
  304. package/dist/cjs/vercel/build/config/vc-build-output-config-base.native.js.map +1 -1
  305. package/dist/cjs/vercel/build/config/vc-config-base.native.js.map +1 -1
  306. package/dist/cjs/vercel/build/config/vc-package-base.native.js.map +1 -1
  307. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
  308. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
  309. package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
  310. package/dist/cjs/views/EmptyRoute.native.js.map +1 -1
  311. package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
  312. package/dist/cjs/views/LoadProgressBar.native.js.map +1 -1
  313. package/dist/cjs/views/Navigator.native.js.map +1 -1
  314. package/dist/cjs/views/OneStackRouter.native.js.map +1 -1
  315. package/dist/cjs/views/PreloadLinks.cjs +20 -10
  316. package/dist/cjs/views/PreloadLinks.test.cjs +73 -0
  317. package/dist/cjs/views/PreloadLinks.test.native.js +78 -0
  318. package/dist/cjs/views/PreloadLinks.test.native.js.map +1 -0
  319. package/dist/cjs/views/Protected.native.js.map +1 -1
  320. package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
  321. package/dist/cjs/views/RouteErrorView.native.js.map +1 -1
  322. package/dist/cjs/views/Screen.native.js.map +1 -1
  323. package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
  324. package/dist/cjs/views/ScrollBehavior.test.native.js.map +1 -1
  325. package/dist/cjs/views/SourceInspector.native.js.map +1 -1
  326. package/dist/cjs/views/SuspenseFallback.native.js.map +1 -1
  327. package/dist/cjs/views/Try.native.js.map +1 -1
  328. package/dist/cjs/vite/DevHead.native.js.map +1 -1
  329. package/dist/cjs/vite/cloudflareWranglerConfig.native.js.map +1 -1
  330. package/dist/cjs/vite/cloudflareWranglerConfig.test.native.js.map +1 -1
  331. package/dist/cjs/vite/constants.native.js.map +1 -1
  332. package/dist/cjs/vite/customNodeExternals.native.js.map +1 -1
  333. package/dist/cjs/vite/ensureTsConfig.native.js.map +1 -1
  334. package/dist/cjs/vite/findDepsToOptimize.native.js.map +1 -1
  335. package/dist/cjs/vite/getManifest.native.js.map +1 -1
  336. package/dist/cjs/vite/getManifest.test.native.js.map +1 -1
  337. package/dist/cjs/vite/loadConfig.native.js.map +1 -1
  338. package/dist/cjs/vite/makePluginWebOnly.native.js.map +1 -1
  339. package/dist/cjs/vite/one-server-only.test.native.js.map +1 -1
  340. package/dist/cjs/vite/one.native.js.map +1 -1
  341. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  342. package/dist/cjs/vite/plugins/bundledDevPlugin.native.js.map +1 -1
  343. package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
  344. package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js.map +1 -1
  345. package/dist/cjs/vite/plugins/criticalCSSPlugin.native.js.map +1 -1
  346. package/dist/cjs/vite/plugins/criticalCSSPlugin.test.native.js.map +1 -1
  347. package/dist/cjs/vite/plugins/devtoolsPlugin.native.js.map +1 -1
  348. package/dist/cjs/vite/plugins/environmentGuardPlugin.native.js.map +1 -1
  349. package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js.map +1 -1
  350. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  351. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
  352. package/dist/cjs/vite/plugins/fixDependenciesPlugin.native.js.map +1 -1
  353. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  354. package/dist/cjs/vite/plugins/imageDataPlugin.native.js.map +1 -1
  355. package/dist/cjs/vite/plugins/imageDataPlugin.test.native.js.map +1 -1
  356. package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
  357. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.native.js.map +1 -1
  358. package/dist/cjs/vite/plugins/routeModuleHmrPlugin.test.native.js.map +1 -1
  359. package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
  360. package/dist/cjs/vite/plugins/sourceInspectorPlugin.test.native.js.map +1 -1
  361. package/dist/cjs/vite/plugins/useDomPlugin.native.js.map +1 -1
  362. package/dist/cjs/vite/plugins/virtualEntryConstants.native.js.map +1 -1
  363. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  364. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  365. package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
  366. package/dist/cjs/vite/plugins/workerdDevPlugin.native.js.map +1 -1
  367. package/dist/cjs/vite/plugins/workerdDevPlugin.test.native.js.map +1 -1
  368. package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
  369. package/dist/cjs/vite/types.native.js.map +1 -1
  370. package/dist/cjs/vite-auto-warm.native.js.map +1 -1
  371. package/dist/cjs/vite.native.js.map +1 -1
  372. package/dist/cjs/zero/getQueryKey.native.js.map +1 -1
  373. package/dist/cjs/zero/isZeroQuery.native.js.map +1 -1
  374. package/dist/cjs/zero/resolveQuery.native.js.map +1 -1
  375. package/dist/cjs/zero/subscribeToQuery.native.js.map +1 -1
  376. package/dist/cjs/zero/types.native.js.map +1 -1
  377. package/dist/cjs/zero/useQuery.native.js.map +1 -1
  378. package/dist/cjs/zero/useQueryZero.native.js.map +1 -1
  379. package/dist/cjs/zero.native.js.map +1 -1
  380. package/dist/esm/router/router.mjs +6 -1
  381. package/dist/esm/router/router.mjs.map +1 -1
  382. package/dist/esm/utils/url.mjs +20 -1
  383. package/dist/esm/utils/url.mjs.map +1 -1
  384. package/dist/esm/utils/url.native.js +20 -1
  385. package/dist/esm/utils/url.native.js.map +1 -1
  386. package/dist/esm/utils/url.test.mjs +60 -0
  387. package/dist/esm/utils/url.test.mjs.map +1 -0
  388. package/dist/esm/utils/url.test.native.js +60 -0
  389. package/dist/esm/utils/url.test.native.js.map +1 -0
  390. package/dist/esm/views/PreloadLinks.mjs +19 -10
  391. package/dist/esm/views/PreloadLinks.mjs.map +1 -1
  392. package/dist/esm/views/PreloadLinks.test.mjs +74 -0
  393. package/dist/esm/views/PreloadLinks.test.mjs.map +1 -0
  394. package/dist/esm/views/PreloadLinks.test.native.js +76 -0
  395. package/dist/esm/views/PreloadLinks.test.native.js.map +1 -0
  396. package/package.json +9 -9
  397. package/src/router/router.ts +10 -1
  398. package/src/utils/url.test.ts +67 -0
  399. package/src/utils/url.ts +22 -0
  400. package/src/views/PreloadLinks.test.ts +78 -0
  401. package/src/views/PreloadLinks.tsx +22 -11
  402. package/types/router/router.d.ts.map +1 -1
  403. package/types/utils/url.d.ts +2 -0
  404. package/types/utils/url.d.ts.map +1 -1
  405. package/types/utils/url.test.d.ts +2 -0
  406. package/types/utils/url.test.d.ts.map +1 -0
  407. package/types/views/PreloadLinks.d.ts +10 -0
  408. package/types/views/PreloadLinks.d.ts.map +1 -1
  409. package/types/views/PreloadLinks.test.d.ts +2 -0
  410. package/types/views/PreloadLinks.test.d.ts.map +1 -0
@@ -1,18 +1,27 @@
1
1
  import { useEffect, useRef } from "react";
2
2
  import { getURL } from "../getURL.mjs";
3
3
  import { preloadRoute } from "../router/router.mjs";
4
+ import { shouldPreloadRoute } from "../utils/url.mjs";
4
5
  const PREFETCH_MODE = process.env.ONE_LINK_PREFETCH || "intent";
5
- function getHrefFromTarget(url, target) {
6
- if (!(target instanceof HTMLElement)) return null;
7
- const anchor = target instanceof HTMLAnchorElement ? target : target.closest("a");
8
- if (!(anchor instanceof HTMLAnchorElement)) return null;
6
+ function getPrefetchableHref(anchor, url) {
7
+ if (anchor.target && anchor.target !== "_self") return null;
8
+ if (anchor.hasAttribute("download")) return null;
9
+ if (anchor.getAttribute("rel")?.includes("external")) return null;
9
10
  const href = anchor.getAttribute("href");
10
11
  if (!href) return null;
11
12
  if (href[0] === "/" || href.startsWith(url)) {
12
- return href.replace(url, "");
13
+ const cleanHref = href.replace(url, "");
14
+ if (!shouldPreloadRoute(cleanHref)) return null;
15
+ return cleanHref;
13
16
  }
14
17
  return null;
15
18
  }
19
+ function getHrefFromTarget(url, target) {
20
+ if (!(target instanceof HTMLElement)) return null;
21
+ const anchor = target instanceof HTMLAnchorElement ? target : target.closest("a");
22
+ if (!(anchor instanceof HTMLAnchorElement)) return null;
23
+ return getPrefetchableHref(anchor, url);
24
+ }
16
25
  function PreloadLinks() {
17
26
  if (typeof window === "undefined") {
18
27
  return null;
@@ -62,9 +71,9 @@ function PreloadLinks() {
62
71
  links.forEach(link => {
63
72
  if (seen.has(link)) return;
64
73
  seen.add(link);
65
- const href = link.getAttribute("href");
74
+ const href = getPrefetchableHref(link, url);
66
75
  if (href) {
67
- cleanups.push(observePrefetchViewport(link, href.replace(url, "")));
76
+ cleanups.push(observePrefetchViewport(link, href));
68
77
  }
69
78
  });
70
79
  };
@@ -100,9 +109,9 @@ function PreloadLinks() {
100
109
  links.forEach(link => {
101
110
  if (seen.has(link)) return;
102
111
  seen.add(link);
103
- const href = link.getAttribute("href");
112
+ const href = getPrefetchableHref(link, url);
104
113
  if (href) {
105
- cleanups.push(observePrefetchIntent(link, href.replace(url, "")));
114
+ cleanups.push(observePrefetchIntent(link, href));
106
115
  }
107
116
  });
108
117
  };
@@ -137,5 +146,5 @@ function PreloadLinks() {
137
146
  }, []);
138
147
  return null;
139
148
  }
140
- export { PreloadLinks };
149
+ export { PreloadLinks, getPrefetchableHref };
141
150
  //# sourceMappingURL=PreloadLinks.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","getURL","preloadRoute","PREFETCH_MODE","process","env","ONE_LINK_PREFETCH","getHrefFromTarget","url","target","HTMLElement","anchor","HTMLAnchorElement","closest","href","getAttribute","startsWith","replace","PreloadLinks","window","import","meta","PROD","controller","AbortController","document","addEventListener","e","passive","signal","abort","cleanupRef","then","startPrefetchViewport","observePrefetchViewport","cleanups","seen","WeakSet","observeLinks","links","querySelectorAll","forEach","link","has","add","push","timeout","observer","MutationObserver","clearTimeout","setTimeout","observe","body","childList","subtree","current","c","disconnect","startPrefetchIntent","observePrefetchIntent"],"sources":["../../../src/views/PreloadLinks.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","getURL","preloadRoute","shouldPreloadRoute","PREFETCH_MODE","process","env","ONE_LINK_PREFETCH","getPrefetchableHref","anchor","url","target","hasAttribute","getAttribute","includes","href","startsWith","cleanHref","replace","getHrefFromTarget","HTMLElement","HTMLAnchorElement","closest","PreloadLinks","window","import","meta","PROD","controller","AbortController","document","addEventListener","e","passive","signal","abort","cleanupRef","then","startPrefetchViewport","observePrefetchViewport","cleanups","seen","WeakSet","observeLinks","links","querySelectorAll","forEach","link","has","add","push","timeout","observer","MutationObserver","clearTimeout","setTimeout","observe","body","childList","subtree","current","c","disconnect","startPrefetchIntent","observePrefetchIntent"],"sources":["../../../src/views/PreloadLinks.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getPrefetchableHref } from "./PreloadLinks.mjs";
3
+ function createMockAnchor(attrs) {
4
+ const el = {
5
+ getAttribute(name) {
6
+ if (name === "href") return attrs.href ?? null;
7
+ if (name === "rel") return attrs.rel ?? null;
8
+ return null;
9
+ },
10
+ hasAttribute(name) {
11
+ if (name === "download") return !!attrs.download;
12
+ return false;
13
+ },
14
+ target: attrs.target ?? ""
15
+ };
16
+ return el;
17
+ }
18
+ describe("getPrefetchableHref", () => {
19
+ const baseUrl = "https://tamagui.dev";
20
+ it("returns clean href for valid internal routes", () => {
21
+ const anchor = createMockAnchor({
22
+ href: "/ui/button"
23
+ });
24
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe("/ui/button");
25
+ });
26
+ it("returns clean href for absolute urls matching baseUrl", () => {
27
+ const anchor = createMockAnchor({
28
+ href: "https://tamagui.dev/docs/intro"
29
+ });
30
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe("/docs/intro");
31
+ });
32
+ it('returns null for target="_blank"', () => {
33
+ const anchor = createMockAnchor({
34
+ href: "/docs/intro",
35
+ target: "_blank"
36
+ });
37
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
38
+ });
39
+ it("returns null for download attribute", () => {
40
+ const anchor = createMockAnchor({
41
+ href: "/archive.zip",
42
+ download: true
43
+ });
44
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
45
+ });
46
+ it('returns null for rel="external"', () => {
47
+ const anchor = createMockAnchor({
48
+ href: "/docs",
49
+ rel: "external"
50
+ });
51
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
52
+ });
53
+ it("returns null for file extensions (.md, .txt, .png, etc.)", () => {
54
+ expect(getPrefetchableHref(createMockAnchor({
55
+ href: "/ui/button.md"
56
+ }), baseUrl)).toBeNull();
57
+ expect(getPrefetchableHref(createMockAnchor({
58
+ href: "/llms.txt"
59
+ }), baseUrl)).toBeNull();
60
+ expect(getPrefetchableHref(createMockAnchor({
61
+ href: "https://tamagui.dev/ui/button.md"
62
+ }), baseUrl)).toBeNull();
63
+ expect(getPrefetchableHref(createMockAnchor({
64
+ href: "https://tamagui.dev/llms.txt"
65
+ }), baseUrl)).toBeNull();
66
+ });
67
+ it("returns null for external urls", () => {
68
+ const anchor = createMockAnchor({
69
+ href: "https://google.com/about"
70
+ });
71
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
72
+ });
73
+ });
74
+ //# sourceMappingURL=PreloadLinks.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","getPrefetchableHref","createMockAnchor","attrs","el","getAttribute","name","href","rel","hasAttribute","download","target","baseUrl","anchor","toBe","toBeNull"],"sources":["../../../src/views/PreloadLinks.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { getPrefetchableHref } from "./PreloadLinks.native.js";
3
+ function createMockAnchor(attrs) {
4
+ var _attrs_target;
5
+ var el = {
6
+ getAttribute(name) {
7
+ var _attrs_href, _attrs_rel;
8
+ if (name === "href") return (_attrs_href = attrs.href) !== null && _attrs_href !== void 0 ? _attrs_href : null;
9
+ if (name === "rel") return (_attrs_rel = attrs.rel) !== null && _attrs_rel !== void 0 ? _attrs_rel : null;
10
+ return null;
11
+ },
12
+ hasAttribute(name) {
13
+ if (name === "download") return !!attrs.download;
14
+ return false;
15
+ },
16
+ target: (_attrs_target = attrs.target) !== null && _attrs_target !== void 0 ? _attrs_target : ""
17
+ };
18
+ return el;
19
+ }
20
+ describe("getPrefetchableHref", function () {
21
+ var baseUrl = "https://tamagui.dev";
22
+ it("returns clean href for valid internal routes", function () {
23
+ var anchor = createMockAnchor({
24
+ href: "/ui/button"
25
+ });
26
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe("/ui/button");
27
+ });
28
+ it("returns clean href for absolute urls matching baseUrl", function () {
29
+ var anchor = createMockAnchor({
30
+ href: "https://tamagui.dev/docs/intro"
31
+ });
32
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe("/docs/intro");
33
+ });
34
+ it('returns null for target="_blank"', function () {
35
+ var anchor = createMockAnchor({
36
+ href: "/docs/intro",
37
+ target: "_blank"
38
+ });
39
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
40
+ });
41
+ it("returns null for download attribute", function () {
42
+ var anchor = createMockAnchor({
43
+ href: "/archive.zip",
44
+ download: true
45
+ });
46
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
47
+ });
48
+ it('returns null for rel="external"', function () {
49
+ var anchor = createMockAnchor({
50
+ href: "/docs",
51
+ rel: "external"
52
+ });
53
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
54
+ });
55
+ it("returns null for file extensions (.md, .txt, .png, etc.)", function () {
56
+ expect(getPrefetchableHref(createMockAnchor({
57
+ href: "/ui/button.md"
58
+ }), baseUrl)).toBeNull();
59
+ expect(getPrefetchableHref(createMockAnchor({
60
+ href: "/llms.txt"
61
+ }), baseUrl)).toBeNull();
62
+ expect(getPrefetchableHref(createMockAnchor({
63
+ href: "https://tamagui.dev/ui/button.md"
64
+ }), baseUrl)).toBeNull();
65
+ expect(getPrefetchableHref(createMockAnchor({
66
+ href: "https://tamagui.dev/llms.txt"
67
+ }), baseUrl)).toBeNull();
68
+ });
69
+ it("returns null for external urls", function () {
70
+ var anchor = createMockAnchor({
71
+ href: "https://google.com/about"
72
+ });
73
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull();
74
+ });
75
+ });
76
+ //# sourceMappingURL=PreloadLinks.test.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","getPrefetchableHref","createMockAnchor","attrs","_attrs_target","el","getAttribute","name","_attrs_href","_attrs_rel","href","rel","hasAttribute","download","target","baseUrl","anchor","toBe","toBeNull"],"sources":["../../../src/views/PreloadLinks.test.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,EAAA,QAAU;AACrC,SAASC,mBAAA,QAA2B;AAEpC,SAASC,iBAAiBC,KAAA,EAKJ;EACpB,IAAAC,aAAW;EAAA,IACTC,EAAA;IACEC,YAAIA,CAAAC,IAAS;MACb,IAAIC,WAAS,EAAAC,UAAc;MAC3B,IAAAF,IAAO,qBAAAC,WAAA,GAAAL,KAAA,CAAAO,IAAA,cAAAF,WAAA,cAAAA,WAAA;MACT,IAAAD,IAAA,oBAAAE,UAAA,GAAAN,KAAA,CAAAQ,GAAA,cAAAF,UAAA,cAAAA,UAAA;MACA,WAAa;IACX;IACAG,YAAOA,CAAAL,IAAA;MACT,IAAAA,IAAA,0BAAAJ,KAAA,CAAAU,QAAA;MACA,OAAQ,KAAM;IAChB;IACAC,MAAO,GAAAV,aAAA,GAAAD,KAAA,CAAAW,MAAA,cAAAV,aAAA,cAAAA,aAAA;EACT;EAEA,OAASC,EAAA;AACP;AAEAP,QAAG;EACD,IAAAiB,OAAM,wBAA0B;EAChCf,EAAA,+CAA6C,cAAK;IACnD,IAAAgB,MAAA,GAAAd,gBAAA;MAEEQ,IAAA;IACD;IACAX,MAAA,CAAOE,mBAAA,CAAoBe,MAAA,EAAQD,OAAO,CAAC,EAAEE,IAAA,CAAK,aAAa;EACjE,CAAC;EAEDjB,EAAA,CAAG,uDAA0C;IAC3C,IAAAgB,MAAM,GAAAd,gBAAS;MACfQ,IAAA,EAAO;IACR;IAEDX,MAAG,CAAAE,mBAAA,CAAAe,MAAA,EAAAD,OAAuC,GAAAE,IAAM;EAC9C;EACAjB,EAAA,mCAAmC,cAAU;IAC9C,IAAAgB,MAAA,GAAAd,gBAAA;MAEEQ,IAAA;MACDI,MAAM;IACN;IACDf,MAAA,CAAAE,mBAAA,CAAAe,MAAA,EAAAD,OAAA,GAAAG,QAAA;EAED;EACElB,EAAA;IAAA,IACEgB,MAAA,GAAAd,gBAAoB;MACpBQ,IAAA,gBAAS;MACXG,QAAA;IAAA,EACE;IACFd,MAAE,CAAAE,mBAAS,CAAAe,MAAA,EAAAD,OAAA,GAAAG,QAAA;EACX;EAAAlB,EAAA,kCACE;IAAA,IACEgB,MAAA,GAAAd,gBAAyB;MAAoCQ,IAC7D;MACFC,GAAA;IACF,EAAE;IACFZ,MAAA,CAAAE,mBAAA,CAAAe,MAAA,EAAAD,OAAA,GAAAG,QAAA;EAAA;EACElB,EAAA,2DAC2B,EAAgC;IAAAD,MACzD,CAAAE,mBAAA,CAAAC,gBAAA;MACFQ,IAAA;IACF,EAAE,EAAAK,OAAS,GAAAG,QAAA;IACZnB,MAAA,CAAAE,mBAAA,CAAAC,gBAAA;MAEEQ,IAAA;IACD,IAAAK,OAAM,GAAAG,QAAS;IACfnB,MAAA,CAAOE,mBAAA,CAAoBC,gBAAgB;MAC5CQ,IAAA;IACF,IAAAK,OAAA,GAAAG,QAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "one",
3
- "version": "1.27.0",
3
+ "version": "1.27.1",
4
4
  "license": "BSD-3-Clause",
5
5
  "sideEffects": [
6
6
  "setup.mjs",
@@ -197,18 +197,18 @@
197
197
  "@react-navigation/routers": "~7.6.4",
198
198
  "@cloudflare/vite-plugin": "^1.33.1",
199
199
  "@ungap/structured-clone": "^1.2.0",
200
- "@vxrn/color-scheme": "1.27.0",
201
- "@vxrn/compiler": "1.27.0",
202
- "@vxrn/resolve": "1.27.0",
203
- "@vxrn/tslib-lite": "1.27.0",
204
- "@vxrn/use-isomorphic-layout-effect": "1.27.0",
205
- "@vxrn/vite-plugin-metro": "1.27.0",
200
+ "@vxrn/color-scheme": "1.27.1",
201
+ "@vxrn/compiler": "1.27.1",
202
+ "@vxrn/resolve": "1.27.1",
203
+ "@vxrn/tslib-lite": "1.27.1",
204
+ "@vxrn/use-isomorphic-layout-effect": "1.27.1",
205
+ "@vxrn/vite-plugin-metro": "1.27.1",
206
206
  "babel-dead-code-elimination": "1.0.10",
207
207
  "babel-plugin-module-resolver": "^5.0.2",
208
208
  "babel-preset-expo": "~57.0.5",
209
209
  "citty": "^0.1.6",
210
210
  "core-js": "^3.38.1",
211
- "create-vxrn": "1.27.0",
211
+ "create-vxrn": "1.27.1",
212
212
  "escape-string-regexp": "^5.0.0",
213
213
  "expo-linking": "~57.0.5",
214
214
  "expo-modules-core": "~57.0.10",
@@ -229,7 +229,7 @@
229
229
  "tsconfig-paths": "^4",
230
230
  "use-latest-callback": "^0.2.3",
231
231
  "vite": "^8.2.2",
232
- "vxrn": "1.27.0",
232
+ "vxrn": "1.27.1",
233
233
  "web-streams-polyfill": "^4.3.0",
234
234
  "ws": "^8.21.0",
235
235
  "xxhashjs": "^0.2.2"
@@ -28,7 +28,7 @@ import { getLoaderPath, getPreloadCSSPath, getPreloadPath } from '../utils/clean
28
28
  import { dynamicImport } from '../utils/dynamicImport'
29
29
  import { PLATFORM } from '../utils/platform'
30
30
  import { isVersionStale } from '../skewProtection'
31
- import { shouldLinkExternally } from '../utils/url'
31
+ import { hasFileExtension, shouldLinkExternally, shouldPreloadRoute } from '../utils/url'
32
32
  import {
33
33
  ParamValidationError,
34
34
  RouteValidationError,
@@ -965,6 +965,10 @@ export function getPreloadHistory(): PreloadEntry[] {
965
965
 
966
966
  export function preloadRoute(href: string, injectCSS = false): Promise<any> | undefined {
967
967
  if (process.env.TAMAGUI_TARGET !== 'native') {
968
+ if (!shouldPreloadRoute(href)) {
969
+ return
970
+ }
971
+
968
972
  // in dev mode, use a simpler preload that just fetches the loader directly
969
973
  // this avoids issues with production-only preload paths while still ensuring
970
974
  // loader data is available before navigation completes
@@ -1104,6 +1108,11 @@ export async function linkTo(
1104
1108
  return
1105
1109
  }
1106
1110
 
1111
+ if (process.env.TAMAGUI_TARGET !== 'native' && hasFileExtension(href)) {
1112
+ window.location.href = href
1113
+ return
1114
+ }
1115
+
1107
1116
  // if a new version was detected via polling, force full page navigation
1108
1117
  if (isVersionStale()) {
1109
1118
  window.location.href = href
@@ -0,0 +1,67 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { hasFileExtension, shouldLinkExternally, shouldPreloadRoute } from './url'
3
+
4
+ describe('url utils', () => {
5
+ describe('hasFileExtension', () => {
6
+ it('returns true for common file extensions', () => {
7
+ expect(hasFileExtension('/ui/button.md')).toBe(true)
8
+ expect(hasFileExtension('/llms.txt')).toBe(true)
9
+ expect(hasFileExtension('/favicon.ico')).toBe(true)
10
+ expect(hasFileExtension('/assets/image.png')).toBe(true)
11
+ expect(hasFileExtension('/doc.pdf')).toBe(true)
12
+ expect(hasFileExtension('/data.json')).toBe(true)
13
+ expect(hasFileExtension('/archive.zip')).toBe(true)
14
+ expect(hasFileExtension('/styles.css')).toBe(true)
15
+ expect(hasFileExtension('/script.js')).toBe(true)
16
+ expect(hasFileExtension('/manifest.webmanifest')).toBe(true)
17
+ expect(hasFileExtension('/font.woff2')).toBe(true)
18
+ })
19
+
20
+ it('returns true with query params or hashes', () => {
21
+ expect(hasFileExtension('/ui/button.md?download=1')).toBe(true)
22
+ expect(hasFileExtension('/llms.txt#section')).toBe(true)
23
+ expect(hasFileExtension('https://tamagui.dev/ui/button.md?foo=bar#baz')).toBe(true)
24
+ })
25
+
26
+ it('returns false for route paths without extensions', () => {
27
+ expect(hasFileExtension('/')).toBe(false)
28
+ expect(hasFileExtension('/about')).toBe(false)
29
+ expect(hasFileExtension('/ui/button')).toBe(false)
30
+ expect(hasFileExtension('/docs/components/button')).toBe(false)
31
+ expect(hasFileExtension('/v1.0')).toBe(false)
32
+ expect(hasFileExtension('/version-2.1.0')).toBe(false)
33
+ expect(hasFileExtension('/docs/1.0/intro')).toBe(false)
34
+ })
35
+
36
+ it('returns false for empty or invalid inputs', () => {
37
+ expect(hasFileExtension('')).toBe(false)
38
+ })
39
+ })
40
+
41
+ describe('shouldPreloadRoute', () => {
42
+ it('returns true for valid internal routes', () => {
43
+ expect(shouldPreloadRoute('/')).toBe(true)
44
+ expect(shouldPreloadRoute('/about')).toBe(true)
45
+ expect(shouldPreloadRoute('/ui/button')).toBe(true)
46
+ expect(shouldPreloadRoute('/docs/components/button')).toBe(true)
47
+ })
48
+
49
+ it('returns false for file extensions', () => {
50
+ expect(shouldPreloadRoute('/ui/button.md')).toBe(false)
51
+ expect(shouldPreloadRoute('/llms.txt')).toBe(false)
52
+ expect(shouldPreloadRoute('/favicon.ico')).toBe(false)
53
+ })
54
+
55
+ it('returns false for external urls or schemes', () => {
56
+ expect(shouldPreloadRoute('https://example.com/about')).toBe(false)
57
+ expect(shouldPreloadRoute('http://example.com')).toBe(false)
58
+ expect(shouldPreloadRoute('mailto:test@example.com')).toBe(false)
59
+ expect(shouldPreloadRoute('tel:123456')).toBe(false)
60
+ })
61
+
62
+ it('returns false for hash links or empty hrefs', () => {
63
+ expect(shouldPreloadRoute('#section')).toBe(false)
64
+ expect(shouldPreloadRoute('')).toBe(false)
65
+ })
66
+ })
67
+ })
package/src/utils/url.ts CHANGED
@@ -19,3 +19,25 @@ export function shouldLinkExternally(href: string): boolean {
19
19
  // Cheap check first to avoid regex if the href is not a path fragment.
20
20
  return !/^[./]/.test(href) && (hasUrlProtocolPrefix(href) || isWellKnownUri(href))
21
21
  }
22
+
23
+ const staticFileExtensionRegex = /\.(?:[a-z0-9]{2,5}|webmanifest|wasm|woff2)$/i
24
+
25
+ export function hasFileExtension(href: string): boolean {
26
+ if (!href) return false
27
+ try {
28
+ const url = new URL(href, 'http://localhost')
29
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
30
+ return true
31
+ }
32
+ return staticFileExtensionRegex.test(url.pathname)
33
+ } catch {
34
+ return false
35
+ }
36
+ }
37
+
38
+ export function shouldPreloadRoute(href: string): boolean {
39
+ if (!href || href[0] === '#') return false
40
+ if (shouldLinkExternally(href)) return false
41
+ if (hasFileExtension(href)) return false
42
+ return true
43
+ }
@@ -0,0 +1,78 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { getPrefetchableHref } from './PreloadLinks'
3
+
4
+ function createMockAnchor(attrs: {
5
+ href?: string
6
+ target?: string
7
+ download?: boolean
8
+ rel?: string
9
+ }): HTMLAnchorElement {
10
+ const el = {
11
+ getAttribute(name: string) {
12
+ if (name === 'href') return attrs.href ?? null
13
+ if (name === 'rel') return attrs.rel ?? null
14
+ return null
15
+ },
16
+ hasAttribute(name: string) {
17
+ if (name === 'download') return !!attrs.download
18
+ return false
19
+ },
20
+ target: attrs.target ?? '',
21
+ } as unknown as HTMLAnchorElement
22
+ return el
23
+ }
24
+
25
+ describe('getPrefetchableHref', () => {
26
+ const baseUrl = 'https://tamagui.dev'
27
+
28
+ it('returns clean href for valid internal routes', () => {
29
+ const anchor = createMockAnchor({ href: '/ui/button' })
30
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe('/ui/button')
31
+ })
32
+
33
+ it('returns clean href for absolute urls matching baseUrl', () => {
34
+ const anchor = createMockAnchor({ href: 'https://tamagui.dev/docs/intro' })
35
+ expect(getPrefetchableHref(anchor, baseUrl)).toBe('/docs/intro')
36
+ })
37
+
38
+ it('returns null for target="_blank"', () => {
39
+ const anchor = createMockAnchor({ href: '/docs/intro', target: '_blank' })
40
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull()
41
+ })
42
+
43
+ it('returns null for download attribute', () => {
44
+ const anchor = createMockAnchor({ href: '/archive.zip', download: true })
45
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull()
46
+ })
47
+
48
+ it('returns null for rel="external"', () => {
49
+ const anchor = createMockAnchor({ href: '/docs', rel: 'external' })
50
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull()
51
+ })
52
+
53
+ it('returns null for file extensions (.md, .txt, .png, etc.)', () => {
54
+ expect(
55
+ getPrefetchableHref(createMockAnchor({ href: '/ui/button.md' }), baseUrl)
56
+ ).toBeNull()
57
+ expect(
58
+ getPrefetchableHref(createMockAnchor({ href: '/llms.txt' }), baseUrl)
59
+ ).toBeNull()
60
+ expect(
61
+ getPrefetchableHref(
62
+ createMockAnchor({ href: 'https://tamagui.dev/ui/button.md' }),
63
+ baseUrl
64
+ )
65
+ ).toBeNull()
66
+ expect(
67
+ getPrefetchableHref(
68
+ createMockAnchor({ href: 'https://tamagui.dev/llms.txt' }),
69
+ baseUrl
70
+ )
71
+ ).toBeNull()
72
+ })
73
+
74
+ it('returns null for external urls', () => {
75
+ const anchor = createMockAnchor({ href: 'https://google.com/about' })
76
+ expect(getPrefetchableHref(anchor, baseUrl)).toBeNull()
77
+ })
78
+ })
@@ -2,6 +2,8 @@ import { useEffect, useRef } from 'react'
2
2
  import { getURL } from '../getURL'
3
3
  import { preloadRoute } from '../router/router'
4
4
 
5
+ import { shouldPreloadRoute } from '../utils/url'
6
+
5
7
  /**
6
8
  * Resolved at build time via vite define - enables tree-shaking of unused modes.
7
9
  * Defaults to 'intent' for smart trajectory-based prefetching.
@@ -21,18 +23,27 @@ const PREFETCH_MODE = (process.env.ONE_LINK_PREFETCH || 'intent') as
21
23
  * - 'hover': Prefetches on mouseover
22
24
  * - 'false': Disabled
23
25
  */
24
- function getHrefFromTarget(url: string, target: EventTarget | null): string | null {
25
- if (!(target instanceof HTMLElement)) return null
26
- const anchor = target instanceof HTMLAnchorElement ? target : target.closest('a')
27
- if (!(anchor instanceof HTMLAnchorElement)) return null
26
+ export function getPrefetchableHref(anchor: HTMLAnchorElement, url: string): string | null {
27
+ if (anchor.target && anchor.target !== '_self') return null
28
+ if (anchor.hasAttribute('download')) return null
29
+ if (anchor.getAttribute('rel')?.includes('external')) return null
28
30
  const href = anchor.getAttribute('href')
29
31
  if (!href) return null
30
32
  if (href[0] === '/' || href.startsWith(url)) {
31
- return href.replace(url, '')
33
+ const cleanHref = href.replace(url, '')
34
+ if (!shouldPreloadRoute(cleanHref)) return null
35
+ return cleanHref
32
36
  }
33
37
  return null
34
38
  }
35
39
 
40
+ function getHrefFromTarget(url: string, target: EventTarget | null): string | null {
41
+ if (!(target instanceof HTMLElement)) return null
42
+ const anchor = target instanceof HTMLAnchorElement ? target : target.closest('a')
43
+ if (!(anchor instanceof HTMLAnchorElement)) return null
44
+ return getPrefetchableHref(anchor, url)
45
+ }
46
+
36
47
  export function PreloadLinks() {
37
48
  if (typeof window === 'undefined') {
38
49
  return null
@@ -92,16 +103,16 @@ export function PreloadLinks() {
92
103
  const seen = new WeakSet<Element>()
93
104
 
94
105
  const observeLinks = () => {
95
- const links = document.querySelectorAll(
106
+ const links = document.querySelectorAll<HTMLAnchorElement>(
96
107
  'a[href^="/"], a[href^="' + url + '"]'
97
108
  )
98
109
  links.forEach((link) => {
99
110
  if (seen.has(link)) return
100
111
  seen.add(link)
101
- const href = link.getAttribute('href')
112
+ const href = getPrefetchableHref(link, url)
102
113
  if (href) {
103
114
  cleanups.push(
104
- observePrefetchViewport(link as HTMLElement, href.replace(url, ''))
115
+ observePrefetchViewport(link, href)
105
116
  )
106
117
  }
107
118
  })
@@ -139,16 +150,16 @@ export function PreloadLinks() {
139
150
  const seen = new WeakSet<Element>()
140
151
 
141
152
  const observeLinks = () => {
142
- const links = document.querySelectorAll(
153
+ const links = document.querySelectorAll<HTMLAnchorElement>(
143
154
  'a[href^="/"], a[href^="' + url + '"]'
144
155
  )
145
156
  links.forEach((link) => {
146
157
  if (seen.has(link)) return
147
158
  seen.add(link)
148
- const href = link.getAttribute('href')
159
+ const href = getPrefetchableHref(link, url)
149
160
  if (href) {
150
161
  cleanups.push(
151
- observePrefetchIntent(link as HTMLElement, href.replace(url, ''))
162
+ observePrefetchIntent(link, href)
152
163
  )
153
164
  }
154
165
  })
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,6 @@
5
5
  export declare function hasUrlProtocolPrefix(href: string): boolean;
6
6
  export declare function isWellKnownUri(href: string): boolean;
7
7
  export declare function shouldLinkExternally(href: string): boolean;
8
+ export declare function hasFileExtension(href: string): boolean;
9
+ export declare function shouldPreloadRoute(href: string): boolean;
8
10
  //# sourceMappingURL=url.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWtD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=url.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.test.d.ts","sourceRoot":"","sources":["../../src/utils/url.test.ts"],"names":[],"mappings":""}
@@ -1,2 +1,12 @@
1
+ /**
2
+ * Handles link prefetching in production builds.
3
+ *
4
+ * Modes:
5
+ * - 'intent': Predicts navigation based on mouse trajectory (default)
6
+ * - 'viewport': Prefetches links when they enter the viewport
7
+ * - 'hover': Prefetches on mouseover
8
+ * - 'false': Disabled
9
+ */
10
+ export declare function getPrefetchableHref(anchor: HTMLAnchorElement, url: string): string | null;
1
11
  export declare function PreloadLinks(): null;
2
12
  //# sourceMappingURL=PreloadLinks.d.ts.map