Skip to content

Commit e44b5dc

Browse files
authored
feat(start): export type ServerEntry to allow typing of default exports (#5689)
* feat: export type ServerEntry to allow typing of default exports when creating a custom server handler * ref: only export from server-entry
1 parent 1ec3881 commit e44b5dc

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

docs/start/framework/react/guide/observability.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,7 @@ import {
519519
defaultStreamHandler,
520520
defineHandlerCallback,
521521
} from '@tanstack/react-start/server'
522+
import type { ServerEntry } from '@tanstack/react-start/server-entry'
522523

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

540541
export default {
541-
fetch(request: Request) {
542+
fetch(request) {
542543
const handler = createStartHandler(customHandler)
543544
return handler(request)
544545
},
545-
}
546+
} satisfies ServerEntry
546547
```
547548

548549
```bash

docs/start/framework/react/guide/server-entry-point.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ This is done via the `src/server.ts` file.
1212

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

1717
export default {
18-
fetch(request: Request) {
18+
fetch(request) {
1919
return handler.fetch(request)
2020
},
21-
}
21+
} satisfies ServerEntry
2222
```
2323

24-
The entry point must conform to the following interface:
24+
The default export must conform to the `ServerEntry` interface:
2525

26-
```tsx
26+
```ts
2727
export default {
28-
fetch(req: Request): Promise<Response> {
28+
fetch(req: Request, opts?: RequestOptions): Promise<Response> {
2929
// ...
3030
},
3131
}
@@ -44,6 +44,7 @@ import {
4444
defaultStreamHandler,
4545
defineHandlerCallback,
4646
} from '@tanstack/react-start/server'
47+
import type { ServerEntry } from '@tanstack/react-start/server-entry'
4748

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

5556
export default {
5657
fetch,
57-
}
58+
} satisfies ServerEntry
5859
```
5960

6061
## Request context
@@ -64,7 +65,7 @@ When your server needs to pass additional, typed data into request handlers (for
6465
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:
6566

6667
```tsx
67-
import handler from '@tanstack/react-start/server-entry'
68+
import handler, { type ServerEntry } from '@tanstack/react-start/server-entry'
6869

6970
type MyRequestContext = {
7071
hello: string
@@ -80,10 +81,10 @@ declare module '@tanstack/react-start' {
8081
}
8182

8283
export default {
83-
async fetch(request: Request): Promise<Response> {
84+
async fetch(request) {
8485
return handler.fetch(request, { context: { hello: 'world', foo: 123 } })
8586
},
86-
}
87+
} satisfies ServerEntry
8788
```
8889

8990
## Server Configuration

packages/react-start/src/default-entry/server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ import type { RequestHandler } from '@tanstack/react-start/server'
77

88
const fetch = createStartHandler(defaultStreamHandler)
99

10-
export default {
10+
const serverEntry = {
1111
// Providing `RequestHandler` from `@tanstack/react-start/server` is required so that the output types don't import it from `@tanstack/start-server-core`
1212
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
1313
fetch: fetch as RequestHandler<Register>,
14-
}
14+
} as const
15+
16+
export type ServerEntry = typeof serverEntry
17+
18+
export default serverEntry

packages/solid-start/src/default-entry/server.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ import type { RequestHandler } from '@tanstack/solid-start/server'
77

88
const fetch = createStartHandler(defaultStreamHandler)
99

10-
export default {
10+
const serverEntry = {
1111
// Providing `RequestHandler` from `@tanstack/solid-start/server` is required so that the output types don't import it from `@tanstack/start-server-core`
1212
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
1313
fetch: fetch as RequestHandler<Register>,
14-
}
14+
} as const
15+
16+
export type ServerEntry = typeof serverEntry
17+
18+
export default serverEntry

0 commit comments

Comments
 (0)