Skip to content

Commit 8902254

Browse files
committed
fix: simplify load-rsc virtual
1 parent 750090c commit 8902254

File tree

5 files changed

+39
-39
lines changed

5 files changed

+39
-39
lines changed

packages/plugin-rsc/examples/browser-mode2/src/framework/entry.browser.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ import {
88
} from '@vitejs/plugin-rsc/browser'
99
import type { RscPayload } from './entry.rsc'
1010

11-
let fetchRsc: (request: Request) => Promise<Response>
12-
13-
export function initialize(options: {
14-
fetchRsc: (request: Request) => Promise<Response>
15-
}) {
16-
fetchRsc = options.fetchRsc
11+
async function fetchRsc(request: Request): Promise<Response> {
12+
const module = await import('virtual:vite-rsc-browser-mode2/load-rsc')
13+
return module.default.fetch(request)
1714
}
1815

1916
export async function main() {

packages/plugin-rsc/examples/browser-mode2/src/framework/entry.rsc.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export type RscPayload = {
1515
formState?: ReactFormState
1616
}
1717

18-
export default async function handler(request: Request): Promise<Response> {
18+
async function handler(request: Request): Promise<Response> {
1919
const isAction = request.method === 'POST'
2020
let returnValue: unknown | undefined
2121
let formState: ReactFormState | undefined
@@ -51,6 +51,10 @@ export default async function handler(request: Request): Promise<Response> {
5151
})
5252
}
5353

54+
export default {
55+
fetch: handler,
56+
}
57+
5458
if (import.meta.hot) {
5559
import.meta.hot.accept()
5660
}
Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
import { ESModulesEvaluator, ModuleRunner } from 'vite/module-runner'
22

3-
export default async function loadRsc() {
4-
const runner = new ModuleRunner(
5-
{
6-
sourcemapInterceptor: false,
7-
transport: {
8-
invoke: async (payload) => {
9-
const response = await fetch(
10-
'/@vite/invoke-rsc?' +
11-
new URLSearchParams({
12-
data: JSON.stringify(payload),
13-
}),
14-
)
15-
return response.json()
16-
},
3+
const runner = new ModuleRunner(
4+
{
5+
sourcemapInterceptor: false,
6+
transport: {
7+
invoke: async (payload) => {
8+
const response = await fetch(
9+
'/@vite/invoke-rsc?' +
10+
new URLSearchParams({
11+
data: JSON.stringify(payload),
12+
}),
13+
)
14+
return response.json()
1715
},
18-
hmr: false,
1916
},
20-
new ESModulesEvaluator(),
21-
)
22-
return await runner.import<typeof import('./entry.rsc')>(
23-
'/src/framework/entry.rsc.tsx',
24-
)
25-
}
17+
hmr: false,
18+
},
19+
new ESModulesEvaluator(),
20+
)
21+
22+
export default new Proxy(
23+
{},
24+
{
25+
get(_target, p, _receiver) {
26+
return async (...args: any[]) => {
27+
const module = await runner.import('/src/framework/entry.rsc.tsx')
28+
return module.default[p](...args)
29+
}
30+
},
31+
},
32+
)
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,2 @@
1-
import * as client from './entry.browser'
2-
import loadRsc from 'virtual:vite-rsc-browser-mode2/load-rsc'
3-
4-
async function main() {
5-
const rsc = await loadRsc()
6-
client.initialize({ fetchRsc: rsc.default })
7-
await client.main()
8-
}
9-
1+
import { main } from './entry.browser'
102
main()
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
declare module 'virtual:vite-rsc-browser-mode2/load-rsc' {
2-
const loadRsc: () => Promise<typeof import('./entry.rsc')>
3-
export default loadRsc
2+
const default_: typeof import('./entry.rsc.tsx').default
3+
export default default_
44
}

0 commit comments

Comments
 (0)