@tanstack/react-start 1.168.59 → 1.168.61

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.
@@ -1,2 +1 @@
1
- import { condition, idle, interaction, load, media, never, visible } from "@tanstack/react-start-client/hydration";
2
- export { condition, idle, interaction, load, media, never, visible };
1
+ export { condition, idle, interaction, load, media, never, visible } from "@tanstack/react-start-client/hydration";
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","names":[],"sources":["../../../src/plugin/shared.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url'\nimport path from 'pathe'\n\nconst currentDir = path.dirname(fileURLToPath(import.meta.url))\nexport const reactStartPluginDir = currentDir\nconst defaultEntryDir = path.resolve(\n currentDir,\n '..',\n '..',\n 'plugin',\n 'default-entry',\n)\n\nexport const reactStartDefaultEntryPaths = {\n client: path.resolve(defaultEntryDir, 'client.tsx'),\n server: path.resolve(defaultEntryDir, 'server.ts'),\n start: path.resolve(defaultEntryDir, 'start.ts'),\n}\n\nexport function resolvePackageEntryPath(packageName: string): string {\n return fileURLToPath(import.meta.resolve(packageName))\n}\n"],"mappings":";;;AAGA,IAAM,aAAa,KAAK,QAAQ,cAAc,OAAO,KAAK,GAAG,CAAC;AAC9D,IAAa,sBAAsB;AACnC,IAAM,kBAAkB,KAAK,QAC3B,YACA,MACA,MACA,UACA,eACF;AAEA,IAAa,8BAA8B;CACzC,QAAQ,KAAK,QAAQ,iBAAiB,YAAY;CAClD,QAAQ,KAAK,QAAQ,iBAAiB,WAAW;CACjD,OAAO,KAAK,QAAQ,iBAAiB,UAAU;AACjD"}
1
+ {"version":3,"file":"shared.js","names":[],"sources":["../../../src/plugin/shared.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url'\nimport path from 'pathe'\n\nconst currentDir = path.dirname(fileURLToPath(import.meta.url))\nexport const reactStartPluginDir = currentDir\nconst defaultEntryDir = path.resolve(\n currentDir,\n '..',\n '..',\n 'plugin',\n 'default-entry',\n)\n\nexport const reactStartDefaultEntryPaths = {\n client: path.resolve(defaultEntryDir, 'client.tsx'),\n server: path.resolve(defaultEntryDir, 'server.ts'),\n start: path.resolve(defaultEntryDir, 'start.ts'),\n}\n\nexport function resolvePackageEntryPath(packageName: string): string {\n return fileURLToPath(import.meta.resolve(packageName))\n}\n"],"mappings":";;;AAGA,IAAM,aAAa,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAC9D,IAAa,sBAAsB;AACnC,IAAM,kBAAkB,KAAK,QAC3B,YACA,MACA,MACA,UACA,eACF;AAEA,IAAa,8BAA8B;CACzC,QAAQ,KAAK,QAAQ,iBAAiB,YAAY;CAClD,QAAQ,KAAK,QAAQ,iBAAiB,WAAW;CACjD,OAAO,KAAK,QAAQ,iBAAiB,UAAU;AACjD"}
@@ -1,2 +1 @@
1
- import { rscSerializationAdapter } from "@tanstack/react-start-rsc/serialization.client";
2
- export { rscSerializationAdapter };
1
+ export { rscSerializationAdapter } from "@tanstack/react-start-rsc/serialization.client";
@@ -1,2 +1 @@
1
- import { rscSerializationAdapter } from "@tanstack/react-start-rsc/serialization.server";
2
- export { rscSerializationAdapter };
1
+ export { rscSerializationAdapter } from "@tanstack/react-start-rsc/serialization.server";
@@ -1,2 +1 @@
1
- import { createServerRpc } from "@tanstack/start-server-core/createServerRpc";
2
- export { createServerRpc };
1
+ export { createServerRpc } from "@tanstack/start-server-core/createServerRpc";
@@ -1,2 +1 @@
1
- import { createSsrRpc } from "@tanstack/start-server-core/createSsrRpc";
2
- export { createSsrRpc };
1
+ export { createSsrRpc } from "@tanstack/start-server-core/createSsrRpc";
@@ -1 +1 @@
1
- {"version":3,"file":"useServerFn.js","names":[],"sources":["../../src/useServerFn.ts"],"sourcesContent":["import * as React from 'react'\nimport { isRedirect, useRouter } from '@tanstack/react-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return React.useCallback(\n async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n err.options._fromLocation = router.stores.location.get()\n return router.navigate(router.resolveRedirect(err).options)\n }\n\n throw err\n }\n },\n [router, serverFn],\n ) as any\n}\n"],"mappings":";;;AAGA,SAAgB,YACd,UAC2C;CAC3C,MAAM,SAAS,UAAU;CAEzB,OAAO,MAAM,YACX,OAAO,GAAG,SAAqB;EAC7B,IAAI;GACF,MAAM,MAAM,MAAM,SAAS,GAAG,IAAI;GAElC,IAAI,WAAW,GAAG,GAChB,MAAM;GAGR,OAAO;EACT,SAAS,KAAK;GACZ,IAAI,WAAW,GAAG,GAAG;IACnB,IAAI,QAAQ,gBAAgB,OAAO,OAAO,SAAS,IAAI;IACvD,OAAO,OAAO,SAAS,OAAO,gBAAgB,GAAG,EAAE,OAAO;GAC5D;GAEA,MAAM;EACR;CACF,GACA,CAAC,QAAQ,QAAQ,CACnB;AACF"}
1
+ {"version":3,"file":"useServerFn.js","names":[],"sources":["../../src/useServerFn.ts"],"sourcesContent":["import * as React from 'react'\nimport { isRedirect, useRouter } from '@tanstack/react-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return React.useCallback(\n async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n err.options._fromLocation = router.stores.location.get()\n return router.navigate(router.resolveRedirect(err).options)\n }\n\n throw err\n }\n },\n [router, serverFn],\n ) as any\n}\n"],"mappings":";;;AAGA,SAAgB,YACd,UAC2C;CAC3C,MAAM,SAAS,UAAU;CAEzB,OAAO,MAAM,YACX,OAAO,GAAG,SAAqB;EAC7B,IAAI;GACF,MAAM,MAAM,MAAM,SAAS,GAAG,IAAI;GAElC,IAAI,WAAW,GAAG,GAChB,MAAM;GAGR,OAAO;EACT,SAAS,KAAK;GACZ,IAAI,WAAW,GAAG,GAAG;IACnB,IAAI,QAAQ,gBAAgB,OAAO,OAAO,SAAS,IAAI;IACvD,OAAO,OAAO,SAAS,OAAO,gBAAgB,GAAG,CAAC,CAAC,OAAO;GAC5D;GAEA,MAAM;EACR;CACF,GACA,CAAC,QAAQ,QAAQ,CACnB;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/react-start",
3
- "version": "1.168.59",
3
+ "version": "1.168.61",
4
4
  "description": "Modern and scalable routing for React applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -155,14 +155,14 @@
155
155
  },
