rsbuild-plugin-react-router 0.4.1 → 0.6.0

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.
Files changed (126) hide show
  1. package/README.md +72 -240
  2. package/dist/{451.js → 511.js} +461 -331
  3. package/dist/build-output-transforms.d.ts +32 -7
  4. package/dist/classic-mode.d.ts +56 -0
  5. package/dist/config-imports.d.ts +8 -2
  6. package/dist/constants.d.ts +3 -0
  7. package/dist/dev-background-resources.d.ts +3 -3
  8. package/dist/dev-generation.d.ts +2 -3
  9. package/dist/dev-hmr.d.ts +8 -2
  10. package/dist/dev-runtime-controller.d.ts +6 -1
  11. package/dist/dev-source-maps.d.ts +4 -0
  12. package/dist/effect-runtime.d.ts +17 -5
  13. package/dist/entry-paths.d.ts +16 -0
  14. package/dist/environment-output.d.ts +6 -0
  15. package/dist/export-utils.d.ts +2 -1
  16. package/dist/federation.d.ts +2 -0
  17. package/dist/index.cjs +3675 -2107
  18. package/dist/index.d.ts +3 -1
  19. package/dist/index.js +3614 -2214
  20. package/dist/lazy-compilation-prewarm.d.ts +8 -5
  21. package/dist/manifest.d.ts +16 -4
  22. package/dist/mode-plan.d.ts +82 -0
  23. package/dist/modify-browser-manifest.d.ts +8 -4
  24. package/dist/performance.d.ts +4 -1
  25. package/dist/plugin-utils.d.ts +27 -1
  26. package/dist/prerender-build.d.ts +5 -5
  27. package/dist/prerender.d.ts +1 -5
  28. package/dist/react-router-config.d.ts +11 -3
  29. package/dist/route-artifacts.d.ts +4 -2
  30. package/dist/route-chunks.d.ts +2 -1
  31. package/dist/route-component-transform.d.ts +0 -2
  32. package/dist/route-export-pruning.d.ts +4 -1
  33. package/dist/route-imports.d.ts +18 -0
  34. package/dist/route-module-transform-loader.d.ts +14 -0
  35. package/dist/route-module-transform-loader.js +44 -0
  36. package/dist/route-module-transform-rules.d.ts +14 -0
  37. package/dist/route-transform-tasks.d.ts +6 -0
  38. package/dist/route-watch.d.ts +11 -6
  39. package/dist/rsc-dev-server.d.ts +26 -0
  40. package/dist/rsc-prerender.d.ts +54 -0
  41. package/dist/rsc-route-config.d.ts +6 -0
  42. package/dist/rsc-route-exports.d.ts +15 -0
  43. package/dist/rsc-route-transform-loader.cjs +43 -0
  44. package/dist/rsc-route-transform-loader.d.ts +30 -0
  45. package/dist/rsc-route-transform-loader.js +16 -0
  46. package/dist/rsc-route-transform-registration.d.ts +12 -0
  47. package/dist/rsc-route-transforms.d.ts +21 -0
  48. package/dist/rsc-support.d.ts +23 -0
  49. package/dist/rsc-virtual-modules.d.ts +19 -0
  50. package/dist/server-build-plan.d.ts +2 -1
  51. package/dist/server-build-resolution.d.ts +1 -2
  52. package/dist/server-utils.d.ts +4 -5
  53. package/dist/ssr-asset-relocation.d.ts +98 -0
  54. package/dist/templates/entry.rsc.client.d.ts +1 -0
  55. package/dist/templates/entry.rsc.client.js +61 -0
  56. package/dist/templates/entry.rsc.d.ts +9 -0
  57. package/dist/templates/entry.rsc.js +38 -0
  58. package/dist/templates/entry.rsc.ssr.d.ts +4 -0
  59. package/dist/templates/entry.rsc.ssr.js +24 -0
  60. package/dist/typegen.d.ts +4 -2
  61. package/dist/types.d.ts +34 -6
  62. package/package.json +76 -22
  63. package/src/build-output-transforms.ts +181 -43
  64. package/src/classic-mode.ts +253 -0
  65. package/src/config-imports.ts +153 -6
  66. package/src/constants.ts +6 -2
  67. package/src/dev-background-resources.ts +46 -100
  68. package/src/dev-generation.ts +52 -33
  69. package/src/dev-hmr.ts +112 -80
  70. package/src/dev-runtime-artifacts.ts +11 -12
  71. package/src/dev-runtime-controller.ts +75 -85
  72. package/src/dev-runtime-session.ts +14 -18
  73. package/src/dev-server.ts +2 -0
  74. package/src/dev-source-maps.ts +257 -0
  75. package/src/effect-runtime.ts +105 -57
  76. package/src/entry-paths.ts +80 -0
  77. package/src/environment-output.ts +55 -0
  78. package/src/export-utils.ts +15 -11
  79. package/src/federation.ts +38 -0
  80. package/src/index.ts +666 -519
  81. package/src/lazy-compilation-prewarm.ts +20 -4
  82. package/src/manifest.ts +157 -82
  83. package/src/mode-plan.ts +367 -0
  84. package/src/modify-browser-manifest.ts +130 -124
  85. package/src/performance.ts +11 -2
  86. package/src/plugin-utils.ts +103 -39
  87. package/src/prerender-build.ts +82 -104
  88. package/src/prerender.ts +23 -24
  89. package/src/react-router-config.ts +72 -26
  90. package/src/route-artifacts.ts +96 -66
  91. package/src/route-chunks.ts +167 -51
  92. package/src/route-component-transform.ts +14 -21
  93. package/src/route-export-pruning.ts +4 -3
  94. package/src/route-imports.ts +100 -0
  95. package/src/route-module-transform-loader.ts +149 -0
  96. package/src/route-module-transform-rules.ts +115 -0
  97. package/src/route-transform-tasks.ts +44 -29
  98. package/src/route-watch.ts +166 -188
  99. package/src/rsc-dev-server.ts +112 -0
  100. package/src/rsc-prerender.ts +362 -0
  101. package/src/rsc-route-config.ts +175 -0
  102. package/src/rsc-route-exports.ts +67 -0
  103. package/src/rsc-route-transform-loader.ts +65 -0
  104. package/src/rsc-route-transform-registration.ts +145 -0
  105. package/src/rsc-route-transforms.ts +995 -0
  106. package/src/rsc-runtime.d.ts +143 -0
  107. package/src/rsc-support.ts +116 -0
  108. package/src/rsc-virtual-modules.ts +113 -0
  109. package/src/server-build-plan.ts +14 -3
  110. package/src/server-build-resolution.ts +37 -47
  111. package/src/server-utils.ts +21 -35
  112. package/src/ssr-asset-relocation.ts +183 -0
  113. package/src/ssr-externals.ts +8 -26
  114. package/src/templates/entry.rsc.client.tsx +168 -0
  115. package/src/templates/entry.rsc.ssr.tsx +45 -0
  116. package/src/templates/entry.rsc.tsx +80 -0
  117. package/src/typegen.ts +40 -23
  118. package/src/types.ts +43 -6
  119. package/src/warnings/warn-on-client-source-maps.ts +6 -10
  120. package/dist/parallel-route-transform-protocol.d.ts +0 -25
  121. package/dist/parallel-route-transform-worker.d.ts +0 -1
  122. package/dist/parallel-route-transform-worker.js +0 -38
  123. package/dist/parallel-route-transforms.d.ts +0 -29
  124. package/src/parallel-route-transform-protocol.ts +0 -35
  125. package/src/parallel-route-transform-worker.ts +0 -82
  126. package/src/parallel-route-transforms.ts +0 -458
