source: frontend/node_modules/@pmmmwh/react-refresh-webpack-plugin/client/utils/errorEventHandlers.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/**
2 * @callback EventCallback
3 * @param {string | Error | null} context
4 * @returns {void}
5 */
6/**
7 * @callback EventHandler
8 * @param {Event} event
9 * @returns {void}
10 */
11
12/**
13 * A function that creates an event handler for the `error` event.
14 * @param {EventCallback} callback A function called to handle the error context.
15 * @returns {EventHandler} A handler for the `error` event.
16 */
17function createErrorHandler(callback) {
18 return function errorHandler(event) {
19 if (!event || !event.error) {
20 return callback(null);
21 }
22 if (event.error instanceof Error) {
23 return callback(event.error);
24 }
25 // A non-error was thrown, we don't have a trace. :(
26 // Look in your browser's devtools for more information
27 return callback(new Error(event.error));
28 };
29}
30
31/**
32 * A function that creates an event handler for the `unhandledrejection` event.
33 * @param {EventCallback} callback A function called to handle the error context.
34 * @returns {EventHandler} A handler for the `unhandledrejection` event.
35 */
36function createRejectionHandler(callback) {
37 return function rejectionHandler(event) {
38 if (!event || !event.reason) {
39 return callback(new Error('Unknown'));
40 }
41 if (event.reason instanceof Error) {
42 return callback(event.reason);
43 }
44 // A non-error was rejected, we don't have a trace :(
45 // Look in your browser's devtools for more information
46 return callback(new Error(event.reason));
47 };
48}
49
50/**
51 * Creates a handler that registers an EventListener on window for a valid type
52 * and calls a callback when the event fires.
53 * @param {string} eventType A valid DOM event type.
54 * @param {function(EventCallback): EventHandler} createHandler A function that creates an event handler.
55 * @returns {register} A function that registers the EventListener given a callback.
56 */
57function createWindowEventHandler(eventType, createHandler) {
58 /**
59 * @type {EventHandler | null} A cached event handler function.
60 */
61 let eventHandler = null;
62
63 /**
64 * Unregisters an EventListener if it has been registered.
65 * @returns {void}
66 */
67 function unregister() {
68 if (eventHandler === null) {
69 return;
70 }
71 window.removeEventListener(eventType, eventHandler);
72 eventHandler = null;
73 }
74
75 /**
76 * Registers an EventListener if it hasn't been registered.
77 * @param {EventCallback} callback A function called after the event handler to handle its context.
78 * @returns {unregister | void} A function to unregister the registered EventListener if registration is performed.
79 */
80 function register(callback) {
81 if (eventHandler !== null) {
82 return;
83 }
84 eventHandler = createHandler(callback);
85 window.addEventListener(eventType, eventHandler);
86
87 return unregister;
88 }
89
90 return register;
91}
92
93const handleError = createWindowEventHandler('error', createErrorHandler);
94const handleUnhandledRejection = createWindowEventHandler(
95 'unhandledrejection',
96 createRejectionHandler
97);
98
99module.exports = {
100 handleError: handleError,
101 handleUnhandledRejection: handleUnhandledRejection,
102};
Note: See TracBrowser for help on using the repository browser.