@tanstack/router-core 1.168.8 → 1.168.10
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.
- package/dist/cjs/hash-scroll.cjs +1 -1
- package/dist/cjs/hash-scroll.cjs.map +1 -1
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/load-matches.cjs +4 -4
- package/dist/cjs/load-matches.cjs.map +1 -1
- package/dist/cjs/router.cjs +44 -45
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/cjs/router.d.cts +3 -1
- package/dist/cjs/scroll-restoration.cjs +1 -1
- package/dist/cjs/scroll-restoration.cjs.map +1 -1
- package/dist/cjs/ssr/createRequestHandler.cjs +2 -2
- package/dist/cjs/ssr/createRequestHandler.cjs.map +1 -1
- package/dist/cjs/ssr/serializer/RawStream.cjs +41 -32
- package/dist/cjs/ssr/serializer/RawStream.cjs.map +1 -1
- package/dist/cjs/ssr/serializer/RawStream.d.cts +12 -4
- package/dist/cjs/ssr/serializer/ShallowErrorPlugin.cjs.map +1 -1
- package/dist/cjs/ssr/serializer/ShallowErrorPlugin.d.cts +2 -2
- package/dist/cjs/ssr/serializer/seroval-plugins.cjs.map +1 -1
- package/dist/cjs/ssr/serializer/seroval-plugins.d.cts +2 -1
- package/dist/cjs/ssr/serializer/transformer.cjs +16 -14
- package/dist/cjs/ssr/serializer/transformer.cjs.map +1 -1
- package/dist/cjs/ssr/serializer/transformer.d.cts +24 -23
- package/dist/cjs/ssr/ssr-client.cjs +8 -8
- package/dist/cjs/ssr/ssr-client.cjs.map +1 -1
- package/dist/cjs/ssr/ssr-server.cjs +31 -9
- package/dist/cjs/ssr/ssr-server.cjs.map +1 -1
- package/dist/cjs/ssr/ssr-server.d.cts +3 -2
- package/dist/cjs/ssr/transformStreamWithRouter.cjs +4 -1
- package/dist/cjs/ssr/transformStreamWithRouter.cjs.map +1 -1
- package/dist/cjs/stores.cjs +27 -27
- package/dist/cjs/stores.cjs.map +1 -1
- package/dist/cjs/stores.d.cts +2 -2
- package/dist/esm/hash-scroll.js +1 -1
- package/dist/esm/hash-scroll.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/load-matches.js +4 -4
- package/dist/esm/load-matches.js.map +1 -1
- package/dist/esm/router.d.ts +3 -1
- package/dist/esm/router.js +44 -45
- package/dist/esm/router.js.map +1 -1
- package/dist/esm/scroll-restoration.js +1 -1
- package/dist/esm/scroll-restoration.js.map +1 -1
- package/dist/esm/ssr/createRequestHandler.js +2 -2
- package/dist/esm/ssr/createRequestHandler.js.map +1 -1
- package/dist/esm/ssr/serializer/RawStream.d.ts +12 -4
- package/dist/esm/ssr/serializer/RawStream.js +41 -32
- package/dist/esm/ssr/serializer/RawStream.js.map +1 -1
- package/dist/esm/ssr/serializer/ShallowErrorPlugin.d.ts +2 -2
- package/dist/esm/ssr/serializer/ShallowErrorPlugin.js.map +1 -1
- package/dist/esm/ssr/serializer/seroval-plugins.d.ts +2 -1
- package/dist/esm/ssr/serializer/seroval-plugins.js.map +1 -1
- package/dist/esm/ssr/serializer/transformer.d.ts +24 -23
- package/dist/esm/ssr/serializer/transformer.js +16 -14
- package/dist/esm/ssr/serializer/transformer.js.map +1 -1
- package/dist/esm/ssr/ssr-client.js +8 -8
- package/dist/esm/ssr/ssr-client.js.map +1 -1
- package/dist/esm/ssr/ssr-server.d.ts +3 -2
- package/dist/esm/ssr/ssr-server.js +31 -9
- package/dist/esm/ssr/ssr-server.js.map +1 -1
- package/dist/esm/ssr/transformStreamWithRouter.js +4 -1
- package/dist/esm/ssr/transformStreamWithRouter.js.map +1 -1
- package/dist/esm/stores.d.ts +2 -2
- package/dist/esm/stores.js +28 -28
- package/dist/esm/stores.js.map +1 -1
- package/package.json +3 -3
- package/src/hash-scroll.ts +1 -1
- package/src/index.ts +1 -1
- package/src/load-matches.ts +6 -6
- package/src/router.ts +59 -57
- package/src/scroll-restoration.ts +1 -1
- package/src/ssr/createRequestHandler.ts +4 -5
- package/src/ssr/serializer/RawStream.ts +65 -56
- package/src/ssr/serializer/ShallowErrorPlugin.ts +2 -2
- package/src/ssr/serializer/seroval-plugins.ts +2 -1
- package/src/ssr/serializer/transformer.ts +71 -76
- package/src/ssr/ssr-client.ts +7 -11
- package/src/ssr/ssr-server.ts +39 -7
- package/src/ssr/transformStreamWithRouter.ts +3 -0
- package/src/stores.ts +34 -34
|
@@ -366,6 +366,9 @@ export function transformStreamWithRouter(
|
|
|
366
366
|
if (isAppRendering || leftover || pendingClosingTags) {
|
|
367
367
|
appendRouterHtml(html)
|
|
368
368
|
} else {
|
|
369
|
+
// App is done rendering - flush any pending buffer first to maintain order,
|
|
370
|
+
// then write the new HTML directly
|
|
371
|
+
flushPendingRouterHtml()
|
|
369
372
|
safeEnqueue(html)
|
|
370
373
|
}
|
|
371
374
|
})
|
package/src/stores.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createLRUCache } from './lru-cache'
|
|
2
|
-
import { arraysEqual } from './utils'
|
|
2
|
+
import { arraysEqual, functionalUpdate } from './utils'
|
|
3
3
|
|
|
4
4
|
import type { AnyRoute } from './route'
|
|
5
5
|
import type { RouterState } from './router'
|
|
@@ -9,13 +9,13 @@ import type { AnyRedirect } from './redirect'
|
|
|
9
9
|
import type { AnyRouteMatch } from './Matches'
|
|
10
10
|
|
|
11
11
|
export interface RouterReadableStore<TValue> {
|
|
12
|
-
|
|
12
|
+
get: () => TValue
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export interface RouterWritableStore<
|
|
16
16
|
TValue,
|
|
17
17
|
> extends RouterReadableStore<TValue> {
|
|
18
|
-
|
|
18
|
+
set: ((updater: (prev: TValue) => TValue) => void) & ((value: TValue) => void)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export type RouterBatchFn = (fn: () => void) => void
|
|
@@ -49,11 +49,11 @@ export function createNonReactiveMutableStore<TValue>(
|
|
|
49
49
|
let value = initialValue
|
|
50
50
|
|
|
51
51
|
return {
|
|
52
|
-
get
|
|
52
|
+
get() {
|
|
53
53
|
return value
|
|
54
54
|
},
|
|
55
|
-
|
|
56
|
-
value =
|
|
55
|
+
set(nextOrUpdater: TValue | ((prev: TValue) => TValue)) {
|
|
56
|
+
value = functionalUpdate(nextOrUpdater, value)
|
|
57
57
|
},
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -63,7 +63,7 @@ export function createNonReactiveReadonlyStore<TValue>(
|
|
|
63
63
|
read: () => TValue,
|
|
64
64
|
): RouterReadableStore<TValue> {
|
|
65
65
|
return {
|
|
66
|
-
get
|
|
66
|
+
get() {
|
|
67
67
|
return read()
|
|
68
68
|
},
|
|
69
69
|
}
|
|
@@ -141,38 +141,38 @@ export function createRouterStores<TRouteTree extends AnyRoute>(
|
|
|
141
141
|
|
|
142
142
|
// 1st order derived stores
|
|
143
143
|
const activeMatchesSnapshot = createReadonlyStore(() =>
|
|
144
|
-
readPoolMatches(activeMatchStoresById, matchesId.
|
|
144
|
+
readPoolMatches(activeMatchStoresById, matchesId.get()),
|
|
145
145
|
)
|
|
146
146
|
const pendingMatchesSnapshot = createReadonlyStore(() =>
|
|
147
|
-
readPoolMatches(pendingMatchStoresById, pendingMatchesId.
|
|
147
|
+
readPoolMatches(pendingMatchStoresById, pendingMatchesId.get()),
|
|
148
148
|
)
|
|
149
149
|
const cachedMatchesSnapshot = createReadonlyStore(() =>
|
|
150
|
-
readPoolMatches(cachedMatchStoresById, cachedMatchesId.
|
|
150
|
+
readPoolMatches(cachedMatchStoresById, cachedMatchesId.get()),
|
|
151
151
|
)
|
|
152
|
-
const firstMatchId = createReadonlyStore(() => matchesId.
|
|
152
|
+
const firstMatchId = createReadonlyStore(() => matchesId.get()[0])
|
|
153
153
|
const hasPendingMatches = createReadonlyStore(() =>
|
|
154
|
-
matchesId.
|
|
154
|
+
matchesId.get().some((matchId) => {
|
|
155
155
|
const store = activeMatchStoresById.get(matchId)
|
|
156
|
-
return store?.
|
|
156
|
+
return store?.get().status === 'pending'
|
|
157
157
|
}),
|
|
158
158
|
)
|
|
159
159
|
const matchRouteReactivity = createReadonlyStore(() => ({
|
|
160
|
-
locationHref: location.
|
|
161
|
-
resolvedLocationHref: resolvedLocation.
|
|
162
|
-
status: status.
|
|
160
|
+
locationHref: location.get().href,
|
|
161
|
+
resolvedLocationHref: resolvedLocation.get()?.href,
|
|
162
|
+
status: status.get(),
|
|
163
163
|
}))
|
|
164
164
|
|
|
165
165
|
// compatibility "big" state store
|
|
166
166
|
const __store = createReadonlyStore(() => ({
|
|
167
|
-
status: status.
|
|
168
|
-
loadedAt: loadedAt.
|
|
169
|
-
isLoading: isLoading.
|
|
170
|
-
isTransitioning: isTransitioning.
|
|
171
|
-
matches: activeMatchesSnapshot.
|
|
172
|
-
location: location.
|
|
173
|
-
resolvedLocation: resolvedLocation.
|
|
174
|
-
statusCode: statusCode.
|
|
175
|
-
redirect: redirect.
|
|
167
|
+
status: status.get(),
|
|
168
|
+
loadedAt: loadedAt.get(),
|
|
169
|
+
isLoading: isLoading.get(),
|
|
170
|
+
isTransitioning: isTransitioning.get(),
|
|
171
|
+
matches: activeMatchesSnapshot.get(),
|
|
172
|
+
location: location.get(),
|
|
173
|
+
resolvedLocation: resolvedLocation.get(),
|
|
174
|
+
statusCode: statusCode.get(),
|
|
175
|
+
redirect: redirect.get(),
|
|
176
176
|
}))
|
|
177
177
|
|
|
178
178
|
// Per-routeId computed store cache.
|
|
@@ -194,15 +194,15 @@ export function createRouterStores<TRouteTree extends AnyRoute>(
|
|
|
194
194
|
let cached = matchStoreByRouteIdCache.get(routeId)
|
|
195
195
|
if (!cached) {
|
|
196
196
|
cached = createReadonlyStore(() => {
|
|
197
|
-
// Reading matchesId.
|
|
197
|
+
// Reading matchesId.get() tracks it as a dependency.
|
|
198
198
|
// When matchesId changes (navigation), this computed re-evaluates.
|
|
199
|
-
const ids = matchesId.
|
|
199
|
+
const ids = matchesId.get()
|
|
200
200
|
for (const id of ids) {
|
|
201
201
|
const matchStore = activeMatchStoresById.get(id)
|
|
202
202
|
if (matchStore && matchStore.routeId === routeId) {
|
|
203
|
-
// Reading matchStore.
|
|
203
|
+
// Reading matchStore.get() tracks it as a dependency.
|
|
204
204
|
// When the match store's state changes, this re-evaluates.
|
|
205
|
-
return matchStore.
|
|
205
|
+
return matchStore.get()
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
return undefined
|
|
@@ -297,7 +297,7 @@ function readPoolMatches(
|
|
|
297
297
|
for (const id of ids) {
|
|
298
298
|
const matchStore = pool.get(id)
|
|
299
299
|
if (matchStore) {
|
|
300
|
-
matches.push(matchStore.
|
|
300
|
+
matches.push(matchStore.get())
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
return matches
|
|
@@ -330,13 +330,13 @@ function reconcileMatchPool(
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
existing.routeId = nextMatch.routeId
|
|
333
|
-
if (existing.
|
|
334
|
-
existing.
|
|
333
|
+
if (existing.get() !== nextMatch) {
|
|
334
|
+
existing.set(nextMatch)
|
|
335
335
|
}
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
-
if (!arraysEqual(idStore.
|
|
339
|
-
idStore.
|
|
338
|
+
if (!arraysEqual(idStore.get(), nextIds)) {
|
|
339
|
+
idStore.set(nextIds)
|
|
340
340
|
}
|
|
341
341
|
})
|
|
342
342
|
}
|