156
156
  "dependencies": {
157
157
  "pathe": "^2.0.3",
158
- "@tanstack/react-router": "1.170.40",
159
- "@tanstack/react-start-client": "1.168.38",
160
- "@tanstack/react-start-rsc": "0.1.58",
161
- "@tanstack/react-start-server": "1.167.45",
158
+ "@tanstack/react-router": "1.170.42",
159
+ "@tanstack/react-start-client": "1.168.40",
160
+ "@tanstack/react-start-server": "1.167.47",
162
161
  "@tanstack/router-utils": "1.162.3",
163
- "@tanstack/start-client-core": "1.170.33",
164
- "@tanstack/start-plugin-core": "1.171.48",
165
- "@tanstack/start-server-core": "1.169.38"
162
+ "@tanstack/start-client-core": "1.170.35",
163
+ "@tanstack/start-server-core": "1.169.40",
164
+ "@tanstack/start-plugin-core": "1.171.50",
165
+ "@tanstack/react-start-rsc": "0.1.60"
166
166
  },
167
167
  "peerDependencies": {
168
168
  "@rsbuild/core": "^2.0.0",
@@ -74,10 +74,10 @@ Treat TanStack Start RSCs as fetchable React Flight payloads, not as a framework
74
74
 
75
75
  - Simple server fragment in a route loader -> `renderServerComponent`
76
76
  - Interactive slot inside server markup -> `createCompositeComponent`
77
- - Route component needs browser APIs but loader can still prefetch on the server -> `ssr: 'data-only'`
77
+ - Route component needs browser APIs but loader can still query on the server -> `ssr: 'data-only'`
78
78
  - Loader itself needs browser APIs -> `ssr: false`
79
79
  - Route cache key must include search params -> `loaderDeps`
80
- - Query-managed RSC -> `useSuspenseQuery` + SSR `ensureQueryData`
80
+ - Query-managed RSC -> `useSuspenseQuery` + SSR `query` with `staleTime: 'static'`
81
81
  - Multiple independent RSCs -> separate server functions + `Promise.all`
82
82
  - Multiple RSCs sharing data or invalidating together -> one server function returning many renderables or sources
83
83
  - Need isolated widget failures or staggered reveal -> return promises from the loader and resolve with `use()` inside Suspense
@@ -73,10 +73,13 @@ const postQueryOptions = (postId: string) => ({
73
73
  })
74
74
  ```
75
75
 
76
- For SSR reuse, prefetch in the route loader:
76
+ For SSR reuse, run a static query in the route loader so cached data is reused without a stale refetch:
77
77
 
78
78
  ```tsx
79
- await context.queryClient.ensureQueryData(postQueryOptions(params.postId))
79
+ await context.queryClient.query({
80
+ ...postQueryOptions(params.postId),
81
+ staleTime: 'static',
82
+ })
80
83
  ```
81
84
 
82
85
  Then read it with `useSuspenseQuery` in the component.
@@ -1,5 +1,5 @@
1
1
  // Query-owned RSC pattern.
2
- // Assumes your router context provides a queryClient for SSR prefetch.
2
+ // Assumes your router context provides a queryClient for SSR queries.
3
3
 
4
4
  import type { ReactNode } from 'react'
5
5
  import { createFileRoute } from '@tanstack/react-router'
@@ -68,7 +68,10 @@ const postQueryOptions = (postId: string) => ({
68
68
 
69
69
  export const Route = createFileRoute('/posts/$postId')({
70
70
  loader: async ({ context, params }) => {
71
- await context.queryClient.ensureQueryData(postQueryOptions(params.postId))
71
+ await context.queryClient.query({
72
+ ...postQueryOptions(params.postId),
73
+ staleTime: 'static',
74
+ })
72
75
  },
73
76
  component: PostPage,
74
77
  })