@modern-js/builder 3.0.0-alpha.0 → 3.0.0-alpha.2

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 (136) hide show
  1. package/dist/cjs/createBuilder.js +96 -0
  2. package/dist/cjs/index.js +59 -0
  3. package/dist/cjs/plugins/devtools.js +47 -0
  4. package/dist/cjs/plugins/emitRouteFile.js +75 -0
  5. package/dist/cjs/plugins/environmentDefaults.js +100 -0
  6. package/dist/cjs/plugins/globalVars.js +55 -0
  7. package/dist/cjs/plugins/htmlMinify.js +115 -0
  8. package/dist/cjs/plugins/manifest.js +52 -0
  9. package/dist/cjs/plugins/postcss.js +118 -0
  10. package/dist/cjs/plugins/runtimeChunk.js +54 -0
  11. package/dist/cjs/rsc/common.js +157 -0
  12. package/dist/cjs/rsc/plugins/rsbuild-rsc-plugin.js +169 -0
  13. package/dist/cjs/rsc/plugins/rspack-rsc-client-plugin.js +187 -0
  14. package/dist/cjs/rsc/plugins/rspack-rsc-server-plugin.js +245 -0
  15. package/dist/cjs/rsc/rsc-client-loader.js +71 -0
  16. package/dist/cjs/rsc/rsc-css-loader.js +42 -0
  17. package/dist/cjs/rsc/rsc-server-loader.js +102 -0
  18. package/dist/cjs/rsc/rsc-ssr-loader.js +60 -0
  19. package/dist/cjs/shared/devServer.js +87 -0
  20. package/dist/cjs/shared/getCssSupport.js +121 -0
  21. package/dist/cjs/shared/manifest.js +46 -0
  22. package/dist/cjs/shared/parseCommonConfig.js +209 -0
  23. package/dist/cjs/shared/rsc/rscClientBrowserFallback.js +64 -0
  24. package/dist/cjs/shared/rsc/rscEmptyModule.js +36 -0
  25. package/dist/cjs/shared/utils.js +115 -0
  26. package/dist/cjs/types.js +18 -0
  27. package/dist/compiled/postcss-load-config/index.d.ts +1 -0
  28. package/dist/compiled/postcss-load-config/index.js +608 -0
  29. package/dist/compiled/postcss-load-config/index.js.LICENSE.txt +13 -0
  30. package/dist/compiled/postcss-load-config/license +20 -0
  31. package/dist/compiled/postcss-load-config/package.json +1 -0
  32. package/dist/esm/createBuilder.mjs +59 -0
  33. package/dist/esm/index.mjs +4 -0
  34. package/dist/esm/plugins/devtools.mjs +13 -0
  35. package/dist/esm/plugins/emitRouteFile.mjs +28 -0
  36. package/dist/esm/plugins/environmentDefaults.mjs +66 -0
  37. package/dist/esm/plugins/globalVars.mjs +21 -0
  38. package/dist/esm/plugins/htmlMinify.mjs +81 -0
  39. package/dist/esm/plugins/manifest.mjs +18 -0
  40. package/dist/esm/plugins/postcss.mjs +81 -0
  41. package/dist/esm/plugins/runtimeChunk.mjs +20 -0
  42. package/dist/esm/rsc/common.mjs +87 -0
  43. package/dist/esm/rsc/plugins/rsbuild-rsc-plugin.mjs +124 -0
  44. package/dist/esm/rsc/plugins/rspack-rsc-client-plugin.mjs +143 -0
  45. package/dist/esm/rsc/plugins/rspack-rsc-server-plugin.mjs +211 -0
  46. package/dist/esm/rsc/rsc-client-loader.mjs +37 -0
  47. package/dist/esm/rsc/rsc-css-loader.mjs +8 -0
  48. package/dist/esm/rsc/rsc-server-loader.mjs +58 -0
  49. package/dist/esm/rsc/rsc-ssr-loader.mjs +26 -0
  50. package/dist/esm/shared/devServer.mjs +53 -0
  51. package/dist/esm/shared/getCssSupport.mjs +77 -0
  52. package/dist/esm/shared/manifest.mjs +12 -0
  53. package/dist/esm/shared/parseCommonConfig.mjs +172 -0
  54. package/dist/esm/shared/rsc/rscClientBrowserFallback.mjs +20 -0
  55. package/dist/esm/shared/rsc/rscEmptyModule.mjs +2 -0
  56. package/dist/esm/shared/utils.mjs +53 -0
  57. package/dist/esm/types.mjs +0 -0
  58. package/dist/esm-node/createBuilder.mjs +61 -0
  59. package/dist/esm-node/index.mjs +6 -0
  60. package/dist/esm-node/plugins/devtools.mjs +15 -0
  61. package/dist/esm-node/plugins/emitRouteFile.mjs +30 -0
  62. package/dist/esm-node/plugins/environmentDefaults.mjs +68 -0
  63. package/dist/esm-node/plugins/globalVars.mjs +23 -0
  64. package/dist/esm-node/plugins/htmlMinify.mjs +83 -0
  65. package/dist/esm-node/plugins/manifest.mjs +20 -0
  66. package/dist/esm-node/plugins/postcss.mjs +83 -0
  67. package/dist/esm-node/plugins/runtimeChunk.mjs +22 -0
  68. package/dist/esm-node/rsc/common.mjs +89 -0
  69. package/dist/esm-node/rsc/plugins/rsbuild-rsc-plugin.mjs +126 -0
  70. package/dist/esm-node/rsc/plugins/rspack-rsc-client-plugin.mjs +145 -0
  71. package/dist/esm-node/rsc/plugins/rspack-rsc-server-plugin.mjs +213 -0
  72. package/dist/esm-node/rsc/rsc-client-loader.mjs +39 -0
  73. package/dist/esm-node/rsc/rsc-css-loader.mjs +10 -0
  74. package/dist/esm-node/rsc/rsc-server-loader.mjs +60 -0
  75. package/dist/esm-node/rsc/rsc-ssr-loader.mjs +28 -0
  76. package/dist/esm-node/shared/devServer.mjs +55 -0
  77. package/dist/esm-node/shared/getCssSupport.mjs +79 -0
  78. package/dist/esm-node/shared/manifest.mjs +14 -0
  79. package/dist/esm-node/shared/parseCommonConfig.mjs +174 -0
  80. package/dist/esm-node/shared/rsc/rscClientBrowserFallback.mjs +25 -0
  81. package/dist/esm-node/shared/rsc/rscEmptyModule.mjs +4 -0
  82. package/dist/esm-node/shared/utils.mjs +55 -0
  83. package/dist/esm-node/types.mjs +2 -0
  84. package/dist/types/shared/rsc/rscClientBrowserFallback.d.ts +2 -0
  85. package/dist/types/shared/rsc/rscEmptyModule.d.ts +2 -0
  86. package/dist/{types.d.ts → types/types.d.ts} +2 -16
  87. package/package.json +36 -31
  88. package/dist/createBuilder.js +0 -153
  89. package/dist/index.js +0 -45
  90. package/dist/plugins/babel-post.d.ts +0 -5
  91. package/dist/plugins/babel-post.js +0 -57
  92. package/dist/plugins/devtools.js +0 -42
  93. package/dist/plugins/emitRouteFile.js +0 -70
  94. package/dist/plugins/environmentDefaults.js +0 -99
  95. package/dist/plugins/globalVars.js +0 -50
  96. package/dist/plugins/htmlMinify.js +0 -126
  97. package/dist/plugins/manifest.js +0 -54
  98. package/dist/plugins/postcss.js +0 -133
  99. package/dist/plugins/runtimeChunk.js +0 -55
  100. package/dist/rsc/common.js +0 -174
  101. package/dist/rsc/plugins/rsbuild-rsc-plugin.js +0 -166
  102. package/dist/rsc/plugins/rspack-rsc-client-plugin.js +0 -233
  103. package/dist/rsc/plugins/rspack-rsc-server-plugin.js +0 -290
  104. package/dist/rsc/rsc-client-loader.js +0 -70
  105. package/dist/rsc/rsc-css-loader.js +0 -30
  106. package/dist/rsc/rsc-server-loader.js +0 -95
  107. package/dist/rsc/rsc-ssr-loader.js +0 -58
  108. package/dist/shared/devServer.js +0 -83
  109. package/dist/shared/getCssSupport.js +0 -113
  110. package/dist/shared/manifest.js +0 -38
  111. package/dist/shared/parseCommonConfig.js +0 -232
  112. package/dist/shared/utils.js +0 -109
  113. package/dist/types.js +0 -16
  114. /package/dist/{createBuilder.d.ts → types/createBuilder.d.ts} +0 -0
  115. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  116. /package/dist/{plugins → types/plugins}/devtools.d.ts +0 -0
  117. /package/dist/{plugins → types/plugins}/emitRouteFile.d.ts +0 -0
  118. /package/dist/{plugins → types/plugins}/environmentDefaults.d.ts +0 -0
  119. /package/dist/{plugins → types/plugins}/globalVars.d.ts +0 -0
  120. /package/dist/{plugins → types/plugins}/htmlMinify.d.ts +0 -0
  121. /package/dist/{plugins → types/plugins}/manifest.d.ts +0 -0
  122. /package/dist/{plugins → types/plugins}/postcss.d.ts +0 -0
  123. /package/dist/{plugins → types/plugins}/runtimeChunk.d.ts +0 -0
  124. /package/dist/{rsc → types/rsc}/common.d.ts +0 -0
  125. /package/dist/{rsc → types/rsc}/plugins/rsbuild-rsc-plugin.d.ts +0 -0
  126. /package/dist/{rsc → types/rsc}/plugins/rspack-rsc-client-plugin.d.ts +0 -0
  127. /package/dist/{rsc → types/rsc}/plugins/rspack-rsc-server-plugin.d.ts +0 -0
  128. /package/dist/{rsc → types/rsc}/rsc-client-loader.d.ts +0 -0
  129. /package/dist/{rsc → types/rsc}/rsc-css-loader.d.ts +0 -0
  130. /package/dist/{rsc → types/rsc}/rsc-server-loader.d.ts +0 -0
  131. /package/dist/{rsc → types/rsc}/rsc-ssr-loader.d.ts +0 -0
  132. /package/dist/{shared → types/shared}/devServer.d.ts +0 -0
  133. /package/dist/{shared → types/shared}/getCssSupport.d.ts +0 -0
  134. /package/dist/{shared → types/shared}/manifest.d.ts +0 -0
  135. /package/dist/{shared → types/shared}/parseCommonConfig.d.ts +0 -0
  136. /package/dist/{shared → types/shared}/utils.d.ts +0 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ RspackRscClientPlugin: ()=>RspackRscClientPlugin
