Skip to content

Commit 71bb49c

Browse files
hi-ogawaclaude
andauthored
fix(rsc): exclude CSS imports with special queries from automatic injection (#580)
Co-authored-by: Claude <[email protected]>
1 parent d431680 commit 71bb49c

File tree

12 files changed

+116
-1
lines changed

12 files changed

+116
-1
lines changed

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,4 +1152,31 @@ function defineTest(f: Fixture) {
11521152
'(cacheFnCount = 4, nonCacheFnCount = 6)',
11531153
)
11541154
})
1155+
1156+
test('css queries', async ({ page }) => {
1157+
await page.goto(f.url())
1158+
await waitForHydration(page)
1159+
1160+
const tests = [
1161+
['.test-css-url-client', 'rgb(255, 100, 0)'],
1162+
['.test-css-inline-client', 'rgb(255, 50, 0)'],
1163+
['.test-css-raw-client', 'rgb(255, 0, 0)'],
1164+
['.test-css-url-server', 'rgb(0, 255, 100)'],
1165+
['.test-css-inline-server', 'rgb(0, 255, 50)'],
1166+
['.test-css-raw-server', 'rgb(0, 255, 0)'],
1167+
] as const
1168+
1169+
// css with queries are not injected automatically
1170+
for (const [selector] of tests) {
1171+
await expect(page.locator(selector)).toHaveCSS('color', 'rgb(0, 0, 0)')
1172+
}
1173+
1174+
// inject css manually
1175+
await page.getByRole('button', { name: 'test-css-queries' }).click()
1176+
1177+
// verify styles
1178+
for (const [selector, color] of tests) {
1179+
await expect(page.locator(selector)).toHaveCSS('color', color)
1180+
}
1181+
})
11551182
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-inline-client {
2+
color: rgb(255, 50, 0);
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-raw-client {
2+
color: rgb(255, 0, 0);
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-url-client {
2+
color: rgb(255, 100, 0);
3+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use client'
2+
3+
import cssUrl from './client-url.css?url'
4+
import cssInline from './client-inline.css?inline'
5+
import cssRaw from './client-raw.css?raw'
6+
import React from 'react'
7+
8+
export function TestCssQueriesClient(props: {
9+
serverUrl: string
10+
serverInline: string
11+
serverRaw: string
12+
}) {
13+
const [enabled, setEnabled] = React.useState(false)
14+
15+
function urlWithHmr(href: string) {
16+
if (import.meta.hot) {
17+
href += '?t=' + Date.now()
18+
}
19+
return href
20+
}
21+
22+
return (
23+
<div>
24+
<button onClick={() => setEnabled(!enabled)}>test-css-queries</button>
25+
{enabled && (
26+
<>
27+
<link rel="stylesheet" href={urlWithHmr(cssUrl)} />
28+
<style>{cssInline}</style>
29+
<style>{cssRaw}</style>
30+
<link rel="stylesheet" href={urlWithHmr(props.serverUrl)} />
31+
<style>{props.serverInline}</style>
32+
<style>{props.serverRaw}</style>
33+
</>
34+
)}
35+
<div className="test-css-url-client">test-css-url-client</div>
36+
<div className="test-css-inline-client">test-css-inline-client</div>
37+
<div className="test-css-raw-client">test-css-raw-client</div>
38+
</div>
39+
)
40+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-inline-server {
2+
color: rgb(0, 255, 50);
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-raw-server {
2+
color: rgb(0, 255, 0);
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test-css-url-server {
2+
color: rgb(0, 255, 100);
3+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import cssUrl from './server-url.css?url'
2+
import cssInline from './server-inline.css?inline'
3+
import cssRaw from './server-raw.css?raw'
4+
import { TestCssQueriesClient } from './client'
5+
6+
export function TestCssQueries() {
7+
return (
8+
<div>
9+
<TestCssQueriesClient
10+
serverUrl={cssUrl}
11+
serverInline={cssInline}
12+
serverRaw={cssRaw}
13+
/>
14+
<div>
15+
<div className="test-css-url-server">test-css-url-server</div>
16+
<div className="test-css-inline-server">test-css-inline-server</div>
17+
<div className="test-css-raw-server">test-css-raw-server</div>
18+
</div>
19+
</div>
20+
)
21+
}

packages/plugin-rsc/examples/basic/src/routes/root.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import TestDepCssInServer from '@vitejs/test-dep-css-in-server/server'
3535
import { TestHmrSharedServer } from './hmr-shared/server'
3636
import { TestHmrSharedClient } from './hmr-shared/client'
3737
import { TestHmrSharedAtomic } from './hmr-shared/atomic/server'
38+
import { TestCssQueries } from './css-queries/server'
3839

3940
export function Root(props: { url: URL }) {
4041
return (
@@ -83,6 +84,7 @@ export function Root(props: { url: URL }) {
8384
<TestBrowserOnly />
8485
<TestUseCache />
8586
<TestReactCache url={props.url} />
87+
<TestCssQueries />
8688
</body>
8789
</html>
8890
)

0 commit comments

Comments
 (0)