From e2e0994ec1fb7f911771ea2bd917802fd1d32250 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 10:41:52 +0900 Subject: [PATCH 1/6] fix(rsc): improve auto css heuristics --- packages/plugin-rsc/examples/e2e/package.json | 5 +- pnpm-lock.yaml | 49 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/packages/plugin-rsc/examples/e2e/package.json b/packages/plugin-rsc/examples/e2e/package.json index 314068f2..c64d0947 100644 --- a/packages/plugin-rsc/examples/e2e/package.json +++ b/packages/plugin-rsc/examples/e2e/package.json @@ -3,8 +3,9 @@ "private": true, "type": "module", "devDependencies": { - "@vitejs/plugin-rsc": "latest", "@vitejs/plugin-react": "latest", - "babel-plugin-react-compiler": "19.1.0-rc.2" + "@vitejs/plugin-rsc": "latest", + "babel-plugin-react-compiler": "19.1.0-rc.2", + "react-tweet": "^3.2.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35d11c01..eb76aa41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,7 +149,7 @@ importers: version: 1.0.0-beta.29 '@swc/core': specifier: ^1.12.11 - version: 1.12.11 + version: 1.12.11(@swc/helpers@0.5.17) devDependencies: '@playwright/test': specifier: ^1.54.1 @@ -572,6 +572,9 @@ importers: babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 + react-tweet: + specifier: ^3.2.2 + version: 3.2.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) packages/plugin-rsc/examples/no-ssr: dependencies: @@ -2388,6 +2391,9 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/plugin-emotion@10.0.3': resolution: {integrity: sha512-YJVWKwvcggWUBz952/TKHLlF9aMhgxjzliuLB3xuXbM/r/xAV/whVUiH8zvrTJZmzj15xApRWX4EkXQmGkRt3g==} @@ -3007,6 +3013,10 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -4657,6 +4667,12 @@ packages: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-tweet@3.2.2: + resolution: {integrity: sha512-hIkxAVPpN2RqWoDEbo3TTnN/pDcp9/Jb6pTgiA4EbXa9S+m2vHIvvZKHR+eS0PDIsYqe+zTmANRa5k6+/iwGog==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -4998,6 +5014,11 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + swr@2.3.4: + resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} @@ -6605,7 +6626,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.12.11': optional: true - '@swc/core@1.12.11': + '@swc/core@1.12.11(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 @@ -6620,9 +6641,14 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.12.11 '@swc/core-win32-ia32-msvc': 1.12.11 '@swc/core-win32-x64-msvc': 1.12.11 + '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@swc/plugin-emotion@10.0.3': dependencies: '@swc/counter': 0.1.3 @@ -7243,6 +7269,8 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 + clsx@2.1.1: {} + collapse-white-space@2.1.0: {} color-convert@2.0.1: @@ -9112,6 +9140,14 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) + react-tweet@3.2.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + swr: 2.3.4(react@19.1.0) + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -9484,6 +9520,12 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 + swr@2.3.4(react@19.1.0): + dependencies: + dequal: 2.0.3 + react: 19.1.0 + use-sync-external-store: 1.5.0(react@19.1.0) + tailwindcss@4.1.11: {} tapable@2.2.1: {} @@ -9561,8 +9603,7 @@ snapshots: tslib@2.6.2: {} - tslib@2.8.1: - optional: true + tslib@2.8.1: {} tsx@4.20.3: dependencies: From 658fa9a3c6f2366cdbb551ec3a0e39a0c5e6eec1 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 11:00:49 +0900 Subject: [PATCH 2/6] fix: tweak heuristics --- packages/plugin-rsc/src/plugin.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index c89213f9..7e534e89 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -1659,7 +1659,12 @@ export function vitePluginRscCss( const options = rscCssOptions?.rscCssTransform if (options === false) return false if (options?.filter && !options.filter(id)) return false - if (id.includes('/node_modules/') || !/\.[tj]sx$/.test(id)) return false + // https://github.com/vitejs/vite/blob/7979f9da555aa16bd221b32ea78ce8cb5292fac4/packages/vite/src/node/constants.ts#L95 + if ( + !/\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)\b/.test(code) || + !/\.[tj]sx?$/.test(id) + ) + return false // skip transform if no css imports const result = esModuleLexer.parse(code) From 8e5b1084ce96bbb1bcd8d58ac4362cb9672eefcd Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 11:27:57 +0900 Subject: [PATCH 3/6] fix: fix filter --- packages/plugin-rsc/src/plugin.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/plugin-rsc/src/plugin.ts b/packages/plugin-rsc/src/plugin.ts index 7e534e89..df5b70f9 100644 --- a/packages/plugin-rsc/src/plugin.ts +++ b/packages/plugin-rsc/src/plugin.ts @@ -1646,7 +1646,7 @@ export function vitePluginRscCss( id: string code: string }): false | TransformWrapExportFilter { - const { query } = parseIdQuery(id) + const { filename, query } = parseIdQuery(id) if ('vite-rsc-css-export' in query) { const value = query['vite-rsc-css-export'] if (value) { @@ -1658,11 +1658,11 @@ export function vitePluginRscCss( const options = rscCssOptions?.rscCssTransform if (options === false) return false - if (options?.filter && !options.filter(id)) return false + if (options?.filter && !options.filter(filename)) return false // https://github.com/vitejs/vite/blob/7979f9da555aa16bd221b32ea78ce8cb5292fac4/packages/vite/src/node/constants.ts#L95 if ( !/\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)\b/.test(code) || - !/\.[tj]sx?$/.test(id) + !/\.[tj]sx?$/.test(filename) ) return false From da5347fe89708c135ce1ebc75a48cc8782b76c3c Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 11:40:14 +0900 Subject: [PATCH 4/6] chore: cleanup --- packages/plugin-rsc/examples/e2e/package.json | 5 +- pnpm-lock.yaml | 49 ++----------------- 2 files changed, 6 insertions(+), 48 deletions(-) diff --git a/packages/plugin-rsc/examples/e2e/package.json b/packages/plugin-rsc/examples/e2e/package.json index c64d0947..314068f2 100644 --- a/packages/plugin-rsc/examples/e2e/package.json +++ b/packages/plugin-rsc/examples/e2e/package.json @@ -3,9 +3,8 @@ "private": true, "type": "module", "devDependencies": { - "@vitejs/plugin-react": "latest", "@vitejs/plugin-rsc": "latest", - "babel-plugin-react-compiler": "19.1.0-rc.2", - "react-tweet": "^3.2.2" + "@vitejs/plugin-react": "latest", + "babel-plugin-react-compiler": "19.1.0-rc.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb76aa41..35d11c01 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,7 +149,7 @@ importers: version: 1.0.0-beta.29 '@swc/core': specifier: ^1.12.11 - version: 1.12.11(@swc/helpers@0.5.17) + version: 1.12.11 devDependencies: '@playwright/test': specifier: ^1.54.1 @@ -572,9 +572,6 @@ importers: babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 - react-tweet: - specifier: ^3.2.2 - version: 3.2.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) packages/plugin-rsc/examples/no-ssr: dependencies: @@ -2391,9 +2388,6 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/plugin-emotion@10.0.3': resolution: {integrity: sha512-YJVWKwvcggWUBz952/TKHLlF9aMhgxjzliuLB3xuXbM/r/xAV/whVUiH8zvrTJZmzj15xApRWX4EkXQmGkRt3g==} @@ -3013,10 +3007,6 @@ packages: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -4667,12 +4657,6 @@ packages: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-tweet@3.2.2: - resolution: {integrity: sha512-hIkxAVPpN2RqWoDEbo3TTnN/pDcp9/Jb6pTgiA4EbXa9S+m2vHIvvZKHR+eS0PDIsYqe+zTmANRa5k6+/iwGog==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -5014,11 +4998,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - swr@2.3.4: - resolution: {integrity: sha512-bYd2lrhc+VarcpkgWclcUi92wYCpOgMws9Sd1hG1ntAu0NEy+14CbotuFjshBU2kt9rYj9TSmDcybpxpeTU1fg==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} @@ -6626,7 +6605,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.12.11': optional: true - '@swc/core@1.12.11(@swc/helpers@0.5.17)': + '@swc/core@1.12.11': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 @@ -6641,14 +6620,9 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.12.11 '@swc/core-win32-ia32-msvc': 1.12.11 '@swc/core-win32-x64-msvc': 1.12.11 - '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - '@swc/plugin-emotion@10.0.3': dependencies: '@swc/counter': 0.1.3 @@ -7269,8 +7243,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 7.0.0 - clsx@2.1.1: {} - collapse-white-space@2.1.0: {} color-convert@2.0.1: @@ -9140,14 +9112,6 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-tweet@3.2.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): - dependencies: - '@swc/helpers': 0.5.17 - clsx: 2.1.1 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - swr: 2.3.4(react@19.1.0) - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -9520,12 +9484,6 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - swr@2.3.4(react@19.1.0): - dependencies: - dequal: 2.0.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) - tailwindcss@4.1.11: {} tapable@2.2.1: {} @@ -9603,7 +9561,8 @@ snapshots: tslib@2.6.2: {} - tslib@2.8.1: {} + tslib@2.8.1: + optional: true tsx@4.20.3: dependencies: From 93facc3fedad838be460c51058cb4f3582da343f Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 12:10:45 +0900 Subject: [PATCH 5/6] test: e2e --- packages/plugin-rsc/e2e/basic.test.ts | 8 ++++++++ packages/plugin-rsc/examples/basic/package.json | 1 + .../plugin-rsc/examples/basic/src/routes/root.tsx | 2 ++ .../basic/test-dep/css-in-server/package.json | 11 +++++++++++ .../examples/basic/test-dep/css-in-server/server.css | 3 +++ .../basic/test-dep/css-in-server/server.d.ts | 1 + .../examples/basic/test-dep/css-in-server/server.js | 12 ++++++++++++ pnpm-lock.yaml | 12 ++++++++++++ 8 files changed, 50 insertions(+) create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts create mode 100644 packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js diff --git a/packages/plugin-rsc/e2e/basic.test.ts b/packages/plugin-rsc/e2e/basic.test.ts index 6e6aef11..6fff8407 100644 --- a/packages/plugin-rsc/e2e/basic.test.ts +++ b/packages/plugin-rsc/e2e/basic.test.ts @@ -322,11 +322,19 @@ function defineTest(f: Fixture) { await page.goto(f.url()) await waitForHydration(page) await testCss(page) + await expect(page.locator('.test-dep-css-in-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) testNoJs('css @nojs', async ({ page }) => { await page.goto(f.url()) await testCss(page) + await expect(page.locator('.test-dep-css-in-server')).toHaveCSS( + 'color', + 'rgb(255, 165, 0)', + ) }) async function testCss(page: Page, color = 'rgb(255, 165, 0)') { diff --git a/packages/plugin-rsc/examples/basic/package.json b/packages/plugin-rsc/examples/basic/package.json index 6fb6344b..419c9834 100644 --- a/packages/plugin-rsc/examples/basic/package.json +++ b/packages/plugin-rsc/examples/basic/package.json @@ -26,6 +26,7 @@ "@vitejs/test-dep-client-in-server2": "file:./test-dep/client-in-server2", "@vitejs/test-dep-server-in-client": "file:./test-dep/server-in-client", "@vitejs/test-dep-server-in-server": "file:./test-dep/server-in-server", + "@vitejs/test-dep-css-in-server": "file:./test-dep/css-in-server", "rsc-html-stream": "^0.0.7", "tailwindcss": "^4.1.11", "vite": "^7.0.5", diff --git a/packages/plugin-rsc/examples/basic/src/routes/root.tsx b/packages/plugin-rsc/examples/basic/src/routes/root.tsx index f679c362..1bda17ee 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/root.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/root.tsx @@ -30,6 +30,7 @@ import { TestUseCache } from './use-cache/server' import { TestHydrationMismatch } from './hydration-mismatch/server' import { TestBrowserOnly } from './browser-only/client' import { TestTransitiveCjsClient } from './deps/transitive-cjs/client' +import TestDepCssInServer from '@vitejs/test-dep-css-in-server/server' export function Root(props: { url: URL }) { return ( @@ -51,6 +52,7 @@ export function Root(props: { url: URL }) { + diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json new file mode 100644 index 00000000..946252b6 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/package.json @@ -0,0 +1,11 @@ +{ + "name": "@vitejs/test-dep-css-in-server", + "private": true, + "type": "module", + "exports": { + "./server": "./server.js" + }, + "peerDependencies": { + "react": "*" + } +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css new file mode 100644 index 00000000..9f6f4f39 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.css @@ -0,0 +1,3 @@ +.test-dep-css-in-server { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts new file mode 100644 index 00000000..8177ed95 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.d.ts @@ -0,0 +1 @@ +export default function TestDepCssInServer(): import('react').ReactNode diff --git a/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js new file mode 100644 index 00000000..4fefceb5 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/test-dep/css-in-server/server.js @@ -0,0 +1,12 @@ +import React from 'react' +import './server.css' + +const h = React.createElement + +export default function TestDepCssInServer() { + return h( + 'div', + { className: 'test-dep-css-in-server' }, + `test-dep-css-in-server`, + ) +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a3baa0c6..5509c005 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -533,6 +533,9 @@ importers: '@vitejs/test-dep-client-in-server2': specifier: file:./test-dep/client-in-server2 version: file:packages/plugin-rsc/examples/basic/test-dep/client-in-server2(react@19.1.0) + '@vitejs/test-dep-css-in-server': + specifier: file:./test-dep/css-in-server + version: file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0) '@vitejs/test-dep-server-in-client': specifier: file:./test-dep/server-in-client version: file:packages/plugin-rsc/examples/basic/test-dep/server-in-client(react@19.1.0) @@ -2573,6 +2576,11 @@ packages: peerDependencies: react: '*' + '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server': + resolution: {directory: packages/plugin-rsc/examples/basic/test-dep/css-in-server, type: directory} + peerDependencies: + react: '*' + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js': resolution: {directory: packages/plugin-react-swc/playground/ts-lib/test-dep/non-js, type: directory} peerDependencies: @@ -6317,6 +6325,10 @@ snapshots: dependencies: react: 19.1.0 + '@vitejs/test-dep-css-in-server@file:packages/plugin-rsc/examples/basic/test-dep/css-in-server(react@19.1.0)': + dependencies: + react: 19.1.0 + '@vitejs/test-dep-non-js@file:packages/plugin-react-swc/playground/ts-lib/test-dep/non-js(react@19.1.0)': dependencies: react: 19.1.0 From c3bcc2d18d1d4abcb92149263fa9ac1e4d7e70b3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Mon, 28 Jul 2025 12:35:37 +0900 Subject: [PATCH 6/6] fix(rsc): show warning when auto css heuristics failed --- .../src/routes/style-server/not-detected/server.css | 3 +++ .../src/routes/style-server/not-detected/server.tsx | 9 +++++++++ .../examples/basic/src/routes/style-server/server.tsx | 5 ++++- 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.css create mode 100644 packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.tsx diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.css b/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.css new file mode 100644 index 00000000..17d82f3f --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.css @@ -0,0 +1,3 @@ +.test-style-server-not-detected { + color: rgb(255, 165, 0); +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.tsx new file mode 100644 index 00000000..dc5a2b67 --- /dev/null +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/not-detected/server.tsx @@ -0,0 +1,9 @@ +import './server.css' + +export function TestStyleServerNotDetected() { + return ( +
+ test-style-server-not-detected +
+ ) +} diff --git a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx index 6684e6b5..09501a4d 100644 --- a/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx +++ b/packages/plugin-rsc/examples/basic/src/routes/style-server/server.tsx @@ -1,13 +1,16 @@ import './server.css' import styles from './server.module.css' +// import { TestStyleServerNotDetected } from "./not-detected/server"; -export function TestStyleServer() { +export async function TestStyleServer() { + const { TestStyleServerNotDetected } = await import('./not-detected/server') return ( <>
test-style-server
test-css-module-server
+ ) }