Skip to content

Commit e030e68

Browse files
authoredJan 28, 2025··
fix(start-plugin): invoke server implementation of createIsomorphicFn during SSR (#3268)
1 parent 2c904b8 commit e030e68

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed
 

‎e2e/start/basic/app/routes/isomorphic-fns.tsx

+14-4
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,39 @@ import { useState } from 'react'
55
const getEnv = createIsomorphicFn()
66
.server(() => 'server')
77
.client(() => 'client')
8+
89
const getServerEnv = createServerFn().handler(() => getEnv())
910

1011
const getEcho = createIsomorphicFn()
1112
.server((input: string) => 'server received ' + input)
1213
.client((input) => 'client received ' + input)
14+
1315
const getServerEcho = createServerFn()
1416
.validator((input: string) => input)
1517
.handler(({ data }) => getEcho(data))
1618

1719
export const Route = createFileRoute('/isomorphic-fns')({
1820
component: RouteComponent,
21+
loader() {
22+
return {
23+
envOnLoad: getEnv(),
24+
}
25+
},
1926
})
2027

2128
function RouteComponent() {
29+
const { envOnLoad } = Route.useLoaderData()
2230
const [results, setResults] = useState<Partial<Record<string, string>>>()
2331
async function handleClick() {
24-
const env = getEnv()
32+
const envOnClick = getEnv()
2533
const echo = getEcho('hello')
2634
const [serverEnv, serverEcho] = await Promise.all([
2735
getServerEnv(),
2836
getServerEcho({ data: 'hello' }),
2937
])
30-
setResults({ env, echo, serverEnv, serverEcho })
38+
setResults({ envOnClick, echo, serverEnv, serverEcho })
3139
}
32-
const { env, echo, serverEnv, serverEcho } = results || {}
40+
const { envOnClick, echo, serverEnv, serverEcho } = results || {}
3341
return (
3442
<div>
3543
<button onClick={handleClick} data-testid="test-isomorphic-results-btn">
@@ -43,7 +51,9 @@ function RouteComponent() {
4351
When we called the function on the server it returned:
4452
<pre data-testid="server-result">{JSON.stringify(serverEnv)}</pre>
4553
When we called the function on the client it returned:
46-
<pre data-testid="client-result">{JSON.stringify(env)}</pre>
54+
<pre data-testid="client-result">{JSON.stringify(envOnClick)}</pre>
55+
When we called the function during SSR it returned:
56+
<pre data-testid="ssr-result">{JSON.stringify(envOnLoad)}</pre>
4757
<br />
4858
<h1>
4959
<code>echo</code>

‎e2e/start/basic/tests/server-functions.spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ test('isomorphic functions can have different implementations on client and serv
9595

9696
await expect(page.getByTestId('server-result')).toContainText('server')
9797
await expect(page.getByTestId('client-result')).toContainText('client')
98+
await expect(page.getByTestId('ssr-result')).toContainText('server')
9899

99100
await expect(page.getByTestId('server-echo-result')).toContainText(
100101
'server received hello',

‎packages/start-plugin/src/compilers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ function handleCreateIsomorphicFnCallExpression(
529529
)
530530
}
531531

532-
const resolvedEnv = opts.env === 'ssr' ? 'client' : opts.env
532+
const resolvedEnv = opts.env === 'ssr' ? 'server' : opts.env
533533

534534
const envCallExpression = callExpressionPaths[resolvedEnv]
535535

0 commit comments

Comments
 (0)
Please sign in to comment.