1
- module . exports = ( { currentHost, remoteName, dashboardURL } ) => {
1
+ module . exports = ( {
2
+ currentHost,
3
+ remoteName,
4
+ dashboardURL,
5
+ fallbackEntryURL,
6
+ fallbackRemoteVar,
7
+ dashboardTimeout,
8
+ } ) => {
9
+ fallbackRemoteVar = fallbackRemoteVar || remoteName ;
10
+ fallbackEntryURL = fallbackEntryURL || '' ;
11
+ if ( ! dashboardTimeout ) {
12
+ dashboardTimeout = - 1 ;
13
+ }
14
+ if ( typeof dashboardTimeout !== 'number' || isNaN ( dashboardTimeout ) ) {
15
+ throw new Error ( 'Invalid dashboardTimeout' ) ;
16
+ }
2
17
//language=JS
3
18
return `promise new Promise((resolve, reject) => {
4
- fetch("${ dashboardURL } ¤tHost=${ currentHost } &remoteName=${ remoteName } ", {
19
+ var timeoutSignal;
20
+ let timeoutId = null;
21
+ var dashboardTimeout = ${ dashboardTimeout } ;
22
+ if (dashboardTimeout > 0) {
23
+ var timeoutAbort = new AbortController();
24
+ timeoutSignal = timeoutAbort.signal;
25
+ timeoutId = setTimeout(function () {
26
+ timeoutAbort.abort();
27
+ }, dashboardTimeout);
28
+ }
29
+ fetch('${ dashboardURL } ¤tHost=${ currentHost } &remoteName=${ remoteName } ', {
5
30
headers: {
6
- " Content-Type": " application/json" ,
7
- Accept: " application/json" ,
31
+ ' Content-Type': ' application/json' ,
32
+ Accept: ' application/json' ,
8
33
},
34
+ signal: timeoutSignal,
9
35
})
36
+ .finally(function () {
37
+ if (timeoutId !== null) {
38
+ clearTimeout(timeoutId);
39
+ }
40
+ })
10
41
.then(function (res) {
11
- return res.json()
42
+ return res.json();
12
43
})
13
44
.then(function (data) {
14
- var name = data.name + "_" + data.version;
45
+ var name = data.name + '_' + data.version;
15
46
var filename = data.version + '.remoteEntry.js';
16
- var url = new URL(filename, data.remoteURL)
17
-
47
+ var url = new URL(filename, data.remoteURL);
48
+
18
49
new Promise(function (resolve, reject) {
19
- var __webpack_error__ = new Error()
50
+ var __webpack_error__ = new Error();
20
51
if (typeof window[name] !== 'undefined') return resolve();
21
52
__webpack_require__.l(
22
53
url.href,
@@ -31,11 +62,43 @@ module.exports = ({ currentHost, remoteName, dashboardURL }) => {
31
62
__webpack_error__.request = realSrc;
32
63
reject(__webpack_error__);
33
64
},
34
- name,
65
+ name
35
66
);
36
- }).then(function () {
37
- resolve(window[name])
38
- }).catch(reject)
67
+ })
68
+ .then(function () {
69
+ resolve(window[name]);
70
+ })
71
+ .catch(reject);
39
72
})
40
- })` ;
73
+ .catch(function (error) {
74
+ var fallbackEntryURL = '${ fallbackEntryURL } ';
75
+ if (!fallbackEntryURL) return Promise.reject(error);
76
+ var name = '${ fallbackRemoteVar } ';
77
+ var url = new URL(fallbackEntryURL);
78
+
79
+ new Promise(function (resolve, reject) {
80
+ var __webpack_error__ = new Error();
81
+ if (typeof window[name] !== 'undefined') return resolve();
82
+ __webpack_require__.l(
83
+ url.href,
84
+ function (event) {
85
+ if (typeof window[name] !== 'undefined') return resolve();
86
+ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
87
+ var realSrc = event && event.target && event.target.src;
88
+ __webpack_error__.message =
89
+ 'Loading script failed.\\n(' + errorType + ': ' + realSrc + ')';
90
+ __webpack_error__.name = 'ScriptExternalLoadError';
91
+ __webpack_error__.type = errorType;
92
+ __webpack_error__.request = realSrc;
93
+ reject(__webpack_error__);
94
+ },
95
+ name
96
+ );
97
+ })
98
+ .then(function () {
99
+ resolve(window[name]);
100
+ })
101
+ .catch(reject);
102
+ });
103
+ });` ;
41
104
} ;
0 commit comments