Skip to content

Commit 556de15

Browse files
authored
fix(rsc): optimize use-sync-external-store (#674)
1 parent 97b5f1b commit 556de15

File tree

13 files changed

+135
-23
lines changed

13 files changed

+135
-23
lines changed

packages/plugin-rsc/e2e/basic.test.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ test.describe('dev-non-optimized-cjs', () => {
5252
const editor = f.createEditor('vite.config.ts')
5353
editor.edit((s) =>
5454
s.replace(
55-
`'@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js',`,
55+
`include: ['@vitejs/test-dep-transitive-cjs > @vitejs/test-dep-cjs'],`,
5656
``,
5757
),
5858
)
@@ -941,9 +941,10 @@ function defineTest(f: Fixture) {
941941
test('transitive cjs dep', async ({ page }) => {
942942
await page.goto(f.url())
943943
await waitForHydration(page)
944-
await expect(page.getByTestId('transitive-cjs-client')).toHaveText(
945-
'ok:browser',
946-
)
944+
await expect(page.getByTestId('transitive-cjs-client')).toHaveText('ok')
945+
await expect(
946+
page.getByTestId('transitive-use-sync-external-store-client'),
947+
).toHaveText('ok:browser')
947948
})
948949

949950
test('use cache function', async ({ page }) => {

packages/plugin-rsc/examples/basic/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"@types/react-dom": "^19.1.7",
2323
"@vitejs/plugin-react": "latest",
2424
"@vitejs/test-dep-transitive-cjs": "file:./test-dep/transitive-cjs",
25+
"@vitejs/test-dep-transitive-use-sync-external-store": "file:./test-dep/transitive-use-sync-external-store",
2526
"@vitejs/test-dep-client-in-server": "file:./test-dep/client-in-server",
2627
"@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2",
2728
"@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client",

packages/plugin-rsc/examples/basic/src/routes/deps/transitive-cjs/client.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@
33
// @ts-ignore
44
import { TestClient } from '@vitejs/test-dep-transitive-cjs/client'
55

6+
// @ts-ignore
7+
import { TestClient as TestClient2 } from '@vitejs/test-dep-transitive-use-sync-external-store/client'
8+
69
export function TestTransitiveCjsClient() {
710
return (
8-
<div>
9-
[test-dep-transitive-cjs-client: <TestClient />]
10-
</div>
11+
<>
12+
<div>
13+
[test-dep-transitive-cjs-client: <TestClient />]
14+
</div>
15+
<div>
16+
[test-dep-transitive-use-sync-external-store-client: <TestClient2 />]
17+
</div>
18+
</>
1119
)
1220
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exports.ok = 'ok'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "@vitejs/test-dep-cjs",
3+
"private": true,
4+
"type": "commonjs",
5+
"exports": "./index.js",
6+
"peerDependencies": {
7+
"react": "*"
8+
}
9+
}

packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/client.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,16 @@
22

33
import React from 'react'
44

5-
// similar to swr
6-
// https://github.com/vercel/swr/blob/063fe55dddb95f0b6c3f1637a935c43d732ded78/src/index/use-swr.ts#L3
7-
import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js'
5+
import { ok } from '@vitejs/test-dep-cjs'
86

97
const h = React.createElement
108

11-
const noopStore = () => () => {}
12-
139
export function TestClient() {
14-
const value = useSyncExternalStore(
15-
noopStore,
16-
() => 'ok:browser',
17-
() => 'ok:ssr',
18-
)
19-
2010
return h(
2111
'span',
2212
{
2313
'data-testid': 'transitive-cjs-client',
2414
},
25-
value,
15+
ok,
2616
)
2717
}

packages/plugin-rsc/examples/basic/test-dep/transitive-cjs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"./client": "./client.js"
77
},
88
"dependencies": {
9-
"use-sync-external-store": "^1.5.0"
9+
"@vitejs/test-dep-cjs": "file:../cjs"
1010
},
1111
"peerDependencies": {
1212
"react": "*"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'use client'
2+
3+
import React from 'react'
4+
5+
// similar to
6+
// https://github.com/vercel/swr/blob/063fe55dddb95f0b6c3f1637a935c43d732ded78/src/index/use-swr.ts#L3
7+
// https://github.com/TanStack/store/blob/1d1323283e79059821d6c731eaaee60e4143dbc2/packages/react-store/src/index.ts#L1
8+
import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js'
9+
10+
const h = React.createElement
11+
12+
const noopStore = () => () => {}
13+
14+
export function TestClient() {
15+
const value = useSyncExternalStore(
16+
noopStore,
17+
() => 'ok:browser',
18+
() => 'ok:ssr',
19+
)
20+
21+
return h(
22+
'span',
23+
{
24+
'data-testid': 'transitive-use-sync-external-store-client',
25+
},
26+
value,
27+
)
28+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "@vitejs/test-dep-transitive-use-sync-external-store",
3+
"private": true,
4+
"type": "module",
5+
"exports": {
6+
"./client": "./client.js"
7+
},
8+
"dependencies": {
9+
"use-sync-external-store": "^1.5.0"
10+
},
11+
"peerDependencies": {
12+
"react": "*"
13+
}
14+
}

packages/plugin-rsc/examples/basic/vite.config.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,7 @@ export default { fetch: handler };
153153
},
154154
ssr: {
155155
optimizeDeps: {
156-
include: [
157-
'@vitejs/test-dep-transitive-cjs > use-sync-external-store/shim/index.js',
158-
],
156+
include: ['@vitejs/test-dep-transitive-cjs > @vitejs/test-dep-cjs'],
159157
},
160158
},
161159
},

0 commit comments

Comments
 (0)