@@ -0,0 +1,145 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import type { RsbuildPlugin } from '@rsbuild/core';
4
+ import { resolve } from 'pathe';
5
+ import type { RouteChunkCache, RouteChunkConfig } from './route-chunks.js';
6
+ import type { Route } from './types.js';
7
+ import type { ReactRouterPerformanceProfiler } from './performance.js';
8
+ import { transformRscRouteModule } from './rsc-route-transforms.js';
9
+
10
+ const mdxRoutePattern = /\.mdx?$/i;
11
+ const RSC_ROUTE_TRANSFORM_LOADER = 'react-router-rsc-route-transform';
12
+
13
+ // Structural types for the compiler surface the transform plugin touches.
14
+ // Rspack's own types do not expose the `childCompiler` compilation hook or
15
+ // the custom property the loader reads, so we describe just what we use.
16
+ type RscTransformCarrier<Transform> = {
17
+ __reactRouterRscRouteTransform?: Transform;
18
+ };
19
+ type TapHook<Value> = {
20
+ tap(name: string, handler: (value: Value) => void): void;
21
+ };
22
+ type RscTransformCompiler<Transform> = RscTransformCarrier<Transform> & {
23
+ hooks: {
24
+ thisCompilation: TapHook<{
25
+ hooks: { childCompiler: TapHook<RscTransformCarrier<Transform>> };
26
+ }>;
27
+ };
28
+ };
29
+
30
+ const getRscRouteTransformLoaderPath = (): string =>
31
+ join(
32
+ dirname(fileURLToPath(import.meta.url)),
33
+ import.meta.url.endsWith('.cjs')
34
+ ? 'rsc-route-transform-loader.cjs'
35
+ : 'rsc-route-transform-loader.js'
36
+ );
37
+
38
+ export const registerReactRouterRscRouteTransforms = ({
39
+ api,
40
+ isBuild,
41
+ performanceProfiler,
42
+ routeByFilePath,
43
+ routeChunkCache,
44
+ routeChunkConfig,
45
+ }: {
46
+ api: Parameters<RsbuildPlugin['setup']>[0];
47
+ isBuild: boolean;
48
+ performanceProfiler: Pick<ReactRouterPerformanceProfiler, 'record'>;
49
+ routeByFilePath: Map<string, Route>;
50
+ routeChunkCache: RouteChunkCache;
51
+ routeChunkConfig: RouteChunkConfig;
52
+ }): void => {
53
+ const transformRoute = async (
54
+ args: Parameters<Parameters<typeof api.transform>[1]>[0]
55
+ ) => {
56
+ const route = routeByFilePath.get(resolve(args.resourcePath));
57
+ if (!route) {
58
+ return { code: args.code };
59
+ }
60
+
61
+ return performanceProfiler.record(
62
+ args.environment?.name,
63
+ 'rsc:route',
64
+ args.resource,
65
+ () =>
66
+ transformRscRouteModule({
67
+ code: args.code,
68
+ resourcePath: args.resourcePath,
69
+ resourceQuery: args.resourceQuery,
70
+ isRootRoute: route.id === 'root',
71
+ routeId: route.id,
72
+ routeByFilePath,
73
+ routeChunkCache,
74
+ routeChunkConfig,
75
+ isServerEnvironment: args.environment.name === 'node',
76
+ isDev: !isBuild,
77
+ })
78
+ );
79
+ };
80
+
81
+ api.transform(
82
+ {
83
+ test: path =>
84
+ !mdxRoutePattern.test(path) && routeByFilePath.has(resolve(path)),
85
+ order: 'pre',
86
+ },
87
+ transformRoute
88
+ );
89
+
90
+ api.modifyBundlerChain((chain, { CHAIN_ID, environment }) => {
91
+ if (!chain.module.rules.has('mdx')) {
92
+ return;
93
+ }
94
+
95
+ chain.plugin(`${RSC_ROUTE_TRANSFORM_LOADER}-${environment.name}`).use(
96
+ class ReactRouterRscRouteTransformPlugin {
97
+ apply(compiler: RscTransformCompiler<typeof transformRoute>) {
98
+ compiler.__reactRouterRscRouteTransform = transformRoute;
99
+ compiler.hooks.thisCompilation.tap(
100
+ RSC_ROUTE_TRANSFORM_LOADER,
101
+ compilation => {
102
+ compilation.hooks.childCompiler.tap(
103
+ RSC_ROUTE_TRANSFORM_LOADER,
104
+ childCompiler => {
105
+ childCompiler.__reactRouterRscRouteTransform = transformRoute;
106
+ }
107
+ );
108
+ }
109
+ );
110
+ }
111
+ }
112
+ );
113
+
114
+ const mdxRule = chain.module.rules.get('mdx');
115
+ const rscRouteTransformLoaderPath = getRscRouteTransformLoaderPath();
116
+ const use = mdxRule
117
+ .use(RSC_ROUTE_TRANSFORM_LOADER)
118
+ .loader(rscRouteTransformLoaderPath)
119
+ .options({
120
+ environmentName: environment.name,
121
+ });
122
+
123
+ if (mdxRule.uses.has('mdx')) {
124
+ use.before('mdx');
125
+ }
126
+
127
+ if (!mdxRule.uses.has(CHAIN_ID.USE.SWC)) {
128
+ const jsRule = chain.module.rules.get(CHAIN_ID.RULE.JS);
129
+ const jsMainRule = jsRule?.oneOfs.get(CHAIN_ID.ONE_OF.JS_MAIN);
130
+ const jsSwcUse = jsMainRule?.uses.get(CHAIN_ID.USE.SWC);
131
+ if (jsSwcUse) {
132
+ const mdxSwcUse = mdxRule.use(CHAIN_ID.USE.SWC);
133
+ const swcLoader = jsSwcUse.get('loader');
134
+ const swcOptions = jsSwcUse.get('options');
135
+ if (swcLoader) {
136
+ mdxSwcUse.loader(swcLoader);
137
+ }
138
+ if (swcOptions) {
139
+ mdxSwcUse.options(swcOptions);
140
+ }
141
+ mdxSwcUse.before(RSC_ROUTE_TRANSFORM_LOADER);
142
+ }
143
+ }
144
+ });
145
+ };