@shuvi/error-overlay 1.0.0-rc.6

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 +168 -0
  3. package/lib/constants.d.ts +7 -0
  4. package/lib/constants.js +10 -0
  5. package/lib/iframe-bundle.js +2629 -0
  6. package/lib/iframeScript.d.ts +1 -0
  7. package/lib/iframeScript.js +66 -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 +460 -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,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ShadowPortal = void 0;
27
+ const jsx_runtime_1 = require("react/jsx-runtime");
28
+ const React = __importStar(require("react"));
29
+ const react_dom_1 = require("react-dom");
30
+ const ShadowPortal = function Portal({ children }) {
31
+ let portalNode = React.useRef(null);
32
+ let shadowNode = React.useRef(null);
33
+ let [, forceUpdate] = React.useState();
34
+ React.useEffect(() => {
35
+ portalNode.current = document.createElement('shuvi-portal');
36
+ shadowNode.current = portalNode.current.attachShadow({ mode: 'open' });
37
+ document.body.appendChild(portalNode.current);
38
+ forceUpdate({});
39
+ return () => {
40
+ if (portalNode.current && portalNode.current.ownerDocument) {
41
+ portalNode.current.ownerDocument.body.removeChild(portalNode.current);
42
+ }
43
+ };
44
+ }, []);
45
+ return shadowNode.current ? ((0, react_dom_1.createPortal)(children, shadowNode.current)) : ((0, jsx_runtime_1.jsx)("span", {}));
46
+ };
47
+ exports.ShadowPortal = ShadowPortal;
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export declare type TerminalProps = {
3
+ content: string;
4
+ };
5
+ export declare const Terminal: React.FC<TerminalProps>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Terminal = void 0;
30
+ const jsx_runtime_1 = require("react/jsx-runtime");
31
+ const anser_1 = __importDefault(require("anser"));
32
+ const React = __importStar(require("react"));
33
+ const Terminal = function Terminal({ content }) {
34
+ const decoded = React.useMemo(() => {
35
+ return anser_1.default.ansiToJson(content, {
36
+ json: true,
37
+ use_classes: true,
38
+ remove_empty: true
39
+ });
40
+ }, [content]);
41
+ return ((0, jsx_runtime_1.jsx)("div", Object.assign({ "data-terminal": true }, { children: (0, jsx_runtime_1.jsx)("pre", { children: decoded.map((entry, index) => ((0, jsx_runtime_1.jsx)("span", Object.assign({ style: Object.assign({ color: entry.fg ? `var(--color-${entry.fg})` : undefined }, (entry.decoration === 'bold'
42
+ ? { fontWeight: 800 }
43
+ : entry.decoration === 'italic'
44
+ ? { fontStyle: 'italic' }
45
+ : undefined)) }, { children: entry.content }), `terminal-entry-${index}`))) }) })));
46
+ };
47
+ exports.Terminal = Terminal;
@@ -0,0 +1,2 @@
1
+ export { Terminal } from './Terminal';
2
+ export { styles } from './styles';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.styles = exports.Terminal = void 0;
4
+ var Terminal_1 = require("./Terminal");
5
+ Object.defineProperty(exports, "Terminal", { enumerable: true, get: function () { return Terminal_1.Terminal; } });
6
+ var styles_1 = require("./styles");
7
+ Object.defineProperty(exports, "styles", { enumerable: true, get: function () { return styles_1.styles; } });
@@ -0,0 +1,2 @@
1
+ declare const styles: string;
2
+ export { styles };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.styles = void 0;
4
+ const noop_template_1 = require("../../helpers/noop-template");
5
+ const styles = (0, noop_template_1.noop) `
6
+ [data-terminal] {
7
+ border-radius: var(--size-gap-half);
8
+ background-color: var(--color-ansi-bg);
9
+ color: var(--color-ansi-fg);
10
+ }
11
+ [data-terminal]::selection,
12
+ [data-terminal] *::selection {
13
+ background-color: var(--color-ansi-selection);
14
+ }
15
+ [data-terminal] * {
16
+ color: inherit;
17
+ background-color: transparent;
18
+ font-family: var(--font-stack-monospace);
19
+ }
20
+ [data-terminal] > * {
21
+ margin: 0;
22
+ padding: calc(var(--size-gap) + var(--size-gap-half))
23
+ calc(var(--size-gap-double) + var(--size-gap-half));
24
+ }
25
+
26
+ [data-terminal] pre {
27
+ white-space: pre-wrap;
28
+ word-break: break-word;
29
+ }
30
+ `;
31
+ exports.styles = styles;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ export declare type ToastProps = {
3
+ onClick?: (ev: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
4
+ className?: string;
5
+ children: React.ReactNode;
6
+ };
7
+ export declare const Toast: React.FC<ToastProps>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Toast = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const Toast = function Toast({ onClick, children, className }) {
6
+ return ((0, jsx_runtime_1.jsx)("div", Object.assign({ "data-toast": true, onClick: onClick, className: className }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ "data-toast-wrapper": true }, { children: children })) })));
7
+ };
8
+ exports.Toast = Toast;
@@ -0,0 +1,2 @@
1
+ export { Toast } from './Toast';
2
+ export { styles } from './styles';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.styles = exports.Toast = void 0;
4
+ var Toast_1 = require("./Toast");
5
+ Object.defineProperty(exports, "Toast", { enumerable: true, get: function () { return Toast_1.Toast; } });
6
+ var styles_1 = require("./styles");
7
+ Object.defineProperty(exports, "styles", { enumerable: true, get: function () { return styles_1.styles; } });
@@ -0,0 +1,2 @@
1
+ declare const styles: string;
2
+ export { styles };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.styles = void 0;
4
+ const noop_template_1 = require("../../helpers/noop-template");
5
+ const styles = (0, noop_template_1.noop) `
6
+ [data-toast] {
7
+ position: fixed;
8
+ bottom: var(--size-gap-double);
9
+ left: var(--size-gap-double);
10
+ max-width: 420px;
11
+ z-index: 9000;
12
+ }
13
+
14
+ @media (max-width: 440px) {
15
+ [data-toast] {
16
+ max-width: 90vw;
17
+ left: 5vw;
18
+ }
19
+ }
20
+
21
+ [data-toast-wrapper] {
22
+ padding: 16px;
23
+ border-radius: var(--size-gap-half);
24
+ font-weight: 500;
25
+ color: var(--color-ansi-bright-white);
26
+ background-color: var(--color-ansi-red);
27
+ box-shadow: 0px var(--size-gap-double) var(--size-gap-quad)
28
+ rgba(0, 0, 0, 0.25);
29
+ }
30
+ `;
31
+ exports.styles = styles;
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ export declare type BuildErrorProps = {
3
+ error: string;
4
+ };
5
+ export declare const BuildError: React.FC<BuildErrorProps>;
6
+ export declare const styles: string;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.styles = exports.BuildError = void 0;
27
+ const jsx_runtime_1 = require("react/jsx-runtime");
28
+ const React = __importStar(require("react"));
29
+ const Dialog_1 = require("../components/Dialog");
30
+ const Overlay_1 = require("../components/Overlay");
31
+ const Terminal_1 = require("../components/Terminal");
32
+ const noop_template_1 = require("../helpers/noop-template");
33
+ const BuildError = function BuildError({ error }) {
34
+ const noop = React.useCallback(() => { }, []);
35
+ return ((0, jsx_runtime_1.jsx)(Overlay_1.Overlay, Object.assign({ fixed: true }, { children: (0, jsx_runtime_1.jsx)(Dialog_1.Dialog, Object.assign({ type: "error", onClose: noop, "aria-labelledby": "build_error_label", "aria-describedby": "build_error_desc" }, { children: (0, jsx_runtime_1.jsxs)(Dialog_1.DialogContent, { children: [(0, jsx_runtime_1.jsx)(Dialog_1.DialogHeader, Object.assign({ className: "container-build-error-header" }, { children: (0, jsx_runtime_1.jsx)("h4", { children: "Failed to compile" }) })), (0, jsx_runtime_1.jsxs)(Dialog_1.DialogBody, Object.assign({ className: "container-build-error-body" }, { children: [(0, jsx_runtime_1.jsx)(Terminal_1.Terminal, { content: error }), (0, jsx_runtime_1.jsx)("footer", { children: (0, jsx_runtime_1.jsx)("small", { children: "This error occurred during the build process and can only be dismissed by fixing the error." }) })] }))] }) })) })));
36
+ };
37
+ exports.BuildError = BuildError;
38
+ exports.styles = (0, noop_template_1.noop) `
39
+ .container-build-error-header > h4 {
40
+ line-height: 1.5;
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ .container-build-error-body footer {
46
+ margin-top: var(--size-gap);
47
+ }
48
+ .container-build-error-body footer p {
49
+ margin: 0;
50
+ }
51
+
52
+ .container-build-error-body small {
53
+ color: #757575;
54
+ }
55
+ `;
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ import { UnhandledError, UnhandledRejection } from '../errorTypeHandler';
3
+ export declare type SupportedErrorEvent = {
4
+ id: number;
5
+ event: UnhandledError | UnhandledRejection;
6
+ };
7
+ export declare type RuntimeErrorProps = {
8
+ errors: SupportedErrorEvent[];
9
+ };
10
+ export declare const RuntimeError: React.FC<RuntimeErrorProps>;
11
+ export declare const styles: string;
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.styles = exports.RuntimeError = void 0;
27
+ const jsx_runtime_1 = require("react/jsx-runtime");
28
+ const React = __importStar(require("react"));
29
+ const Dialog_1 = require("../components/Dialog");
30
+ const NavigationBar_1 = require("../components/NavigationBar");
31
+ const Overlay_1 = require("../components/Overlay");
32
+ const Toast_1 = require("../components/Toast");
33
+ const getErrorByType_1 = require("../helpers/getErrorByType");
34
+ const nodeStackFrames_1 = require("../helpers/nodeStackFrames");
35
+ const noop_template_1 = require("../helpers/noop-template");
36
+ const Icons_1 = require("../components/Icons");
37
+ const Errors_1 = require("../components/Errors");
38
+ const constants_1 = require("../../constants");
39
+ function getErrorSignature(ev) {
40
+ const { event } = ev;
41
+ switch (event.type) {
42
+ case constants_1.TYPE_UNHANDLED_ERROR:
43
+ case constants_1.TYPE_UNHANDLED_REJECTION: {
44
+ return `${event.reason.name}::${event.reason.message}::${event.reason.stack}`;
45
+ }
46
+ default: {
47
+ }
48
+ }
49
+ return '';
50
+ }
51
+ const RuntimeError = function RuntimeError({ errors }) {
52
+ const [lookups, setLookups] = React.useState({});
53
+ const [readyErrors, nextError] = React.useMemo(() => {
54
+ let ready = [];
55
+ let next = null;
56
+ // Ensure errors are displayed in the order they occurred in:
57
+ for (let idx = 0; idx < errors.length; ++idx) {
58
+ const e = errors[idx];
59
+ const { id } = e;
60
+ if (id in lookups) {
61
+ ready.push(lookups[id]);
62
+ continue;
63
+ }
64
+ // Check for duplicate errors
65
+ if (idx > 0) {
66
+ const prev = errors[idx - 1];
67
+ if (getErrorSignature(prev) === getErrorSignature(e)) {
68
+ continue;
69
+ }
70
+ }
71
+ next = e;
72
+ break;
73
+ }
74
+ return [ready, next];
75
+ }, [errors, lookups]);
76
+ const isLoading = React.useMemo(() => {
77
+ return readyErrors.length < 1 && Boolean(errors.length);
78
+ }, [errors.length, readyErrors.length]);
79
+ React.useEffect(() => {
80
+ if (nextError == null) {
81
+ return;
82
+ }
83
+ let mounted = true;
84
+ (0, getErrorByType_1.getErrorByType)(nextError).then(resolved => {
85
+ // We don't care if the desired error changed while we were resolving,
86
+ // thus we're not tracking it using a ref. Once the work has been done,
87
+ // we'll store it.
88
+ if (mounted) {
89
+ setLookups(m => (Object.assign(Object.assign({}, m), { [resolved.id]: resolved })));
90
+ }
91
+ });
92
+ return () => {
93
+ mounted = false;
94
+ };
95
+ }, [nextError]);
96
+ const [displayState, setDisplayState] = React.useState('fullscreen');
97
+ const [activeIdx, setActiveIndex] = React.useState(0);
98
+ const previous = React.useCallback((e) => {
99
+ e === null || e === void 0 ? void 0 : e.preventDefault();
100
+ setActiveIndex(v => Math.max(0, v - 1));
101
+ }, []);
102
+ const next = React.useCallback((e) => {
103
+ e === null || e === void 0 ? void 0 : e.preventDefault();
104
+ setActiveIndex(v => Math.max(0, Math.min(readyErrors.length - 1, v + 1)));
105
+ }, [readyErrors.length]);
106
+ const activeError = React.useMemo(() => { var _a; return (_a = readyErrors[activeIdx]) !== null && _a !== void 0 ? _a : null; }, [activeIdx, readyErrors]);
107
+ const minimize = React.useCallback((e) => {
108
+ e === null || e === void 0 ? void 0 : e.preventDefault();
109
+ setDisplayState('minimized');
110
+ }, []);
111
+ const hide = React.useCallback((e) => {
112
+ e === null || e === void 0 ? void 0 : e.preventDefault();
113
+ setDisplayState('hidden');
114
+ }, []);
115
+ const fullscreen = React.useCallback((e) => {
116
+ e === null || e === void 0 ? void 0 : e.preventDefault();
117
+ setDisplayState('fullscreen');
118
+ }, []);
119
+ if (isLoading) {
120
+ return (0, jsx_runtime_1.jsx)(Overlay_1.Overlay, {});
121
+ }
122
+ if (errors.length < 1 || activeError == null || displayState === 'hidden') {
123
+ return null;
124
+ }
125
+ if (displayState === 'minimized') {
126
+ return ((0, jsx_runtime_1.jsx)(Toast_1.Toast, Object.assign({ className: "shuvi-toast-errors-parent", onClick: fullscreen }, { children: (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "shuvi-toast-errors" }, { children: [(0, jsx_runtime_1.jsx)(Icons_1.WarningIcon, {}), (0, jsx_runtime_1.jsxs)("span", { children: [readyErrors.length, " error", readyErrors.length > 1 ? 's' : ''] }), (0, jsx_runtime_1.jsx)("button", Object.assign({ "data-shuvi-toast-errors-hide-button": true, className: "shuvi-toast-errors-hide-button", type: "button", onClick: e => {
127
+ e.stopPropagation();
128
+ hide();
129
+ }, "aria-label": "Hide Errors" }, { children: (0, jsx_runtime_1.jsx)(Icons_1.CloseIcon, {}) }))] })) })));
130
+ }
131
+ const isServerError = (0, nodeStackFrames_1.getErrorSource)(activeError.error) === constants_1.SERVER_TYPE_ERROR;
132
+ return ((0, jsx_runtime_1.jsx)(Overlay_1.Overlay, { children: (0, jsx_runtime_1.jsx)(Dialog_1.Dialog, Object.assign({ type: "error", "aria-labelledby": "shuvi__container_errors_label", "aria-describedby": "shuvi__container_errors_desc", onClose: isServerError ? undefined : minimize }, { children: (0, jsx_runtime_1.jsxs)(Dialog_1.DialogContent, { children: [(0, jsx_runtime_1.jsxs)(Dialog_1.DialogHeader, Object.assign({ className: "shuvi-container-errors-header" }, { children: [(0, jsx_runtime_1.jsx)(NavigationBar_1.NavigationBar, Object.assign({ previous: activeIdx > 0 ? previous : null, next: activeIdx < readyErrors.length - 1 ? next : null, close: isServerError ? undefined : minimize }, { children: (0, jsx_runtime_1.jsxs)("small", { children: [(0, jsx_runtime_1.jsx)("span", { children: activeIdx + 1 }), " of", ' ', (0, jsx_runtime_1.jsx)("span", { children: readyErrors.length }), " runtime error", readyErrors.length < 2 ? '' : 's'] }) })), (0, jsx_runtime_1.jsx)("h1", Object.assign({ id: "shuvi__container_errors_label" }, { children: isServerError
133
+ ? 'Server Runtime Error'
134
+ : 'Unhandled Runtime Error' })), (0, jsx_runtime_1.jsxs)("p", Object.assign({ id: "shuvi__container_errors_desc" }, { children: [activeError.error.name, ": ", activeError.error.message] })), isServerError ? ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("small", { children: "This error happened while generating the page. Any console logs will be displayed in the terminal window." }) })) : undefined] })), (0, jsx_runtime_1.jsx)(Dialog_1.DialogBody, Object.assign({ className: "shuvi-container-errors-body" }, { children: (0, jsx_runtime_1.jsx)(Errors_1.Errors, { error: activeError }, activeError.id.toString()) }))] }) })) }));
135
+ };
136
+ exports.RuntimeError = RuntimeError;
137
+ exports.styles = (0, noop_template_1.noop) `
138
+ .shuvi-container-errors-header > h1 {
139
+ font-size: var(--size-font-big);
140
+ line-height: var(--size-font-bigger);
141
+ font-weight: bold;
142
+ margin: 0;
143
+ margin-top: calc(var(--size-gap-double) + var(--size-gap-half));
144
+ }
145
+ .shuvi-container-errors-header small {
146
+ font-size: var(--size-font-small);
147
+ color: var(--color-accents-1);
148
+ margin-left: var(--size-gap-double);
149
+ }
150
+ .shuvi-container-errors-header small > span {
151
+ font-family: var(--font-stack-monospace);
152
+ }
153
+ .shuvi-container-errors-header > p {
154
+ font-family: var(--font-stack-monospace);
155
+ font-size: var(--size-font-small);
156
+ line-height: var(--size-font-big);
157
+ font-weight: bold;
158
+ margin: 0;
159
+ margin-top: var(--size-gap-half);
160
+ color: var(--color-ansi-red);
161
+ white-space: pre-wrap;
162
+ }
163
+ .shuvi-container-errors-header > div > small {
164
+ margin: 0;
165
+ margin-top: var(--size-gap-half);
166
+ }
167
+ .shuvi-container-errors-header > p > a {
168
+ color: var(--color-ansi-red);
169
+ }
170
+
171
+ .shuvi-container-errors-body > h5:not(:first-child) {
172
+ margin-top: calc(var(--size-gap-double) + var(--size-gap));
173
+ }
174
+ .shuvi-container-errors-body > h5 {
175
+ margin-bottom: var(--size-gap);
176
+ }
177
+
178
+ .shuvi-toast-errors-parent {
179
+ cursor: pointer;
180
+ transition: transform 0.2s ease;
181
+ }
182
+ .shuvi-toast-errors-parent:hover {
183
+ transform: scale(1.1);
184
+ }
185
+ .shuvi-toast-errors {
186
+ display: flex;
187
+ align-items: center;
188
+ justify-content: flex-start;
189
+ }
190
+ .shuvi-toast-errors > svg {
191
+ margin-right: var(--size-gap);
192
+ }
193
+ .shuvi-toast-errors-hide-button {
194
+ margin-left: var(--size-gap-triple);
195
+ border: none;
196
+ background: none;
197
+ color: var(--color-ansi-bright-white);
198
+ padding: 0;
199
+ transition: opacity 0.25s ease;
200
+ opacity: 0.7;
201
+ }
202
+ .shuvi-toast-errors-hide-button:hover {
203
+ opacity: 1;
204
+ }
205
+ `;
@@ -0,0 +1,2 @@
1
+ export { BuildError } from './BuildError';
2
+ export { RuntimeError } from './RuntimeError';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuntimeError = exports.BuildError = void 0;
4
+ var BuildError_1 = require("./BuildError");
5
+ Object.defineProperty(exports, "BuildError", { enumerable: true, get: function () { return BuildError_1.BuildError; } });
6
+ var RuntimeError_1 = require("./RuntimeError");
7
+ Object.defineProperty(exports, "RuntimeError", { enumerable: true, get: function () { return RuntimeError_1.RuntimeError; } });
@@ -0,0 +1,27 @@
1
+ import { StackFrame } from 'stacktrace-parser';
2
+ import { TYPE_BUILD_OK, TYPE_REFRESH, TYPE_BUILD_ERROR, TYPE_UNHANDLED_ERROR, TYPE_UNHANDLED_REJECTION } from '../constants';
3
+ export declare type BuildOk = {
4
+ type: typeof TYPE_BUILD_OK;
5
+ };
6
+ export declare type FastRefresh = {
7
+ type: typeof TYPE_REFRESH;
8
+ };
9
+ export declare type BuildError = {
10
+ type: typeof TYPE_BUILD_ERROR;
11
+ message: string;
12
+ };
13
+ export declare type UnhandledError = {
14
+ type: typeof TYPE_UNHANDLED_ERROR;
15
+ reason: Error;
16
+ frames: StackFrame[];
17
+ };
18
+ export declare type UnhandledRejection = {
19
+ type: typeof TYPE_UNHANDLED_REJECTION;
20
+ reason: Error;
21
+ frames: StackFrame[];
22
+ };
23
+ export declare type ErrorTypeEvent = BuildOk | FastRefresh | BuildError | UnhandledError | UnhandledRejection;
24
+ export declare type ErrorTypeEventHandler = (ev: ErrorTypeEvent) => void;
25
+ export declare function emit(ev: ErrorTypeEvent): void;
26
+ export declare function on(fn: ErrorTypeEventHandler): boolean;
27
+ export declare function off(fn: ErrorTypeEventHandler): boolean;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.off = exports.on = exports.emit = void 0;
4
+ let handlers = new Set();
5
+ let queue = [];
6
+ function drain() {
7
+ // Draining should never happen synchronously in case multiple handlers are
8
+ // registered.
9
+ setTimeout(function () {
10
+ while (
11
+ // Until we are out of events:
12
+ Boolean(queue.length) &&
13
+ // Or, if all handlers removed themselves as a result of handling the
14
+ // event(s)
15
+ Boolean(handlers.size)) {
16
+ const ev = queue.shift();
17
+ handlers.forEach(handler => handler(ev));
18
+ }
19
+ }, 1);
20
+ }
21
+ function emit(ev) {
22
+ queue.push(Object.freeze(Object.assign({}, ev)));
23
+ drain();
24
+ }
25
+ exports.emit = emit;
26
+ function on(fn) {
27
+ if (handlers.has(fn)) {
28
+ return false;
29
+ }
30
+ handlers.add(fn);
31
+ drain();
32
+ return true;
33
+ }
34
+ exports.on = on;
35
+ function off(fn) {
36
+ if (handlers.has(fn)) {
37
+ handlers.delete(fn);
38
+ return true;
39
+ }
40
+ return false;
41
+ }
42
+ exports.off = off;
@@ -0,0 +1,9 @@
1
+ import { SupportedErrorEvent } from '../container/RuntimeError';
2
+ import { OriginalStackFrame } from './stack-frame';
3
+ export declare type ReadyRuntimeError = {
4
+ id: number;
5
+ runtime: true;
6
+ error: Error;
7
+ frames: OriginalStackFrame[];
8
+ };
9
+ export declare function getErrorByType(ev: SupportedErrorEvent): Promise<ReadyRuntimeError>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getErrorByType = void 0;
13
+ const constants_1 = require("../../constants");
14
+ const nodeStackFrames_1 = require("./nodeStackFrames");
15
+ const stack_frame_1 = require("./stack-frame");
16
+ function getErrorByType(ev) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ const { id, event } = ev;
19
+ switch (event.type) {
20
+ case constants_1.TYPE_UNHANDLED_ERROR:
21
+ case constants_1.TYPE_UNHANDLED_REJECTION: {
22
+ return {
23
+ id,
24
+ runtime: true,
25
+ error: event.reason,
26
+ frames: yield (0, stack_frame_1.getOriginalStackFrames)(event.frames, (0, nodeStackFrames_1.getErrorSource)(event.reason), event.reason.toString())
27
+ };
28
+ }
29
+ default: {
30
+ break;
31
+ }
32
+ }
33
+ throw new Error('type system invariant violation');
34
+ });
35
+ }
36
+ exports.getErrorByType = getErrorByType;
@@ -0,0 +1,7 @@
1
+ import { StackFrame } from 'stacktrace-parser';
2
+ declare type ErrorType = 'server';
3
+ export declare function getFilesystemFrame(frame: StackFrame): StackFrame;
4
+ export declare function decorateServerError(error: Error): void;
5
+ export declare function getServerError(error: Error): Error;
6
+ export declare function getErrorSource(error: Error): ErrorType | null;
7
+ export {};