Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions docs/start/framework/react/guide/observability.md
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,7 @@ import {
defaultStreamHandler,
defineHandlerCallback,
} from '@tanstack/react-start/server'
import type { ServerEntry } from '@tanstack/react-start/server-entry'

const customHandler = defineHandlerCallback(async (ctx) => {
// We do this so that transactions are grouped under the route ID instead of unique URLs
Expand All @@ -538,11 +539,11 @@ const customHandler = defineHandlerCallback(async (ctx) => {
})

export default {
fetch(request: Request) {
fetch(request) {
const handler = createStartHandler(customHandler)
return handler(request)
},
}
} satisfies ServerEntry
```

```bash
Expand Down
21 changes: 11 additions & 10 deletions docs/start/framework/react/guide/server-entry-point.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@ This is done via the `src/server.ts` file.

```tsx
// src/server.ts
import handler from '@tanstack/react-start/server-entry'
import handler, { type ServerEntry } from '@tanstack/react-start/server-entry'

export default {
fetch(request: Request) {
fetch(request) {
return handler.fetch(request)
},
}
} satisfies ServerEntry
```

The entry point must conform to the following interface:
The default export must conform to the `ServerEntry` interface:

```tsx
```ts
export default {
fetch(req: Request): Promise<Response> {
fetch(req: Request, opts?: RequestOptions): Promise<Response> {
// ...
},
}
Expand All @@ -44,6 +44,7 @@ import {
defaultStreamHandler,
defineHandlerCallback,
} from '@tanstack/react-start/server'
import type { ServerEntry } from '@tanstack/react-start/server-entry'

const customHandler = defineHandlerCallback((ctx) => {
// add custom logic here
Expand All @@ -54,7 +55,7 @@ const fetch = createStartHandler(customHandler)

export default {
fetch,
}
} satisfies ServerEntry
```

## Request context
Expand All @@ -64,7 +65,7 @@ When your server needs to pass additional, typed data into request handlers (for
To add types for your request context, augment the `Register` interface from `@tanstack/react-start` with a `server.requestContext` property. The runtime `context` you pass to `handler.fetch` will then match that type. Example:

```tsx
import handler from '@tanstack/react-start/server-entry'
import handler, { type ServerEntry } from '@tanstack/react-start/server-entry'

type MyRequestContext = {
hello: string
Expand All @@ -80,10 +81,10 @@ declare module '@tanstack/react-start' {
}

export default {
async fetch(request: Request): Promise<Response> {
async fetch(request) {
return handler.fetch(request, { context: { hello: 'world', foo: 123 } })
},
}
} satisfies ServerEntry
```

## Server Configuration
Expand Down
8 changes: 6 additions & 2 deletions packages/react-start/src/default-entry/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ import type { RequestHandler } from '@tanstack/react-start/server'

const fetch = createStartHandler(defaultStreamHandler)

export default {
const serverEntry = {
// Providing `RequestHandler` from `@tanstack/react-start/server` is required so that the output types don't import it from `@tanstack/start-server-core`
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
fetch: fetch as RequestHandler<Register>,
}
} as const

export type ServerEntry = typeof serverEntry

export default serverEntry
8 changes: 6 additions & 2 deletions packages/solid-start/src/default-entry/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ import type { RequestHandler } from '@tanstack/solid-start/server'

const fetch = createStartHandler(defaultStreamHandler)

export default {
const serverEntry = {
// Providing `RequestHandler` from `@tanstack/solid-start/server` is required so that the output types don't import it from `@tanstack/start-server-core`
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
fetch: fetch as RequestHandler<Register>,
}
} as const

export type ServerEntry = typeof serverEntry

export default serverEntry
Loading