@module-federation/rsbuild-plugin 0.0.0-next-20250709032753 → 0.0.0-next-20250709090625

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/dist/utils.js ADDED
@@ -0,0 +1,186 @@
1
+ import * as __WEBPACK_EXTERNAL_MODULE_util__ from "util";
2
+ import * as __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__ from "fs-extra";
3
+ import * as __WEBPACK_EXTERNAL_MODULE_path__ from "path";
4
+ import * as __WEBPACK_EXTERNAL_MODULE__module_federation_sdk_b734f9c5__ from "@module-federation/sdk";
5
+ import * as __WEBPACK_EXTERNAL_MODULE_node_module_ab9f2194__ from "node:module";
6
+ const DEFAULT_ASSET_PREFIX = '/';
7
+ const DATA_FETCH_IDENTIFIER = 'data';
8
+ const DATA_FETCH_CLIENT_SUFFIX = '.client';
9
+ const CALL_NAME_MAP = {
10
+ RSPRESS: 'rspress',
11
+ RSLIB: 'rslib'
12
+ };
13
+ const SPLIT_CHUNK_MAP = {
14
+ REACT: 'react',
15
+ ROUTER: 'router',
16
+ LODASH: 'lib-lodash',
17
+ ANTD: 'lib-antd',
18
+ ARCO: 'lib-arco',
19
+ SEMI: 'lib-semi',
20
+ AXIOS: 'lib-axios'
21
+ };
22
+ const SHARED_SPLIT_CHUNK_MAP = {
23
+ react: SPLIT_CHUNK_MAP.REACT,
24
+ 'react-dom': SPLIT_CHUNK_MAP.REACT,
25
+ 'react-router': SPLIT_CHUNK_MAP.ROUTER,
26
+ 'react-router-dom': SPLIT_CHUNK_MAP.ROUTER,
27
+ '@remix-run/router': SPLIT_CHUNK_MAP.ROUTER,
28
+ lodash: SPLIT_CHUNK_MAP.LODASH,
29
+ 'lodash-es': SPLIT_CHUNK_MAP.LODASH,
30
+ antd: SPLIT_CHUNK_MAP.ANTD,
31
+ '@arco-design/web-react': SPLIT_CHUNK_MAP.ARCO,
32
+ '@douyinfe/semi-ui': SPLIT_CHUNK_MAP.SEMI,
33
+ axios: SPLIT_CHUNK_MAP.AXIOS
34
+ };
35
+ function autoDeleteSplitChunkCacheGroups(mfConfig, splitChunks) {
36
+ if (!mfConfig.shared) return;
37
+ if (!splitChunks || !(null == splitChunks ? void 0 : splitChunks.cacheGroups)) return;
38
+ const arrayShared = Array.isArray(mfConfig.shared) ? mfConfig.shared : Object.keys(mfConfig.shared);
39
+ for (const shared of arrayShared){
40
+ const splitChunkKey = SHARED_SPLIT_CHUNK_MAP[shared];
41
+ if (splitChunkKey) {
42
+ if (splitChunks.cacheGroups[splitChunkKey]) delete splitChunks.cacheGroups[splitChunkKey];
43
+ }
44
+ }
45
+ return splitChunks;
46
+ }
47
+ const addDataFetchExpose = (exposes, key, filepath, suffix = '')=>{
48
+ if (!__WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].existsSync(filepath)) return false;
49
+ const dataFetchKey = '.' === key ? `./${DATA_FETCH_IDENTIFIER}${suffix}` : `${key}.${DATA_FETCH_IDENTIFIER}${suffix}`;
50
+ if (exposes[dataFetchKey] && exposes[dataFetchKey] !== filepath) throw new Error(`data fetch key ${dataFetchKey} already exists, please modify this expose key, do not end with '${DATA_FETCH_IDENTIFIER}' or '${DATA_FETCH_CLIENT_SUFFIX}'`);
51
+ exposes[dataFetchKey] = filepath;
52
+ return dataFetchKey;
53
+ };
54
+ const addExcludeDtsSuffix = (filepath)=>`${filepath}?exclude-mf-dts=true`;
55
+ function addDataFetchExposes(exposes, isServer) {
56
+ if ('object' != typeof exposes || Array.isArray(exposes)) return;
57
+ if (0 === Object.keys(exposes).length) return;
58
+ const tempDataFetchFilepath = __WEBPACK_EXTERNAL_MODULE_path__["default"].resolve(process.cwd(), `node_modules/${__WEBPACK_EXTERNAL_MODULE__module_federation_sdk_b734f9c5__.TEMP_DIR}/data-fetch-fallback.ts`);
59
+ const content = "export const fetchData=()=>{throw new Error('should not be called')};";
60
+ __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].ensureDirSync(__WEBPACK_EXTERNAL_MODULE_path__["default"].dirname(tempDataFetchFilepath));
61
+ __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].writeFileSync(tempDataFetchFilepath, content);
62
+ Object.keys(exposes).forEach((key)=>{
63
+ const expose = exposes[key];
64
+ if ('string' != typeof expose) return;
65
+ const absPath = __WEBPACK_EXTERNAL_MODULE_path__["default"].resolve(process.cwd(), expose);
66
+ const dataFetchPath = `${absPath.replace(__WEBPACK_EXTERNAL_MODULE_path__["default"].extname(absPath), '')}.${DATA_FETCH_IDENTIFIER}.ts`;
67
+ const dataFetchClientPath = `${absPath.replace(__WEBPACK_EXTERNAL_MODULE_path__["default"].extname(absPath), '')}.${DATA_FETCH_IDENTIFIER}.client.ts`;
68
+ const dateFetchClientKey = addDataFetchExpose(exposes, key, dataFetchClientPath, DATA_FETCH_CLIENT_SUFFIX);
69
+ if (!isServer && dateFetchClientKey) {
70
+ exposes[dateFetchClientKey.replace(DATA_FETCH_CLIENT_SUFFIX, '')] = addExcludeDtsSuffix(tempDataFetchFilepath);
71
+ return;
72
+ }
73
+ const dataFetchKey = addDataFetchExpose(exposes, key, dataFetchPath);
74
+ if (dataFetchKey && __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].existsSync(dataFetchClientPath)) exposes[`${dataFetchKey}${DATA_FETCH_CLIENT_SUFFIX}`] = addExcludeDtsSuffix(tempDataFetchFilepath);
75
+ });
76
+ }
77
+ function mergeStats(browserStats, nodeStats) {
78
+ const ssrRemoteEntry = nodeStats.metaData.remoteEntry;
79
+ browserStats.metaData.ssrRemoteEntry = ssrRemoteEntry;
80
+ if ('publicPath' in browserStats.metaData) browserStats.metaData.ssrPublicPath = nodeStats.metaData.publicPath;
81
+ return browserStats;
82
+ }
83
+ function mergeManifest(browserManifest, nodeManifest) {
84
+ const ssrRemoteEntry = nodeManifest.metaData.remoteEntry;
85
+ browserManifest.metaData.ssrRemoteEntry = ssrRemoteEntry;
86
+ if ('publicPath' in browserManifest.metaData) browserManifest.metaData.ssrPublicPath = nodeManifest.metaData.publicPath;
87
+ return browserManifest;
88
+ }
89
+ function mergeStatsAndManifest(nodePlugin, browserPlugin) {
90
+ const nodeResourceInfo = nodePlugin.statsResourceInfo;
91
+ const browserResourceInfo = browserPlugin.statsResourceInfo;
92
+ if (!browserResourceInfo || !nodeResourceInfo || !browserResourceInfo.stats || !nodeResourceInfo.stats || !browserResourceInfo.manifest || !nodeResourceInfo.manifest) throw new Error('can not get browserResourceInfo or nodeResourceInfo');
93
+ const mergedStats = mergeStats(browserResourceInfo.stats.stats, nodeResourceInfo.stats.stats);
94
+ const mergedManifest = mergeManifest(browserResourceInfo.manifest.manifest, nodeResourceInfo.manifest.manifest);
95
+ return {
96
+ mergedStats: mergedStats,
97
+ mergedStatsFilePath: browserResourceInfo.stats.filename,
98
+ mergedManifest: mergedManifest,
99
+ mergedManifestFilePath: browserResourceInfo.manifest.filename
100
+ };
101
+ }
102
+ function updateStatsAndManifest(nodePlugin, browserPlugin, outputDir) {
103
+ const { mergedStats, mergedStatsFilePath, mergedManifest, mergedManifestFilePath } = mergeStatsAndManifest(nodePlugin, browserPlugin);
104
+ __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].writeFileSync(__WEBPACK_EXTERNAL_MODULE_path__["default"].resolve(outputDir, mergedStatsFilePath), JSON.stringify(mergedStats, null, 2));
105
+ __WEBPACK_EXTERNAL_MODULE_fs_extra_ce68a66b__["default"].writeFileSync(__WEBPACK_EXTERNAL_MODULE_path__["default"].resolve(outputDir, mergedManifestFilePath), JSON.stringify(mergedManifest, null, 2));
106
+ }
107
+ const ssr_require = (0, __WEBPACK_EXTERNAL_MODULE_node_module_ab9f2194__.createRequire)(import.meta.url);
108
+ const resolve = ssr_require.resolve;
109
+ const SSR_DIR = 'ssr';
110
+ const SSR_ENV_NAME = 'mf-ssr';
111
+ function setSSREnv() {
112
+ process.env['MF_DISABLE_EMIT_STATS'] = 'true';
113
+ process.env['MF_SSR_PRJ'] = 'true';
114
+ }
115
+ const isDev = ()=>'development' === process.env.NODE_ENV;
116
+ function patchSSRRspackConfig(config, mfConfig, ssrDir, callerName, resetEntry = true, modifyPublicPath = true) {
117
+ var _config_output;
118
+ config.output ||= {};
119
+ if (modifyPublicPath) {
120
+ var _config_output1;
121
+ if ('string' != typeof (null == (_config_output1 = config.output) ? void 0 : _config_output1.publicPath)) throw new Error('publicPath must be string!');
122
+ const publicPath = config.output.publicPath;
123
+ if ('auto' === publicPath) throw new Error('publicPath can not be "auto"!');
124
+ const publicPathWithSSRDir = `${publicPath}${ssrDir}/`;
125
+ config.output.publicPath = publicPathWithSSRDir;
126
+ }
127
+ if (callerName === CALL_NAME_MAP.RSPRESS && resetEntry) config.entry = 'data:application/node;base64,';
128
+ config.target = 'async-node';
129
+ const UniverseEntryChunkTrackerPlugin = ssr_require('@module-federation/node/universe-entry-chunk-tracker-plugin').default;
130
+ config.plugins ||= [];
131
+ isDev() && config.plugins.push(new UniverseEntryChunkTrackerPlugin());
132
+ const uniqueName = mfConfig.name || (null == (_config_output = config.output) ? void 0 : _config_output.uniqueName);
133
+ const chunkFileName = config.output.chunkFilename;
134
+ if ('string' == typeof chunkFileName && uniqueName && !chunkFileName.includes(uniqueName)) {
135
+ const suffix = `${(0, __WEBPACK_EXTERNAL_MODULE__module_federation_sdk_b734f9c5__.encodeName)(uniqueName)}-[contenthash].js`;
136
+ config.output.chunkFilename = chunkFileName.replace('.js', suffix);
137
+ }
138
+ return config;
139
+ }
140
+ function createSSRREnvConfig(envConfig, mfConfig, ssrDir, rsbuildConfig, callerName) {
141
+ var _ssrEnvConfig_output, _ssrEnvConfig_output_distPath, _ssrEnvConfig_output1, _rsbuildConfig_output_distPath, _rsbuildConfig_output;
142
+ const ssrEnvConfig = {
143
+ ...envConfig,
144
+ tools: {
145
+ rspack: (config, { environment })=>{
146
+ if (environment.name !== SSR_ENV_NAME) return;
147
+ patchSSRRspackConfig(config, mfConfig, ssrDir, callerName);
148
+ }
149
+ }
150
+ };
151
+ ssrEnvConfig.output = {
152
+ ...ssrEnvConfig.output,
153
+ target: 'node',
154
+ distPath: {
155
+ ...null == (_ssrEnvConfig_output = ssrEnvConfig.output) ? void 0 : _ssrEnvConfig_output.distPath,
156
+ root: __WEBPACK_EXTERNAL_MODULE_path__["default"].join((null == (_ssrEnvConfig_output1 = ssrEnvConfig.output) ? void 0 : null == (_ssrEnvConfig_output_distPath = _ssrEnvConfig_output1.distPath) ? void 0 : _ssrEnvConfig_output_distPath.root) || (null == (_rsbuildConfig_output = rsbuildConfig.output) ? void 0 : null == (_rsbuildConfig_output_distPath = _rsbuildConfig_output.distPath) ? void 0 : _rsbuildConfig_output_distPath.root) || '', ssrDir)
157
+ }
158
+ };
159
+ return ssrEnvConfig;
160
+ }
161
+ function createSSRMFConfig(mfConfig) {
162
+ var _mfConfig_library;
163
+ const ssrMFConfig = {
164
+ ...mfConfig,
165
+ exposes: {
166
+ ...mfConfig.exposes
167
+ },
168
+ library: {
169
+ ...mfConfig.library,
170
+ name: mfConfig.name,
171
+ type: (null == (_mfConfig_library = mfConfig.library) ? void 0 : _mfConfig_library.type) ?? 'commonjs-module'
172
+ },
173
+ dts: false,
174
+ dev: false,
175
+ runtimePlugins: [
176
+ ...mfConfig.runtimePlugins || []
177
+ ]
178
+ };
179
+ ssrMFConfig.runtimePlugins.push(resolve('@module-federation/node/runtimePlugin'));
180
+ if (isDev()) ssrMFConfig.runtimePlugins.push(resolve('@module-federation/node/record-dynamic-remote-entry-hash-plugin'));
181
+ return ssrMFConfig;
182
+ }
183
+ function isRegExp(target) {
184
+ return __WEBPACK_EXTERNAL_MODULE_util__["default"].types.isRegExp(target);
185
+ }
186
+ export { DEFAULT_ASSET_PREFIX, SSR_DIR, SSR_ENV_NAME, addDataFetchExposes, autoDeleteSplitChunkCacheGroups, createSSRMFConfig, createSSRREnvConfig, isRegExp, patchSSRRspackConfig, setSSREnv, updateStatsAndManifest };
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@module-federation/rsbuild-plugin",
3
- "version": "0.0.0-next-20250709032753",
3
+ "version": "0.0.0-next-20250709090625",
4
4
  "description": "Module Federation plugin for Rsbuild",
