@tanstack/solid-router 1.166.7 → 2.0.0-alpha.2

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 (182) hide show
  1. package/dist/cjs/Asset.cjs +111 -68
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/CatchBoundary.cjs +15 -15
  4. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  5. package/dist/cjs/ClientOnly.cjs +2 -2
  6. package/dist/cjs/ClientOnly.cjs.map +1 -1
  7. package/dist/cjs/HeadContent.cjs +16 -8
  8. package/dist/cjs/HeadContent.cjs.map +1 -1
  9. package/dist/cjs/HeadContent.dev.cjs +18 -10
  10. package/dist/cjs/HeadContent.dev.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +125 -81
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +23 -16
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/RouterProvider.cjs +3 -2
  16. package/dist/cjs/RouterProvider.cjs.map +1 -1
  17. package/dist/cjs/SafeFragment.cjs +1 -1
  18. package/dist/cjs/ScriptOnce.cjs +4 -2
  19. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  20. package/dist/cjs/Scripts.cjs +6 -2
  21. package/dist/cjs/Scripts.cjs.map +1 -1
  22. package/dist/cjs/Transitioner.cjs +11 -16
  23. package/dist/cjs/Transitioner.cjs.map +1 -1
  24. package/dist/cjs/awaited.cjs +20 -16
  25. package/dist/cjs/awaited.cjs.map +1 -1
  26. package/dist/cjs/lazyRouteComponent.cjs +3 -3
  27. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  28. package/dist/cjs/link.cjs +40 -22
  29. package/dist/cjs/link.cjs.map +1 -1
  30. package/dist/cjs/not-found.cjs +1 -1
  31. package/dist/cjs/renderRouteNotFound.cjs +1 -1
  32. package/dist/cjs/route.cjs +1 -1
  33. package/dist/cjs/scroll-restoration.cjs +1 -1
  34. package/dist/cjs/ssr/RouterClient.cjs +4 -23
  35. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  36. package/dist/cjs/ssr/RouterServer.cjs +4 -47
  37. package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
  38. package/dist/cjs/ssr/RouterServer.d.cts +0 -1
  39. package/dist/cjs/ssr/defaultRenderHandler.cjs +1 -1
  40. package/dist/cjs/ssr/defaultStreamHandler.cjs +1 -1
  41. package/dist/cjs/ssr/renderRouterToStream.cjs +2 -3
  42. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  43. package/dist/cjs/ssr/renderRouterToString.cjs +2 -2
  44. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  45. package/dist/cjs/ssr/renderRouterToString.d.cts +1 -1
  46. package/dist/cjs/useBlocker.cjs +9 -5
  47. package/dist/cjs/useBlocker.cjs.map +1 -1
  48. package/dist/cjs/useMatch.cjs +3 -6
  49. package/dist/cjs/useMatch.cjs.map +1 -1
  50. package/dist/cjs/useNavigate.cjs +1 -1
  51. package/dist/cjs/useNavigate.cjs.map +1 -1
  52. package/dist/cjs/useRouterState.cjs +19 -9
  53. package/dist/cjs/useRouterState.cjs.map +1 -1
  54. package/dist/cjs/utils.cjs +2 -4
  55. package/dist/cjs/utils.cjs.map +1 -1
  56. package/dist/cjs/utils.d.cts +1 -0
  57. package/dist/esm/Asset.js +111 -68
  58. package/dist/esm/Asset.js.map +1 -1
  59. package/dist/esm/CatchBoundary.js +15 -15
  60. package/dist/esm/CatchBoundary.js.map +1 -1
  61. package/dist/esm/ClientOnly.js +2 -2
  62. package/dist/esm/ClientOnly.js.map +1 -1
  63. package/dist/esm/HeadContent.dev.js +18 -10
  64. package/dist/esm/HeadContent.dev.js.map +1 -1
  65. package/dist/esm/HeadContent.js +16 -8
  66. package/dist/esm/HeadContent.js.map +1 -1
  67. package/dist/esm/Match.js +89 -45
  68. package/dist/esm/Match.js.map +1 -1
  69. package/dist/esm/Matches.js +23 -16
  70. package/dist/esm/Matches.js.map +1 -1
  71. package/dist/esm/RouterProvider.js +3 -2
  72. package/dist/esm/RouterProvider.js.map +1 -1
  73. package/dist/esm/SafeFragment.js +1 -1
  74. package/dist/esm/ScriptOnce.js +4 -2
  75. package/dist/esm/ScriptOnce.js.map +1 -1
  76. package/dist/esm/Scripts.js +6 -2
  77. package/dist/esm/Scripts.js.map +1 -1
  78. package/dist/esm/Transitioner.js +11 -16
  79. package/dist/esm/Transitioner.js.map +1 -1
  80. package/dist/esm/awaited.js +18 -14
  81. package/dist/esm/awaited.js.map +1 -1
  82. package/dist/esm/lazyRouteComponent.js +3 -3
  83. package/dist/esm/lazyRouteComponent.js.map +1 -1
  84. package/dist/esm/link.js +39 -21
  85. package/dist/esm/link.js.map +1 -1
  86. package/dist/esm/not-found.js +1 -1
  87. package/dist/esm/renderRouteNotFound.js +1 -1
  88. package/dist/esm/route.js +1 -1
  89. package/dist/esm/scroll-restoration.js +1 -1
  90. package/dist/esm/ssr/RouterClient.js +4 -23
  91. package/dist/esm/ssr/RouterClient.js.map +1 -1
  92. package/dist/esm/ssr/RouterServer.d.ts +0 -1
  93. package/dist/esm/ssr/RouterServer.js +5 -48
  94. package/dist/esm/ssr/RouterServer.js.map +1 -1
  95. package/dist/esm/ssr/defaultRenderHandler.js +1 -1
  96. package/dist/esm/ssr/defaultStreamHandler.js +1 -1
  97. package/dist/esm/ssr/renderRouterToStream.js +2 -4
  98. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  99. package/dist/esm/ssr/renderRouterToString.d.ts +1 -1
  100. package/dist/esm/ssr/renderRouterToString.js +2 -2
  101. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  102. package/dist/esm/useBlocker.js +9 -5
  103. package/dist/esm/useBlocker.js.map +1 -1
  104. package/dist/esm/useMatch.js +3 -6
  105. package/dist/esm/useMatch.js.map +1 -1
  106. package/dist/esm/useNavigate.js +1 -1
  107. package/dist/esm/useNavigate.js.map +1 -1
  108. package/dist/esm/useRouterState.js +19 -9
  109. package/dist/esm/useRouterState.js.map +1 -1
  110. package/dist/esm/utils.d.ts +1 -0
  111. package/dist/esm/utils.js +2 -4
  112. package/dist/esm/utils.js.map +1 -1
  113. package/dist/source/Asset.jsx +58 -35
  114. package/dist/source/Asset.jsx.map +1 -1
  115. package/dist/source/CatchBoundary.jsx +9 -5
  116. package/dist/source/CatchBoundary.jsx.map +1 -1
  117. package/dist/source/ClientOnly.jsx +1 -1
  118. package/dist/source/ClientOnly.jsx.map +1 -1
  119. package/dist/source/HeadContent.dev.jsx +8 -6
  120. package/dist/source/HeadContent.dev.jsx.map +1 -1
  121. package/dist/source/HeadContent.jsx +6 -4
  122. package/dist/source/HeadContent.jsx.map +1 -1
  123. package/dist/source/Match.jsx +76 -35
  124. package/dist/source/Match.jsx.map +1 -1
  125. package/dist/source/Matches.jsx +25 -17
  126. package/dist/source/Matches.jsx.map +1 -1
  127. package/dist/source/RouterProvider.jsx +2 -3
  128. package/dist/source/RouterProvider.jsx.map +1 -1
  129. package/dist/source/Scripts.jsx +4 -3
  130. package/dist/source/Scripts.jsx.map +1 -1
  131. package/dist/source/Transitioner.jsx +15 -16
  132. package/dist/source/Transitioner.jsx.map +1 -1
  133. package/dist/source/awaited.jsx +7 -8
  134. package/dist/source/awaited.jsx.map +1 -1
  135. package/dist/source/lazyRouteComponent.jsx +3 -3
  136. package/dist/source/lazyRouteComponent.jsx.map +1 -1
  137. package/dist/source/link.jsx +53 -48
  138. package/dist/source/link.jsx.map +1 -1
  139. package/dist/source/ssr/RouterClient.jsx +1 -13
  140. package/dist/source/ssr/RouterClient.jsx.map +1 -1
  141. package/dist/source/ssr/RouterServer.d.ts +0 -1
  142. package/dist/source/ssr/RouterServer.jsx +1 -34
  143. package/dist/source/ssr/RouterServer.jsx.map +1 -1
  144. package/dist/source/ssr/renderRouterToStream.jsx +2 -6
  145. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
  146. package/dist/source/ssr/renderRouterToString.d.ts +1 -1
  147. package/dist/source/ssr/renderRouterToString.jsx +2 -2
  148. package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
  149. package/dist/source/useBlocker.jsx +8 -4
  150. package/dist/source/useBlocker.jsx.map +1 -1
  151. package/dist/source/useMatch.jsx +3 -8
  152. package/dist/source/useMatch.jsx.map +1 -1
  153. package/dist/source/useNavigate.jsx +1 -1
  154. package/dist/source/useNavigate.jsx.map +1 -1
  155. package/dist/source/useRouterState.jsx +30 -10
  156. package/dist/source/useRouterState.jsx.map +1 -1
  157. package/dist/source/utils.d.ts +1 -0
  158. package/dist/source/utils.js +3 -4
  159. package/dist/source/utils.js.map +1 -1
  160. package/package.json +7 -6
  161. package/src/Asset.tsx +123 -95
  162. package/src/CatchBoundary.tsx +9 -7
  163. package/src/ClientOnly.tsx +8 -3
  164. package/src/HeadContent.dev.tsx +16 -11
  165. package/src/HeadContent.tsx +6 -4
  166. package/src/Match.tsx +112 -44
  167. package/src/Matches.tsx +39 -30
  168. package/src/RouterProvider.tsx +7 -4
  169. package/src/Scripts.tsx +4 -3
  170. package/src/Transitioner.tsx +51 -58
  171. package/src/awaited.tsx +11 -12
  172. package/src/lazyRouteComponent.tsx +3 -3
  173. package/src/link.tsx +68 -60
  174. package/src/ssr/RouterClient.tsx +1 -22
  175. package/src/ssr/RouterServer.tsx +1 -53
  176. package/src/ssr/renderRouterToStream.tsx +5 -15
  177. package/src/ssr/renderRouterToString.tsx +2 -2
  178. package/src/useBlocker.tsx +8 -4
  179. package/src/useMatch.tsx +6 -11
  180. package/src/useNavigate.tsx +1 -1
  181. package/src/useRouterState.tsx +44 -22
  182. package/src/utils.ts +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"link.cjs","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const buildLocationKey = useRouterState({\n select: (s) => {\n const leaf = s.matches[s.matches.length - 1]\n return {\n search: leaf?.search,\n hash: s.location.hash,\n path: leaf?.pathname, // path + params\n }\n },\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n buildLocationKey()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["timeoutMap","WeakMap","useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","buildLocationKey","leaf","matches","length","search","hash","path","pathname","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","has","set","setTimeout","delete","handleTouchStart","handleLeave","id","get","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
