@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
1 lines • 6.95 kB
Source Map (JSON)
{"version":3,"file":"Transitioner.cjs","names":["Solid","getLocationChangeInfo","trimPathRight","isServer","useRouter","Transitioner","router","mountLoadForRouter","mounted","isLoading","createMemo","stores","get","isSolidTransitioning","startSolidTransition","useTransition","hasPending","isAnyPending","isPagePending","startTransition","fn","Promise","onMount","unsub","history","subscribe","load","nextLocation","buildLocation","to","latestLocation","pathname","search","params","hash","state","_includeValidateSearch","publicHref","commitLocation","replace","onCleanup","createRenderEffect","untrack","window","ssr","tryLoad","err","console","error","previousIsLoading","currentIsLoading","emit","type","location","resolvedLocation","createComputed","previousIsPagePending","currentIsPagePending","previousIsAnyPending","currentIsAnyPending","changeInfo","batch","status","set"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = Solid.createMemo(() => router.stores.isLoading.get())\n\n if (isServer ?? router.isServer) {\n return null\n }\n\n const [isSolidTransitioning, startSolidTransition] = Solid.useTransition()\n\n // Track pending state changes\n const hasPending = Solid.createMemo(() => router.stores.hasPending.get())\n\n const isAnyPending = Solid.createMemo(\n () => isLoading() || isSolidTransitioning() || hasPending(),\n )\n\n const isPagePending = Solid.createMemo(() => isLoading() || hasPending())\n\n router.startTransition = (fn: () => void | Promise<void>) => {\n Solid.startTransition(() => {\n startSolidTransition(fn)\n })\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n const unsub = router.history.subscribe(router.load)\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) for consistency with\n // the server-side redirect check in router.beforeLoad.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createRenderEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createRenderEffect((previousIsLoading = false) => {\n const currentIsLoading = isLoading()\n\n if (previousIsLoading && !currentIsLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(\n router.stores.location.get(),\n router.stores.resolvedLocation.get(),\n ),\n })\n }\n\n return currentIsLoading\n })\n\n Solid.createComputed((previousIsPagePending = false) => {\n const currentIsPagePending = isPagePending()\n\n if (previousIsPagePending && !currentIsPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(\n router.stores.location.get(),\n router.stores.resolvedLocation.get(),\n ),\n })\n }\n\n return currentIsPagePending\n })\n\n Solid.createRenderEffect((previousIsAnyPending = false) => {\n const currentIsAnyPending = isAnyPending()\n\n if (previousIsAnyPending && !currentIsAnyPending) {\n const changeInfo = getLocationChangeInfo(\n router.stores.location.get(),\n router.stores.resolvedLocation.get(),\n )\n router.emit({\n type: 'onResolved',\n ...changeInfo,\n })\n\n Solid.batch(() => {\n router.stores.status.set('idle')\n router.stores.resolvedLocation.set(router.stores.location.get())\n })\n }\n\n return currentIsAnyPending\n })\n\n return null\n}\n"],"mappings":"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"}