5
5
  "homepage": "https://module-federation.io",
6
+ "type": "module",
6
7
  "bugs": {
7
8
  "url": "https://github.com/module-federation/core/issues"
8
9
  },
@@ -14,33 +15,34 @@
14
15
  "license": "MIT",
15
16
  "exports": {
16
17
  ".": {
17
- "types": "./dist/index.cjs.d.ts",
18
- "import": "./dist/index.esm.mjs",
19
- "require": "./dist/index.cjs.js"
18
+ "types": "./dist/cli/index.d.ts",
19
+ "import": "./dist/index.js",
20
+ "require": "./dist/index.cjs"
20
21
  },
21
22
  "./utils": {
22
- "types": "./dist/utils.cjs.d.ts",
23
- "import": "./dist/utils.esm.mjs",
24
- "require": "./dist/utils.cjs.js"
23
+ "types": "./dist/utils/index.d.ts",
24
+ "import": "./dist/utils.js",
25
+ "require": "./dist/utils.cjs"
25
26
  },
26
27
  "./constant": {
27
- "types": "./dist/constant.cjs.d.ts",
28
- "import": "./dist/constant.esm.mjs",
29
- "require": "./dist/constant.cjs.js"
28
+ "types": "./dist/constant.d.ts",
29
+ "import": "./dist/constant.js",
30
+ "require": "./dist/constant.cjs"
30
31
  }
31
32
  },
