From 29af439d707af4d7e5e475ce64468522dacedf69 Mon Sep 17 00:00:00 2001 From: 9aoy <9aoyuao@gmail.com> Date: Tue, 17 Mar 2026 15:15:52 +0800 Subject: [PATCH 1/6] feat(rstest): add rspack-adapter example --- pnpm-lock.yaml | 258 +++++++++++++++++--- rstest/rspack-adapter/.gitignore | 16 ++ rstest/rspack-adapter/README.md | 36 +++ rstest/rspack-adapter/index.html | 12 + rstest/rspack-adapter/package.json | 33 +++ rstest/rspack-adapter/rspack.config.ts | 56 +++++ rstest/rspack-adapter/rstest.config.mts | 8 + rstest/rspack-adapter/src/App.css | 41 ++++ rstest/rspack-adapter/src/App.tsx | 29 +++ rstest/rspack-adapter/src/assets/react.svg | 1 + rstest/rspack-adapter/src/index.css | 70 ++++++ rstest/rspack-adapter/src/main.tsx | 10 + rstest/rspack-adapter/tests/index.test.tsx | 9 + rstest/rspack-adapter/tests/rstest.setup.ts | 5 + rstest/rspack-adapter/tests/tsconfig.json | 7 + rstest/rspack-adapter/tsconfig.json | 22 ++ 16 files changed, 579 insertions(+), 34 deletions(-) create mode 100644 rstest/rspack-adapter/.gitignore create mode 100644 rstest/rspack-adapter/README.md create mode 100644 rstest/rspack-adapter/index.html create mode 100644 rstest/rspack-adapter/package.json create mode 100644 rstest/rspack-adapter/rspack.config.ts create mode 100644 rstest/rspack-adapter/rstest.config.mts create mode 100644 rstest/rspack-adapter/src/App.css create mode 100644 rstest/rspack-adapter/src/App.tsx create mode 100644 rstest/rspack-adapter/src/assets/react.svg create mode 100644 rstest/rspack-adapter/src/index.css create mode 100644 rstest/rspack-adapter/src/main.tsx create mode 100644 rstest/rspack-adapter/tests/index.test.tsx create mode 100644 rstest/rspack-adapter/tests/rstest.setup.ts create mode 100644 rstest/rspack-adapter/tests/tsconfig.json create mode 100644 rstest/rspack-adapter/tsconfig.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 049a7519a..79eefd520 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -425,7 +425,7 @@ importers: version: 1.4.5(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(webpack-hot-middleware@2.26.1) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -1190,7 +1190,7 @@ importers: version: 0.19.6(typescript@5.9.3) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@types/node': specifier: ^24.10.9 version: 24.10.9 @@ -1296,7 +1296,7 @@ importers: version: 0.19.6(typescript@5.9.3) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -1503,7 +1503,7 @@ importers: version: 0.19.6(typescript@5.9.3) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@testing-library/jest-dom': specifier: ^6.9.1 version: 6.9.1 @@ -1539,7 +1539,7 @@ importers: version: 0.19.6(typescript@5.9.3) '@storybook/addon-docs': specifier: ^10.2.3 - version: 10.2.4(@types/react@19.2.10)(esbuild@0.27.2)(rollup@4.53.3)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.2.6(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(stylus@0.64.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.104.1(esbuild@0.27.2)) + version: 10.2.4(@types/react@19.2.14)(esbuild@0.27.2)(rollup@4.53.3)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.2.6(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(stylus@0.64.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.104.1(esbuild@0.27.2)) '@storybook/addon-onboarding': specifier: ^10.2.3 version: 10.2.4(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) @@ -3842,16 +3842,16 @@ importers: version: 1.4.5(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(webpack-hot-middleware@2.26.1) '@rstest/adapter-rsbuild': specifier: ^0.2.2 - version: 0.2.2(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6))) + version: 0.2.2(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))) '@rstest/browser': specifier: ^0.9.1 - version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) + version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) '@rstest/browser-react': specifier: ^0.9.1 - version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@types/react': specifier: ^19.2.10 version: 19.2.10 @@ -3881,16 +3881,16 @@ importers: version: 1.4.5(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(webpack-hot-middleware@2.26.1) '@rstest/adapter-rsbuild': specifier: ^0.2.2 - version: 0.2.2(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6))) + version: 0.2.2(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))) '@rstest/browser': specifier: ^0.9.1 - version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) + version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) '@rstest/browser-react': specifier: ^0.9.1 - version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -3923,10 +3923,10 @@ importers: version: 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0) '@rstest/browser': specifier: ^0.9.1 - version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) + version: 0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) playwright: specifier: ^1.58.1 version: 1.58.1 @@ -3938,10 +3938,10 @@ importers: devDependencies: '@rstest/core': specifier: ^0.9.0 - version: 0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) '@rstest/coverage-istanbul': specifier: ^0.3.0 - version: 0.3.0(@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6))) + version: 0.3.0(@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -3950,7 +3950,7 @@ importers: devDependencies: '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -3959,7 +3959,7 @@ importers: devDependencies: '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -3989,10 +3989,65 @@ importers: version: 0.19.6(typescript@5.9.3) '@rstest/adapter-rslib': specifier: ^0.2.1 - version: 0.2.1(@rslib/core@0.19.6(typescript@5.9.3))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(typescript@5.9.3) + version: 0.2.1(@rslib/core@0.19.6(typescript@5.9.3))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(typescript@5.9.3) '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + rstest/rspack-adapter: + dependencies: + react: + specifier: ^19.2.4 + version: 19.2.4 + react-dom: + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) + devDependencies: + '@rsbuild/plugin-react': + specifier: ^1.4.5 + version: 1.4.5(@rsbuild/core@2.0.0-beta.6(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(webpack-hot-middleware@2.26.1) + '@rspack/cli': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1)) + '@rspack/core': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19) + '@rspack/dev-server': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1) + '@rspack/plugin-react-refresh': + specifier: ^1.6.1 + version: 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rstest/adapter-rspack': + specifier: ^0.2.0 + version: 0.2.0(@rspack/cli@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1)))(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))) + '@rstest/core': + specifier: ^0.9.1 + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) + '@testing-library/dom': + specifier: ^10.4.1 + version: 10.4.1 + '@testing-library/jest-dom': + specifier: ^6.9.1 + version: 6.9.1 + '@testing-library/react': + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@types/react': + specifier: ^19.2.14 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + happy-dom: + specifier: ^20.8.3 + version: 20.8.4 + react-refresh: + specifier: ^0.18.0 + version: 0.18.0 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -4001,7 +4056,7 @@ importers: devDependencies: '@rstest/core': specifier: ^0.9.1 - version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + version: 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -7572,6 +7627,16 @@ packages: selfsigned: optional: true + '@rspack/dev-server@2.0.0-beta.5': + resolution: {integrity: sha512-K1Eve0fTG1tKViRtvPbMtlfCvKZMcjTlR9n+kx2ObWbjqZ069nth1zSN16XtFjDCBrKFvG1ACZ2xhowEcAbi6Q==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@rspack/core': ^2.0.0-0 + selfsigned: ^5.0.0 + peerDependenciesMeta: + selfsigned: + optional: true + '@rspack/lite-tapable@1.0.1': resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} engines: {node: '>=16.0.0'} @@ -7730,6 +7795,13 @@ packages: typescript: optional: true + '@rstest/adapter-rspack@0.2.0': + resolution: {integrity: sha512-r0Wbs3K15xplZ/LNgaDKFkdsIneOuSSTDgUhWiHtXWYuKth6yb9VR+U18XUMRSLJEqwILI0ppna3qQWBiXIEBw==} + peerDependencies: + '@rspack/cli': '>=2.0.0-0' + '@rspack/core': '>=2.0.0-0' + '@rstest/core': '>=0.7.7' + '@rstest/browser-react@0.9.1': resolution: {integrity: sha512-0S7lSVUgKr25l2HpD9aEKGGqjM1pPCATKlZMCeAtZg1ssO7srVuR3/5yBO/Ewj9AgLoscDAwfjhbzADcnnbWpA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -8623,6 +8695,9 @@ packages: '@types/react@19.2.10': resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -10639,6 +10714,10 @@ packages: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-ci@7.3.0: resolution: {integrity: sha512-L8vK54CSjKB4pwlwx0YaqeBdUSGufaLHl/pEgD+EqnMrYCVUA8HzMjURALSyvOlC57e953yN7KyXS63qDoc3Rg==} engines: {node: '>=12.20'} @@ -11370,6 +11449,10 @@ packages: resolution: {integrity: sha512-VQe+Q5CYiGOgcCERXhcfNsbnrN92FDEKciMH/x6LppU9dd0j4aTjCTlqONFOIMcAm/5JxS3+utowbXV1OoFr+g==} engines: {node: '>=20.0.0'} + happy-dom@20.8.4: + resolution: {integrity: sha512-GKhjq4OQCYB4VLFBzv8mmccUadwlAusOZOI7hC1D9xDIT5HhzkJK17c4el2f6R6C715P9xB4uiMxeKUa2nHMwQ==} + engines: {node: '>=20.0.0'} + has-ansi@2.0.0: resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} engines: {node: '>=0.10.0'} @@ -18881,7 +18964,7 @@ snapshots: '@mdx-js/react@2.3.0(react@18.3.1)': dependencies: '@types/mdx': 2.0.11 - '@types/react': 19.2.10 + '@types/react': 19.2.14 react: 18.3.1 '@mdx-js/react@3.1.1(@types/react@19.2.10)(react@19.2.4)': @@ -18890,6 +18973,12 @@ snapshots: '@types/react': 19.2.10 react: 19.2.4 + '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.4)': + dependencies: + '@types/mdx': 2.0.11 + '@types/react': 19.2.14 + react: 19.2.4 + '@messageformat/parser@5.1.1': dependencies: moo: 0.5.2 @@ -20807,6 +20896,14 @@ snapshots: optionalDependencies: '@rspack/dev-server': 2.0.0-beta.4(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1) + '@rspack/cli@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1))': + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@rspack/core': 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19) + exit-hook: 4.0.0 + optionalDependencies: + '@rspack/dev-server': 2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1) + '@rspack/core@1.3.12(@swc/helpers@0.5.19)': dependencies: '@module-federation/runtime-tools': 0.14.0 @@ -20944,6 +21041,27 @@ snapshots: - utf-8-validate - webpack + '@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1)': + dependencies: + '@rspack/core': 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19) + '@types/connect-history-api-fallback': 1.5.4 + '@types/serve-static': 2.2.0 + '@types/ws': 8.18.1 + chokidar: 5.0.0 + connect-history-api-fallback: 2.0.0 + connect-next: 4.0.0 + http-proxy-middleware: 3.0.5 + ipaddr.js: 2.3.0 + serve-static: 2.2.1 + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.104.1) + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - tslib + - utf-8-validate + - webpack + '@rspack/lite-tapable@1.0.1': {} '@rspack/lite-tapable@1.1.0': {} @@ -21197,23 +21315,34 @@ snapshots: '@rsbuild/core': 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0) '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) - '@rstest/adapter-rslib@0.2.1(@rslib/core@0.19.6(typescript@5.9.3))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(typescript@5.9.3)': + '@rstest/adapter-rsbuild@0.2.2(@rsbuild/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))': + dependencies: + '@rsbuild/core': 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0) + '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) + + '@rstest/adapter-rslib@0.2.1(@rslib/core@0.19.6(typescript@5.9.3))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(typescript@5.9.3)': dependencies: '@rslib/core': 0.19.6(typescript@5.9.3) - '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) optionalDependencies: typescript: 5.9.3 - '@rstest/browser-react@0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@rstest/adapter-rspack@0.2.0(@rspack/cli@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1)))(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))': dependencies: - '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + '@rspack/cli': 2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(@rspack/dev-server@2.0.0-beta.5(@rspack/core@2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19))(tslib@2.8.1)(webpack@5.104.1)) + '@rspack/core': 2.0.0-beta.5(@module-federation/runtime-tools@2.0.1)(@swc/helpers@0.5.19) + '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) + + '@rstest/browser-react@0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - '@rstest/browser@0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1)': + '@rstest/browser@0.9.1(@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))(playwright@1.58.1)': dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + '@rstest/core': 0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) convert-source-map: 2.0.0 open-editor: 6.0.0 pathe: 2.0.3 @@ -21225,13 +21354,13 @@ snapshots: - bufferutil - utf-8-validate - '@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6))': + '@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))': dependencies: '@rsbuild/core': 2.0.0-beta.6(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0) '@types/chai': 5.2.3 tinypool: 2.1.0 optionalDependencies: - happy-dom: 20.5.0 + happy-dom: 20.8.4 jsdom: 27.4.0(postcss@8.5.6) transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -21249,9 +21378,21 @@ snapshots: - '@module-federation/runtime-tools' - core-js - '@rstest/coverage-istanbul@0.3.0(@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)))': + '@rstest/core@0.9.1(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6))': dependencies: - '@rstest/core': 0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.5.0)(jsdom@27.4.0(postcss@8.5.6)) + '@rsbuild/core': 2.0.0-beta.6(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0) + '@types/chai': 5.2.3 + tinypool: 2.1.0 + optionalDependencies: + happy-dom: 20.8.4 + jsdom: 27.4.0(postcss@8.5.6) + transitivePeerDependencies: + - '@module-federation/runtime-tools' + - core-js + + '@rstest/coverage-istanbul@0.3.0(@rstest/core@0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)))': + dependencies: + '@rstest/core': 0.9.0(@module-federation/runtime-tools@2.0.1)(core-js@3.48.0)(happy-dom@20.8.4)(jsdom@27.4.0(postcss@8.5.6)) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -21412,6 +21553,23 @@ snapshots: - vite - webpack + '@storybook/addon-docs@10.2.4(@types/react@19.2.14)(esbuild@0.27.2)(rollup@4.53.3)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.2.6(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(stylus@0.64.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.104.1(esbuild@0.27.2))': + dependencies: + '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.4) + '@storybook/csf-plugin': 10.2.4(esbuild@0.27.2)(rollup@4.53.3)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@7.2.6(@types/node@25.0.10)(jiti@2.6.1)(less@4.5.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(stylus@0.64.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.8.1))(webpack@5.104.1(esbuild@0.27.2)) + '@storybook/icons': 2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@storybook/react-dom-shim': 10.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + storybook: 10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - esbuild + - rollup + - vite + - webpack + '@storybook/addon-onboarding@10.2.4(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))': dependencies: storybook: 10.2.4(@testing-library/dom@10.4.1)(prettier@2.8.8)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -21919,6 +22077,16 @@ snapshots: '@types/react': 19.2.10 '@types/react-dom': 19.2.3(@types/react@19.2.10) + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + dependencies: + '@babel/runtime': 7.28.6 + '@testing-library/dom': 10.4.1 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-dom': 19.2.3(@types/react@19.2.14) + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': dependencies: '@testing-library/dom': 10.4.1 @@ -22093,7 +22261,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.5': dependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 hoist-non-react-statics: 3.3.2 '@types/html-minifier-terser@6.1.0': {} @@ -22180,10 +22348,18 @@ snapshots: dependencies: '@types/react': 19.2.10 + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + '@types/react@19.2.10': dependencies: csstype: 3.2.3 + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + '@types/resolve@1.20.2': {} '@types/retry@0.12.2': @@ -24531,6 +24707,8 @@ snapshots: entities@6.0.0: {} + entities@7.0.1: {} + env-ci@7.3.0: dependencies: execa: 5.1.1 @@ -25598,6 +25776,18 @@ snapshots: - bufferutil - utf-8-validate + happy-dom@20.8.4: + dependencies: + '@types/node': 24.10.9 + '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 + entities: 7.0.1 + whatwg-mimetype: 3.0.0 + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + has-ansi@2.0.0: dependencies: ansi-regex: 2.1.1 diff --git a/rstest/rspack-adapter/.gitignore b/rstest/rspack-adapter/.gitignore new file mode 100644 index 000000000..6f3092c30 --- /dev/null +++ b/rstest/rspack-adapter/.gitignore @@ -0,0 +1,16 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# Profile +.rspack-profile-*/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/rstest/rspack-adapter/README.md b/rstest/rspack-adapter/README.md new file mode 100644 index 000000000..896b051da --- /dev/null +++ b/rstest/rspack-adapter/README.md @@ -0,0 +1,36 @@ +# Rspack project + +## Setup + +Install the dependencies: + +```bash +npm install +``` + +## Get started + +Start the dev server, and the app will be available at . + +```bash +npm run dev +``` + +Build the app for production: + +```bash +npm run build +``` + +Preview the production build locally: + +```bash +npm run preview +``` + +## Learn more + +To learn more about Rspack, check out the following resources: + +- [Rspack documentation](https://rspack.rs) - explore Rspack features and APIs. +- [Rspack GitHub repository](https://github.com/web-infra-dev/rspack) - your feedback and contributions are welcome! diff --git a/rstest/rspack-adapter/index.html b/rstest/rspack-adapter/index.html new file mode 100644 index 000000000..451693921 --- /dev/null +++ b/rstest/rspack-adapter/index.html @@ -0,0 +1,12 @@ + + + + + + + Rspack + React + TS + + +
+ + diff --git a/rstest/rspack-adapter/package.json b/rstest/rspack-adapter/package.json new file mode 100644 index 000000000..4eaae8931 --- /dev/null +++ b/rstest/rspack-adapter/package.json @@ -0,0 +1,33 @@ +{ + "name": "@rstest-example/rspack-adapter", + "private": true, + "version": "1.0.0", + "scripts": { + "build": "rspack build", + "dev": "rspack dev", + "preview": "rspack preview", + "test": "rstest", + "test:watch": "rstest --watch" + }, + "dependencies": { + "react": "^19.2.4", + "react-dom": "^19.2.4" + }, + "devDependencies": { + "@rsbuild/plugin-react": "^1.4.5", + "@rspack/cli": "2.0.0-beta.5", + "@rspack/core": "2.0.0-beta.5", + "@rspack/dev-server": "2.0.0-beta.5", + "@rspack/plugin-react-refresh": "^1.6.1", + "@rstest/core": "^0.9.1", + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "happy-dom": "^20.8.3", + "react-refresh": "^0.18.0", + "typescript": "^5.9.3", + "@rstest/adapter-rspack": "^0.2.0" + } +} diff --git a/rstest/rspack-adapter/rspack.config.ts b/rstest/rspack-adapter/rspack.config.ts new file mode 100644 index 000000000..274ef91f7 --- /dev/null +++ b/rstest/rspack-adapter/rspack.config.ts @@ -0,0 +1,56 @@ +import { defineConfig } from '@rspack/cli'; +import { rspack, type SwcLoaderOptions } from '@rspack/core'; +import { ReactRefreshRspackPlugin } from '@rspack/plugin-react-refresh'; + +const isDev = process.env.NODE_ENV === 'development'; + +export default defineConfig({ + entry: { + main: './src/main.tsx', + }, + target: ['browserslist:last 2 versions, > 0.2%, not dead, Firefox ESR'], + resolve: { + extensions: ['...', '.ts', '.tsx', '.jsx'], + }, + module: { + rules: [ + { + test: /\.svg$/, + type: 'asset', + }, + { + test: /\.css$/, + type: 'css/auto', + }, + { + test: /\.(jsx?|tsx?)$/, + use: [ + { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + tsx: true, + }, + transform: { + react: { + runtime: 'automatic', + development: isDev, + refresh: isDev, + }, + }, + }, + } satisfies SwcLoaderOptions, + }, + ], + }, + ], + }, + plugins: [ + new rspack.HtmlRspackPlugin({ + template: './index.html', + }), + isDev ? new ReactRefreshRspackPlugin() : null, + ], +}); diff --git a/rstest/rspack-adapter/rstest.config.mts b/rstest/rspack-adapter/rstest.config.mts new file mode 100644 index 000000000..26c92d064 --- /dev/null +++ b/rstest/rspack-adapter/rstest.config.mts @@ -0,0 +1,8 @@ +import { withRspackConfig } from '@rstest/adapter-rspack'; +import { defineConfig } from '@rstest/core'; + +// Docs: https://rstest.rs/config/ +export default defineConfig({ + extends: withRspackConfig(), + setupFiles: ['./tests/rstest.setup.ts'], +}); diff --git a/rstest/rspack-adapter/src/App.css b/rstest/rspack-adapter/src/App.css new file mode 100644 index 000000000..1b83399ee --- /dev/null +++ b/rstest/rspack-adapter/src/App.css @@ -0,0 +1,41 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a > .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/rstest/rspack-adapter/src/App.tsx b/rstest/rspack-adapter/src/App.tsx new file mode 100644 index 000000000..7151c6ce6 --- /dev/null +++ b/rstest/rspack-adapter/src/App.tsx @@ -0,0 +1,29 @@ +import { useState } from 'react'; +import reactLogo from './assets/react.svg'; +import './App.css'; + +function App() { + const [count, setCount] = useState(0); + + return ( +
+
+ + React logo + +
+