1
+ {"version":3,"file":"link.cjs","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from '@solidjs/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nfunction mergeRefs<T>(\n ...refs: Array<((el: T) => void) | undefined>\n): (el: T) => void {\n return (el: T) => {\n for (const ref of refs) {\n if (typeof ref === 'function') {\n ref(el)\n }\n }\n }\n}\n\nfunction splitProps<T extends Record<string, any>, TKey extends keyof T>(\n props: T,\n keys: ReadonlyArray<TKey>,\n): [Pick<T, TKey>, Omit<T, TKey>] {\n const _local = {} as Pick<T, TKey>\n const _rest = {} as Omit<T, TKey>\n\n // A safe way to polyfill splitProps if native getter copy is too complex\n // is just to return [props, Solid.omit(props, keys)] but it modifies typing.\n // Actually, Solid.omit exists!\n // Note: Solid.omit uses rest params (...keys), so we must spread the array.\n return [props as any, Solid.omit(props, ...(keys as any)) as any]\n}\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = splitProps(\n Solid.merge(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n const [_, propsSafeToSpread] = splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ] as any)\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const buildLocationKey = useRouterState({\n select: (s) => {\n const leaf = s.matches[s.matches.length - 1]\n return {\n search: leaf?.search,\n hash: s.location.hash,\n path: leaf?.pathname, // path + params\n }\n },\n })\n\n const from = options.from\n\n const _options = () => {\n const result = {\n ...options,\n from,\n }\n return result\n }\n\n const next = Solid.createMemo(() => {\n buildLocationKey()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRefSignal] = Solid.createSignal<Element | null>(null)\n\n const setRef = (el: Element | null) => {\n Solid.runWithOwner(null, () => {\n setRefSignal(el)\n })\n }\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(Solid.untrack(preload) === 'viewport') },\n )\n\n Solid.createEffect(preload, (preloadValue) => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preloadValue === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (Solid.untrack(externalLink)) {\n return Solid.merge(\n propsSafeToSpread,\n {\n // ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.merge(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, (_options() as any).ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': 'true',\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = splitProps(props as typeof props & { _asChild: any }, [\n '_asChild',\n 'children',\n ])\n\n const [_, linkProps] = splitProps(useLinkProps(rest as unknown as any), [\n 'type',\n ])\n\n // Resolve children once using Solid.children to avoid\n // re-accessing the children getter (which in Solid 2.0 would\n // re-invoke createComponent each time for JSX children).\n const resolvedChildren = Solid.children(\n () => local.children as Solid.JSX.Element,\n )\n\n const children = () => {\n const ch = resolvedChildren()\n if (typeof ch === 'function') {\n return (ch as Function)({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch\n }\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = splitProps(linkProps as any, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["mergeRefs","refs","el","ref","splitProps","props","keys","Solid","omit","timeoutMap","WeakMap","useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","merge","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","buildLocationKey","leaf","matches","length","search","hash","path","pathname","from","_options","result","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","setRefSignal","setRef","runWithOwner","useIntersectionObserver","rootMargin","untrack","createEffect","preloadValue","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","has","set","setTimeout","delete","handleTouchStart","handleLeave","id","get","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","c","role","createLink","Comp","_$createComponent","Link","_$mergeProps","_asChild","linkProps","resolvedChildren","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const routerCore = require("@tanstack/router-core");
5
5
  const CatchBoundary = require("./CatchBoundary.cjs");
6
6
  const useRouterState = require("./useRouterState.cjs");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const warning = require("tiny-warning");
5
5
  const notFound = require("./not-found.cjs");
6
6
  function renderRouteNotFound(router, route, data) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const routerCore = require("@tanstack/router-core");
5
5
  const link = require("./link.cjs");
6
6
  const useLoaderData = require("./useLoaderData.cjs");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const routerCore = require("@tanstack/router-core");
5
5
  const isServer = require("@tanstack/router-core/isServer");
6
6
  const useRouter = require("./useRouter.cjs");
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const client = require("@tanstack/router-core/ssr/client");
5
5
  const awaited = require("../awaited.cjs");
6
- const HeadContent = require("../HeadContent.cjs");
7
6
  const RouterProvider = require("../RouterProvider.cjs");
8
7
  let hydrationPromise;
9
- const Dummy = (props) => Solid.memo(() => props.children);
10
8
  function RouterClient(props) {
11
9
  if (!hydrationPromise) {
12
10
  if (!props.router.state.matches.length) {
@@ -17,26 +15,9 @@ function RouterClient(props) {
17
15
  }
18
16
  return Solid.createComponent(awaited.Await, {
19
17
  promise: hydrationPromise,
20
- children: () => Solid.createComponent(Dummy, {
21
- get children() {
22
- return Solid.createComponent(Dummy, {
23
- get children() {
24
- return Solid.createComponent(RouterProvider.RouterProvider, {
25
- get router() {
26
- return props.router;
27
- },
28
- InnerWrap: (props2) => Solid.createComponent(Dummy, {
29
- get children() {
30
- return [Solid.createComponent(Dummy, {
31
- get children() {
32
- return [Solid.createComponent(HeadContent.HeadContent, {}), Solid.memo(() => props2.children)];
33
- }
34
- }), Solid.createComponent(Dummy, {})];
35
- }
36
- })
37
- });
38
- }
39
- });
18
+ children: () => Solid.createComponent(RouterProvider.RouterProvider, {
19
+ get router() {
20
+ return props.router;
40
21
  }
41
22
  })
42
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RouterClient.cjs","sources":["../../../src/ssr/RouterClient.tsx"],"sourcesContent":["import { hydrate } from '@tanstack/router-core/ssr/client'\nimport { Await } from '../awaited'\nimport { HeadContent } from '../HeadContent'\nimport { RouterProvider } from '../RouterProvider'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\n\nlet hydrationPromise: Promise<void | Array<Array<void>>> | undefined\n\nconst Dummy = (props: { children?: JSXElement }) => <>{props.children}</>\n\nexport function RouterClient(props: { router: AnyRouter }) {\n if (!hydrationPromise) {\n if (!props.router.state.matches.length) {\n hydrationPromise = hydrate(props.router)\n } else {\n hydrationPromise = Promise.resolve()\n }\n }\n return (\n <Await\n promise={hydrationPromise}\n children={() => (\n <Dummy>\n <Dummy>\n <RouterProvider\n router={props.router}\n InnerWrap={(props) => (\n <Dummy>\n <Dummy>\n <HeadContent />\n {props.children}\n </Dummy>\n <Dummy />\n </Dummy>\n )}\n />\n </Dummy>\n </Dummy>\n )}\n />\n )\n}\n"],"names":["hydrationPromise","Dummy","props","_$memo","children","RouterClient","router","state","matches","length","hydrate","Promise","resolve","_$createComponent","Await","promise","RouterProvider","InnerWrap","HeadContent"],"mappings":";;;;;;;AAOA,IAAIA;AAEJ,MAAMC,QAAQA,CAACC,UAAgCC,MAAAA,KAAA,MAAQD,MAAME,QAAQ;AAE9D,SAASC,aAAaH,OAA8B;AACzD,MAAI,CAACF,kBAAkB;AACrB,QAAI,CAACE,MAAMI,OAAOC,MAAMC,QAAQC,QAAQ;AACtCT,yBAAmBU,OAAAA,QAAQR,MAAMI,MAAM;AAAA,IACzC,OAAO;AACLN,yBAAmBW,QAAQC,QAAAA;AAAAA,IAC7B;AAAA,EACF;AACA,SAAAC,MAAAA,gBACGC,QAAAA,OAAK;AAAA,IACJC,SAASf;AAAAA,IACTI,UAAUA,MAAAS,MAAAA,gBACPZ,OAAK;AAAA,MAAA,IAAAG,WAAA;AAAA,eAAAS,MAAAA,gBACHZ,OAAK;AAAA,UAAA,IAAAG,WAAA;AAAA,mBAAAS,MAAAA,gBACHG,eAAAA,gBAAc;AAAA,cAAA,IACbV,SAAM;AAAA,uBAAEJ,MAAMI;AAAAA,cAAM;AAAA,cACpBW,WAAYf,CAAAA,WAAKW,MAAAA,gBACdZ,OAAK;AAAA,gBAAA,IAAAG,WAAA;AAAA,yBAAA,CAAAS,MAAAA,gBACHZ,OAAK;AAAA,oBAAA,IAAAG,WAAA;AAAA,6BAAA,CAAAS,MAAAA,gBACHK,YAAAA,aAAW,CAAA,CAAA,GAAAf,MAAAA,KAAA,MACXD,OAAME,QAAQ,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA,GAAAS,MAAAA,gBAEhBZ,OAAK,CAAA,CAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CAET;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,MAAA;AAAA,IAAA,CAAA;AAAA,EAAA,CAIR;AAGP;;"}
1
+ {"version":3,"file":"RouterClient.cjs","sources":["../../../src/ssr/RouterClient.tsx"],"sourcesContent":["import { hydrate } from '@tanstack/router-core/ssr/client'\nimport { Await } from '../awaited'\nimport { RouterProvider } from '../RouterProvider'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nlet hydrationPromise: Promise<void | Array<Array<void>>> | undefined\n\nexport function RouterClient(props: { router: AnyRouter }) {\n if (!hydrationPromise) {\n if (!props.router.state.matches.length) {\n hydrationPromise = hydrate(props.router)\n } else {\n hydrationPromise = Promise.resolve()\n }\n }\n return (\n <Await\n promise={hydrationPromise}\n children={() => <RouterProvider router={props.router} />}\n />\n )\n}\n"],"names":["hydrationPromise","RouterClient","props","router","state","matches","length","hydrate","Promise","resolve","_$createComponent","Await","promise","children","RouterProvider"],"mappings":";;;;;;AAKA,IAAIA;AAEG,SAASC,aAAaC,OAA8B;AACzD,MAAI,CAACF,kBAAkB;AACrB,QAAI,CAACE,MAAMC,OAAOC,MAAMC,QAAQC,QAAQ;AACtCN,yBAAmBO,OAAAA,QAAQL,MAAMC,MAAM;AAAA,IACzC,OAAO;AACLH,yBAAmBQ,QAAQC,QAAAA;AAAAA,IAC7B;AAAA,EACF;AACA,SAAAC,MAAAA,gBACGC,QAAAA,OAAK;AAAA,IACJC,SAASZ;AAAAA,IACTa,UAAUA,MAAAH,MAAAA,gBAAOI,+BAAc;AAAA,MAAA,IAACX,SAAM;AAAA,eAAED,MAAMC;AAAAA,MAAM;AAAA,IAAA,CAAA;AAAA,EAAA,CAAI;AAG9D;;"}
@@ -1,56 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
4
- const meta = require("@solidjs/meta");
5
- const Asset = require("../Asset.cjs");
6
- const headContentUtils = require("../headContentUtils.cjs");
3
+ const Solid = require("@solidjs/web");
7
4
  const RouterProvider = require("../RouterProvider.cjs");
8
- const Scripts = require("../Scripts.cjs");
9
- var _tmpl$ = /* @__PURE__ */ Solid.template(`<html><head></head><body>`);
10
- function ServerHeadContent() {
11
- const tags = headContentUtils.useTags();
12
- Solid.useAssets(() => {
13
- return Solid.createComponent(meta.MetaProvider, {
14
- get children() {
15
- return tags().map((tag) => Solid.createComponent(Asset.Asset, tag));
16
- }
17
- });
18
- });
19
- return null;
20
- }
21
- const docType = Solid.ssr("<!DOCTYPE html>");
22
5
  function RouterServer(props) {
23
- return Solid.createComponent(Solid.NoHydration, {
24
- get children() {
25
- return [docType, (() => {
26
- var _el$ = _tmpl$(), _el$3 = _el$.firstChild;
27
- Solid.insert(_el$3, Solid.createComponent(Solid.Hydration, {
28
- get children() {
29
- return Solid.createComponent(RouterProvider.RouterProvider, {
30
- get router() {
31
- return props.router;
32
- },
33
- InnerWrap: (props2) => Solid.createComponent(Solid.NoHydration, {
34
- get children() {
35
- return Solid.createComponent(meta.MetaProvider, {
36
- get children() {
37
- return [Solid.createComponent(ServerHeadContent, {}), Solid.createComponent(Solid.Hydration, {
38
- get children() {
39
- return props2.children;
40
- }
41
- }), Solid.createComponent(Scripts.Scripts, {})];
42
- }
43
- });
44
- }
45
- })
46
- });
47
- }
48
- }));
49
- return _el$;
50
- })()];
6
+ return Solid.createComponent(RouterProvider.RouterProvider, {
7
+ get router() {
8
+ return props.router;
51
9
  }
52
10
  });
53
11
  }
54
12
  exports.RouterServer = RouterServer;
55
- exports.ServerHeadContent = ServerHeadContent;
56
13
  //# sourceMappingURL=RouterServer.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouterServer.cjs","sources":["../../../src/ssr/RouterServer.tsx"],"sourcesContent":["import {\n Hydration,\n HydrationScript,\n NoHydration,\n ssr,\n useAssets,\n} from 'solid-js/web'\nimport { MetaProvider } from '@solidjs/meta'\nimport { Asset } from '../Asset'\nimport { useTags } from '../headContentUtils'\nimport { RouterProvider } from '../RouterProvider'\nimport { Scripts } from '../Scripts'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport function ServerHeadContent() {\n const tags = useTags()\n useAssets(() => {\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\n </MetaProvider>\n )\n })\n return null\n}\n\nconst docType = ssr('<!DOCTYPE html>')\n\nexport function RouterServer<TRouter extends AnyRouter>(props: {\n router: TRouter\n}) {\n return (\n <NoHydration>\n {docType as any}\n <html>\n <head>\n <HydrationScript />\n </head>\n <body>\n <Hydration>\n <RouterProvider\n router={props.router}\n InnerWrap={(props) => (\n <NoHydration>\n <MetaProvider>\n <ServerHeadContent />\n <Hydration>{props.children}</Hydration>\n <Scripts />\n </MetaProvider>\n </NoHydration>\n )}\n />\n </Hydration>\n </body>\n </html>\n </NoHydration>\n )\n}\n"],"names":["ServerHeadContent","tags","useTags","useAssets","_$createComponent","MetaProvider","children","map","tag","Asset","docType","ssr","RouterServer","props","NoHydration","_el$","_tmpl$","_el$3","firstChild","_$insert","Hydration","RouterProvider","router","InnerWrap","Scripts"],"mappings":";;;;;;;;;AAcO,SAASA,oBAAoB;AAClC,QAAMC,OAAOC,iBAAAA,QAAAA;AACbC,QAAAA,UAAU,MAAM;AACd,WAAAC,MAAAA,gBACGC,KAAAA,cAAY;AAAA,MAAA,IAAAC,WAAA;AAAA,eACVL,OAAOM,IAAKC,SAAGJ,sBACbK,MAAAA,OAAUD,GAAG,CACf;AAAA,MAAC;AAAA,IAAA,CAAA;AAAA,EAGR,CAAC;AACD,SAAO;AACT;AAEA,MAAME,UAAUC,MAAAA,IAAI,iBAAiB;AAE9B,SAASC,aAAwCC,OAErD;AACD,SAAAT,MAAAA,gBACGU,MAAAA,aAAW;AAAA,IAAA,IAAAR,WAAA;AAAA,aAAA,CACTI,UAAc,MAAA;AAAA,YAAAK,OAAAC,OAAAA,GAAAC,QAAAF,KAAAG;AAAAC,qBAAAF,OAAAb,MAAAA,gBAMVgB,iBAAS;AAAA,UAAA,IAAAd,WAAA;AAAA,mBAAAF,MAAAA,gBACPiB,eAAAA,gBAAc;AAAA,cAAA,IACbC,SAAM;AAAA,uBAAET,MAAMS;AAAAA,cAAM;AAAA,cACpBC,WAAYV,CAAAA,WAAKT,MAAAA,gBACdU,mBAAW;AAAA,gBAAA,IAAAR,WAAA;AAAA,yBAAAF,MAAAA,gBACTC,KAAAA,cAAY;AAAA,oBAAA,IAAAC,WAAA;AAAA,6BAAA,CAAAF,MAAAA,gBACVJ,mBAAiB,CAAA,CAAA,GAAAI,MAAAA,gBACjBgB,MAAAA,WAAS;AAAA,wBAAA,IAAAd,WAAA;AAAA,iCAAEO,OAAMP;AAAAA,wBAAQ;AAAA,sBAAA,CAAA,GAAAF,MAAAA,gBACzBoB,iBAAO,CAAA,CAAA,CAAA;AAAA,oBAAA;AAAA,kBAAA,CAAA;AAAA,gBAAA;AAAA,cAAA,CAAA;AAAA,YAAA,CAGb;AAAA,UAAA;AAAA,QAAA,CAAA,CAAA;AAAA,eAAAT;AAAAA,MAAA,IAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAOf;;;"}
1
+ {"version":3,"file":"RouterServer.cjs","sources":["../../../src/ssr/RouterServer.tsx"],"sourcesContent":["import { RouterProvider } from '../RouterProvider'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport function RouterServer<TRouter extends AnyRouter>(props: {\n router: TRouter\n}) {\n return <RouterProvider router={props.router} />\n}\n"],"names":["RouterServer","props","_$createComponent","RouterProvider","router"],"mappings":";;;;AAGO,SAASA,aAAwCC,OAErD;AACD,SAAAC,MAAAA,gBAAQC,eAAAA,gBAAc;AAAA,IAAA,IAACC,SAAM;AAAA,aAAEH,MAAMG;AAAAA,IAAM;AAAA,EAAA,CAAA;AAC7C;;"}
@@ -1,5 +1,4 @@
1
1
  import { AnyRouter } from '@tanstack/router-core';
2
- export declare function ServerHeadContent(): null;
3
2
  export declare function RouterServer<TRouter extends AnyRouter>(props: {
4
3
  router: TRouter;
5
4
  }): import("solid-js").JSX.Element;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const server = require("@tanstack/router-core/ssr/server");
5
5
  const RouterServer = require("./RouterServer.cjs");
6
6
  const renderRouterToString = require("./renderRouterToString.cjs");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const server = require("@tanstack/router-core/ssr/server");
5
5
  const RouterServer = require("./RouterServer.cjs");
6
6
  const renderRouterToStream = require("./renderRouterToStream.cjs");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const isbot = require("isbot");
5
5
  const server = require("@tanstack/router-core/ssr/server");
6
6
  const routerCore = require("@tanstack/router-core");
@@ -31,7 +31,6 @@ const renderRouterToStream = async ({
31
31
  writable,
32
32
  readable
33
33
  } = new TransformStream();
34
- const docType = Solid__namespace.ssr("<!DOCTYPE html>");
35
34
  const serializationAdapters = router.options?.serializationAdapters || router.options.ssr?.serializationAdapters;
36
35
  const serovalPlugins = serializationAdapters?.map((adapter) => {
37
36
  const plugin = routerCore.makeSsrSerovalPlugin(adapter, {
@@ -39,7 +38,7 @@ const renderRouterToStream = async ({
39
38
  });
40
39
  return plugin;
41
40
  });
42
- const stream = Solid__namespace.renderToStream(() => [docType, Solid.memo(children)], {
41
+ const stream = Solid__namespace.renderToStream(() => children, {
43
42
  nonce: router.options.ssr?.nonce,
44
43
  plugins: serovalPlugins
45
44
  });
@@ -1 +1 @@
1
- {"version":3,"file":"renderRouterToStream.cjs","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\nimport type { ReadableStream } from 'node:stream/web'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n children,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n const { writable, readable } = new TransformStream()\n\n const docType = Solid.ssr('<!DOCTYPE html>')\n\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n const stream = Solid.renderToStream(\n () => (\n <>\n {docType}\n {children()}\n </>\n ),\n {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any,\n )\n\n if (isbot(request.headers.get('User-Agent'))) {\n await stream\n }\n stream.pipeTo(writable)\n\n const responseStream = transformReadableStreamWithRouter(\n router,\n readable as unknown as ReadableStream,\n )\n return new Response(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["renderRouterToStream","request","router","responseHeaders","children","writable","readable","TransformStream","docType","Solid","ssr","serializationAdapters","options","serovalPlugins","map","adapter","plugin","makeSsrSerovalPlugin","didRun","stream","renderToStream","_$memo","nonce","plugins","isbot","headers","get","pipeTo","responseStream","transformReadableStreamWithRouter","Response","status","state","statusCode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAa,IAAIC,gBAAAA;AAEnC,QAAMC,UAAUC,iBAAMC,IAAI,iBAAiB;AAE3C,QAAMC,wBACHT,OAAOU,SAAiBD,yBACxBT,OAAOU,QAAQF,KAAaC;AAC/B,QAAME,iBAAiBF,uBAAuBG,IAAI,CAACC,YAAiB;AAClE,UAAMC,SAASC,WAAAA,qBAAqBF,SAAS;AAAA,MAAEG,QAAQ;AAAA,IAAA,CAAO;AAC9D,WAAOF;AAAAA,EACT,CAAC;AAED,QAAMG,SAASV,iBAAMW,eACnB,MAAA,CAEKZ,SAAOa,MAAAA,KACPjB,QAAQ,IAGb;AAAA,IACEkB,OAAOpB,OAAOU,QAAQF,KAAKY;AAAAA,IAC3BC,SAASV;AAAAA,EAAAA,CAEb;AAEA,MAAIW,MAAAA,MAAMvB,QAAQwB,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,UAAMP;AAAAA,EACR;AACAA,SAAOQ,OAAOtB,QAAQ;AAEtB,QAAMuB,iBAAiBC,OAAAA,kCACrB3B,QACAI,QACF;AACA,SAAO,IAAIwB,SAASF,gBAAuB;AAAA,IACzCG,QAAQ7B,OAAO8B,MAAMC;AAAAA,IACrBR,SAAStB;AAAAA,EAAAA,CACV;AACH;;"}
1
+ {"version":3,"file":"renderRouterToStream.cjs","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from '@solidjs/web'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\nimport type { ReadableStream } from 'node:stream/web'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n children,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n const { writable, readable } = new TransformStream()\n\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n const stream = Solid.renderToStream(() => children, {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any)\n\n if (isbot(request.headers.get('User-Agent'))) {\n await stream\n }\n stream.pipeTo(writable)\n\n const responseStream = transformReadableStreamWithRouter(\n router,\n readable as unknown as ReadableStream,\n )\n return new Response(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["renderRouterToStream","request","router","responseHeaders","children","writable","readable","TransformStream","serializationAdapters","options","ssr","serovalPlugins","map","adapter","plugin","makeSsrSerovalPlugin","didRun","stream","Solid","renderToStream","nonce","plugins","isbot","headers","get","pipeTo","responseStream","transformReadableStreamWithRouter","Response","status","state","statusCode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAa,IAAIC,gBAAAA;AAEnC,QAAMC,wBACHN,OAAOO,SAAiBD,yBACxBN,OAAOO,QAAQC,KAAaF;AAC/B,QAAMG,iBAAiBH,uBAAuBI,IAAI,CAACC,YAAiB;AAClE,UAAMC,SAASC,WAAAA,qBAAqBF,SAAS;AAAA,MAAEG,QAAQ;AAAA,IAAA,CAAO;AAC9D,WAAOF;AAAAA,EACT,CAAC;AAED,QAAMG,SAASC,iBAAMC,eAAe,MAAMf,UAAU;AAAA,IAClDgB,OAAOlB,OAAOO,QAAQC,KAAKU;AAAAA,IAC3BC,SAASV;AAAAA,EAAAA,CACH;AAER,MAAIW,MAAAA,MAAMrB,QAAQsB,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,UAAMP;AAAAA,EACR;AACAA,SAAOQ,OAAOpB,QAAQ;AAEtB,QAAMqB,iBAAiBC,OAAAA,kCACrBzB,QACAI,QACF;AACA,SAAO,IAAIsB,SAASF,gBAAuB;AAAA,IACzCG,QAAQ3B,OAAO4B,MAAMC;AAAAA,IACrBR,SAASpB;AAAAA,EAAAA,CACV;AACH;;"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid = require("solid-js/web");
3
+ const Solid = require("@solidjs/web");
4
4
  const routerCore = require("@tanstack/router-core");
5
5
  function _interopNamespaceDefault(e) {
6
6
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
@@ -19,7 +19,7 @@ function _interopNamespaceDefault(e) {
19
19
  return Object.freeze(n);
20
20
  }
21
21
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
22
- const renderRouterToString = async ({
22
+ const renderRouterToString = ({
23
23
  router,
24
24
  responseHeaders,
25
25
  children
@@ -1 +1 @@
1
- {"version":3,"file":"renderRouterToString.cjs","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\n\nexport const renderRouterToString = async ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n let html = Solid.renderToString(children, {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any)\n router.serverSsr!.setRenderFinished()\n\n const injectedHtml = router.serverSsr!.takeBufferedHtml()\n if (injectedHtml) {\n html = html.replace(`</body>`, () => `${injectedHtml}</body>`)\n }\n return new Response(`<!DOCTYPE html>${html}`, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n } finally {\n router.serverSsr?.cleanup()\n }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","serializationAdapters","options","ssr","serovalPlugins","map","adapter","plugin","makeSsrSerovalPlugin","didRun","html","Solid","renderToString","nonce","plugins","serverSsr","setRenderFinished","injectedHtml","takeBufferedHtml","replace","Response","status","state","statusCode","headers","error","console","cleanup"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,UAAMC,wBACHH,OAAOI,SAAiBD,yBACxBH,OAAOI,QAAQC,KAAaF;AAC/B,UAAMG,iBAAiBH,uBAAuBI,IAAI,CAACC,YAAiB;AAClE,YAAMC,SAASC,WAAAA,qBAAqBF,SAAS;AAAA,QAAEG,QAAQ;AAAA,MAAA,CAAO;AAC9D,aAAOF;AAAAA,IACT,CAAC;AAED,QAAIG,OAAOC,iBAAMC,eAAeZ,UAAU;AAAA,MACxCa,OAAOf,OAAOI,QAAQC,KAAKU;AAAAA,MAC3BC,SAASV;AAAAA,IAAAA,CACH;AACRN,WAAOiB,UAAWC,kBAAAA;AAElB,UAAMC,eAAenB,OAAOiB,UAAWG,iBAAAA;AACvC,QAAID,cAAc;AAChBP,aAAOA,KAAKS,QAAQ,WAAW,MAAM,GAAGF,YAAY,SAAS;AAAA,IAC/D;AACA,WAAO,IAAIG,SAAS,kBAAkBV,IAAI,IAAI;AAAA,MAC5CW,QAAQvB,OAAOwB,MAAMC;AAAAA,MACrBC,SAASzB;AAAAA,IAAAA,CACV;AAAA,EACH,SAAS0B,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASzB;AAAAA,IAAAA,CACV;AAAA,EACH,UAAA;AACED,WAAOiB,WAAWY,QAAAA;AAAAA,EACpB;AACF;;"}
1
+ {"version":3,"file":"renderRouterToString.cjs","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from '@solidjs/web'\nimport { makeSsrSerovalPlugin } from '@tanstack/router-core'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { JSXElement } from 'solid-js'\n\nexport const renderRouterToString = ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n const serializationAdapters =\n (router.options as any)?.serializationAdapters ||\n (router.options.ssr as any)?.serializationAdapters\n const serovalPlugins = serializationAdapters?.map((adapter: any) => {\n const plugin = makeSsrSerovalPlugin(adapter, { didRun: false })\n return plugin\n })\n\n let html = Solid.renderToString(children, {\n nonce: router.options.ssr?.nonce,\n plugins: serovalPlugins,\n } as any)\n router.serverSsr!.setRenderFinished()\n\n const injectedHtml = router.serverSsr!.takeBufferedHtml()\n if (injectedHtml) {\n html = html.replace(`</body>`, () => `${injectedHtml}</body>`)\n }\n return new Response(`<!DOCTYPE html>${html}`, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n } finally {\n router.serverSsr?.cleanup()\n }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","serializationAdapters","options","ssr","serovalPlugins","map","adapter","plugin","makeSsrSerovalPlugin","didRun","html","Solid","renderToString","nonce","plugins","serverSsr","setRenderFinished","injectedHtml","takeBufferedHtml","replace","Response","status","state","statusCode","headers","error","console","cleanup"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKO,MAAMA,uBAAuBA,CAAC;AAAA,EACnCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,UAAMC,wBACHH,OAAOI,SAAiBD,yBACxBH,OAAOI,QAAQC,KAAaF;AAC/B,UAAMG,iBAAiBH,uBAAuBI,IAAI,CAACC,YAAiB;AAClE,YAAMC,SAASC,WAAAA,qBAAqBF,SAAS;AAAA,QAAEG,QAAQ;AAAA,MAAA,CAAO;AAC9D,aAAOF;AAAAA,IACT,CAAC;AAED,QAAIG,OAAOC,iBAAMC,eAAeZ,UAAU;AAAA,MACxCa,OAAOf,OAAOI,QAAQC,KAAKU;AAAAA,MAC3BC,SAASV;AAAAA,IAAAA,CACH;AACRN,WAAOiB,UAAWC,kBAAAA;AAElB,UAAMC,eAAenB,OAAOiB,UAAWG,iBAAAA;AACvC,QAAID,cAAc;AAChBP,aAAOA,KAAKS,QAAQ,WAAW,MAAM,GAAGF,YAAY,SAAS;AAAA,IAC/D;AACA,WAAO,IAAIG,SAAS,kBAAkBV,IAAI,IAAI;AAAA,MAC5CW,QAAQvB,OAAOwB,MAAMC;AAAAA,MACrBC,SAASzB;AAAAA,IAAAA,CACV;AAAA,EACH,SAAS0B,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASzB;AAAAA,IAAAA,CACV;AAAA,EACH,UAAA;AACED,WAAOiB,WAAWY,QAAAA;AAAAA,EACpB;AACF;;"}
@@ -4,4 +4,4 @@ export declare const renderRouterToString: ({ router, responseHeaders, children,
4
4
  router: AnyRouter;
5
5
  responseHeaders: Headers;
6
6
  children: () => JSXElement;
7
- }) => Promise<Response>;
7
+ }) => Response;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const Solid$1 = require("solid-js/web");
3
+ const Solid$1 = require("@solidjs/web");
4
4
  const Solid = require("solid-js");
5
5
  const useRouter = require("./useRouter.cjs");
6
6
  function _interopNamespaceDefault(e) {
@@ -62,7 +62,7 @@ function _resolveBlockerOpts(opts, condition) {
62
62
  };
63
63
  }
64
64
  function useBlocker(opts, condition) {
65
- const props = Solid__namespace.mergeProps({
65
+ const props = Solid__namespace.merge({
66
66
  enableBeforeUnload: true,
67
67
  disabled: false,
68
68
  withResolver: false
@@ -76,7 +76,7 @@ function useBlocker(opts, condition) {
76
76
  proceed: void 0,
77
77
  reset: void 0
78
78
  });
79
- Solid__namespace.createEffect(() => {
79
+ Solid__namespace.createTrackedEffect(() => {
80
80
  const blockerFnComposed = async (blockerFnArgs) => {
81
81
  function getLocation(location) {
82
82
  const parsedLocation = router.parseLocation(location);
@@ -165,8 +165,12 @@ const _resolvePromptBlockerArgs = (props) => {
165
165
  };
166
166
  };
167
167
  function Block(opts) {
168
- const [propsWithChildren, rest] = Solid__namespace.splitProps(opts, ["children"]);
169
- const args = _resolvePromptBlockerArgs(rest);
168
+ const propsWithChildren = {
169
+ get children() {
170
+ return opts.children;
171
+ }
172
+ };
173
+ const args = _resolvePromptBlockerArgs(opts);
170
174
  const resolver = useBlocker(args);
171
175
  const children = Solid__namespace.createMemo(() => {
172
176
  const child = propsWithChildren.children;
@@ -1 +1 @@
1
- {"version":3,"file":"useBlocker.cjs","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.mergeProps(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const [propsWithChildren, rest] = Solid.splitProps(opts, ['children'])\n const args = _resolvePromptBlockerArgs(rest)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","Solid","createMemo","blockerFn","useBlocker","props","mergeProps","disabled","router","useRouter","resolver","setResolver","createSignal","status","current","next","action","proceed","reset","createEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","routeId","fullPath","params","routeParams","search","id","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","Block","propsWithChildren","rest","splitProps","args","children","child","_$memo"],"mappings":"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"}
1
+ {"version":3,"file":"useBlocker.cjs","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { useRouter } from './useRouter'\nimport type {\n BlockerFnArgs,\n HistoryAction,\n HistoryLocation,\n} from '@tanstack/history'\nimport type { SolidNode } from './route'\nimport type {\n AnyRoute,\n AnyRouter,\n ParseRoute,\n RegisteredRouter,\n} from '@tanstack/router-core'\n\ninterface ShouldBlockFnLocation<\n out TRouteId,\n out TFullPath,\n out TAllParams,\n out TFullSearchSchema,\n> {\n routeId: TRouteId\n fullPath: TFullPath\n pathname: string\n params: TAllParams\n search: TFullSearchSchema\n}\n\ntype AnyShouldBlockFnLocation = ShouldBlockFnLocation<any, any, any, any>\ntype MakeShouldBlockFnLocationUnion<\n TRouter extends AnyRouter = RegisteredRouter,\n TRoute extends AnyRoute = ParseRoute<TRouter['routeTree']>,\n> = TRoute extends any\n ? ShouldBlockFnLocation<\n TRoute['id'],\n TRoute['fullPath'],\n TRoute['types']['allParams'],\n TRoute['types']['fullSearchSchema']\n >\n : never\n\ntype BlockerResolver<TRouter extends AnyRouter = RegisteredRouter> =\n | {\n status: 'blocked'\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n proceed: () => void\n reset: () => void\n }\n | {\n status: 'idle'\n current: undefined\n next: undefined\n action: undefined\n proceed: undefined\n reset: undefined\n }\n\ntype ShouldBlockFnArgs<TRouter extends AnyRouter = RegisteredRouter> = {\n current: MakeShouldBlockFnLocationUnion<TRouter>\n next: MakeShouldBlockFnLocationUnion<TRouter>\n action: HistoryAction\n}\n\nexport type ShouldBlockFn<TRouter extends AnyRouter = RegisteredRouter> = (\n args: ShouldBlockFnArgs<TRouter>,\n) => boolean | Promise<boolean>\nexport type UseBlockerOpts<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n> = {\n shouldBlockFn: ShouldBlockFn<TRouter>\n enableBeforeUnload?: boolean | (() => boolean)\n disabled?: boolean\n withResolver?: TWithResolver\n}\n\ntype LegacyBlockerFn = () => Promise<any> | any\ntype LegacyBlockerOpts = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n}\n\nfunction _resolveBlockerOpts(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): UseBlockerOpts {\n if (opts === undefined) {\n return {\n shouldBlockFn: () => true,\n withResolver: false,\n }\n }\n\n if ('shouldBlockFn' in opts) {\n return opts\n }\n\n if (typeof opts === 'function') {\n const shouldBlock = Boolean(condition ?? true)\n\n const _customBlockerFn = async () => {\n if (shouldBlock) return await opts()\n return false\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n enableBeforeUnload: shouldBlock,\n withResolver: false,\n }\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(opts.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && opts.blockerFn !== undefined) {\n return await opts.blockerFn()\n }\n return shouldBlock()\n }\n\n return {\n get shouldBlockFn() {\n return _customBlockerFn\n },\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return opts.blockerFn === undefined\n },\n }\n}\n\nexport function useBlocker<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = false,\n>(\n opts: UseBlockerOpts<TRouter, TWithResolver>,\n): TWithResolver extends true ? Solid.Accessor<BlockerResolver<TRouter>> : void\n\n/**\n * @deprecated Use the shouldBlockFn property instead\n */\nexport function useBlocker(\n blockerFnOrOpts?: LegacyBlockerOpts,\n): Solid.Accessor<BlockerResolver>\n\n/**\n * @deprecated Use the UseBlockerOpts object syntax instead\n */\nexport function useBlocker(\n blockerFn?: LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver>\n\nexport function useBlocker(\n opts?: UseBlockerOpts | LegacyBlockerOpts | LegacyBlockerFn,\n condition?: boolean | any,\n): Solid.Accessor<BlockerResolver> | void {\n const props = Solid.merge(\n {\n enableBeforeUnload: true,\n disabled: false,\n withResolver: false,\n },\n _resolveBlockerOpts(opts, condition),\n )\n\n const router = useRouter()\n\n const [resolver, setResolver] = Solid.createSignal<BlockerResolver>({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n Solid.createTrackedEffect(() => {\n const blockerFnComposed = async (blockerFnArgs: BlockerFnArgs) => {\n function getLocation(\n location: HistoryLocation,\n ): AnyShouldBlockFnLocation {\n const parsedLocation = router.parseLocation(location)\n const matchedRoutes = router.getMatchedRoutes(parsedLocation.pathname)\n if (matchedRoutes.foundRoute === undefined) {\n return {\n routeId: '__notFound__',\n fullPath: parsedLocation.pathname,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n return {\n routeId: matchedRoutes.foundRoute.id,\n fullPath: matchedRoutes.foundRoute.fullPath,\n pathname: parsedLocation.pathname,\n params: matchedRoutes.routeParams,\n search: parsedLocation.search,\n }\n }\n\n const current = getLocation(blockerFnArgs.currentLocation)\n const next = getLocation(blockerFnArgs.nextLocation)\n\n if (\n current.routeId === '__notFound__' &&\n next.routeId !== '__notFound__'\n ) {\n return false\n }\n\n const shouldBlock = await props.shouldBlockFn({\n action: blockerFnArgs.action,\n current,\n next,\n })\n if (!props.withResolver) {\n return shouldBlock\n }\n\n if (!shouldBlock) {\n return false\n }\n\n const promise = new Promise<boolean>((resolve) => {\n setResolver({\n status: 'blocked',\n current,\n next,\n action: blockerFnArgs.action,\n proceed: () => resolve(false),\n reset: () => resolve(true),\n })\n })\n\n const canNavigateAsync = await promise\n setResolver({\n status: 'idle',\n current: undefined,\n next: undefined,\n action: undefined,\n proceed: undefined,\n reset: undefined,\n })\n\n return canNavigateAsync\n }\n\n const disposeBlock = props.disabled\n ? undefined\n : router.history.block({\n blockerFn: blockerFnComposed,\n enableBeforeUnload: props.enableBeforeUnload,\n })\n\n Solid.onCleanup(() => disposeBlock?.())\n })\n\n return resolver\n}\n\nconst _resolvePromptBlockerArgs = (\n props: PromptProps | LegacyPromptProps,\n): UseBlockerOpts => {\n if ('shouldBlockFn' in props) {\n return props\n }\n\n const shouldBlock = Solid.createMemo(() => Boolean(props.condition ?? true))\n\n const _customBlockerFn = async () => {\n if (shouldBlock() && props.blockerFn !== undefined) {\n return await props.blockerFn()\n }\n return shouldBlock\n }\n\n return {\n shouldBlockFn: _customBlockerFn,\n get enableBeforeUnload() {\n return shouldBlock()\n },\n get withResolver() {\n return props.blockerFn === undefined\n },\n }\n}\n\nexport function Block<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n>(opts: PromptProps<TRouter, TWithResolver>): SolidNode\n\n/**\n * @deprecated Use the UseBlockerOpts property instead\n */\nexport function Block(opts: LegacyPromptProps): SolidNode\n\nexport function Block(opts: PromptProps | LegacyPromptProps): SolidNode {\n const propsWithChildren = {\n get children() {\n return opts.children\n },\n }\n const args = _resolvePromptBlockerArgs(opts)\n\n const resolver = useBlocker(args)\n const children = Solid.createMemo(() => {\n const child = propsWithChildren.children\n if (resolver && typeof child === 'function') return child(resolver())\n return child\n })\n\n return <>{children()}</>\n}\n\ntype LegacyPromptProps = {\n blockerFn?: LegacyBlockerFn\n condition?: boolean | any\n children?: SolidNode | ((params: BlockerResolver) => SolidNode)\n}\n\ntype PromptProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TWithResolver extends boolean = boolean,\n TParams = TWithResolver extends true ? BlockerResolver<TRouter> : void,\n> = UseBlockerOpts<TRouter, TWithResolver> & {\n children?: SolidNode | ((params: TParams) => SolidNode)\n}\n"],"names":["_resolveBlockerOpts","opts","condition","undefined","shouldBlockFn","withResolver","shouldBlock","Boolean","_customBlockerFn","enableBeforeUnload","Solid","createMemo","blockerFn","useBlocker","props","merge","disabled","router","useRouter","resolver","setResolver","createSignal","status","current","next","action","proceed","reset","createTrackedEffect","blockerFnComposed","blockerFnArgs","getLocation","location","parsedLocation","parseLocation","matchedRoutes","getMatchedRoutes","pathname","foundRoute","routeId","fullPath","params","routeParams","search","id","currentLocation","nextLocation","promise","Promise","resolve","canNavigateAsync","disposeBlock","history","block","onCleanup","_resolvePromptBlockerArgs","Block","propsWithChildren","children","args","child","_$memo"],"mappings":"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"}
@@ -40,12 +40,9 @@ function useMatch(opts) {
40
40
  };
41
41
  }
42
42
  });
43
- Solid__namespace.createEffect(() => {
44
- const state = matchState();
45
- if (state.shouldThrowError) {
46
- invariant(false, `Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
47
- }
48
- });
43
+ if (Solid__namespace.untrack(matchState).shouldThrowError) {
44
+ invariant(false, `Could not find ${opts.from ? `an active match from "${opts.from}"` : "a nearest match!"}`);
45
+ }
49
46
  return Solid__namespace.createMemo(() => matchState().match);
50
47
  }
51
48
  exports.useMatch = useMatch;
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n // Create a signal to track error state separately from the match\n const matchState: Solid.Accessor<{\n match: any\n shouldThrowError: boolean\n }> = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n if (match === undefined) {\n // During navigation transitions, check if the match exists in pendingMatches\n const pendingMatch = state.pendingMatches?.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n // Determine if we should throw an error\n const shouldThrowError =\n !pendingMatch && !state.isTransitioning && (opts.shouldThrow ?? true)\n\n return { match: undefined, shouldThrowError }\n }\n\n return {\n match: opts.select ? opts.select(match) : match,\n shouldThrowError: false,\n }\n },\n } as any)\n\n // Use createEffect to throw errors outside the reactive selector context\n // This allows error boundaries to properly catch the errors\n Solid.createEffect(() => {\n const state = matchState()\n if (state.shouldThrowError) {\n invariant(\n false,\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n }\n })\n\n // Return an accessor that extracts just the match value\n return Solid.createMemo(() => matchState().match) as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchState","useRouterState","select","state","match","matches","find","d","routeId","id","undefined","pendingMatch","pendingMatches","shouldThrowError","isTransitioning","shouldThrow","createEffect","invariant","createMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,iBAAMC,WAC3BH,KAAKI,OAAOC,aAAAA,oBAAoBC,yBAClC;AAGA,QAAMC,aAGDC,eAAAA,eAAe;AAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEA,UAAIU,UAAUM,QAAW;AAEvB,cAAMC,eAAeR,MAAMS,gBAAgBN,KAAK,CAACC,MAC/Cd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAGA,cAAMmB,mBACJ,CAACF,gBAAgB,CAACR,MAAMW,oBAAoBrB,KAAKsB,eAAe;AAElE,eAAO;AAAA,UAAEX,OAAOM;AAAAA,UAAWG;AAAAA,QAAAA;AAAAA,MAC7B;AAEA,aAAO;AAAA,QACLT,OAAOX,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,QAC1CS,kBAAkB;AAAA,MAAA;AAAA,IAEtB;AAAA,EAAA,CACM;AAIRlB,mBAAMqB,aAAa,MAAM;AACvB,UAAMb,QAAQH,WAAAA;AACd,QAAIG,MAAMU,kBAAkB;AAC1BI,gBACE,OACA,kBAAkBxB,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAAA,IACF;AAAA,EACF,CAAC;AAGD,SAAOF,iBAAMuB,WAAW,MAAMlB,WAAAA,EAAaI,KAAK;AAClD;;"}
1
+ {"version":3,"file":"useMatch.cjs","sources":["../../src/useMatch.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport { useRouterState } from './useRouterState'\nimport { dummyMatchContext, matchContext } from './matchContext'\nimport type {\n AnyRouter,\n MakeRouteMatch,\n MakeRouteMatchUnion,\n RegisteredRouter,\n StrictOrFrom,\n ThrowConstraint,\n ThrowOrOptional,\n} from '@tanstack/router-core'\n\nexport interface UseMatchBaseOptions<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> {\n select?: (\n match: MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>,\n ) => TSelected\n shouldThrow?: TThrow\n}\n\nexport type UseMatchRoute<out TFrom> = <\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchBaseOptions<TRouter, TFrom, true, true, TSelected>,\n) => Solid.Accessor<UseMatchResult<TRouter, TFrom, true, TSelected>>\n\nexport type UseMatchOptions<\n TRouter extends AnyRouter,\n TFrom extends string | undefined,\n TStrict extends boolean,\n TThrow extends boolean,\n TSelected,\n> = StrictOrFrom<TRouter, TFrom, TStrict> &\n UseMatchBaseOptions<TRouter, TFrom, TStrict, TThrow, TSelected>\n\nexport type UseMatchResult<\n TRouter extends AnyRouter,\n TFrom,\n TStrict extends boolean,\n TSelected,\n> = unknown extends TSelected\n ? TStrict extends true\n ? MakeRouteMatch<TRouter['routeTree'], TFrom, TStrict>\n : MakeRouteMatchUnion<TRouter>\n : TSelected\n\nexport function useMatch<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string | undefined = undefined,\n TStrict extends boolean = true,\n TThrow extends boolean = true,\n TSelected = unknown,\n>(\n opts: UseMatchOptions<\n TRouter,\n TFrom,\n TStrict,\n ThrowConstraint<TStrict, TThrow>,\n TSelected\n >,\n): Solid.Accessor<\n ThrowOrOptional<UseMatchResult<TRouter, TFrom, TStrict, TSelected>, TThrow>\n> {\n const nearestMatchId = Solid.useContext(\n opts.from ? dummyMatchContext : matchContext,\n )\n\n // Create a signal to track error state separately from the match\n const matchState: Solid.Accessor<{\n match: any\n shouldThrowError: boolean\n }> = useRouterState({\n select: (state: any) => {\n const match = state.matches.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n if (match === undefined) {\n // During navigation transitions, check if the match exists in pendingMatches\n const pendingMatch = state.pendingMatches?.find((d: any) =>\n opts.from ? opts.from === d.routeId : d.id === nearestMatchId(),\n )\n\n // Determine if we should throw an error\n const shouldThrowError =\n !pendingMatch && !state.isTransitioning && (opts.shouldThrow ?? true)\n\n return { match: undefined, shouldThrowError }\n }\n\n return {\n match: opts.select ? opts.select(match) : match,\n shouldThrowError: false,\n }\n },\n } as any)\n\n if (Solid.untrack(matchState).shouldThrowError) {\n invariant(\n false,\n `Could not find ${opts.from ? `an active match from \"${opts.from}\"` : 'a nearest match!'}`,\n )\n }\n\n // Return an accessor that extracts just the match value\n return Solid.createMemo(() => matchState().match) as any\n}\n"],"names":["useMatch","opts","nearestMatchId","Solid","useContext","from","dummyMatchContext","matchContext","matchState","useRouterState","select","state","match","matches","find","d","routeId","id","undefined","pendingMatch","pendingMatches","shouldThrowError","isTransitioning","shouldThrow","untrack","invariant","createMemo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsDO,SAASA,SAOdC,MASA;AACA,QAAMC,iBAAiBC,iBAAMC,WAC3BH,KAAKI,OAAOC,aAAAA,oBAAoBC,yBAClC;AAGA,QAAMC,aAGDC,eAAAA,eAAe;AAAA,IAClBC,QAAQA,CAACC,UAAe;AACtB,YAAMC,QAAQD,MAAME,QAAQC,KAAK,CAACC,MAChCd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAEA,UAAIU,UAAUM,QAAW;AAEvB,cAAMC,eAAeR,MAAMS,gBAAgBN,KAAK,CAACC,MAC/Cd,KAAKI,OAAOJ,KAAKI,SAASU,EAAEC,UAAUD,EAAEE,OAAOf,gBACjD;AAGA,cAAMmB,mBACJ,CAACF,gBAAgB,CAACR,MAAMW,oBAAoBrB,KAAKsB,eAAe;AAElE,eAAO;AAAA,UAAEX,OAAOM;AAAAA,UAAWG;AAAAA,QAAAA;AAAAA,MAC7B;AAEA,aAAO;AAAA,QACLT,OAAOX,KAAKS,SAAST,KAAKS,OAAOE,KAAK,IAAIA;AAAAA,QAC1CS,kBAAkB;AAAA,MAAA;AAAA,IAEtB;AAAA,EAAA,CACM;AAER,MAAIlB,iBAAMqB,QAAQhB,UAAU,EAAEa,kBAAkB;AAC9CI,cACE,OACA,kBAAkBxB,KAAKI,OAAO,yBAAyBJ,KAAKI,IAAI,MAAM,kBAAkB,EAC1F;AAAA,EACF;AAGA,SAAOF,iBAAMuB,WAAW,MAAMlB,WAAAA,EAAaI,KAAK;AAClD;;"}