32
- "main": "./dist/index.cjs.js",
33
- "module": "./dist/index.esm.mjs",
33
+ "main": "./dist/index.cjs",
34
+ "module": "./dist/index.js",
35
+ "types": "./dist/cli/index.d.ts",
34
36
  "typesVersions": {
35
37
  "*": {
36
38
  ".": [
37
- "./dist/index.cjs.d.ts"
39
+ "./dist/cli/index.d.ts"
38
40
  ],
39
41
  "utils": [
40
- "./dist/utils.cjs.d.ts"
42
+ "./dist/utils/index.d.ts"
41
43
  ],
42
44
  "constant": [
43
- "./dist/constant.cjs.d.ts"
45
+ "./dist/constant.d.ts"
44
46
  ]
45
47
  }
46
48
  },
@@ -49,9 +51,9 @@
49
51
  ],
50
52
  "dependencies": {
51
53
  "fs-extra": "11.3.0",
52
- "@module-federation/sdk": "0.0.0-next-20250709032753",
53
- "@module-federation/enhanced": "0.0.0-next-20250709032753",
54
- "@module-federation/node": "0.0.0-next-20250709032753"
54
+ "@module-federation/sdk": "0.0.0-next-20250709090625",
55
+ "@module-federation/enhanced": "0.0.0-next-20250709090625",
56
+ "@module-federation/node": "0.0.0-next-20250709090625"
55
57
  },
