@rspack/plugin-react-refresh 1.0.0-beta.2 → 1.0.0-beta.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.
Files changed (35) hide show
  1. package/LICENSE +0 -1
  2. package/README.md +67 -3
  3. package/client/errorOverlayEntry.js +9 -7
  4. package/client/overlay/components/CompileErrorTrace.js +7 -2
  5. package/client/overlay/components/PageHeader.js +4 -2
  6. package/client/overlay/components/RuntimeErrorHeader.js +2 -1
  7. package/client/overlay/components/RuntimeErrorStack.js +2 -1
  8. package/client/overlay/index.js +10 -3
  9. package/client/overlay/utils.js +1 -1
  10. package/client/reactRefresh.js +15 -15
  11. package/client/reactRefreshEntry.js +41 -41
  12. package/client/refreshUtils.js +213 -213
  13. package/client/utils/ansi-html.js +80 -78
  14. package/client/utils/errorEventHandlers.js +2 -2
  15. package/client/utils/formatWebpackErrors.js +15 -5
  16. package/client/utils/retry.js +2 -2
  17. package/dist/index.d.ts +2 -7
  18. package/dist/index.js +23 -26
  19. package/dist/options.d.ts +1 -1
  20. package/dist/options.js +10 -10
  21. package/dist/sockets/WDSSocket.d.ts +8 -5
  22. package/dist/sockets/WDSSocket.js +10 -8
  23. package/dist/sockets/utils/getCurrentScriptSource.d.ts +1 -1
  24. package/dist/sockets/utils/getCurrentScriptSource.js +4 -4
  25. package/dist/sockets/utils/getSocketUrlParts.d.ts +1 -1
  26. package/dist/sockets/utils/getSocketUrlParts.js +14 -18
  27. package/dist/sockets/utils/getUrlFromParts.d.ts +6 -6
  28. package/dist/sockets/utils/getUrlFromParts.js +7 -10
  29. package/dist/sockets/utils/getWDSMetadata.d.ts +12 -1
  30. package/dist/sockets/utils/getWDSMetadata.js +6 -6
  31. package/dist/utils/getAdditionalEntries.d.ts +2 -2
  32. package/dist/utils/getAdditionalEntries.js +11 -11
  33. package/dist/utils/getSocketIntegration.d.ts +2 -2
  34. package/dist/utils/getSocketIntegration.js +4 -3
  35. package/package.json +31 -21
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  /* global __webpack_require__ */
12
- var Refresh = require("react-refresh/runtime");
12
+ var Refresh = require('react-refresh/runtime');
13
13
 
14
14
  /**
15
15
  * Extracts exports from a webpack module object.
@@ -17,32 +17,32 @@ var Refresh = require("react-refresh/runtime");
17
17
  * @returns {*} An exports object from the module.
18
18
  */
19
19
  function getModuleExports(moduleId) {
20
- if (typeof moduleId === "undefined") {
21
- // `moduleId` is unavailable, which indicates that this module is not in the cache,
22
- // which means we won't be able to capture any exports,
23
- // and thus they cannot be refreshed safely.
24
- // These are likely runtime or dynamically generated modules.
25
- return {};
26
- }
27
-
28
- var maybeModule = __webpack_require__.c[moduleId];
29
- if (typeof maybeModule === "undefined") {
30
- // `moduleId` is available but the module in cache is unavailable,
31
- // which indicates the module is somehow corrupted (e.g. broken Webpacak `module` globals).
32
- // We will warn the user (as this is likely a mistake) and assume they cannot be refreshed.
33
- console.warn(
34
- "[React Refresh] Failed to get exports for module: " + moduleId + "."
35
- );
36
- return {};
37
- }
38
-
39
- var exportsOrPromise = maybeModule.exports;
40
- if (typeof Promise !== "undefined" && exportsOrPromise instanceof Promise) {
41
- return exportsOrPromise.then(function (exports) {
42
- return exports;
43
- });
44
- }
45
- return exportsOrPromise;
20
+ if (typeof moduleId === 'undefined') {
21
+ // `moduleId` is unavailable, which indicates that this module is not in the cache,
22
+ // which means we won't be able to capture any exports,
23
+ // and thus they cannot be refreshed safely.
24
+ // These are likely runtime or dynamically generated modules.
25
+ return {};
26
+ }
27
+
28
+ var maybeModule = __webpack_require__.c[moduleId];
29
+ if (typeof maybeModule === 'undefined') {
30
+ // `moduleId` is available but the module in cache is unavailable,
31
+ // which indicates the module is somehow corrupted (e.g. broken Webpacak `module` globals).
32
+ // We will warn the user (as this is likely a mistake) and assume they cannot be refreshed.
33
+ console.warn(
34
+ '[React Refresh] Failed to get exports for module: ' + moduleId + '.',
35
+ );
36
+ return {};
37
+ }
38
+
39
+ var exportsOrPromise = maybeModule.exports;
40
+ if (typeof Promise !== 'undefined' && exportsOrPromise instanceof Promise) {
41
+ return exportsOrPromise.then(function (exports) {
42
+ return exports;
43
+ });
44
+ }
45
+ return exportsOrPromise;
46
46
  }
