Repository navigation
@tanstack/solid-router@2.0.0-rc.9
Pre-releasePatch Changes
-
#8751
acd08ef- Bump solid-js and @solidjs/web to ^2.0.0-rc.16 and @solidjs/vite-plugin to ^3.0.0-next.51 across the monorepo (with @solidjs/babel-plugin 2.0.0-rc.16 for the webpack path and the@rsbuild/plugin-solidcompiler overrides), and raise the Solid packages' solid-js / @solidjs/web peer floors to 2.0.0-rc.16. @solidjs/vite-plugin 3.0.0-next.51 peer-requires rc.16 and no longer adds a$$moduleUrlexport to SSR entry chunks, which Cloudflare Workers rejected (solidjs/solid-vite-plugin#423).Bump @tanstack/solid-query to ^6.0.0-rc.5 and move @tanstack/solid-query-devtools off its exact 6.0.0-rc.1 pin to ^6.0.0-rc.5; every solid-js export the rc.5 devtools import exists in rc.16.
<Await>no longer renders its children withundefineddata while hydrating a streamed deferred promise. seroval has already settled the promise by then, butdefer()only records the result in a.thencallback, so<Await>now reads seroval's synchronous status markers when the deferred state is still pending. -
#8467
0dc3a9e- Bump solid-js and @solidjs/web to ^2.0.0-rc.9 and @solidjs/vite-plugin to ^3.0.0-next.44 across the monorepo (with @solidjs/babel-plugin 2.0.0-rc.9 for the webpack path). @solidjs/vite-plugin 3.0.0-next.44 peer-requires solid-js ^2.0.0-rc.9 and ships the rc.9 compiler.rc.9 changed
serverFunctionUrlto describe aGET()reference's own call (serverFunctionUrl(fn, ...args)) and moved the id-based form-post address toserverFunctionActionUrl/parseServerFunctionActionUrl(solidjs/solid#3440); @tanstack/solid-start's server-function handler now uses those.Rsbuild apps:
@rsbuild/plugin-solid@2.0.0-rc.0hard-pins the rc.6 compiler, which emits the old delegated-event key (el.$$click) that the rc.9 runtime no longer reads (_$$click), so delegated handlers never fire. Until the plugin ships an rc.9-based release, override its@solidjs/compilerand@solidjs/babel-pluginto 2.0.0-rc.9 (the monorepo does this inpnpm-workspace.yaml). -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a navigation that passes auseBlockerkeeps the interaction that requested it and is dated from the request, though the history awaits the blocker before it changes; one the blocker holds untilproceed()joins the interaction that proceeds and is dated from it, as@solidjs/router'sretry()makes it. The router notes the request atcommitLocationfor the history change to take. A navigation the blocker stops, or a request that changes no history (the same location reloading), leaves nothing noted behind. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a redirect while the first page loads — a client-rendered arrival whosebeforeLoador loader throwsredirect()— is recorded as a navigation from the arrival to where the redirect sent it, after the initial record that names the arrival, as@solidjs/routerrecords one. It had no record: nothing was shown yet to navigate from. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): the router declares the route the document arrived on, with the sameOBSERVE.attribution.withOrigincall it makes for every navigation (initial: trueon the ref), around the work that establishes its initial match — the Transitioner's on the client,RouterProvider's load on the server. On the client this is the first"navigation"record (initial: true,atthe document's navigation start, no write to wait for), kept out offeedback().navigations; on the server the same declaration names the request's"render"record (RenderEvent.route: the matched route'sfullPath, the path and search, the params), read when the render settles, so a render whose provider ran the load names the location it resolved. A consumer naming page loads and requests by route (/users/$idrather than one name per user) had this for every navigation but the first; now it has the first too.The Transitioner committing the canonical form of the arrival location (search defaults, trailing slash) is part of the arrival, as in
@solidjs/router: the initial record names the canonical location, a router loaded before it mounted no longer records the commit as a navigation, and the next navigation is dated from its own request rather than from that commit. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a navigation's record joins the interaction that requested it — the<Link>click, or any handler that callednavigate()— though the match publish it wraps runs after the loaders, long after the handler returned. The Transitioner capturesOBSERVE.attribution.currentOrigin()with the request time when the history changes and hands it back asNavigationRef.interaction(solid-js 2.0.0-rc.12), so the record, and every hold and re-run the publish causes, carries the click. A navigation requested outside any interaction declares none. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a navigation'stoandfrom, the initial record'sto, and a server render'sRenderEvent.route.toare the location's path, search and hash (/users/42?tab=posts#bio) rather than its pathname, as@solidjs/routergives them — itshref, in the router's own path space, the onenameis in (before a basepath or rewrite). A request carries no hash, so a render'stois the path and search. The name stays the route pattern the pathname matches. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a not-found under a route with a loader (/users/2/nopeunder/users/$id) is recorded, named by its pathname, as@solidjs/routerrecords an unmatched path. The route's match sits below the not-found boundary and never loads, so it stayspendingin the publish that lands, which was mistaken for the pending offer and published undeclared: the navigation had no record. Only a match pending at or above the not-found boundary marks the pending offer now. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a navigation sent elsewhere while it is pending — abeforeLoador loader redirecting it, or another navigation requested before it published — is one record with its hops, as@solidjs/routerdeclares one: the record keeps the first request's time and interaction, names the destination that showed, and lists the destinations it abandoned inredirects(each with its name,to, params, and when it was sent on). The router declares aredirect: nref per hop around the publish that lands. The browser moving (back, forward) while a navigation is pending supersedes it instead: a record of its own, from the location shown. Before, the record named only the final destination and kept no hops. Nothing changes in production, whereOBSERVEis undefined. -
#8574
1015223- Observe tier (Solid's dev and observe builds only): a navigation's record names a not-found by its pathname instead of the route above it, so/nopeno longer files under/beside the home page, and itsparamsare the strings the path bound rather than the valuesparams.parsereturned, as Solid'sNavigationRefdeclares them. Nothing changes in production, whereOBSERVEis undefined. -
#8569
665e9d8- Bump solid-js and @solidjs/web to ^2.0.0-rc.13 (and @solidjs/vite-plugin to ^3.0.0-next.46), and raise the Solid peer floors to 2.0.0-rc.13.@tanstack/solid-router moves off Solid's internal
sharedConfigand the raw_$HYregistry onto the public hydration API rc.13 ships (solidjs/solid#3718):useHydratedreadsisHydrating(); the native SSR match transfer writes throughgetHydrationWriter()gated onisHydratable(), so it now respects<NoHydration>; and the client boot takes each match's entry withtakeHydrationValue(). -
#7607
81ee38e- fix: keep route-scoped accessors (e.g.Route.useParams(),Route.useSearch()) readable when read from async work after navigating away. Once the owning scope is disposed, the accessor returns its last known value instead ofundefinedfor the now-missing match.