37
+ });
38
+ const external_path_namespaceObject = require("path");
39
+ var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
40
+ const external_common_js_namespaceObject = require("../common.js");
41
+ const hasExtension = (filePath)=>'' !== external_path_default().extname(filePath);
42
+ class RspackRscClientPlugin {
43
+ apply(compiler) {
44
+ const { EntryPlugin, RuntimeGlobals, WebpackError, sources: { RawSource } } = compiler.rspack;
45
+ const ssrManifest = {
46
+ moduleMap: {},
47
+ moduleLoading: null,
48
+ styles: []
49
+ };
50
+ const getEntryModule = (compilation)=>{
51
+ const entryModules = [];
52
+ for (const [, entryValue] of compilation.entries.entries()){
53
+ const entryDependency = entryValue.dependencies[0];
54
+ if (!entryDependency) {
55
+ compilation.errors.push(new WebpackError("Could not find an entry dependency."));
56
+ continue;
57
+ }
58
+ const resolvedModule = compilation.moduleGraph.getModule(entryDependency);
59
+ if (resolvedModule) entryModules.push(resolvedModule);
60
+ }
61
+ if (0 === entryModules.length) {
62
+ compilation.errors.push(new WebpackError("Could not find any entries in the compilation."));
63
+ return [];
64
+ }
65
+ return entryModules;
66
+ };
67
+ const addClientReferencesChunks = (compilation, callback)=>{
68
+ const promises = [];
69
+ [
70
+ ...this.clientReferencesMap.keys()
71
+ ].forEach((resourcePath)=>{
72
+ const entries = compilation.entries.entries();
73
+ for (const [entryName, entry] of entries){
74
+ const runtimeName = entry.options.runtime || entryName;
75
+ if (hasExtension(entryName)) continue;
76
+ const dependency = EntryPlugin.createDependency(resourcePath);
77
+ promises.push(new Promise((resolve, reject)=>{
78
+ compilation.addInclude(compiler.context, dependency, {
79
+ name: entryName
80
+ }, (error, module)=>{
81
+ if (error) reject(error);
82
+ else {
83
+ compilation.moduleGraph.getExportsInfo(module).setUsedInUnknownWay(runtimeName);
84
+ this.dependencies.push(dependency);
85
+ resolve(void 0);
86
+ }
87
+ });
88
+ }));
89
+ }
90
+ });
91
+ if (this.styles && this.styles.size > 0) for (const style of this.styles){
92
+ const dependency = EntryPlugin.createDependency(style);
93
+ promises.push(new Promise((resolve, reject)=>{
94
+ compilation.addInclude(compiler.context, dependency, {
95
+ name: void 0
96
+ }, (error, module)=>{
97
+ if (error) reject(error);
98
+ else {
99
+ compilation.moduleGraph.getExportsInfo(module).setUsedInUnknownWay(void 0);
100
+ this.dependencies.push(dependency);
101
+ resolve(void 0);
102
+ }
103
+ });
104
+ }));
105
+ }
106
+ Promise.all(promises).then(()=>callback(null)).catch((error)=>callback(error));
107
+ };
108
+ compiler.hooks.finishMake.tapAsync(RspackRscClientPlugin.name, (compilation, callback)=>{
109
+ const entryModules = getEntryModule(compilation);
110
+ for (const entryModule of entryModules)if (entryModule) addClientReferencesChunks(compilation, callback);
111
+ });
112
+ compiler.hooks.thisCompilation.tap(RspackRscClientPlugin.name, (compilation)=>{
113
+ this.styles = external_common_js_namespaceObject.sharedData.get('styles');
114
+ this.clientReferencesMap = external_common_js_namespaceObject.sharedData.get('clientReferencesMap');
115
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(RspackRscClientPlugin.name, (_chunk, runtimeRequirements)=>{
116
+ runtimeRequirements.add(RuntimeGlobals.ensureChunkHandlers);
117
+ runtimeRequirements.add(RuntimeGlobals.ensureChunk);
118
+ runtimeRequirements.add(RuntimeGlobals.compatGetDefaultExport);
119
+ });
120
+ compilation.hooks.processAssets.tap(RspackRscClientPlugin.name, ()=>{
121
+ const clientManifest = {};
122
+ const { chunkGraph, moduleGraph } = compilation;
123
+ for (const dependency of this.dependencies){
124
+ const module = moduleGraph.getModule(dependency);
125
+ if (!module) continue;
126
+ const resourcePath = module.nameForCondition();
127
+ const clientReferences = resourcePath ? this.clientReferencesMap.get(resourcePath) : void 0;
128
+ if (clientReferences) {
129
+ const moduleId = chunkGraph.getModuleId(module);
130
+ const ssrModuleMetaData = {};
131
+ for (const { id, exportName, ssrId } of clientReferences){
132
+ const clientExportName = exportName;
133
+ const ssrExportName = exportName;
134
+ const chunksSet = new Set();
135
+ for (const chunk of chunkGraph.getModuleChunksIterable(module))chunksSet.add(chunk);
136
+ for (const connection of moduleGraph.getOutgoingConnections(module))for (const chunk of chunkGraph.getModuleChunksIterable(connection.module))chunksSet.add(chunk);
137
+ const chunks = [];
138
+ const styles = [];
139
+ for (const chunk of chunksSet)if (chunk.id) {
140
+ for (const file of chunk.files)if (file.endsWith('.js')) chunks.push(chunk.id, file);
141
+ }
142
+ clientManifest[id] = {
143
+ id: moduleId,
144
+ name: clientExportName,
145
+ chunks,
146
+ styles
147
+ };
148
+ if (ssrId) ssrModuleMetaData[clientExportName] = {
149
+ id: ssrId,
150
+ name: ssrExportName,
151
+ chunks: []
152
+ };
153
+ }
154
+ ssrManifest.moduleMap[moduleId] = ssrModuleMetaData;
155
+ }
156
+ }
157
+ compilation.emitAsset(this.clientManifestFilename, new RawSource(JSON.stringify(clientManifest, null, 2), false));
158
+ const { crossOriginLoading, publicPath = "" } = compilation.outputOptions;
159
+ ssrManifest.moduleLoading = {
160
+ prefix: compilation.getPath(publicPath, {
161
+ hash: compilation.hash ?? "XXXX"
162
+ }),
163
+ crossOrigin: crossOriginLoading ? "use-credentials" === crossOriginLoading ? crossOriginLoading : "" : void 0
164
+ };
165
+ if (this.styles && this.styles.size > 0) {
166
+ const assets = compilation.getAssets();
167
+ const cssAsset = assets.find((asset)=>asset.name.endsWith('.css'));
168
+ if (cssAsset) ssrManifest.styles.push(cssAsset.name);
169
+ }
170
+ compilation.emitAsset(this.ssrManifestFilename, new RawSource(JSON.stringify(ssrManifest, null, 2), false));
171
+ });
172
+ });
173
+ }
174
+ constructor(options){
175
+ this.clientReferencesMap = new Map();
176
+ this.dependencies = [];
177
+ this.clientManifestFilename = options?.clientManifestFilename || "react-client-manifest.json";
178
+ this.ssrManifestFilename = options?.ssrManifestFilename || "react-ssr-manifest.json";
179
+ }
180
+ }
181
+ exports.RspackRscClientPlugin = __webpack_exports__.RspackRscClientPlugin;
182
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
183
+ "RspackRscClientPlugin"
184
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
185
+ Object.defineProperty(exports, '__esModule', {
186
+ value: true
187
+ });
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ RscServerPlugin: ()=>RscServerPlugin
28
+ });
29
+ const external_common_js_namespaceObject = require("../common.js");
30
+ const rspack_rsc_server_plugin_resourcePath2Entries = new Map();
31
+ class RscServerPlugin {
32
+ isValidModule(module) {
33
+ return Boolean(module?.resource);
34
+ }
35
+ hasValidEntries(entries) {
36
+ return Boolean(entries && entries.length > 0);
37
+ }
38
+ getEntryNameFromIssuer(issuer) {
39
+ return issuer.resource ? this.entryPath2Name.get(issuer.resource) : void 0;
40
+ }
41
+ createEntryFromIssuer(issuer, entryName) {
42
+ return {
43
+ entryName,
44
+ entryPath: issuer.resource
45
+ };
46
+ }
47
+ buildModuleToEntriesMapping(compilation) {
48
+ this.moduleToEntries.clear();
49
+ for (const [entryName, entryDependency] of compilation.entries.entries()){
50
+ const entryModule = compilation.moduleGraph.getModule(entryDependency.dependencies[0]);
51
+ if (entryModule) this.traverseModulesFromEntry(entryModule, entryName, compilation.moduleGraph, new Set());
52
+ }
53
+ }
54
+ traverseModulesFromEntry(module, entryName, moduleGraph, visited) {
55
+ if (!module?.resource || visited.has(module.resource)) return;
56
+ visited.add(module.resource);
57
+ if (!this.moduleToEntries.has(module.resource)) this.moduleToEntries.set(module.resource, new Set());
58
+ this.moduleToEntries.get(module.resource).add(entryName);
59
+ for (const connection of moduleGraph.getOutgoingConnections(module))if (connection.module && 'resource' in connection.module) this.traverseModulesFromEntry(connection.module, entryName, moduleGraph, visited);
60
+ }
61
+ findModuleEntries(module, compilation, resourcePath2Entries, visited = new Set()) {
62
+ if (!this.isValidModule(module) || visited.has(module.resource)) return [];
63
+ visited.add(module.resource);
64
+ const currentEntries = resourcePath2Entries.get(module.resource);
65
+ if (this.hasValidEntries(currentEntries)) return currentEntries;
66
+ const entryNames = this.moduleToEntries.get(module.resource);
67
+ if (entryNames && entryNames.size > 0) {
68
+ const entries = [];
69
+ for (const entryName of entryNames){
70
+ const entryPath = this.getEntryPathByName(entryName, compilation);
71
+ if (entryPath) entries.push({
72
+ entryName,
73
+ entryPath
74
+ });
75
+ }
76
+ return entries;
77
+ }
78
+ const issuer = (0, external_common_js_namespaceObject.findRootIssuer)(compilation.moduleGraph, module);
79
+ if (!issuer) return [];
80
+ const issuerEntries = this.findModuleEntries(issuer, compilation, resourcePath2Entries, visited);
81
+ if (issuerEntries.length > 0) return issuerEntries;
82
+ const entryName = this.getEntryNameFromIssuer(issuer);
83
+ if (entryName) return [
84
+ this.createEntryFromIssuer(issuer, entryName)
85
+ ];
86
+ return [];
87
+ }
88
+ getEntryPathByName(entryName, compilation) {
89
+ const entryDependency = compilation.entries.get(entryName);
90
+ if (entryDependency && entryDependency.dependencies.length > 0) {
91
+ const firstDep = entryDependency.dependencies[0];
92
+ if ('request' in firstDep && 'string' == typeof firstDep.request) return firstDep.request;
93
+ }
94
+ }
95
+ apply(compiler) {
96
+ const { EntryPlugin, WebpackError, sources: { RawSource } } = compiler.rspack;
97
+ const includeModule = async (compilation, resource, resourceEntryNames, layer)=>{
98
+ const entries = Array.from(compilation.entries.entries());
99
+ if (0 === entries.length) return void compilation.errors.push(new WebpackError("Could not find an entry in the compilation."));
100
+ const includePromises = entries.filter(([entryName])=>resourceEntryNames?.includes(entryName)).map(([entryName])=>{
101
+ const dependency = EntryPlugin.createDependency(resource);
102
+ return new Promise((resolve, reject)=>{
103
+ compilation.addInclude(compiler.context, dependency, {
104
+ name: entryName,
105
+ layer
106
+ }, (error, module)=>{
107
+ if (error) {
108
+ compilation.errors.push(error);
109
+ return reject(error);
110
+ }
111
+ if (!module) {
112
+ const noModuleError = new WebpackError("Module not added");
113
+ noModuleError.file = resource;
114
+ compilation.errors.push(noModuleError);
115
+ return reject(noModuleError);
116
+ }
117
+ (0, external_common_js_namespaceObject.setRscBuildInfo)(module, {
118
+ __entryName: entryName
119
+ });
120
+ compilation.moduleGraph.getExportsInfo(module).setUsedInUnknownWay(entryName);
121
+ resolve();
122
+ });
123
+ });
124
+ });
125
+ await Promise.all(includePromises);
126
+ };
127
+ let needsAdditionalPass = false;
128
+ compiler.hooks.finishMake.tapPromise(RscServerPlugin.name, async (compilation)=>{
129
+ this.buildModuleToEntriesMapping(compilation);
130
+ const processModules = (modules)=>{
131
+ let hasChangeReference = false;
132
+ for (const module of modules){
133
+ if ('resource' in module && (0, external_common_js_namespaceObject.isCssModule)(module)) this.styles.add(module.resource);
134
+ const buildInfo = (0, external_common_js_namespaceObject.getRscBuildInfo)(module);
135
+ if (!buildInfo || !buildInfo.resourcePath) continue;
136
+ if (module.layer && 'server' === buildInfo.type) external_common_js_namespaceObject.sharedData.set(buildInfo?.resourcePath, buildInfo);
137
+ if (!module.layer && 'client' === buildInfo.type) external_common_js_namespaceObject.sharedData.set(buildInfo?.resourcePath, buildInfo);
138
+ const currentReference = buildInfo?.type === 'client' ? this.clientReferencesMap.get(buildInfo.resourcePath) : this.serverReferencesMap.get(buildInfo.resourcePath);
139
+ if (buildInfo?.type !== 'client' || currentReference) {
140
+ if (buildInfo?.type === 'server' && !currentReference) {
141
+ hasChangeReference = true;
142
+ this.serverReferencesMap.set(buildInfo.resourcePath, buildInfo.exportNames);
143
+ }
144
+ } else {
145
+ hasChangeReference = true;
146
+ this.clientReferencesMap.set(buildInfo.resourcePath, buildInfo.clientReferences);
147
+ }
148
+ const entries = this.findModuleEntries(module, compilation, rspack_rsc_server_plugin_resourcePath2Entries);
149
+ if (entries.length > 0) rspack_rsc_server_plugin_resourcePath2Entries.set(module.resource, entries);
150
+ }
151
+ return hasChangeReference;
152
+ };
153
+ this.serverManifest = {};
154
+ const clientReferences = [
155
+ ...this.clientReferencesMap.keys()
156
+ ];
157
+ const serverReferences = [
158
+ ...this.serverReferencesMap.keys()
159
+ ];
160
+ const referencesBefore = [
161
+ ...clientReferences,
162
+ ...serverReferences
163
+ ];
164
+ let hasChangeReference = false;
165
+ await Promise.all([
166
+ ...clientReferences.map(async (resource)=>{
167
+ try {
168
+ await includeModule(compilation, resource, rspack_rsc_server_plugin_resourcePath2Entries.get(resource)?.map((entry)=>entry.entryName) || []);
169
+ } catch (error) {
170
+ console.error(error);
171
+ hasChangeReference = true;
172
+ this.clientReferencesMap.delete(resource);
173
+ }
174
+ }),
175
+ ...serverReferences.map(async (resource)=>{
176
+ try {
177
+ await includeModule(compilation, resource, rspack_rsc_server_plugin_resourcePath2Entries.get(resource)?.map((entry)=>entry.entryName) || [], external_common_js_namespaceObject.rspackRscLayerName);
178
+ } catch (error) {
179
+ console.error(error);
180
+ hasChangeReference = true;
181
+ this.serverReferencesMap.delete(resource);
182
+ }
183
+ })
184
+ ]);
185
+ hasChangeReference = processModules(compilation.modules);
186
+ const referencesAfter = [
187
+ ...this.clientReferencesMap.keys(),
188
+ ...this.serverReferencesMap.keys()
189
+ ];
190
+ if (referencesBefore.length !== referencesAfter.length || !referencesAfter.every((reference)=>referencesBefore.includes(reference)) && hasChangeReference) needsAdditionalPass = true;
191
+ });
192
+ compiler.hooks.done.tap(RscServerPlugin.name, ()=>{
193
+ external_common_js_namespaceObject.sharedData.set('serverReferencesMap', this.serverReferencesMap);
194
+ external_common_js_namespaceObject.sharedData.set('clientReferencesMap', this.clientReferencesMap);
195
+ external_common_js_namespaceObject.sharedData.set('styles', this.styles);
196
+ });
197
+ compiler.hooks.afterCompile.tap(RscServerPlugin.name, (compilation)=>{
198
+ for (const module of compilation.modules){
199
+ const resource = module.nameForCondition();
200
+ if (!resource) continue;
201
+ const moduleId = compilation.chunkGraph.getModuleId(module);
202
+ if (null !== moduleId) {
203
+ if (module.layer !== external_common_js_namespaceObject.rspackRscLayerName && this.clientReferencesMap.has(resource)) {
204
+ const clientReferences = this.clientReferencesMap.get(resource);
205
+ if (clientReferences) for (const clientReference of clientReferences)clientReference.ssrId = moduleId;
206
+ else compilation.errors.push(new WebpackError(`Could not find client references info in \`clientReferencesMap\` for ${resource}.`));
207
+ } else if (module.layer === external_common_js_namespaceObject.rspackRscLayerName && (0, external_common_js_namespaceObject.getRscBuildInfo)(module)?.type === 'server') {
208
+ const serverReferencesModuleInfo = (0, external_common_js_namespaceObject.getRscBuildInfo)(module);
209
+ if (serverReferencesModuleInfo) {
210
+ serverReferencesModuleInfo.moduleId = moduleId;
211
+ for (const exportName of serverReferencesModuleInfo.exportNames)this.serverManifest[`${moduleId}#${exportName}`] = {
212
+ id: moduleId,
213
+ chunks: [],
214
+ name: exportName
215
+ };
216
+ } else compilation.errors.push(new WebpackError(`Could not find server references module info in \`serverReferencesMap\` for ${resource}.`));
217
+ }
218
+ }
219
+ }
220
+ });
221
+ compiler.hooks.thisCompilation.tap(RscServerPlugin.name, (compilation)=>{
222
+ compilation.hooks.needAdditionalPass.tap(RscServerPlugin.name, ()=>!(needsAdditionalPass = !needsAdditionalPass));
223
+ compilation.hooks.processAssets.tap(RscServerPlugin.name, ()=>{
224
+ compilation.emitAsset(this.serverManifestFilename, new RawSource(JSON.stringify(this.serverManifest, null, 2), false));
225
+ });
226
+ });
227
+ }
228
+ constructor(options){
229
+ this.clientReferencesMap = new Map();
230
+ this.serverReferencesMap = new Map();
231
+ this.serverManifest = {};
232
+ this.entryPath2Name = new Map();
233
+ this.moduleToEntries = new Map();
234
+ this.styles = new Set();
235
+ this.serverManifestFilename = options?.serverManifestFilename || "react-server-manifest.json";
236
+ this.entryPath2Name = options?.entryPath2Name || new Map();
237
+ }
238
+ }
239
+ exports.RscServerPlugin = __webpack_exports__.RscServerPlugin;
240
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
241
+ "RscServerPlugin"
242
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
243
+ Object.defineProperty(exports, '__esModule', {
244
+ value: true
245
+ });
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ default: ()=>rscClientLoader
28
+ });
29
+ const external_common_js_namespaceObject = require("./common.js");
30
+ async function rscClientLoader(source, sourceMap) {
31
+ this.cacheable(true);
32
+ const callback = this.async();
33
+ const ast = await (0, external_common_js_namespaceObject.parseSource)(source);
34
+ const hasUseServerDirective = await (0, external_common_js_namespaceObject.isServerModule)(ast);
35
+ if (!hasUseServerDirective) return void callback(null, source, sourceMap);
36
+ const { callServerImport = "@modern-js/runtime/rsc/client", registerImport = "@modern-js/runtime/rsc/client" } = this.getOptions();
37
+ const buildInfo = external_common_js_namespaceObject.sharedData.get(this.resourcePath);
38
+ const moduleInfo = buildInfo ? {
39
+ moduleId: buildInfo?.moduleId,
40
+ exportNames: buildInfo?.exportNames
41
+ } : null;
42
+ if (!moduleInfo) {
43
+ this.emitError(new Error(`Could not find server module info in \`serverReferencesMap\` for ${this.resourcePath}.`));
44
+ callback(null, '');
45
+ return;
46
+ }
47
+ const { moduleId, exportNames } = moduleInfo;
48
+ if (!moduleId) {
49
+ this.emitError(new Error(`Could not find server module ID in \`serverReferencesMap\` for ${this.resourcePath}.`));
50
+ callback(null, '');
51
+ return;
52
+ }
53
+ if (!exportNames) return void callback(null, '');
54
+ const importsCode = `
55
+ import { createServerReference } from "${registerImport}";
56
+ import { callServer } from "${callServerImport}";
57
+ `;
58
+ const exportsCode = exportNames.map((item)=>{
59
+ const name = item;
60
+ if ('default' === name) return `export default createServerReference("${moduleId}", callServer);`;
61
+ return `export var ${name} = createServerReference("${moduleId}#${name}", callServer);`;
62
+ }).join('\n');
63
+ callback(null, `${importsCode}\n${exportsCode}`);
64
+ }
65
+ exports["default"] = __webpack_exports__["default"];
66
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
67
+ "default"
68
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
69
+ Object.defineProperty(exports, '__esModule', {
70
+ value: true
71
+ });
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ default: ()=>rscCssLoader
28
+ });
29
+ const external_common_js_namespaceObject = require("./common.js");
30
+ function rscCssLoader(source) {
31
+ this._module && (0, external_common_js_namespaceObject.setRscBuildInfo)(this._module, {
32
+ isCssModule: true
33
+ });
34
+ return source;
35
+ }
36
+ exports["default"] = __webpack_exports__["default"];
37
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
38
+ "default"
39
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
40
+ Object.defineProperty(exports, '__esModule', {
41
+ value: true
42
+ });
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ default: ()=>rscServerLoader
37
+ });
38
+ const external_path_namespaceObject = require("path");
39
+ var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
40
+ const core_namespaceObject = require("@swc/core");
41
+ const external_common_js_namespaceObject = require("./common.js");
42
+ function extractMetadata(code) {
43
+ const metadataRegex = /\/\* @modern-js-rsc-metadata\n([\s\S]*?)\*\//;
44
+ const match = code.match(metadataRegex);
45
+ if (!match) return null;
46
+ try {
47
+ const metadata = JSON.parse(match[1]);
48
+ return metadata;
49
+ } catch (e) {
50
+ console.error('Failed to parse metadata:', e);
51
+ return null;
52
+ }
53
+ }
54
+ async function rscServerLoader(source) {
55
+ this.cacheable(true);
56
+ const callback = this.async();
57
+ const { appDir, runtimePath = '@modern-js/runtime/rsc/server' } = this.getOptions();
58
+ const result = await (0, core_namespaceObject.transform)(source, {
59
+ filename: this.resourcePath,
60
+ jsc: {
61
+ target: 'es2020',
62
+ experimental: {
63
+ cacheRoot: external_path_default().resolve(appDir, 'node_modules/.swc'),
64
+ plugins: [
65
+ [
66
+ require.resolve('@modern-js/flight-server-transform-plugin'),
67
+ {
68
+ appDir: appDir,
69
+ runtimePath: runtimePath
70
+ }
71
+ ]
72
+ ]
73
+ }
74
+ },
75
+ isModule: true
76
+ });
77
+ const { code, map } = result;
78
+ const metadata = extractMetadata(code);
79
+ if (metadata?.directive && 'client' === metadata.directive) {
80
+ const { exportNames } = metadata;
81
+ if (exportNames.length > 0) (0, external_common_js_namespaceObject.setRscBuildInfo)(this._module, {
82
+ type: 'client',
83
+ resourcePath: this.resourcePath,
84
+ clientReferences: exportNames
85
+ });
86
+ } else if (metadata) {
87
+ const { exportNames } = metadata;
88
+ if (exportNames.length > 0) (0, external_common_js_namespaceObject.setRscBuildInfo)(this._module, {
89
+ type: 'server',
90
+ resourcePath: this.resourcePath,
91
+ exportNames: exportNames.map((item)=>item.exportName)
92
+ });
93
+ }
94
+ return callback(null, code, map);
95
+ }
96
+ exports["default"] = __webpack_exports__["default"];
97
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
98
+ "default"
99
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
100
+ Object.defineProperty(exports, '__esModule', {
101
+ value: true
102
+ });