47
47
 
48
48
  /**
@@ -54,24 +54,24 @@ function getModuleExports(moduleId) {
54
54
  * @returns {string[]} A React refresh boundary signature array.
55
55
  */
56
56
  function getReactRefreshBoundarySignature(moduleExports) {
57
- var signature = [];
58
- signature.push(Refresh.getFamilyByType(moduleExports));
57
+ var signature = [];
58
+ signature.push(Refresh.getFamilyByType(moduleExports));
59
59
 
60
- if (moduleExports == null || typeof moduleExports !== "object") {
61
- // Exit if we can't iterate over exports.
62
- return signature;
63
- }
60
+ if (moduleExports == null || typeof moduleExports !== 'object') {
61
+ // Exit if we can't iterate over exports.
62
+ return signature;
63
+ }
64
64
 
65
- for (var key in moduleExports) {
66
- if (key === "__esModule") {
67
- continue;
68
- }
65
+ for (var key in moduleExports) {
66
+ if (key === '__esModule') {
67
+ continue;
68
+ }
69
69
 
70
- signature.push(key);
71
- signature.push(Refresh.getFamilyByType(moduleExports[key]));
72
- }
70
+ signature.push(key);
71
+ signature.push(Refresh.getFamilyByType(moduleExports[key]));
72
+ }
73
73
 
74
- return signature;
74
+ return signature;
75
75
  }
76
76
 
77
77
  /**
@@ -79,28 +79,28 @@ function getReactRefreshBoundarySignature(moduleExports) {
79
79
  * @returns {function(function(): void): void} A debounced React refresh function.
80
80
  */
81
81
  function createDebounceUpdate() {
82
- /**
83
- * A cached setTimeout handler.
84
- * @type {number | undefined}
85
- */
86
- var refreshTimeout;
87
-
88
- /**
89
- * Performs react refresh on a delay and clears the error overlay.
90
- * @param {function(): void} callback
91
- * @returns {void}
92
- */
93
- function enqueueUpdate(callback) {
94
- if (typeof refreshTimeout === "undefined") {
95
- refreshTimeout = setTimeout(function () {
96
- refreshTimeout = undefined;
97
- Refresh.performReactRefresh();
98
- callback();
99
- }, 30);
100
- }
101
- }
102
-
103
- return enqueueUpdate;
82
+ /**
83
+ * A cached setTimeout handler.
84
+ * @type {number | undefined}
85
+ */
86
+ var refreshTimeout;
87
+
88
+ /**
89
+ * Performs react refresh on a delay and clears the error overlay.
90
+ * @param {function(): void} callback
91
+ * @returns {void}
92
+ */
93
+ function enqueueUpdate(callback) {
94
+ if (typeof refreshTimeout === 'undefined') {
95
+ refreshTimeout = setTimeout(function () {
96
+ refreshTimeout = undefined;
97
+ Refresh.performReactRefresh();
98
+ callback();
99
+ }, 30);
100
+ }
101
+ }
102
+
103
+ return enqueueUpdate;
104
104
  }
