UNPKG

2.44 kBJavaScriptView Raw
1/* global __react_refresh_error_overlay__, __react_refresh_init_socket__, __resourceQuery */
2
3const errorEventHandlers = require('./utils/errorEventHandlers');
4const formatWebpackErrors = require('./utils/formatWebpackErrors');
5
6// Setup error states
7let isHotReload = false;
8let hasRuntimeErrors = false;
9
10/**
11 * Try dismissing the compile error overlay.
12 * This will also reset runtime error records (if any),
13 * because we have new source to evaluate.
14 * @returns {void}
15 */
16function tryDismissErrorOverlay() {
17 __react_refresh_error_overlay__.clearCompileError();
18 __react_refresh_error_overlay__.clearRuntimeErrors(!hasRuntimeErrors);
19 hasRuntimeErrors = false;
20}
21
22/**
23 * A function called after a compile success signal is received from Webpack.
24 * @returns {void}
25 */
26function handleCompileSuccess() {
27 isHotReload = true;
28
29 if (isHotReload) {
30 tryDismissErrorOverlay();
31 }
32}
33
34/**
35 * A function called after a compile errored signal is received from Webpack.
36 * @param {string} errors
37 * @returns {void}
38 */
39function handleCompileErrors(errors) {
40 isHotReload = true;
41
42 const formattedErrors = formatWebpackErrors(errors);
43
44 // Only show the first error
45 __react_refresh_error_overlay__.showCompileError(formattedErrors[0]);
46}
47
48/**
49 * Handles compilation messages from Webpack.
50 * Integrates with a compile error overlay.
51 * @param {*} message A Webpack HMR message sent via WebSockets.
52 * @returns {void}
53 */
54function compileMessageHandler(message) {
55 switch (message.type) {
56 case 'ok':
57 case 'still-ok':
58 case 'warnings': {
59 // TODO: Implement handling for warnings
60 handleCompileSuccess();
61 break;
62 }
63 case 'errors': {
64 handleCompileErrors(message.data);
65 break;
66 }
67 default: {
68 // Do nothing.
69 }
70 }
71}
72
73// Only register if we're in non-production mode and if window is defined
74if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {
75 // Registers handlers for compile errors
76 __react_refresh_init_socket__(compileMessageHandler, __resourceQuery);
77 // Registers handlers for runtime errors
78 errorEventHandlers.error(function handleError(error) {
79 hasRuntimeErrors = true;
80 __react_refresh_error_overlay__.handleRuntimeError(error);
81 });
82 errorEventHandlers.unhandledRejection(function handleUnhandledPromiseRejection(error) {
83 hasRuntimeErrors = true;
84 __react_refresh_error_overlay__.handleRuntimeError(error);
85 });
86}