@module-federation/devtools 0.21.3 → 0.21.4
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/es/component/Layout/index.js +3 -1
- package/dist/es/template/constant.js +2 -0
- package/dist/es/utils/chrome/fast-refresh.js +80 -7
- package/dist/lib/component/Layout/index.js +1 -0
- package/dist/lib/template/constant.js +3 -0
- package/dist/lib/utils/chrome/fast-refresh.js +77 -8
- package/dist/types/src/template/constant.d.ts +1 -0
- package/package.json +3 -3
|
@@ -48,7 +48,8 @@ import {
|
|
|
48
48
|
ENABLEHMR,
|
|
49
49
|
__ENABLE_FAST_REFRESH__,
|
|
50
50
|
BROWSER_ENV_KEY,
|
|
51
|
-
__FEDERATION_DEVTOOLS__
|
|
51
|
+
__FEDERATION_DEVTOOLS__,
|
|
52
|
+
__EAGER_SHARE__
|
|
52
53
|
} from "../../template/constant";
|
|
53
54
|
const Layout = (props) => {
|
|
54
55
|
const {
|
|
@@ -178,6 +179,7 @@ const Layout = (props) => {
|
|
|
178
179
|
mergeStorage(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__, on);
|
|
179
180
|
} else {
|
|
180
181
|
removeStorageKey(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__);
|
|
182
|
+
removeStorageKey(__FEDERATION_DEVTOOLS__, __EAGER_SHARE__);
|
|
181
183
|
}
|
|
182
184
|
injectScript(reloadPage, false);
|
|
183
185
|
};
|
|
@@ -50,12 +50,14 @@ const statusInfo = {
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
const __ENABLE_FAST_REFRESH__ = "enableFastRefresh";
|
|
53
|
+
const __EAGER_SHARE__ = "eagerShare";
|
|
53
54
|
const BROWSER_ENV_KEY = "MF_ENV";
|
|
54
55
|
const __FEDERATION_DEVTOOLS__ = "__MF_DEVTOOLS__";
|
|
55
56
|
export {
|
|
56
57
|
BROWSER_ENV_KEY,
|
|
57
58
|
ENABLEHMR,
|
|
58
59
|
FormID,
|
|
60
|
+
__EAGER_SHARE__,
|
|
59
61
|
__ENABLE_FAST_REFRESH__,
|
|
60
62
|
__FEDERATION_DEVTOOLS__,
|
|
61
63
|
defaultDataItem,
|
|
@@ -50,7 +50,48 @@ var _a;
|
|
|
50
50
|
import { loadScript } from "@module-federation/sdk";
|
|
51
51
|
import { isObject, getUnpkgUrl } from "../index";
|
|
52
52
|
import { definePropertyGlobalVal } from "../sdk";
|
|
53
|
-
import {
|
|
53
|
+
import {
|
|
54
|
+
__FEDERATION_DEVTOOLS__,
|
|
55
|
+
__EAGER_SHARE__,
|
|
56
|
+
__ENABLE_FAST_REFRESH__
|
|
57
|
+
} from "../../template/constant";
|
|
58
|
+
const SUPPORT_PKGS = ["react", "react-dom"];
|
|
59
|
+
const fetchAndExecuteUmdSync = (url) => {
|
|
60
|
+
try {
|
|
61
|
+
const response = new XMLHttpRequest();
|
|
62
|
+
response.open("GET", url, false);
|
|
63
|
+
response.overrideMimeType("text/plain");
|
|
64
|
+
response.send();
|
|
65
|
+
if (response.status === 200) {
|
|
66
|
+
const scriptContent = response.responseText;
|
|
67
|
+
const moduleFunction = new Function(scriptContent);
|
|
68
|
+
return moduleFunction(window);
|
|
69
|
+
} else {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Failed to load module from ${url}: HTTP ${response.status}`
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
} catch (error) {
|
|
75
|
+
throw new Error(`Failed to fetch module from ${url}: ${error.message}`);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const getDevtoolsMessage = () => {
|
|
79
|
+
const devtoolsMessageStr = localStorage.getItem(__FEDERATION_DEVTOOLS__);
|
|
80
|
+
if (devtoolsMessageStr) {
|
|
81
|
+
try {
|
|
82
|
+
return JSON.parse(devtoolsMessageStr);
|
|
83
|
+
} catch (e) {
|
|
84
|
+
console.debug("Fast Refresh Plugin Error: ", e);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
};
|
|
89
|
+
const devtoolsMessage = getDevtoolsMessage();
|
|
90
|
+
if ((devtoolsMessage == null ? void 0 : devtoolsMessage[__ENABLE_FAST_REFRESH__]) && (devtoolsMessage == null ? void 0 : devtoolsMessage[__EAGER_SHARE__])) {
|
|
91
|
+
const [_name, version] = devtoolsMessage[__EAGER_SHARE__];
|
|
92
|
+
fetchAndExecuteUmdSync(getUnpkgUrl("react", version));
|
|
93
|
+
fetchAndExecuteUmdSync(getUnpkgUrl("react-dom", version));
|
|
94
|
+
}
|
|
54
95
|
const fastRefreshPlugin = () => {
|
|
55
96
|
return {
|
|
56
97
|
name: "mf-fast-refresh-plugin",
|
|
@@ -58,17 +99,22 @@ const fastRefreshPlugin = () => {
|
|
|
58
99
|
var _b = _a2, { userOptions } = _b, args = __objRest(_b, ["userOptions"]);
|
|
59
100
|
const shareInfo = userOptions.shared;
|
|
60
101
|
const twinsShareInfo = args.shareInfo;
|
|
61
|
-
let enableFastRefresh;
|
|
62
|
-
let
|
|
102
|
+
let enableFastRefresh = false;
|
|
103
|
+
let devtoolsMessage2 = {};
|
|
63
104
|
const devtoolsMessageStr = localStorage.getItem(__FEDERATION_DEVTOOLS__);
|
|
64
105
|
if (devtoolsMessageStr) {
|
|
65
106
|
try {
|
|
66
|
-
|
|
67
|
-
enableFastRefresh =
|
|
107
|
+
devtoolsMessage2 = JSON.parse(devtoolsMessageStr);
|
|
108
|
+
enableFastRefresh = devtoolsMessage2 == null ? void 0 : devtoolsMessage2[__ENABLE_FAST_REFRESH__];
|
|
68
109
|
} catch (e) {
|
|
69
110
|
console.debug("Fast Refresh Plugin Error: ", e);
|
|
70
111
|
}
|
|
71
112
|
}
|
|
113
|
+
if (!enableFastRefresh) {
|
|
114
|
+
return __spreadValues({
|
|
115
|
+
userOptions
|
|
116
|
+
}, args);
|
|
117
|
+
}
|
|
72
118
|
if (shareInfo && isObject(shareInfo)) {
|
|
73
119
|
let orderResolve;
|
|
74
120
|
const orderPromise = new Promise((resolve) => {
|
|
@@ -81,10 +127,37 @@ const fastRefreshPlugin = () => {
|
|
|
81
127
|
twinsSharedArr = Array.isArray(twinsShareInfo[share]) ? twinsShareInfo[share] : [twinsShareInfo[share]];
|
|
82
128
|
}
|
|
83
129
|
sharedArr.forEach((shared, idx) => {
|
|
130
|
+
var _a3;
|
|
131
|
+
if (!SUPPORT_PKGS.includes(share)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if ((_a3 = shared.shareConfig) == null ? void 0 : _a3.eager) {
|
|
135
|
+
if (!(devtoolsMessage2 == null ? void 0 : devtoolsMessage2[__EAGER_SHARE__])) {
|
|
136
|
+
const eagerShare = [];
|
|
137
|
+
eagerShare.push(share, shared.version);
|
|
138
|
+
devtoolsMessage2[__EAGER_SHARE__] = eagerShare;
|
|
139
|
+
localStorage.setItem(
|
|
140
|
+
__FEDERATION_DEVTOOLS__,
|
|
141
|
+
JSON.stringify(devtoolsMessage2)
|
|
142
|
+
);
|
|
143
|
+
window.location.reload();
|
|
144
|
+
}
|
|
145
|
+
if (share === "react-dom") {
|
|
146
|
+
shared.lib = () => window.ReactDOM;
|
|
147
|
+
}
|
|
148
|
+
if (share === "react") {
|
|
149
|
+
shared.lib = () => window.React;
|
|
150
|
+
}
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
84
153
|
let get;
|
|
85
154
|
if (share === "react") {
|
|
86
155
|
get = () => loadScript(getUnpkgUrl(share, shared.version), {
|
|
87
|
-
attrs: {
|
|
156
|
+
attrs: {
|
|
157
|
+
defer: false,
|
|
158
|
+
async: false,
|
|
159
|
+
"data-mf-injected": "true"
|
|
160
|
+
}
|
|
88
161
|
}).then(() => {
|
|
89
162
|
orderResolve();
|
|
90
163
|
});
|
|
@@ -96,7 +169,7 @@ const fastRefreshPlugin = () => {
|
|
|
96
169
|
})
|
|
97
170
|
);
|
|
98
171
|
}
|
|
99
|
-
if (
|
|
172
|
+
if (typeof get === "function") {
|
|
100
173
|
if (share === "react") {
|
|
101
174
|
shared.get = () => __async(this, null, function* () {
|
|
102
175
|
if (!window.React) {
|
|
@@ -188,6 +188,7 @@ const Layout = (props) => {
|
|
|
188
188
|
(0, import_utils.mergeStorage)(import_constant.__FEDERATION_DEVTOOLS__, import_constant.__ENABLE_FAST_REFRESH__, on);
|
|
189
189
|
} else {
|
|
190
190
|
(0, import_utils.removeStorageKey)(import_constant.__FEDERATION_DEVTOOLS__, import_constant.__ENABLE_FAST_REFRESH__);
|
|
191
|
+
(0, import_utils.removeStorageKey)(import_constant.__FEDERATION_DEVTOOLS__, import_constant.__EAGER_SHARE__);
|
|
191
192
|
}
|
|
192
193
|
(0, import_utils.injectScript)(import_utils.reloadPage, false);
|
|
193
194
|
};
|
|
@@ -35,6 +35,7 @@ __export(constant_exports, {
|
|
|
35
35
|
BROWSER_ENV_KEY: () => BROWSER_ENV_KEY,
|
|
36
36
|
ENABLEHMR: () => ENABLEHMR,
|
|
37
37
|
FormID: () => FormID,
|
|
38
|
+
__EAGER_SHARE__: () => __EAGER_SHARE__,
|
|
38
39
|
__ENABLE_FAST_REFRESH__: () => __ENABLE_FAST_REFRESH__,
|
|
39
40
|
__FEDERATION_DEVTOOLS__: () => __FEDERATION_DEVTOOLS__,
|
|
40
41
|
defaultDataItem: () => defaultDataItem,
|
|
@@ -79,6 +80,7 @@ const statusInfo = {
|
|
|
79
80
|
}
|
|
80
81
|
};
|
|
81
82
|
const __ENABLE_FAST_REFRESH__ = "enableFastRefresh";
|
|
83
|
+
const __EAGER_SHARE__ = "eagerShare";
|
|
82
84
|
const BROWSER_ENV_KEY = "MF_ENV";
|
|
83
85
|
const __FEDERATION_DEVTOOLS__ = "__MF_DEVTOOLS__";
|
|
84
86
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -86,6 +88,7 @@ const __FEDERATION_DEVTOOLS__ = "__MF_DEVTOOLS__";
|
|
|
86
88
|
BROWSER_ENV_KEY,
|
|
87
89
|
ENABLEHMR,
|
|
88
90
|
FormID,
|
|
91
|
+
__EAGER_SHARE__,
|
|
89
92
|
__ENABLE_FAST_REFRESH__,
|
|
90
93
|
__FEDERATION_DEVTOOLS__,
|
|
91
94
|
defaultDataItem,
|
|
@@ -50,8 +50,45 @@ var __async = (__this, __arguments, generator) => {
|
|
|
50
50
|
var import_sdk = require("@module-federation/sdk");
|
|
51
51
|
var import__ = require("../index");
|
|
52
52
|
var import_sdk2 = require("../sdk");
|
|
53
|
-
var
|
|
53
|
+
var import_constant = require("../../template/constant");
|
|
54
54
|
var _a;
|
|
55
|
+
const SUPPORT_PKGS = ["react", "react-dom"];
|
|
56
|
+
const fetchAndExecuteUmdSync = (url) => {
|
|
57
|
+
try {
|
|
58
|
+
const response = new XMLHttpRequest();
|
|
59
|
+
response.open("GET", url, false);
|
|
60
|
+
response.overrideMimeType("text/plain");
|
|
61
|
+
response.send();
|
|
62
|
+
if (response.status === 200) {
|
|
63
|
+
const scriptContent = response.responseText;
|
|
64
|
+
const moduleFunction = new Function(scriptContent);
|
|
65
|
+
return moduleFunction(window);
|
|
66
|
+
} else {
|
|
67
|
+
throw new Error(
|
|
68
|
+
`Failed to load module from ${url}: HTTP ${response.status}`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
} catch (error) {
|
|
72
|
+
throw new Error(`Failed to fetch module from ${url}: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const getDevtoolsMessage = () => {
|
|
76
|
+
const devtoolsMessageStr = localStorage.getItem(import_constant.__FEDERATION_DEVTOOLS__);
|
|
77
|
+
if (devtoolsMessageStr) {
|
|
78
|
+
try {
|
|
79
|
+
return JSON.parse(devtoolsMessageStr);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
console.debug("Fast Refresh Plugin Error: ", e);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
};
|
|
86
|
+
const devtoolsMessage = getDevtoolsMessage();
|
|
87
|
+
if ((devtoolsMessage == null ? void 0 : devtoolsMessage[import_constant.__ENABLE_FAST_REFRESH__]) && (devtoolsMessage == null ? void 0 : devtoolsMessage[import_constant.__EAGER_SHARE__])) {
|
|
88
|
+
const [_name, version] = devtoolsMessage[import_constant.__EAGER_SHARE__];
|
|
89
|
+
fetchAndExecuteUmdSync((0, import__.getUnpkgUrl)("react", version));
|
|
90
|
+
fetchAndExecuteUmdSync((0, import__.getUnpkgUrl)("react-dom", version));
|
|
91
|
+
}
|
|
55
92
|
const fastRefreshPlugin = () => {
|
|
56
93
|
return {
|
|
57
94
|
name: "mf-fast-refresh-plugin",
|
|
@@ -59,17 +96,22 @@ const fastRefreshPlugin = () => {
|
|
|
59
96
|
var _b = _a2, { userOptions } = _b, args = __objRest(_b, ["userOptions"]);
|
|
60
97
|
const shareInfo = userOptions.shared;
|
|
61
98
|
const twinsShareInfo = args.shareInfo;
|
|
62
|
-
let enableFastRefresh;
|
|
63
|
-
let
|
|
64
|
-
const devtoolsMessageStr = localStorage.getItem(
|
|
99
|
+
let enableFastRefresh = false;
|
|
100
|
+
let devtoolsMessage2 = {};
|
|
101
|
+
const devtoolsMessageStr = localStorage.getItem(import_constant.__FEDERATION_DEVTOOLS__);
|
|
65
102
|
if (devtoolsMessageStr) {
|
|
66
103
|
try {
|
|
67
|
-
|
|
68
|
-
enableFastRefresh =
|
|
104
|
+
devtoolsMessage2 = JSON.parse(devtoolsMessageStr);
|
|
105
|
+
enableFastRefresh = devtoolsMessage2 == null ? void 0 : devtoolsMessage2[import_constant.__ENABLE_FAST_REFRESH__];
|
|
69
106
|
} catch (e) {
|
|
70
107
|
console.debug("Fast Refresh Plugin Error: ", e);
|
|
71
108
|
}
|
|
72
109
|
}
|
|
110
|
+
if (!enableFastRefresh) {
|
|
111
|
+
return __spreadValues({
|
|
112
|
+
userOptions
|
|
113
|
+
}, args);
|
|
114
|
+
}
|
|
73
115
|
if (shareInfo && (0, import__.isObject)(shareInfo)) {
|
|
74
116
|
let orderResolve;
|
|
75
117
|
const orderPromise = new Promise((resolve) => {
|
|
@@ -82,10 +124,37 @@ const fastRefreshPlugin = () => {
|
|
|
82
124
|
twinsSharedArr = Array.isArray(twinsShareInfo[share]) ? twinsShareInfo[share] : [twinsShareInfo[share]];
|
|
83
125
|
}
|
|
84
126
|
sharedArr.forEach((shared, idx) => {
|
|
127
|
+
var _a3;
|
|
128
|
+
if (!SUPPORT_PKGS.includes(share)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if ((_a3 = shared.shareConfig) == null ? void 0 : _a3.eager) {
|
|
132
|
+
if (!(devtoolsMessage2 == null ? void 0 : devtoolsMessage2[import_constant.__EAGER_SHARE__])) {
|
|
133
|
+
const eagerShare = [];
|
|
134
|
+
eagerShare.push(share, shared.version);
|
|
135
|
+
devtoolsMessage2[import_constant.__EAGER_SHARE__] = eagerShare;
|
|
136
|
+
localStorage.setItem(
|
|
137
|
+
import_constant.__FEDERATION_DEVTOOLS__,
|
|
138
|
+
JSON.stringify(devtoolsMessage2)
|
|
139
|
+
);
|
|
140
|
+
window.location.reload();
|
|
141
|
+
}
|
|
142
|
+
if (share === "react-dom") {
|
|
143
|
+
shared.lib = () => window.ReactDOM;
|
|
144
|
+
}
|
|
145
|
+
if (share === "react") {
|
|
146
|
+
shared.lib = () => window.React;
|
|
147
|
+
}
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
85
150
|
let get;
|
|
86
151
|
if (share === "react") {
|
|
87
152
|
get = () => (0, import_sdk.loadScript)((0, import__.getUnpkgUrl)(share, shared.version), {
|
|
88
|
-
attrs: {
|
|
153
|
+
attrs: {
|
|
154
|
+
defer: false,
|
|
155
|
+
async: false,
|
|
156
|
+
"data-mf-injected": "true"
|
|
157
|
+
}
|
|
89
158
|
}).then(() => {
|
|
90
159
|
orderResolve();
|
|
91
160
|
});
|
|
@@ -97,7 +166,7 @@ const fastRefreshPlugin = () => {
|
|
|
97
166
|
})
|
|
98
167
|
);
|
|
99
168
|
}
|
|
100
|
-
if (
|
|
169
|
+
if (typeof get === "function") {
|
|
101
170
|
if (share === "react") {
|
|
102
171
|
shared.get = () => __async(this, null, function* () {
|
|
103
172
|
if (!window.React) {
|
|
@@ -19,5 +19,6 @@ export declare const statusInfo: Record<string, {
|
|
|
19
19
|
color: string;
|
|
20
20
|
}>;
|
|
21
21
|
export declare const __ENABLE_FAST_REFRESH__ = "enableFastRefresh";
|
|
22
|
+
export declare const __EAGER_SHARE__ = "eagerShare";
|
|
22
23
|
export declare const BROWSER_ENV_KEY = "MF_ENV";
|
|
23
24
|
export declare const __FEDERATION_DEVTOOLS__ = "__MF_DEVTOOLS__";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/devtools",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"react": "~18.3.1",
|
|
45
45
|
"react-dom": "~18.3.1",
|
|
46
46
|
"reactflow": "11.11.4",
|
|
47
|
-
"@module-federation/sdk": "0.21.
|
|
47
|
+
"@module-federation/sdk": "0.21.4"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@modern-js-app/eslint-config": "2.59.0",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"rimraf": "~6.0.1",
|
|
66
66
|
"typescript": "~5.0.4",
|
|
67
67
|
"vitest": "1.2.2",
|
|
68
|
-
"@module-federation/runtime": "0.21.
|
|
68
|
+
"@module-federation/runtime": "0.21.4"
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build:storybook": "storybook build",
|