105
105
 
106
106
  /**
@@ -111,39 +111,39 @@ function createDebounceUpdate() {
111
111
  * @returns {boolean} Whether the exports are React component like.
112
112
  */
113
113
  function isReactRefreshBoundary(moduleExports) {
114
- if (Refresh.isLikelyComponentType(moduleExports)) {
115
- return true;
116
- }
117
- if (
118
- moduleExports === undefined ||
119
- moduleExports === null ||
120
- typeof moduleExports !== "object"
121
- ) {
122
- // Exit if we can't iterate over exports.
123
- return false;
124
- }
125
-
126
- var hasExports = false;
127
- var areAllExportsComponents = true;
128
- for (var key in moduleExports) {
129
- hasExports = true;
130
-
131
- // This is the ES Module indicator flag
132
- if (key === "__esModule") {
133
- continue;
134
- }
135
-
136
- // We can (and have to) safely execute getters here,
137
- // as Webpack manually assigns harmony exports to getters,
138
- // without any side-effects attached.
139
- // Ref: https://github.com/webpack/webpack/blob/b93048643fe74de2a6931755911da1212df55897/lib/MainTemplate.js#L281
140
- var exportValue = moduleExports[key];
141
- if (!Refresh.isLikelyComponentType(exportValue)) {
142
- areAllExportsComponents = false;
143
- }
144
- }
145
-
146
- return hasExports && areAllExportsComponents;
114
+ if (Refresh.isLikelyComponentType(moduleExports)) {
115
+ return true;
116
+ }
117
+ if (
118
+ moduleExports === undefined ||
119
+ moduleExports === null ||
120
+ typeof moduleExports !== 'object'
121
+ ) {
122
+ // Exit if we can't iterate over exports.
123
+ return false;
124
+ }
125
+
126
+ var hasExports = false;
127
+ var areAllExportsComponents = true;
128
+ for (var key in moduleExports) {
129
+ hasExports = true;
130
+
131
+ // This is the ES Module indicator flag
132
+ if (key === '__esModule') {
133
+ continue;
134
+ }
135
+
136
+ // We can (and have to) safely execute getters here,
137
+ // as Webpack manually assigns harmony exports to getters,
138
+ // without any side-effects attached.
139
+ // Ref: https://github.com/webpack/webpack/blob/b93048643fe74de2a6931755911da1212df55897/lib/MainTemplate.js#L281
140
+ var exportValue = moduleExports[key];
141
+ if (!Refresh.isLikelyComponentType(exportValue)) {
142
+ areAllExportsComponents = false;
143
+ }
144
+ }
145
+
146
+ return hasExports && areAllExportsComponents;
147
147
  }
148
148
 
149
149
  /**
@@ -155,32 +155,32 @@ function isReactRefreshBoundary(moduleExports) {
155
155
  * @returns {void}
156
156
  */
157
157
  function registerExportsForReactRefresh(moduleExports, moduleId) {
158
- if (Refresh.isLikelyComponentType(moduleExports)) {
159
- // Register module.exports if it is likely a component
160
- Refresh.register(moduleExports, moduleId + " %exports%");
161
- }
162
-
163
- if (
164
- moduleExports === undefined ||
165
- moduleExports === null ||
166
- typeof moduleExports !== "object"
167
- ) {
168
- // Exit if we can't iterate over the exports.
169
- return;
170
- }
171
-
172
- for (var key in moduleExports) {
173
- // Skip registering the ES Module indicator
174
- if (key === "__esModule") {
175
- continue;
176
- }
177
-
178
- var exportValue = moduleExports[key];
179
- if (Refresh.isLikelyComponentType(exportValue)) {
180
- var typeID = moduleId + " %exports% " + key;
181
- Refresh.register(exportValue, typeID);
182
- }
183
- }
158
+ if (Refresh.isLikelyComponentType(moduleExports)) {
159
+ // Register module.exports if it is likely a component
160
+ Refresh.register(moduleExports, moduleId + ' %exports%');
161
+ }
162
+
163
+ if (
164
+ moduleExports === undefined ||
165
+ moduleExports === null ||
166
+ typeof moduleExports !== 'object'
167
+ ) {
168
+ // Exit if we can't iterate over the exports.
169
+ return;
170
+ }
171
+
172
+ for (var key in moduleExports) {
173
+ // Skip registering the ES Module indicator
174
+ if (key === '__esModule') {
175
+ continue;
176
+ }
177
+
178
+ var exportValue = moduleExports[key];
179
+ if (Refresh.isLikelyComponentType(exportValue)) {
180
+ var typeID = moduleId + ' %exports% ' + key;
181
+ Refresh.register(exportValue, typeID);
182
+ }
183
+ }
184
184
  }
