@module-federation/modern-js 0.14.3 → 0.16.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.
- package/dist/cjs/cli/configPlugin.js +18 -14
- package/dist/cjs/cli/configPlugin.spec.js +3 -1
- package/dist/cjs/cli/index.js +3 -1
- package/dist/cjs/cli/mfRuntimePlugins/auto-fetch-data.js +100 -0
- package/dist/cjs/cli/server/data-fetch-server-plugin.js +189 -0
- package/dist/cjs/cli/ssrPlugin.js +33 -14
- package/dist/cjs/cli/utils.js +5 -0
- package/dist/cjs/constant.js +49 -2
- package/dist/cjs/{ssr-runtime/index.js → interfaces/global.js} +2 -8
- package/dist/cjs/{cli/logger.js → logger.js} +1 -1
- package/dist/cjs/runtime/AwaitDataFetch.js +144 -0
- package/dist/cjs/runtime/createRemoteComponent.js +327 -0
- package/dist/cjs/runtime/index.js +15 -3
- package/dist/cjs/{cli/constant.js → runtime/wrapNoSSR.js} +13 -6
- package/dist/cjs/ssr-runtime/{plugin.js → devPlugin.js} +9 -6
- package/dist/cjs/ssr-runtime/downgrade.js +114 -0
- package/dist/cjs/ssr-runtime/injectDataFetchFunctionPlugin.js +136 -0
- package/dist/cjs/utils/dataFetch.js +211 -0
- package/dist/cjs/utils/index.js +54 -0
- package/dist/esm/cli/configPlugin.js +19 -15
- package/dist/esm/cli/configPlugin.spec.js +3 -1
- package/dist/esm/cli/index.js +3 -1
- package/dist/esm/cli/mfRuntimePlugins/auto-fetch-data.js +76 -0
- package/dist/esm/cli/server/data-fetch-server-plugin.js +237 -0
- package/dist/esm/cli/ssrPlugin.js +28 -8
- package/dist/esm/cli/utils.js +4 -0
- package/dist/esm/constant.js +37 -1
- package/dist/esm/interfaces/global.js +0 -0
- package/dist/esm/{cli/logger.js → logger.js} +1 -1
- package/dist/esm/runtime/AwaitDataFetch.js +131 -0
- package/dist/esm/runtime/createRemoteComponent.js +417 -0
- package/dist/esm/runtime/index.js +13 -3
- package/dist/esm/runtime/wrapNoSSR.js +12 -0
- package/dist/esm/ssr-runtime/{plugin.js → devPlugin.js} +5 -2
- package/dist/esm/ssr-runtime/downgrade.js +150 -0
- package/dist/esm/ssr-runtime/injectDataFetchFunctionPlugin.js +177 -0
- package/dist/esm/utils/dataFetch.js +237 -0
- package/dist/esm/utils/index.js +28 -0
- package/dist/esm-node/cli/configPlugin.js +19 -15
- package/dist/esm-node/cli/configPlugin.spec.js +3 -1
- package/dist/esm-node/cli/index.js +3 -1
- package/dist/esm-node/cli/mfRuntimePlugins/auto-fetch-data.js +70 -0
- package/dist/esm-node/cli/server/data-fetch-server-plugin.js +159 -0
- package/dist/esm-node/cli/ssrPlugin.js +27 -8
- package/dist/esm-node/cli/utils.js +4 -0
- package/dist/esm-node/constant.js +37 -1
- package/dist/esm-node/interfaces/global.js +0 -0
- package/dist/esm-node/{cli/logger.js → logger.js} +1 -1
- package/dist/esm-node/runtime/AwaitDataFetch.js +109 -0
- package/dist/esm-node/runtime/createRemoteComponent.js +291 -0
- package/dist/esm-node/runtime/index.js +13 -3
- package/dist/esm-node/runtime/wrapNoSSR.js +11 -0
- package/dist/esm-node/ssr-runtime/{plugin.js → devPlugin.js} +5 -2
- package/dist/esm-node/ssr-runtime/downgrade.js +88 -0
- package/dist/esm-node/ssr-runtime/injectDataFetchFunctionPlugin.js +101 -0
- package/dist/esm-node/utils/dataFetch.js +166 -0
- package/dist/esm-node/utils/index.js +27 -0
- package/dist/types/cli/configPlugin.d.ts +1 -1
- package/dist/types/cli/index.d.ts +1 -0
- package/dist/types/cli/mfRuntimePlugins/auto-fetch-data.d.ts +3 -0
- package/dist/types/cli/server/data-fetch-server-plugin.d.ts +3 -0
- package/dist/types/cli/utils.d.ts +1 -0
- package/dist/types/constant.d.ts +23 -0
- package/dist/types/interfaces/global.d.ts +27 -0
- package/dist/types/runtime/AwaitDataFetch.d.ts +19 -0
- package/dist/types/runtime/createRemoteComponent.d.ts +26 -0
- package/dist/types/runtime/index.d.ts +7 -2
- package/dist/types/runtime/wrapNoSSR.d.ts +9 -0
- package/dist/types/ssr-runtime/devPlugin.d.ts +2 -0
- package/dist/types/ssr-runtime/downgrade.d.ts +4 -0
- package/dist/types/ssr-runtime/injectDataFetchFunctionPlugin.d.ts +7 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/utils/dataFetch.d.ts +26 -0
- package/dist/types/utils/index.d.ts +15 -0
- package/package.json +37 -12
- package/dist/cjs/cli/manifest.js +0 -75
- package/dist/cjs/runtime/createRemoteSSRComponent.js +0 -201
- package/dist/esm/cli/constant.js +0 -4
- package/dist/esm/cli/manifest.js +0 -41
- package/dist/esm/runtime/createRemoteSSRComponent.js +0 -191
- package/dist/esm/ssr-runtime/index.js +0 -1
- package/dist/esm-node/cli/constant.js +0 -4
- package/dist/esm-node/cli/manifest.js +0 -41
- package/dist/esm-node/runtime/createRemoteSSRComponent.js +0 -166
- package/dist/esm-node/ssr-runtime/index.js +0 -1
- package/dist/types/cli/constant.d.ts +0 -1
- package/dist/types/cli/manifest.d.ts +0 -2
- package/dist/types/runtime/createRemoteSSRComponent.d.ts +0 -18
- package/dist/types/ssr-runtime/index.d.ts +0 -1
- package/dist/types/ssr-runtime/plugin.d.ts +0 -2
- /package/dist/types/{cli/logger.d.ts → logger.d.ts} +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
2
|
+
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
|
3
|
+
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
4
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
|
+
import { DATA_FETCH_QUERY, MF_DATA_FETCH_STATUS } from "../../constant";
|
|
6
|
+
import logger from "../../logger";
|
|
7
|
+
import { getDataFetchMap } from "../../utils";
|
|
8
|
+
import { fetchData, initDataFetchMap, loadDataFetchModule } from "../../utils/dataFetch";
|
|
9
|
+
import { SEPARATOR, MANIFEST_EXT } from "@module-federation/sdk";
|
|
10
|
+
function wrapSetTimeout(targetPromise) {
|
|
11
|
+
var delay = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2e4, id = arguments.length > 2 ? arguments[2] : void 0;
|
|
12
|
+
if (targetPromise && typeof targetPromise.then === "function") {
|
|
13
|
+
return new Promise(function(resolve, reject) {
|
|
14
|
+
var timeoutId = setTimeout(function() {
|
|
15
|
+
logger.warn("Data fetch for ID ".concat(id, " timed out after 20 seconds."));
|
|
16
|
+
reject(new Error("Data fetch for ID ".concat(id, " timed out after 20 seconds")));
|
|
17
|
+
}, delay);
|
|
18
|
+
targetPromise.then(function(value) {
|
|
19
|
+
clearTimeout(timeoutId);
|
|
20
|
+
resolve(value);
|
|
21
|
+
}).catch(function(err) {
|
|
22
|
+
clearTimeout(timeoutId);
|
|
23
|
+
reject(err);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function addProtocol(url) {
|
|
29
|
+
if (url.startsWith("//")) {
|
|
30
|
+
return "https:" + url;
|
|
31
|
+
}
|
|
32
|
+
return url;
|
|
33
|
+
}
|
|
34
|
+
var getDecodeQuery = function(url, name) {
|
|
35
|
+
var res = url.searchParams.get(name);
|
|
36
|
+
if (!res) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return decodeURIComponent(res);
|
|
40
|
+
};
|
|
41
|
+
var middleware = function() {
|
|
42
|
+
var _ref = _async_to_generator(function(ctx, next) {
|
|
43
|
+
var _globalThis___FEDERATION__, url, dataFetchId, params, remoteInfo, remoteInfoQuery, _dataFetchMap_dataFetchId, _dataFetchMap_dataFetchId1, dataFetchMap, fetchDataPromise, targetPromise, wrappedPromise, res, hostInstance, remoteEntry, remote, _hostInstance_snapshotHandler_getGlobalRemoteInfo, hostGlobalSnapshot, remoteSnapshot, dataFetchItem, callFetchDataPromise, wrappedPromise1, res1, remoteId, hostInstance1, dataFetchFn, data, e;
|
|
44
|
+
return _ts_generator(this, function(_state) {
|
|
45
|
+
switch (_state.label) {
|
|
46
|
+
case 0:
|
|
47
|
+
try {
|
|
48
|
+
url = new URL(ctx.req.url);
|
|
49
|
+
dataFetchId = getDecodeQuery(url, DATA_FETCH_QUERY);
|
|
50
|
+
params = JSON.parse(getDecodeQuery(url, "params") || "{}");
|
|
51
|
+
remoteInfoQuery = getDecodeQuery(url, "remoteInfo");
|
|
52
|
+
remoteInfo = remoteInfoQuery ? JSON.parse(remoteInfoQuery) : null;
|
|
53
|
+
} catch (e2) {
|
|
54
|
+
logger.error("fetch data from server, error: ", e2);
|
|
55
|
+
return [
|
|
56
|
+
2,
|
|
57
|
+
next()
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
if (!dataFetchId) {
|
|
61
|
+
return [
|
|
62
|
+
2,
|
|
63
|
+
next()
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
logger.log("fetch data from server, dataFetchId: ", dataFetchId);
|
|
67
|
+
logger.debug("fetch data from server, moduleInfo: ", (_globalThis___FEDERATION__ = globalThis.__FEDERATION__) === null || _globalThis___FEDERATION__ === void 0 ? void 0 : _globalThis___FEDERATION__.moduleInfo);
|
|
68
|
+
_state.label = 1;
|
|
69
|
+
case 1:
|
|
70
|
+
_state.trys.push([
|
|
71
|
+
1,
|
|
72
|
+
9,
|
|
73
|
+
,
|
|
74
|
+
10
|
|
75
|
+
]);
|
|
76
|
+
dataFetchMap = getDataFetchMap();
|
|
77
|
+
if (!dataFetchMap) {
|
|
78
|
+
initDataFetchMap();
|
|
79
|
+
}
|
|
80
|
+
fetchDataPromise = (_dataFetchMap_dataFetchId = dataFetchMap[dataFetchId]) === null || _dataFetchMap_dataFetchId === void 0 ? void 0 : _dataFetchMap_dataFetchId[1];
|
|
81
|
+
logger.debug("fetch data from server, fetchDataPromise: ", fetchDataPromise);
|
|
82
|
+
if (!(fetchDataPromise && ((_dataFetchMap_dataFetchId1 = dataFetchMap[dataFetchId]) === null || _dataFetchMap_dataFetchId1 === void 0 ? void 0 : _dataFetchMap_dataFetchId1[2]) !== MF_DATA_FETCH_STATUS.ERROR))
|
|
83
|
+
return [
|
|
84
|
+
3,
|
|
85
|
+
4
|
|
86
|
+
];
|
|
87
|
+
targetPromise = fetchDataPromise[0];
|
|
88
|
+
wrappedPromise = wrapSetTimeout(targetPromise, 2e4, dataFetchId);
|
|
89
|
+
if (!wrappedPromise)
|
|
90
|
+
return [
|
|
91
|
+
3,
|
|
92
|
+
3
|
|
93
|
+
];
|
|
94
|
+
return [
|
|
95
|
+
4,
|
|
96
|
+
wrappedPromise
|
|
97
|
+
];
|
|
98
|
+
case 2:
|
|
99
|
+
res = _state.sent();
|
|
100
|
+
logger.log("fetch data from server, fetchDataPromise res: ", res);
|
|
101
|
+
return [
|
|
102
|
+
2,
|
|
103
|
+
ctx.json(res)
|
|
104
|
+
];
|
|
105
|
+
case 3:
|
|
106
|
+
logger.error("Expected a Promise from fetchDataPromise[0] for dataFetchId ".concat(dataFetchId, ", but received:"), targetPromise, "Will try call new dataFetch again...");
|
|
107
|
+
_state.label = 4;
|
|
108
|
+
case 4:
|
|
109
|
+
if (remoteInfo) {
|
|
110
|
+
try {
|
|
111
|
+
hostInstance = globalThis.__FEDERATION__.__INSTANCES__[0];
|
|
112
|
+
remoteEntry = "".concat(addProtocol(remoteInfo.ssrPublicPath) + remoteInfo.ssrRemoteEntry);
|
|
113
|
+
if (!hostInstance) {
|
|
114
|
+
throw new Error("host instance not found!");
|
|
115
|
+
}
|
|
116
|
+
remote = hostInstance.options.remotes.find(function(remote2) {
|
|
117
|
+
return remote2.name === remoteInfo.name;
|
|
118
|
+
});
|
|
119
|
+
logger.debug("find remote: ", JSON.stringify(remote));
|
|
120
|
+
if (!remote) {
|
|
121
|
+
hostInstance.registerRemotes([
|
|
122
|
+
{
|
|
123
|
+
name: remoteInfo.name,
|
|
124
|
+
entry: remoteEntry,
|
|
125
|
+
entryGlobalName: remoteInfo.globalName
|
|
126
|
+
}
|
|
127
|
+
]);
|
|
128
|
+
} else if (!("entry" in remote) || !remote.entry.includes(MANIFEST_EXT)) {
|
|
129
|
+
_hostInstance_snapshotHandler_getGlobalRemoteInfo = hostInstance.snapshotHandler.getGlobalRemoteInfo(remoteInfo), hostGlobalSnapshot = _hostInstance_snapshotHandler_getGlobalRemoteInfo.hostGlobalSnapshot, remoteSnapshot = _hostInstance_snapshotHandler_getGlobalRemoteInfo.remoteSnapshot;
|
|
130
|
+
logger.debug("find hostGlobalSnapshot: ", JSON.stringify(hostGlobalSnapshot));
|
|
131
|
+
logger.debug("find remoteSnapshot: ", JSON.stringify(remoteSnapshot));
|
|
132
|
+
if (!hostGlobalSnapshot || !remoteSnapshot) {
|
|
133
|
+
if ("version" in remote) {
|
|
134
|
+
delete remote.version;
|
|
135
|
+
}
|
|
136
|
+
remote.entry = remoteEntry;
|
|
137
|
+
remote.entryGlobalName = remoteInfo.globalName;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
} catch (e2) {
|
|
141
|
+
ctx.status(500);
|
|
142
|
+
return [
|
|
143
|
+
2,
|
|
144
|
+
ctx.text("failed to fetch ".concat(remoteInfo.name, " data, error:\n ").concat(e2))
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
dataFetchItem = dataFetchMap[dataFetchId];
|
|
149
|
+
logger.debug("fetch data from server, dataFetchItem: ", dataFetchItem);
|
|
150
|
+
if (!dataFetchItem)
|
|
151
|
+
return [
|
|
152
|
+
3,
|
|
153
|
+
6
|
|
154
|
+
];
|
|
155
|
+
callFetchDataPromise = fetchData(dataFetchId, _object_spread_props(_object_spread({}, params), {
|
|
156
|
+
isDowngrade: !remoteInfo
|
|
157
|
+
}));
|
|
158
|
+
wrappedPromise1 = wrapSetTimeout(callFetchDataPromise, 2e4, dataFetchId);
|
|
159
|
+
if (!wrappedPromise1)
|
|
160
|
+
return [
|
|
161
|
+
3,
|
|
162
|
+
6
|
|
163
|
+
];
|
|
164
|
+
return [
|
|
165
|
+
4,
|
|
166
|
+
wrappedPromise1
|
|
167
|
+
];
|
|
168
|
+
case 5:
|
|
169
|
+
res1 = _state.sent();
|
|
170
|
+
logger.log("fetch data from server, dataFetchItem res: ", res1);
|
|
171
|
+
return [
|
|
172
|
+
2,
|
|
173
|
+
ctx.json(res1)
|
|
174
|
+
];
|
|
175
|
+
case 6:
|
|
176
|
+
remoteId = dataFetchId.split(SEPARATOR)[0];
|
|
177
|
+
hostInstance1 = globalThis.__FEDERATION__.__INSTANCES__[0];
|
|
178
|
+
if (!hostInstance1) {
|
|
179
|
+
throw new Error("host instance not found!");
|
|
180
|
+
}
|
|
181
|
+
return [
|
|
182
|
+
4,
|
|
183
|
+
loadDataFetchModule(hostInstance1, remoteId)
|
|
184
|
+
];
|
|
185
|
+
case 7:
|
|
186
|
+
dataFetchFn = _state.sent();
|
|
187
|
+
return [
|
|
188
|
+
4,
|
|
189
|
+
dataFetchFn(_object_spread_props(_object_spread({}, params), {
|
|
190
|
+
isDowngrade: !remoteInfo
|
|
191
|
+
}))
|
|
192
|
+
];
|
|
193
|
+
case 8:
|
|
194
|
+
data = _state.sent();
|
|
195
|
+
logger.log("fetch data from server, loadDataFetchModule res: ", data);
|
|
196
|
+
return [
|
|
197
|
+
2,
|
|
198
|
+
ctx.json(data)
|
|
199
|
+
];
|
|
200
|
+
case 9:
|
|
201
|
+
e = _state.sent();
|
|
202
|
+
logger.error("server plugin data fetch error: ", e);
|
|
203
|
+
ctx.status(500);
|
|
204
|
+
return [
|
|
205
|
+
2,
|
|
206
|
+
ctx.text("failed to fetch ".concat(remoteInfo.name, " data, error:\n ").concat(e))
|
|
207
|
+
];
|
|
208
|
+
case 10:
|
|
209
|
+
return [
|
|
210
|
+
2
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
return function middleware2(ctx, next) {
|
|
216
|
+
return _ref.apply(this, arguments);
|
|
217
|
+
};
|
|
218
|
+
}();
|
|
219
|
+
var dataFetchServePlugin = function() {
|
|
220
|
+
return {
|
|
221
|
+
name: "mf-data-fetch-server-plugin",
|
|
222
|
+
setup: function(api) {
|
|
223
|
+
api.onPrepare(function() {
|
|
224
|
+
var middlewares = api.getServerContext().middlewares;
|
|
225
|
+
middlewares.push({
|
|
226
|
+
name: "module-federation-serve-manifest",
|
|
227
|
+
// @ts-ignore type error
|
|
228
|
+
handler: middleware
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
};
|
|
234
|
+
var data_fetch_server_plugin_default = dataFetchServePlugin;
|
|
235
|
+
export {
|
|
236
|
+
data_fetch_server_plugin_default as default
|
|
237
|
+
};
|
|
@@ -6,9 +6,9 @@ import fs from "fs-extra";
|
|
|
6
6
|
import { ModuleFederationPlugin } from "@module-federation/enhanced/webpack";
|
|
7
7
|
import { ModuleFederationPlugin as RspackModuleFederationPlugin } from "@module-federation/enhanced/rspack";
|
|
8
8
|
import UniverseEntryChunkTrackerPlugin from "@module-federation/node/universe-entry-chunk-tracker-plugin";
|
|
9
|
-
import
|
|
10
|
-
import { isDev } from "./
|
|
11
|
-
import
|
|
9
|
+
import logger from "../logger";
|
|
10
|
+
import { isDev } from "./utils";
|
|
11
|
+
import { updateStatsAndManifest } from "@module-federation/rsbuild-plugin/utils";
|
|
12
12
|
import { isWebTarget, skipByTarget } from "./utils";
|
|
13
13
|
function setEnv() {
|
|
14
14
|
process.env["MF_DISABLE_EMIT_STATS"] = "true";
|
|
@@ -85,15 +85,23 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
|
|
|
85
85
|
setEnv();
|
|
86
86
|
api._internalRuntimePlugins(function(param) {
|
|
87
87
|
var entrypoint = param.entrypoint, plugins = param.plugins;
|
|
88
|
-
|
|
88
|
+
var fetchServerQuery = pluginOptions.fetchServerQuery;
|
|
89
|
+
plugins.push({
|
|
90
|
+
name: "injectDataFetchFunction",
|
|
91
|
+
path: "@module-federation/modern-js/ssr-inject-data-fetch-function-plugin",
|
|
92
|
+
config: {
|
|
93
|
+
fetchServerQuery
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (!isDev()) {
|
|
89
97
|
return {
|
|
90
98
|
entrypoint,
|
|
91
99
|
plugins
|
|
92
100
|
};
|
|
93
101
|
}
|
|
94
102
|
plugins.push({
|
|
95
|
-
name: "
|
|
96
|
-
path: "@module-federation/modern-js/ssr-
|
|
103
|
+
name: "mfSSRDev",
|
|
104
|
+
path: "@module-federation/modern-js/ssr-dev-plugin",
|
|
97
105
|
config: {}
|
|
98
106
|
});
|
|
99
107
|
return {
|
|
@@ -101,6 +109,18 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
|
|
|
101
109
|
plugins
|
|
102
110
|
};
|
|
103
111
|
});
|
|
112
|
+
if (pluginOptions.ssrConfig.remotes) {
|
|
113
|
+
api._internalServerPlugins(function(param) {
|
|
114
|
+
var plugins = param.plugins;
|
|
115
|
+
plugins.push({
|
|
116
|
+
name: "@module-federation/modern-js/data-fetch-server-plugin",
|
|
117
|
+
options: {}
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
plugins
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
104
124
|
api.modifyBundlerChain(function(chain) {
|
|
105
125
|
var target = chain.get("target");
|
|
106
126
|
if (skipByTarget(target)) {
|
|
@@ -121,7 +141,7 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
|
|
|
121
141
|
}
|
|
122
142
|
if (!isWeb) {
|
|
123
143
|
chain.target("async-node");
|
|
124
|
-
if (isDev) {
|
|
144
|
+
if (isDev()) {
|
|
125
145
|
chain.plugin("UniverseEntryChunkTrackerPlugin").use(UniverseEntryChunkTrackerPlugin);
|
|
126
146
|
}
|
|
127
147
|
var userSSRConfig = pluginOptions.userConfig.ssr ? _type_of(pluginOptions.userConfig.ssr) === "object" ? pluginOptions.userConfig.ssr : {} : {};
|
|
@@ -130,7 +150,7 @@ var moduleFederationSSRPlugin = function(pluginOptions) {
|
|
|
130
150
|
chain.output.publicPath("".concat(publicPath).concat(userSSRConfig.distOutputDir, "/"));
|
|
131
151
|
}
|
|
132
152
|
}
|
|
133
|
-
if (isDev && isWeb) {
|
|
153
|
+
if (isDev() && isWeb) {
|
|
134
154
|
chain.externals({
|
|
135
155
|
"@module-federation/node/utils": "NOT_USED_IN_BROWSER"
|
|
136
156
|
});
|
package/dist/esm/cli/utils.js
CHANGED
package/dist/esm/constant.js
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
var LOCALHOST = "localhost";
|
|
2
2
|
var PLUGIN_IDENTIFIER = "[ Modern.js Module Federation ]";
|
|
3
|
+
var DATA_FETCH_QUERY = "x-mf-data-fetch";
|
|
4
|
+
var DATA_FETCH_ERROR_PREFIX = "caught the following error during dataFetch: ";
|
|
5
|
+
var LOAD_REMOTE_ERROR_PREFIX = "caught the following error during loadRemote: ";
|
|
6
|
+
var DOWNGRADE_KEY = "_mfSSRDowngrade";
|
|
7
|
+
var DATA_FETCH_MAP_KEY = "__MF_DATA_FETCH_MAP__";
|
|
8
|
+
var DATA_FETCH_FUNCTION = "_mfDataFetch";
|
|
9
|
+
var FS_HREF = "_mfFSHref";
|
|
10
|
+
var ERROR_TYPE = {
|
|
11
|
+
DATA_FETCH: 1,
|
|
12
|
+
LOAD_REMOTE: 2,
|
|
13
|
+
UNKNOWN: 3
|
|
14
|
+
};
|
|
15
|
+
var WRAP_DATA_FETCH_ID_IDENTIFIER = "wrap_dfip_identifier";
|
|
16
|
+
var MF_DATA_FETCH_TYPE;
|
|
17
|
+
(function(MF_DATA_FETCH_TYPE2) {
|
|
18
|
+
MF_DATA_FETCH_TYPE2[MF_DATA_FETCH_TYPE2["FETCH_SERVER"] = 1] = "FETCH_SERVER";
|
|
19
|
+
MF_DATA_FETCH_TYPE2[MF_DATA_FETCH_TYPE2["FETCH_CLIENT"] = 2] = "FETCH_CLIENT";
|
|
20
|
+
})(MF_DATA_FETCH_TYPE || (MF_DATA_FETCH_TYPE = {}));
|
|
21
|
+
var MF_DATA_FETCH_STATUS;
|
|
22
|
+
(function(MF_DATA_FETCH_STATUS2) {
|
|
23
|
+
MF_DATA_FETCH_STATUS2[MF_DATA_FETCH_STATUS2["LOADED"] = 1] = "LOADED";
|
|
24
|
+
MF_DATA_FETCH_STATUS2[MF_DATA_FETCH_STATUS2["LOADING"] = 2] = "LOADING";
|
|
25
|
+
MF_DATA_FETCH_STATUS2[MF_DATA_FETCH_STATUS2["AWAIT"] = 0] = "AWAIT";
|
|
26
|
+
MF_DATA_FETCH_STATUS2[MF_DATA_FETCH_STATUS2["ERROR"] = 3] = "ERROR";
|
|
27
|
+
})(MF_DATA_FETCH_STATUS || (MF_DATA_FETCH_STATUS = {}));
|
|
3
28
|
export {
|
|
29
|
+
DATA_FETCH_ERROR_PREFIX,
|
|
30
|
+
DATA_FETCH_FUNCTION,
|
|
31
|
+
DATA_FETCH_MAP_KEY,
|
|
32
|
+
DATA_FETCH_QUERY,
|
|
33
|
+
DOWNGRADE_KEY,
|
|
34
|
+
ERROR_TYPE,
|
|
35
|
+
FS_HREF,
|
|
36
|
+
LOAD_REMOTE_ERROR_PREFIX,
|
|
4
37
|
LOCALHOST,
|
|
5
|
-
|
|
38
|
+
MF_DATA_FETCH_STATUS,
|
|
39
|
+
MF_DATA_FETCH_TYPE,
|
|
40
|
+
PLUGIN_IDENTIFIER,
|
|
41
|
+
WRAP_DATA_FETCH_ID_IDENTIFIER
|
|
6
42
|
};
|
|
File without changes
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
2
|
+
import { _ as _tagged_template_literal } from "@swc/helpers/_/_tagged_template_literal";
|
|
3
|
+
import { _ as _type_of } from "@swc/helpers/_/_type_of";
|
|
4
|
+
function _templateObject() {
|
|
5
|
+
var data = _tagged_template_literal([
|
|
6
|
+
"\n globalThis['",
|
|
7
|
+
"'] = globalThis['",
|
|
8
|
+
"'] || []\n globalThis['",
|
|
9
|
+
"'].push([",
|
|
10
|
+
",",
|
|
11
|
+
",true]);"
|
|
12
|
+
]);
|
|
13
|
+
_templateObject = function _templateObject2() {
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
return data;
|
|
17
|
+
}
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
import { Suspense, useRef } from "react";
|
|
20
|
+
import logger from "../logger";
|
|
21
|
+
import { DATA_FETCH_ERROR_PREFIX, LOAD_REMOTE_ERROR_PREFIX, ERROR_TYPE, DATA_FETCH_FUNCTION } from "../constant";
|
|
22
|
+
import { getDataFetchIdWithErrorMsgs, wrapDataFetchId } from "../utils";
|
|
23
|
+
function isPromise(obj) {
|
|
24
|
+
return !!obj && ((typeof obj === "undefined" ? "undefined" : _type_of(obj)) === "object" || typeof obj === "function") && typeof obj.then === "function";
|
|
25
|
+
}
|
|
26
|
+
var AWAIT_ERROR_PREFIX = "<Await /> caught the following error during render: ";
|
|
27
|
+
var transformError = function(err) {
|
|
28
|
+
var errMsg = _instanceof(err, Error) ? err.message : err;
|
|
29
|
+
var originalMsg = errMsg.replace(AWAIT_ERROR_PREFIX, "");
|
|
30
|
+
var dataFetchMapKey = getDataFetchIdWithErrorMsgs(originalMsg);
|
|
31
|
+
if (originalMsg.indexOf(DATA_FETCH_ERROR_PREFIX) === 0) {
|
|
32
|
+
return {
|
|
33
|
+
error: new Error(originalMsg.replace(DATA_FETCH_ERROR_PREFIX, "").replace(wrapDataFetchId(dataFetchMapKey), "")),
|
|
34
|
+
errorType: ERROR_TYPE.DATA_FETCH,
|
|
35
|
+
dataFetchMapKey
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (originalMsg.indexOf(LOAD_REMOTE_ERROR_PREFIX) === 0) {
|
|
39
|
+
return {
|
|
40
|
+
error: new Error(originalMsg.replace(LOAD_REMOTE_ERROR_PREFIX, "").replace(wrapDataFetchId(dataFetchMapKey), "")),
|
|
41
|
+
errorType: ERROR_TYPE.LOAD_REMOTE,
|
|
42
|
+
dataFetchMapKey
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
error: new Error(originalMsg.replace(wrapDataFetchId(dataFetchMapKey), "")),
|
|
47
|
+
errorType: ERROR_TYPE.UNKNOWN,
|
|
48
|
+
dataFetchMapKey
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
var DefaultLoading = /* @__PURE__ */ _jsx(_Fragment, {});
|
|
52
|
+
var DefaultErrorElement = function(_data) {
|
|
53
|
+
return /* @__PURE__ */ _jsx("div", {
|
|
54
|
+
children: "Error"
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
function AwaitDataFetch(param) {
|
|
58
|
+
var resolve = param.resolve, _param_loading = param.loading, loading = _param_loading === void 0 ? DefaultLoading : _param_loading, _param_errorElement = param.errorElement, errorElement = _param_errorElement === void 0 ? DefaultErrorElement : _param_errorElement, children = param.children, params = param.params;
|
|
59
|
+
var dataRef = useRef();
|
|
60
|
+
var data = dataRef.current || resolve;
|
|
61
|
+
var getData = isPromise(data) ? fetchData(data, dataRef) : function() {
|
|
62
|
+
return data;
|
|
63
|
+
};
|
|
64
|
+
return /* @__PURE__ */ _jsx(AwaitSuspense, {
|
|
65
|
+
params,
|
|
66
|
+
loading,
|
|
67
|
+
errorElement,
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
resolve: getData,
|
|
70
|
+
children
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function AwaitSuspense(param) {
|
|
74
|
+
var resolve = param.resolve, children = param.children, _param_loading = param.loading, loading = _param_loading === void 0 ? DefaultLoading : _param_loading, _param_errorElement = param.errorElement, errorElement = _param_errorElement === void 0 ? DefaultErrorElement : _param_errorElement;
|
|
75
|
+
return /* @__PURE__ */ _jsx(Suspense, {
|
|
76
|
+
fallback: loading,
|
|
77
|
+
children: /* @__PURE__ */ _jsx(ResolveAwait, {
|
|
78
|
+
resolve,
|
|
79
|
+
errorElement,
|
|
80
|
+
children
|
|
81
|
+
})
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function ResolveAwait(param) {
|
|
85
|
+
var children = param.children, resolve = param.resolve, errorElement = param.errorElement, params = param.params;
|
|
86
|
+
var data = resolve();
|
|
87
|
+
logger.debug("resolve data: ", data);
|
|
88
|
+
if (typeof data === "string" && data.indexOf(AWAIT_ERROR_PREFIX) === 0) {
|
|
89
|
+
var transformedError = transformError(data);
|
|
90
|
+
return /* @__PURE__ */ _jsx(_Fragment, {
|
|
91
|
+
children: typeof errorElement === "function" ? /* @__PURE__ */ _jsxs(_Fragment, {
|
|
92
|
+
children: [
|
|
93
|
+
globalThis.FEDERATION_SSR && /* @__PURE__ */ _jsx("script", {
|
|
94
|
+
suppressHydrationWarning: true,
|
|
95
|
+
dangerouslySetInnerHTML: {
|
|
96
|
+
__html: String.raw(_templateObject(), DATA_FETCH_FUNCTION, DATA_FETCH_FUNCTION, DATA_FETCH_FUNCTION, transformedError.dataFetchMapKey ? "'".concat(transformedError.dataFetchMapKey, "'") : "", params ? JSON.stringify(params) : null)
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
errorElement(transformedError)
|
|
100
|
+
]
|
|
101
|
+
}) : errorElement
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
var toRender = typeof children === "function" ? children(data) : children;
|
|
105
|
+
return /* @__PURE__ */ _jsx(_Fragment, {
|
|
106
|
+
children: toRender
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
var fetchData = function(promise, ref) {
|
|
110
|
+
var data;
|
|
111
|
+
var status = "pending";
|
|
112
|
+
var suspender = promise.then(function(res) {
|
|
113
|
+
status = "success";
|
|
114
|
+
data = res;
|
|
115
|
+
ref.current = res;
|
|
116
|
+
}).catch(function(e) {
|
|
117
|
+
status = "success";
|
|
118
|
+
console.warn(e);
|
|
119
|
+
data = AWAIT_ERROR_PREFIX + e;
|
|
120
|
+
});
|
|
121
|
+
return function() {
|
|
122
|
+
if (status === "pending") {
|
|
123
|
+
throw suspender;
|
|
124
|
+
}
|
|
125
|
+
return data;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
export {
|
|
129
|
+
AwaitDataFetch,
|
|
130
|
+
transformError
|
|
131
|
+
};
|