56
58
  "devDependencies": {
57
59
  "@rsbuild/core": "^1.3.21"
@@ -71,5 +73,9 @@
71
73
  "access": "public",
72
74
  "provenance": true,
73
75
  "registry": "https://registry.npmjs.org/"
76
+ },
77
+ "scripts": {
78
+ "build": "rslib build",
79
+ "dev": "rslib build --watch"
74
80
  }
75
81
  }
@@ -1 +0,0 @@
1
- export * from "./src/constant";
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var DEFAULT_ASSET_PREFIX = '/';
4
- var DATA_FETCH_IDENTIFIER = 'data';
5
- var DATA_FETCH_CLIENT_SUFFIX = '.client';
6
- var CALL_NAME_MAP = {
7
- RSPRESS: 'rspress',
8
- RSLIB: 'rslib'
9
- };
10
- var RSPRESS_BUNDLER_CONFIG_NAME = 'node';
11
- var RSPRESS_SSR_DIR = 'ssr';
12
-
13
- exports.CALL_NAME_MAP = CALL_NAME_MAP;
14
- exports.DATA_FETCH_CLIENT_SUFFIX = DATA_FETCH_CLIENT_SUFFIX;
15
- exports.DATA_FETCH_IDENTIFIER = DATA_FETCH_IDENTIFIER;
16
- exports.DEFAULT_ASSET_PREFIX = DEFAULT_ASSET_PREFIX;
17
- exports.RSPRESS_BUNDLER_CONFIG_NAME = RSPRESS_BUNDLER_CONFIG_NAME;
18
- exports.RSPRESS_SSR_DIR = RSPRESS_SSR_DIR;
@@ -1 +0,0 @@
1
- export * from "./src/constant";
@@ -1,11 +0,0 @@
1
- var DEFAULT_ASSET_PREFIX = '/';
2
- var DATA_FETCH_IDENTIFIER = 'data';
3
- var DATA_FETCH_CLIENT_SUFFIX = '.client';
4
- var CALL_NAME_MAP = {
5
- RSPRESS: 'rspress',
6
- RSLIB: 'rslib'
7
- };
8
- var RSPRESS_BUNDLER_CONFIG_NAME = 'node';
9
- var RSPRESS_SSR_DIR = 'ssr';
10
-
11
- export { CALL_NAME_MAP, DATA_FETCH_CLIENT_SUFFIX, DATA_FETCH_IDENTIFIER, DEFAULT_ASSET_PREFIX, RSPRESS_BUNDLER_CONFIG_NAME, RSPRESS_SSR_DIR };
@@ -1 +0,0 @@
1
- export * from "./src/cli/index";