Rspack + React + TypeScript

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

Click on the Rspack and React logos to learn more

+
+ ); +} + +export default App; diff --git a/rstest/rspack-adapter/src/assets/react.svg b/rstest/rspack-adapter/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/rstest/rspack-adapter/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rstest/rspack-adapter/src/index.css b/rstest/rspack-adapter/src/index.css new file mode 100644 index 000000000..917888c1d --- /dev/null +++ b/rstest/rspack-adapter/src/index.css @@ -0,0 +1,70 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/rstest/rspack-adapter/src/main.tsx b/rstest/rspack-adapter/src/main.tsx new file mode 100644 index 000000000..8c4462a73 --- /dev/null +++ b/rstest/rspack-adapter/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App.tsx'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + , +); diff --git a/rstest/rspack-adapter/tests/index.test.tsx b/rstest/rspack-adapter/tests/index.test.tsx new file mode 100644 index 000000000..e970ee049 --- /dev/null +++ b/rstest/rspack-adapter/tests/index.test.tsx @@ -0,0 +1,9 @@ +import { expect, test } from '@rstest/core'; +import { render, screen } from '@testing-library/react'; +import App from '../src/App'; + +test('renders the main page', () => { + const testMessage = 'Rspack + React + TypeScript'; + render(); + expect(screen.getByText(testMessage)).toBeInTheDocument(); +}); diff --git a/rstest/rspack-adapter/tests/rstest.setup.ts b/rstest/rspack-adapter/tests/rstest.setup.ts new file mode 100644 index 000000000..f0194e3b9 --- /dev/null +++ b/rstest/rspack-adapter/tests/rstest.setup.ts @@ -0,0 +1,5 @@ +import { expect } from '@rstest/core'; +// biome-ignore lint/performance/noNamespaceImport: jest-dom matchers are consumed as a matcher namespace. +import * as jestDomMatchers from '@testing-library/jest-dom/matchers'; + +expect.extend(jestDomMatchers); diff --git a/rstest/rspack-adapter/tests/tsconfig.json b/rstest/rspack-adapter/tests/tsconfig.json new file mode 100644 index 000000000..8a386d8ed --- /dev/null +++ b/rstest/rspack-adapter/tests/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "types": ["@testing-library/jest-dom"] + }, + "include": ["./"] +} diff --git a/rstest/rspack-adapter/tsconfig.json b/rstest/rspack-adapter/tsconfig.json new file mode 100644 index 000000000..4bcc25aef --- /dev/null +++ b/rstest/rspack-adapter/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2020"], + "jsx": "react-jsx", + "target": "ES2020", + "noEmit": true, + "skipLibCheck": true, + "useDefineForClassFields": true, + + /* modules */ + "module": "ESNext", + "resolveJsonModule": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + + /* type checking */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true + }, + "include": ["src"] +} From e0388babdc59670b04d511d070c3b667ddbb22b0 Mon Sep 17 00:00:00 2001 From: 9aoy Date: Tue, 17 Mar 2026 15:21:18 +0800 Subject: [PATCH 2/6] Update rstest/rspack-adapter/src/main.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- rstest/rspack-adapter/src/main.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rstest/rspack-adapter/src/main.tsx b/rstest/rspack-adapter/src/main.tsx index 8c4462a73..4cf2799a1 100644 --- a/rstest/rspack-adapter/src/main.tsx +++ b/rstest/rspack-adapter/src/main.tsx @@ -3,7 +3,11 @@ import ReactDOM from 'react-dom/client'; import App from './App.tsx'; import './index.css'; -ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error('Failed to find the root element'); +} +ReactDOM.createRoot(rootElement).render( , From 5b161287f493f03ab8ac251a7f8c5ec74b081421 Mon Sep 17 00:00:00 2001 From: 9aoy Date: Tue, 17 Mar 2026 15:21:26 +0800 Subject: [PATCH 3/6] Update rstest/rspack-adapter/package.json Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- rstest/rspack-adapter/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rstest/rspack-adapter/package.json b/rstest/rspack-adapter/package.json index 4eaae8931..1c7d2660e 100644 --- a/rstest/rspack-adapter/package.json +++ b/rstest/rspack-adapter/package.json @@ -19,6 +19,7 @@ "@rspack/core": "2.0.0-beta.5", "@rspack/dev-server": "2.0.0-beta.5", "@rspack/plugin-react-refresh": "^1.6.1", + "@rstest/adapter-rspack": "^0.2.0", "@rstest/core": "^0.9.1", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", @@ -27,7 +28,6 @@ "@types/react-dom": "^19.2.3", "happy-dom": "^20.8.3", "react-refresh": "^0.18.0", - "typescript": "^5.9.3", - "@rstest/adapter-rspack": "^0.2.0" + "typescript": "^5.9.3" } } From d9602c1bfa2776c006126c2df0a960d9c28fd9fc Mon Sep 17 00:00:00 2001 From: 9aoy Date: Tue, 17 Mar 2026 15:21:34 +0800 Subject: [PATCH 4/6] Update rstest/rspack-adapter/rspack.config.ts Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- rstest/rspack-adapter/rspack.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rstest/rspack-adapter/rspack.config.ts b/rstest/rspack-adapter/rspack.config.ts index 274ef91f7..be2a7c1f8 100644 --- a/rstest/rspack-adapter/rspack.config.ts +++ b/rstest/rspack-adapter/rspack.config.ts @@ -51,6 +51,6 @@ export default defineConfig({ new rspack.HtmlRspackPlugin({ template: './index.html', }), - isDev ? new ReactRefreshRspackPlugin() : null, + ...(isDev ? [new ReactRefreshRspackPlugin()] : []), ], }); From 864612a0c52eb5bd985a9ef58b3e1f881e9cf79d Mon Sep 17 00:00:00 2001 From: 9aoy Date: Tue, 17 Mar 2026 15:21:41 +0800 Subject: [PATCH 5/6] Update rstest/rspack-adapter/src/App.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- rstest/rspack-adapter/src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rstest/rspack-adapter/src/App.tsx b/rstest/rspack-adapter/src/App.tsx index 7151c6ce6..f03ddbc38 100644 --- a/rstest/rspack-adapter/src/App.tsx +++ b/rstest/rspack-adapter/src/App.tsx @@ -8,7 +8,7 @@ function App() { return (
From 08ea96e400a99b7aabb3f35376a4badc5005066b Mon Sep 17 00:00:00 2001 From: 9aoy Date: Tue, 17 Mar 2026 15:21:48 +0800 Subject: [PATCH 6/6] Update rstest/rspack-adapter/tests/index.test.tsx Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- rstest/rspack-adapter/tests/index.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rstest/rspack-adapter/tests/index.test.tsx b/rstest/rspack-adapter/tests/index.test.tsx index e970ee049..d86f2bd01 100644 --- a/rstest/rspack-adapter/tests/index.test.tsx +++ b/rstest/rspack-adapter/tests/index.test.tsx @@ -5,5 +5,5 @@ import App from '../src/App'; test('renders the main page', () => { const testMessage = 'Rspack + React + TypeScript'; render(); - expect(screen.getByText(testMessage)).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: testMessage })).toBeInTheDocument(); });