185
185
 
186
186
  /**
@@ -192,106 +192,106 @@ function registerExportsForReactRefresh(moduleExports, moduleId) {
192
192
  * @returns {boolean} Whether the React refresh boundary should be invalidated.
193
193
  */
194
194
  function shouldInvalidateReactRefreshBoundary(prevExports, nextExports) {
195
- var prevSignature = getReactRefreshBoundarySignature(prevExports);
196
- var nextSignature = getReactRefreshBoundarySignature(nextExports);
195
+ var prevSignature = getReactRefreshBoundarySignature(prevExports);
196
+ var nextSignature = getReactRefreshBoundarySignature(nextExports);
197
197
 
198
- if (prevSignature.length !== nextSignature.length) {
199
- return true;
200
- }
198
+ if (prevSignature.length !== nextSignature.length) {
199
+ return true;
200
+ }
201
201
 
202
- for (var i = 0; i < nextSignature.length; i += 1) {
203
- if (prevSignature[i] !== nextSignature[i]) {
204
- return true;
205
- }
206
- }
202
+ for (var i = 0; i < nextSignature.length; i += 1) {
203
+ if (prevSignature[i] !== nextSignature[i]) {
204
+ return true;
205
+ }
206
+ }
207
207
 
208
- return false;
208
+ return false;
209
209
  }
210
210
 
211
211
  var enqueueUpdate = createDebounceUpdate();
