From 88621b3cd85b0a6a201f659dee6798fda33c7b6d Mon Sep 17 00:00:00 2001 From: Sheraff Date: Mon, 31 Aug 2026 22:22:06 +0200 Subject: [PATCH 1/7] fix(router-core): strip internal SSR globals from declarations --- packages/router-core/src/load-client.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/router-core/src/load-client.ts b/packages/router-core/src/load-client.ts index 8a4c85c0aa6..d69a3c3dce3 100644 --- a/packages/router-core/src/load-client.ts +++ b/packages/router-core/src/load-client.ts @@ -2141,6 +2141,7 @@ export async function preloadClientRoute< // --- SSR hydration (client entry via @tanstack/router-core/ssr/client) --- +/** @internal */ declare global { interface Window { [GLOBAL_TSR]?: TsrSsrGlobal From 2bc6b552552e1357c4e7636290af1c5c3a50c73e Mon Sep 17 00:00:00 2001 From: Sheraff Date: Mon, 31 Aug 2026 22:27:38 +0200 Subject: [PATCH 2/7] fix(router-core): avoid stripped SSR type reference --- packages/router-core/src/load-client.ts | 1 - packages/router-core/src/ssr/types.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/router-core/src/load-client.ts b/packages/router-core/src/load-client.ts index d69a3c3dce3..8a4c85c0aa6 100644 --- a/packages/router-core/src/load-client.ts +++ b/packages/router-core/src/load-client.ts @@ -2141,7 +2141,6 @@ export async function preloadClientRoute< // --- SSR hydration (client entry via @tanstack/router-core/ssr/client) --- -/** @internal */ declare global { interface Window { [GLOBAL_TSR]?: TsrSsrGlobal diff --git a/packages/router-core/src/ssr/types.ts b/packages/router-core/src/ssr/types.ts index 27bf1118430..b24c7800aec 100644 --- a/packages/router-core/src/ssr/types.ts +++ b/packages/router-core/src/ssr/types.ts @@ -3,7 +3,7 @@ import type { MakeRouteMatch } from '../Matches' export interface DehydratedMatch { i: MakeRouteMatch['id'] - b?: MakeRouteMatch['__beforeLoadContext'] + b?: Record l?: MakeRouteMatch['loaderData'] e?: MakeRouteMatch['error'] u: MakeRouteMatch['updatedAt'] From 549d684a71398296c7ac4fc840ea2ee638c1c047 Mon Sep 17 00:00:00 2001 From: Sheraff Date: Mon, 31 Aug 2026 22:29:50 +0200 Subject: [PATCH 3/7] Revert "fix(router-core): avoid stripped SSR type reference" This reverts commit 2bc6b552552e1357c4e7636290af1c5c3a50c73e. --- packages/router-core/src/load-client.ts | 1 + packages/router-core/src/ssr/types.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/router-core/src/load-client.ts b/packages/router-core/src/load-client.ts index 8a4c85c0aa6..d69a3c3dce3 100644 --- a/packages/router-core/src/load-client.ts +++ b/packages/router-core/src/load-client.ts @@ -2141,6 +2141,7 @@ export async function preloadClientRoute< // --- SSR hydration (client entry via @tanstack/router-core/ssr/client) --- +/** @internal */ declare global { interface Window { [GLOBAL_TSR]?: TsrSsrGlobal diff --git a/packages/router-core/src/ssr/types.ts b/packages/router-core/src/ssr/types.ts index b24c7800aec..27bf1118430 100644 --- a/packages/router-core/src/ssr/types.ts +++ b/packages/router-core/src/ssr/types.ts @@ -3,7 +3,7 @@ import type { MakeRouteMatch } from '../Matches' export interface DehydratedMatch { i: MakeRouteMatch['id'] - b?: Record + b?: MakeRouteMatch['__beforeLoadContext'] l?: MakeRouteMatch['loaderData'] e?: MakeRouteMatch['error'] u: MakeRouteMatch['updatedAt'] From 94e3bf04c1a767010a054acb798ac327a714d0aa Mon Sep 17 00:00:00 2001 From: Sheraff Date: Mon, 31 Aug 2026 22:56:56 +0200 Subject: [PATCH 4/7] fix(router-core): strip internal dehydrated context type --- packages/router-core/src/load-client.ts | 1 - packages/router-core/src/ssr/types.ts | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/router-core/src/load-client.ts b/packages/router-core/src/load-client.ts index d69a3c3dce3..8a4c85c0aa6 100644 --- a/packages/router-core/src/load-client.ts +++ b/packages/router-core/src/load-client.ts @@ -2141,7 +2141,6 @@ export async function preloadClientRoute< // --- SSR hydration (client entry via @tanstack/router-core/ssr/client) --- -/** @internal */ declare global { interface Window { [GLOBAL_TSR]?: TsrSsrGlobal diff --git a/packages/router-core/src/ssr/types.ts b/packages/router-core/src/ssr/types.ts index 27bf1118430..48b8c8d0e98 100644 --- a/packages/router-core/src/ssr/types.ts +++ b/packages/router-core/src/ssr/types.ts @@ -3,6 +3,7 @@ import type { MakeRouteMatch } from '../Matches' export interface DehydratedMatch { i: MakeRouteMatch['id'] + /** @internal */ b?: MakeRouteMatch['__beforeLoadContext'] l?: MakeRouteMatch['loaderData'] e?: MakeRouteMatch['error'] From 123fda5ef65f6889bdac902c6253ceb84037dad8 Mon Sep 17 00:00:00 2001 From: Sheraff Date: Sun, 6 Sep 2026 00:27:21 +0200 Subject: [PATCH 5/7] test(router-core): cover published declarations for internal context fix --- .changeset/cool-months-itch.md | 5 +++++ packages/router-core/package.json | 2 +- packages/router-core/tests/declarations/consumer.cts | 4 ++++ packages/router-core/tests/declarations/consumer.mts | 4 ++++ .../router-core/tests/declarations/tsconfig.cjs.json | 4 ++++ .../router-core/tests/declarations/tsconfig.json | 12 ++++++++++++ 6 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 .changeset/cool-months-itch.md create mode 100644 packages/router-core/tests/declarations/consumer.cts create mode 100644 packages/router-core/tests/declarations/consumer.mts create mode 100644 packages/router-core/tests/declarations/tsconfig.cjs.json create mode 100644 packages/router-core/tests/declarations/tsconfig.json diff --git a/.changeset/cool-months-itch.md b/.changeset/cool-months-itch.md new file mode 100644 index 00000000000..b32e258dcb7 --- /dev/null +++ b/.changeset/cool-months-itch.md @@ -0,0 +1,5 @@ +--- +'@tanstack/router-core': patch +--- + +Fix consumer typechecking with `skipLibCheck: false` by omitting the internal beforeLoad context field from published dehydrated match declarations. diff --git a/packages/router-core/package.json b/packages/router-core/package.json index e5d5976f475..1f7f5ad181b 100644 --- a/packages/router-core/package.json +++ b/packages/router-core/package.json @@ -28,7 +28,7 @@ "test:types:ts59": "node ../../node_modules/typescript59/lib/tsc.js", "test:types:ts60": "tsc6", "test:types:ts70": "tsc", - "test:build": "publint --strict && attw --ignore-rules no-resolution --pack .", + "test:build": "publint --strict && attw --ignore-rules no-resolution --pack . && tsc6 -p tests/declarations/tsconfig.json && tsc6 -p tests/declarations/tsconfig.cjs.json", "test:unit": "vitest", "test:unit:dev": "pnpm run test:unit --watch", "build": "vite build" diff --git a/packages/router-core/tests/declarations/consumer.cts b/packages/router-core/tests/declarations/consumer.cts new file mode 100644 index 00000000000..bb0c8f06ef1 --- /dev/null +++ b/packages/router-core/tests/declarations/consumer.cts @@ -0,0 +1,4 @@ +// Exercise the CommonJS declarations as well as the ESM declarations. +export { BaseRootRoute, RouterCore } from '@tanstack/router-core' +export { hydrate } from '@tanstack/router-core/ssr/client' +export { createRequestHandler } from '@tanstack/router-core/ssr/server' diff --git a/packages/router-core/tests/declarations/consumer.mts b/packages/router-core/tests/declarations/consumer.mts new file mode 100644 index 00000000000..97497e9b149 --- /dev/null +++ b/packages/router-core/tests/declarations/consumer.mts @@ -0,0 +1,4 @@ +// Resolve package exports to the published declarations, without source aliases. +export { BaseRootRoute, RouterCore } from '@tanstack/router-core' +export { hydrate } from '@tanstack/router-core/ssr/client' +export { createRequestHandler } from '@tanstack/router-core/ssr/server' diff --git a/packages/router-core/tests/declarations/tsconfig.cjs.json b/packages/router-core/tests/declarations/tsconfig.cjs.json new file mode 100644 index 00000000000..af78fb81d07 --- /dev/null +++ b/packages/router-core/tests/declarations/tsconfig.cjs.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["./*.cts"] +} diff --git a/packages/router-core/tests/declarations/tsconfig.json b/packages/router-core/tests/declarations/tsconfig.json new file mode 100644 index 00000000000..c2e85f0e43d --- /dev/null +++ b/packages/router-core/tests/declarations/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "skipLibCheck": false, + "noEmit": true, + "types": ["node"] + }, + "include": ["./*.mts"] +} From 3111dd9ce9b25e452d769b108a75b01c8db45901 Mon Sep 17 00:00:00 2001 From: Sheraff Date: Sun, 6 Sep 2026 01:13:49 +0200 Subject: [PATCH 6/7] test(router-core): isolate published declaration fixtures --- packages/router-core/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/router-core/tsconfig.json b/packages/router-core/tsconfig.json index faf64b93825..aad30af114a 100644 --- a/packages/router-core/tsconfig.json +++ b/packages/router-core/tsconfig.json @@ -6,5 +6,6 @@ "@tanstack/router-core/isServer": ["./src/isServer/development.ts"] } }, - "include": ["src", "vite.config.ts", "tests", "vite-minify-plugin.ts"] + "include": ["src", "vite.config.ts", "tests", "vite-minify-plugin.ts"], + "exclude": ["tests/declarations"] } From 86dd9b457c2f6828fa8d79b4e3101f276f083a0c Mon Sep 17 00:00:00 2001 From: Sheraff Date: Sun, 6 Sep 2026 09:00:00 +0200 Subject: [PATCH 7/7] test(router-core): remove declaration consumer fixtures --- packages/router-core/package.json | 2 +- packages/router-core/tests/declarations/consumer.cts | 4 ---- packages/router-core/tests/declarations/consumer.mts | 4 ---- .../router-core/tests/declarations/tsconfig.cjs.json | 4 ---- .../router-core/tests/declarations/tsconfig.json | 12 ------------ packages/router-core/tsconfig.json | 3 +-- 6 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 packages/router-core/tests/declarations/consumer.cts delete mode 100644 packages/router-core/tests/declarations/consumer.mts delete mode 100644 packages/router-core/tests/declarations/tsconfig.cjs.json delete mode 100644 packages/router-core/tests/declarations/tsconfig.json diff --git a/packages/router-core/package.json b/packages/router-core/package.json index 1f7f5ad181b..e5d5976f475 100644 --- a/packages/router-core/package.json +++ b/packages/router-core/package.json @@ -28,7 +28,7 @@ "test:types:ts59": "node ../../node_modules/typescript59/lib/tsc.js", "test:types:ts60": "tsc6", "test:types:ts70": "tsc", - "test:build": "publint --strict && attw --ignore-rules no-resolution --pack . && tsc6 -p tests/declarations/tsconfig.json && tsc6 -p tests/declarations/tsconfig.cjs.json", + "test:build": "publint --strict && attw --ignore-rules no-resolution --pack .", "test:unit": "vitest", "test:unit:dev": "pnpm run test:unit --watch", "build": "vite build" diff --git a/packages/router-core/tests/declarations/consumer.cts b/packages/router-core/tests/declarations/consumer.cts deleted file mode 100644 index bb0c8f06ef1..00000000000 --- a/packages/router-core/tests/declarations/consumer.cts +++ /dev/null @@ -1,4 +0,0 @@ -// Exercise the CommonJS declarations as well as the ESM declarations. -export { BaseRootRoute, RouterCore } from '@tanstack/router-core' -export { hydrate } from '@tanstack/router-core/ssr/client' -export { createRequestHandler } from '@tanstack/router-core/ssr/server' diff --git a/packages/router-core/tests/declarations/consumer.mts b/packages/router-core/tests/declarations/consumer.mts deleted file mode 100644 index 97497e9b149..00000000000 --- a/packages/router-core/tests/declarations/consumer.mts +++ /dev/null @@ -1,4 +0,0 @@ -// Resolve package exports to the published declarations, without source aliases. -export { BaseRootRoute, RouterCore } from '@tanstack/router-core' -export { hydrate } from '@tanstack/router-core/ssr/client' -export { createRequestHandler } from '@tanstack/router-core/ssr/server' diff --git a/packages/router-core/tests/declarations/tsconfig.cjs.json b/packages/router-core/tests/declarations/tsconfig.cjs.json deleted file mode 100644 index af78fb81d07..00000000000 --- a/packages/router-core/tests/declarations/tsconfig.cjs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["./*.cts"] -} diff --git a/packages/router-core/tests/declarations/tsconfig.json b/packages/router-core/tests/declarations/tsconfig.json deleted file mode 100644 index c2e85f0e43d..00000000000 --- a/packages/router-core/tests/declarations/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "NodeNext", - "moduleResolution": "NodeNext", - "strict": true, - "skipLibCheck": false, - "noEmit": true, - "types": ["node"] - }, - "include": ["./*.mts"] -} diff --git a/packages/router-core/tsconfig.json b/packages/router-core/tsconfig.json index aad30af114a..faf64b93825 100644 --- a/packages/router-core/tsconfig.json +++ b/packages/router-core/tsconfig.json @@ -6,6 +6,5 @@ "@tanstack/router-core/isServer": ["./src/isServer/development.ts"] } }, - "include": ["src", "vite.config.ts", "tests", "vite-minify-plugin.ts"], - "exclude": ["tests/declarations"] + "include": ["src", "vite.config.ts", "tests", "vite-minify-plugin.ts"] }