@shuvi/error-overlay 1.0.0-rc.10

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 (190) hide show
  1. package/lib/client.d.ts +15 -0
  2. package/lib/client.js +179 -0
  3. package/lib/constants.d.ts +7 -0
  4. package/lib/constants.js +10 -0
  5. package/lib/iframe-bundle.js +2636 -0
  6. package/lib/iframeScript.d.ts +1 -0
  7. package/lib/iframeScript.js +73 -0
  8. package/lib/index.d.ts +2 -0
  9. package/lib/index.js +22 -0
  10. package/lib/middleware/helper/createOriginalStackFrame.d.ts +15 -0
  11. package/lib/middleware/helper/createOriginalStackFrame.js +59 -0
  12. package/lib/middleware/helper/findOriginalSourcePositionAndContent.d.ts +7 -0
  13. package/lib/middleware/helper/findOriginalSourcePositionAndContent.js +49 -0
  14. package/lib/middleware/helper/getModuleById.d.ts +2 -0
  15. package/lib/middleware/helper/getModuleById.js +7 -0
  16. package/lib/middleware/helper/getOriginalStackFrame.d.ts +6 -0
  17. package/lib/middleware/helper/getOriginalStackFrame.js +79 -0
  18. package/lib/middleware/helper/getSourceById.d.ts +6 -0
  19. package/lib/middleware/helper/getSourceById.js +129 -0
  20. package/lib/middleware/helper/getSourceMapUrl.d.ts +1 -0
  21. package/lib/middleware/helper/getSourceMapUrl.js +19 -0
  22. package/lib/middleware/helper/getSourcePath.d.ts +1 -0
  23. package/lib/middleware/helper/getSourcePath.js +17 -0
  24. package/lib/middleware/index.d.ts +2 -0
  25. package/lib/middleware/index.js +7 -0
  26. package/lib/middleware/launchEditorMiddleware.d.ts +2 -0
  27. package/lib/middleware/launchEditorMiddleware.js +35 -0
  28. package/lib/middleware/stackFrameMiddleware.d.ts +2 -0
  29. package/lib/middleware/stackFrameMiddleware.js +103 -0
  30. package/lib/view/ErrorOverlay.d.ts +2 -0
  31. package/lib/view/ErrorOverlay.js +80 -0
  32. package/lib/view/components/Dialog/Dialog.d.ts +10 -0
  33. package/lib/view/components/Dialog/Dialog.js +75 -0
  34. package/lib/view/components/Dialog/DialogBody.d.ts +7 -0
  35. package/lib/view/components/Dialog/DialogBody.js +8 -0
  36. package/lib/view/components/Dialog/DialogContent.d.ts +7 -0
  37. package/lib/view/components/Dialog/DialogContent.js +8 -0
  38. package/lib/view/components/Dialog/DialogHeader.d.ts +7 -0
  39. package/lib/view/components/Dialog/DialogHeader.js +8 -0
  40. package/lib/view/components/Dialog/index.d.ts +5 -0
  41. package/lib/view/components/Dialog/index.js +13 -0
  42. package/lib/view/components/Dialog/styles.d.ts +2 -0
  43. package/lib/view/components/Dialog/styles.js +92 -0
  44. package/lib/view/components/Errors/CallStackFrame/CallStackFrame.d.ts +10 -0
  45. package/lib/view/components/Errors/CallStackFrame/CallStackFrame.js +50 -0
  46. package/lib/view/components/Errors/CallStackFrame/index.d.ts +1 -0
  47. package/lib/view/components/Errors/CallStackFrame/index.js +5 -0
  48. package/lib/view/components/Errors/CodeFrame/CodeFrame.d.ts +7 -0
  49. package/lib/view/components/Errors/CodeFrame/CodeFrame.js +79 -0
  50. package/lib/view/components/Errors/CodeFrame/index.d.ts +1 -0
  51. package/lib/view/components/Errors/CodeFrame/index.js +5 -0
  52. package/lib/view/components/Errors/Errors.d.ts +7 -0
  53. package/lib/view/components/Errors/Errors.js +62 -0
  54. package/lib/view/components/Errors/index.d.ts +2 -0
  55. package/lib/view/components/Errors/index.js +7 -0
  56. package/lib/view/components/Errors/styles.d.ts +1 -0
  57. package/lib/view/components/Errors/styles.js +99 -0
  58. package/lib/view/components/Icons/ArrowLeftIcon.d.ts +3 -0
  59. package/lib/view/components/Icons/ArrowLeftIcon.js +8 -0
  60. package/lib/view/components/Icons/ArrowRightIcon.d.ts +3 -0
  61. package/lib/view/components/Icons/ArrowRightIcon.js +8 -0
  62. package/lib/view/components/Icons/CloseIcon.d.ts +3 -0
  63. package/lib/view/components/Icons/CloseIcon.js +8 -0
  64. package/lib/view/components/Icons/ExternalLinkIcon.d.ts +3 -0
  65. package/lib/view/components/Icons/ExternalLinkIcon.js +8 -0
  66. package/lib/view/components/Icons/WarningIcon.d.ts +3 -0
  67. package/lib/view/components/Icons/WarningIcon.js +8 -0
  68. package/lib/view/components/Icons/index.d.ts +5 -0
  69. package/lib/view/components/Icons/index.js +13 -0
  70. package/lib/view/components/NavigationBar/NavigationBar.d.ts +10 -0
  71. package/lib/view/components/NavigationBar/NavigationBar.js +108 -0
  72. package/lib/view/components/NavigationBar/index.d.ts +2 -0
  73. package/lib/view/components/NavigationBar/index.js +7 -0
  74. package/lib/view/components/NavigationBar/styles.d.ts +2 -0
  75. package/lib/view/components/NavigationBar/styles.js +62 -0
  76. package/lib/view/components/Overlay/Overlay.d.ts +8 -0
  77. package/lib/view/components/Overlay/Overlay.js +39 -0
  78. package/lib/view/components/Overlay/body-locker.d.ts +2 -0
  79. package/lib/view/components/Overlay/body-locker.js +37 -0
  80. package/lib/view/components/Overlay/index.d.ts +2 -0
  81. package/lib/view/components/Overlay/index.js +7 -0
  82. package/lib/view/components/Overlay/styles.d.ts +2 -0
  83. package/lib/view/components/Overlay/styles.js +45 -0
  84. package/lib/view/components/ShadowPortal.d.ts +5 -0
  85. package/lib/view/components/ShadowPortal.js +47 -0
  86. package/lib/view/components/Terminal/Terminal.d.ts +5 -0
  87. package/lib/view/components/Terminal/Terminal.js +47 -0
  88. package/lib/view/components/Terminal/index.d.ts +2 -0
  89. package/lib/view/components/Terminal/index.js +7 -0
  90. package/lib/view/components/Terminal/styles.d.ts +2 -0
  91. package/lib/view/components/Terminal/styles.js +31 -0
  92. package/lib/view/components/Toast/Toast.d.ts +7 -0
  93. package/lib/view/components/Toast/Toast.js +8 -0
  94. package/lib/view/components/Toast/index.d.ts +2 -0
  95. package/lib/view/components/Toast/index.js +7 -0
  96. package/lib/view/components/Toast/styles.d.ts +2 -0
  97. package/lib/view/components/Toast/styles.js +31 -0
  98. package/lib/view/container/BuildError.d.ts +6 -0
  99. package/lib/view/container/BuildError.js +55 -0
  100. package/lib/view/container/RuntimeError.d.ts +11 -0
  101. package/lib/view/container/RuntimeError.js +205 -0
  102. package/lib/view/container/index.d.ts +2 -0
  103. package/lib/view/container/index.js +7 -0
  104. package/lib/view/errorTypeHandler.d.ts +27 -0
  105. package/lib/view/errorTypeHandler.js +42 -0
  106. package/lib/view/helpers/getErrorByType.d.ts +9 -0
  107. package/lib/view/helpers/getErrorByType.js +36 -0
  108. package/lib/view/helpers/nodeStackFrames.d.ts +7 -0
  109. package/lib/view/helpers/nodeStackFrames.js +70 -0
  110. package/lib/view/helpers/noop-template.d.ts +1 -0
  111. package/lib/view/helpers/noop-template.js +9 -0
  112. package/lib/view/helpers/parseStack.d.ts +3 -0
  113. package/lib/view/helpers/parseStack.js +31 -0
  114. package/lib/view/helpers/stack-frame.d.ts +12 -0
  115. package/lib/view/helpers/stack-frame.js +60 -0
  116. package/lib/view/hooks/use-on-click-outside.d.ts +1 -0
  117. package/lib/view/hooks/use-on-click-outside.js +49 -0
  118. package/lib/view/styles/Base.d.ts +2 -0
  119. package/lib/view/styles/Base.js +84 -0
  120. package/lib/view/styles/ComponentStyles.d.ts +2 -0
  121. package/lib/view/styles/ComponentStyles.js +27 -0
  122. package/lib/view/styles/CssReset.d.ts +2 -0
  123. package/lib/view/styles/CssReset.js +361 -0
  124. package/lib/view/styles/index.d.ts +3 -0
  125. package/lib/view/styles/index.js +9 -0
  126. package/package.json +50 -0
  127. package/umd/client.d.ts +15 -0
  128. package/umd/constants.d.ts +7 -0
  129. package/umd/iframeScript.d.ts +1 -0
  130. package/umd/index.d.ts +2 -0
  131. package/umd/index.js +471 -0
  132. package/umd/middleware/helper/createOriginalStackFrame.d.ts +15 -0
  133. package/umd/middleware/helper/findOriginalSourcePositionAndContent.d.ts +7 -0
  134. package/umd/middleware/helper/getModuleById.d.ts +2 -0
  135. package/umd/middleware/helper/getOriginalStackFrame.d.ts +6 -0
  136. package/umd/middleware/helper/getSourceById.d.ts +6 -0
  137. package/umd/middleware/helper/getSourceMapUrl.d.ts +1 -0
  138. package/umd/middleware/helper/getSourcePath.d.ts +1 -0
  139. package/umd/middleware/helper/index.d.ts +5 -0
  140. package/umd/middleware/index.d.ts +2 -0
  141. package/umd/middleware/launchEditorMiddleware.d.ts +2 -0
  142. package/umd/middleware/stackFrameMiddleware.d.ts +2 -0
  143. package/umd/view/ErrorOverlay.d.ts +2 -0
  144. package/umd/view/components/Dialog/Dialog.d.ts +10 -0
  145. package/umd/view/components/Dialog/DialogBody.d.ts +7 -0
  146. package/umd/view/components/Dialog/DialogContent.d.ts +7 -0
  147. package/umd/view/components/Dialog/DialogHeader.d.ts +7 -0
  148. package/umd/view/components/Dialog/index.d.ts +5 -0
  149. package/umd/view/components/Dialog/styles.d.ts +2 -0
  150. package/umd/view/components/Errors/CallStackFrame/CallStackFrame.d.ts +10 -0
  151. package/umd/view/components/Errors/CallStackFrame/index.d.ts +1 -0
  152. package/umd/view/components/Errors/CodeFrame/CodeFrame.d.ts +7 -0
  153. package/umd/view/components/Errors/CodeFrame/index.d.ts +1 -0
  154. package/umd/view/components/Errors/Errors.d.ts +7 -0
  155. package/umd/view/components/Errors/index.d.ts +2 -0
  156. package/umd/view/components/Errors/styles.d.ts +1 -0
  157. package/umd/view/components/Icons/ArrowLeftIcon.d.ts +3 -0
  158. package/umd/view/components/Icons/ArrowRightIcon.d.ts +3 -0
  159. package/umd/view/components/Icons/CloseIcon.d.ts +3 -0
  160. package/umd/view/components/Icons/ExternalLinkIcon.d.ts +3 -0
  161. package/umd/view/components/Icons/WarningIcon.d.ts +3 -0
  162. package/umd/view/components/Icons/index.d.ts +5 -0
  163. package/umd/view/components/NavigationBar/NavigationBar.d.ts +10 -0
  164. package/umd/view/components/NavigationBar/index.d.ts +2 -0
  165. package/umd/view/components/NavigationBar/styles.d.ts +2 -0
  166. package/umd/view/components/Overlay/Overlay.d.ts +8 -0
  167. package/umd/view/components/Overlay/body-locker.d.ts +2 -0
  168. package/umd/view/components/Overlay/index.d.ts +2 -0
  169. package/umd/view/components/Overlay/styles.d.ts +2 -0
  170. package/umd/view/components/ShadowPortal.d.ts +5 -0
  171. package/umd/view/components/Terminal/Terminal.d.ts +5 -0
  172. package/umd/view/components/Terminal/index.d.ts +2 -0
  173. package/umd/view/components/Terminal/styles.d.ts +2 -0
  174. package/umd/view/components/Toast/Toast.d.ts +7 -0
  175. package/umd/view/components/Toast/index.d.ts +2 -0
  176. package/umd/view/components/Toast/styles.d.ts +2 -0
  177. package/umd/view/container/BuildError.d.ts +6 -0
  178. package/umd/view/container/RuntimeError.d.ts +11 -0
  179. package/umd/view/container/index.d.ts +2 -0
  180. package/umd/view/errorTypeHandler.d.ts +27 -0
  181. package/umd/view/helpers/getErrorByType.d.ts +9 -0
  182. package/umd/view/helpers/nodeStackFrames.d.ts +7 -0
  183. package/umd/view/helpers/noop-template.d.ts +1 -0
  184. package/umd/view/helpers/parseStack.d.ts +3 -0
  185. package/umd/view/helpers/stack-frame.d.ts +12 -0
  186. package/umd/view/hooks/use-on-click-outside.d.ts +1 -0
  187. package/umd/view/styles/Base.d.ts +2 -0
  188. package/umd/view/styles/ComponentStyles.d.ts +2 -0
  189. package/umd/view/styles/CssReset.d.ts +2 -0
  190. package/umd/view/styles/index.d.ts +3 -0
