rsbuild-plugin-react-router 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -186,8 +186,14 @@ If none are found, it falls back to defaults.
186
186
 
187
187
  ### Framework Mode
188
188
 
189
- React Router Framework Mode is implemented as a Vite plugin. This Rsbuild
190
- plugin targets Data Mode only and does not support Framework Mode.
189
+ React Router "Framework Mode" is implemented as a Vite plugin, but this Rsbuild
190
+ plugin aims to provide equivalent **framework-mode behaviors** (typegen, Route
191
+ Module API types, route module splitting, SPA/SSR/prerender strategies) on top
192
+ of Rsbuild/Rspack.
193
+
194
+ In practice, you should be able to use the `@react-router/dev/*` config + routes
195
+ APIs, import generated `./+types/*` in route modules, and use the standard
196
+ `entry.client`/`entry.server` entrypoints like you would in the official setup.
191
197
 
192
198
  ### FAQ
193
199
 
@@ -647,7 +653,15 @@ The plugin automatically:
647
653
 
648
654
  ## React Router Framework Mode
649
655
 
650
- React Router "Framework Mode" wraps Data Mode using a Vite plugin. This Rsbuild plugin currently targets React Router's Data Mode build/runtime model and does not implement the Vite plugin layer (type-safe href, route module splitting, etc.).
656
+ React Router "Framework Mode" wraps Data Mode using a Vite plugin. This Rsbuild
657
+ plugin aims to match the important behaviors without depending on Vite:
658
+
659
+ - Typegen + Route Module API types (`./+types/*`)
660
+ - Route module splitting (`future.v8_splitRouteModules`)
661
+ - SPA mode (`ssr: false`), SSR mode, and static prerendering (`prerender`)
662
+
663
+ Some Vite-specific integrations (for example Vite's environment API + critical
664
+ CSS endpoint) are not supported 1:1.
651
665
 
652
666
  ## Examples
653
667
 
package/dist/index.cjs CHANGED
@@ -163,9 +163,10 @@ const RESOLVABLE_BUILD_EXPORTS = new Set([
163
163
  }
164
164
  }, bundle = await tryLoadBundle('static/js/app') ?? await tryLoadBundle('app');
165
165
  if (!bundle || !bundle.routes) throw Error('Server bundle not found or invalid');
166
- let { createRequestListener } = await import("@react-router/node"), normalizedBuild = normalizeBuildModule(bundle), build = await resolveBuildExports(normalizedBuild), listener = createRequestListener({
167
- build
168
- });
166
+ let rr = await import("react-router"), nfs = await import("@remix-run/node-fetch-server");
167
+ if ('function' != typeof rr.createRequestHandler) throw Error('[rsbuild-plugin-react-router] Missing `createRequestHandler` export from `react-router`');
168
+ if ('function' != typeof nfs.createRequestListener) throw Error('[rsbuild-plugin-react-router] Missing `createRequestListener` export from `@remix-run/node-fetch-server`');
169
+ let normalizedBuild = normalizeBuildModule(bundle), build = await resolveBuildExports(normalizedBuild), requestHandler = rr.createRequestHandler(build, 'development'), listener = nfs.createRequestListener((request)=>requestHandler(request));
169
170
  await listener(req, res);
170
171
  } catch (error) {
171
172
  console.error('SSR Error:', error), next(error);
@@ -1601,8 +1602,6 @@ const redirectStatusCodes = new Set([
1601
1602
  },
1602
1603
  dev: {
1603
1604
  writeToDisk: !0,
1604
- hmr: !1,
1605
- liveReload: !0,
1606
1605
  setupMiddlewares: pluginOptions.customServer || !ssr ? [] : [
1607
1606
  (middlewares, server)=>{
1608
1607
  middlewares.push(createDevServerMiddleware(server));
package/dist/index.js CHANGED
@@ -1312,8 +1312,6 @@ let redirectStatusCodes = new Set([
1312
1312
  },
1313
1313
  dev: {
1314
1314
  writeToDisk: !0,
1315
- hmr: !1,
1316
- liveReload: !0,
1317
1315
  setupMiddlewares: pluginOptions.customServer || !ssr ? [] : [
1318
1316
  (middlewares, server)=>{
1319
1317
  middlewares.push(async (req, res, next)=>{
@@ -1327,9 +1325,10 @@ let redirectStatusCodes = new Set([
1327
1325
  }
1328
1326
  }, bundle = await tryLoadBundle('static/js/app') ?? await tryLoadBundle('app');
1329
1327
  if (!bundle || !bundle.routes) throw Error('Server bundle not found or invalid');
1330
- let { createRequestListener } = await import("@react-router/node"), normalizedBuild = normalizeBuildModule(bundle), build = await resolveBuildExports(normalizedBuild), listener = createRequestListener({
1331
- build
1332
- });
1328
+ let rr = await import("react-router"), nfs = await import("@remix-run/node-fetch-server");
1329
+ if ('function' != typeof rr.createRequestHandler) throw Error('[rsbuild-plugin-react-router] Missing `createRequestHandler` export from `react-router`');
1330
+ if ('function' != typeof nfs.createRequestListener) throw Error('[rsbuild-plugin-react-router] Missing `createRequestListener` export from `@remix-run/node-fetch-server`');
1331
+ let normalizedBuild = normalizeBuildModule(bundle), build = await resolveBuildExports(normalizedBuild), requestHandler = rr.createRequestHandler(build, 'development'), listener = nfs.createRequestListener((request)=>requestHandler(request));
1333
1332
  await listener(req, res);
1334
1333
  } catch (error) {
1335
1334
  console.error('SSR Error:', error), next(error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsbuild-plugin-react-router",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "React Router plugin for Rsbuild",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,6 +54,7 @@
54
54
  "@babel/traverse": "^7.28.6",
55
55
  "@babel/types": "^7.28.6",
56
56
  "@react-router/node": "^7.13.0",
57
+ "@remix-run/node-fetch-server": "^0.13.0",
57
58
  "@rspack/plugin-react-refresh": "^1.6.0",
58
59
  "babel-dead-code-elimination": "^1.0.12",
59
60
  "esbuild": "^0.27.2",
@@ -72,6 +73,8 @@
72
73
  "@rsbuild/core": "1.7.2",
73
74
  "@rslib/core": "^0.19.3",
74
75
  "@rspack/core": "1.7.4",
76
+ "@rstest/core": "^0.8.1",
77
+ "@rstest/coverage-istanbul": "^0.2.0",
75
78
  "@types/babel__core": "^7.20.5",
76
79
  "@types/babel__generator": "^7.27.0",
77
80
  "@types/babel__traverse": "^7.28.0",
@@ -79,8 +82,6 @@
79
82
  "@types/jsesc": "^3.0.3",
80
83
  "@types/node": "^25.0.10",
81
84
  "@types/react": "^19.2.10",
82
- "@rstest/core": "^0.8.1",
83
- "@rstest/coverage-istanbul": "^0.2.0",
84
85
  "@types/react-dom": "^19.2.3",
85
86
  "es-module-lexer": "1.7.0",
86
87
  "kill-port": "^2.0.1",