212
212
  function executeRuntime(
213
- moduleExports,
214
- moduleId,
215
- webpackHot,
216
- refreshOverlay,
217
- isTest
213
+ moduleExports,
214
+ moduleId,
215
+ webpackHot,
216
+ refreshOverlay,
217
+ isTest,
218
218
  ) {
219
- registerExportsForReactRefresh(moduleExports, moduleId);
220
-
221
- if (webpackHot) {
222
- var isHotUpdate = !!webpackHot.data;
223
- var prevExports;
224
- if (isHotUpdate) {
225
- prevExports = webpackHot.data.prevExports;
226
- }
227
-
228
- if (isReactRefreshBoundary(moduleExports)) {
229
- webpackHot.dispose(
230
- /**
231
- * A callback to performs a full refresh if React has unrecoverable errors,
232
- * and also caches the to-be-disposed module.
233
- * @param {*} data A hot module data object from Webpack HMR.
234
- * @returns {void}
235
- */
236
- function hotDisposeCallback(data) {
237
- // We have to mutate the data object to get data registered and cached
238
- data.prevExports = moduleExports;
239
- }
240
- );
241
- webpackHot.accept(
242
- /**
243
- * An error handler to allow self-recovering behaviours.
244
- * @param {Error} error An error occurred during evaluation of a module.
245
- * @returns {void}
246
- */
247
- function hotErrorHandler(error) {
248
- if (typeof refreshOverlay !== "undefined" && refreshOverlay) {
249
- refreshOverlay.handleRuntimeError(error);
250
- }
251
-
252
- if (typeof isTest !== "undefined" && isTest) {
253
- if (window.onHotAcceptError) {
254
- window.onHotAcceptError(error.message);
255
- }
256
- }
257
-
258
- __webpack_require__.c[moduleId].hot.accept(hotErrorHandler);
259
- }
260
- );
261
-
262
- if (isHotUpdate) {
263
- if (
264
- isReactRefreshBoundary(prevExports) &&
265
- shouldInvalidateReactRefreshBoundary(prevExports, moduleExports)
266
- ) {
267
- webpackHot.invalidate();
268
- } else {
269
- enqueueUpdate(
270
- /**
271
- * A function to dismiss the error overlay after performing React refresh.
272
- * @returns {void}
273
- */
274
- function updateCallback() {
275
- if (typeof refreshOverlay !== "undefined" && refreshOverlay) {
276
- refreshOverlay.clearRuntimeErrors();
277
- }
278
- }
279
- );
280
- }
281
- }
282
- } else {
283
- if (isHotUpdate && typeof prevExports !== "undefined") {
284
- webpackHot.invalidate();
285
- }
286
- }
287
- }
219
+ registerExportsForReactRefresh(moduleExports, moduleId);
220
+
221
+ if (webpackHot) {
222
+ var isHotUpdate = !!webpackHot.data;
223
+ var prevExports;
224
+ if (isHotUpdate) {
225
+ prevExports = webpackHot.data.prevExports;
226
+ }
227
+
228
+ if (isReactRefreshBoundary(moduleExports)) {
229
+ webpackHot.dispose(
230
+ /**
231
+ * A callback to performs a full refresh if React has unrecoverable errors,
232
+ * and also caches the to-be-disposed module.
233
+ * @param {*} data A hot module data object from Webpack HMR.
234
+ * @returns {void}
235
+ */
236
+ function hotDisposeCallback(data) {
237
+ // We have to mutate the data object to get data registered and cached
238
+ data.prevExports = moduleExports;
239
+ },
240
+ );
241
+ webpackHot.accept(
242
+ /**
243
+ * An error handler to allow self-recovering behaviours.
244
+ * @param {Error} error An error occurred during evaluation of a module.
245
+ * @returns {void}
246
+ */
247
+ function hotErrorHandler(error) {
248
+ if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {
249
+ refreshOverlay.handleRuntimeError(error);
250
+ }
251
+
252
+ if (typeof isTest !== 'undefined' && isTest) {
253
+ if (window.onHotAcceptError) {
254
+ window.onHotAcceptError(error.message);
255
+ }
256
+ }
257
+
258
+ __webpack_require__.c[moduleId].hot.accept(hotErrorHandler);
259
+ },
260
+ );
261
+
262
+ if (isHotUpdate) {
263
+ if (
264
+ isReactRefreshBoundary(prevExports) &&
265
+ shouldInvalidateReactRefreshBoundary(prevExports, moduleExports)
266
+ ) {
267
+ webpackHot.invalidate();
268
+ } else {
269
+ enqueueUpdate(
270
+ /**
271
+ * A function to dismiss the error overlay after performing React refresh.
272
+ * @returns {void}
273
+ */
274
+ function updateCallback() {
275
+ if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {
276
+ refreshOverlay.clearRuntimeErrors();
277
+ }
278
+ },
279
+ );
280
+ }
281
+ }
282
+ } else {
283
+ if (isHotUpdate && typeof prevExports !== 'undefined') {
284
+ webpackHot.invalidate();
285
+ }
286
+ }
287
+ }
288
288
  }
289
289
 
290
290
  module.exports = Object.freeze({
291
- enqueueUpdate: enqueueUpdate,
292
- executeRuntime: executeRuntime,
293
- getModuleExports: getModuleExports,
294
- isReactRefreshBoundary: isReactRefreshBoundary,
295
- shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,
296
- registerExportsForReactRefresh: registerExportsForReactRefresh
291
+ enqueueUpdate: enqueueUpdate,
292
+ executeRuntime: executeRuntime,
293
+ getModuleExports: getModuleExports,
294
+ isReactRefreshBoundary: isReactRefreshBoundary,
295
+ shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,
296
+ registerExportsForReactRefresh: registerExportsForReactRefresh,
297
297
  });