-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
response reconciliation #7588
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
response reconciliation #7588
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| --- | ||
| '@tanstack/react-start': patch | ||
| '@tanstack/solid-start': patch | ||
| '@tanstack/vue-start': patch | ||
| '@tanstack/start-client-core': patch | ||
| '@tanstack/start-plugin-core': patch | ||
| '@tanstack/start-server-core': patch | ||
| --- | ||
|
|
||
| Improve Start response reconciliation, session cookie handling, and server-entry error recovery. Server entries now recover Start error responses with `handleStartError`, response helpers reconcile across server routes, SSR, server functions, redirects, and error responses, and serialized server-function transport headers are protected from helper overrides. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| node_modules | ||
| package-lock.json | ||
| yarn.lock | ||
|
|
||
| .DS_Store | ||
| .cache | ||
| .tanstack | ||
| .env | ||
| .vercel | ||
| .output | ||
| /build/ | ||
| /api/ | ||
| /server/build | ||
| /public/build# Sentry Config File | ||
| .env.sentry-build-plugin | ||
| /test-results/ | ||
| /playwright-report/ | ||
| /blob-report/ | ||
| /playwright/.cache/ | ||
| /dist/ | ||
| /dist-*/ | ||
| /port-*.txt | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| **/build | ||
| **/public | ||
| pnpm-lock.yaml | ||
| routeTree.gen.ts |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| { | ||
| "name": "tanstack-react-start-e2e-response-reconciliation", | ||
| "private": true, | ||
| "sideEffects": false, | ||
| "type": "module", | ||
| "scripts": { | ||
| "dev": "pnpm dev:vite --port 3000", | ||
| "dev:e2e": "pnpm dev:vite", | ||
| "dev:vite": "vite dev", | ||
| "dev:rsbuild": "rsbuild dev", | ||
| "build": "pnpm build:vite", | ||
| "build:vite": "vite build && tsc --noEmit", | ||
| "build:rsbuild": "rsbuild build && tsc --noEmit", | ||
| "preview": "vite preview", | ||
| "start": "node server.js", | ||
| "test:e2e:local": "pnpm build && playwright test --project=chromium" | ||
| }, | ||
| "dependencies": { | ||
| "@tanstack/react-router": "workspace:*", | ||
| "@tanstack/react-start": "workspace:*", | ||
| "react": "^19.2.3", | ||
| "react-dom": "^19.2.3" | ||
| }, | ||
| "devDependencies": { | ||
| "@playwright/test": "^1.57.0", | ||
| "@rsbuild/core": "^2.0.8", | ||
| "@rsbuild/plugin-react": "^2.0.0", | ||
| "@tanstack/router-e2e-utils": "workspace:^", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use
As per coding guidelines, " 🤖 Prompt for AI AgentsSource: Coding guidelines |
||
| "@types/node": "25.0.9", | ||
| "@types/react": "^19.2.8", | ||
| "@types/react-dom": "^19.2.3", | ||
| "@vitejs/plugin-react": "^6.0.1", | ||
| "srvx": "^0.11.9", | ||
| "typescript": "^6.0.2", | ||
| "vite": "^8.0.14" | ||
| }, | ||
| "nx": { | ||
| "targets": { | ||
| "test:e2e": { | ||
| "parallelism": false | ||
| }, | ||
| "test:e2e--vite-ssr": { | ||
| "parallelism": false | ||
| }, | ||
| "test:e2e--vite-ssr--custom-entry": { | ||
| "parallelism": false | ||
| }, | ||
| "test:e2e--rsbuild-ssr": { | ||
| "parallelism": false | ||
| }, | ||
| "test:e2e--rsbuild-ssr--custom-entry": { | ||
| "parallelism": false | ||
| } | ||
| }, | ||
| "metadata": { | ||
| "playwrightModes": [ | ||
| { | ||
| "toolchain": "vite", | ||
| "mode": "ssr" | ||
| }, | ||
| { | ||
| "toolchain": "vite", | ||
| "mode": "ssr", | ||
| "name": "custom-entry", | ||
| "env": { | ||
| "TSS_E2E_SERVER_ENTRY": "server-entry" | ||
| } | ||
| }, | ||
| { | ||
| "toolchain": "rsbuild", | ||
| "mode": "ssr" | ||
| }, | ||
| { | ||
| "toolchain": "rsbuild", | ||
| "mode": "ssr", | ||
| "name": "custom-entry", | ||
| "env": { | ||
| "TSS_E2E_SERVER_ENTRY": "server-entry" | ||
| } | ||
| } | ||
| ] | ||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| import { defineConfig, devices } from '@playwright/test' | ||
| import { getTestServerPort } from '@tanstack/router-e2e-utils' | ||
| import packageJson from './package.json' with { type: 'json' } | ||
|
|
||
| const e2ePortKey = process.env.E2E_PORT_KEY ?? packageJson.name | ||
| const toolchain = process.env.E2E_TOOLCHAIN ?? 'vite' | ||
| const distDir = process.env.E2E_DIST_DIR ?? 'dist' | ||
| const serverEntry = process.env.TSS_E2E_SERVER_ENTRY ?? '' | ||
| const serverEntryMode = serverEntry ? 'custom' : 'default' | ||
|
|
||
| export const PORT = await getTestServerPort(`${e2ePortKey}-${serverEntryMode}`) | ||
| const baseURL = `http://localhost:${PORT}` | ||
|
|
||
| export default defineConfig({ | ||
| testDir: './tests', | ||
| workers: 1, | ||
| reporter: [['line']], | ||
| use: { | ||
| baseURL, | ||
| }, | ||
| webServer: { | ||
| command: `pnpm start`, | ||
| url: baseURL, | ||
| reuseExistingServer: !process.env.CI, | ||
| stdout: 'pipe', | ||
| env: { | ||
| PORT: String(PORT), | ||
| VITE_SERVER_PORT: String(PORT), | ||
| E2E_DIST_DIR: distDir, | ||
| E2E_TOOLCHAIN: toolchain, | ||
| E2E_PORT_KEY: e2ePortKey, | ||
| TSS_E2E_SERVER_ENTRY: serverEntry, | ||
| }, | ||
| }, | ||
| projects: [ | ||
| { | ||
| name: 'chromium', | ||
| use: { ...devices['Desktop Chrome'] }, | ||
| }, | ||
| ], | ||
| }) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| import { defineConfig } from '@rsbuild/core' | ||
| import { pluginReact } from '@rsbuild/plugin-react' | ||
| import { tanstackStart } from '@tanstack/react-start/plugin/rsbuild' | ||
|
|
||
| const serverEntry = process.env.TSS_E2E_SERVER_ENTRY | ||
| const outDir = process.env.E2E_DIST_DIR ?? 'dist' | ||
|
|
||
| export default defineConfig({ | ||
| plugins: [ | ||
| pluginReact(), | ||
| tanstackStart({ | ||
| server: serverEntry ? { entry: serverEntry } : undefined, | ||
| }), | ||
| ], | ||
| output: { | ||
| distPath: { | ||
| root: outDir, | ||
| }, | ||
| }, | ||
| }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix malformed ignore entry on Line 14.
/public/build# Sentry Config Fileis parsed as one literal pattern, so/public/buildmay not be ignored as intended.Suggested patch
📝 Committable suggestion
🤖 Prompt for AI Agents