diff --git a/.changeset/trim-start-meta-reexports.md b/.changeset/trim-start-meta-reexports.md new file mode 100644 index 0000000000..553324cc19 --- /dev/null +++ b/.changeset/trim-start-meta-reexports.md @@ -0,0 +1,7 @@ +--- +'@tanstack/react-start': patch +'@tanstack/solid-start': patch +'@tanstack/vue-start': patch +--- + +Explicitly re-export public API names from `@tanstack/start-client-core` (`createServerFn`, `createMiddleware`, `createStart`, `createCsrfMiddleware`, `createIsomorphicFn`, `createClientOnlyFn`, `createServerOnlyFn`) alongside the existing `export *`. The explicit named re-exports are registered at link time (via Vite SSR's `defineExport` at `fileStartIndex`), so the namespace has these getters before any import body runs — survives the cold-start SSR cycle through user middleware where `export *` would otherwise produce a partial facade (`createMiddleware is not a function`). Workaround for vitejs/vite#22491 / #22493. diff --git a/packages/react-start/src/index.ts b/packages/react-start/src/index.ts index 65b116ec2e..0947745215 100644 --- a/packages/react-start/src/index.ts +++ b/packages/react-start/src/index.ts @@ -1,6 +1,20 @@ export { useServerFn } from './useServerFn' export * from '@tanstack/start-client-core' -export { createServerFn } from '@tanstack/start-client-core' +// Explicit re-exports shadow `export *` above so these public-API names are +// registered on the namespace at link time (via Vite SSR's `defineExport` +// at fileStartIndex), surviving the cold-start SSR cycle through user +// middleware. See vitejs/vite#22491 / #22493. Trim list to genuine public +// API only; internals fall through `export *` and are safe because they +// aren't imported at top level in the cycle path. +export { + createClientOnlyFn, + createCsrfMiddleware, + createIsomorphicFn, + createMiddleware, + createServerFn, + createServerOnlyFn, + createStart, +} from '@tanstack/start-client-core' export { Hydrate } from '@tanstack/react-start-client' export type { HydrateOptions, diff --git a/packages/solid-start/src/index.ts b/packages/solid-start/src/index.ts index 0cdac87c81..44d8c36c88 100644 --- a/packages/solid-start/src/index.ts +++ b/packages/solid-start/src/index.ts @@ -1,5 +1,20 @@ export { useServerFn } from './useServerFn' export * from '@tanstack/start-client-core' +// Explicit re-exports shadow `export *` above so these public-API names are +// registered on the namespace at link time (via Vite SSR's `defineExport` +// at fileStartIndex), surviving the cold-start SSR cycle through user +// middleware. See vitejs/vite#22491 / #22493. Trim list to genuine public +// API only; internals fall through `export *` and are safe because they +// aren't imported at top level in the cycle path. +export { + createClientOnlyFn, + createCsrfMiddleware, + createIsomorphicFn, + createMiddleware, + createServerFn, + createServerOnlyFn, + createStart, +} from '@tanstack/start-client-core' export { Hydrate } from '@tanstack/solid-start-client' export type { HydrateOptions, diff --git a/packages/vue-start/src/index.ts b/packages/vue-start/src/index.ts index 8b51b6c783..21b3b5b003 100644 --- a/packages/vue-start/src/index.ts +++ b/packages/vue-start/src/index.ts @@ -1,2 +1,17 @@ export { useServerFn } from './useServerFn' export * from '@tanstack/start-client-core' +// Explicit re-exports shadow `export *` above so these public-API names are +// registered on the namespace at link time (via Vite SSR's `defineExport` +// at fileStartIndex), surviving the cold-start SSR cycle through user +// middleware. See vitejs/vite#22491 / #22493. Trim list to genuine public +// API only; internals fall through `export *` and are safe because they +// aren't imported at top level in the cycle path. +export { + createClientOnlyFn, + createCsrfMiddleware, + createIsomorphicFn, + createMiddleware, + createServerFn, + createServerOnlyFn, + createStart, +} from '@tanstack/start-client-core'