@@ -0,0 +1,15 @@
1
+ declare global {
2
+ interface Window {
3
+ __SHUVI_ERROR_OVERLAY_GLOBAL_HOOK__: string | {};
4
+ }
5
+ }
6
+ declare function startReportingRuntimeErrors({ onError }: {
7
+ onError: () => void;
8
+ }): void;
9
+ declare function stopReportingRuntimeErrors(): void;
10
+ declare function onBuildOk(): void;
11
+ declare function onBuildError(message: string): void;
12
+ declare function onRefresh(): void;
13
+ export { getErrorByType } from './view/helpers/getErrorByType';
14
+ export { getServerError } from './view/helpers/nodeStackFrames';
15
+ export { onBuildError, onBuildOk, onRefresh, startReportingRuntimeErrors, stopReportingRuntimeErrors };
package/lib/client.js ADDED
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.stopReportingRuntimeErrors = exports.startReportingRuntimeErrors = exports.onRefresh = exports.onBuildOk = exports.onBuildError = exports.getServerError = exports.getErrorByType = void 0;
7
+ const iframeScript_1 = __importDefault(require("iframeScript"));
8
+ const constants_1 = require("./constants");
9
+ const parseStack_1 = require("./view/helpers/parseStack");
10
+ let isRegistered = false;
11
+ let stackTraceLimit = undefined;
12
+ let iframe = null;
13
+ let isLoadingIframe = false;
14
+ let isIframeReady = false;
15
+ let errorType;
16
+ let hasBuildError = false;
17
+ let hasRuntimeError = false;
18
+ const iframeStyle = {
19
+ position: 'fixed',
20
+ top: '0',
21
+ left: '0',
22
+ width: '100%',
23
+ height: '100%',
24
+ border: 'none',
25
+ 'z-index': 2147483647
26
+ };
27
+ function onUnhandledError(ev) {
28
+ const error = ev === null || ev === void 0 ? void 0 : ev.error;
29
+ if (!error || !(error instanceof Error) || typeof error.stack !== 'string') {
30
+ // A non-error was thrown, we don't have anything to show.
31
+ return;
32
+ }
33
+ hasRuntimeError = true;
34
+ errorType = {
35
+ type: constants_1.TYPE_UNHANDLED_ERROR,
36
+ reason: error,
37
+ frames: (0, parseStack_1.parseStack)(error.stack)
38
+ };
39
+ update();
40
+ }
41
+ function onUnhandledRejection(ev) {
42
+ const reason = ev === null || ev === void 0 ? void 0 : ev.reason;
43
+ if (!reason ||
44
+ !(reason instanceof Error) ||
45
+ typeof reason.stack !== 'string') {
46
+ // A non-error was thrown, we don't have anything to show.
47
+ return;
48
+ }
49
+ hasRuntimeError = true;
50
+ errorType = {
51
+ type: constants_1.TYPE_UNHANDLED_REJECTION,
52
+ reason: reason,
53
+ frames: (0, parseStack_1.parseStack)(reason.stack)
54
+ };
55
+ update();
56
+ }
57
+ function startReportingRuntimeErrors({ onError }) {
58
+ if (isRegistered) {
59
+ return;
60
+ }
61
+ isRegistered = true;
62
+ try {
63
+ const limit = Error.stackTraceLimit;
64
+ Error.stackTraceLimit = constants_1.STACK_TRACE_LIMIT;
65
+ stackTraceLimit = limit;
66
+ }
67
+ catch (_a) { }
68
+ window.addEventListener('error', ev => {
69
+ onError();
70
+ onUnhandledError(ev);
71
+ });
72
+ window.addEventListener('unhandledrejection', ev => {
73
+ onError();
74
+ onUnhandledRejection(ev);
75
+ });
76
+ }
77
+ exports.startReportingRuntimeErrors = startReportingRuntimeErrors;
78
+ function stopReportingRuntimeErrors() {
79
+ if (!isRegistered) {
80
+ return;
81
+ }
82
+ isRegistered = false;
83
+ if (stackTraceLimit !== undefined) {
84
+ try {
85
+ Error.stackTraceLimit = stackTraceLimit;
86
+ }
87
+ catch (_a) { }
88
+ stackTraceLimit = undefined;
89
+ }
90
+ hasRuntimeError = false;
91
+ window.removeEventListener('error', onUnhandledError);
92
+ window.removeEventListener('unhandledrejection', onUnhandledRejection);
93
+ }
94
+ exports.stopReportingRuntimeErrors = stopReportingRuntimeErrors;
95
+ function onBuildOk() {
96
+ hasBuildError = false;
97
+ errorType = { type: constants_1.TYPE_BUILD_OK };
98
+ update();
99
+ }
100
+ exports.onBuildOk = onBuildOk;
101
+ function onBuildError(message) {
102
+ hasBuildError = true;
103
+ errorType = { type: constants_1.TYPE_BUILD_ERROR, message };
104
+ update();
105
+ }
106
+ exports.onBuildError = onBuildError;
107
+ function onRefresh() {
108
+ errorType = { type: constants_1.TYPE_REFRESH };
109
+ }
110
+ exports.onRefresh = onRefresh;
111
+ function applyStyles(element, styles) {
112
+ element.setAttribute('style', '');
113
+ for (const key in styles) {
114
+ if (!Object.prototype.hasOwnProperty.call(styles, key)) {
115
+ continue;
116
+ }
117
+ //@ts-ignore
118
+ element.style[key] = styles[key];
119
+ }
120
+ }
121
+ function update() {
122
+ // Loading iframe can be either sync or async depending on the browser.
123
+ if (isLoadingIframe) {
124
+ // Iframe is loading.
125
+ // First render will happen soon--don't need to do anything.
126
+ return;
127
+ }
128
+ if (isIframeReady) {
129
+ // Iframe is ready.
130
+ // Just update it.
131
+ updateIframeContent();
132
+ return;
133
+ }
134
+ // We need to schedule the first render.
135
+ isLoadingIframe = true;
136
+ const loadingIframe = window.document.createElement('iframe');
137
+ applyStyles(loadingIframe, iframeStyle);
138
+ loadingIframe.onload = function () {
139
+ const iframeDocument = loadingIframe.contentDocument;
140
+ if (iframeDocument != null && iframeDocument.body != null) {
141
+ iframe = loadingIframe;
142
+ const script = loadingIframe.contentWindow.document.createElement('script');
143
+ script.type = 'text/javascript';
144
+ script.innerHTML = iframeScript_1.default;
145
+ iframeDocument.body.appendChild(script);
146
+ }
147
+ };
148
+ const appDocument = window.document;
149
+ appDocument.body.appendChild(loadingIframe);
150
+ }
151
+ function updateIframeContent() {
152
+ if (!iframe) {
153
+ throw new Error('Iframe has not been created yet.');
154
+ }
155
+ //@ts-ignore
156
+ const isRendered = iframe.contentWindow.updateContent({
157
+ errorType,
158
+ hasBuildError,
159
+ hasRuntimeError
160
+ });
161
+ if (!isRendered) {
162
+ window.document.body.removeChild(iframe);
163
+ iframe = null;
164
+ isIframeReady = false;
165
+ }
166
+ }
167
+ window.__SHUVI_ERROR_OVERLAY_GLOBAL_HOOK__ =
168
+ window.__SHUVI_ERROR_OVERLAY_GLOBAL_HOOK__ || {};
169
+ //@ts-ignore
170
+ window.__SHUVI_ERROR_OVERLAY_GLOBAL_HOOK__.iframeReady =
171
+ function iframeReady() {
172
+ isIframeReady = true;
173
+ isLoadingIframe = false;
174
+ updateIframeContent();
175
+ };
176
+ var getErrorByType_1 = require("./view/helpers/getErrorByType");
177
+ Object.defineProperty(exports, "getErrorByType", { enumerable: true, get: function () { return getErrorByType_1.getErrorByType; } });
178
+ var nodeStackFrames_1 = require("./view/helpers/nodeStackFrames");
179
+ Object.defineProperty(exports, "getServerError", { enumerable: true, get: function () { return nodeStackFrames_1.getServerError; } });
@@ -0,0 +1,7 @@
1
+ export declare const SERVER_TYPE_ERROR = "server";
2
+ export declare const TYPE_BUILD_OK = "build-ok";
3
+ export declare const TYPE_REFRESH = "fast-refresh";
4
+ export declare const TYPE_BUILD_ERROR = "build-error";
5
+ export declare const TYPE_UNHANDLED_ERROR = "unhandled-error";
6
+ export declare const TYPE_UNHANDLED_REJECTION = "unhandled-rejection";
7
+ export declare const STACK_TRACE_LIMIT = 50;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STACK_TRACE_LIMIT = exports.TYPE_UNHANDLED_REJECTION = exports.TYPE_UNHANDLED_ERROR = exports.TYPE_BUILD_ERROR = exports.TYPE_REFRESH = exports.TYPE_BUILD_OK = exports.SERVER_TYPE_ERROR = void 0;
4
+ exports.SERVER_TYPE_ERROR = 'server';
5
+ exports.TYPE_BUILD_OK = 'build-ok';
6
+ exports.TYPE_REFRESH = 'fast-refresh';
7
+ exports.TYPE_BUILD_ERROR = 'build-error';
8
+ exports.TYPE_UNHANDLED_ERROR = 'unhandled-error';
9
+ exports.TYPE_UNHANDLED_REJECTION = 'unhandled-rejection';
10
+ exports.STACK_TRACE_LIMIT = 50;