Skip to content

Commit bc5ca14

Browse files
hi-ogawaOpenCode
andauthored
refactor(rsc): normalize return value of transformServerActionServer (#1313)
Co-authored-by: Hiroshi Ogawa <4232207+hi-ogawa@users.noreply.github.com> Co-authored-by: OpenCode <noreply@opencode.ai>
1 parent 713fed1 commit bc5ca14

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

packages/plugin-rsc/src/plugin.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,8 +2081,7 @@ function vitePluginUseServer(
20812081
manager.serverReferenceMetaMap[id] = {
20822082
importId: id,
20832083
referenceKey: getNormalizedId(),
2084-
exportNames:
2085-
'names' in result ? result.names : result.exportNames,
2084+
exportNames: result.referenceNames,
20862085
}
20872086
const importSource = resolvePackage(`${PKG_NAME}/react/rsc/server`)
20882087
output.prepend(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { parseAstAsync } from 'vite'
2+
import { expect, test } from 'vitest'
3+
import { transformServerActionServer } from './server-action'
4+
5+
async function transform(input: string) {
6+
const ast = await parseAstAsync(input)
7+
return transformServerActionServer(input, ast, {
8+
runtime: (value) => value,
9+
})
10+
}
11+
12+
test('normalizes top-level server reference names', async () => {
13+
const result = await transform(
14+
`'use server'; export async function action() {}`,
15+
)
16+
17+
expect(result).toMatchObject({
18+
exportNames: ['action'],
19+
referenceNames: ['action'],
20+
})
21+
})
22+
23+
test('normalizes inline server reference names', async () => {
24+
const result = await transform(
25+
`export function App() { return async function action() { 'use server' } }`,
26+
)
27+
28+
expect(result).toMatchObject({
29+
names: ['$$hoist_0_anonymous_server_function'],
30+
referenceNames: ['$$hoist_0_anonymous_server_function'],
31+
})
32+
})

packages/plugin-rsc/src/transforms/server-action.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,21 @@ export function transformServerActionServer(
2020
| {
2121
exportNames: string[]
2222
output: MagicString
23+
referenceNames: string[]
2324
}
2425
| {
2526
output: MagicString
2627
names: string[]
28+
referenceNames: string[]
2729
} {
2830
// TODO: unify (generalize transformHoistInlineDirective to support top-level directive cases)
2931
if (hasDirective(ast.body, 'use server')) {
30-
return transformWrapExport(input, ast, options)
32+
const result = transformWrapExport(input, ast, options)
33+
return { ...result, referenceNames: result.exportNames }
3134
}
32-
return transformHoistInlineDirective(input, ast, {
35+
const result = transformHoistInlineDirective(input, ast, {
3336
...options,
3437
directive: 'use server',
3538
})
39+
return { ...result, referenceNames: result.names }
3640
}

0 commit comments

Comments
 (0)